From 234773e99218ccc16aefc10a07a10917dced1a6b Mon Sep 17 00:00:00 2001 From: Luke Gumbley Date: Tue, 31 Mar 2020 19:43:49 +1300 Subject: [PATCH 01/50] Add pagination support to history calls Although the REST docs don't mention it, the history call accepts pagination parameters. Without passing parameters, a default of only 30 results will be returned. --- lib/service.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/service.js b/lib/service.js index 299c2a022..b3767ea22 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1704,22 +1704,29 @@ * @example * * var savedSearch = service.savedSearches().item("MySavedSearch"); - * savedSearch.history(function(err, jobs, search) { + * savedSearch.history({count: 10}, function(err, jobs, search) { * for(var i = 0; i < jobs.length; i++) { * console.log("Job", i, ":", jobs[i].sid); * } * }); * + * @param {Object} options Options for retrieving history. For a full list, see the Pagination and Filtering options in the REST API documentation. * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. * * @endpoint saved/searches/{name}/history * @method splunkjs.Service.SavedSearch */ - history: function(callback) { + history: function(options, callback) { + if (!callback && utils.isFunction(options)) { + callback = options; + options = {}; + } + callback = callback || function() {}; + options = options || {}; var that = this; - return this.get("history", {}, function(err, response) { + return this.get("history", options, function(err, response) { if (err) { callback(err); return; From 3e2577681e4f265d984558e35fe31811818e6ae0 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Mon, 29 Jun 2020 20:42:53 -0700 Subject: [PATCH 02/50] Add create-react-app example and fix process.env assignment issue, --- examples/browser/create-react-app/.gitignore | 25 ++++ examples/browser/create-react-app/README.md | 68 +++++++++ .../browser/create-react-app/package.json | 38 +++++ .../create-react-app/public/favicon.ico | Bin 0 -> 3150 bytes .../create-react-app/public/index.html | 43 ++++++ .../create-react-app/public/logo192.png | Bin 0 -> 5347 bytes .../create-react-app/public/logo512.png | Bin 0 -> 9664 bytes .../create-react-app/public/manifest.json | 25 ++++ .../create-react-app/public/robots.txt | 3 + examples/browser/create-react-app/src/App.css | 18 +++ examples/browser/create-react-app/src/App.js | 24 +++ .../browser/create-react-app/src/App.test.js | 9 ++ .../browser/create-react-app/src/Login.css | 27 ++++ .../browser/create-react-app/src/Login.js | 37 +++++ .../create-react-app/src/SplunkJsExample.css | 37 +++++ .../create-react-app/src/SplunkJsExample.js | 119 +++++++++++++++ .../browser/create-react-app/src/index.css | 13 ++ .../browser/create-react-app/src/index.js | 17 +++ .../create-react-app/src/serviceWorker.js | 141 ++++++++++++++++++ .../create-react-app/src/setupProxy.js | 22 +++ .../create-react-app/src/setupTests.js | 5 + .../create-react-app/src/splunkConfig.js | 6 + index.js | 7 +- 23 files changed, 683 insertions(+), 1 deletion(-) create mode 100644 examples/browser/create-react-app/.gitignore create mode 100644 examples/browser/create-react-app/README.md create mode 100644 examples/browser/create-react-app/package.json create mode 100644 examples/browser/create-react-app/public/favicon.ico create mode 100644 examples/browser/create-react-app/public/index.html create mode 100644 examples/browser/create-react-app/public/logo192.png create mode 100644 examples/browser/create-react-app/public/logo512.png create mode 100644 examples/browser/create-react-app/public/manifest.json create mode 100644 examples/browser/create-react-app/public/robots.txt create mode 100644 examples/browser/create-react-app/src/App.css create mode 100644 examples/browser/create-react-app/src/App.js create mode 100644 examples/browser/create-react-app/src/App.test.js create mode 100644 examples/browser/create-react-app/src/Login.css create mode 100644 examples/browser/create-react-app/src/Login.js create mode 100644 examples/browser/create-react-app/src/SplunkJsExample.css create mode 100644 examples/browser/create-react-app/src/SplunkJsExample.js create mode 100644 examples/browser/create-react-app/src/index.css create mode 100644 examples/browser/create-react-app/src/index.js create mode 100644 examples/browser/create-react-app/src/serviceWorker.js create mode 100644 examples/browser/create-react-app/src/setupProxy.js create mode 100644 examples/browser/create-react-app/src/setupTests.js create mode 100644 examples/browser/create-react-app/src/splunkConfig.js diff --git a/examples/browser/create-react-app/.gitignore b/examples/browser/create-react-app/.gitignore new file mode 100644 index 000000000..3d5edad0e --- /dev/null +++ b/examples/browser/create-react-app/.gitignore @@ -0,0 +1,25 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +package-lock.json + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/examples/browser/create-react-app/README.md b/examples/browser/create-react-app/README.md new file mode 100644 index 000000000..35ae6439e --- /dev/null +++ b/examples/browser/create-react-app/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.
+Open [https://localhost:3000](https://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `yarn build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/examples/browser/create-react-app/package.json b/examples/browser/create-react-app/package.json new file mode 100644 index 000000000..beb5de153 --- /dev/null +++ b/examples/browser/create-react-app/package.json @@ -0,0 +1,38 @@ +{ + "name": "splunk-sdk-create-react-app", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "assert": "^2.0.0", + "jquery": "^3.5.1", + "nodeunit": "^0.11.3", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-scripts": "3.4.1", + "splunk-sdk": "^1.9.0" + }, + "scripts": { + "start": "HTTPS=true react-scripts start --no-cache", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/examples/browser/create-react-app/public/favicon.ico b/examples/browser/create-react-app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bcd5dfd67cd0361b78123e95c2dd96031f27f743 GIT binary patch literal 3150 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 MDeX2GIKR{Qf5okjU;qFB literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/index.html b/examples/browser/create-react-app/public/index.html new file mode 100644 index 000000000..aa069f27c --- /dev/null +++ b/examples/browser/create-react-app/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/examples/browser/create-react-app/public/logo192.png b/examples/browser/create-react-app/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/manifest.json b/examples/browser/create-react-app/public/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/examples/browser/create-react-app/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/examples/browser/create-react-app/public/robots.txt b/examples/browser/create-react-app/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/examples/browser/create-react-app/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/examples/browser/create-react-app/src/App.css b/examples/browser/create-react-app/src/App.css new file mode 100644 index 000000000..50b63a363 --- /dev/null +++ b/examples/browser/create-react-app/src/App.css @@ -0,0 +1,18 @@ +.App { + text-align: center; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js new file mode 100644 index 000000000..1366634d3 --- /dev/null +++ b/examples/browser/create-react-app/src/App.js @@ -0,0 +1,24 @@ +import React from 'react'; +import './App.css'; +import SplunkJsExample from './SplunkJsExample'; + +function App() { + return ( +
+
+

+ 1. Edit src/splunkConfig.js to input your Splunk host/port information and restart this project using npm start. +

+ +

+ 2. Enter credentials below and click Submit to login, run a sample search, and display the results. +

+ + + +
+
+ ); +} + +export default App; diff --git a/examples/browser/create-react-app/src/App.test.js b/examples/browser/create-react-app/src/App.test.js new file mode 100644 index 000000000..4db7ebc25 --- /dev/null +++ b/examples/browser/create-react-app/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + const { getByText } = render(); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css new file mode 100644 index 000000000..ce61d5161 --- /dev/null +++ b/examples/browser/create-react-app/src/Login.css @@ -0,0 +1,27 @@ +label { + padding: 10px; +} + +input { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 5px; + margin: 5px; + border: 2px solid #ccc; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +button { + cursor: pointer; + font-size: calc(10px + 2vmin); + background-color: black; + color: #61dafb; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 10px; + margin: 10px; +} \ No newline at end of file diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js new file mode 100644 index 000000000..f6f380abd --- /dev/null +++ b/examples/browser/create-react-app/src/Login.js @@ -0,0 +1,37 @@ +import React from 'react'; +import './Login.css'; + +class Login extends React.Component { + constructor(props) { + super(props); + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleClickSearch = this.handleClickSearch.bind(this); + } + + handleUsernameChange(e) { + this.props.onUsernameChange(e.target.value); + } + + handlePasswordChange(e) { + this.props.onPasswordChange(e.target.value); + } + + handleClickSearch(e) { + this.props.onClickSearch(); + } + + render() { + return ( +
+ +
+ +
+
+
+ ); + } + } + + export default Login; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.css b/examples/browser/create-react-app/src/SplunkJsExample.css new file mode 100644 index 000000000..452e89009 --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.css @@ -0,0 +1,37 @@ +table.Results { + border: 1px solid rgb(45, 45, 45); + background-color: rgb(175, 175, 175); + width: calc(100% - 50px); + text-align: left; + border-collapse: collapse; + margin: 25px; +} + +table.Results td, table.Results th { + border: 1px solid rgb(175, 175, 175); + padding: 3px 2px; +} + +table.Results tbody td { + font-size: 14px; +} + +table.Results tr:nth-child(odd) { + color: black; +} + +table.Results tr:nth-child(even) { + background: rgb(75, 75, 75); + color: white; +} + +table.Results thead { + background: rgb(50, 50, 50); + border-bottom: 2px solid rgb(225, 225, 225); +} + +table.Results thead th { + font-size: 15px; + font-weight: bold; + color: white; +} diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js new file mode 100644 index 000000000..648974fdf --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -0,0 +1,119 @@ +import React from 'react'; +import './SplunkJsExample.css'; +import Login from './Login'; +import * as splunkjs from 'splunk-sdk'; + +// jquery.ajax is used for the underlying http client in ProxyHttp +window.$ = require('jquery'); + +//const splunkjs = require('splunk-sdk'); +const Async = splunkjs.Async; +const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); + +class SplunkJsExample extends React.Component { + constructor(props) { + super(props); + // We define handlers here as well as LoginForm in order to lift + // the username and password states up so that they can be used + // here to run and populate search results. + // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleSearch = this.handleSearch.bind(this); + this.state = { + username: '', + password: '', + query: 'index=_internal | head 3', + results: [], + }; + } + + handleUsernameChange(username) { + this.setState({username: username}); + } + + handlePasswordChange(password) { + this.setState({password: password}); + } + + handleSearch() { + var http = new clientHttp.ProxyHttp('/proxy'); + var service = new splunkjs.Service(http, { + username: this.state.username, + password: this.state.password, + scheme: 'https', // we have configured this example for HTTPS + host: 'localhost', // this is the host for our http-proxy-middleware server, do not change + port: '3000' // this is the port for our http-proxy-middleware server, do not change + }); + + var that = this; + Async.chain([ + // First, we log in + function(done) { + service.login(done); + }, + // Perform the search + function(success, done) { + if (!success) { + done('Error logging in'); + } + + service.search('search index=_internal | head 3', {}, done); + }, + // Wait until the job is done + function(job, done) { + job.track({}, function(job) { + // Ask the server for the results + job.results({}, done); + }); + }, + // Print out the statistics and get the results + function(results, job, done) { + // Print out the statistics to the console + console.log('Splunk Search Job Statistics:'); + console.log(` Event Count: ${job.properties().eventCount}`); + console.log(` Disk Usage: ${job.properties().diskUsage} bytes`); + console.log(` Priority: ${job.properties().priority}`); + console.log(results); + that.setState({results: results}); + }], + function(err) { + console.error(err); + } + ); + } + + render() { + const results = this.state.results; + + // Find the index of the fields we want + const timeIndex = (results.fields || []).indexOf('_time'); + const sourceIndex = (results.fields || []).indexOf('source'); + const sourcetypeIndex = (results.fields || []).indexOf('sourcetype'); + const rawIndex = (results.fields || []).indexOf('_raw'); + + return ( +
+ + +

Results

+ + + + + + {(results.rows || []).map((result, i) => { + return ; + })} + + +
_timesourcesourcetype_raw
{result[timeIndex]}{result[sourceIndex]}{result[sourcetypeIndex]}{result[rawIndex]}
+
+ ); + } + } + + export default SplunkJsExample; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/index.css b/examples/browser/create-react-app/src/index.css new file mode 100644 index 000000000..ec2585e8c --- /dev/null +++ b/examples/browser/create-react-app/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/examples/browser/create-react-app/src/index.js b/examples/browser/create-react-app/src/index.js new file mode 100644 index 000000000..f5185c1ec --- /dev/null +++ b/examples/browser/create-react-app/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import * as serviceWorker from './serviceWorker'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/examples/browser/create-react-app/src/serviceWorker.js b/examples/browser/create-react-app/src/serviceWorker.js new file mode 100644 index 000000000..b04b771a8 --- /dev/null +++ b/examples/browser/create-react-app/src/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/examples/browser/create-react-app/src/setupProxy.js b/examples/browser/create-react-app/src/setupProxy.js new file mode 100644 index 000000000..938863922 --- /dev/null +++ b/examples/browser/create-react-app/src/setupProxy.js @@ -0,0 +1,22 @@ +const { splunkConfig } = require('./splunkConfig'); +const proxy = require('http-proxy-middleware'); + +/** + * This file configures a proxy for proxying requests + * from https://localhost:3000/proxy/... + * to https://:/... + * + * This is necessary to avoid CORS issues with splunkd. + */ +module.exports = app => { + app.use( + '/proxy', + proxy({ + target: 'https://' + splunkConfig.host + ':' + splunkConfig.port, + changeOrigin: true, + secure: false, + pathRewrite: {'^/proxy' : ''}, // remove /proxy prefix + logLevel: 'debug' + }) + ); +}; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/setupTests.js b/examples/browser/create-react-app/src/setupTests.js new file mode 100644 index 000000000..74b1a275a --- /dev/null +++ b/examples/browser/create-react-app/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; diff --git a/examples/browser/create-react-app/src/splunkConfig.js b/examples/browser/create-react-app/src/splunkConfig.js new file mode 100644 index 000000000..3de857fee --- /dev/null +++ b/examples/browser/create-react-app/src/splunkConfig.js @@ -0,0 +1,6 @@ +const splunkConfig = { + host: 'localhost', + port: '8089' +}; + +module.exports = { splunkConfig }; \ No newline at end of file diff --git a/index.js b/index.js index 9d76b812f..712340aaa 100644 --- a/index.js +++ b/index.js @@ -18,7 +18,12 @@ // Declare a process environment so that we can set // some globals here and have interop with node - process.env = process.env || {}; + try { + process.env = process.env || {}; + } catch (e) { + // Depending on the browser implementation process.env may not + // be assignable but still accessible, ignore these errors + } module.exports = root = { Logger : require('./lib/log').Logger, From 851aac6ca72303b1647c3983908425066536a9d1 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 4 Jul 2020 16:55:16 -0700 Subject: [PATCH 03/50] Make query input from user --- examples/browser/create-react-app/src/App.js | 2 +- .../browser/create-react-app/src/Login.css | 8 ++++++++ .../browser/create-react-app/src/Login.js | 13 ++++++++++++- .../create-react-app/src/SplunkJsExample.js | 19 ++++++++++++++----- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js index 1366634d3..7fcab7e8b 100644 --- a/examples/browser/create-react-app/src/App.js +++ b/examples/browser/create-react-app/src/App.js @@ -11,7 +11,7 @@ function App() {

- 2. Enter credentials below and click Submit to login, run a sample search, and display the results. + 2. Enter credentials below and click Search to login, run a sample search, and display the results.

diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css index ce61d5161..de7c273b6 100644 --- a/examples/browser/create-react-app/src/Login.css +++ b/examples/browser/create-react-app/src/Login.css @@ -15,6 +15,14 @@ input { border-radius: 5px; } +textarea { + resize: none; + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; + padding: 5px; + outline: none; + overflow: auto; +} + button { cursor: pointer; font-size: calc(10px + 2vmin); diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js index f6f380abd..35413c5d3 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Login.js @@ -6,6 +6,7 @@ class Login extends React.Component { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleClickSearch = this.handleClickSearch.bind(this); } @@ -17,6 +18,10 @@ class Login extends React.Component { this.props.onPasswordChange(e.target.value); } + handleQueryChange(e) { + this.props.onQueryChange(e.target.value); + } + handleClickSearch(e) { this.props.onClickSearch(); } @@ -27,7 +32,13 @@ class Login extends React.Component {
-
+
+
+
+
+ +
+

); diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 648974fdf..7fca97da1 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -13,17 +13,18 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as LoginForm in order to lift + // We define handlers here as well as Login.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleSearch = this.handleSearch.bind(this); this.state = { - username: '', - password: '', - query: 'index=_internal | head 3', + username: 'admin', + password: 'changeme', + query: 'search index=_internal | head 3', results: [], }; } @@ -36,6 +37,10 @@ class SplunkJsExample extends React.Component { this.setState({password: password}); } + handleQueryChange(query) { + this.setState({query: query}); + } + handleSearch() { var http = new clientHttp.ProxyHttp('/proxy'); var service = new splunkjs.Service(http, { @@ -58,7 +63,7 @@ class SplunkJsExample extends React.Component { done('Error logging in'); } - service.search('search index=_internal | head 3', {}, done); + service.search(`${that.state.query}`, {}, done); }, // Wait until the job is done function(job, done) { @@ -95,8 +100,12 @@ class SplunkJsExample extends React.Component { return (

Results

From b96f50cd3573d989def4346b450a62b775badd7e Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 4 Jul 2020 16:59:02 -0700 Subject: [PATCH 04/50] Rename Login to Inputs --- .../browser/create-react-app/src/{Login.css => Inputs.css} | 0 .../browser/create-react-app/src/{Login.js => Inputs.js} | 6 +++--- examples/browser/create-react-app/src/SplunkJsExample.js | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename examples/browser/create-react-app/src/{Login.css => Inputs.css} (100%) rename examples/browser/create-react-app/src/{Login.js => Inputs.js} (94%) diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Inputs.css similarity index 100% rename from examples/browser/create-react-app/src/Login.css rename to examples/browser/create-react-app/src/Inputs.css diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Inputs.js similarity index 94% rename from examples/browser/create-react-app/src/Login.js rename to examples/browser/create-react-app/src/Inputs.js index 35413c5d3..01c004c9b 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Inputs.js @@ -1,7 +1,7 @@ import React from 'react'; -import './Login.css'; +import './Inputs.css'; -class Login extends React.Component { +class Inputs extends React.Component { constructor(props) { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); @@ -45,4 +45,4 @@ class Login extends React.Component { } } - export default Login; \ No newline at end of file + export default Inputs; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 7fca97da1..d18aeade5 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -1,6 +1,6 @@ import React from 'react'; import './SplunkJsExample.css'; -import Login from './Login'; +import Inputs from './Inputs'; import * as splunkjs from 'splunk-sdk'; // jquery.ajax is used for the underlying http client in ProxyHttp @@ -13,7 +13,7 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as Login.js in order to lift + // We define handlers here as well as Inputs.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html @@ -99,7 +99,7 @@ class SplunkJsExample extends React.Component { return (
- Date: Sat, 4 Jul 2020 17:11:06 -0700 Subject: [PATCH 05/50] Ignore create-react-app example for jshint --- .jshintignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.jshintignore b/.jshintignore index 8f70fdda3..d73f60eb1 100644 --- a/.jshintignore +++ b/.jshintignore @@ -5,8 +5,10 @@ node_modules build client external +examples/browser/create-react-app examples/browser/minisplunk examples/browser/resources +examples\\browser\\create-react-app examples\\browser\\minisplunk examples\\browser\\resources old_english From 5293343a860a4056002ff62b4831a0980eb9b25c Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Wed, 8 Jul 2020 15:42:24 -0700 Subject: [PATCH 06/50] Add demo gif and rename to create-splunk-react-app --- .../.gitignore | 0 .../README.md | 6 ++++++ .../create-splunk-react-app.gif | Bin 0 -> 540896 bytes .../package.json | 2 +- .../public/favicon.ico | Bin .../public/index.html | 0 .../public/logo192.png | Bin .../public/logo512.png | Bin .../public/manifest.json | 0 .../public/robots.txt | 0 .../src/App.css | 0 .../src/App.js | 0 .../src/App.test.js | 0 .../src/Inputs.css | 0 .../src/Inputs.js | 0 .../src/SplunkJsExample.css | 0 .../src/SplunkJsExample.js | 0 .../src/index.css | 0 .../src/index.js | 0 .../src/serviceWorker.js | 0 .../src/setupProxy.js | 0 .../src/setupTests.js | 0 .../src/splunkConfig.js | 0 23 files changed, 7 insertions(+), 1 deletion(-) rename examples/browser/{create-react-app => create-splunk-react-app}/.gitignore (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/README.md (95%) create mode 100644 examples/browser/create-splunk-react-app/create-splunk-react-app.gif rename examples/browser/{create-react-app => create-splunk-react-app}/package.json (95%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/favicon.ico (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/index.html (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo192.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo512.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/manifest.json (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/robots.txt (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.test.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/serviceWorker.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupProxy.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupTests.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/splunkConfig.js (100%) diff --git a/examples/browser/create-react-app/.gitignore b/examples/browser/create-splunk-react-app/.gitignore similarity index 100% rename from examples/browser/create-react-app/.gitignore rename to examples/browser/create-splunk-react-app/.gitignore diff --git a/examples/browser/create-react-app/README.md b/examples/browser/create-splunk-react-app/README.md similarity index 95% rename from examples/browser/create-react-app/README.md rename to examples/browser/create-splunk-react-app/README.md index 35ae6439e..6f4de1dcb 100644 --- a/examples/browser/create-react-app/README.md +++ b/examples/browser/create-splunk-react-app/README.md @@ -1,3 +1,9 @@ +# create-splunk-react-app + +Enter this directory and run `yarn start` to view the app: + +![create-splunk-react-app demo](create-splunk-react-app.gif) + This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts diff --git a/examples/browser/create-splunk-react-app/create-splunk-react-app.gif b/examples/browser/create-splunk-react-app/create-splunk-react-app.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb62e046aae3b97c7541c4a8590f41b98e0cd014 GIT binary patch literal 540896 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

T26^;MS*Jhc2vD`x3k^Ao-pOv+{wAc;y2i|| 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 Y@&A2aSrsVJrIVoYCn`xDmT=q;#ul4|&5 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 Date: Mon, 14 Jun 2021 13:26:40 +0530 Subject: [PATCH 07/50] Updated HighCharts License. Added LICENSE-HIGHCHARTS.txt and updated README.md regarding the same. --- README.md | 5 ++++- licenses/LICENSE-HIGHCHARTS | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 licenses/LICENSE-HIGHCHARTS diff --git a/README.md b/README.md index 104100f15..02ca955be 100644 --- a/README.md +++ b/README.md @@ -403,6 +403,7 @@ of embedded libraries and their licenses: * [commander Node.js command-line interfaces][commander]: [MIT][commander-license] * [script.js Asyncronous JavaScript loader and dependency manager][script.js]: [Apache][scriptjs-license] * [base64.js Fast base64 encoding/decoding][base64.js]: [MIT][base64-license] +* [highcharts.js Interactive JavaScript charts][highcharts.js]: [CC BY-NC 3.0][highcharts-license] [dox]: https://github.com/visionmedia/dox @@ -415,7 +416,8 @@ of embedded libraries and their licenses: [commander]: https://github.com/visionmedia/commander.js/ [script.js]: https://github.com/ded/script.js/ [base64.js]: http://code.google.com/p/javascriptbase64/ -[dox-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DOX +[highcharts.js]: https://github.com/highcharts/highcharts +[dox-license]: xhttps://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DOX [davis-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DAVIS [jquery.class-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-JQUERYCLASS [nodeunit-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-NODEUNIT @@ -426,6 +428,7 @@ of embedded libraries and their licenses: [scriptjs-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-SCRIPTJS [base64-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 [event-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 +highcharts-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-HIGHCHARTS [json2]: http://www.json.org/js.html [splunkrc]: https://github.com/splunk/splunk-sdk-javascript/blob/master/splunkrc.spec diff --git a/licenses/LICENSE-HIGHCHARTS b/licenses/LICENSE-HIGHCHARTS new file mode 100644 index 000000000..e47f8206e --- /dev/null +++ b/licenses/LICENSE-HIGHCHARTS @@ -0,0 +1,2 @@ +Creative Commons Attribution-NonCommercial 3.0 Unported License +https://creativecommons.org/licenses/by-nc/3.0/legalcode From 5553034a47c06d0cc60cd02ad8a5d2a911068e8b Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Tue, 10 Aug 2021 15:35:07 +0530 Subject: [PATCH 08/50] Changes for sdk-app-collection and apps/local --- tests/service_tests/job.js | 289 ++++++++++++++--------------- tests/service_tests/savedsearch.js | 12 +- tests/service_tests/view.js | 2 +- 3 files changed, 146 insertions(+), 157 deletions(-) diff --git a/tests/service_tests/job.js b/tests/service_tests/job.js index 634cec8c1..2263920eb 100644 --- a/tests/service_tests/job.js +++ b/tests/service_tests/job.js @@ -19,39 +19,37 @@ exports.setup = function (svc) { done(); }); - // Disabling this test because apps/appinstall endpoint is deprecated in Splunk 8.2. - // - // it("Callback#Create+abort job", function (done) { - // var service = this.service; - // Async.chain([ - // function (done) { - // var app_name = path.join(process.env.SPLUNK_HOME, ('/etc/apps/sdkappcollection/build/sleep_command.tar')); - // // Fix path on Windows if $SPLUNK_HOME contains a space (ex: C:/Program%20Files/Splunk) - // app_name = app_name.replace("%20", " "); - // // var app_name = "sleep_command"; - // service.post("apps/local", { update: 1, name: app_name, filename: true }, done); - // }, - // function (done) { - // var sid = getNextId(); - // var options = { id: sid }; - // var jobs = service.jobs(); - // var req = jobs.oneshotSearch('search index=_internal | head 1 | sleep 10', options, function (err, job) { - // assert.ok(err); - // assert.ok(!job); - // assert.strictEqual(err.error, "abort"); - // }); - - // Async.sleep(1000, function () { - // req.abort(); - // }); - // } - // ], - // function (err) { - // assert.ok(!err); - // done(); - // }); - // done(); - // }); + it("Callback#Create+abort job", function (done) { + var service = this.service; + Async.chain([ + function (done) { + var app_name = path.join(process.env.SPLUNK_HOME, ('/etc/apps/sdkappcollection/build/sleep_command.tar')); + // Fix path on Windows if $SPLUNK_HOME contains a space (ex: C:/Program%20Files/Splunk) + app_name = app_name.replace("%20", " "); + // var app_name = "sleep_command"; + service.post("apps/local", { update: 1, name: app_name, filename: true }, done); + }, + function (done) { + var sid = getNextId(); + var options = { id: sid }; + var jobs = service.jobs(); + var req = jobs.oneshotSearch('search index=_internal | head 1 | sleep 10', options, function (err, job) { + assert.ok(err); + assert.ok(!job); + assert.strictEqual(err.error, "abort"); + }); + + Async.sleep(1000, function () { + req.abort(); + }); + } + ], + function (err) { + assert.ok(!err); + done(); + }); + done(); + }); it("Callback#Create+cancel job", function (done) { var sid = getNextId(); @@ -275,92 +273,86 @@ exports.setup = function (svc) { ); }); - // Disabling this test because apps/appinstall endpoint is deprecated in Splunk 8.2. - // - // - // it("Callback#Enable + disable preview", function (done) { - // var that = this; - // var sid = getNextId(); + it("Callback#Enable + disable preview", function (done) { + var that = this; + var sid = getNextId(); - // var service = this.service.specialize("nobody", "sdkappcollection"); + var service = this.service.specialize("nobody", "sdkappcollection"); - // Async.chain([ - // function (done) { - // service.jobs().search('search index=_internal | head 1 | sleep 60', { id: sid }, done); - // }, - // function (job, done) { - // job.enablePreview(done); - - // }, - // function (job, done) { - // job.disablePreview(done); - // }, - // function (job, done) { - // job.cancel(done); - // } - // ], - // function (err) { - // assert.ok(!err); - // done(); - // } - // ); - // }); + Async.chain([ + function (done) { + service.jobs().search('search index=_internal | head 1 | sleep 60', { id: sid }, done); + }, + function (job, done) { + job.enablePreview(done); + }, + function (job, done) { + job.disablePreview(done); + }, + function (job, done) { + job.cancel(done); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); - // Disabling this test because apps/appinstall endpoint is deprecated in Splunk 8.2. - // - // - // it("Callback#Pause + unpause + finalize preview", function (done) { - // var that = this; - // var sid = getNextId(); - // var service = this.service.specialize("nobody", "sdkappcollection"); + it("Callback#Pause + unpause + finalize preview", function (done) { + var that = this; + var sid = getNextId(); - // Async.chain([ - // function (done) { - // service.jobs().search('search index=_internal | head 1 | sleep 5', { id: sid }, done); - // }, - // function (job, done) { - // job.pause(done); - // }, - // function (job, done) { - // tutils.pollUntil( - // job, - // function (j) { - // return j.properties()["isPaused"]; - // }, - // 10, - // done - // ); - // }, - // function (job, done) { - // assert.ok(job.properties()["isPaused"]); - // job.unpause(done); - // }, - // function (job, done) { - // tutils.pollUntil( - // job, - // function (j) { - // return !j.properties()["isPaused"]; - // }, - // 10, - // done - // ); - // }, - // function (job, done) { - // assert.ok(!job.properties()["isPaused"]); - // job.finalize(done); - // }, - // function (job, done) { - // job.cancel(done); - // } - // ], - // function (err) { - // assert.ok(!err); - // done(); - // } - // ); - // }); + var service = this.service.specialize("nobody", "sdkappcollection"); + + Async.chain([ + function (done) { + service.jobs().search('search index=_internal | head 1 | sleep 5', { id: sid }, done); + }, + function (job, done) { + job.pause(done); + }, + function (job, done) { + tutils.pollUntil( + job, + function (j) { + return j.properties()["isPaused"]; + }, + 10, + done + ); + }, + function (job, done) { + assert.ok(job.properties()["isPaused"]); + job.unpause(done); + }, + function (job, done) { + tutils.pollUntil( + job, + function (j) { + return !j.properties()["isPaused"]; + }, + 10, + done + ); + }, + function (job, done) { + assert.ok(!job.properties()["isPaused"]); + job.finalize(done); + }, + function (job, done) { + job.cancel(done); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); it("Callback#Set TTL", function (done) { var sid = getNextId(); @@ -397,45 +389,42 @@ exports.setup = function (svc) { ); }); - // Disabling this test because apps/appinstall endpoint is deprecated in Splunk 8.2. - // - // - // it("Callback#Set priority", function (done) { - // var sid = getNextId(); - // var originalPriority = 0; - // var that = this; + it("Callback#Set priority", function (done) { + var sid = getNextId(); + var originalPriority = 0; + var that = this; - // var service = this.service.specialize("nobody", "sdkappcollection"); + var service = this.service.specialize("nobody", "sdkappcollection"); - // Async.chain([ - // function (done) { - // service.jobs().search('search index=_internal | head 1 | sleep 5', { id: sid }, done); - // }, - // function (job, done) { - // job.track({}, { - // ready: function (job) { - // done(null, job); - // } - // }); - // }, - // function (job, done) { - // var priority = job.properties()["priority"]; - // assert.ok(priority, 5); - // job.setPriority(priority + 1, done); - // }, - // function (job, done) { - // job.fetch(done); - // }, - // function (job, done) { - // job.cancel(done); - // } - // ], - // function (err) { - // assert.ok(!err); - // done(); - // } - // ); - // }); + Async.chain([ + function (done) { + service.jobs().search('search index=_internal | head 1 | sleep 5', { id: sid }, done); + }, + function (job, done) { + job.track({}, { + ready: function (job) { + done(null, job); + } + }); + }, + function (job, done) { + var priority = job.properties()["priority"]; + assert.ok(priority, 5); + job.setPriority(priority + 1, done); + }, + function (job, done) { + job.fetch(done); + }, + function (job, done) { + job.cancel(done); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); it("Callback#Search log", function (done) { var sid = getNextId(); diff --git a/tests/service_tests/savedsearch.js b/tests/service_tests/savedsearch.js index c5c95dbbd..5430806ed 100644 --- a/tests/service_tests/savedsearch.js +++ b/tests/service_tests/savedsearch.js @@ -104,7 +104,7 @@ exports.setup = function (svc, loggedOutSvc) { var updatedSearch = "search * | head 10"; var updatedDescription = "description"; - var searches = this.service.savedSearches({ owner: this.service.username, app: "sdk-app-collection" }); + var searches = this.service.savedSearches({ owner: this.service.username, app: "sdkappcollection" }); Async.chain([ function (done) { @@ -172,7 +172,7 @@ exports.setup = function (svc, loggedOutSvc) { var name = "jssdk_savedsearch_" + getNextId(); var originalSearch = "search index=_internal | head 1"; - var searches = this.service.savedSearches({ owner: this.service.username, app: "sdk-app-collection" }); + var searches = this.service.savedSearches({ owner: this.service.username, app: "sdkappcollection" }); Async.chain( [function (done) { @@ -234,7 +234,7 @@ exports.setup = function (svc, loggedOutSvc) { var name = "jssdk_savedsearch_" + getNextId(); var originalSearch = "search index=_internal | head 1"; - var searches = this.service.savedSearches({ owner: this.service.username, app: "sdk-app-collection" }); + var searches = this.service.savedSearches({ owner: this.service.username, app: "sdkappcollection" }); Async.chain( function (done) { @@ -352,7 +352,7 @@ exports.setup = function (svc, loggedOutSvc) { }) it("Callback#delete test saved searches", function (done) { - var searches = this.service.savedSearches({ owner: this.service.username, app: "sdk-app-collection" }); + var searches = this.service.savedSearches({ owner: this.service.username, app: "sdkappcollection" }); searches.fetch(function (err, searches) { var searchList = searches.list(); Async.parallelEach( @@ -381,7 +381,7 @@ exports.setup = function (svc, loggedOutSvc) { }) it("Callback#setupInfo succeeds", function (done) { - var app = new splunkjs.Service.Application(this.service, "sdk-app-collection"); + var app = new splunkjs.Service.Application(this.service, "sdkappcollection"); app.setupInfo(function (err, content, app) { // This error message was removed in modern versions of Splunk if (err) { @@ -406,7 +406,7 @@ exports.setup = function (svc, loggedOutSvc) { }) it("Callback#updateInfo failure", function (done) { - var app = new splunkjs.Service.Application(this.loggedOutService, "sdk-app-collection"); + var app = new splunkjs.Service.Application(this.loggedOutService, "sdkappcollection"); app.updateInfo(function (err, info, app) { assert.ok(err); done(); diff --git a/tests/service_tests/view.js b/tests/service_tests/view.js index 4ff55a371..d1af9a83f 100644 --- a/tests/service_tests/view.js +++ b/tests/service_tests/view.js @@ -38,7 +38,7 @@ exports.setup = function (svc) { Async.chain([ function (done) { - service.views({ owner: "admin", app: "sdk-app-collection" }).create({ name: name, "eai:data": originalData }, done); + service.views({ owner: "admin", app: "sdkappcollection" }).create({ name: name, "eai:data": originalData }, done); }, function (view, done) { assert.ok(view); From c9f2e4561bcd47748073f890f158056214968269 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Tue, 10 Aug 2021 15:37:44 +0530 Subject: [PATCH 09/50] Updated docker-compose.yml and test.yml --- .github/workflows/test.yml | 20 ++++++++++---------- docker-compose.yml | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 136601a6e..804efe0ff 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: build: runs-on: ${{ matrix.os }} - + strategy: matrix: os: @@ -15,8 +15,8 @@ jobs: - 8.17.0 splunk-version: - "8.0" - - "latest" - + - "latest" + services: splunk: image: splunk/splunk:${{matrix.splunk-version}} @@ -24,20 +24,20 @@ jobs: SPLUNK_START_ARGS: --accept-license SPLUNK_HEC_TOKEN: 11111111-1111-1111-1111-1111111111113 SPLUNK_PASSWORD: changed! - SPLUNK_APPS_URL: https://github.com/splunk/sdk-app-collection/releases/download/v1.0.0/sdk-app-collection.tgz + SPLUNK_APPS_URL: https://github.com/splunk/sdk-app-collection/releases/download/v1.1.0/sdkappcollection.tgz ports: - 8000:8000 - 8088:8088 - 8089:8089 - + steps: - uses: actions/checkout@v2 - + - name: Use node ${{ matrix.node }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - + - name: Create .splunkrc file run: | cd ~ @@ -47,10 +47,10 @@ jobs: echo password=changed! >> .splunkrc echo scheme=https >> .splunkrc echo version=${{ matrix.splunk }} >> .splunkrc - + - name: Run npm install - run: npm install - + run: npm install + - name: Run make test run: make test env: diff --git a/docker-compose.yml b/docker-compose.yml index 5bb5f0805..66bc5ce4e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: - SPLUNK_START_ARGS=--accept-license - SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113 - SPLUNK_PASSWORD=changed! - - SPLUNK_APPS_URL=https://github.com/splunk/sdk-app-collection/releases/download/v1.0.0/sdk-app-collection.tgz + - SPLUNK_APPS_URL=https://github.com/splunk/sdk-app-collection/releases/download/v1.1.0/sdkappcollection.tgz ports: - 8000:8000 - 8088:8088 From 9dec4e87cfb9068dfb551874d44949e4da585ee3 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 19 Aug 2021 15:17:12 +0530 Subject: [PATCH 10/50] package-lock.json updated Updated few dependencies with recent newer versions --- package-lock.json | 4999 +++++++++++++++++++++++++-------------------- package.json | 10 +- 2 files changed, 2790 insertions(+), 2219 deletions(-) diff --git a/package-lock.json b/package-lock.json index f14124970..a3e26f82d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,128 +1,373 @@ { "name": "splunk-sdk", - "version": "1.9.1", + "version": "1.10.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", + "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/code-frame": "7.14.5", + "@babel/generator": "7.15.0", + "@babel/helper-compilation-targets": "7.15.0", + "@babel/helper-module-transforms": "7.15.0", + "@babel/helpers": "7.15.3", + "@babel/parser": "7.15.3", + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0", + "convert-source-map": "1.8.0", + "debug": "4.3.2", + "gensync": "1.0.0-beta.2", + "json5": "2.2.0", + "semver": "6.3.0", + "source-map": "0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "dev": true, + "requires": { + "@babel/types": "7.15.0", + "jsesc": "2.5.2", + "source-map": "0.5.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", + "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "@babel/compat-data": "7.15.0", + "@babel/helper-validator-option": "7.14.5", + "browserslist": "4.16.8", + "semver": "6.3.0" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "7.14.5", + "@babel/template": "7.14.5", + "@babel/types": "7.15.0" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", + "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.14.5", + "@babel/helper-replace-supers": "7.15.0", + "@babel/helper-simple-access": "7.14.8", + "@babel/helper-split-export-declaration": "7.14.5", + "@babel/helper-validator-identifier": "7.14.9", + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "7.15.0", + "@babel/helper-optimise-call-expression": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", + "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.15.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "requires": { + "@babel/types": "7.15.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", + "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "7.14.9", + "chalk": "2.4.2", + "js-tokens": "4.0.0" } }, "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", + "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", "dev": true }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "7.14.5", + "@babel/parser": "7.15.3", + "@babel/types": "7.15.0" } }, "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.14.5", + "@babel/generator": "7.15.0", + "@babel/helper-function-name": "7.14.5", + "@babel/helper-hoist-variables": "7.14.5", + "@babel/helper-split-export-declaration": "7.14.5", + "@babel/parser": "7.15.3", + "@babel/types": "7.15.0", + "debug": "4.3.2", + "globals": "11.12.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" + "@babel/helper-validator-identifier": "7.14.9", + "to-fast-properties": "2.0.0" } }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" + "camelcase": "5.3.1", + "find-up": "4.1.0", + "get-package-type": "0.1.0", + "js-yaml": "3.13.1", + "resolve-from": "5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "2.3.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true }, "JSONStream": { "version": "1.3.5", @@ -130,86 +375,81 @@ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "jsonparse": "1.3.1", + "through": "2.3.8" } }, "acorn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz", - "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-node": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", - "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { - "acorn": "^6.0.2", - "acorn-dynamic-import": "^4.0.0", - "acorn-walk": "^6.1.0", - "xtend": "^4.0.1" + "acorn": "7.4.1", + "acorn-walk": "7.2.0", + "xtend": "4.0.2" } }, "acorn-walk": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz", - "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "clean-stack": "2.2.0", + "indent-string": "4.0.0" } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "normalize-path": "3.0.0", + "picomatch": "2.3.0" } }, "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "default-require-extensions": "3.0.0" } }, "archy": { @@ -218,70 +458,42 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argsparser": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/argsparser/-/argsparser-0.0.7.tgz", - "integrity": "sha1-QcheDD3nV7NQ8S5u0OSQsegtvgY=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "sprintf-js": "1.0.3" } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.12.0", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "safer-buffer": "2.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "4.1.1", "util": "0.10.3" }, "dependencies": { @@ -302,73 +514,49 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "available-typed-arrays": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", "dev": true }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bind-obj-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", - "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.2", "concat-map": "0.0.1" } }, @@ -376,8 +564,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "7.0.1" } }, "brorand": { @@ -392,121 +581,116 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" + "JSONStream": "1.3.5", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.2.1", + "through2": "2.0.5", + "umd": "3.0.3" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } + "resolve": "1.20.0" } }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "labeled-stream-splicer": "^2.0.0", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "assert": "1.5.0", + "browser-pack": "6.1.0", + "browser-resolve": "2.0.0", + "browserify-zlib": "0.2.0", + "buffer": "5.2.1", + "cached-path-relative": "1.0.2", + "concat-stream": "1.6.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.1", + "domain-browser": "1.2.0", + "duplexer2": "0.1.4", + "events": "3.3.0", + "glob": "7.1.7", + "has": "1.0.3", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.4", + "insert-module-globals": "7.2.1", + "labeled-stream-splicer": "2.0.2", + "mkdirp-classic": "0.5.3", + "module-deps": "6.2.3", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "1.0.1", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.7", + "resolve": "1.20.0", + "shasum-object": "1.0.0", + "shell-quote": "1.7.2", + "stream-browserify": "3.0.0", + "stream-http": "3.2.0", + "string_decoder": "1.3.0", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.5", + "timers-browserify": "1.4.2", "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" + "url": "0.11.0", + "util": "0.12.4", + "vm-browserify": "1.1.2", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -516,12 +700,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "browserify-cipher": { @@ -530,9 +714,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -541,35 +725,37 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.1", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "5.2.0", + "randombytes": "2.1.0" } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "5.2.0", + "browserify-rsa": "4.1.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.5.4", + "inherits": "2.0.4", + "parse-asn1": "5.1.6", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" } }, "browserify-zlib": { @@ -578,7 +764,20 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.11" + } + }, + "browserslist": { + "version": "4.16.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", + "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30001251", + "colorette": "1.3.0", + "electron-to-chromium": "1.3.812", + "escalade": "3.1.1", + "node-releases": "1.1.75" } }, "buffer": { @@ -587,14 +786,14 @@ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "1.5.1", + "ieee754": "1.2.1" } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-xor": { @@ -616,57 +815,95 @@ "dev": true }, "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "5.2.2", + "make-dir": "3.1.0", + "package-hash": "4.0.0", + "write-file-atomic": "3.0.3" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" + "function-bind": "1.1.1", + "get-intrinsic": "1.1.1" } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "caniuse-lite": { + "version": "1.0.30001251", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", + "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", "dev": true }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.1", + "type-detect": "4.0.8" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "anymatch": "3.1.2", + "braces": "3.0.2", + "fsevents": "2.3.2", + "glob-parent": "5.1.2", + "is-binary-path": "2.1.0", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "readdirp": "3.6.0" } }, "cipher-base": { @@ -675,52 +912,42 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, - "clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - } + "exit": "0.1.2", + "glob": "7.1.7" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "3.1.0", + "strip-ansi": "5.2.0", + "wrap-ansi": "5.1.0" + } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -728,12 +955,13 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "colorette": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", "dev": true }, "combine-source-map": { @@ -742,35 +970,12 @@ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" } }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -780,7 +985,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -788,46 +994,49 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "typedarray": "0.0.6" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "string_decoder": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -842,9 +1051,9 @@ "dev": true }, "cookie": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.0.tgz", - "integrity": "sha1-lwi+6qNhhX3n0WUW/qd5VyYlyq0=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "core-util-is": { "version": "1.0.2", @@ -852,41 +1061,22 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "coveralls": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz", - "integrity": "sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==", - "dev": true, - "requires": { - "growl": "~> 1.10.0", - "js-yaml": "^3.11.0", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.86.0" - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.12.0", + "elliptic": "6.5.4" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "create-hash": { @@ -895,11 +1085,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.4", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -908,22 +1098,34 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.4", + "ripemd160": "2.0.2", + "safe-buffer": "5.2.1", + "sha.js": "2.4.11" } }, "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "path-key": "3.1.1", + "shebang-command": "2.0.0", + "which": "2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } } }, "crypto-browserify": { @@ -932,27 +1134,24 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.2.1", + "create-ecdh": "4.0.4", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.4", + "pbkdf2": "3.1.2", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true }, "date-now": { "version": "0.1.4", @@ -960,26 +1159,51 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.3" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } }, "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "4.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "strip-bom": "^3.0.0" + "object-keys": "1.1.1" } }, "defined": { @@ -988,49 +1212,44 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" + "JSONStream": "1.3.5", + "shasum-object": "1.0.0", + "subarg": "1.0.0", + "through2": "2.0.5" } }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" } }, "detective": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", - "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { - "acorn-node": "^1.3.0", - "defined": "^1.0.0", - "minimist": "^1.1.1" + "acorn-node": "1.8.2", + "defined": "1.0.0", + "minimist": "1.2.5" } }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", @@ -1038,9 +1257,41 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.12.0", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "2.2.0", + "entities": "2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } } }, "domain-browser": { @@ -1049,6 +1300,31 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.2.2", + "domelementtype": "1.3.1" + } + }, "dotenv": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", @@ -1060,94 +1336,124 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "electron-to-chromium": { + "version": "1.3.812", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.812.tgz", + "integrity": "sha512-7KiUHsKAWtSrjVoTSzxQ0nPLr/a+qoxNZwkwd9LkylTOgOXSVXkQbpIVT0WAUQcI5gXq3SwOTCrK+WfINHOXQg==", "dev": true }, "elementtree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", - "integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", "requires": { - "sax": "0.3.5" + "sax": "1.1.4" } }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "4.12.0", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, "requires": { - "once": "^1.4.0" + "call-bind": "1.0.2", + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "get-intrinsic": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.2", + "internal-slot": "1.0.3", + "is-callable": "1.2.4", + "is-negative-zero": "2.0.1", + "is-regex": "1.1.4", + "is-string": "1.0.7", + "object-inspect": "1.11.0", + "object-keys": "1.1.1", + "object.assign": "4.1.2", + "string.prototype.trimend": "1.0.4", + "string.prototype.trimstart": "1.0.4", + "unbox-primitive": "1.0.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-callable": "1.2.4", + "is-date-object": "1.0.5", + "is-symbol": "1.0.4" } }, "es6-error": { @@ -1156,38 +1462,34 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esm": { - "version": "3.2.22", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.22.tgz", - "integrity": "sha512-z8YG7U44L82j1XrdEJcqZOLUnjxco8pO453gKOlaMD1/md1n/5QrscAmYG+oKUspsmDLuBFZrpbxI6aQ67yRxA==", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "evp_bytestokey": { @@ -1196,148 +1498,119 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } + "md5.js": "1.3.5", + "safe-buffer": "5.2.1" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", "dev": true }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "to-regex-range": "5.0.1" } }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" } }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true }, "foreground-child": { - "version": "1.5.6", - "resolved": "http://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" + "cross-spawn": "7.0.3", + "signal-exit": "3.0.3" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "graceful-fs": "4.2.8", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, + "fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "function-loop": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", - "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-assigned-identifiers": { @@ -1349,44 +1622,53 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.2" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "4.0.1" } }, "globals": { @@ -1396,91 +1678,89 @@ "dev": true }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "1.0.2" + } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" } }, "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" } }, "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { - "is-stream": "^1.0.1" + "is-stream": "2.0.1", + "type-fest": "0.8.1" } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, "hmac-drbg": { "version": "1.0.1", @@ -1488,15 +1768,15 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlescape": { @@ -1505,15 +1785,43 @@ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "domelementtype": "1.3.1", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "https-browserify": { @@ -1527,13 +1835,13 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "imurmurhash": { @@ -1542,19 +1850,27 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "inline-source-map": { "version": "0.6.2", @@ -1562,52 +1878,74 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "~0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "source-map": "0.5.7" } }, "insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" + "JSONStream": "1.3.5", + "acorn-node": "1.8.2", + "combine-source-map": "0.8.0", + "concat-stream": "1.6.2", + "is-buffer": "1.1.6", + "path-is-absolute": "1.0.1", + "process": "0.11.10", + "through2": "2.0.5", + "undeclared-identifiers": "1.1.3", + "xtend": "4.0.2" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "1.1.1", + "has": "1.0.3", + "side-channel": "1.0.4" + } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "1.0.1" + } }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "2.2.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" } }, "is-buffer": { @@ -1616,38 +1954,133 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "requires": { + "has": "1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "1.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "1.0.0" + } }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "1.0.0" + } }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" + } }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz", + "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", + "dev": true, + "requires": { + "available-typed-arrays": "1.0.4", + "call-bind": "1.0.2", + "es-abstract": "1.18.5", + "foreach": "2.0.5", + "has-tostringtag": "1.0.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -1658,7 +2091,14 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "isarray": { "version": "1.0.0", @@ -1669,94 +2109,137 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "append-transform": "^1.0.0" + "append-transform": "2.0.0" } }, "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" + "@babel/core": "7.15.0", + "@istanbuljs/schema": "0.1.3", + "istanbul-lib-coverage": "3.0.0", + "semver": "6.3.0" }, "dependencies": { "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "1.0.0", + "cross-spawn": "7.0.3", + "istanbul-lib-coverage": "3.0.0", + "make-dir": "3.1.0", + "p-map": "3.0.0", + "rimraf": "3.0.2", + "uuid": "3.4.0" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "istanbul-lib-coverage": "3.0.0", + "make-dir": "3.1.0", + "supports-color": "7.2.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "4.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" + "debug": "4.3.2", + "istanbul-lib-coverage": "3.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "istanbul-reports": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.4.tgz", - "integrity": "sha512-QCHGyZEK0bfi9GR215QSm+NJwFKEShbtc7tfbUdLAEzn3kKhLDDZqvljn8rPZM9v8CEOhzL1nlYoO4r1ryl67w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "2.0.2", + "istanbul-lib-report": "3.0.0" } }, "js-tokens": { @@ -1769,17 +2252,12 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -1787,40 +2265,30 @@ "dev": true }, "jshint": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-0.5.9.tgz", - "integrity": "sha1-zLW6nSgY3+eIV/6qccy6DLEK68k=", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", + "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", "dev": true, "requires": { - "argsparser": ">=0.0.3", - "minimatch": ">=0.0.4" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "4.17.21", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + } } }, "json-stringify-safe": { @@ -1829,96 +2297,54 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "minimist": "1.2.5" } }, - "labeled-stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", - "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "inherits": "^2.0.1", - "isarray": "^2.0.4", - "stream-splicer": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", - "dev": true - } + "graceful-fs": "4.2.8" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "inherits": "2.0.4", + "stream-splicer": "2.0.1" } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.flattendeep": { @@ -1927,59 +2353,121 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "4.1.2", + "is-unicode-supported": "0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "4.0.0" + } + } } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "js-tokens": "4.0.0" } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" + "semver": "6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "md5.js": { @@ -1988,28 +2476,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" + "hash-base": "3.1.0", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "miller-rabin": { @@ -2018,30 +2487,18 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" + "bn.js": "4.12.0", + "brorand": "1.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -2058,55 +2515,28 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", - "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.3.tgz", + "integrity": "sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==", + "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -2133,238 +2563,672 @@ "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "4.2.2", + "strip-ansi": "6.0.0", + "wrap-ansi": "7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "6.0.0", + "path-exists": "4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "3.1.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "4.3.0", + "string-width": "4.2.2", + "strip-ansi": "6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "7.0.4", + "escalade": "3.1.1", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "string-width": "4.2.2", + "y18n": "5.0.8", + "yargs-parser": "20.2.4" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + } + } + }, + "mochawesome": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-6.2.2.tgz", + "integrity": "sha512-NuIxYo8zczmL5XWLNFiud21OsAJHXrflt2lcRY2u8a3TilGwglhzTPjUHZCLqJvbqj2CnIHX2ueqOh1ViUNDPw==", + "dev": true, + "requires": { + "chalk": "4.1.2", + "diff": "5.0.0", + "json-stringify-safe": "5.0.1", + "lodash.isempty": "4.4.0", + "lodash.isfunction": "3.0.9", + "lodash.isobject": "3.0.2", + "lodash.isstring": "4.0.1", + "mochawesome-report-generator": "5.2.0", + "strip-ansi": "6.0.0", + "uuid": "8.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "4.0.0" + } + } + } + }, + "mochawesome-report-generator": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-5.2.0.tgz", + "integrity": "sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "dateformat": "3.0.3", + "escape-html": "1.0.3", + "fs-extra": "7.0.1", + "fsu": "1.1.1", + "lodash.isfunction": "3.0.9", + "opener": "1.5.2", + "prop-types": "15.7.2", + "tcomb": "3.2.29", + "tcomb-validation": "3.4.1", + "validator": "10.11.0", + "yargs": "13.3.2" + }, + "dependencies": { + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + } } }, "module-deps": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz", - "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "browser-resolve": "2.0.0", + "cached-path-relative": "1.0.2", + "concat-stream": "1.6.2", + "defined": "1.0.0", + "detective": "5.2.0", + "duplexer2": "0.1.4", + "inherits": "2.0.4", + "parents": "1.0.1", + "readable-stream": "2.3.7", + "resolve": "1.20.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.5", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "mustache": { - "version": "2.2.1", - "resolved": "http://registry.npmjs.org/mustache/-/mustache-2.2.1.tgz", - "integrity": "sha1-LEDKIcJ49TFQaCvPkJDkGjM5uHY=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true }, "nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true }, "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.8.0.tgz", + "integrity": "sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==", "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "3.2.6", + "iconv-lite": "0.4.24", + "sax": "1.2.4" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + } + } + }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "1.0.0" + } + }, + "node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "1.1.0", + "@istanbuljs/schema": "0.1.3", + "caching-transform": "4.0.0", + "convert-source-map": "1.8.0", + "decamelize": "1.2.0", + "find-cache-dir": "3.3.1", + "find-up": "4.1.0", + "foreground-child": "2.0.0", + "get-package-type": "0.1.0", + "glob": "7.1.7", + "istanbul-lib-coverage": "3.0.0", + "istanbul-lib-hook": "3.0.0", + "istanbul-lib-instrument": "4.0.3", + "istanbul-lib-processinfo": "2.0.2", + "istanbul-lib-report": "3.0.0", + "istanbul-lib-source-maps": "4.0.0", + "istanbul-reports": "3.0.2", + "make-dir": "3.1.0", + "node-preload": "0.2.1", + "p-map": "3.0.0", + "process-on-spawn": "1.0.0", + "resolve-from": "5.0.0", + "rimraf": "3.0.2", + "signal-exit": "3.0.3", + "spawn-wrap": "2.0.0", + "test-exclude": "6.0.0", + "yargs": "15.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "4.2.2", + "strip-ansi": "6.0.0", + "wrap-ansi": "6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "2.3.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { - "ms": "^2.1.1" + "ansi-styles": "4.3.0", + "string-width": "4.2.2", + "strip-ansi": "6.0.0" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "6.0.0", + "decamelize": "1.2.0", + "find-up": "4.1.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "4.2.2", + "which-module": "2.0.0", + "y18n": "4.0.3", + "yargs-parser": "18.1.3" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" + } } } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nodeunit": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.11.3.tgz", - "integrity": "sha512-gDNxrDWpx07BxYNO/jn1UrGI1vNhDQZrIFphbHMcTCDc5mrrqQBWfQMXPHJ5WSgbFwD1D6bv4HOsqtTrPG03AA==", - "dev": true, - "requires": { - "ejs": "^2.5.2", - "tap": "^12.0.1" - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nyc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.0.tgz", - "integrity": "sha512-iy9fEV8Emevz3z/AanIZsoGa8F4U2p0JKevZ/F0sk+/B2r9E6Qn+EPs0bpxEhnAt6UPlTL8mQZIaSJy8sK0ZFw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - } + "call-bind": "1.0.2", + "define-properties": "1.1.3", + "has-symbols": "1.0.2", + "object-keys": "1.1.1" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "wrappy": "1.0.2" } }, "os-browserify": { @@ -2373,89 +3237,55 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true - }, - "own-or-env": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", - "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.2.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.3.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "3.1.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "graceful-fs": "4.2.8", + "hasha": "5.2.2", + "lodash.flattendeep": "4.4.0", + "release-zalgo": "1.0.0" } }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parents": { @@ -2464,57 +3294,50 @@ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "~0.11.15" + "path-platform": "0.11.15" } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "asn1.js": "5.4.1", + "browserify-aes": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.1.2", + "safe-buffer": "5.2.1" } }, "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-platform": { @@ -2523,60 +3346,74 @@ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.2.1", + "sha.js": "2.4.11" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "2.3.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "process": { @@ -2586,22 +3423,30 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "1.3.2" + } }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" + } }, "public-encrypt": { "version": "4.0.3", @@ -2609,21 +3454,20 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "bn.js": "4.12.0", + "browserify-rsa": "4.1.0", + "create-hash": "1.2.0", + "parse-asn1": "5.1.6", + "randombytes": "2.1.0", + "safe-buffer": "5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "punycode": { @@ -2632,12 +3476,6 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -2651,11 +3489,12 @@ "dev": true }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.2.1" } }, "randomfill": { @@ -2664,92 +3503,75 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.1.0", + "safe-buffer": "5.2.1" } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, "readable-stream": { - "version": "1.1.13-1", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13-1.tgz", - "integrity": "sha1-/G8E8zZr83uuIb7C5BHBtNLPGkY=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" } }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { - "picomatch": "^2.2.1" + "picomatch": "2.3.0" } }, "release-zalgo": { @@ -2758,69 +3580,44 @@ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "es6-error": "4.1.1" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "is-core-module": "2.6.0", + "path-parse": "1.0.7" } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.7" } }, "ripemd160": { @@ -2829,14 +3626,15 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.1.0", + "inherits": "2.0.4" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -2844,27 +3642,24 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { - "version": "0.3.5", - "resolved": "http://registry.npmjs.org/sax/-/sax-0.3.5.tgz", - "integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0=" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "requires": { - "randombytes": "^2.1.0" + "randombytes": "2.1.0" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "sha.js": { "version": "2.4.11", @@ -2872,289 +3667,208 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, - "shasum": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" + "fast-safe-stringify": "2.0.8" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", "dev": true }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spawn-wrap": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "call-bind": "1.0.2", + "get-intrinsic": "1.1.1", + "object-inspect": "1.11.0" } }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", - "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "foreground-child": "2.0.0", + "is-windows": "1.0.2", + "make-dir": "3.1.0", + "rimraf": "3.0.2", + "signal-exit": "3.0.3", + "which": "2.0.2" }, "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "isexe": "2.0.0" } } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "2.0.4", + "readable-stream": "3.6.0" + } + }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" + "duplexer2": "0.1.4", + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } }, "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "xtend": "4.0.2" } }, "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.4", + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3163,56 +3877,62 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "1.0.2", + "define-properties": "1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "1.0.2", + "define-properties": "1.1.3" } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "4.1.0" } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true }, "subarg": { "version": "1.0.0", @@ -3220,15 +3940,24 @@ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "^1.1.0" + "minimist": "1.2.5" } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } } }, "syntax-error": { @@ -3237,143 +3966,33 @@ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn-node": "^1.2.0" - } - }, - "tap": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/tap/-/tap-12.7.0.tgz", - "integrity": "sha512-SjglJmRv0pqrQQ7d5ZBEY8ZOqv3nYDBXEX51oyycOH7piuhn82JKT/yDNewwmOsodTD/RZL9MccA96EjDgK+Eg==", - "dev": true, - "requires": { - "bind-obj-methods": "^2.0.0", - "browser-process-hrtime": "^1.0.0", - "capture-stack-trace": "^1.0.0", - "clean-yaml-object": "^0.1.0", - "color-support": "^1.1.0", - "coveralls": "^3.0.2", - "domain-browser": "^1.2.0", - "esm": "^3.2.5", - "foreground-child": "^1.3.3", - "fs-exists-cached": "^1.0.0", - "function-loop": "^1.0.1", - "glob": "^7.1.3", - "isexe": "^2.0.0", - "js-yaml": "^3.13.1", - "minipass": "^2.3.5", - "mkdirp": "^0.5.1", - "nyc": "^14.0.0", - "opener": "^1.5.1", - "os-homedir": "^1.0.2", - "own-or": "^1.0.0", - "own-or-env": "^1.0.1", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.0", - "source-map-support": "^0.5.10", - "stack-utils": "^1.0.2", - "tap-mocha-reporter": "^3.0.9", - "tap-parser": "^7.0.0", - "tmatch": "^4.0.0", - "trivial-deferred": "^1.0.1", - "ts-node": "^8.0.2", - "tsame": "^2.0.1", - "typescript": "^3.3.3", - "write-file-atomic": "^2.4.2", - "yapool": "^1.0.0" - } - }, - "tap-mocha-reporter": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.9.tgz", - "integrity": "sha512-VO07vhC9EG27EZdOe7bWBj1ldbK+DL9TnRadOgdQmiQOVZjFpUEQuuqO7+rNSO2kfmkq5hWeluYXDWNG/ytXTQ==", - "dev": true, - "requires": { - "color-support": "^1.1.0", - "debug": "^2.1.3", - "diff": "^1.3.2", - "escape-string-regexp": "^1.0.3", - "glob": "^7.0.5", - "js-yaml": "^3.3.1", - "readable-stream": "^2.1.5", - "tap-parser": "^5.1.0", - "unicode-length": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tap-parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", - "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "js-yaml": "^3.2.7", - "readable-stream": "^2" - } - } + "acorn-node": "1.8.2" } }, - "tap-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", - "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", + "tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "requires": { - "events-to-array": "^1.0.1", - "js-yaml": "^3.2.7", - "minipass": "^2.2.0" + "tcomb": "3.2.29" } }, "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" + "@istanbuljs/schema": "0.1.3", + "glob": "7.1.7", + "minimatch": "3.0.4" } }, "through": { @@ -3383,37 +4002,43 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" + "readable-stream": "2.3.7", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3424,21 +4049,9 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "~0.11.0" + "process": "0.11.10" } }, - "tmatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-4.0.0.tgz", - "integrity": "sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg==", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3449,78 +4062,27 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "ts-node": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.0.tgz", - "integrity": "sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==", "dev": true, "requires": { - "arg": "^4.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - }, - "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - } + "is-number": "7.0.0" } }, - "tsame": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tsame/-/tsame-2.0.1.tgz", - "integrity": "sha512-jxyxgKVKa4Bh5dPcO42TJL22lIvfd9LOVJwdovKOnJa4TLLrHxquK+DlGm4rkGmrcur+GRx+x4oW00O2pY/fFw==", - "dev": true - }, "tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "typedarray": { @@ -3529,67 +4091,58 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typescript": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", - "dev": true - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" + "is-typedarray": "1.0.0" } }, + "uglify-js": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", + "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "dev": true + }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, - "undeclared-identifiers": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz", - "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==", + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { - "acorn-node": "^1.3.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" + "function-bind": "1.1.1", + "has-bigints": "1.0.1", + "has-symbols": "1.0.2", + "which-boxed-primitive": "1.0.2" } }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { - "punycode": "^1.3.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "acorn-node": "1.8.2", + "dash-ast": "1.0.0", + "get-assigned-identifiers": "1.2.0", + "simple-concat": "1.0.1", + "xtend": "4.0.2" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -3609,12 +4162,17 @@ } }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "2.0.4", + "is-arguments": "1.1.1", + "is-generator-function": "1.0.10", + "is-typed-array": "1.1.7", + "safe-buffer": "5.2.1", + "which-typed-array": "1.1.6" } }, "util-deprecate": { @@ -3624,193 +4182,206 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "isexe": "2.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "is-bigint": "1.0.4", + "is-boolean-object": "1.1.2", + "is-number-object": "1.0.6", + "is-string": "1.0.7", + "is-symbol": "1.0.4" } }, - "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "which-typed-array": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz", + "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", + "dev": true, "requires": { - "isexe": "^2.0.0" + "available-typed-arrays": "1.0.4", + "call-bind": "1.0.2", + "es-abstract": "1.18.5", + "foreach": "2.0.5", + "has-tostringtag": "1.0.0", + "is-typed-array": "1.1.7" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "2.1.1" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "3.0.0" } } } }, + "workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "string-width": "3.1.0", + "strip-ansi": "5.2.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "imurmurhash": "0.1.4", + "is-typedarray": "1.0.0", + "signal-exit": "3.0.3", + "typedarray-to-buffer": "3.1.5" } }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", - "requires": { - "cliui": "^4.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "5.0.0", + "find-up": "3.0.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "3.1.0", + "which-module": "2.0.0", + "y18n": "4.0.3", + "yargs-parser": "13.1.2" } }, "yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.3.1", + "decamelize": "1.2.0" } }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "camelcase": "6.2.0", + "decamelize": "4.0.0", + "flat": "5.0.2", + "is-plain-obj": "2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } } }, - "yn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", - "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } diff --git a/package.json b/package.json index 9c010eda1..79ba730fe 100644 --- a/package.json +++ b/package.json @@ -27,18 +27,18 @@ "cookie": "0.4.1", "dotenv": "^10.0.0", "elementtree": "0.1.7", - "needle": "2.6.0" + "needle": "2.8.0" }, "devDependencies": { "browserify": "^17.0.0", "chai": "^4.3.4", - "jshint": "2.13.0", - "mocha": "7.2.0", + "jshint": "2.13.1", + "mocha": "9.0.3", "mochawesome": "^6.2.2", "mustache": "4.2.0", "nyc": "^15.1.0", "readable-stream": "3.6.0", - "uglify-js": "3.13.8" + "uglify-js": "3.14.1" }, "author": { "name": "Splunk", @@ -49,4 +49,4 @@ "engine": { "node": ">=0.8.0" } -} \ No newline at end of file +} From caa3d0424e04e3613e1f08195b7702bc41ba0bdd Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 19 Aug 2021 15:27:44 +0530 Subject: [PATCH 11/50] Update package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index a3e26f82d..782e008db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2754,7 +2754,7 @@ "require-directory": "2.1.1", "string-width": "4.2.2", "y18n": "5.0.8", - "yargs-parser": "20.2.4" + "yargs-parser": "20.2.2" } }, "yargs-parser": { From 984fdf44170e51b7766ceadecf1a542a59b1efc6 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 19 Aug 2021 15:52:42 +0530 Subject: [PATCH 12/50] node 8 compatible mocha version --- package-lock.json | 1958 ++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 863 insertions(+), 1097 deletions(-) diff --git a/package-lock.json b/package-lock.json index 782e008db..baa6eb6a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "7.14.5" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { @@ -25,21 +25,21 @@ "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", "dev": true, "requires": { - "@babel/code-frame": "7.14.5", - "@babel/generator": "7.15.0", - "@babel/helper-compilation-targets": "7.15.0", - "@babel/helper-module-transforms": "7.15.0", - "@babel/helpers": "7.15.3", - "@babel/parser": "7.15.3", - "@babel/template": "7.14.5", - "@babel/traverse": "7.15.0", - "@babel/types": "7.15.0", - "convert-source-map": "1.8.0", - "debug": "4.3.2", - "gensync": "1.0.0-beta.2", - "json5": "2.2.0", - "semver": "6.3.0", - "source-map": "0.5.7" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.0", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.15.0", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, "dependencies": { "convert-source-map": { @@ -48,7 +48,7 @@ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "debug": { @@ -86,9 +86,9 @@ "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "requires": { - "@babel/types": "7.15.0", - "jsesc": "2.5.2", - "source-map": "0.5.7" + "@babel/types": "^7.15.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, "@babel/helper-compilation-targets": { @@ -97,10 +97,10 @@ "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "requires": { - "@babel/compat-data": "7.15.0", - "@babel/helper-validator-option": "7.14.5", - "browserslist": "4.16.8", - "semver": "6.3.0" + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { @@ -117,9 +117,9 @@ "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.14.5", - "@babel/template": "7.14.5", - "@babel/types": "7.15.0" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { @@ -128,7 +128,7 @@ "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { @@ -137,7 +137,7 @@ "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { @@ -146,7 +146,7 @@ "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.15.0" } }, "@babel/helper-module-imports": { @@ -155,7 +155,7 @@ "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { @@ -164,14 +164,14 @@ "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.14.5", - "@babel/helper-replace-supers": "7.15.0", - "@babel/helper-simple-access": "7.14.8", - "@babel/helper-split-export-declaration": "7.14.5", - "@babel/helper-validator-identifier": "7.14.9", - "@babel/template": "7.14.5", - "@babel/traverse": "7.15.0", - "@babel/types": "7.15.0" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", + "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-optimise-call-expression": { @@ -180,7 +180,7 @@ "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { @@ -189,10 +189,10 @@ "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "7.15.0", - "@babel/helper-optimise-call-expression": "7.14.5", - "@babel/traverse": "7.15.0", - "@babel/types": "7.15.0" + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/helper-simple-access": { @@ -201,7 +201,7 @@ "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.8" } }, "@babel/helper-split-export-declaration": { @@ -210,7 +210,7 @@ "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "7.15.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { @@ -231,9 +231,9 @@ "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "requires": { - "@babel/template": "7.14.5", - "@babel/traverse": "7.15.0", - "@babel/types": "7.15.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" } }, "@babel/highlight": { @@ -242,9 +242,9 @@ "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "7.14.9", - "chalk": "2.4.2", - "js-tokens": "4.0.0" + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, "@babel/parser": { @@ -259,9 +259,9 @@ "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "7.14.5", - "@babel/parser": "7.15.3", - "@babel/types": "7.15.0" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { @@ -270,15 +270,15 @@ "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "dev": true, "requires": { - "@babel/code-frame": "7.14.5", - "@babel/generator": "7.15.0", - "@babel/helper-function-name": "7.14.5", - "@babel/helper-hoist-variables": "7.14.5", - "@babel/helper-split-export-declaration": "7.14.5", - "@babel/parser": "7.15.3", - "@babel/types": "7.15.0", - "debug": "4.3.2", - "globals": "11.12.0" + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.0", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "dependencies": { "debug": { @@ -304,8 +304,8 @@ "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "7.14.9", - "to-fast-properties": "2.0.0" + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" } }, "@istanbuljs/load-nyc-config": { @@ -314,11 +314,11 @@ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "camelcase": "5.3.1", - "find-up": "4.1.0", - "get-package-type": "0.1.0", - "js-yaml": "3.13.1", - "resolve-from": "5.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "dependencies": { "find-up": { @@ -327,8 +327,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { @@ -337,7 +337,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "4.1.0" + "p-locate": "^4.1.0" } }, "p-locate": { @@ -346,7 +346,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.2.0" } }, "path-exists": { @@ -363,20 +363,14 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "acorn": { @@ -391,9 +385,9 @@ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { - "acorn": "7.4.1", - "acorn-walk": "7.2.0", - "xtend": "4.0.2" + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" } }, "acorn-walk": { @@ -408,14 +402,14 @@ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "clean-stack": "2.2.0", - "indent-string": "4.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-regex": { @@ -430,7 +424,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -439,8 +433,8 @@ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "normalize-path": "3.0.0", - "picomatch": "2.3.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "append-transform": { @@ -449,7 +443,7 @@ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { - "default-require-extensions": "3.0.0" + "default-require-extensions": "^3.0.0" } }, "archy": { @@ -464,7 +458,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "asn1.js": { @@ -473,10 +467,10 @@ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { - "bn.js": "4.12.0", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "safer-buffer": "2.1.2" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" }, "dependencies": { "bn.js": { @@ -493,7 +487,7 @@ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "object-assign": "4.1.1", + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -556,7 +550,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -566,7 +560,7 @@ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "fill-range": "7.0.1" + "fill-range": "^7.0.1" } }, "brorand": { @@ -581,12 +575,12 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "combine-source-map": "0.8.0", - "defined": "1.0.0", - "safe-buffer": "5.2.1", - "through2": "2.0.5", - "umd": "3.0.3" + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" } }, "browser-resolve": { @@ -595,7 +589,7 @@ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { - "resolve": "1.20.0" + "resolve": "^1.17.0" } }, "browser-stdout": { @@ -610,54 +604,54 @@ "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "assert": "1.5.0", - "browser-pack": "6.1.0", - "browser-resolve": "2.0.0", - "browserify-zlib": "0.2.0", - "buffer": "5.2.1", - "cached-path-relative": "1.0.2", - "concat-stream": "1.6.2", - "console-browserify": "1.2.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "defined": "1.0.0", - "deps-sort": "2.0.1", - "domain-browser": "1.2.0", - "duplexer2": "0.1.4", - "events": "3.3.0", - "glob": "7.1.7", - "has": "1.0.3", - "htmlescape": "1.1.1", - "https-browserify": "1.0.0", - "inherits": "2.0.4", - "insert-module-globals": "7.2.1", - "labeled-stream-splicer": "2.0.2", - "mkdirp-classic": "0.5.3", - "module-deps": "6.2.3", - "os-browserify": "0.3.0", - "parents": "1.0.1", - "path-browserify": "1.0.1", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.7", - "resolve": "1.20.0", - "shasum-object": "1.0.0", - "shell-quote": "1.7.2", - "stream-browserify": "3.0.0", - "stream-http": "3.2.0", - "string_decoder": "1.3.0", - "subarg": "1.0.0", - "syntax-error": "1.4.0", - "through2": "2.0.5", - "timers-browserify": "1.4.2", + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", "tty-browserify": "0.0.1", - "url": "0.11.0", - "util": "0.12.4", - "vm-browserify": "1.1.2", - "xtend": "4.0.2" + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" }, "dependencies": { "readable-stream": { @@ -666,13 +660,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" }, "dependencies": { "string_decoder": { @@ -681,7 +675,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -700,12 +694,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.4", - "safe-buffer": "5.2.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -714,9 +708,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -725,10 +719,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.1", - "inherits": "2.0.4", - "safe-buffer": "5.2.1" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -737,8 +731,8 @@ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "5.2.0", - "randombytes": "2.1.0" + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -747,15 +741,15 @@ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "bn.js": "5.2.0", - "browserify-rsa": "4.1.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.5.4", - "inherits": "2.0.4", - "parse-asn1": "5.1.6", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, "browserify-zlib": { @@ -764,7 +758,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.11" + "pako": "~1.0.5" } }, "browserslist": { @@ -773,11 +767,11 @@ "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", "dev": true, "requires": { - "caniuse-lite": "1.0.30001251", - "colorette": "1.3.0", - "electron-to-chromium": "1.3.812", - "escalade": "3.1.1", - "node-releases": "1.1.75" + "caniuse-lite": "^1.0.30001251", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.811", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" } }, "buffer": { @@ -786,8 +780,8 @@ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { - "base64-js": "1.5.1", - "ieee754": "1.2.1" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-from": { @@ -820,10 +814,10 @@ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { - "hasha": "5.2.2", - "make-dir": "3.1.0", - "package-hash": "4.0.0", - "write-file-atomic": "3.0.3" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" } }, "call-bind": { @@ -832,8 +826,8 @@ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "function-bind": "1.1.1", - "get-intrinsic": "1.1.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, "camelcase": { @@ -854,12 +848,12 @@ "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.1", - "type-detect": "4.0.8" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" } }, "chalk": { @@ -868,9 +862,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "dependencies": { "supports-color": { @@ -879,7 +873,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -891,19 +885,19 @@ "dev": true }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, "requires": { - "anymatch": "3.1.2", - "braces": "3.0.2", - "fsevents": "2.3.2", - "glob-parent": "5.1.2", - "is-binary-path": "2.1.0", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "readdirp": "3.6.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } }, "cipher-base": { @@ -912,8 +906,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.2.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clean-stack": { @@ -929,7 +923,7 @@ "dev": true, "requires": { "exit": "0.1.2", - "glob": "7.1.7" + "glob": "^7.1.1" } }, "cliui": { @@ -938,9 +932,9 @@ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "color-convert": { @@ -970,10 +964,10 @@ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" } }, "commondir": { @@ -994,10 +988,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.2", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" }, "dependencies": { "readable-stream": { @@ -1006,13 +1000,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -1027,7 +1021,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -1067,8 +1061,8 @@ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { - "bn.js": "4.12.0", - "elliptic": "6.5.4" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { @@ -1085,11 +1079,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.4", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1098,12 +1092,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.4", - "ripemd160": "2.0.2", - "safe-buffer": "5.2.1", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1112,9 +1106,9 @@ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "path-key": "3.1.1", - "shebang-command": "2.0.0", - "which": "2.0.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "dependencies": { "which": { @@ -1123,7 +1117,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -1134,17 +1128,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.2.1", - "create-ecdh": "4.0.4", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.4", - "pbkdf2": "3.1.2", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "dash-ast": { @@ -1170,7 +1164,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.1.3" + "ms": "^2.1.1" } }, "decamelize": { @@ -1185,7 +1179,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "default-require-extensions": { @@ -1194,7 +1188,7 @@ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, "requires": { - "strip-bom": "4.0.0" + "strip-bom": "^4.0.0" } }, "define-properties": { @@ -1203,7 +1197,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "1.1.1" + "object-keys": "^1.0.12" } }, "defined": { @@ -1218,10 +1212,10 @@ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "shasum-object": "1.0.0", - "subarg": "1.0.0", - "through2": "2.0.5" + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" } }, "des.js": { @@ -1230,8 +1224,8 @@ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detective": { @@ -1240,15 +1234,15 @@ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { - "acorn-node": "1.8.2", - "defined": "1.0.0", - "minimist": "1.2.5" + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" } }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { @@ -1257,9 +1251,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.12.0", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" }, "dependencies": { "bn.js": { @@ -1276,8 +1270,8 @@ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "2.2.0", - "entities": "2.2.0" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" }, "dependencies": { "domelementtype": { @@ -1312,7 +1306,7 @@ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "1" } }, "domutils": { @@ -1321,8 +1315,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.2.2", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "dotenv": { @@ -1336,7 +1330,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.7" + "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { @@ -1345,13 +1339,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -1366,7 +1360,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -1391,13 +1385,13 @@ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "4.12.0", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { @@ -1426,23 +1420,23 @@ "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { - "call-bind": "1.0.2", - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "get-intrinsic": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.2", - "internal-slot": "1.0.3", - "is-callable": "1.2.4", - "is-negative-zero": "2.0.1", - "is-regex": "1.1.4", - "is-string": "1.0.7", - "object-inspect": "1.11.0", - "object-keys": "1.1.1", - "object.assign": "4.1.2", - "string.prototype.trimend": "1.0.4", - "string.prototype.trimstart": "1.0.4", - "unbox-primitive": "1.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { @@ -1451,9 +1445,9 @@ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "is-callable": "1.2.4", - "is-date-object": "1.0.5", - "is-symbol": "1.0.4" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es6-error": { @@ -1498,8 +1492,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.2.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "exit": { @@ -1520,7 +1514,7 @@ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "to-regex-range": "5.0.1" + "to-regex-range": "^5.0.1" } }, "find-cache-dir": { @@ -1529,9 +1523,9 @@ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { @@ -1540,14 +1534,25 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } }, "foreach": { "version": "2.0.5", @@ -1561,8 +1566,8 @@ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "cross-spawn": "7.0.3", - "signal-exit": "3.0.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" } }, "fromentries": { @@ -1577,9 +1582,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "4.2.8", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -1589,9 +1594,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, @@ -1637,9 +1642,9 @@ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.2" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, "get-package-type": { @@ -1654,12 +1659,12 @@ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.4", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -1668,7 +1673,7 @@ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "4.0.1" + "is-glob": "^4.0.1" } }, "globals": { @@ -1695,7 +1700,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-bigints": { @@ -1722,7 +1727,7 @@ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "has-symbols": "1.0.2" + "has-symbols": "^1.0.2" } }, "hash-base": { @@ -1731,9 +1736,9 @@ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, "hash.js": { @@ -1742,8 +1747,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hasha": { @@ -1752,8 +1757,8 @@ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { - "is-stream": "2.0.1", - "type-fest": "0.8.1" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" } }, "he": { @@ -1768,9 +1773,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "html-escaper": { @@ -1791,11 +1796,11 @@ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" }, "dependencies": { "isarray": { @@ -1810,10 +1815,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1835,7 +1840,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -1862,8 +1867,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1878,7 +1883,7 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "~0.5.3" } }, "insert-module-globals": { @@ -1887,16 +1892,16 @@ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "acorn-node": "1.8.2", - "combine-source-map": "0.8.0", - "concat-stream": "1.6.2", - "is-buffer": "1.1.6", - "path-is-absolute": "1.0.1", - "process": "0.11.10", - "through2": "2.0.5", - "undeclared-identifiers": "1.1.3", - "xtend": "4.0.2" + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" } }, "internal-slot": { @@ -1905,9 +1910,9 @@ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "get-intrinsic": "1.1.1", - "has": "1.0.3", - "side-channel": "1.0.4" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, "is-arguments": { @@ -1916,8 +1921,8 @@ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "call-bind": "1.0.2", - "has-tostringtag": "1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-bigint": { @@ -1926,7 +1931,7 @@ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { - "has-bigints": "1.0.1" + "has-bigints": "^1.0.1" } }, "is-binary-path": { @@ -1935,7 +1940,7 @@ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "2.2.0" + "binary-extensions": "^2.0.0" } }, "is-boolean-object": { @@ -1944,8 +1949,8 @@ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { - "call-bind": "1.0.2", - "has-tostringtag": "1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-buffer": { @@ -1966,7 +1971,7 @@ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.3" } }, "is-date-object": { @@ -1975,7 +1980,7 @@ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { - "has-tostringtag": "1.0.0" + "has-tostringtag": "^1.0.0" } }, "is-extglob": { @@ -1996,7 +2001,7 @@ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { - "has-tostringtag": "1.0.0" + "has-tostringtag": "^1.0.0" } }, "is-glob": { @@ -2005,7 +2010,7 @@ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-negative-zero": { @@ -2026,23 +2031,17 @@ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { - "has-tostringtag": "1.0.0" + "has-tostringtag": "^1.0.0" } }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "call-bind": "1.0.2", - "has-tostringtag": "1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-stream": { @@ -2057,7 +2056,7 @@ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "has-tostringtag": "1.0.0" + "has-tostringtag": "^1.0.0" } }, "is-symbol": { @@ -2066,7 +2065,7 @@ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "1.0.2" + "has-symbols": "^1.0.2" } }, "is-typed-array": { @@ -2075,11 +2074,11 @@ "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", "dev": true, "requires": { - "available-typed-arrays": "1.0.4", - "call-bind": "1.0.2", - "es-abstract": "1.18.5", - "foreach": "2.0.5", - "has-tostringtag": "1.0.0" + "available-typed-arrays": "^1.0.4", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" } }, "is-typedarray": { @@ -2088,12 +2087,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2124,7 +2117,7 @@ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "append-transform": "2.0.0" + "append-transform": "^2.0.0" } }, "istanbul-lib-instrument": { @@ -2133,10 +2126,10 @@ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/core": "7.15.0", - "@istanbuljs/schema": "0.1.3", - "istanbul-lib-coverage": "3.0.0", - "semver": "6.3.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { "semver": { @@ -2153,13 +2146,13 @@ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", "dev": true, "requires": { - "archy": "1.0.0", - "cross-spawn": "7.0.3", - "istanbul-lib-coverage": "3.0.0", - "make-dir": "3.1.0", - "p-map": "3.0.0", - "rimraf": "3.0.2", - "uuid": "3.4.0" + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" }, "dependencies": { "uuid": { @@ -2176,9 +2169,9 @@ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "istanbul-lib-coverage": "3.0.0", - "make-dir": "3.1.0", - "supports-color": "7.2.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { "has-flag": { @@ -2193,7 +2186,7 @@ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "4.0.0" + "has-flag": "^4.0.0" } } } @@ -2204,9 +2197,9 @@ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { - "debug": "4.3.2", - "istanbul-lib-coverage": "3.0.0", - "source-map": "0.6.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "dependencies": { "debug": { @@ -2238,8 +2231,8 @@ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "html-escaper": "2.0.2", - "istanbul-lib-report": "3.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, "js-tokens": { @@ -2254,8 +2247,8 @@ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -2270,14 +2263,14 @@ "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", "dev": true, "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "4.17.21", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.21", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" }, "dependencies": { "console-browserify": { @@ -2286,7 +2279,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } } } @@ -2303,7 +2296,7 @@ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "minimist": "1.2.5" + "minimist": "^1.2.5" } }, "jsonfile": { @@ -2312,7 +2305,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.2.8" + "graceful-fs": "^4.1.6" } }, "jsonparse": { @@ -2327,8 +2320,8 @@ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { - "inherits": "2.0.4", - "stream-splicer": "2.0.1" + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" } }, "locate-path": { @@ -2337,8 +2330,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -2384,64 +2377,12 @@ "dev": true }, "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "4.1.2", - "is-unicode-supported": "0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "4.0.0" - } - } + "chalk": "^2.4.2" } }, "loose-envify": { @@ -2450,7 +2391,7 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "4.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "make-dir": { @@ -2459,7 +2400,7 @@ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "semver": "6.3.0" + "semver": "^6.0.0" }, "dependencies": { "semver": { @@ -2476,9 +2417,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4", - "safe-buffer": "5.2.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "miller-rabin": { @@ -2487,8 +2428,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.12.0", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, "dependencies": { "bn.js": { @@ -2517,7 +2458,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2526,6 +2467,15 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -2533,234 +2483,73 @@ "dev": true }, "mocha": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.3.tgz", - "integrity": "sha512-hnYFrSefHxYS2XFGtN01x8un0EwNu2bzKvhpRFhgoybIvMaOkkL60IVPmkb5h6XDmUl4IMSB+rT5cIO4/4bJgg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.23", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", "wide-align": "1.1.3", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "4.2.2", - "strip-ansi": "6.0.0", - "wrap-ansi": "7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "locate-path": "6.0.0", - "path-exists": "4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "js-yaml": { + "object.assign": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "p-limit": "3.1.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "8.0.0", - "is-fullwidth-code-point": "3.0.0", - "strip-ansi": "6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "5.0.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "4.3.0", - "string-width": "4.2.2", - "strip-ansi": "6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "7.0.4", - "escalade": "3.1.1", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "string-width": "4.2.2", - "y18n": "5.0.8", - "yargs-parser": "20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true } } @@ -2771,16 +2560,16 @@ "integrity": "sha512-NuIxYo8zczmL5XWLNFiud21OsAJHXrflt2lcRY2u8a3TilGwglhzTPjUHZCLqJvbqj2CnIHX2ueqOh1ViUNDPw==", "dev": true, "requires": { - "chalk": "4.1.2", - "diff": "5.0.0", - "json-stringify-safe": "5.0.1", - "lodash.isempty": "4.4.0", - "lodash.isfunction": "3.0.9", - "lodash.isobject": "3.0.2", - "lodash.isstring": "4.0.1", - "mochawesome-report-generator": "5.2.0", - "strip-ansi": "6.0.0", - "uuid": "8.3.2" + "chalk": "^4.1.0", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^5.2.0", + "strip-ansi": "^6.0.0", + "uuid": "^8.3.2" }, "dependencies": { "ansi-regex": { @@ -2795,7 +2584,7 @@ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "2.0.1" + "color-convert": "^2.0.1" } }, "chalk": { @@ -2804,8 +2593,8 @@ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "4.3.0", - "supports-color": "7.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "color-convert": { @@ -2814,7 +2603,7 @@ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.4" + "color-name": "~1.1.4" } }, "color-name": { @@ -2841,7 +2630,7 @@ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "5.0.0" + "ansi-regex": "^5.0.0" } }, "supports-color": { @@ -2850,7 +2639,7 @@ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "4.0.0" + "has-flag": "^4.0.0" } } } @@ -2861,18 +2650,18 @@ "integrity": "sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg==", "dev": true, "requires": { - "chalk": "2.4.2", - "dateformat": "3.0.3", - "escape-html": "1.0.3", - "fs-extra": "7.0.1", - "fsu": "1.1.1", - "lodash.isfunction": "3.0.9", - "opener": "1.5.2", - "prop-types": "15.7.2", - "tcomb": "3.2.29", - "tcomb-validation": "3.4.1", - "validator": "10.11.0", - "yargs": "13.3.2" + "chalk": "^2.4.2", + "dateformat": "^3.0.2", + "escape-html": "^1.0.3", + "fs-extra": "^7.0.0", + "fsu": "^1.0.2", + "lodash.isfunction": "^3.0.8", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^10.11.0", + "yargs": "^13.2.2" }, "dependencies": { "opener": { @@ -2889,21 +2678,21 @@ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "browser-resolve": "2.0.0", - "cached-path-relative": "1.0.2", - "concat-stream": "1.6.2", - "defined": "1.0.0", - "detective": "5.2.0", - "duplexer2": "0.1.4", - "inherits": "2.0.4", - "parents": "1.0.1", - "readable-stream": "2.3.7", - "resolve": "1.20.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.5", - "xtend": "4.0.2" + "JSONStream": "^1.0.3", + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" }, "dependencies": { "readable-stream": { @@ -2912,13 +2701,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -2933,7 +2722,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -2949,20 +2738,14 @@ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, "needle": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.8.0.tgz", "integrity": "sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==", "requires": { - "debug": "3.2.6", - "iconv-lite": "0.4.24", - "sax": "1.2.4" + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" }, "dependencies": { "sax": { @@ -2972,13 +2755,23 @@ } } }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { - "process-on-spawn": "1.0.0" + "process-on-spawn": "^1.0.0" } }, "node-releases": { @@ -2999,33 +2792,33 @@ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { - "@istanbuljs/load-nyc-config": "1.1.0", - "@istanbuljs/schema": "0.1.3", - "caching-transform": "4.0.0", - "convert-source-map": "1.8.0", - "decamelize": "1.2.0", - "find-cache-dir": "3.3.1", - "find-up": "4.1.0", - "foreground-child": "2.0.0", - "get-package-type": "0.1.0", - "glob": "7.1.7", - "istanbul-lib-coverage": "3.0.0", - "istanbul-lib-hook": "3.0.0", - "istanbul-lib-instrument": "4.0.3", - "istanbul-lib-processinfo": "2.0.2", - "istanbul-lib-report": "3.0.0", - "istanbul-lib-source-maps": "4.0.0", - "istanbul-reports": "3.0.2", - "make-dir": "3.1.0", - "node-preload": "0.2.1", - "p-map": "3.0.0", - "process-on-spawn": "1.0.0", - "resolve-from": "5.0.0", - "rimraf": "3.0.2", - "signal-exit": "3.0.3", - "spawn-wrap": "2.0.0", - "test-exclude": "6.0.0", - "yargs": "15.4.1" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "dependencies": { "ansi-regex": { @@ -3040,7 +2833,7 @@ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "2.0.1" + "color-convert": "^2.0.1" } }, "cliui": { @@ -3049,9 +2842,9 @@ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "4.2.2", - "strip-ansi": "6.0.0", - "wrap-ansi": "6.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "color-convert": { @@ -3060,7 +2853,7 @@ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.4" + "color-name": "~1.1.4" } }, "color-name": { @@ -3075,7 +2868,7 @@ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "emoji-regex": { @@ -3090,8 +2883,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "is-fullwidth-code-point": { @@ -3106,7 +2899,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "4.1.0" + "p-locate": "^4.1.0" } }, "p-locate": { @@ -3115,7 +2908,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.2.0" } }, "path-exists": { @@ -3136,9 +2929,9 @@ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "emoji-regex": "8.0.0", - "is-fullwidth-code-point": "3.0.0", - "strip-ansi": "6.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { @@ -3147,7 +2940,7 @@ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "5.0.0" + "ansi-regex": "^5.0.0" } }, "wrap-ansi": { @@ -3156,9 +2949,9 @@ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "4.3.0", - "string-width": "4.2.2", - "strip-ansi": "6.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "yargs": { @@ -3167,17 +2960,17 @@ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "6.0.0", - "decamelize": "1.2.0", - "find-up": "4.1.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "4.2.2", - "which-module": "2.0.0", - "y18n": "4.0.3", - "yargs-parser": "18.1.3" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" } }, "yargs-parser": { @@ -3186,8 +2979,8 @@ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -3216,10 +3009,21 @@ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "call-bind": "1.0.2", - "define-properties": "1.1.3", - "has-symbols": "1.0.2", - "object-keys": "1.1.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" } }, "once": { @@ -3228,7 +3032,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-browserify": { @@ -3243,7 +3047,7 @@ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "2.2.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -3252,7 +3056,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -3261,7 +3065,7 @@ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "aggregate-error": "3.1.0" + "aggregate-error": "^3.0.0" } }, "p-try": { @@ -3276,10 +3080,10 @@ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { - "graceful-fs": "4.2.8", - "hasha": "5.2.2", - "lodash.flattendeep": "4.4.0", - "release-zalgo": "1.0.0" + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" } }, "pako": { @@ -3294,7 +3098,7 @@ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "0.11.15" + "path-platform": "~0.11.15" } }, "parse-asn1": { @@ -3303,11 +3107,11 @@ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "5.4.1", - "browserify-aes": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.1.2", - "safe-buffer": "5.2.1" + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "path-browserify": { @@ -3358,11 +3162,11 @@ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.2.1", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "picomatch": { @@ -3377,7 +3181,7 @@ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "4.1.0" + "find-up": "^4.0.0" }, "dependencies": { "find-up": { @@ -3386,8 +3190,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { @@ -3396,7 +3200,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "4.1.0" + "p-locate": "^4.1.0" } }, "p-locate": { @@ -3405,7 +3209,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.2.0" } }, "path-exists": { @@ -3434,7 +3238,7 @@ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "requires": { - "fromentries": "1.3.2" + "fromentries": "^1.2.0" } }, "prop-types": { @@ -3443,9 +3247,9 @@ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "react-is": "16.13.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "public-encrypt": { @@ -3454,12 +3258,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.12.0", - "browserify-rsa": "4.1.0", - "create-hash": "1.2.0", - "parse-asn1": "5.1.6", - "randombytes": "2.1.0", - "safe-buffer": "5.2.1" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" }, "dependencies": { "bn.js": { @@ -3494,7 +3298,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "5.2.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3503,8 +3307,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.1.0", - "safe-buffer": "5.2.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "react-is": { @@ -3519,7 +3323,7 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "2.3.7" + "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { @@ -3528,13 +3332,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -3549,7 +3353,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -3560,18 +3364,18 @@ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "inherits": "2.0.4", - "string_decoder": "1.3.0", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, "requires": { - "picomatch": "2.3.0" + "picomatch": "^2.0.4" } }, "release-zalgo": { @@ -3580,7 +3384,7 @@ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { - "es6-error": "4.1.1" + "es6-error": "^4.0.1" } }, "require-directory": { @@ -3601,8 +3405,8 @@ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "2.6.0", - "path-parse": "1.0.7" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, "resolve-from": { @@ -3617,7 +3421,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "7.1.7" + "glob": "^7.1.3" } }, "ripemd160": { @@ -3626,8 +3430,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "safe-buffer": { @@ -3646,14 +3450,11 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "2.1.0" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "set-blocking": { "version": "2.0.0", @@ -3667,8 +3468,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.2.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shasum-object": { @@ -3677,7 +3478,7 @@ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { - "fast-safe-stringify": "2.0.8" + "fast-safe-stringify": "^2.0.7" } }, "shebang-command": { @@ -3686,7 +3487,7 @@ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "3.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { @@ -3713,9 +3514,9 @@ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "call-bind": "1.0.2", - "get-intrinsic": "1.1.1", - "object-inspect": "1.11.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "signal-exit": { @@ -3742,12 +3543,12 @@ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "foreground-child": "2.0.0", - "is-windows": "1.0.2", - "make-dir": "3.1.0", - "rimraf": "3.0.2", - "signal-exit": "3.0.3", - "which": "2.0.2" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, "dependencies": { "which": { @@ -3756,7 +3557,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -3773,8 +3574,8 @@ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "3.6.0" + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" } }, "stream-combiner2": { @@ -3783,8 +3584,8 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.7" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { @@ -3793,13 +3594,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -3814,7 +3615,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -3825,10 +3626,10 @@ "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "xtend": "4.0.2" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" } }, "stream-splicer": { @@ -3837,8 +3638,8 @@ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" }, "dependencies": { "readable-stream": { @@ -3847,13 +3648,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -3868,7 +3669,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -3879,9 +3680,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "string.prototype.trimend": { @@ -3890,8 +3691,8 @@ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "1.0.2", - "define-properties": "1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { @@ -3900,8 +3701,8 @@ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "1.0.2", - "define-properties": "1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string_decoder": { @@ -3910,7 +3711,7 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "5.2.1" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { @@ -3919,7 +3720,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -3940,24 +3741,16 @@ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "1.2.5" + "minimist": "^1.1.0" } }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { - "has-flag": "4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } + "has-flag": "^3.0.0" } }, "syntax-error": { @@ -3966,7 +3759,7 @@ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn-node": "1.8.2" + "acorn-node": "^1.2.0" } }, "tcomb": { @@ -3981,7 +3774,7 @@ "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "requires": { - "tcomb": "3.2.29" + "tcomb": "^3.0.0" } }, "test-exclude": { @@ -3990,9 +3783,9 @@ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "@istanbuljs/schema": "0.1.3", - "glob": "7.1.7", - "minimatch": "3.0.4" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" } }, "through": { @@ -4007,8 +3800,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.7", - "xtend": "4.0.2" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" }, "dependencies": { "readable-stream": { @@ -4017,13 +3810,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "safe-buffer": { @@ -4038,7 +3831,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -4049,7 +3842,7 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "0.11.10" + "process": "~0.11.0" } }, "to-fast-properties": { @@ -4064,7 +3857,7 @@ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "7.0.0" + "is-number": "^7.0.0" } }, "tty-browserify": { @@ -4097,7 +3890,7 @@ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "is-typedarray": "1.0.0" + "is-typedarray": "^1.0.0" } }, "uglify-js": { @@ -4118,10 +3911,10 @@ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { - "function-bind": "1.1.1", - "has-bigints": "1.0.1", - "has-symbols": "1.0.2", - "which-boxed-primitive": "1.0.2" + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" } }, "undeclared-identifiers": { @@ -4130,11 +3923,11 @@ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { - "acorn-node": "1.8.2", - "dash-ast": "1.0.0", - "get-assigned-identifiers": "1.2.0", - "simple-concat": "1.0.1", - "xtend": "4.0.2" + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" } }, "universalify": { @@ -4167,12 +3960,12 @@ "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { - "inherits": "2.0.4", - "is-arguments": "1.1.1", - "is-generator-function": "1.0.10", - "is-typed-array": "1.1.7", - "safe-buffer": "5.2.1", - "which-typed-array": "1.1.6" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } }, "util-deprecate": { @@ -4200,12 +3993,12 @@ "dev": true }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-boxed-primitive": { @@ -4214,11 +4007,11 @@ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "is-bigint": "1.0.4", - "is-boolean-object": "1.1.2", - "is-number-object": "1.0.6", - "is-string": "1.0.7", - "is-symbol": "1.0.4" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, "which-module": { @@ -4233,12 +4026,12 @@ "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", "dev": true, "requires": { - "available-typed-arrays": "1.0.4", - "call-bind": "1.0.2", - "es-abstract": "1.18.5", - "foreach": "2.0.5", - "has-tostringtag": "1.0.0", - "is-typed-array": "1.1.7" + "available-typed-arrays": "^1.0.4", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.6" } }, "wide-align": { @@ -4247,7 +4040,7 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^1.0.2 || 2" }, "dependencies": { "ansi-regex": { @@ -4262,8 +4055,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -4272,26 +4065,20 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, - "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, "wrappy": { @@ -4306,10 +4093,10 @@ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "imurmurhash": "0.1.4", - "is-typedarray": "1.0.0", - "signal-exit": "3.0.3", - "typedarray-to-buffer": "3.1.5" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "xtend": { @@ -4330,16 +4117,16 @@ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.3", - "yargs-parser": "13.1.2" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { @@ -4348,41 +4135,20 @@ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { - "camelcase": "6.2.0", - "decamelize": "4.0.0", - "flat": "5.0.2", - "is-plain-obj": "2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - } + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } } } diff --git a/package.json b/package.json index 79ba730fe..85d032a3c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "browserify": "^17.0.0", "chai": "^4.3.4", "jshint": "2.13.1", - "mocha": "9.0.3", + "mocha": "7.2.0", "mochawesome": "^6.2.2", "mustache": "4.2.0", "nyc": "^15.1.0", From e0fa1672f6ded943926256135522630d4962072f Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 20 Aug 2021 14:03:05 +0530 Subject: [PATCH 13/50] login example added --- examples/node/login.js | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 examples/node/login.js diff --git a/examples/node/login.js b/examples/node/login.js new file mode 100644 index 000000000..7eb5396f5 --- /dev/null +++ b/examples/node/login.js @@ -0,0 +1,48 @@ +var splunkjs = require('../../index'); + +/* +################ Login with sessionKey ################# +Execute following command to create sessionKey manually: +curl -k -u : ://:/services/auth/login -d username= -d password= +*/ +var serviceWithSessionKey = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: 'SESSION_KEY', // Add your session key + version: '8', + }); + +serviceWithSessionKey.get("search/jobs", { count: 2 }, function (err, res) { + if (err) + console.log(err); + else + console.log("Login successful with sessionKey"); +}); + +/* +################ Login with token ################# +Execute following command to enable token authentication: +curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false + +Execute following command to create bearer token manually: +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d +*/ +var serviceWithBearerToken = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: 'TOKEN', // Add your token here + version: '8', + }); + +serviceWithBearerToken.get("search/jobs", { count: 2 }, function (err, res) { + if (err) + console.log(err); + else + console.log("Login successful with bearer token"); +}); From 467400adc04c49492782b7ab6c33ec40ca529a41 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 20 Aug 2021 14:03:25 +0530 Subject: [PATCH 14/50] Update README.md --- README.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/README.md b/README.md index 6932640cc..7d066b267 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ This HTML example uses the Splunk Enterprise SDK for JavaScript to list all jobs This example shows how to use the Splunk Enterprise SDK for JavaScript and Node.js to list all jobs: +##### Login with username and password + ```javascript var splunkjs = require('splunk-sdk'); @@ -107,6 +109,69 @@ This example shows how to use the Splunk Enterprise SDK for JavaScript and Node. }); }); ``` +##### Login with sessionKey +```shell +# Create a sessionKey +curl -k -u : ://:/services/auth/login -d username= -d password= +``` + +```javascript +var serviceWithSessionKey = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: 'SESSION_KEY', // Add your session key + version: '8', + }); + +serviceWithSessionKey.get("search/jobs", { count: 1 }, function (err, res) { + if (err) { + console.log(err); + } else } + console.log("Login successful with sessionKey"); + } +}); +``` + +##### Login with token + +```shell +# Enable token authetication from shell +curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false + +# Enable token authentication from web +Go to settings > Tokens and click on 'Enable Token Authentication' +``` +```shell +# Create a token from shell +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d + +# Create a token from web +1. Go to settings > Token and click on 'New Token' +2. Enter the relevant information +3. Copy the created token and save it somewhere safe. +``` + +```javascript +var serviceWithBearerToken = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: 'TOKEN', // Add your token here + version: '8', + }); + +serviceWithBearerToken.get("search/jobs", { count: 2 }, function (err, res) { + if (err) + console.log(err); + else + console.log("Login successful with bearer token"); +}); +``` ## SDK examples From 8a9b586dd04bdf4302c7292f3f247f4e9727cd0d Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 20 Aug 2021 14:20:05 +0530 Subject: [PATCH 15/50] Update README.md --- README.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7d066b267..ca099f762 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ This example shows how to use the Splunk Enterprise SDK for JavaScript and Node. }); ``` ##### Login with sessionKey + ```shell # Create a sessionKey curl -k -u : ://:/services/auth/login -d username= -d password= @@ -122,7 +123,7 @@ var serviceWithSessionKey = new splunkjs.Service( scheme: 'https', host: 'localhost', port: '8089', - sessionKey: 'SESSION_KEY', // Add your session key + sessionKey: SESSION_KEY, // Add your sessionKey here version: '8', }); @@ -138,17 +139,20 @@ serviceWithSessionKey.get("search/jobs", { count: 1 }, function (err, res) { ##### Login with token ```shell -# Enable token authetication from shell +#### From shell #### +# Enable token authetication curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false -# Enable token authentication from web -Go to settings > Tokens and click on 'Enable Token Authentication' +# Create a token +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d ``` + ```shell -# Create a token from shell -curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d +#### From web #### +# Enable token authentication +Go to settings > Tokens and click on 'Enable Token Authentication' -# Create a token from web +# Create a token 1. Go to settings > Token and click on 'New Token' 2. Enter the relevant information 3. Copy the created token and save it somewhere safe. @@ -161,7 +165,7 @@ var serviceWithBearerToken = new splunkjs.Service( scheme: 'https', host: 'localhost', port: '8089', - sessionKey: 'TOKEN', // Add your token here + sessionKey: TOKEN, // Add your token here version: '8', }); From d4f2997425a6e687898a5688d897e376b84fb2cd Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Mon, 23 Aug 2021 12:44:24 +0530 Subject: [PATCH 16/50] Change: admin -> username for token creation --- README.md | 2 +- examples/node/login.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ca099f762..646d863b1 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,7 @@ serviceWithSessionKey.get("search/jobs", { count: 1 }, function (err, res) { curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false # Create a token -curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name= --data audience=Users --data-urlencode expires_on=+30d ``` ```shell diff --git a/examples/node/login.js b/examples/node/login.js index 7eb5396f5..f37d343e2 100644 --- a/examples/node/login.js +++ b/examples/node/login.js @@ -28,7 +28,7 @@ Execute following command to enable token authentication: curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false Execute following command to create bearer token manually: -curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name=admin --data audience=Users --data-urlencode expires_on=+30d +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name= --data audience=Users --data-urlencode expires_on=+30d */ var serviceWithBearerToken = new splunkjs.Service( { From 8ce8c392ecba86333b8643afb7cf0036c6b23b91 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Mon, 30 Aug 2021 11:34:39 +0530 Subject: [PATCH 17/50] Changes for savedsearch history pagination --- lib/service.js | 25 +++++++++++++++--- tests/service_tests/savedsearch.js | 41 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/lib/service.js b/lib/service.js index 299c2a022..bd7837f6c 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1702,24 +1702,43 @@ * `splunkjs.Service.Job` instances. * * @example - * + * With callback + * * var savedSearch = service.savedSearches().item("MySavedSearch"); * savedSearch.history(function(err, jobs, search) { * for(var i = 0; i < jobs.length; i++) { * console.log("Job", i, ":", jobs[i].sid); * } * }); + * + * @example + * With calback and optional parameters. + * Pass { count: 0 } to fetch all results. + * + * var savedSearch = service.savedSearches().item("MySavedSearch"); + * savedSearch.history({count: 1}, function(err, jobs, search) { + * for(var i = 0; i < jobs.length; i++) { + * console.log("Job", i, ":", jobs[i].sid); + * } + * }); * + * @param {Object} options Additional parameters. * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. * * @endpoint saved/searches/{name}/history * @method splunkjs.Service.SavedSearch */ - history: function(callback) { + history: function(options, callback) { + if (!callback && utils.isFunction(options)) { + callback = options; + options = {}; + } + callback = callback || function() {}; + options = options || {}; var that = this; - return this.get("history", {}, function(err, response) { + return this.get("history", options, function(err, response) { if (err) { callback(err); return; diff --git a/tests/service_tests/savedsearch.js b/tests/service_tests/savedsearch.js index 5430806ed..9676e3a46 100644 --- a/tests/service_tests/savedsearch.js +++ b/tests/service_tests/savedsearch.js @@ -195,6 +195,47 @@ exports.setup = function (svc, loggedOutSvc) { done(); }) + it("Callback#history with pagination", function (done) { + var name = "jssdk_savedsearch_" + getNextId(); + var originalSearch = "search index=_internal | head 1"; + var searches = this.service.savedSearches({ owner: this.service.username, app: "sdkappcollection" }); + + Async.chain([ + function (done) { + searches.create({ search: originalSearch, name: name }, done); + }, + function (search, done) { + assert.ok(search); + search.dispatch(done); + }, + function (job, search, done) { + assert.ok(job); + assert.ok(search); + search.dispatch(done); + }, + function (job, search, done) { + assert.ok(job); + assert.ok(search); + + tutils.pollUntil( + job, () => job.properties()["isDone"], 10, Async.augment(done, search) + ); + }, + function (job, search, done) { + search.history({ count: 1 }, Async.augment(done, job)); + }, + function (jobs, search, originalJob, done) { + assert.ok(jobs.length > 0); + assert.equal(jobs.length, 1); + done(); + }], + function (err) { + assert.ok(!err); + done(); + } + ); + }); + it("Callback#history error", function (done) { var name = "jssdk_savedsearch_" + getNextId(); var originalSearch = "search index=_internal | head 1"; From 971d655d16269c5a59da7cf7d99921f99a3f3bd0 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Tue, 31 Aug 2021 14:27:02 +0530 Subject: [PATCH 18/50] Update service.js --- lib/service.js | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/lib/service.js b/lib/service.js index bd7837f6c..b506d7eba 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1702,43 +1702,24 @@ * `splunkjs.Service.Job` instances. * * @example - * With callback - * + * * var savedSearch = service.savedSearches().item("MySavedSearch"); * savedSearch.history(function(err, jobs, search) { * for(var i = 0; i < jobs.length; i++) { * console.log("Job", i, ":", jobs[i].sid); * } * }); - * - * @example - * With calback and optional parameters. - * Pass { count: 0 } to fetch all results. - * - * var savedSearch = service.savedSearches().item("MySavedSearch"); - * savedSearch.history({count: 1}, function(err, jobs, search) { - * for(var i = 0; i < jobs.length; i++) { - * console.log("Job", i, ":", jobs[i].sid); - * } - * }); * - * @param {Object} options Additional parameters. * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. * * @endpoint saved/searches/{name}/history * @method splunkjs.Service.SavedSearch */ - history: function(options, callback) { - if (!callback && utils.isFunction(options)) { - callback = options; - options = {}; - } - + history: function(callback) { callback = callback || function() {}; - options = options || {}; var that = this; - return this.get("history", options, function(err, response) { + return this.get("history", {}, function(err, response) { if (err) { callback(err); return; @@ -5694,4 +5675,4 @@ }); } }); -})(); +})(); \ No newline at end of file From d468ab35131def312962ab19208f00ed182c732f Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 1 Sep 2021 11:25:23 +0530 Subject: [PATCH 19/50] Support added for output_mode for oneShotSearch --- lib/http.js | 6 ---- tests/service_tests/job.js | 64 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/lib/http.js b/lib/http.js index 03b84959a..fee86fab3 100644 --- a/lib/http.js +++ b/lib/http.js @@ -30,12 +30,6 @@ var post = message.post || {}; var outputMode = query.output_mode || post.output_mode || "json"; - // If the output mode doesn't start with "json" (e.g. "csv" or - // "xml"), we change it to "json". - if (!utils.startsWith(outputMode, "json")) { - outputMode = "json"; - } - query.output_mode = outputMode; return query; diff --git a/tests/service_tests/job.js b/tests/service_tests/job.js index 2263920eb..bb0e595c3 100644 --- a/tests/service_tests/job.js +++ b/tests/service_tests/job.js @@ -615,6 +615,70 @@ exports.setup = function (svc) { ); }); + it("Callback#Oneshot search with json results", function (done) { + var sid = getNextId(); + var that = this; + + Async.chain([ + function (done) { + that.service.jobs().oneshotSearch('search index=_internal | head 1 | stats count', { id: sid, output_mode: 'json' }, done); + }, + function (results, done) { + assert.ok(results); + assert.ok(results.fields); + assert.strictEqual(results.fields.length, 1); + done(); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); + + it("Callback#Oneshot search with xml results", function (done) { + var sid = getNextId(); + var that = this; + + Async.chain([ + function (done) { + that.service.jobs().oneshotSearch('search index=_internal | head 1 | stats count', { id: sid, output_mode: 'xml' }, done); + }, + function (results, done) { + assert.ok(results); + assert.ok(results.includes('count')); + done(); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); + + it("Callback#Oneshot search with csv results", function (done) { + var sid = getNextId(); + var that = this; + + Async.chain([ + function (done) { + that.service.jobs().oneshotSearch('search index=_internal | head 1 | stats count', { id: sid, output_mode: 'csv' }, done); + }, + function (results, done) { + assert.ok(results); + assert.ok(results.includes('count')); + done(); + } + ], + function (err) { + assert.ok(!err); + done(); + } + ); + }); + it("Callback#Oneshot search with no results", function (done) { var sid = getNextId(); var that = this; From efd2a8082228b969bf87f8bcf3506a194283c056 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Mon, 29 Jun 2020 20:42:53 -0700 Subject: [PATCH 20/50] Add create-react-app example and fix process.env assignment issue, --- examples/browser/create-react-app/.gitignore | 25 ++++ examples/browser/create-react-app/README.md | 68 +++++++++ .../browser/create-react-app/package.json | 38 +++++ .../create-react-app/public/favicon.ico | Bin 0 -> 3150 bytes .../create-react-app/public/index.html | 43 ++++++ .../create-react-app/public/logo192.png | Bin 0 -> 5347 bytes .../create-react-app/public/logo512.png | Bin 0 -> 9664 bytes .../create-react-app/public/manifest.json | 25 ++++ .../create-react-app/public/robots.txt | 3 + examples/browser/create-react-app/src/App.css | 18 +++ examples/browser/create-react-app/src/App.js | 24 +++ .../browser/create-react-app/src/App.test.js | 9 ++ .../browser/create-react-app/src/Login.css | 27 ++++ .../browser/create-react-app/src/Login.js | 37 +++++ .../create-react-app/src/SplunkJsExample.css | 37 +++++ .../create-react-app/src/SplunkJsExample.js | 119 +++++++++++++++ .../browser/create-react-app/src/index.css | 13 ++ .../browser/create-react-app/src/index.js | 17 +++ .../create-react-app/src/serviceWorker.js | 141 ++++++++++++++++++ .../create-react-app/src/setupProxy.js | 22 +++ .../create-react-app/src/setupTests.js | 5 + .../create-react-app/src/splunkConfig.js | 6 + index.js | 9 +- 23 files changed, 684 insertions(+), 2 deletions(-) create mode 100644 examples/browser/create-react-app/.gitignore create mode 100644 examples/browser/create-react-app/README.md create mode 100644 examples/browser/create-react-app/package.json create mode 100644 examples/browser/create-react-app/public/favicon.ico create mode 100644 examples/browser/create-react-app/public/index.html create mode 100644 examples/browser/create-react-app/public/logo192.png create mode 100644 examples/browser/create-react-app/public/logo512.png create mode 100644 examples/browser/create-react-app/public/manifest.json create mode 100644 examples/browser/create-react-app/public/robots.txt create mode 100644 examples/browser/create-react-app/src/App.css create mode 100644 examples/browser/create-react-app/src/App.js create mode 100644 examples/browser/create-react-app/src/App.test.js create mode 100644 examples/browser/create-react-app/src/Login.css create mode 100644 examples/browser/create-react-app/src/Login.js create mode 100644 examples/browser/create-react-app/src/SplunkJsExample.css create mode 100644 examples/browser/create-react-app/src/SplunkJsExample.js create mode 100644 examples/browser/create-react-app/src/index.css create mode 100644 examples/browser/create-react-app/src/index.js create mode 100644 examples/browser/create-react-app/src/serviceWorker.js create mode 100644 examples/browser/create-react-app/src/setupProxy.js create mode 100644 examples/browser/create-react-app/src/setupTests.js create mode 100644 examples/browser/create-react-app/src/splunkConfig.js diff --git a/examples/browser/create-react-app/.gitignore b/examples/browser/create-react-app/.gitignore new file mode 100644 index 000000000..3d5edad0e --- /dev/null +++ b/examples/browser/create-react-app/.gitignore @@ -0,0 +1,25 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +package-lock.json + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/examples/browser/create-react-app/README.md b/examples/browser/create-react-app/README.md new file mode 100644 index 000000000..35ae6439e --- /dev/null +++ b/examples/browser/create-react-app/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.
+Open [https://localhost:3000](https://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `yarn build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/examples/browser/create-react-app/package.json b/examples/browser/create-react-app/package.json new file mode 100644 index 000000000..beb5de153 --- /dev/null +++ b/examples/browser/create-react-app/package.json @@ -0,0 +1,38 @@ +{ + "name": "splunk-sdk-create-react-app", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "assert": "^2.0.0", + "jquery": "^3.5.1", + "nodeunit": "^0.11.3", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-scripts": "3.4.1", + "splunk-sdk": "^1.9.0" + }, + "scripts": { + "start": "HTTPS=true react-scripts start --no-cache", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/examples/browser/create-react-app/public/favicon.ico b/examples/browser/create-react-app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bcd5dfd67cd0361b78123e95c2dd96031f27f743 GIT binary patch literal 3150 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 MDeX2GIKR{Qf5okjU;qFB literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/index.html b/examples/browser/create-react-app/public/index.html new file mode 100644 index 000000000..aa069f27c --- /dev/null +++ b/examples/browser/create-react-app/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/examples/browser/create-react-app/public/logo192.png b/examples/browser/create-react-app/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/examples/browser/create-react-app/public/manifest.json b/examples/browser/create-react-app/public/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/examples/browser/create-react-app/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/examples/browser/create-react-app/public/robots.txt b/examples/browser/create-react-app/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/examples/browser/create-react-app/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/examples/browser/create-react-app/src/App.css b/examples/browser/create-react-app/src/App.css new file mode 100644 index 000000000..50b63a363 --- /dev/null +++ b/examples/browser/create-react-app/src/App.css @@ -0,0 +1,18 @@ +.App { + text-align: center; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js new file mode 100644 index 000000000..1366634d3 --- /dev/null +++ b/examples/browser/create-react-app/src/App.js @@ -0,0 +1,24 @@ +import React from 'react'; +import './App.css'; +import SplunkJsExample from './SplunkJsExample'; + +function App() { + return ( +
+
+

+ 1. Edit src/splunkConfig.js to input your Splunk host/port information and restart this project using npm start. +

+ +

+ 2. Enter credentials below and click Submit to login, run a sample search, and display the results. +

+ + + +
+
+ ); +} + +export default App; diff --git a/examples/browser/create-react-app/src/App.test.js b/examples/browser/create-react-app/src/App.test.js new file mode 100644 index 000000000..4db7ebc25 --- /dev/null +++ b/examples/browser/create-react-app/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + const { getByText } = render(); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css new file mode 100644 index 000000000..ce61d5161 --- /dev/null +++ b/examples/browser/create-react-app/src/Login.css @@ -0,0 +1,27 @@ +label { + padding: 10px; +} + +input { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 5px; + margin: 5px; + border: 2px solid #ccc; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +button { + cursor: pointer; + font-size: calc(10px + 2vmin); + background-color: black; + color: #61dafb; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 10px; + margin: 10px; +} \ No newline at end of file diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js new file mode 100644 index 000000000..f6f380abd --- /dev/null +++ b/examples/browser/create-react-app/src/Login.js @@ -0,0 +1,37 @@ +import React from 'react'; +import './Login.css'; + +class Login extends React.Component { + constructor(props) { + super(props); + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleClickSearch = this.handleClickSearch.bind(this); + } + + handleUsernameChange(e) { + this.props.onUsernameChange(e.target.value); + } + + handlePasswordChange(e) { + this.props.onPasswordChange(e.target.value); + } + + handleClickSearch(e) { + this.props.onClickSearch(); + } + + render() { + return ( +
+ +
+ +
+
+
+ ); + } + } + + export default Login; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.css b/examples/browser/create-react-app/src/SplunkJsExample.css new file mode 100644 index 000000000..452e89009 --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.css @@ -0,0 +1,37 @@ +table.Results { + border: 1px solid rgb(45, 45, 45); + background-color: rgb(175, 175, 175); + width: calc(100% - 50px); + text-align: left; + border-collapse: collapse; + margin: 25px; +} + +table.Results td, table.Results th { + border: 1px solid rgb(175, 175, 175); + padding: 3px 2px; +} + +table.Results tbody td { + font-size: 14px; +} + +table.Results tr:nth-child(odd) { + color: black; +} + +table.Results tr:nth-child(even) { + background: rgb(75, 75, 75); + color: white; +} + +table.Results thead { + background: rgb(50, 50, 50); + border-bottom: 2px solid rgb(225, 225, 225); +} + +table.Results thead th { + font-size: 15px; + font-weight: bold; + color: white; +} diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js new file mode 100644 index 000000000..648974fdf --- /dev/null +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -0,0 +1,119 @@ +import React from 'react'; +import './SplunkJsExample.css'; +import Login from './Login'; +import * as splunkjs from 'splunk-sdk'; + +// jquery.ajax is used for the underlying http client in ProxyHttp +window.$ = require('jquery'); + +//const splunkjs = require('splunk-sdk'); +const Async = splunkjs.Async; +const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); + +class SplunkJsExample extends React.Component { + constructor(props) { + super(props); + // We define handlers here as well as LoginForm in order to lift + // the username and password states up so that they can be used + // here to run and populate search results. + // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html + this.handleUsernameChange = this.handleUsernameChange.bind(this); + this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleSearch = this.handleSearch.bind(this); + this.state = { + username: '', + password: '', + query: 'index=_internal | head 3', + results: [], + }; + } + + handleUsernameChange(username) { + this.setState({username: username}); + } + + handlePasswordChange(password) { + this.setState({password: password}); + } + + handleSearch() { + var http = new clientHttp.ProxyHttp('/proxy'); + var service = new splunkjs.Service(http, { + username: this.state.username, + password: this.state.password, + scheme: 'https', // we have configured this example for HTTPS + host: 'localhost', // this is the host for our http-proxy-middleware server, do not change + port: '3000' // this is the port for our http-proxy-middleware server, do not change + }); + + var that = this; + Async.chain([ + // First, we log in + function(done) { + service.login(done); + }, + // Perform the search + function(success, done) { + if (!success) { + done('Error logging in'); + } + + service.search('search index=_internal | head 3', {}, done); + }, + // Wait until the job is done + function(job, done) { + job.track({}, function(job) { + // Ask the server for the results + job.results({}, done); + }); + }, + // Print out the statistics and get the results + function(results, job, done) { + // Print out the statistics to the console + console.log('Splunk Search Job Statistics:'); + console.log(` Event Count: ${job.properties().eventCount}`); + console.log(` Disk Usage: ${job.properties().diskUsage} bytes`); + console.log(` Priority: ${job.properties().priority}`); + console.log(results); + that.setState({results: results}); + }], + function(err) { + console.error(err); + } + ); + } + + render() { + const results = this.state.results; + + // Find the index of the fields we want + const timeIndex = (results.fields || []).indexOf('_time'); + const sourceIndex = (results.fields || []).indexOf('source'); + const sourcetypeIndex = (results.fields || []).indexOf('sourcetype'); + const rawIndex = (results.fields || []).indexOf('_raw'); + + return ( +
+ + +

Results

+ + + + + + {(results.rows || []).map((result, i) => { + return ; + })} + + +
_timesourcesourcetype_raw
{result[timeIndex]}{result[sourceIndex]}{result[sourcetypeIndex]}{result[rawIndex]}
+
+ ); + } + } + + export default SplunkJsExample; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/index.css b/examples/browser/create-react-app/src/index.css new file mode 100644 index 000000000..ec2585e8c --- /dev/null +++ b/examples/browser/create-react-app/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/examples/browser/create-react-app/src/index.js b/examples/browser/create-react-app/src/index.js new file mode 100644 index 000000000..f5185c1ec --- /dev/null +++ b/examples/browser/create-react-app/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import * as serviceWorker from './serviceWorker'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/examples/browser/create-react-app/src/serviceWorker.js b/examples/browser/create-react-app/src/serviceWorker.js new file mode 100644 index 000000000..b04b771a8 --- /dev/null +++ b/examples/browser/create-react-app/src/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/examples/browser/create-react-app/src/setupProxy.js b/examples/browser/create-react-app/src/setupProxy.js new file mode 100644 index 000000000..938863922 --- /dev/null +++ b/examples/browser/create-react-app/src/setupProxy.js @@ -0,0 +1,22 @@ +const { splunkConfig } = require('./splunkConfig'); +const proxy = require('http-proxy-middleware'); + +/** + * This file configures a proxy for proxying requests + * from https://localhost:3000/proxy/... + * to https://:/... + * + * This is necessary to avoid CORS issues with splunkd. + */ +module.exports = app => { + app.use( + '/proxy', + proxy({ + target: 'https://' + splunkConfig.host + ':' + splunkConfig.port, + changeOrigin: true, + secure: false, + pathRewrite: {'^/proxy' : ''}, // remove /proxy prefix + logLevel: 'debug' + }) + ); +}; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/setupTests.js b/examples/browser/create-react-app/src/setupTests.js new file mode 100644 index 000000000..74b1a275a --- /dev/null +++ b/examples/browser/create-react-app/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; diff --git a/examples/browser/create-react-app/src/splunkConfig.js b/examples/browser/create-react-app/src/splunkConfig.js new file mode 100644 index 000000000..3de857fee --- /dev/null +++ b/examples/browser/create-react-app/src/splunkConfig.js @@ -0,0 +1,6 @@ +const splunkConfig = { + host: 'localhost', + port: '8089' +}; + +module.exports = { splunkConfig }; \ No newline at end of file diff --git a/index.js b/index.js index e20b05a89..715d0704f 100644 --- a/index.js +++ b/index.js @@ -15,11 +15,16 @@ (function() { var root = exports || this; + var env = require("dotenv").config(); // Declare a process environment so that we can set // some globals here and have interop with node - var env = require("dotenv").config(); - process.env = process.env || {}; + try { + process.env = process.env || {}; + } catch (e) { + // Depending on the browser implementation process.env may not + // be assignable but still accessible, ignore these errors + } module.exports = root = { Logger : require('./lib/log').Logger, From dede9667a6e70f06e65102801d2fe98b1c12082e Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 4 Jul 2020 16:55:16 -0700 Subject: [PATCH 21/50] Make query input from user --- examples/browser/create-react-app/src/App.js | 2 +- .../browser/create-react-app/src/Login.css | 8 ++++++++ .../browser/create-react-app/src/Login.js | 13 ++++++++++++- .../create-react-app/src/SplunkJsExample.js | 19 ++++++++++++++----- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/examples/browser/create-react-app/src/App.js b/examples/browser/create-react-app/src/App.js index 1366634d3..7fcab7e8b 100644 --- a/examples/browser/create-react-app/src/App.js +++ b/examples/browser/create-react-app/src/App.js @@ -11,7 +11,7 @@ function App() {

- 2. Enter credentials below and click Submit to login, run a sample search, and display the results. + 2. Enter credentials below and click Search to login, run a sample search, and display the results.

diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Login.css index ce61d5161..de7c273b6 100644 --- a/examples/browser/create-react-app/src/Login.css +++ b/examples/browser/create-react-app/src/Login.css @@ -15,6 +15,14 @@ input { border-radius: 5px; } +textarea { + resize: none; + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; + padding: 5px; + outline: none; + overflow: auto; +} + button { cursor: pointer; font-size: calc(10px + 2vmin); diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Login.js index f6f380abd..35413c5d3 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Login.js @@ -6,6 +6,7 @@ class Login extends React.Component { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleClickSearch = this.handleClickSearch.bind(this); } @@ -17,6 +18,10 @@ class Login extends React.Component { this.props.onPasswordChange(e.target.value); } + handleQueryChange(e) { + this.props.onQueryChange(e.target.value); + } + handleClickSearch(e) { this.props.onClickSearch(); } @@ -27,7 +32,13 @@ class Login extends React.Component {
-
+
+
+
+
+ +
+

); diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 648974fdf..7fca97da1 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -13,17 +13,18 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as LoginForm in order to lift + // We define handlers here as well as Login.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html this.handleUsernameChange = this.handleUsernameChange.bind(this); this.handlePasswordChange = this.handlePasswordChange.bind(this); + this.handleQueryChange = this.handleQueryChange.bind(this); this.handleSearch = this.handleSearch.bind(this); this.state = { - username: '', - password: '', - query: 'index=_internal | head 3', + username: 'admin', + password: 'changeme', + query: 'search index=_internal | head 3', results: [], }; } @@ -36,6 +37,10 @@ class SplunkJsExample extends React.Component { this.setState({password: password}); } + handleQueryChange(query) { + this.setState({query: query}); + } + handleSearch() { var http = new clientHttp.ProxyHttp('/proxy'); var service = new splunkjs.Service(http, { @@ -58,7 +63,7 @@ class SplunkJsExample extends React.Component { done('Error logging in'); } - service.search('search index=_internal | head 3', {}, done); + service.search(`${that.state.query}`, {}, done); }, // Wait until the job is done function(job, done) { @@ -95,8 +100,12 @@ class SplunkJsExample extends React.Component { return (

Results

From 90089fbd0d1fe68c9e4b6b0bc10c8283a934cd68 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Sat, 4 Jul 2020 16:59:02 -0700 Subject: [PATCH 22/50] Rename Login to Inputs --- .../browser/create-react-app/src/{Login.css => Inputs.css} | 0 .../browser/create-react-app/src/{Login.js => Inputs.js} | 6 +++--- examples/browser/create-react-app/src/SplunkJsExample.js | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename examples/browser/create-react-app/src/{Login.css => Inputs.css} (100%) rename examples/browser/create-react-app/src/{Login.js => Inputs.js} (94%) diff --git a/examples/browser/create-react-app/src/Login.css b/examples/browser/create-react-app/src/Inputs.css similarity index 100% rename from examples/browser/create-react-app/src/Login.css rename to examples/browser/create-react-app/src/Inputs.css diff --git a/examples/browser/create-react-app/src/Login.js b/examples/browser/create-react-app/src/Inputs.js similarity index 94% rename from examples/browser/create-react-app/src/Login.js rename to examples/browser/create-react-app/src/Inputs.js index 35413c5d3..01c004c9b 100644 --- a/examples/browser/create-react-app/src/Login.js +++ b/examples/browser/create-react-app/src/Inputs.js @@ -1,7 +1,7 @@ import React from 'react'; -import './Login.css'; +import './Inputs.css'; -class Login extends React.Component { +class Inputs extends React.Component { constructor(props) { super(props); this.handleUsernameChange = this.handleUsernameChange.bind(this); @@ -45,4 +45,4 @@ class Login extends React.Component { } } - export default Login; \ No newline at end of file + export default Inputs; \ No newline at end of file diff --git a/examples/browser/create-react-app/src/SplunkJsExample.js b/examples/browser/create-react-app/src/SplunkJsExample.js index 7fca97da1..d18aeade5 100644 --- a/examples/browser/create-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-react-app/src/SplunkJsExample.js @@ -1,6 +1,6 @@ import React from 'react'; import './SplunkJsExample.css'; -import Login from './Login'; +import Inputs from './Inputs'; import * as splunkjs from 'splunk-sdk'; // jquery.ajax is used for the underlying http client in ProxyHttp @@ -13,7 +13,7 @@ const clientHttp = require('splunk-sdk/lib/platform/client/proxy_http'); class SplunkJsExample extends React.Component { constructor(props) { super(props); - // We define handlers here as well as Login.js in order to lift + // We define handlers here as well as Inputs.js in order to lift // the username and password states up so that they can be used // here to run and populate search results. // More info on lifting state: https://reactjs.org/docs/lifting-state-up.html @@ -99,7 +99,7 @@ class SplunkJsExample extends React.Component { return (
- Date: Sat, 4 Jul 2020 17:11:06 -0700 Subject: [PATCH 23/50] Ignore create-react-app example for jshint --- .jshintignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.jshintignore b/.jshintignore index 8f70fdda3..d73f60eb1 100644 --- a/.jshintignore +++ b/.jshintignore @@ -5,8 +5,10 @@ node_modules build client external +examples/browser/create-react-app examples/browser/minisplunk examples/browser/resources +examples\\browser\\create-react-app examples\\browser\\minisplunk examples\\browser\\resources old_english From 84df587372773167f479310f83df3e7f57c9a6c1 Mon Sep 17 00:00:00 2001 From: Tim Pavlik Date: Wed, 8 Jul 2020 15:42:24 -0700 Subject: [PATCH 24/50] Add demo gif and rename to create-splunk-react-app --- .../.gitignore | 0 .../README.md | 6 ++++++ .../create-splunk-react-app.gif | Bin 0 -> 540896 bytes .../package.json | 2 +- .../public/favicon.ico | Bin .../public/index.html | 0 .../public/logo192.png | Bin .../public/logo512.png | Bin .../public/manifest.json | 0 .../public/robots.txt | 0 .../src/App.css | 0 .../src/App.js | 0 .../src/App.test.js | 0 .../src/Inputs.css | 0 .../src/Inputs.js | 0 .../src/SplunkJsExample.css | 0 .../src/SplunkJsExample.js | 0 .../src/index.css | 0 .../src/index.js | 0 .../src/serviceWorker.js | 0 .../src/setupProxy.js | 0 .../src/setupTests.js | 0 .../src/splunkConfig.js | 0 23 files changed, 7 insertions(+), 1 deletion(-) rename examples/browser/{create-react-app => create-splunk-react-app}/.gitignore (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/README.md (95%) create mode 100644 examples/browser/create-splunk-react-app/create-splunk-react-app.gif rename examples/browser/{create-react-app => create-splunk-react-app}/package.json (95%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/favicon.ico (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/index.html (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo192.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/logo512.png (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/manifest.json (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/public/robots.txt (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/App.test.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/Inputs.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/SplunkJsExample.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.css (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/index.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/serviceWorker.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupProxy.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/setupTests.js (100%) rename examples/browser/{create-react-app => create-splunk-react-app}/src/splunkConfig.js (100%) diff --git a/examples/browser/create-react-app/.gitignore b/examples/browser/create-splunk-react-app/.gitignore similarity index 100% rename from examples/browser/create-react-app/.gitignore rename to examples/browser/create-splunk-react-app/.gitignore diff --git a/examples/browser/create-react-app/README.md b/examples/browser/create-splunk-react-app/README.md similarity index 95% rename from examples/browser/create-react-app/README.md rename to examples/browser/create-splunk-react-app/README.md index 35ae6439e..6f4de1dcb 100644 --- a/examples/browser/create-react-app/README.md +++ b/examples/browser/create-splunk-react-app/README.md @@ -1,3 +1,9 @@ +# create-splunk-react-app + +Enter this directory and run `yarn start` to view the app: + +![create-splunk-react-app demo](create-splunk-react-app.gif) + This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts diff --git a/examples/browser/create-splunk-react-app/create-splunk-react-app.gif b/examples/browser/create-splunk-react-app/create-splunk-react-app.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb62e046aae3b97c7541c4a8590f41b98e0cd014 GIT binary patch literal 540896 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

T26^;MS*Jhc2vD`x3k^Ao-pOv+{wAc;y2i|| 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 Y@&A2aSrsVJrIVoYCn`xDmT=q;#ul4|&5 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 Date: Fri, 3 Sep 2021 13:45:58 +0530 Subject: [PATCH 25/50] Update package.json --- examples/browser/create-splunk-react-app/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/browser/create-splunk-react-app/package.json b/examples/browser/create-splunk-react-app/package.json index 4606feead..6654c6d8e 100644 --- a/examples/browser/create-splunk-react-app/package.json +++ b/examples/browser/create-splunk-react-app/package.json @@ -7,12 +7,12 @@ "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", "assert": "^2.0.0", - "jquery": "^3.5.1", + "jquery": "^3.6.0", "nodeunit": "^0.11.3", "react": "^16.13.1", "react-dom": "^16.13.1", "react-scripts": "3.4.1", - "splunk-sdk": "^1.9.0" + "splunk-sdk": "^1.10.0" }, "scripts": { "start": "HTTPS=true react-scripts start --no-cache", From 3614f834e872601a17123cc8c7f34e1bc9fab148 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 3 Sep 2021 13:46:43 +0530 Subject: [PATCH 26/50] Update SplunkJsExample.js --- examples/browser/create-splunk-react-app/src/SplunkJsExample.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/browser/create-splunk-react-app/src/SplunkJsExample.js b/examples/browser/create-splunk-react-app/src/SplunkJsExample.js index d18aeade5..48f9594b6 100644 --- a/examples/browser/create-splunk-react-app/src/SplunkJsExample.js +++ b/examples/browser/create-splunk-react-app/src/SplunkJsExample.js @@ -23,7 +23,7 @@ class SplunkJsExample extends React.Component { this.handleSearch = this.handleSearch.bind(this); this.state = { username: 'admin', - password: 'changeme', + password: 'changed!', query: 'search index=_internal | head 3', results: [], }; From a24ab5ffaf4541d1d86a14dc5a738741dcd890b0 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Tue, 14 Sep 2021 20:10:48 +0530 Subject: [PATCH 27/50] oneShotSearch resolved --- lib/platform/node/node_http.js | 13 ++++++++++++- tests/service_tests/job.js | 12 ++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/platform/node/node_http.js b/lib/platform/node/node_http.js index ad30bffb2..ae77884a7 100644 --- a/lib/platform/node/node_http.js +++ b/lib/platform/node/node_http.js @@ -41,6 +41,10 @@ // Get the byte-length of the content, which adjusts for multi-byte characters request_options.headers["Content-Length"] = Buffer.byteLength(request_options.body, "utf8"); + if(url.includes("output_mode=xml")){ + request_options.parse_response = false; + } + var that = this; var req = needle.request(request_options.method, request_options.url, request_options.body, request_options, function (error, res, data) @@ -55,7 +59,14 @@ statusCode: res ? res.statusCode : 600 }; - var complete_response = that._buildResponse(error, response, JSON.stringify(data)); + var complete_response; + + if(url.includes("output_mode=xml") || url.includes("output_mode=csv")){ + complete_response = that._buildResponse(error, response, data); + } + else { + complete_response = that._buildResponse(error, response, JSON.stringify(data)); + } callback(complete_response); }); diff --git a/tests/service_tests/job.js b/tests/service_tests/job.js index bb0e595c3..6e4aace74 100644 --- a/tests/service_tests/job.js +++ b/tests/service_tests/job.js @@ -643,11 +643,12 @@ exports.setup = function (svc) { Async.chain([ function (done) { - that.service.jobs().oneshotSearch('search index=_internal | head 1 | stats count', { id: sid, output_mode: 'xml' }, done); + that.service.jobs().oneshotSearch('search index=_internal | head 2 | stats count', { id: sid, output_mode: 'xml' }, done); }, function (results, done) { assert.ok(results); - assert.ok(results.includes('count')); + assert.ok(results.includes('count')); + assert.ok(results.includes('2')); done(); } ], @@ -664,11 +665,14 @@ exports.setup = function (svc) { Async.chain([ function (done) { - that.service.jobs().oneshotSearch('search index=_internal | head 1 | stats count', { id: sid, output_mode: 'csv' }, done); + that.service.jobs().oneshotSearch('makeresults count=3 | streamstats count | eval foo="bar" | fields - _time', { id: sid, output_mode: 'csv' }, done); }, function (results, done) { assert.ok(results); - assert.ok(results.includes('count')); + assert.ok(results.includes('count,foo')); + assert.ok(results.includes('1,bar')); + assert.ok(results.includes('2,bar')); + assert.ok(results.includes('3,bar')); done(); } ], From 9206171352f2edf44ebc288b8e6fe95d5b6dca9c Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 15 Sep 2021 16:01:01 +0530 Subject: [PATCH 28/50] Modification for oneShotSearch:output_mode --- lib/http.js | 1 + lib/platform/node/node_http.js | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/http.js b/lib/http.js index fee86fab3..36c52ba01 100644 --- a/lib/http.js +++ b/lib/http.js @@ -247,6 +247,7 @@ method: message.method, headers: message.headers, timeout: message.timeout, + query: message.query, body: body }; diff --git a/lib/platform/node/node_http.js b/lib/platform/node/node_http.js index ae77884a7..292f4bfa5 100644 --- a/lib/platform/node/node_http.js +++ b/lib/platform/node/node_http.js @@ -41,7 +41,7 @@ // Get the byte-length of the content, which adjusts for multi-byte characters request_options.headers["Content-Length"] = Buffer.byteLength(request_options.body, "utf8"); - if(url.includes("output_mode=xml")){ + if(message.query && ["xml", "csv"].includes(message.query.output_mode)){ request_options.parse_response = false; } @@ -61,12 +61,13 @@ var complete_response; - if(url.includes("output_mode=xml") || url.includes("output_mode=csv")){ + if(message.query && ["xml", "csv"].includes(message.query.output_mode)){ complete_response = that._buildResponse(error, response, data); } else { complete_response = that._buildResponse(error, response, JSON.stringify(data)); } + callback(complete_response); }); From c9b4f8e07b79ce7247b87533bbe9ad24b4110509 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 13:58:09 +0530 Subject: [PATCH 29/50] Update --- README.md | 17 ++++++++--------- licenses/LICENSE-HIGHCHARTS | 2 -- 2 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 licenses/LICENSE-HIGHCHARTS diff --git a/README.md b/README.md index 02ca955be..dc0ac2ded 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ JavaScript. This SDK supports both server- and client-side JavaScript. ## Requirements -* Node.js v.0.12, or v4 or later. The Splunk SDK for Javascript is tested with Node.js v.0.12, v4.2, and v10.0. -* Splunk Enterprise 6.3.0 or later, or Splunk Cloud. The Splunk SDK for Javascript is tested with Splunk Enterprise 7.0 and 7.2. +* Node.js v.0.12, or v4 or later. The Splunk SDK for Javascript is tested with Node.js v.0.12, v4.2, and v10.0. +* Splunk Enterprise 6.3.0 or later, or Splunk Cloud. The Splunk SDK for Javascript is tested with Splunk Enterprise 7.0 and 7.2. ## Installation @@ -363,22 +363,22 @@ If you would like to contribute to the SDK, go here for more information: ### Support -1. You will be granted support if you or your company are already covered under an existing maintenance/support agreement. +1. You will be granted support if you or your company are already covered under an existing maintenance/support agreement. Send an email to support@splunk.com and include "Splunk SDK for JavaScript" in the subject line. - 2. If you are not covered under an existing maintenance/support agreement, you + 2. If you are not covered under an existing maintenance/support agreement, you can find help through the broader community at: 3. Splunk will NOT provide support for SDKs if the core library (the code in the /lib directory) has been modified. If you modify an SDK - and want support, you can find help through the broader community and Splunk + and want support, you can find help through the broader community and Splunk answers (see above). We would also like to know why you modified the core library—please send feedback to devinfo@splunk.com. 4. File any issues on [GitHub](githubjsissues) - + ### Contact us You can reach the Developer Platform team at _devinfo@splunk.com_. @@ -403,7 +403,7 @@ of embedded libraries and their licenses: * [commander Node.js command-line interfaces][commander]: [MIT][commander-license] * [script.js Asyncronous JavaScript loader and dependency manager][script.js]: [Apache][scriptjs-license] * [base64.js Fast base64 encoding/decoding][base64.js]: [MIT][base64-license] -* [highcharts.js Interactive JavaScript charts][highcharts.js]: [CC BY-NC 3.0][highcharts-license] +* [highcharts.js Interactive JavaScript charts][highcharts.js]: [CC BY-NC 3.0] [dox]: https://github.com/visionmedia/dox @@ -428,7 +428,6 @@ of embedded libraries and their licenses: [scriptjs-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-SCRIPTJS [base64-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 [event-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 -highcharts-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-HIGHCHARTS [json2]: http://www.json.org/js.html [splunkrc]: https://github.com/splunk/splunk-sdk-javascript/blob/master/splunkrc.spec diff --git a/licenses/LICENSE-HIGHCHARTS b/licenses/LICENSE-HIGHCHARTS deleted file mode 100644 index e47f8206e..000000000 --- a/licenses/LICENSE-HIGHCHARTS +++ /dev/null @@ -1,2 +0,0 @@ -Creative Commons Attribution-NonCommercial 3.0 Unported License -https://creativecommons.org/licenses/by-nc/3.0/legalcode From b520a421c2c81b6071aa340ce7cfc8e93cd83992 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 14:02:58 +0530 Subject: [PATCH 30/50] Rebase with develop --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dc0ac2ded..8dafb6b2e 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,20 @@ JavaScript. This SDK supports both server- and client-side JavaScript. ## Requirements -* Node.js v.0.12, or v4 or later. The Splunk SDK for Javascript is tested with Node.js v.0.12, v4.2, and v10.0. -* Splunk Enterprise 6.3.0 or later, or Splunk Cloud. The Splunk SDK for Javascript is tested with Splunk Enterprise 7.0 and 7.2. +* Node.js v 8.17.0, or v14 or later + + The Splunk Enterprise SDK for JavaScript was tested with Node.js v8.17.0, v14. + +* Splunk Enterprise 8.0 or 8.2, or Splunk Cloud + + The Splunk Enterprise SDK for JavaScript was tested with Splunk Enterprise 8.0 or 8.2, or Splunk Cloud. + +* Splunk Enterprise SDK for JavaScript + + Download the SDK as a [ZIP file](https://github.com/splunk/splunk-sdk-javascript/zipball/master) or clone the repository: + + git clone https://github.com/splunk/splunk-sdk-javascript.git + ## Installation From 70d87aa83e60cc9ac1d056f2e03fd6412faa7abb Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 14:04:06 +0530 Subject: [PATCH 31/50] Update README.md --- README.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/README.md b/README.md index 8dafb6b2e..9c376f5f2 100644 --- a/README.md +++ b/README.md @@ -11,18 +11,6 @@ JavaScript. This SDK supports both server- and client-side JavaScript. * Node.js v 8.17.0, or v14 or later - The Splunk Enterprise SDK for JavaScript was tested with Node.js v8.17.0, v14. - -* Splunk Enterprise 8.0 or 8.2, or Splunk Cloud - - The Splunk Enterprise SDK for JavaScript was tested with Splunk Enterprise 8.0 or 8.2, or Splunk Cloud. - -* Splunk Enterprise SDK for JavaScript - - Download the SDK as a [ZIP file](https://github.com/splunk/splunk-sdk-javascript/zipball/master) or clone the repository: - - git clone https://github.com/splunk/splunk-sdk-javascript.git - ## Installation From 389dd8bcc9291c57bfa51bb219f577c597cd292c Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 14:34:32 +0530 Subject: [PATCH 32/50] Update README.md --- README.md | 474 ++++++++++++++++++++++-------------------------------- 1 file changed, 196 insertions(+), 278 deletions(-) diff --git a/README.md b/README.md index 9c376f5f2..f137f0d99 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,38 @@ [![Build Status](https://travis-ci.org/splunk/splunk-sdk-javascript.svg?branch=master)](https://travis-ci.org/splunk/splunk-sdk-javascript) -# The Splunk Software Development Kit for JavaScript +# The Splunk Enterprise Software Development Kit for JavaScript -#### Version 1.9.0 +#### Version 1.10.0 -The Splunk Software Development Kit (SDK) for JavaScript contains library code and -examples designed to enable developers to build applications using Splunk and -JavaScript. This SDK supports both server- and client-side JavaScript. +The Splunk Enterprise Software Development Kit (SDK) for JavaScript contains library code and examples designed to enable developers to build applications using the Splunk platform and JavaScript. This SDK supports server-side and client-side JavaScript. + +For more information, see [Splunk Enterprise SDK for JavaScript](https://dev.splunk.com/enterprise/docs/devtools/javascript/sdk-javascript/) on the Splunk Developer Portal. ## Requirements * Node.js v 8.17.0, or v14 or later + The Splunk Enterprise SDK for JavaScript was tested with Node.js v8.17.0, v14. -## Installation +* Splunk Enterprise 8.0 or 8.2, or Splunk Cloud + + The Splunk Enterprise SDK for JavaScript was tested with Splunk Enterprise 8.0 or 8.2, or Splunk Cloud. + +* Splunk Enterprise SDK for JavaScript -This section describes the basic steps for installing the Splunk SDK for JavaScript. -For more detailed instructions and requirements, see the -[Splunk Developer Portal][install]. + Download the SDK as a [ZIP file](https://github.com/splunk/splunk-sdk-javascript/zipball/master) or clone the repository: -### Get the Splunk SDK for JavaScript + git clone https://github.com/splunk/splunk-sdk-javascript.git + + +## Installation -You can get the SDK by [downloading it][zip] from GitHub, or by cloning it: +This section describes the basic steps for installing the Splunk Enterprise SDK for JavaScript. - git clone https://github.com/splunk/splunk-sdk-javascript.git -### Use the Splunk SDK for JavaScript components on your web page +### Use the Splunk Enterprise SDK for JavaScript components on your web page -To use the components from the Splunk SDK for JavaScript on your web page, copy the -**/splunk-sdk-javascript/client** directory to your web server. -Then, include the **splunk.js** or **splunk.min.js** file from this directory in -your code. +To use the components from the Splunk Enterprise SDK for JavaScript on your web page, copy the **/splunk-sdk-javascript/client** directory to your web server. +Then, include the **splunk.js** or **splunk.min.js** file from this directory in your code. For example, include one of the following tags in your code: @@ -39,39 +42,32 @@ Or: -You can also include the UI components, such as the Timeline and Charting -controls. These UI component files (splunk.ui.timeline and -splunk.ui.charting) are also in the /splunk-sdk-javascript/client -directory. +You can also include the UI components, such as the Timeline and Charting controls. These UI component files (**splunk.ui.timeline** and **splunk.ui.charting**) are also in the **/splunk-sdk-javascript/client** directory. -### Install the Splunk SDK for JavaScript for Node.js -> **Note:** The Splunk SDK for JavaScript v1.7.0 requires Node.js version 0.10.x, or 0.12.x or 4+. +### Install Node.js in your project -If you want to use the Splunk SDK for JavaScript with your Node.js programs, install -the SDK by running `npm` in *your* project's directory as follows: +To use the Splunk Enterprise SDK for JavaScript with your Node.js programs, install the SDK by running `npm` in *your* project's directory as follows: npm install splunk-sdk -Then, to include the Splunk SDK for JavaScript, use the `require` function in your -code: +Then, to include the Splunk Enterprise SDK for JavaScript, use the `require` function in your code: var splunkjs = require('splunk-sdk'); ## Usage -The following examples show you how to list search jobs using client-side and -server-side code. +The following examples show you how to list search jobs using client-side and server-side code. ### Client-side code example -This HTML example uses the Splunk SDK for JavaScript to list all jobs: - +This HTML example uses the Splunk Enterprise SDK for JavaScript to list all jobs: +```javascript +``` ### Node.js code example -This example shows how to use the Splunk SDK for JavaScript and Node.js to list all -jobs: +This example shows how to use the Splunk Enterprise SDK for JavaScript and Node.js to list all jobs: + +##### Login with username and password +```javascript var splunkjs = require('splunk-sdk'); - var service = new splunkjs.Service({username: "admin", password: "changeme"}); + var service = new splunkjs.Service({username: "admin", password: "changed!"}); service.login(function(err, success) { if (err) { throw err; @@ -109,64 +108,135 @@ jobs: } }); }); +``` +##### Login with sessionKey + +```shell +# Create a sessionKey +curl -k -u : ://:/services/auth/login -d username= -d password= +``` + +```javascript +var serviceWithSessionKey = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: SESSION_KEY, // Add your sessionKey here + version: '8', + }); + +serviceWithSessionKey.get("search/jobs", { count: 1 }, function (err, res) { + if (err) { + console.log(err); + } else } + console.log("Login successful with sessionKey"); + } +}); +``` + +##### Login with token + +```shell +#### From shell #### +# Enable token authetication +curl -k -u : -X POST ://:/services/admin/token-auth/tokens_auth -d disabled=false + +# Create a token +curl -k -u : -X POST ://:/services/authorization/tokens?output_mode=json --data name= --data audience=Users --data-urlencode expires_on=+30d +``` + +```shell +#### From web #### +# Enable token authentication +Go to settings > Tokens and click on 'Enable Token Authentication' + +# Create a token +1. Go to settings > Token and click on 'New Token' +2. Enter the relevant information +3. Copy the created token and save it somewhere safe. +``` + +```javascript +var serviceWithBearerToken = new splunkjs.Service( + { + // Replace the host if you are accessing remote host + scheme: 'https', + host: 'localhost', + port: '8089', + sessionKey: TOKEN, // Add your token here + version: '8', + }); + +serviceWithBearerToken.get("search/jobs", { count: 2 }, function (err, res) { + if (err) + console.log(err); + else + console.log("Login successful with bearer token"); +}); +``` ## SDK examples -The Splunk SDK for JavaScript contains several server- and client-based examples. -For detailed instructions about getting them running, see the -[Splunk Developer Portal][examples]. +The Splunk Enterprise SDK for JavaScript contains several server- and client-based examples. +For details, see the [Splunk Enterprise SDK for JavaScript Examples](https://dev.splunk.com/enterprise/docs/devtools/javascript/sdk-javascript/sdkjavascriptexamples) on the Splunk Developer Portal. -### Set up the .splunkrc file +#### Create a .splunkrc convenience file -To connect to Splunk, many of the SDK examples and unit tests take command-line -arguments that specify values for the host, port, and login credentials for -Splunk. For convenience during development, you can store these arguments as -key-value pairs in a text file named **.splunkrc**. Then, the SDK examples and -unit tests use the values from the **.splunkrc** file when you don't specify -them. +To connect to Splunk Enterprise, many of the SDK examples and unit tests take command-line arguments that specify values for the host, port, and login credentials for Splunk Enterprise. For convenience during development, you can store these arguments as key-value pairs in a text file named **.splunkrc**. Then, the SDK examples and unit tests use the values from the **.splunkrc** file when you don't specify them. -To use this convenience file, create a text file with the following format and -save it as **.splunkrc** in the current user's home directory: +>**Note**: Storing login credentials in the **.splunkrc** file is only for convenience during development. This file isn't part of the Splunk platform and shouldn't be used for storing user credentials for production. And, if you're at all concerned about the security of your credentials, enter them at the command line rather than saving them in this file. - # Splunk host (default: localhost) +To use this convenience file, create a text file with the following format: + + # Splunk Enterprise host (default: localhost) host=localhost - # Splunk admin port (default: 8089) + # Splunk Enterprise admin port (default: 8089) port=8089 - # Splunk username + # Splunk Enterprise username username=admin - # Splunk password - password=changeme + # Splunk Enterprise password + password=changed! # Access scheme (default: https) scheme=https - # Your version of Splunk (default: 5.0) - version=5.0 + # Your version of Splunk Enterprise + version=8.2 + +Save the file as **.splunkrc** in the current user's home directory. + +* For example on OS X, save the file as: + + ~/.splunkrc + +* On Windows, save the file as: + + C:\Users\currentusername\.splunkrc + + You might get errors in Windows when you try to name the file because ".splunkrc" appears to be a nameless file with an extension. You can use the command line to create this file by going to the **C:\Users\\<currentusername>** directory and entering the following command: + + Notepad.exe .splunkrc + + Click **Yes**, then continue creating the file. -**Note**: The `version` key is required if using Splunk 4.3. ### Client-side examples -The Splunk SDK for JavaScript includes several browser-based examples, which you can -run from the Examples web page. +The Splunk Enterprise SDK for JavaScript includes several browser-based examples, which you can run from the Examples web page. -To start a simple web server and open the Examples page in a -web browser, enter: +To start a simple web server and open the Examples page in a web browser, enter: node sdkdo examples ### Node.js examples -The Splunk SDK for JavaScript includes several command-line examples, which are -located in the **/splunk-sdk-javascript/examples/node** directory. These -examples run with Node.js and use the command-line arguments from the -**.splunkrc** file, if you set this up with your login credentials. +The Splunk Enterprise SDK for JavaScript includes several command-line examples, which are located in the **/splunk-sdk-javascript/examples/node** directory. These examples run with Node.js and use the command-line arguments from the **.splunkrc** file, if you set this up with your login credentials. -For example, to run the **jobs.js** example, open a command prompt in the -**/splunk-sdk-javascript/examples/node** directory and enter: +For example, to run the **jobs.js** example, open a command prompt in the **/splunk-sdk-javascript/examples/node** directory and enter: node jobs.js list -If you aren't storing your login credentials in **.splunkrc**, enter the -following command, providing your own values: +If you aren't storing your login credentials in **.splunkrc**, enter the following command, providing your own values: node jobs.js --username yourusername --password yourpassword list @@ -183,37 +253,27 @@ Your output should look something like this: ## Development -The Splunk SDK for JavaScript infrastructure relies on Node.js, so if you want to -build files, run examples, run tests, or generate documentation, you must -install Node.js. You can read more about how to set up your environment -on the [Splunk Developer Portal][requirements]. +The Splunk Enterprise SDK for JavaScript infrastructure relies on Node.js to build files, run examples, run tests, and generate documentation. - -All development activities are managed by a helper script called *sdkdo*. For a -list of possible commands and options, open a command prompt in the -**splunk-sdk-javascript** directory and enter: +All development activities are managed by a helper script called `sdkdo`. For a list of possible commands and options, open a command prompt in the **splunk-sdk-javascript** directory and enter: node sdkdo --help -### Compile (combine and minify) the browser files +### Compile the browser files -To rebuild and minify the browser files, open a command prompt in the -**splunk-sdk-javascript** directory and enter: +To rebuild and minify the browser files, open a command prompt in the **splunk-sdk-javascript** directory and enter: node sdkdo compile ### Run unit tests -The Splunk SDK for JavaScript includes several unit tests for each component. You -can run individual test modules or run all tests. Before you run them, some -searches need to be running in your splunkd instance. You can start some -searches by logging into Splunk Web and opening the Search app, which will run a -few searches to populate its dashboard. +The Splunk Enterprise SDK for JavaScript includes several unit tests for each component. You can run individual test modules or run all tests. Some searches need to be running in your Splunk Enterprise instance before you run these tests. You can start some searches by logging into Splunk Web and opening the Search app, which runs a few searches to populate the dashboard. + +>**Note**: The [SDK App Collection](https://github.com/splunk/sdk-app-collection) app is required for running unit tests. -**Note**: The 'sdk-app-collection' app is required for running unit tests. +To run the unit tests, open a command prompt in the **splunk-sdk-javascript** directory, then run the following commands. -To run the unit tests, open a command prompt in the **splunk-sdk-javascript** -directory. To run all tests, enter: +To run all tests, enter: node sdkdo tests @@ -221,235 +281,93 @@ To run the HTTP and the Async tests, enter: node sdkdo tests http,async -To run the browser tests, enter: +To run tests containing a particular string, enter: - node sdkdo tests-browser - -To run all unit tests without log messages from splunk, enter: - - `node sdkdo tests --quiet` - -To run all the tests and generate JUnit compatible XML in `splunk-sdk-javascript/test_logs/junit_test_results.xml`, enter: - - `node sdkdo tests --reporter junit` - -## Repository - - - - - - + node sdkdo tests --grep "While success" - - - - +To run the browser tests, enter: - - - - + node sdkdo tests-browser - - - - +To run all unit tests without log messages, enter: - - - - + node sdkdo tests --quiet - - - - +To run all the tests and generate test report in **splunk-sdk-javascript/mochawesome-report/mochawesome.html**, enter: - - - - + node sdkdo tests --reporter mochawesome - - - - +To get more info to run tests, enter: - - - - + make test_specific +## Repository -
/binExecutable files (such as sdkdo)
/clientPre-built files for the browser
/contribPackaged third-party dependencies (such as test runners)
/docsAPI reference documentation
/examplesExamples
/libThe SDK code files
/licensesLicense information for packaged third-party dependencies
/node_modulesJavaScript modules used by Node.js
/testsUnit tests
+| Directory | Description | +|:------------- |:---------------------------------------------------------- | +| /bin | Executable files (such as sdkdo) | +| /client | Pre-built files for the browser | +| /contrib | Packaged third-party dependencies (such as test runners) | +| /docs | API reference documentation | +| /examples | Examples | +| /lib | The SDK code files | +| /licenses | License information for packaged third-party dependencies | +| /node_modules | JavaScript modules used by Node.js | +| /tests | Unit tests | ### Changelog -The **CHANGELOG.md** file in the root of the repository contains a description -of changes for each version of the SDK. You can also find the -[Splunk SDK for JavaScript Changelog][changelog] online. +The [CHANGELOG](CHANGELOG.md) contains a description of changes for each version of the SDK. For the latest version, see the [CHANGELOG.md](https://github.com/splunk/splunk-sdk-javascript/blob/master/CHANGELOG.md) on GitHub. ### Branches -The **master** branch always represents a stable and released version of the -SDK. You can read more about the -[JavaScript SDK Branching Model][branchingmodel] on our wiki. +The **master** branch represents a stable and released version of the SDK. +To learn about our branching model, see [Branching Model](https://github.com/splunk/splunk-sdk-javascript/wiki/Branching-Model) on GitHub. ## Documentation and resources -If you need to know more: - -* For all things developer with Splunk, your main resource is the - [Splunk Developer Portal][devportal]. +| Resource | Description | +|:----------------------- |:----------- | +| [Splunk Developer Portal](http://dev.splunk.com) | General developer documentation, tools, and examples | +| [Integrate the Splunk platform using development tools for JavaScript](https://dev.splunk.com/enterprise/docs/devtools/javascript)| Documentation for JavaScript development | +| [Splunk Enterprise SDK for JavaScript Reference](http://docs.splunk.com/Documentation/JavaScriptSDK) | SDK API reference documentation | +| [REST API Reference Manual](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTprolog) | Splunk REST API reference documentation | +| [Splunk>Docs](https://docs.splunk.com/Documentation) | General documentation for the Splunk platform | +| [GitHub Wiki](https://github.com/splunk/splunk-sdk-javascript/wiki/) | Documentation for this SDK's repository on GitHub | -* For conceptual and how-to documentation, see the - [Overview of the Splunk SDK for JavaScript][jsoverview]. - -* For API reference documentation, see the - [Splunk SDK for JavaScript Reference][jsapiref]. - -* For more about the Splunk REST API, see the - [REST API Reference][restapiref]. - -* For more about about Splunk in general, see [Splunk>Docs][splunkdocs]. - - -* For more about this SDK's repository, see our [GitHub Wiki][jsgithubwiki]. ## Community -Stay connected with other developers building on Splunk. - - +Stay connected with other developers building on the Splunk platform. - - - - +* [Email](mailto:devinfo@splunk.com) +* [Issues and pull requests](https://github.com/splunk/splunk-sdk-javascript/issues/) +* [Community Slack](https://splunk-usergroups.slack.com/app_redirect?channel=appdev) +* [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools) +* [Splunk Blogs](https://www.splunk.com/blog) +* [Twitter](https://twitter.com/splunkdev) - - - +### Contributions - - - +If you would like to contribute to the SDK, see [Contributing to Splunk](https://www.splunk.com/en_us/form/contributions.html). For additional guidelines, see [CONTRIBUTING](CONTRIBUTING.md). - - - - - - - - -
Emaildevinfo@splunk.com
Issues -https://github.com/splunk/splunk-sdk-javascript/issues/
Answers -http://splunk-base.splunk.com/tags/javascript/
Blog -http://blogs.splunk.com/dev/
Twitter -@splunkdev
- -### How to contribute - -If you would like to contribute to the SDK, go here for more information: +### Support -* [Splunk and open source][contributions] +* You will be granted support if you or your company are already covered under an existing maintenance/support agreement. Submit a new case in the [Support Portal](https://www.splunk.com/en_us/support-and-services.html) and include "Splunk Enterprise SDK for JavaScript" in the subject line. -* [Individual contributions][indivcontrib] + If you are not covered under an existing maintenance/support agreement, you can find help through the broader community at [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). -* [Company contributions][companycontrib] +* Splunk will NOT provide support for SDKs if the core library (the code in the **/splunklib** directory) has been modified. If you modify an SDK and want support, you can find help through the broader community and [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). + We would also like to know why you modified the core library, so please send feedback to _devinfo@splunk.com_. -### Support +* File any issues on [GitHub](https://github.com/splunk/splunk-sdk-javascript/issues). -1. You will be granted support if you or your company are already covered under an existing maintenance/support agreement. - Send an email to support@splunk.com and include "Splunk SDK for JavaScript" in the subject line. - 2. If you are not covered under an existing maintenance/support agreement, you - can find help through the broader community at: -
    -
  • Splunk Answers (use - the sdk, java, python, and javascript tags to - identify your questions)
  • -
-3. Splunk will NOT provide support for SDKs if the core library (the - code in the /lib directory) has been modified. If you modify an SDK - and want support, you can find help through the broader community and Splunk - answers (see above). We would also like to know why you modified the core - library—please send feedback to devinfo@splunk.com. -4. File any issues on [GitHub](githubjsissues) ### Contact us -You can reach the Developer Platform team at _devinfo@splunk.com_. +You can reach the Splunk Developer Platform team at _devinfo@splunk.com_. ## License -The Splunk JavaScript Software Development Kit is licensed under the Apache -License 2.0. Details can be found in the LICENSE file. - -### Third-party libraries - -The embedded third-party libraries may have different licenses. Here is a list -of embedded libraries and their licenses: - -* [dox RESTful degradable JavaScript routing][dox]: [MIT][dox-license] -* [davis.js Documentation Generator][davis.js]: [MIT][davis-license] -* [jquery.class.js Create custom class with jquery][jquery.class.js]: [MIT][jquery.class-license] -* [nodeunit Unit testing in node.js and the browser][nodeunit]: [MIT][nodeunit-license] -* [showdown.js Markdown to HTML converter][showdown.js]: [BSD][showdown-license] -* [staticresource Static resource handling][staticresource]: [MIT][staticresource-license] -* [webapp2 A framework for Google App Engine][webapp2]: [Apache][webapp2-license] -* [commander Node.js command-line interfaces][commander]: [MIT][commander-license] -* [script.js Asyncronous JavaScript loader and dependency manager][script.js]: [Apache][scriptjs-license] -* [base64.js Fast base64 encoding/decoding][base64.js]: [MIT][base64-license] -* [highcharts.js Interactive JavaScript charts][highcharts.js]: [CC BY-NC 3.0] - - -[dox]: https://github.com/visionmedia/dox -[davis.js]: https://github.com/olivernn/davis.js -[jquery.class.js]: http://ejohn.org/blog/simple-javascript-inheritance/ -[nodeunit]: https://github.com/caolan/nodeunit/ -[showdown.js]: https://github.com/coreyti/showdown/ -[staticresource]: https://github.com/atsuya/static-resource/ -[webapp2]: http://code.google.com/p/webapp-improved/ -[commander]: https://github.com/visionmedia/commander.js/ -[script.js]: https://github.com/ded/script.js/ -[base64.js]: http://code.google.com/p/javascriptbase64/ -[highcharts.js]: https://github.com/highcharts/highcharts -[dox-license]: xhttps://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DOX -[davis-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DAVIS -[jquery.class-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-JQUERYCLASS -[nodeunit-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-NODEUNIT -[showdown-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-SHOWDOWN -[staticresource-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-STATICRESOURCE -[webapp2-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-WEBAPP2 -[commander-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-COMMANDER -[scriptjs-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-SCRIPTJS -[base64-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 -[event-license]: https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-BASE64 - -[json2]: http://www.json.org/js.html -[splunkrc]: https://github.com/splunk/splunk-sdk-javascript/blob/master/splunkrc.spec -[node_examples_dir]: https://github.com/splunk/splunk-sdk-javascript/blob/master/examples/node -[browser_examples_dir]: https://github.com/splunk/splunk-sdk-javascript/blob/master/examples/browser -[client_dir]: https://github.com/splunk/splunk-sdk-javascript/blob/master/client -[refdocs]: http://docs.splunk.com/Documentation/JavaScriptSDK -[devportal]: http://dev.splunk.com -[cli]: https://github.com/splunk/splunk-sdk-javascript/blob/master/bin/cli.js -[SplunkInstall]: http://docs.splunk.com/Documentation/Splunk/latest/Installation/WhatsintheInstallationManual -[zip]: https://github.com/splunk/splunk-sdk-javascript/zipball/master -[jsoverview]: http://dev.splunk.com/view/SP-CAAAECM -[install]: http://dev.splunk.com/view/javascript-sdk-getting-started/SP-CAAAEFN -[examples]: http://dev.splunk.com/view/javascript-sdk-getting-started/SP-CAAAEDD -[requirements]: http://dev.splunk.com/view/javascript-sdk-getting-started/SP-CAAAED6 -[contributions]: http://dev.splunk.com/view/opensource/SP-CAAAEDM -[changelog]: https://github.com/splunk/splunk-sdk-javascript/blob/master/CHANGELOG.md -[branchingmodel]: https://github.com/splunk/splunk-sdk-javascript/wiki/Branching-Model -[jsapiref]: http://docs.splunk.com/Documentation/JavaScriptSDK -[restapiref]: http://docs.splunk.com/Documentation/Splunk/latest/RESTAPI -[splunkdocs]: http://docs.splunk.com/Documentation/Splunk -[jsgithubwiki]: https://github.com/splunk/splunk-sdk-javascript/wiki -[indivcontrib]: http://dev.splunk.com/goto/individualcontributions -[companycontrib]: http://dev.splunk.com/view/companycontributions/SP-CAAAEDR -[githubjsissues]: https://github.com/splunk/splunk-sdk-javascript/issues +The Splunk Enterprise Software Development Kit for JavaScript is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for details. From 71f46991482c2cf138d606fcb90b94d874b1381e Mon Sep 17 00:00:00 2001 From: rmaheshwari-splunk <84171674+rmaheshwari-splunk@users.noreply.github.com> Date: Mon, 14 Jun 2021 13:26:40 +0530 Subject: [PATCH 33/50] Updated HighCharts License. Added LICENSE-HIGHCHARTS.txt and updated README.md regarding the same. --- licenses/LICENSE-HIGHCHARTS | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 licenses/LICENSE-HIGHCHARTS diff --git a/licenses/LICENSE-HIGHCHARTS b/licenses/LICENSE-HIGHCHARTS new file mode 100644 index 000000000..e47f8206e --- /dev/null +++ b/licenses/LICENSE-HIGHCHARTS @@ -0,0 +1,2 @@ +Creative Commons Attribution-NonCommercial 3.0 Unported License +https://creativecommons.org/licenses/by-nc/3.0/legalcode From 85d70ba8de1eea44cbf2c826b451b7f259c11849 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 13:58:09 +0530 Subject: [PATCH 34/50] Update --- licenses/LICENSE-HIGHCHARTS | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 licenses/LICENSE-HIGHCHARTS diff --git a/licenses/LICENSE-HIGHCHARTS b/licenses/LICENSE-HIGHCHARTS deleted file mode 100644 index e47f8206e..000000000 --- a/licenses/LICENSE-HIGHCHARTS +++ /dev/null @@ -1,2 +0,0 @@ -Creative Commons Attribution-NonCommercial 3.0 Unported License -https://creativecommons.org/licenses/by-nc/3.0/legalcode From 045343b15f0f33237ab94562d740036c4814327c Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 15:40:26 +0530 Subject: [PATCH 35/50] Update CREDITS.md --- CREDITS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index f847d8706..eee2f4358 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -17,4 +17,5 @@ Some of the components included in the Splunk Enterprise SDK for JavaScript are | [dotenv](https://github.com/motdotla/dotenv) | Loads environment varibles from .env file | [BSD 2-Clause](https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-DOTENV) | | [cookie](https://github.com/jshttp/cookie) | HTTP cookie parser and serializer for HTTP servers | [MIT](https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-COOKIE) | | [elementtree](https://github.com/racker/node-elementtree) | Node.js XML parserer and serializer | [Apache-2.0](https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-ELEMENTTREE) | -| [needle](https://github.com/tomas/needle) | Node.js http client | [MIT](https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-NEEDLE) | \ No newline at end of file +| [needle](https://github.com/tomas/needle) | Node.js http client | [MIT](https://github.com/splunk/splunk-sdk-javascript/blob/master/licenses/LICENSE-NEEDLE) | +| [Highcharts](https://github.com/highcharts/highcharts) | Interactive JavaScript charts | From 337f75ee058171699dc22b8df3f9b197027d5539 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Tue, 21 Sep 2021 15:42:15 +0530 Subject: [PATCH 36/50] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f137f0d99..646d863b1 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ For more information, see [Splunk Enterprise SDK for JavaScript](https://dev.spl * Node.js v 8.17.0, or v14 or later - The Splunk Enterprise SDK for JavaScript was tested with Node.js v8.17.0, v14. + The Splunk Enterprise SDK for JavaScript was tested with Node.js v8.17.0, v14. * Splunk Enterprise 8.0 or 8.2, or Splunk Cloud - The Splunk Enterprise SDK for JavaScript was tested with Splunk Enterprise 8.0 or 8.2, or Splunk Cloud. + The Splunk Enterprise SDK for JavaScript was tested with Splunk Enterprise 8.0 or 8.2, or Splunk Cloud. * Splunk Enterprise SDK for JavaScript @@ -253,7 +253,7 @@ Your output should look something like this: ## Development -The Splunk Enterprise SDK for JavaScript infrastructure relies on Node.js to build files, run examples, run tests, and generate documentation. +The Splunk Enterprise SDK for JavaScript infrastructure relies on Node.js to build files, run examples, run tests, and generate documentation. All development activities are managed by a helper script called `sdkdo`. For a list of possible commands and options, open a command prompt in the **splunk-sdk-javascript** directory and enter: @@ -271,7 +271,7 @@ The Splunk Enterprise SDK for JavaScript includes several unit tests for each co >**Note**: The [SDK App Collection](https://github.com/splunk/sdk-app-collection) app is required for running unit tests. -To run the unit tests, open a command prompt in the **splunk-sdk-javascript** directory, then run the following commands. +To run the unit tests, open a command prompt in the **splunk-sdk-javascript** directory, then run the following commands. To run all tests, enter: @@ -349,7 +349,7 @@ Stay connected with other developers building on the Splunk platform. ### Contributions -If you would like to contribute to the SDK, see [Contributing to Splunk](https://www.splunk.com/en_us/form/contributions.html). For additional guidelines, see [CONTRIBUTING](CONTRIBUTING.md). +If you would like to contribute to the SDK, see [Contributing to Splunk](https://www.splunk.com/en_us/form/contributions.html). For additional guidelines, see [CONTRIBUTING](CONTRIBUTING.md). ### Support @@ -357,7 +357,7 @@ If you would like to contribute to the SDK, see [Contributing to Splunk](https:/ If you are not covered under an existing maintenance/support agreement, you can find help through the broader community at [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). -* Splunk will NOT provide support for SDKs if the core library (the code in the **/splunklib** directory) has been modified. If you modify an SDK and want support, you can find help through the broader community and [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). +* Splunk will NOT provide support for SDKs if the core library (the code in the **/splunklib** directory) has been modified. If you modify an SDK and want support, you can find help through the broader community and [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). We would also like to know why you modified the core library, so please send feedback to _devinfo@splunk.com_. From b67c1c6523fc1c7413be4c8270cc1ff00d0ecf02 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 19 Nov 2021 16:40:30 +0530 Subject: [PATCH 37/50] .conf CRUD support added --- lib/context.js | 14 + lib/http.js | 42 + lib/platform/node/node_http.js | 22 + lib/service.js | 119 +- ...40852eb3b30bc694a31ea4d853ea54b53a73249.js | 2876 +++++++++++++++++ ...84d81786a58e3cde0369210c14b0a65c62d3b58.js | 2875 ++++++++++++++++ tests/service_tests/configuration.js | 62 + 7 files changed, 6009 insertions(+), 1 deletion(-) create mode 100644 node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js create mode 100644 node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js diff --git a/lib/context.js b/lib/context.js index aa2980ba3..71c55427a 100644 --- a/lib/context.js +++ b/lib/context.js @@ -371,6 +371,20 @@ return this._requestWrapper(request, callback); }, + get_v2: function(path, params) { + var that = this; + // var request = function() { + return that.http.get_v2( + that.urlify(path), + that._headers(), + params, + that.timeout, + ); + // }; + + // return this._requestWrapper(request); + }, + /** * Performs a DELETE request. * diff --git a/lib/http.js b/lib/http.js index 36c52ba01..5f3bed530 100644 --- a/lib/http.js +++ b/lib/http.js @@ -144,6 +144,17 @@ return this.request(url, message, callback); }, + get_v2: function(url, headers, params, timeout) { + var message = { + method: "GET", + headers: headers, + timeout: timeout, + query: params + }; + + return this.request_v2(url, message); + }, + /** * Performs a POST request. * @@ -256,6 +267,37 @@ return this.makeRequest(encodedUrl, options, wrappedCallback); }, + request_v2: function(url, message) { + var that = this; + var query = utils.getWithVersion(this.version, queryBuilderMap)(message); + var post = message.post || {}; + + var encodedUrl = url + "?" + Http.encode(query); + var body = message.body ? message.body : Http.encode(post); + + var cookieString = that._getCookieString(); + + if (cookieString.length !== 0) { + message.headers["Cookie"] = cookieString; + + // Remove Authorization header + // Splunk will use Authorization header and ignore Cookies if Authorization header is sent + delete message.headers["Authorization"]; + } + + var options = { + method: message.method, + headers: message.headers, + timeout: message.timeout, + body: body + }; + + // Now we can invoke the user-provided HTTP class, + // var res_2 = await this.makeRequest_v2(encodedUrl, options); + // console.log(res_2.body.entry[0]); + return this.makeRequest_v2(encodedUrl, options); + }, + /** * Encapsulates the client-specific logic for performing a request. This * function is meant to be overriden by subclasses. diff --git a/lib/platform/node/node_http.js b/lib/platform/node/node_http.js index 292f4bfa5..4393b5bc2 100644 --- a/lib/platform/node/node_http.js +++ b/lib/platform/node/node_http.js @@ -85,6 +85,28 @@ return req; }, + makeRequest_v2: async function(url, message) { + var request_options = { + url: url, + method: message.method, + headers: message.headers || {}, + body: message.body || "", + timeout: message.timeout || 0, + jar: false, + followAllRedirects: true, + strictSSL: false, + rejectUnauthorized : false, + }; + + // Get the byte-length of the content, which adjusts for multi-byte characters + request_options.headers["Content-Length"] = Buffer.byteLength(request_options.body, "utf8"); + + var that = this; + var response = needle(request_options.method, request_options.url, request_options.body, request_options); + + return response; + }, + parseJson: function(json) { return JSON.parse(json); } diff --git a/lib/service.js b/lib/service.js index 6d88547a9..c6de116cf 100644 --- a/lib/service.js +++ b/lib/service.js @@ -733,6 +733,21 @@ ); }, + get_v2: function(relpath, params) { + var url = this.qualifiedPath; + + // If we have a relative path, we will append it with a preceding + // slash. + if (relpath) { + url = url + "/" + relpath; + } + + return this.service.get_v2( + url, + params, + ); + }, + /** * Performs a relative POST request on an endpoint's path, * combined with the parameters and a relative path if specified. @@ -1394,6 +1409,19 @@ return req; }, + + fetch_v2: async function(options) { + options = options || {}; + if (!options.count) { + options.count = 0; + } + + var that = this; + var response = await that.get_v2("", options); + // return response; + that._load(response.body); + return that; + }, /** * Returns a specific entity from the collection. @@ -3091,7 +3119,96 @@ }); return req; - } + }, + + doesFileExist: async function(filename) { + try { + var that = this; + + // 1. Fetch files list + var response = await this.get_v2("", {__conf: filename}); + + // 2. Filter the files + var files = response?.body?.entry?.filter(f => f.name === filename); + + // 2. Check if the file exists + if(files && files.length == 0) { + return { code:"FILE_NOT_FOUND", message: `File with the name '${filename}' does not exist.`}; + } + + // 3. Create a local instance + var configurationFile = new root.ConfigurationFile(that.service, filename); + + // 4. Load the file content + var fetchedFile = await configurationFile.fetch_v2(); + + return {file: fetchedFile}; + } + catch(error) { + return { errorCode:"SYSTEM_ERROR", errorMessage: error}; + } + }, + + doesStanzaExist: async function(file, stanza) { + try { + + // 1. check if the stanza exists + var fetchedStanza = file.item(stanza); + + if(!fetchedStanza) { + return { code:"STANZA_NOT_FOUND", message: `Stanza with the name '${stanza}' does not exist.`}; + } + else { + return {stanza: fetchedStanza}; + } + } + catch(error) { + return { errorCode:"SYSTEM_ERROR", errorMessage: error}; + } + }, + + create_v2: async function (configs, svc, filename, stanza, keyValueMap, callback) { + callback = callback || function() {}; + var that = this; + + // 1. Check if the file exists + var doesFileExistResponse = await this.doesFileExist(filename); + var configFile = doesFileExistResponse.file; + + // 2. If the file doesn't exist, create a new file + if(!configFile) { + console.log(doesFileExistResponse); + console.log("Creating a new configuration file..."); + + that.create( { __conf: filename }, + (err, newFile) => console.log(`Configuration File created: ${filename}`) ); + + configFile = new root.ConfigurationFile( that.service, filename ); + configFile = await configFile.fetch_v2(); + } + + // 2. Check if the stanza exists + var doesStanzaExistResponse = await this.doesStanzaExist(configFile, stanza); + var configStanza = doesStanzaExistResponse.stanza; + + // 3. If the stanza doesn't exist, create a new stanza with given keyValueMap + if(!configStanza) { + console.log(doesStanzaExistResponse); + console.log("Creating a new configuration stanza..."); + + configFile.create(stanza, keyValueMap, function (err, newStanza) { + console.log(`Configuration Stanza created: ${stanza}`); + callback(); + }); + } + // 4. If the stanza exists, update it with the keyValueMap + else { + configStanza.update(keyValueMap, (err, updatedStanza) => { + console.log(`Configuration Stanza updated: ${stanza}`); + callback(); + }); + } + }, }); /** diff --git a/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js b/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js new file mode 100644 index 000000000..e43a4157e --- /dev/null +++ b/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js @@ -0,0 +1,2876 @@ +function cov_1ks4ntaci2(){var path="/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js";var hash="b527bc3bbffe3a4fee511c63590269cdc3ea500f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js",statementMap:{"0":{start:{line:16,column:0},end:{line:5803,column:5}},"1":{start:{line:19,column:22},end:{line:19,column:42}},"2":{start:{line:20,column:22},end:{line:20,column:39}},"3":{start:{line:21,column:22},end:{line:21,column:40}},"4":{start:{line:22,column:22},end:{line:22,column:46}},"5":{start:{line:23,column:22},end:{line:23,column:53}},"6":{start:{line:24,column:22},end:{line:24,column:40}},"7":{start:{line:26,column:15},end:{line:26,column:30}},"8":{start:{line:27,column:18},end:{line:27,column:22}},"9":{start:{line:37,column:22},end:{line:41,column:6}},"10":{start:{line:39,column:12},end:{line:39,column:47}},"11":{start:{line:51,column:4},end:{line:664,column:7}},"12":{start:{line:73,column:12},end:{line:73,column:47}},"13":{start:{line:77,column:12},end:{line:77,column:72}},"14":{start:{line:78,column:12},end:{line:78,column:66}},"15":{start:{line:79,column:12},end:{line:79,column:76}},"16":{start:{line:80,column:12},end:{line:80,column:69}},"17":{start:{line:81,column:12},end:{line:81,column:75}},"18":{start:{line:82,column:12},end:{line:82,column:66}},"19":{start:{line:83,column:12},end:{line:83,column:67}},"20":{start:{line:84,column:12},end:{line:84,column:73}},"21":{start:{line:85,column:12},end:{line:85,column:67}},"22":{start:{line:86,column:12},end:{line:86,column:78}},"23":{start:{line:87,column:12},end:{line:87,column:72}},"24":{start:{line:106,column:12},end:{line:116,column:15}},"25":{start:{line:136,column:12},end:{line:136,column:47}},"26":{start:{line:164,column:12},end:{line:164,column:60}},"27":{start:{line:192,column:12},end:{line:192,column:53}},"28":{start:{line:218,column:12},end:{line:218,column:59}},"29":{start:{line:244,column:12},end:{line:244,column:62}},"30":{start:{line:271,column:12},end:{line:271,column:71}},"31":{start:{line:300,column:12},end:{line:300,column:50}},"32":{start:{line:312,column:12},end:{line:312,column:56}},"33":{start:{line:337,column:12},end:{line:337,column:40}},"34":{start:{line:366,column:12},end:{line:366,column:51}},"35":{start:{line:397,column:12},end:{line:400,column:13}},"36":{start:{line:398,column:16},end:{line:398,column:37}},"37":{start:{line:399,column:16},end:{line:399,column:33}},"38":{start:{line:402,column:23},end:{line:402,column:53}},"39":{start:{line:403,column:12},end:{line:403,column:56}},"40":{start:{line:420,column:12},end:{line:423,column:13}},"41":{start:{line:421,column:16},end:{line:421,column:37}},"42":{start:{line:422,column:16},end:{line:422,column:33}},"43":{start:{line:424,column:22},end:{line:424,column:56}},"44":{start:{line:425,column:12},end:{line:425,column:43}},"45":{start:{line:453,column:12},end:{line:456,column:13}},"46":{start:{line:454,column:16},end:{line:454,column:37}},"47":{start:{line:455,column:16},end:{line:455,column:33}},"48":{start:{line:458,column:23},end:{line:458,column:53}},"49":{start:{line:459,column:12},end:{line:459,column:63}},"50":{start:{line:478,column:12},end:{line:478,column:49}},"51":{start:{line:480,column:23},end:{line:480,column:27}},"52":{start:{line:481,column:22},end:{line:497,column:14}},"53":{start:{line:482,column:16},end:{line:496,column:17}},"54":{start:{line:483,column:20},end:{line:483,column:34}},"55":{start:{line:486,column:35},end:{line:486,column:74}},"56":{start:{line:487,column:31},end:{line:487,column:60}},"57":{start:{line:488,column:20},end:{line:495,column:23}},"58":{start:{line:489,column:24},end:{line:494,column:25}},"59":{start:{line:490,column:28},end:{line:490,column:35}},"60":{start:{line:493,column:28},end:{line:493,column:60}},"61":{start:{line:499,column:12},end:{line:499,column:23}},"62":{start:{line:517,column:12},end:{line:517,column:49}},"63":{start:{line:519,column:29},end:{line:519,column:54}},"64":{start:{line:520,column:12},end:{line:520,column:46}},"65":{start:{line:544,column:12},end:{line:547,column:13}},"66":{start:{line:545,column:16},end:{line:545,column:34}},"67":{start:{line:546,column:16},end:{line:546,column:28}},"68":{start:{line:549,column:12},end:{line:549,column:49}},"69":{start:{line:550,column:12},end:{line:550,column:34}},"70":{start:{line:552,column:12},end:{line:552,column:29}},"71":{start:{line:554,column:12},end:{line:561,column:15}},"72":{start:{line:555,column:16},end:{line:560,column:17}},"73":{start:{line:556,column:20},end:{line:556,column:34}},"74":{start:{line:559,column:20},end:{line:559,column:50}},"75":{start:{line:581,column:12},end:{line:584,column:13}},"76":{start:{line:582,column:16},end:{line:582,column:33}},"77":{start:{line:583,column:16},end:{line:583,column:27}},"78":{start:{line:586,column:12},end:{line:586,column:49}},"79":{start:{line:587,column:25},end:{line:590,column:13}},"80":{start:{line:592,column:12},end:{line:600,column:15}},"81":{start:{line:593,column:16},end:{line:599,column:17}},"82":{start:{line:594,column:20},end:{line:594,column:34}},"83":{start:{line:597,column:34},end:{line:597,column:63}},"84":{start:{line:598,column:20},end:{line:598,column:50}},"85":{start:{line:625,column:12},end:{line:628,column:13}},"86":{start:{line:626,column:16},end:{line:626,column:34}},"87":{start:{line:627,column:16},end:{line:627,column:28}},"88":{start:{line:630,column:12},end:{line:630,column:49}},"89":{start:{line:631,column:12},end:{line:631,column:34}},"90":{start:{line:634,column:12},end:{line:636,column:13}},"91":{start:{line:635,column:16},end:{line:635,column:46}},"92":{start:{line:638,column:23},end:{line:638,column:45}},"93":{start:{line:639,column:25},end:{line:639,column:31}},"94":{start:{line:640,column:26},end:{line:640,column:56}},"95":{start:{line:641,column:23},end:{line:641,column:28}},"96":{start:{line:642,column:22},end:{line:642,column:28}},"97":{start:{line:643,column:23},end:{line:643,column:25}},"98":{start:{line:645,column:22},end:{line:660,column:13}},"99":{start:{line:653,column:20},end:{line:658,column:21}},"100":{start:{line:654,column:24},end:{line:654,column:38}},"101":{start:{line:657,column:24},end:{line:657,column:54}},"102":{start:{line:662,column:12},end:{line:662,column:23}},"103":{start:{line:674,column:4},end:{line:815,column:7}},"104":{start:{line:686,column:12},end:{line:688,column:13}},"105":{start:{line:687,column:16},end:{line:687,column:61}},"106":{start:{line:690,column:12},end:{line:692,column:13}},"107":{start:{line:691,column:16},end:{line:691,column:60}},"108":{start:{line:694,column:12},end:{line:694,column:35}},"109":{start:{line:695,column:12},end:{line:695,column:47}},"110":{start:{line:699,column:12},end:{line:699,column:53}},"111":{start:{line:701,column:12},end:{line:701,column:54}},"112":{start:{line:702,column:12},end:{line:702,column:53}},"113":{start:{line:722,column:22},end:{line:722,column:40}},"114":{start:{line:726,column:12},end:{line:728,column:13}},"115":{start:{line:727,column:16},end:{line:727,column:42}},"116":{start:{line:730,column:12},end:{line:734,column:14}},"117":{start:{line:738,column:22},end:{line:738,column:40}},"118":{start:{line:742,column:12},end:{line:744,column:13}},"119":{start:{line:743,column:16},end:{line:743,column:42}},"120":{start:{line:746,column:12},end:{line:749,column:14}},"121":{start:{line:769,column:22},end:{line:769,column:40}},"122":{start:{line:773,column:12},end:{line:775,column:13}},"123":{start:{line:774,column:16},end:{line:774,column:42}},"124":{start:{line:777,column:12},end:{line:781,column:14}},"125":{start:{line:801,column:22},end:{line:801,column:40}},"126":{start:{line:805,column:12},end:{line:807,column:13}},"127":{start:{line:806,column:16},end:{line:806,column:42}},"128":{start:{line:809,column:12},end:{line:813,column:14}},"129":{start:{line:828,column:4},end:{line:916,column:7}},"130":{start:{line:844,column:27},end:{line:844,column:60}},"131":{start:{line:846,column:12},end:{line:846,column:43}},"132":{start:{line:847,column:12},end:{line:847,column:39}},"133":{start:{line:848,column:12},end:{line:848,column:34}},"134":{start:{line:849,column:12},end:{line:849,column:29}},"135":{start:{line:853,column:12},end:{line:853,column:60}},"136":{start:{line:854,column:12},end:{line:854,column:60}},"137":{start:{line:855,column:12},end:{line:855,column:65}},"138":{start:{line:856,column:12},end:{line:856,column:60}},"139":{start:{line:857,column:12},end:{line:857,column:59}},"140":{start:{line:866,column:12},end:{line:866,column:50}},"141":{start:{line:878,column:12},end:{line:878,column:48}},"142":{start:{line:879,column:12},end:{line:879,column:43}},"143":{start:{line:892,column:12},end:{line:892,column:50}},"144":{start:{line:903,column:12},end:{line:903,column:36}},"145":{start:{line:914,column:12},end:{line:914,column:31}},"146":{start:{line:929,column:4},end:{line:1238,column:7}},"147":{start:{line:954,column:12},end:{line:954,column:50}},"148":{start:{line:958,column:12},end:{line:958,column:58}},"149":{start:{line:959,column:12},end:{line:959,column:58}},"150":{start:{line:960,column:12},end:{line:960,column:59}},"151":{start:{line:961,column:12},end:{line:961,column:59}},"152":{start:{line:962,column:12},end:{line:962,column:59}},"153":{start:{line:963,column:12},end:{line:963,column:58}},"154":{start:{line:964,column:12},end:{line:964,column:56}},"155":{start:{line:965,column:12},end:{line:965,column:59}},"156":{start:{line:966,column:12},end:{line:966,column:60}},"157":{start:{line:967,column:12},end:{line:967,column:62}},"158":{start:{line:968,column:12},end:{line:968,column:59}},"159":{start:{line:969,column:12},end:{line:969,column:60}},"160":{start:{line:970,column:12},end:{line:970,column:59}},"161":{start:{line:973,column:12},end:{line:973,column:34}},"162":{start:{line:974,column:12},end:{line:974,column:34}},"163":{start:{line:975,column:12},end:{line:975,column:34}},"164":{start:{line:976,column:12},end:{line:976,column:34}},"165":{start:{line:988,column:12},end:{line:988,column:80}},"166":{start:{line:992,column:12},end:{line:997,column:14}},"167":{start:{line:999,column:12},end:{line:999,column:36}},"168":{start:{line:1002,column:12},end:{line:1002,column:58}},"169":{start:{line:1003,column:12},end:{line:1003,column:74}},"170":{start:{line:1004,column:12},end:{line:1004,column:58}},"171":{start:{line:1005,column:12},end:{line:1005,column:58}},"172":{start:{line:1006,column:12},end:{line:1006,column:60}},"173":{start:{line:1007,column:12},end:{line:1007,column:60}},"174":{start:{line:1008,column:12},end:{line:1008,column:60}},"175":{start:{line:1020,column:12},end:{line:1020,column:32}},"176":{start:{line:1032,column:12},end:{line:1032,column:29}},"177":{start:{line:1044,column:12},end:{line:1044,column:31}},"178":{start:{line:1055,column:12},end:{line:1055,column:32}},"179":{start:{line:1066,column:12},end:{line:1066,column:33}},"180":{start:{line:1077,column:12},end:{line:1077,column:35}},"181":{start:{line:1096,column:12},end:{line:1099,column:13}},"182":{start:{line:1097,column:16},end:{line:1097,column:35}},"183":{start:{line:1098,column:16},end:{line:1098,column:29}},"184":{start:{line:1100,column:12},end:{line:1100,column:49}},"185":{start:{line:1102,column:12},end:{line:1102,column:36}},"186":{start:{line:1104,column:23},end:{line:1104,column:27}},"187":{start:{line:1105,column:12},end:{line:1113,column:15}},"188":{start:{line:1106,column:16},end:{line:1112,column:17}},"189":{start:{line:1107,column:20},end:{line:1107,column:34}},"190":{start:{line:1110,column:20},end:{line:1110,column:75}},"191":{start:{line:1111,column:20},end:{line:1111,column:41}},"192":{start:{line:1125,column:12},end:{line:1125,column:49}},"193":{start:{line:1127,column:23},end:{line:1127,column:27}},"194":{start:{line:1128,column:12},end:{line:1130,column:15}},"195":{start:{line:1129,column:16},end:{line:1129,column:30}},"196":{start:{line:1143,column:12},end:{line:1143,column:49}},"197":{start:{line:1145,column:12},end:{line:1147,column:13}},"198":{start:{line:1146,column:16},end:{line:1146,column:71}},"199":{start:{line:1149,column:23},end:{line:1149,column:27}},"200":{start:{line:1150,column:22},end:{line:1168,column:14}},"201":{start:{line:1151,column:16},end:{line:1167,column:17}},"202":{start:{line:1152,column:20},end:{line:1152,column:52}},"203":{start:{line:1153,column:20},end:{line:1153,column:40}},"204":{start:{line:1155,column:21},end:{line:1167,column:17}},"205":{start:{line:1156,column:20},end:{line:1163,column:23}},"206":{start:{line:1157,column:24},end:{line:1162,column:25}},"207":{start:{line:1158,column:28},end:{line:1158,column:35}},"208":{start:{line:1161,column:28},end:{line:1161,column:60}},"209":{start:{line:1166,column:20},end:{line:1166,column:40}},"210":{start:{line:1170,column:12},end:{line:1170,column:23}},"211":{start:{line:1182,column:12},end:{line:1182,column:49}},"212":{start:{line:1184,column:23},end:{line:1184,column:27}},"213":{start:{line:1185,column:12},end:{line:1192,column:15}},"214":{start:{line:1186,column:16},end:{line:1191,column:17}},"215":{start:{line:1187,column:20},end:{line:1187,column:34}},"216":{start:{line:1190,column:20},end:{line:1190,column:41}},"217":{start:{line:1204,column:12},end:{line:1204,column:49}},"218":{start:{line:1206,column:23},end:{line:1206,column:27}},"219":{start:{line:1207,column:12},end:{line:1214,column:15}},"220":{start:{line:1208,column:16},end:{line:1213,column:17}},"221":{start:{line:1209,column:20},end:{line:1209,column:34}},"222":{start:{line:1212,column:20},end:{line:1212,column:41}},"223":{start:{line:1226,column:12},end:{line:1226,column:49}},"224":{start:{line:1228,column:23},end:{line:1228,column:27}},"225":{start:{line:1229,column:12},end:{line:1236,column:15}},"226":{start:{line:1230,column:16},end:{line:1235,column:17}},"227":{start:{line:1231,column:20},end:{line:1231,column:34}},"228":{start:{line:1234,column:20},end:{line:1234,column:41}},"229":{start:{line:1248,column:4},end:{line:1579,column:7}},"230":{start:{line:1273,column:12},end:{line:1273,column:50}},"231":{start:{line:1277,column:12},end:{line:1277,column:66}},"232":{start:{line:1278,column:12},end:{line:1278,column:66}},"233":{start:{line:1279,column:12},end:{line:1279,column:67}},"234":{start:{line:1280,column:12},end:{line:1280,column:65}},"235":{start:{line:1281,column:12},end:{line:1281,column:65}},"236":{start:{line:1282,column:12},end:{line:1282,column:78}},"237":{start:{line:1285,column:12},end:{line:1285,column:38}},"238":{start:{line:1286,column:12},end:{line:1286,column:38}},"239":{start:{line:1287,column:12},end:{line:1287,column:38}},"240":{start:{line:1288,column:12},end:{line:1288,column:38}},"241":{start:{line:1289,column:12},end:{line:1289,column:38}},"242":{start:{line:1301,column:12},end:{line:1301,column:50}},"243":{start:{line:1314,column:12},end:{line:1314,column:36}},"244":{start:{line:1316,column:27},end:{line:1316,column:29}},"245":{start:{line:1317,column:33},end:{line:1317,column:35}},"246":{start:{line:1318,column:37},end:{line:1318,column:59}},"247":{start:{line:1319,column:12},end:{line:1331,column:13}},"248":{start:{line:1319,column:24},end:{line:1319,column:25}},"249":{start:{line:1320,column:28},end:{line:1320,column:49}},"250":{start:{line:1321,column:29},end:{line:1321,column:58}},"251":{start:{line:1322,column:16},end:{line:1322,column:36}},"252":{start:{line:1323,column:16},end:{line:1323,column:38}},"253":{start:{line:1325,column:16},end:{line:1330,column:17}},"254":{start:{line:1326,column:20},end:{line:1326,column:61}},"255":{start:{line:1329,column:20},end:{line:1329,column:59}},"256":{start:{line:1332,column:12},end:{line:1332,column:44}},"257":{start:{line:1333,column:12},end:{line:1333,column:50}},"258":{start:{line:1334,column:12},end:{line:1334,column:62}},"259":{start:{line:1335,column:12},end:{line:1335,column:62}},"260":{start:{line:1336,column:12},end:{line:1336,column:64}},"261":{start:{line:1348,column:12},end:{line:1348,column:31}},"262":{start:{line:1359,column:12},end:{line:1359,column:32}},"263":{start:{line:1370,column:12},end:{line:1370,column:33}},"264":{start:{line:1389,column:12},end:{line:1392,column:13}},"265":{start:{line:1390,column:16},end:{line:1390,column:35}},"266":{start:{line:1391,column:16},end:{line:1391,column:29}},"267":{start:{line:1393,column:12},end:{line:1393,column:49}},"268":{start:{line:1395,column:12},end:{line:1395,column:36}},"269":{start:{line:1396,column:12},end:{line:1398,column:13}},"270":{start:{line:1397,column:16},end:{line:1397,column:34}},"271":{start:{line:1400,column:23},end:{line:1400,column:27}},"272":{start:{line:1401,column:22},end:{line:1409,column:14}},"273":{start:{line:1402,column:16},end:{line:1408,column:17}},"274":{start:{line:1403,column:20},end:{line:1403,column:34}},"275":{start:{line:1406,column:20},end:{line:1406,column:46}},"276":{start:{line:1407,column:20},end:{line:1407,column:41}},"277":{start:{line:1411,column:12},end:{line:1411,column:23}},"278":{start:{line:1415,column:12},end:{line:1415,column:36}},"279":{start:{line:1416,column:12},end:{line:1418,column:13}},"280":{start:{line:1417,column:16},end:{line:1417,column:34}},"281":{start:{line:1420,column:23},end:{line:1420,column:27}},"282":{start:{line:1421,column:27},end:{line:1421,column:57}},"283":{start:{line:1423,column:12},end:{line:1423,column:38}},"284":{start:{line:1424,column:12},end:{line:1424,column:24}},"285":{start:{line:1449,column:12},end:{line:1451,column:13}},"286":{start:{line:1450,column:16},end:{line:1450,column:33}},"287":{start:{line:1453,column:12},end:{line:1455,column:13}},"288":{start:{line:1454,column:16},end:{line:1454,column:64}},"289":{start:{line:1457,column:12},end:{line:1459,column:13}},"290":{start:{line:1458,column:16},end:{line:1458,column:136}},"291":{start:{line:1461,column:27},end:{line:1461,column:31}},"292":{start:{line:1462,column:12},end:{line:1504,column:13}},"293":{start:{line:1463,column:31},end:{line:1463,column:55}},"294":{start:{line:1465,column:16},end:{line:1500,column:17}},"295":{start:{line:1470,column:20},end:{line:1470,column:39}},"296":{start:{line:1472,column:21},end:{line:1500,column:17}},"297":{start:{line:1476,column:20},end:{line:1476,column:84}},"298":{start:{line:1477,column:20},end:{line:1482,column:21}},"299":{start:{line:1478,column:24},end:{line:1478,column:43}},"300":{start:{line:1481,column:24},end:{line:1481,column:36}},"301":{start:{line:1484,column:21},end:{line:1500,column:17}},"302":{start:{line:1488,column:20},end:{line:1488,column:77}},"303":{start:{line:1493,column:20},end:{line:1499,column:21}},"304":{start:{line:1493,column:32},end:{line:1493,column:33}},"305":{start:{line:1494,column:37},end:{line:1494,column:48}},"306":{start:{line:1495,column:24},end:{line:1495,column:88}},"307":{start:{line:1496,column:24},end:{line:1498,column:25}},"308":{start:{line:1497,column:28},end:{line:1497,column:42}},"309":{start:{line:1503,column:16},end:{line:1503,column:28}},"310":{start:{line:1525,column:12},end:{line:1525,column:49}},"311":{start:{line:1526,column:23},end:{line:1526,column:27}},"312":{start:{line:1527,column:22},end:{line:1554,column:14}},"313":{start:{line:1528,column:16},end:{line:1553,column:17}},"314":{start:{line:1529,column:20},end:{line:1529,column:34}},"315":{start:{line:1532,column:32},end:{line:1532,column:51}},"316":{start:{line:1533,column:20},end:{line:1535,column:21}},"317":{start:{line:1534,column:24},end:{line:1534,column:41}},"318":{start:{line:1537,column:33},end:{line:1537,column:62}},"319":{start:{line:1538,column:20},end:{line:1538,column:40}},"320":{start:{line:1540,column:20},end:{line:1552,column:21}},"321":{start:{line:1541,column:24},end:{line:1548,column:27}},"322":{start:{line:1542,column:28},end:{line:1547,column:29}},"323":{start:{line:1543,column:32},end:{line:1543,column:39}},"324":{start:{line:1546,column:32},end:{line:1546,column:64}},"325":{start:{line:1551,column:24},end:{line:1551,column:47}},"326":{start:{line:1556,column:12},end:{line:1556,column:23}},"327":{start:{line:1575,column:12},end:{line:1575,column:49}},"328":{start:{line:1577,column:12},end:{line:1577,column:47}},"329":{start:{line:1589,column:4},end:{line:1843,column:7}},"330":{start:{line:1596,column:12},end:{line:1596,column:77}},"331":{start:{line:1614,column:12},end:{line:1614,column:29}},"332":{start:{line:1615,column:12},end:{line:1615,column:57}},"333":{start:{line:1617,column:12},end:{line:1617,column:67}},"334":{start:{line:1618,column:12},end:{line:1618,column:64}},"335":{start:{line:1619,column:12},end:{line:1619,column:63}},"336":{start:{line:1620,column:12},end:{line:1620,column:68}},"337":{start:{line:1637,column:12},end:{line:1637,column:78}},"338":{start:{line:1657,column:12},end:{line:1657,column:49}},"339":{start:{line:1659,column:23},end:{line:1659,column:27}},"340":{start:{line:1660,column:22},end:{line:1662,column:14}},"341":{start:{line:1661,column:16},end:{line:1661,column:36}},"342":{start:{line:1664,column:12},end:{line:1664,column:23}},"343":{start:{line:1689,column:12},end:{line:1692,column:13}},"344":{start:{line:1690,column:16},end:{line:1690,column:35}},"345":{start:{line:1691,column:16},end:{line:1691,column:29}},"346":{start:{line:1694,column:12},end:{line:1694,column:49}},"347":{start:{line:1695,column:12},end:{line:1695,column:36}},"348":{start:{line:1697,column:23},end:{line:1697,column:27}},"349":{start:{line:1698,column:22},end:{line:1708,column:14}},"350":{start:{line:1699,column:16},end:{line:1702,column:17}},"351":{start:{line:1700,column:20},end:{line:1700,column:34}},"352":{start:{line:1701,column:20},end:{line:1701,column:27}},"353":{start:{line:1704,column:26},end:{line:1704,column:43}},"354":{start:{line:1705,column:26},end:{line:1705,column:73}},"355":{start:{line:1707,column:16},end:{line:1707,column:42}},"356":{start:{line:1710,column:12},end:{line:1710,column:23}},"357":{start:{line:1726,column:12},end:{line:1726,column:69}},"358":{start:{line:1749,column:12},end:{line:1752,column:13}},"359":{start:{line:1750,column:16},end:{line:1750,column:35}},"360":{start:{line:1751,column:16},end:{line:1751,column:29}},"361":{start:{line:1754,column:12},end:{line:1754,column:49}},"362":{start:{line:1755,column:12},end:{line:1755,column:36}},"363":{start:{line:1757,column:23},end:{line:1757,column:27}},"364":{start:{line:1758,column:12},end:{line:1776,column:15}},"365":{start:{line:1759,column:16},end:{line:1762,column:17}},"366":{start:{line:1760,column:20},end:{line:1760,column:34}},"367":{start:{line:1761,column:20},end:{line:1761,column:27}},"368":{start:{line:1764,column:27},end:{line:1764,column:29}},"369":{start:{line:1765,column:27},end:{line:1765,column:52}},"370":{start:{line:1766,column:16},end:{line:1773,column:17}},"371":{start:{line:1766,column:28},end:{line:1766,column:29}},"372":{start:{line:1767,column:34},end:{line:1767,column:56}},"373":{start:{line:1768,column:36},end:{line:1768,column:74}},"374":{start:{line:1769,column:30},end:{line:1769,column:81}},"375":{start:{line:1771,column:20},end:{line:1771,column:39}},"376":{start:{line:1772,column:20},end:{line:1772,column:35}},"377":{start:{line:1775,column:16},end:{line:1775,column:43}},"378":{start:{line:1795,column:12},end:{line:1795,column:49}},"379":{start:{line:1797,column:23},end:{line:1797,column:27}},"380":{start:{line:1798,column:12},end:{line:1800,column:15}},"381":{start:{line:1799,column:16},end:{line:1799,column:65}},"382":{start:{line:1816,column:12},end:{line:1816,column:34}},"383":{start:{line:1818,column:12},end:{line:1841,column:13}},"384":{start:{line:1819,column:29},end:{line:1819,column:40}},"385":{start:{line:1820,column:26},end:{line:1835,column:18}},"386":{start:{line:1821,column:20},end:{line:1834,column:21}},"387":{start:{line:1822,column:24},end:{line:1822,column:38}},"388":{start:{line:1825,column:24},end:{line:1825,column:67}},"389":{start:{line:1826,column:24},end:{line:1833,column:27}},"390":{start:{line:1827,column:28},end:{line:1832,column:29}},"391":{start:{line:1828,column:32},end:{line:1828,column:39}},"392":{start:{line:1831,column:32},end:{line:1831,column:64}},"393":{start:{line:1837,column:16},end:{line:1837,column:27}},"394":{start:{line:1840,column:16},end:{line:1840,column:53}},"395":{start:{line:1854,column:4},end:{line:1893,column:7}},"396":{start:{line:1861,column:12},end:{line:1861,column:39}},"397":{start:{line:1873,column:34},end:{line:1873,column:70}},"398":{start:{line:1874,column:12},end:{line:1874,column:83}},"399":{start:{line:1891,column:12},end:{line:1891,column:57}},"400":{start:{line:1903,column:4},end:{line:1931,column:7}},"401":{start:{line:1910,column:12},end:{line:1910,column:80}},"402":{start:{line:1928,column:12},end:{line:1928,column:29}},"403":{start:{line:1929,column:12},end:{line:1929,column:57}},"404":{start:{line:1941,column:4},end:{line:1991,column:7}},"405":{start:{line:1957,column:12},end:{line:1957,column:42}},"406":{start:{line:1971,column:34},end:{line:1971,column:70}},"407":{start:{line:1972,column:12},end:{line:1972,column:87}},"408":{start:{line:1989,column:12},end:{line:1989,column:57}},"409":{start:{line:2002,column:4},end:{line:2143,column:7}},"410":{start:{line:2009,column:12},end:{line:2009,column:75}},"411":{start:{line:2021,column:12},end:{line:2021,column:51}},"412":{start:{line:2031,column:12},end:{line:2031,column:56}},"413":{start:{line:2045,column:12},end:{line:2045,column:51}},"414":{start:{line:2057,column:12},end:{line:2057,column:70}},"415":{start:{line:2067,column:12},end:{line:2067,column:62}},"416":{start:{line:2078,column:12},end:{line:2078,column:66}},"417":{start:{line:2088,column:12},end:{line:2088,column:49}},"418":{start:{line:2098,column:12},end:{line:2098,column:58}},"419":{start:{line:2110,column:12},end:{line:2110,column:67}},"420":{start:{line:2122,column:12},end:{line:2122,column:74}},"421":{start:{line:2140,column:12},end:{line:2140,column:29}},"422":{start:{line:2141,column:12},end:{line:2141,column:57}},"423":{start:{line:2154,column:4},end:{line:2243,column:7}},"424":{start:{line:2161,column:12},end:{line:2161,column:75}},"425":{start:{line:2173,column:12},end:{line:2173,column:78}},"426":{start:{line:2194,column:12},end:{line:2197,column:13}},"427":{start:{line:2195,column:16},end:{line:2195,column:35}},"428":{start:{line:2196,column:16},end:{line:2196,column:29}},"429":{start:{line:2199,column:12},end:{line:2199,column:49}},"430":{start:{line:2200,column:12},end:{line:2200,column:36}},"431":{start:{line:2202,column:23},end:{line:2202,column:27}},"432":{start:{line:2203,column:12},end:{line:2220,column:15}},"433":{start:{line:2204,column:16},end:{line:2207,column:17}},"434":{start:{line:2205,column:20},end:{line:2205,column:34}},"435":{start:{line:2206,column:20},end:{line:2206,column:27}},"436":{start:{line:2209,column:34},end:{line:2209,column:36}},"437":{start:{line:2210,column:27},end:{line:2210,column:52}},"438":{start:{line:2211,column:16},end:{line:2217,column:17}},"439":{start:{line:2211,column:29},end:{line:2211,column:30}},"440":{start:{line:2212,column:41},end:{line:2212,column:63}},"441":{start:{line:2213,column:36},end:{line:2213,column:81}},"442":{start:{line:2214,column:37},end:{line:2214,column:102}},"443":{start:{line:2215,column:20},end:{line:2215,column:53}},"444":{start:{line:2216,column:20},end:{line:2216,column:49}},"445":{start:{line:2219,column:16},end:{line:2219,column:50}},"446":{start:{line:2238,column:12},end:{line:2238,column:29}},"447":{start:{line:2239,column:12},end:{line:2239,column:57}},"448":{start:{line:2241,column:12},end:{line:2241,column:52}},"449":{start:{line:2255,column:4},end:{line:2306,column:7}},"450":{start:{line:2262,column:12},end:{line:2262,column:37}},"451":{start:{line:2274,column:34},end:{line:2274,column:70}},"452":{start:{line:2275,column:12},end:{line:2275,column:87}},"453":{start:{line:2284,column:12},end:{line:2284,column:95}},"454":{start:{line:2301,column:12},end:{line:2301,column:57}},"455":{start:{line:2303,column:12},end:{line:2303,column:78}},"456":{start:{line:2304,column:12},end:{line:2304,column:56}},"457":{start:{line:2316,column:4},end:{line:2409,column:7}},"458":{start:{line:2331,column:12},end:{line:2331,column:68}},"459":{start:{line:2345,column:12},end:{line:2345,column:29}},"460":{start:{line:2346,column:12},end:{line:2346,column:50}},"461":{start:{line:2348,column:12},end:{line:2348,column:63}},"462":{start:{line:2349,column:12},end:{line:2349,column:64}},"463":{start:{line:2368,column:12},end:{line:2368,column:49}},"464":{start:{line:2370,column:23},end:{line:2370,column:27}},"465":{start:{line:2371,column:12},end:{line:2378,column:15}},"466":{start:{line:2372,column:16},end:{line:2377,column:17}},"467":{start:{line:2373,column:20},end:{line:2373,column:34}},"468":{start:{line:2376,column:20},end:{line:2376,column:70}},"469":{start:{line:2397,column:12},end:{line:2397,column:49}},"470":{start:{line:2399,column:23},end:{line:2399,column:27}},"471":{start:{line:2400,column:12},end:{line:2407,column:15}},"472":{start:{line:2401,column:16},end:{line:2406,column:17}},"473":{start:{line:2402,column:20},end:{line:2402,column:34}},"474":{start:{line:2405,column:20},end:{line:2405,column:70}},"475":{start:{line:2419,column:4},end:{line:2462,column:7}},"476":{start:{line:2435,column:12},end:{line:2435,column:30}},"477":{start:{line:2447,column:12},end:{line:2447,column:70}},"478":{start:{line:2460,column:12},end:{line:2460,column:50}},"479":{start:{line:2471,column:4},end:{line:2494,column:7}},"480":{start:{line:2478,column:12},end:{line:2478,column:30}},"481":{start:{line:2491,column:12},end:{line:2491,column:38}},"482":{start:{line:2492,column:12},end:{line:2492,column:50}},"483":{start:{line:2504,column:4},end:{line:2528,column:7}},"484":{start:{line:2511,column:12},end:{line:2511,column:69}},"485":{start:{line:2525,column:12},end:{line:2525,column:29}},"486":{start:{line:2526,column:12},end:{line:2526,column:50}},"487":{start:{line:2538,column:4},end:{line:2618,column:7}},"488":{start:{line:2554,column:12},end:{line:2554,column:31}},"489":{start:{line:2566,column:12},end:{line:2566,column:63}},"490":{start:{line:2579,column:12},end:{line:2579,column:50}},"491":{start:{line:2593,column:12},end:{line:2593,column:49}},"492":{start:{line:2595,column:23},end:{line:2595,column:27}},"493":{start:{line:2596,column:22},end:{line:2614,column:14}},"494":{start:{line:2597,column:16},end:{line:2613,column:17}},"495":{start:{line:2598,column:20},end:{line:2598,column:34}},"496":{start:{line:2602,column:32},end:{line:2602,column:51}},"497":{start:{line:2604,column:33},end:{line:2604,column:62}},"498":{start:{line:2605,column:20},end:{line:2612,column:23}},"499":{start:{line:2606,column:24},end:{line:2611,column:25}},"500":{start:{line:2607,column:28},end:{line:2607,column:35}},"501":{start:{line:2610,column:28},end:{line:2610,column:60}},"502":{start:{line:2616,column:12},end:{line:2616,column:23}},"503":{start:{line:2628,column:4},end:{line:2656,column:7}},"504":{start:{line:2635,column:12},end:{line:2635,column:69}},"505":{start:{line:2653,column:12},end:{line:2653,column:29}},"506":{start:{line:2654,column:12},end:{line:2654,column:57}},"507":{start:{line:2666,column:4},end:{line:2705,column:7}},"508":{start:{line:2673,column:12},end:{line:2673,column:31}},"509":{start:{line:2685,column:34},end:{line:2685,column:70}},"510":{start:{line:2686,column:12},end:{line:2686,column:76}},"511":{start:{line:2703,column:12},end:{line:2703,column:57}},"512":{start:{line:2714,column:4},end:{line:2792,column:7}},"513":{start:{line:2721,column:12},end:{line:2721,column:71}},"514":{start:{line:2739,column:12},end:{line:2739,column:29}},"515":{start:{line:2740,column:12},end:{line:2740,column:57}},"516":{start:{line:2742,column:12},end:{line:2742,column:66}},"517":{start:{line:2767,column:12},end:{line:2770,column:13}},"518":{start:{line:2768,column:16},end:{line:2768,column:34}},"519":{start:{line:2769,column:16},end:{line:2769,column:28}},"520":{start:{line:2772,column:12},end:{line:2772,column:49}},"521":{start:{line:2773,column:12},end:{line:2773,column:34}},"522":{start:{line:2776,column:12},end:{line:2776,column:40}},"523":{start:{line:2778,column:23},end:{line:2778,column:27}},"524":{start:{line:2779,column:12},end:{line:2781,column:15}},"525":{start:{line:2780,column:16},end:{line:2780,column:44}},"526":{start:{line:2785,column:12},end:{line:2790,column:13}},"527":{start:{line:2786,column:16},end:{line:2786,column:75}},"528":{start:{line:2789,column:16},end:{line:2789,column:45}},"529":{start:{line:2802,column:4},end:{line:2873,column:7}},"530":{start:{line:2809,column:12},end:{line:2809,column:33}},"531":{start:{line:2821,column:34},end:{line:2821,column:70}},"532":{start:{line:2822,column:12},end:{line:2822,column:77}},"533":{start:{line:2839,column:12},end:{line:2839,column:57}},"534":{start:{line:2862,column:12},end:{line:2866,column:13}},"535":{start:{line:2863,column:16},end:{line:2863,column:34}},"536":{start:{line:2864,column:16},end:{line:2864,column:30}},"537":{start:{line:2865,column:16},end:{line:2865,column:35}},"538":{start:{line:2868,column:12},end:{line:2868,column:34}},"539":{start:{line:2869,column:12},end:{line:2869,column:34}},"540":{start:{line:2871,column:12},end:{line:2871,column:49}},"541":{start:{line:2883,column:4},end:{line:2914,column:7}},"542":{start:{line:2890,column:23},end:{line:2890,column:67}},"543":{start:{line:2891,column:12},end:{line:2891,column:116}},"544":{start:{line:2910,column:12},end:{line:2910,column:29}},"545":{start:{line:2911,column:12},end:{line:2911,column:29}},"546":{start:{line:2912,column:12},end:{line:2912,column:57}},"547":{start:{line:2925,column:4},end:{line:3017,column:7}},"548":{start:{line:2932,column:12},end:{line:2932,column:83}},"549":{start:{line:2946,column:12},end:{line:2946,column:100}},"550":{start:{line:2958,column:34},end:{line:2958,column:70}},"551":{start:{line:2959,column:12},end:{line:2959,column:102}},"552":{start:{line:2977,column:12},end:{line:2977,column:29}},"553":{start:{line:2978,column:12},end:{line:2978,column:57}},"554":{start:{line:3001,column:12},end:{line:3005,column:13}},"555":{start:{line:3002,column:16},end:{line:3002,column:34}},"556":{start:{line:3003,column:16},end:{line:3003,column:36}},"557":{start:{line:3004,column:16},end:{line:3004,column:41}},"558":{start:{line:3007,column:12},end:{line:3010,column:13}},"559":{start:{line:3008,column:16},end:{line:3008,column:34}},"560":{start:{line:3009,column:16},end:{line:3009,column:28}},"561":{start:{line:3012,column:12},end:{line:3012,column:34}},"562":{start:{line:3013,column:12},end:{line:3013,column:40}},"563":{start:{line:3015,column:12},end:{line:3015,column:49}},"564":{start:{line:3027,column:4},end:{line:3213,column:7}},"565":{start:{line:3043,column:12},end:{line:3043,column:36}},"566":{start:{line:3055,column:12},end:{line:3055,column:88}},"567":{start:{line:3072,column:12},end:{line:3074,column:13}},"568":{start:{line:3073,column:16},end:{line:3073,column:84}},"569":{start:{line:3076,column:12},end:{line:3076,column:57}},"570":{start:{line:3098,column:12},end:{line:3100,column:13}},"571":{start:{line:3099,column:16},end:{line:3099,column:46}},"572":{start:{line:3102,column:12},end:{line:3102,column:49}},"573":{start:{line:3104,column:23},end:{line:3104,column:27}},"574":{start:{line:3105,column:22},end:{line:3120,column:14}},"575":{start:{line:3106,column:16},end:{line:3119,column:17}},"576":{start:{line:3107,column:20},end:{line:3107,column:34}},"577":{start:{line:3110,column:33},end:{line:3110,column:83}},"578":{start:{line:3111,column:20},end:{line:3118,column:23}},"579":{start:{line:3112,column:24},end:{line:3117,column:25}},"580":{start:{line:3113,column:28},end:{line:3113,column:35}},"581":{start:{line:3116,column:28},end:{line:3116,column:60}},"582":{start:{line:3122,column:12},end:{line:3122,column:23}},"583":{start:{line:3126,column:12},end:{line:3150,column:13}},"584":{start:{line:3127,column:27},end:{line:3127,column:31}},"585":{start:{line:3130,column:31},end:{line:3130,column:73}},"586":{start:{line:3133,column:28},end:{line:3133,column:83}},"587":{start:{line:3133,column:63},end:{line:3133,column:82}},"588":{start:{line:3136,column:16},end:{line:3138,column:17}},"589":{start:{line:3137,column:20},end:{line:3137,column:113}},"590":{start:{line:3141,column:40},end:{line:3141,column:90}},"591":{start:{line:3144,column:34},end:{line:3144,column:68}},"592":{start:{line:3146,column:16},end:{line:3146,column:43}},"593":{start:{line:3149,column:16},end:{line:3149,column:72}},"594":{start:{line:3154,column:12},end:{line:3168,column:13}},"595":{start:{line:3157,column:36},end:{line:3157,column:53}},"596":{start:{line:3159,column:16},end:{line:3164,column:17}},"597":{start:{line:3160,column:20},end:{line:3160,column:115}},"598":{start:{line:3163,column:20},end:{line:3163,column:51}},"599":{start:{line:3167,column:16},end:{line:3167,column:72}},"600":{start:{line:3172,column:12},end:{line:3172,column:49}},"601":{start:{line:3173,column:23},end:{line:3173,column:27}},"602":{start:{line:3176,column:40},end:{line:3176,column:74}},"603":{start:{line:3177,column:29},end:{line:3177,column:55}},"604":{start:{line:3180,column:12},end:{line:3189,column:13}},"605":{start:{line:3181,column:16},end:{line:3181,column:51}},"606":{start:{line:3182,column:16},end:{line:3182,column:68}},"607":{start:{line:3184,column:16},end:{line:3185,column:95}},"608":{start:{line:3185,column:38},end:{line:3185,column:92}},"609":{start:{line:3187,column:16},end:{line:3187,column:82}},"610":{start:{line:3188,column:16},end:{line:3188,column:57}},"611":{start:{line:3192,column:42},end:{line:3192,column:88}},"612":{start:{line:3193,column:31},end:{line:3193,column:61}},"613":{start:{line:3196,column:12},end:{line:3211,column:13}},"614":{start:{line:3197,column:16},end:{line:3197,column:53}},"615":{start:{line:3198,column:16},end:{line:3198,column:70}},"616":{start:{line:3200,column:16},end:{line:3203,column:19}},"617":{start:{line:3201,column:20},end:{line:3201,column:75}},"618":{start:{line:3202,column:20},end:{line:3202,column:31}},"619":{start:{line:3207,column:16},end:{line:3210,column:19}},"620":{start:{line:3208,column:20},end:{line:3208,column:75}},"621":{start:{line:3209,column:20},end:{line:3209,column:31}},"622":{start:{line:3223,column:4},end:{line:3814,column:7}},"623":{start:{line:3230,column:12},end:{line:3230,column:68}},"624":{start:{line:3248,column:12},end:{line:3248,column:28}},"625":{start:{line:3249,column:12},end:{line:3249,column:57}},"626":{start:{line:3250,column:12},end:{line:3250,column:27}},"627":{start:{line:3254,column:12},end:{line:3254,column:64}},"628":{start:{line:3255,column:12},end:{line:3255,column:72}},"629":{start:{line:3256,column:12},end:{line:3256,column:71}},"630":{start:{line:3257,column:12},end:{line:3257,column:64}},"631":{start:{line:3258,column:12},end:{line:3258,column:66}},"632":{start:{line:3259,column:12},end:{line:3259,column:63}},"633":{start:{line:3260,column:12},end:{line:3260,column:65}},"634":{start:{line:3261,column:12},end:{line:3261,column:65}},"635":{start:{line:3262,column:12},end:{line:3262,column:67}},"636":{start:{line:3263,column:12},end:{line:3263,column:69}},"637":{start:{line:3264,column:12},end:{line:3264,column:64}},"638":{start:{line:3265,column:12},end:{line:3265,column:65}},"639":{start:{line:3266,column:12},end:{line:3266,column:66}},"640":{start:{line:3267,column:12},end:{line:3267,column:63}},"641":{start:{line:3268,column:12},end:{line:3268,column:65}},"642":{start:{line:3287,column:22},end:{line:3287,column:72}},"643":{start:{line:3289,column:12},end:{line:3289,column:23}},"644":{start:{line:3308,column:12},end:{line:3308,column:49}},"645":{start:{line:3310,column:23},end:{line:3310,column:27}},"646":{start:{line:3311,column:22},end:{line:3313,column:14}},"647":{start:{line:3312,column:16},end:{line:3312,column:36}},"648":{start:{line:3315,column:12},end:{line:3315,column:23}},"649":{start:{line:3334,column:12},end:{line:3334,column:49}},"650":{start:{line:3336,column:23},end:{line:3336,column:27}},"651":{start:{line:3337,column:22},end:{line:3339,column:14}},"652":{start:{line:3338,column:16},end:{line:3338,column:36}},"653":{start:{line:3341,column:12},end:{line:3341,column:23}},"654":{start:{line:3361,column:12},end:{line:3361,column:49}},"655":{start:{line:3362,column:12},end:{line:3362,column:34}},"656":{start:{line:3363,column:12},end:{line:3363,column:67}},"657":{start:{line:3365,column:23},end:{line:3365,column:27}},"658":{start:{line:3366,column:12},end:{line:3373,column:15}},"659":{start:{line:3367,column:16},end:{line:3372,column:17}},"660":{start:{line:3368,column:20},end:{line:3368,column:34}},"661":{start:{line:3371,column:20},end:{line:3371,column:56}},"662":{start:{line:3392,column:12},end:{line:3392,column:49}},"663":{start:{line:3394,column:23},end:{line:3394,column:27}},"664":{start:{line:3395,column:22},end:{line:3397,column:14}},"665":{start:{line:3396,column:16},end:{line:3396,column:36}},"666":{start:{line:3399,column:12},end:{line:3399,column:23}},"667":{start:{line:3414,column:12},end:{line:3414,column:74}},"668":{start:{line:3433,column:12},end:{line:3433,column:49}},"669":{start:{line:3435,column:23},end:{line:3435,column:27}},"670":{start:{line:3436,column:22},end:{line:3438,column:14}},"671":{start:{line:3437,column:16},end:{line:3437,column:36}},"672":{start:{line:3440,column:12},end:{line:3440,column:23}},"673":{start:{line:3460,column:12},end:{line:3460,column:49}},"674":{start:{line:3461,column:12},end:{line:3461,column:34}},"675":{start:{line:3462,column:12},end:{line:3462,column:67}},"676":{start:{line:3464,column:23},end:{line:3464,column:27}},"677":{start:{line:3465,column:12},end:{line:3472,column:15}},"678":{start:{line:3466,column:16},end:{line:3471,column:17}},"679":{start:{line:3467,column:20},end:{line:3467,column:34}},"680":{start:{line:3470,column:20},end:{line:3470,column:56}},"681":{start:{line:3497,column:12},end:{line:3497,column:49}},"682":{start:{line:3498,column:12},end:{line:3498,column:34}},"683":{start:{line:3499,column:12},end:{line:3499,column:67}},"684":{start:{line:3501,column:23},end:{line:3501,column:27}},"685":{start:{line:3502,column:12},end:{line:3509,column:15}},"686":{start:{line:3503,column:16},end:{line:3508,column:17}},"687":{start:{line:3504,column:20},end:{line:3504,column:34}},"688":{start:{line:3507,column:20},end:{line:3507,column:56}},"689":{start:{line:3528,column:12},end:{line:3528,column:49}},"690":{start:{line:3530,column:23},end:{line:3530,column:27}},"691":{start:{line:3531,column:12},end:{line:3538,column:15}},"692":{start:{line:3532,column:16},end:{line:3537,column:17}},"693":{start:{line:3533,column:20},end:{line:3533,column:34}},"694":{start:{line:3536,column:20},end:{line:3536,column:56}},"695":{start:{line:3558,column:12},end:{line:3558,column:49}},"696":{start:{line:3560,column:23},end:{line:3560,column:27}},"697":{start:{line:3561,column:22},end:{line:3563,column:14}},"698":{start:{line:3562,column:16},end:{line:3562,column:36}},"699":{start:{line:3565,column:12},end:{line:3565,column:23}},"700":{start:{line:3586,column:12},end:{line:3586,column:49}},"701":{start:{line:3588,column:23},end:{line:3588,column:27}},"702":{start:{line:3589,column:22},end:{line:3591,column:14}},"703":{start:{line:3590,column:16},end:{line:3590,column:36}},"704":{start:{line:3593,column:12},end:{line:3593,column:23}},"705":{start:{line:3613,column:12},end:{line:3613,column:49}},"706":{start:{line:3615,column:23},end:{line:3615,column:27}},"707":{start:{line:3616,column:12},end:{line:3623,column:15}},"708":{start:{line:3617,column:16},end:{line:3622,column:17}},"709":{start:{line:3618,column:20},end:{line:3618,column:34}},"710":{start:{line:3621,column:20},end:{line:3621,column:56}},"711":{start:{line:3643,column:12},end:{line:3643,column:49}},"712":{start:{line:3645,column:23},end:{line:3645,column:27}},"713":{start:{line:3646,column:12},end:{line:3653,column:15}},"714":{start:{line:3647,column:16},end:{line:3652,column:17}},"715":{start:{line:3648,column:20},end:{line:3648,column:34}},"716":{start:{line:3651,column:20},end:{line:3651,column:56}},"717":{start:{line:3673,column:12},end:{line:3673,column:49}},"718":{start:{line:3675,column:23},end:{line:3675,column:27}},"719":{start:{line:3676,column:22},end:{line:3678,column:14}},"720":{start:{line:3677,column:16},end:{line:3677,column:36}},"721":{start:{line:3680,column:12},end:{line:3680,column:23}},"722":{start:{line:3700,column:25},end:{line:3700,column:46}},"723":{start:{line:3702,column:12},end:{line:3706,column:13}},"724":{start:{line:3703,column:16},end:{line:3705,column:18}},"725":{start:{line:3709,column:16},end:{line:3712,column:32}},"726":{start:{line:3715,column:12},end:{line:3715,column:63}},"727":{start:{line:3716,column:12},end:{line:3716,column:69}},"728":{start:{line:3717,column:12},end:{line:3717,column:61}},"729":{start:{line:3718,column:12},end:{line:3718,column:65}},"730":{start:{line:3719,column:12},end:{line:3719,column:63}},"731":{start:{line:3722,column:12},end:{line:3722,column:71}},"732":{start:{line:3723,column:12},end:{line:3723,column:89}},"733":{start:{line:3725,column:23},end:{line:3725,column:27}},"734":{start:{line:3726,column:31},end:{line:3726,column:36}},"735":{start:{line:3727,column:30},end:{line:3727,column:35}},"736":{start:{line:3728,column:12},end:{line:3786,column:14}},"737":{start:{line:3729,column:29},end:{line:3729,column:49}},"738":{start:{line:3731,column:20},end:{line:3779,column:23}},"739":{start:{line:3732,column:24},end:{line:3735,column:25}},"740":{start:{line:3733,column:28},end:{line:3733,column:47}},"741":{start:{line:3734,column:28},end:{line:3734,column:35}},"742":{start:{line:3737,column:44},end:{line:3737,column:74}},"743":{start:{line:3738,column:39},end:{line:3738,column:96}},"744":{start:{line:3739,column:24},end:{line:3776,column:25}},"745":{start:{line:3740,column:28},end:{line:3740,column:53}},"746":{start:{line:3743,column:28},end:{line:3756,column:29}},"747":{start:{line:3744,column:32},end:{line:3744,column:53}},"748":{start:{line:3745,column:32},end:{line:3745,column:52}},"749":{start:{line:3749,column:32},end:{line:3755,column:33}},"750":{start:{line:3750,column:36},end:{line:3750,column:70}},"751":{start:{line:3752,column:36},end:{line:3752,column:55}},"752":{start:{line:3753,column:36},end:{line:3753,column:52}},"753":{start:{line:3754,column:36},end:{line:3754,column:43}},"754":{start:{line:3758,column:28},end:{line:3758,column:52}},"755":{start:{line:3760,column:40},end:{line:3760,column:56}},"756":{start:{line:3762,column:28},end:{line:3775,column:29}},"757":{start:{line:3763,column:32},end:{line:3763,column:52}},"758":{start:{line:3765,column:32},end:{line:3765,column:51}},"759":{start:{line:3766,column:32},end:{line:3766,column:48}},"760":{start:{line:3767,column:32},end:{line:3767,column:39}},"761":{start:{line:3769,column:33},end:{line:3775,column:29}},"762":{start:{line:3770,column:32},end:{line:3770,column:54}},"763":{start:{line:3772,column:32},end:{line:3772,column:51}},"764":{start:{line:3773,column:32},end:{line:3773,column:48}},"765":{start:{line:3774,column:32},end:{line:3774,column:39}},"766":{start:{line:3778,column:24},end:{line:3778,column:59}},"767":{start:{line:3782,column:20},end:{line:3784,column:21}},"768":{start:{line:3783,column:24},end:{line:3783,column:45}},"769":{start:{line:3805,column:12},end:{line:3805,column:49}},"770":{start:{line:3807,column:23},end:{line:3807,column:27}},"771":{start:{line:3808,column:22},end:{line:3810,column:14}},"772":{start:{line:3809,column:16},end:{line:3809,column:36}},"773":{start:{line:3812,column:12},end:{line:3812,column:23}},"774":{start:{line:3824,column:4},end:{line:4015,column:7}},"775":{start:{line:3831,column:12},end:{line:3831,column:30}},"776":{start:{line:3843,column:22},end:{line:3843,column:39}},"777":{start:{line:3844,column:34},end:{line:3844,column:70}},"778":{start:{line:3845,column:12},end:{line:3845,column:68}},"779":{start:{line:3862,column:12},end:{line:3862,column:57}},"780":{start:{line:3866,column:12},end:{line:3866,column:60}},"781":{start:{line:3889,column:12},end:{line:3893,column:13}},"782":{start:{line:3890,column:16},end:{line:3890,column:34}},"783":{start:{line:3891,column:16},end:{line:3891,column:31}},"784":{start:{line:3892,column:16},end:{line:3892,column:38}},"785":{start:{line:3895,column:12},end:{line:3895,column:49}},"786":{start:{line:3896,column:12},end:{line:3896,column:34}},"787":{start:{line:3897,column:12},end:{line:3897,column:34}},"788":{start:{line:3899,column:12},end:{line:3901,column:13}},"789":{start:{line:3900,column:16},end:{line:3900,column:104}},"790":{start:{line:3903,column:12},end:{line:3906,column:13}},"791":{start:{line:3904,column:16},end:{line:3904,column:72}},"792":{start:{line:3905,column:16},end:{line:3905,column:23}},"793":{start:{line:3907,column:23},end:{line:3907,column:27}},"794":{start:{line:3908,column:12},end:{line:3916,column:15}},"795":{start:{line:3909,column:16},end:{line:3915,column:17}},"796":{start:{line:3910,column:20},end:{line:3910,column:34}},"797":{start:{line:3913,column:30},end:{line:3913,column:91}},"798":{start:{line:3914,column:20},end:{line:3914,column:40}},"799":{start:{line:3945,column:12},end:{line:3945,column:56}},"800":{start:{line:3972,column:12},end:{line:3976,column:13}},"801":{start:{line:3973,column:16},end:{line:3973,column:34}},"802":{start:{line:3974,column:16},end:{line:3974,column:31}},"803":{start:{line:3975,column:16},end:{line:3975,column:38}},"804":{start:{line:3978,column:12},end:{line:3978,column:49}},"805":{start:{line:3979,column:12},end:{line:3979,column:34}},"806":{start:{line:3980,column:12},end:{line:3980,column:34}},"807":{start:{line:3981,column:12},end:{line:3981,column:41}},"808":{start:{line:3983,column:12},end:{line:3985,column:13}},"809":{start:{line:3984,column:16},end:{line:3984,column:72}},"810":{start:{line:3987,column:29},end:{line:3987,column:62}},"811":{start:{line:3989,column:23},end:{line:3989,column:41}},"812":{start:{line:3990,column:25},end:{line:3990,column:31}},"813":{start:{line:3991,column:26},end:{line:3991,column:28}},"814":{start:{line:3992,column:23},end:{line:3992,column:29}},"815":{start:{line:3993,column:22},end:{line:3993,column:47}},"816":{start:{line:3994,column:23},end:{line:3994,column:27}},"817":{start:{line:3996,column:22},end:{line:4011,column:13}},"818":{start:{line:4004,column:20},end:{line:4009,column:21}},"819":{start:{line:4005,column:24},end:{line:4005,column:38}},"820":{start:{line:4008,column:24},end:{line:4008,column:54}},"821":{start:{line:4013,column:12},end:{line:4013,column:23}},"822":{start:{line:4047,column:4},end:{line:4164,column:7}},"823":{start:{line:4072,column:12},end:{line:4072,column:32}},"824":{start:{line:4073,column:12},end:{line:4073,column:44}},"825":{start:{line:4075,column:12},end:{line:4075,column:50}},"826":{start:{line:4076,column:12},end:{line:4076,column:52}},"827":{start:{line:4077,column:12},end:{line:4077,column:45}},"828":{start:{line:4078,column:12},end:{line:4078,column:51}},"829":{start:{line:4079,column:12},end:{line:4079,column:49}},"830":{start:{line:4080,column:12},end:{line:4080,column:47}},"831":{start:{line:4081,column:12},end:{line:4081,column:49}},"832":{start:{line:4082,column:12},end:{line:4082,column:56}},"833":{start:{line:4083,column:12},end:{line:4083,column:52}},"834":{start:{line:4084,column:12},end:{line:4084,column:57}},"835":{start:{line:4085,column:12},end:{line:4085,column:72}},"836":{start:{line:4096,column:12},end:{line:4096,column:42}},"837":{start:{line:4107,column:12},end:{line:4107,column:42}},"838":{start:{line:4118,column:12},end:{line:4118,column:45}},"839":{start:{line:4129,column:12},end:{line:4129,column:47}},"840":{start:{line:4140,column:12},end:{line:4140,column:46}},"841":{start:{line:4151,column:12},end:{line:4151,column:40}},"842":{start:{line:4162,column:12},end:{line:4162,column:43}},"843":{start:{line:4177,column:4},end:{line:4199,column:7}},"844":{start:{line:4192,column:12},end:{line:4192,column:32}},"845":{start:{line:4193,column:12},end:{line:4193,column:44}},"846":{start:{line:4195,column:12},end:{line:4195,column:40}},"847":{start:{line:4196,column:12},end:{line:4196,column:50}},"848":{start:{line:4197,column:12},end:{line:4197,column:65}},"849":{start:{line:4232,column:4},end:{line:4350,column:7}},"850":{start:{line:4258,column:12},end:{line:4258,column:32}},"851":{start:{line:4259,column:12},end:{line:4259,column:44}},"852":{start:{line:4261,column:12},end:{line:4261,column:54}},"853":{start:{line:4262,column:12},end:{line:4262,column:56}},"854":{start:{line:4263,column:12},end:{line:4263,column:56}},"855":{start:{line:4264,column:12},end:{line:4264,column:49}},"856":{start:{line:4265,column:12},end:{line:4265,column:57}},"857":{start:{line:4266,column:12},end:{line:4266,column:72}},"858":{start:{line:4268,column:12},end:{line:4268,column:35}},"859":{start:{line:4269,column:12},end:{line:4271,column:13}},"860":{start:{line:4269,column:25},end:{line:4269,column:26}},"861":{start:{line:4270,column:16},end:{line:4270,column:116}},"862":{start:{line:4273,column:12},end:{line:4275,column:13}},"863":{start:{line:4274,column:16},end:{line:4274,column:51}},"864":{start:{line:4276,column:12},end:{line:4278,column:13}},"865":{start:{line:4277,column:16},end:{line:4277,column:51}},"866":{start:{line:4279,column:12},end:{line:4282,column:13}},"867":{start:{line:4280,column:16},end:{line:4280,column:51}},"868":{start:{line:4281,column:16},end:{line:4281,column:64}},"869":{start:{line:4293,column:12},end:{line:4293,column:50}},"870":{start:{line:4304,column:12},end:{line:4304,column:35}},"871":{start:{line:4315,column:12},end:{line:4315,column:42}},"872":{start:{line:4326,column:12},end:{line:4326,column:40}},"873":{start:{line:4337,column:12},end:{line:4337,column:39}},"874":{start:{line:4348,column:12},end:{line:4348,column:41}},"875":{start:{line:4366,column:4},end:{line:4413,column:7}},"876":{start:{line:4383,column:12},end:{line:4383,column:35}},"877":{start:{line:4384,column:12},end:{line:4384,column:39}},"878":{start:{line:4385,column:12},end:{line:4385,column:58}},"879":{start:{line:4386,column:12},end:{line:4386,column:72}},"880":{start:{line:4387,column:12},end:{line:4387,column:50}},"881":{start:{line:4388,column:12},end:{line:4388,column:60}},"882":{start:{line:4390,column:12},end:{line:4390,column:50}},"883":{start:{line:4402,column:12},end:{line:4405,column:13}},"884":{start:{line:4403,column:16},end:{line:4403,column:32}},"885":{start:{line:4404,column:16},end:{line:4404,column:26}},"886":{start:{line:4406,column:12},end:{line:4408,column:13}},"887":{start:{line:4407,column:16},end:{line:4407,column:26}},"888":{start:{line:4411,column:12},end:{line:4411,column:87}},"889":{start:{line:4524,column:4},end:{line:5169,column:7}},"890":{start:{line:4544,column:12},end:{line:4544,column:51}},"891":{start:{line:4545,column:12},end:{line:4545,column:30}},"892":{start:{line:4546,column:12},end:{line:4546,column:27}},"893":{start:{line:4547,column:12},end:{line:4547,column:30}},"894":{start:{line:4548,column:12},end:{line:4548,column:28}},"895":{start:{line:4550,column:12},end:{line:4551,column:54}},"896":{start:{line:4553,column:12},end:{line:4553,column:52}},"897":{start:{line:4554,column:12},end:{line:4554,column:54}},"898":{start:{line:4570,column:12},end:{line:4572,column:13}},"899":{start:{line:4571,column:16},end:{line:4571,column:30}},"900":{start:{line:4574,column:12},end:{line:4576,column:13}},"901":{start:{line:4575,column:16},end:{line:4575,column:81}},"902":{start:{line:4578,column:12},end:{line:4578,column:54}},"903":{start:{line:4579,column:12},end:{line:4579,column:24}},"904":{start:{line:4595,column:12},end:{line:4597,column:13}},"905":{start:{line:4596,column:16},end:{line:4596,column:77}},"906":{start:{line:4598,column:12},end:{line:4604,column:13}},"907":{start:{line:4599,column:16},end:{line:4603,column:70}},"908":{start:{line:4605,column:12},end:{line:4610,column:13}},"909":{start:{line:4606,column:16},end:{line:4609,column:59}},"910":{start:{line:4612,column:22},end:{line:4616,column:13}},"911":{start:{line:4618,column:12},end:{line:4623,column:13}},"912":{start:{line:4619,column:16},end:{line:4622,column:18}},"913":{start:{line:4624,column:12},end:{line:4624,column:35}},"914":{start:{line:4626,column:12},end:{line:4626,column:24}},"915":{start:{line:4643,column:12},end:{line:4645,column:13}},"916":{start:{line:4644,column:16},end:{line:4644,column:83}},"917":{start:{line:4647,column:20},end:{line:4647,column:63}},"918":{start:{line:4649,column:12},end:{line:4651,column:13}},"919":{start:{line:4650,column:16},end:{line:4650,column:112}},"920":{start:{line:4653,column:12},end:{line:4656,column:13}},"921":{start:{line:4654,column:16},end:{line:4655,column:35}},"922":{start:{line:4658,column:12},end:{line:4661,column:13}},"923":{start:{line:4659,column:16},end:{line:4660,column:35}},"924":{start:{line:4663,column:12},end:{line:4665,column:13}},"925":{start:{line:4664,column:16},end:{line:4664,column:120}},"926":{start:{line:4667,column:25},end:{line:4676,column:13}},"927":{start:{line:4678,column:12},end:{line:4678,column:84}},"928":{start:{line:4679,column:12},end:{line:4679,column:38}},"929":{start:{line:4681,column:12},end:{line:4681,column:24}},"930":{start:{line:4694,column:12},end:{line:4696,column:13}},"931":{start:{line:4695,column:16},end:{line:4695,column:67}},"932":{start:{line:4697,column:20},end:{line:4697,column:63}},"933":{start:{line:4698,column:12},end:{line:4700,column:13}},"934":{start:{line:4699,column:16},end:{line:4699,column:96}},"935":{start:{line:4702,column:22},end:{line:4707,column:13}},"936":{start:{line:4709,column:12},end:{line:4711,column:13}},"937":{start:{line:4710,column:16},end:{line:4710,column:36}},"938":{start:{line:4713,column:12},end:{line:4713,column:32}},"939":{start:{line:4715,column:12},end:{line:4715,column:24}},"940":{start:{line:4738,column:12},end:{line:4740,column:13}},"941":{start:{line:4739,column:16},end:{line:4739,column:63}},"942":{start:{line:4741,column:20},end:{line:4741,column:59}},"943":{start:{line:4742,column:12},end:{line:4744,column:13}},"944":{start:{line:4743,column:16},end:{line:4743,column:86}},"945":{start:{line:4745,column:31},end:{line:4745,column:33}},"946":{start:{line:4746,column:12},end:{line:4748,column:13}},"947":{start:{line:4747,column:16},end:{line:4747,column:50}},"948":{start:{line:4749,column:12},end:{line:4751,column:13}},"949":{start:{line:4750,column:16},end:{line:4750,column:46}},"950":{start:{line:4752,column:12},end:{line:4754,column:13}},"951":{start:{line:4753,column:16},end:{line:4753,column:48}},"952":{start:{line:4755,column:12},end:{line:4757,column:13}},"953":{start:{line:4756,column:16},end:{line:4756,column:56}},"954":{start:{line:4759,column:12},end:{line:4766,column:15}},"955":{start:{line:4768,column:12},end:{line:4768,column:24}},"956":{start:{line:4783,column:12},end:{line:4785,column:13}},"957":{start:{line:4784,column:16},end:{line:4784,column:63}},"958":{start:{line:4786,column:20},end:{line:4786,column:59}},"959":{start:{line:4787,column:12},end:{line:4789,column:13}},"960":{start:{line:4788,column:16},end:{line:4788,column:87}},"961":{start:{line:4791,column:12},end:{line:4798,column:15}},"962":{start:{line:4800,column:12},end:{line:4800,column:24}},"963":{start:{line:4814,column:12},end:{line:4816,column:13}},"964":{start:{line:4815,column:16},end:{line:4815,column:63}},"965":{start:{line:4817,column:20},end:{line:4817,column:59}},"966":{start:{line:4818,column:12},end:{line:4820,column:13}},"967":{start:{line:4819,column:16},end:{line:4819,column:89}},"968":{start:{line:4821,column:12},end:{line:4823,column:13}},"969":{start:{line:4822,column:16},end:{line:4822,column:120}},"970":{start:{line:4825,column:12},end:{line:4831,column:15}},"971":{start:{line:4833,column:12},end:{line:4833,column:24}},"972":{start:{line:4846,column:12},end:{line:4848,column:13}},"973":{start:{line:4847,column:16},end:{line:4847,column:67}},"974":{start:{line:4849,column:20},end:{line:4849,column:63}},"975":{start:{line:4850,column:12},end:{line:4852,column:13}},"976":{start:{line:4851,column:16},end:{line:4851,column:96}},"977":{start:{line:4854,column:22},end:{line:4858,column:13}},"978":{start:{line:4860,column:12},end:{line:4862,column:13}},"979":{start:{line:4861,column:16},end:{line:4861,column:36}},"980":{start:{line:4864,column:12},end:{line:4864,column:35}},"981":{start:{line:4866,column:12},end:{line:4866,column:24}},"982":{start:{line:4883,column:12},end:{line:4885,column:13}},"983":{start:{line:4884,column:16},end:{line:4884,column:67}},"984":{start:{line:4886,column:20},end:{line:4886,column:63}},"985":{start:{line:4887,column:12},end:{line:4889,column:13}},"986":{start:{line:4888,column:16},end:{line:4888,column:86}},"987":{start:{line:4893,column:32},end:{line:4893,column:34}},"988":{start:{line:4894,column:12},end:{line:4896,column:13}},"989":{start:{line:4895,column:16},end:{line:4895,column:51}},"990":{start:{line:4897,column:12},end:{line:4899,column:13}},"991":{start:{line:4898,column:16},end:{line:4898,column:47}},"992":{start:{line:4900,column:12},end:{line:4902,column:13}},"993":{start:{line:4901,column:16},end:{line:4901,column:49}},"994":{start:{line:4903,column:12},end:{line:4905,column:13}},"995":{start:{line:4904,column:16},end:{line:4904,column:57}},"996":{start:{line:4907,column:12},end:{line:4913,column:15}},"997":{start:{line:4915,column:12},end:{line:4915,column:24}},"998":{start:{line:4929,column:12},end:{line:4931,column:13}},"999":{start:{line:4930,column:16},end:{line:4930,column:67}},"1000":{start:{line:4932,column:20},end:{line:4932,column:63}},"1001":{start:{line:4933,column:12},end:{line:4935,column:13}},"1002":{start:{line:4934,column:16},end:{line:4934,column:87}},"1003":{start:{line:4937,column:12},end:{line:4943,column:15}},"1004":{start:{line:4945,column:12},end:{line:4945,column:24}},"1005":{start:{line:4958,column:12},end:{line:4960,column:13}},"1006":{start:{line:4959,column:16},end:{line:4959,column:63}},"1007":{start:{line:4961,column:20},end:{line:4961,column:59}},"1008":{start:{line:4962,column:12},end:{line:4964,column:13}},"1009":{start:{line:4963,column:16},end:{line:4963,column:89}},"1010":{start:{line:4965,column:12},end:{line:4967,column:13}},"1011":{start:{line:4966,column:16},end:{line:4966,column:120}},"1012":{start:{line:4969,column:12},end:{line:4974,column:15}},"1013":{start:{line:4976,column:12},end:{line:4976,column:24}},"1014":{start:{line:4990,column:12},end:{line:4992,column:13}},"1015":{start:{line:4991,column:16},end:{line:4991,column:67}},"1016":{start:{line:4994,column:20},end:{line:4994,column:63}},"1017":{start:{line:4995,column:12},end:{line:5047,column:13}},"1018":{start:{line:5004,column:16},end:{line:5006,column:35}},"1019":{start:{line:5008,column:17},end:{line:5047,column:13}},"1020":{start:{line:5020,column:16},end:{line:5023,column:22}},"1021":{start:{line:5025,column:17},end:{line:5047,column:13}},"1022":{start:{line:5034,column:16},end:{line:5037,column:22}},"1023":{start:{line:5039,column:17},end:{line:5047,column:13}},"1024":{start:{line:5042,column:16},end:{line:5043,column:46}},"1025":{start:{line:5045,column:17},end:{line:5047,column:13}},"1026":{start:{line:5046,column:16},end:{line:5046,column:84}},"1027":{start:{line:5049,column:12},end:{line:5056,column:15}},"1028":{start:{line:5058,column:12},end:{line:5058,column:24}},"1029":{start:{line:5069,column:12},end:{line:5076,column:14}},"1030":{start:{line:5102,column:22},end:{line:5102,column:60}},"1031":{start:{line:5104,column:23},end:{line:5106,column:13}},"1032":{start:{line:5108,column:12},end:{line:5110,column:13}},"1033":{start:{line:5109,column:16},end:{line:5109,column:60}},"1034":{start:{line:5112,column:12},end:{line:5124,column:15}},"1035":{start:{line:5113,column:16},end:{line:5116,column:17}},"1036":{start:{line:5114,column:20},end:{line:5114,column:77}},"1037":{start:{line:5115,column:20},end:{line:5115,column:27}},"1038":{start:{line:5118,column:16},end:{line:5123,column:17}},"1039":{start:{line:5119,column:20},end:{line:5119,column:88}},"1040":{start:{line:5122,column:20},end:{line:5122,column:96}},"1041":{start:{line:5154,column:12},end:{line:5157,column:13}},"1042":{start:{line:5155,column:16},end:{line:5155,column:32}},"1043":{start:{line:5156,column:16},end:{line:5156,column:26}},"1044":{start:{line:5158,column:12},end:{line:5158,column:30}},"1045":{start:{line:5160,column:12},end:{line:5167,column:15}},"1046":{start:{line:5161,column:16},end:{line:5166,column:17}},"1047":{start:{line:5162,column:20},end:{line:5162,column:46}},"1048":{start:{line:5165,column:20},end:{line:5165,column:68}},"1049":{start:{line:5197,column:4},end:{line:5515,column:7}},"1050":{start:{line:5225,column:12},end:{line:5225,column:32}},"1051":{start:{line:5226,column:12},end:{line:5226,column:44}},"1052":{start:{line:5228,column:12},end:{line:5228,column:58}},"1053":{start:{line:5229,column:12},end:{line:5229,column:59}},"1054":{start:{line:5230,column:12},end:{line:5230,column:60}},"1055":{start:{line:5231,column:12},end:{line:5231,column:59}},"1056":{start:{line:5232,column:12},end:{line:5232,column:67}},"1057":{start:{line:5235,column:12},end:{line:5237,column:13}},"1058":{start:{line:5236,column:16},end:{line:5236,column:57}},"1059":{start:{line:5238,column:12},end:{line:5240,column:13}},"1060":{start:{line:5239,column:16},end:{line:5239,column:59}},"1061":{start:{line:5241,column:12},end:{line:5243,column:13}},"1062":{start:{line:5242,column:16},end:{line:5242,column:60}},"1063":{start:{line:5244,column:12},end:{line:5246,column:13}},"1064":{start:{line:5245,column:16},end:{line:5245,column:58}},"1065":{start:{line:5249,column:12},end:{line:5251,column:13}},"1066":{start:{line:5250,column:16},end:{line:5250,column:51}},"1067":{start:{line:5254,column:12},end:{line:5254,column:29}},"1068":{start:{line:5255,column:12},end:{line:5257,column:13}},"1069":{start:{line:5255,column:25},end:{line:5255,column:26}},"1070":{start:{line:5256,column:16},end:{line:5256,column:98}},"1071":{start:{line:5260,column:12},end:{line:5260,column:34}},"1072":{start:{line:5261,column:12},end:{line:5263,column:13}},"1073":{start:{line:5261,column:25},end:{line:5261,column:26}},"1074":{start:{line:5262,column:16},end:{line:5262,column:90}},"1075":{start:{line:5266,column:12},end:{line:5266,column:35}},"1076":{start:{line:5267,column:12},end:{line:5269,column:13}},"1077":{start:{line:5267,column:25},end:{line:5267,column:26}},"1078":{start:{line:5268,column:16},end:{line:5268,column:126}},"1079":{start:{line:5280,column:12},end:{line:5280,column:55}},"1080":{start:{line:5291,column:12},end:{line:5291,column:52}},"1081":{start:{line:5303,column:12},end:{line:5303,column:44}},"1082":{start:{line:5317,column:12},end:{line:5317,column:78}},"1083":{start:{line:5332,column:33},end:{line:5332,column:35}},"1084":{start:{line:5334,column:12},end:{line:5338,column:13}},"1085":{start:{line:5335,column:16},end:{line:5337,column:17}},"1086":{start:{line:5336,column:20},end:{line:5336,column:55}},"1087":{start:{line:5340,column:35},end:{line:5340,column:58}},"1088":{start:{line:5341,column:12},end:{line:5345,column:13}},"1089":{start:{line:5342,column:16},end:{line:5344,column:17}},"1090":{start:{line:5343,column:20},end:{line:5343,column:62}},"1091":{start:{line:5347,column:12},end:{line:5347,column:34}},"1092":{start:{line:5361,column:12},end:{line:5361,column:49}},"1093":{start:{line:5374,column:25},end:{line:5374,column:27}},"1094":{start:{line:5376,column:23},end:{line:5376,column:44}},"1095":{start:{line:5377,column:31},end:{line:5377,column:48}},"1096":{start:{line:5378,column:12},end:{line:5383,column:13}},"1097":{start:{line:5378,column:25},end:{line:5378,column:26}},"1098":{start:{line:5379,column:34},end:{line:5379,column:55}},"1099":{start:{line:5380,column:16},end:{line:5382,column:17}},"1100":{start:{line:5380,column:29},end:{line:5380,column:30}},"1101":{start:{line:5381,column:20},end:{line:5381,column:124}},"1102":{start:{line:5384,column:12},end:{line:5384,column:26}},"1103":{start:{line:5397,column:12},end:{line:5397,column:56}},"1104":{start:{line:5410,column:12},end:{line:5410,column:67}},"1105":{start:{line:5423,column:12},end:{line:5423,column:50}},"1106":{start:{line:5454,column:12},end:{line:5457,column:13}},"1107":{start:{line:5455,column:16},end:{line:5455,column:40}},"1108":{start:{line:5456,column:16},end:{line:5456,column:41}},"1109":{start:{line:5459,column:24},end:{line:5459,column:106}},"1110":{start:{line:5460,column:23},end:{line:5460,column:72}},"1111":{start:{line:5462,column:12},end:{line:5462,column:65}},"1112":{start:{line:5485,column:24},end:{line:5485,column:90}},"1113":{start:{line:5487,column:12},end:{line:5487,column:69}},"1114":{start:{line:5488,column:12},end:{line:5488,column:81}},"1115":{start:{line:5501,column:12},end:{line:5501,column:64}},"1116":{start:{line:5513,column:12},end:{line:5513,column:53}},"1117":{start:{line:5526,column:4},end:{line:5679,column:7}},"1118":{start:{line:5533,column:12},end:{line:5533,column:74}},"1119":{start:{line:5556,column:12},end:{line:5559,column:13}},"1120":{start:{line:5557,column:16},end:{line:5557,column:34}},"1121":{start:{line:5558,column:16},end:{line:5558,column:31}},"1122":{start:{line:5561,column:12},end:{line:5561,column:29}},"1123":{start:{line:5562,column:12},end:{line:5562,column:57}},"1124":{start:{line:5564,column:12},end:{line:5564,column:77}},"1125":{start:{line:5565,column:12},end:{line:5568,column:13}},"1126":{start:{line:5567,column:16},end:{line:5567,column:72}},"1127":{start:{line:5572,column:12},end:{line:5574,column:13}},"1128":{start:{line:5573,column:16},end:{line:5573,column:35}},"1129":{start:{line:5576,column:38},end:{line:5576,column:75}},"1130":{start:{line:5578,column:12},end:{line:5578,column:66}},"1131":{start:{line:5579,column:12},end:{line:5579,column:63}},"1132":{start:{line:5580,column:12},end:{line:5580,column:63}},"1133":{start:{line:5583,column:23},end:{line:5583,column:50}},"1134":{start:{line:5584,column:12},end:{line:5584,column:30}},"1135":{start:{line:5585,column:12},end:{line:5587,column:13}},"1136":{start:{line:5585,column:25},end:{line:5585,column:26}},"1137":{start:{line:5586,column:16},end:{line:5586,column:75}},"1138":{start:{line:5589,column:12},end:{line:5589,column:56}},"1139":{start:{line:5590,column:12},end:{line:5590,column:56}},"1140":{start:{line:5601,column:12},end:{line:5601,column:47}},"1141":{start:{line:5613,column:12},end:{line:5617,column:13}},"1142":{start:{line:5613,column:25},end:{line:5613,column:26}},"1143":{start:{line:5614,column:16},end:{line:5616,column:17}},"1144":{start:{line:5615,column:20},end:{line:5615,column:43}},"1145":{start:{line:5618,column:12},end:{line:5618,column:24}},"1146":{start:{line:5629,column:12},end:{line:5629,column:58}},"1147":{start:{line:5645,column:12},end:{line:5648,column:13}},"1148":{start:{line:5646,column:16},end:{line:5646,column:33}},"1149":{start:{line:5647,column:16},end:{line:5647,column:27}},"1150":{start:{line:5649,column:12},end:{line:5649,column:49}},"1151":{start:{line:5651,column:12},end:{line:5654,column:13}},"1152":{start:{line:5652,column:16},end:{line:5652,column:93}},"1153":{start:{line:5653,column:16},end:{line:5653,column:23}},"1154":{start:{line:5655,column:12},end:{line:5658,column:13}},"1155":{start:{line:5656,column:16},end:{line:5656,column:81}},"1156":{start:{line:5657,column:16},end:{line:5657,column:23}},"1157":{start:{line:5660,column:31},end:{line:5666,column:13}},"1158":{start:{line:5668,column:23},end:{line:5668,column:27}},"1159":{start:{line:5669,column:12},end:{line:5677,column:15}},"1160":{start:{line:5670,column:16},end:{line:5676,column:17}},"1161":{start:{line:5671,column:20},end:{line:5671,column:40}},"1162":{start:{line:5674,column:45},end:{line:5674,column:98}},"1163":{start:{line:5675,column:20},end:{line:5675,column:142}},"1164":{start:{line:5690,column:4},end:{line:5768,column:7}},"1165":{start:{line:5697,column:12},end:{line:5697,column:36}},"1166":{start:{line:5713,column:12},end:{line:5713,column:40}},"1167":{start:{line:5714,column:12},end:{line:5714,column:57}},"1168":{start:{line:5715,column:12},end:{line:5715,column:56}},"1169":{start:{line:5733,column:12},end:{line:5736,column:13}},"1170":{start:{line:5734,column:16},end:{line:5734,column:34}},"1171":{start:{line:5735,column:16},end:{line:5735,column:28}},"1172":{start:{line:5738,column:12},end:{line:5738,column:34}},"1173":{start:{line:5739,column:12},end:{line:5739,column:48}},"1174":{start:{line:5740,column:12},end:{line:5740,column:43}},"1175":{start:{line:5742,column:23},end:{line:5742,column:27}},"1176":{start:{line:5743,column:12},end:{line:5751,column:15}},"1177":{start:{line:5744,column:16},end:{line:5750,column:17}},"1178":{start:{line:5745,column:20},end:{line:5745,column:34}},"1179":{start:{line:5748,column:36},end:{line:5748,column:137}},"1180":{start:{line:5749,column:20},end:{line:5749,column:46}},"1181":{start:{line:5765,column:34},end:{line:5765,column:70}},"1182":{start:{line:5766,column:12},end:{line:5766,column:88}},"1183":{start:{line:5772,column:4},end:{line:5802,column:7}},"1184":{start:{line:5774,column:12},end:{line:5774,column:34}},"1185":{start:{line:5776,column:12},end:{line:5776,column:38}},"1186":{start:{line:5777,column:12},end:{line:5777,column:50}},"1187":{start:{line:5778,column:12},end:{line:5778,column:29}},"1188":{start:{line:5783,column:12},end:{line:5783,column:49}},"1189":{start:{line:5785,column:23},end:{line:5785,column:27}},"1190":{start:{line:5786,column:25},end:{line:5789,column:13}},"1191":{start:{line:5790,column:12},end:{line:5800,column:15}},"1192":{start:{line:5791,column:16},end:{line:5799,column:17}},"1193":{start:{line:5792,column:20},end:{line:5792,column:34}},"1194":{start:{line:5795,column:38},end:{line:5795,column:76}},"1195":{start:{line:5796,column:20},end:{line:5796,column:47}},"1196":{start:{line:5798,column:20},end:{line:5798,column:60}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:16,column:1},end:{line:16,column:2}},loc:{start:{line:16,column:12},end:{line:5803,column:1}},line:16},"1":{name:"(anonymous_1)",decl:{start:{line:38,column:14},end:{line:38,column:15}},loc:{start:{line:38,column:25},end:{line:40,column:9}},line:38},"2":{name:"(anonymous_2)",decl:{start:{line:72,column:14},end:{line:72,column:15}},loc:{start:{line:72,column:25},end:{line:88,column:9}},line:72},"3":{name:"(anonymous_3)",decl:{start:{line:105,column:20},end:{line:105,column:21}},loc:{start:{line:105,column:41},end:{line:117,column:9}},line:105},"4":{name:"(anonymous_4)",decl:{start:{line:135,column:14},end:{line:135,column:15}},loc:{start:{line:135,column:25},end:{line:137,column:9}},line:135},"5":{name:"(anonymous_5)",decl:{start:{line:163,column:24},end:{line:163,column:25}},loc:{start:{line:163,column:44},end:{line:165,column:9}},line:163},"6":{name:"(anonymous_6)",decl:{start:{line:191,column:17},end:{line:191,column:18}},loc:{start:{line:191,column:37},end:{line:193,column:9}},line:191},"7":{name:"(anonymous_7)",decl:{start:{line:217,column:23},end:{line:217,column:24}},loc:{start:{line:217,column:43},end:{line:219,column:9}},line:217},"8":{name:"(anonymous_8)",decl:{start:{line:243,column:26},end:{line:243,column:27}},loc:{start:{line:243,column:46},end:{line:245,column:9}},line:243},"9":{name:"(anonymous_9)",decl:{start:{line:270,column:26},end:{line:270,column:27}},loc:{start:{line:270,column:46},end:{line:272,column:9}},line:270},"10":{name:"(anonymous_10)",decl:{start:{line:299,column:14},end:{line:299,column:15}},loc:{start:{line:299,column:34},end:{line:301,column:9}},line:299},"11":{name:"(anonymous_11)",decl:{start:{line:311,column:20},end:{line:311,column:21}},loc:{start:{line:311,column:40},end:{line:313,column:9}},line:311},"12":{name:"(anonymous_12)",decl:{start:{line:336,column:15},end:{line:336,column:16}},loc:{start:{line:336,column:26},end:{line:338,column:9}},line:336},"13":{name:"(anonymous_13)",decl:{start:{line:365,column:15},end:{line:365,column:16}},loc:{start:{line:365,column:35},end:{line:367,column:9}},line:365},"14":{name:"(anonymous_14)",decl:{start:{line:396,column:16},end:{line:396,column:17}},loc:{start:{line:396,column:61},end:{line:404,column:9}},line:396},"15":{name:"(anonymous_15)",decl:{start:{line:419,column:16},end:{line:419,column:17}},loc:{start:{line:419,column:51},end:{line:426,column:9}},line:419},"16":{name:"(anonymous_16)",decl:{start:{line:452,column:23},end:{line:452,column:24}},loc:{start:{line:452,column:68},end:{line:460,column:9}},line:452},"17":{name:"(anonymous_17)",decl:{start:{line:477,column:21},end:{line:477,column:22}},loc:{start:{line:477,column:40},end:{line:500,column:9}},line:477},"18":{name:"(anonymous_18)",decl:{start:{line:478,column:35},end:{line:478,column:36}},loc:{start:{line:478,column:46},end:{line:478,column:48}},line:478},"19":{name:"(anonymous_19)",decl:{start:{line:481,column:54},end:{line:481,column:55}},loc:{start:{line:481,column:78},end:{line:497,column:13}},line:481},"20":{name:"(anonymous_20)",decl:{start:{line:488,column:31},end:{line:488,column:32}},loc:{start:{line:488,column:42},end:{line:495,column:21}},line:488},"21":{name:"(anonymous_21)",decl:{start:{line:516,column:20},end:{line:516,column:21}},loc:{start:{line:516,column:39},end:{line:521,column:9}},line:516},"22":{name:"(anonymous_22)",decl:{start:{line:517,column:35},end:{line:517,column:36}},loc:{start:{line:517,column:46},end:{line:517,column:48}},line:517},"23":{name:"(anonymous_23)",decl:{start:{line:543,column:15},end:{line:543,column:16}},loc:{start:{line:543,column:49},end:{line:562,column:9}},line:543},"24":{name:"(anonymous_24)",decl:{start:{line:549,column:35},end:{line:549,column:36}},loc:{start:{line:549,column:46},end:{line:549,column:48}},line:549},"25":{name:"(anonymous_25)",decl:{start:{line:554,column:50},end:{line:554,column:51}},loc:{start:{line:554,column:74},end:{line:561,column:13}},line:554},"26":{name:"(anonymous_26)",decl:{start:{line:580,column:19},end:{line:580,column:20}},loc:{start:{line:580,column:53},end:{line:601,column:9}},line:580},"27":{name:"(anonymous_27)",decl:{start:{line:586,column:35},end:{line:586,column:36}},loc:{start:{line:586,column:46},end:{line:586,column:48}},line:586},"28":{name:"(anonymous_28)",decl:{start:{line:592,column:53},end:{line:592,column:54}},loc:{start:{line:592,column:77},end:{line:600,column:13}},line:592},"29":{name:"(anonymous_29)",decl:{start:{line:624,column:13},end:{line:624,column:14}},loc:{start:{line:624,column:47},end:{line:663,column:9}},line:624},"30":{name:"(anonymous_30)",decl:{start:{line:630,column:35},end:{line:630,column:36}},loc:{start:{line:630,column:46},end:{line:630,column:48}},line:630},"31":{name:"(anonymous_31)",decl:{start:{line:652,column:16},end:{line:652,column:17}},loc:{start:{line:652,column:40},end:{line:659,column:17}},line:652},"32":{name:"(anonymous_32)",decl:{start:{line:685,column:14},end:{line:685,column:15}},loc:{start:{line:685,column:47},end:{line:703,column:9}},line:685},"33":{name:"(anonymous_33)",decl:{start:{line:721,column:13},end:{line:721,column:14}},loc:{start:{line:721,column:49},end:{line:735,column:9}},line:721},"34":{name:"(anonymous_34)",decl:{start:{line:737,column:16},end:{line:737,column:17}},loc:{start:{line:737,column:42},end:{line:750,column:9}},line:737},"35":{name:"(anonymous_35)",decl:{start:{line:768,column:14},end:{line:768,column:15}},loc:{start:{line:768,column:50},end:{line:782,column:9}},line:768},"36":{name:"(anonymous_36)",decl:{start:{line:800,column:13},end:{line:800,column:14}},loc:{start:{line:800,column:49},end:{line:814,column:9}},line:800},"37":{name:"(anonymous_37)",decl:{start:{line:843,column:14},end:{line:843,column:15}},loc:{start:{line:843,column:49},end:{line:858,column:9}},line:843},"38":{name:"(anonymous_38)",decl:{start:{line:865,column:14},end:{line:865,column:15}},loc:{start:{line:865,column:25},end:{line:867,column:9}},line:865},"39":{name:"(anonymous_39)",decl:{start:{line:877,column:15},end:{line:877,column:16}},loc:{start:{line:877,column:36},end:{line:880,column:9}},line:877},"40":{name:"(anonymous_40)",decl:{start:{line:891,column:15},end:{line:891,column:16}},loc:{start:{line:891,column:34},end:{line:893,column:9}},line:891},"41":{name:"(anonymous_41)",decl:{start:{line:902,column:20},end:{line:902,column:21}},loc:{start:{line:902,column:31},end:{line:904,column:9}},line:902},"42":{name:"(anonymous_42)",decl:{start:{line:913,column:15},end:{line:913,column:16}},loc:{start:{line:913,column:26},end:{line:915,column:9}},line:913},"43":{name:"(anonymous_43)",decl:{start:{line:953,column:14},end:{line:953,column:15}},loc:{start:{line:953,column:49},end:{line:977,column:9}},line:953},"44":{name:"(anonymous_44)",decl:{start:{line:987,column:15},end:{line:987,column:16}},loc:{start:{line:987,column:36},end:{line:1009,column:9}},line:987},"45":{name:"(anonymous_45)",decl:{start:{line:1019,column:16},end:{line:1019,column:17}},loc:{start:{line:1019,column:27},end:{line:1021,column:9}},line:1019},"46":{name:"(anonymous_46)",decl:{start:{line:1031,column:13},end:{line:1031,column:14}},loc:{start:{line:1031,column:24},end:{line:1033,column:9}},line:1031},"47":{name:"(anonymous_47)",decl:{start:{line:1043,column:15},end:{line:1043,column:16}},loc:{start:{line:1043,column:26},end:{line:1045,column:9}},line:1043},"48":{name:"(anonymous_48)",decl:{start:{line:1054,column:16},end:{line:1054,column:17}},loc:{start:{line:1054,column:27},end:{line:1056,column:9}},line:1054},"49":{name:"(anonymous_49)",decl:{start:{line:1065,column:17},end:{line:1065,column:18}},loc:{start:{line:1065,column:28},end:{line:1067,column:9}},line:1065},"50":{name:"(anonymous_50)",decl:{start:{line:1076,column:19},end:{line:1076,column:20}},loc:{start:{line:1076,column:30},end:{line:1078,column:9}},line:1076},"51":{name:"(anonymous_51)",decl:{start:{line:1095,column:15},end:{line:1095,column:16}},loc:{start:{line:1095,column:43},end:{line:1114,column:9}},line:1095},"52":{name:"(anonymous_52)",decl:{start:{line:1100,column:35},end:{line:1100,column:36}},loc:{start:{line:1100,column:46},end:{line:1100,column:48}},line:1100},"53":{name:"(anonymous_53)",decl:{start:{line:1105,column:41},end:{line:1105,column:42}},loc:{start:{line:1105,column:65},end:{line:1113,column:13}},line:1105},"54":{name:"(anonymous_54)",decl:{start:{line:1124,column:16},end:{line:1124,column:17}},loc:{start:{line:1124,column:35},end:{line:1131,column:9}},line:1124},"55":{name:"(anonymous_55)",decl:{start:{line:1125,column:35},end:{line:1125,column:36}},loc:{start:{line:1125,column:46},end:{line:1125,column:48}},line:1125},"56":{name:"(anonymous_56)",decl:{start:{line:1128,column:36},end:{line:1128,column:37}},loc:{start:{line:1128,column:50},end:{line:1130,column:13}},line:1128},"57":{name:"(anonymous_57)",decl:{start:{line:1142,column:16},end:{line:1142,column:17}},loc:{start:{line:1142,column:42},end:{line:1171,column:9}},line:1142},"58":{name:"(anonymous_58)",decl:{start:{line:1143,column:35},end:{line:1143,column:36}},loc:{start:{line:1143,column:46},end:{line:1143,column:48}},line:1143},"59":{name:"(anonymous_59)",decl:{start:{line:1150,column:43},end:{line:1150,column:44}},loc:{start:{line:1150,column:67},end:{line:1168,column:13}},line:1150},"60":{name:"(anonymous_60)",decl:{start:{line:1156,column:31},end:{line:1156,column:32}},loc:{start:{line:1156,column:42},end:{line:1163,column:21}},line:1156},"61":{name:"(anonymous_61)",decl:{start:{line:1181,column:17},end:{line:1181,column:18}},loc:{start:{line:1181,column:36},end:{line:1193,column:9}},line:1181},"62":{name:"(anonymous_62)",decl:{start:{line:1182,column:35},end:{line:1182,column:36}},loc:{start:{line:1182,column:46},end:{line:1182,column:48}},line:1182},"63":{name:"(anonymous_63)",decl:{start:{line:1185,column:37},end:{line:1185,column:38}},loc:{start:{line:1185,column:61},end:{line:1192,column:13}},line:1185},"64":{name:"(anonymous_64)",decl:{start:{line:1203,column:16},end:{line:1203,column:17}},loc:{start:{line:1203,column:35},end:{line:1215,column:9}},line:1203},"65":{name:"(anonymous_65)",decl:{start:{line:1204,column:35},end:{line:1204,column:36}},loc:{start:{line:1204,column:46},end:{line:1204,column:48}},line:1204},"66":{name:"(anonymous_66)",decl:{start:{line:1207,column:36},end:{line:1207,column:37}},loc:{start:{line:1207,column:60},end:{line:1214,column:13}},line:1207},"67":{name:"(anonymous_67)",decl:{start:{line:1225,column:16},end:{line:1225,column:17}},loc:{start:{line:1225,column:35},end:{line:1237,column:9}},line:1225},"68":{name:"(anonymous_68)",decl:{start:{line:1226,column:35},end:{line:1226,column:36}},loc:{start:{line:1226,column:46},end:{line:1226,column:48}},line:1226},"69":{name:"(anonymous_69)",decl:{start:{line:1229,column:37},end:{line:1229,column:38}},loc:{start:{line:1229,column:61},end:{line:1236,column:13}},line:1229},"70":{name:"(anonymous_70)",decl:{start:{line:1272,column:14},end:{line:1272,column:15}},loc:{start:{line:1272,column:49},end:{line:1290,column:9}},line:1272},"71":{name:"(anonymous_71)",decl:{start:{line:1300,column:27},end:{line:1300,column:28}},loc:{start:{line:1300,column:43},end:{line:1302,column:9}},line:1300},"72":{name:"(anonymous_72)",decl:{start:{line:1313,column:15},end:{line:1313,column:16}},loc:{start:{line:1313,column:36},end:{line:1337,column:9}},line:1313},"73":{name:"(anonymous_73)",decl:{start:{line:1347,column:15},end:{line:1347,column:16}},loc:{start:{line:1347,column:26},end:{line:1349,column:9}},line:1347},"74":{name:"(anonymous_74)",decl:{start:{line:1358,column:16},end:{line:1358,column:17}},loc:{start:{line:1358,column:27},end:{line:1360,column:9}},line:1358},"75":{name:"(anonymous_75)",decl:{start:{line:1369,column:17},end:{line:1369,column:18}},loc:{start:{line:1369,column:28},end:{line:1371,column:9}},line:1369},"76":{name:"(anonymous_76)",decl:{start:{line:1388,column:15},end:{line:1388,column:16}},loc:{start:{line:1388,column:43},end:{line:1412,column:9}},line:1388},"77":{name:"(anonymous_77)",decl:{start:{line:1393,column:35},end:{line:1393,column:36}},loc:{start:{line:1393,column:46},end:{line:1393,column:48}},line:1393},"78":{name:"(anonymous_78)",decl:{start:{line:1401,column:44},end:{line:1401,column:45}},loc:{start:{line:1401,column:68},end:{line:1409,column:13}},line:1401},"79":{name:"(anonymous_79)",decl:{start:{line:1414,column:18},end:{line:1414,column:19}},loc:{start:{line:1414,column:42},end:{line:1425,column:9}},line:1414},"80":{name:"(anonymous_80)",decl:{start:{line:1448,column:14},end:{line:1448,column:15}},loc:{start:{line:1448,column:38},end:{line:1505,column:9}},line:1448},"81":{name:"(anonymous_81)",decl:{start:{line:1524,column:16},end:{line:1524,column:17}},loc:{start:{line:1524,column:43},end:{line:1557,column:9}},line:1524},"82":{name:"(anonymous_82)",decl:{start:{line:1525,column:35},end:{line:1525,column:36}},loc:{start:{line:1525,column:46},end:{line:1525,column:48}},line:1525},"83":{name:"(anonymous_83)",decl:{start:{line:1527,column:44},end:{line:1527,column:45}},loc:{start:{line:1527,column:68},end:{line:1554,column:13}},line:1527},"84":{name:"(anonymous_84)",decl:{start:{line:1541,column:37},end:{line:1541,column:38}},loc:{start:{line:1541,column:48},end:{line:1548,column:25}},line:1541},"85":{name:"(anonymous_85)",decl:{start:{line:1574,column:14},end:{line:1574,column:15}},loc:{start:{line:1574,column:33},end:{line:1578,column:9}},line:1574},"86":{name:"(anonymous_86)",decl:{start:{line:1575,column:35},end:{line:1575,column:36}},loc:{start:{line:1575,column:46},end:{line:1575,column:48}},line:1575},"87":{name:"(anonymous_87)",decl:{start:{line:1595,column:14},end:{line:1595,column:15}},loc:{start:{line:1595,column:25},end:{line:1597,column:9}},line:1595},"88":{name:"(anonymous_88)",decl:{start:{line:1613,column:14},end:{line:1613,column:15}},loc:{start:{line:1613,column:49},end:{line:1621,column:9}},line:1613},"89":{name:"(anonymous_89)",decl:{start:{line:1636,column:20},end:{line:1636,column:21}},loc:{start:{line:1636,column:31},end:{line:1638,column:9}},line:1636},"90":{name:"(anonymous_90)",decl:{start:{line:1656,column:21},end:{line:1656,column:22}},loc:{start:{line:1656,column:40},end:{line:1665,column:9}},line:1656},"91":{name:"(anonymous_91)",decl:{start:{line:1657,column:35},end:{line:1657,column:36}},loc:{start:{line:1657,column:46},end:{line:1657,column:48}},line:1657},"92":{name:"(anonymous_92)",decl:{start:{line:1660,column:51},end:{line:1660,column:52}},loc:{start:{line:1660,column:65},end:{line:1662,column:13}},line:1660},"93":{name:"(anonymous_93)",decl:{start:{line:1688,column:18},end:{line:1688,column:19}},loc:{start:{line:1688,column:46},end:{line:1711,column:9}},line:1688},"94":{name:"(anonymous_94)",decl:{start:{line:1694,column:35},end:{line:1694,column:36}},loc:{start:{line:1694,column:46},end:{line:1694,column:48}},line:1694},"95":{name:"(anonymous_95)",decl:{start:{line:1698,column:53},end:{line:1698,column:54}},loc:{start:{line:1698,column:77},end:{line:1708,column:13}},line:1698},"96":{name:"(anonymous_96)",decl:{start:{line:1725,column:25},end:{line:1725,column:26}},loc:{start:{line:1725,column:36},end:{line:1727,column:9}},line:1725},"97":{name:"(anonymous_97)",decl:{start:{line:1748,column:17},end:{line:1748,column:18}},loc:{start:{line:1748,column:45},end:{line:1777,column:9}},line:1748},"98":{name:"(anonymous_98)",decl:{start:{line:1754,column:35},end:{line:1754,column:36}},loc:{start:{line:1754,column:46},end:{line:1754,column:48}},line:1754},"99":{name:"(anonymous_99)",decl:{start:{line:1758,column:48},end:{line:1758,column:49}},loc:{start:{line:1758,column:72},end:{line:1776,column:13}},line:1758},"100":{name:"(anonymous_100)",decl:{start:{line:1794,column:22},end:{line:1794,column:23}},loc:{start:{line:1794,column:41},end:{line:1801,column:9}},line:1794},"101":{name:"(anonymous_101)",decl:{start:{line:1795,column:35},end:{line:1795,column:36}},loc:{start:{line:1795,column:46},end:{line:1795,column:48}},line:1795},"102":{name:"(anonymous_102)",decl:{start:{line:1798,column:44},end:{line:1798,column:45}},loc:{start:{line:1798,column:68},end:{line:1800,column:13}},line:1798},"103":{name:"(anonymous_103)",decl:{start:{line:1815,column:16},end:{line:1815,column:17}},loc:{start:{line:1815,column:43},end:{line:1842,column:9}},line:1815},"104":{name:"(anonymous_104)",decl:{start:{line:1820,column:37},end:{line:1820,column:38}},loc:{start:{line:1820,column:59},end:{line:1835,column:17}},line:1820},"105":{name:"(anonymous_105)",decl:{start:{line:1826,column:52},end:{line:1826,column:53}},loc:{start:{line:1826,column:63},end:{line:1833,column:25}},line:1826},"106":{name:"(anonymous_106)",decl:{start:{line:1860,column:14},end:{line:1860,column:15}},loc:{start:{line:1860,column:25},end:{line:1862,column:9}},line:1860},"107":{name:"(anonymous_107)",decl:{start:{line:1872,column:27},end:{line:1872,column:28}},loc:{start:{line:1872,column:43},end:{line:1875,column:9}},line:1872},"108":{name:"(anonymous_108)",decl:{start:{line:1890,column:14},end:{line:1890,column:15}},loc:{start:{line:1890,column:43},end:{line:1892,column:9}},line:1890},"109":{name:"(anonymous_109)",decl:{start:{line:1909,column:14},end:{line:1909,column:15}},loc:{start:{line:1909,column:26},end:{line:1911,column:9}},line:1909},"110":{name:"(anonymous_110)",decl:{start:{line:1927,column:14},end:{line:1927,column:15}},loc:{start:{line:1927,column:50},end:{line:1930,column:9}},line:1927},"111":{name:"(anonymous_111)",decl:{start:{line:1956,column:14},end:{line:1956,column:15}},loc:{start:{line:1956,column:25},end:{line:1958,column:9}},line:1956},"112":{name:"(anonymous_112)",decl:{start:{line:1970,column:27},end:{line:1970,column:28}},loc:{start:{line:1970,column:43},end:{line:1973,column:9}},line:1970},"113":{name:"(anonymous_113)",decl:{start:{line:1988,column:14},end:{line:1988,column:15}},loc:{start:{line:1988,column:43},end:{line:1990,column:9}},line:1988},"114":{name:"(anonymous_114)",decl:{start:{line:2008,column:14},end:{line:2008,column:15}},loc:{start:{line:2008,column:25},end:{line:2010,column:9}},line:2008},"115":{name:"(anonymous_115)",decl:{start:{line:2020,column:17},end:{line:2020,column:18}},loc:{start:{line:2020,column:28},end:{line:2022,column:9}},line:2020},"116":{name:"(anonymous_116)",decl:{start:{line:2030,column:19},end:{line:2030,column:20}},loc:{start:{line:2030,column:30},end:{line:2032,column:9}},line:2030},"117":{name:"(anonymous_117)",decl:{start:{line:2043,column:22},end:{line:2043,column:23}},loc:{start:{line:2043,column:33},end:{line:2046,column:9}},line:2043},"118":{name:"(anonymous_118)",decl:{start:{line:2056,column:24},end:{line:2056,column:25}},loc:{start:{line:2056,column:35},end:{line:2058,column:9}},line:2056},"119":{name:"(anonymous_119)",decl:{start:{line:2066,column:25},end:{line:2066,column:26}},loc:{start:{line:2066,column:36},end:{line:2068,column:9}},line:2066},"120":{name:"(anonymous_120)",decl:{start:{line:2077,column:18},end:{line:2077,column:19}},loc:{start:{line:2077,column:29},end:{line:2079,column:9}},line:2077},"121":{name:"(anonymous_121)",decl:{start:{line:2087,column:13},end:{line:2087,column:14}},loc:{start:{line:2087,column:24},end:{line:2089,column:9}},line:2087},"122":{name:"(anonymous_122)",decl:{start:{line:2097,column:21},end:{line:2097,column:22}},loc:{start:{line:2097,column:32},end:{line:2099,column:9}},line:2097},"123":{name:"(anonymous_123)",decl:{start:{line:2109,column:29},end:{line:2109,column:30}},loc:{start:{line:2109,column:40},end:{line:2111,column:9}},line:2109},"124":{name:"(anonymous_124)",decl:{start:{line:2121,column:29},end:{line:2121,column:30}},loc:{start:{line:2121,column:40},end:{line:2123,column:9}},line:2121},"125":{name:"(anonymous_125)",decl:{start:{line:2139,column:14},end:{line:2139,column:15}},loc:{start:{line:2139,column:49},end:{line:2142,column:9}},line:2139},"126":{name:"(anonymous_126)",decl:{start:{line:2160,column:14},end:{line:2160,column:15}},loc:{start:{line:2160,column:25},end:{line:2162,column:9}},line:2160},"127":{name:"(anonymous_127)",decl:{start:{line:2172,column:15},end:{line:2172,column:16}},loc:{start:{line:2172,column:26},end:{line:2174,column:9}},line:2172},"128":{name:"(anonymous_128)",decl:{start:{line:2193,column:14},end:{line:2193,column:15}},loc:{start:{line:2193,column:42},end:{line:2221,column:9}},line:2193},"129":{name:"(anonymous_129)",decl:{start:{line:2199,column:35},end:{line:2199,column:36}},loc:{start:{line:2199,column:46},end:{line:2199,column:48}},line:2199},"130":{name:"(anonymous_130)",decl:{start:{line:2203,column:41},end:{line:2203,column:42}},loc:{start:{line:2203,column:65},end:{line:2220,column:13}},line:2203},"131":{name:"(anonymous_131)",decl:{start:{line:2237,column:14},end:{line:2237,column:15}},loc:{start:{line:2237,column:49},end:{line:2242,column:9}},line:2237},"132":{name:"(anonymous_132)",decl:{start:{line:2261,column:14},end:{line:2261,column:15}},loc:{start:{line:2261,column:25},end:{line:2263,column:9}},line:2261},"133":{name:"(anonymous_133)",decl:{start:{line:2273,column:27},end:{line:2273,column:28}},loc:{start:{line:2273,column:43},end:{line:2276,column:9}},line:2273},"134":{name:"(anonymous_134)",decl:{start:{line:2283,column:16},end:{line:2283,column:17}},loc:{start:{line:2283,column:27},end:{line:2285,column:9}},line:2283},"135":{name:"(anonymous_135)",decl:{start:{line:2300,column:14},end:{line:2300,column:15}},loc:{start:{line:2300,column:43},end:{line:2305,column:9}},line:2300},"136":{name:"(anonymous_136)",decl:{start:{line:2330,column:14},end:{line:2330,column:15}},loc:{start:{line:2330,column:25},end:{line:2332,column:9}},line:2330},"137":{name:"(anonymous_137)",decl:{start:{line:2344,column:14},end:{line:2344,column:15}},loc:{start:{line:2344,column:38},end:{line:2350,column:9}},line:2344},"138":{name:"(anonymous_138)",decl:{start:{line:2367,column:19},end:{line:2367,column:20}},loc:{start:{line:2367,column:38},end:{line:2379,column:9}},line:2367},"139":{name:"(anonymous_139)",decl:{start:{line:2368,column:35},end:{line:2368,column:36}},loc:{start:{line:2368,column:46},end:{line:2368,column:48}},line:2368},"140":{name:"(anonymous_140)",decl:{start:{line:2371,column:41},end:{line:2371,column:42}},loc:{start:{line:2371,column:65},end:{line:2378,column:13}},line:2371},"141":{name:"(anonymous_141)",decl:{start:{line:2396,column:20},end:{line:2396,column:21}},loc:{start:{line:2396,column:39},end:{line:2408,column:9}},line:2396},"142":{name:"(anonymous_142)",decl:{start:{line:2397,column:35},end:{line:2397,column:36}},loc:{start:{line:2397,column:46},end:{line:2397,column:48}},line:2397},"143":{name:"(anonymous_143)",decl:{start:{line:2400,column:42},end:{line:2400,column:43}},loc:{start:{line:2400,column:66},end:{line:2407,column:13}},line:2400},"144":{name:"(anonymous_144)",decl:{start:{line:2434,column:14},end:{line:2434,column:15}},loc:{start:{line:2434,column:25},end:{line:2436,column:9}},line:2434},"145":{name:"(anonymous_145)",decl:{start:{line:2446,column:27},end:{line:2446,column:28}},loc:{start:{line:2446,column:43},end:{line:2448,column:9}},line:2446},"146":{name:"(anonymous_146)",decl:{start:{line:2459,column:14},end:{line:2459,column:15}},loc:{start:{line:2459,column:32},end:{line:2461,column:9}},line:2459},"147":{name:"(anonymous_147)",decl:{start:{line:2477,column:14},end:{line:2477,column:15}},loc:{start:{line:2477,column:25},end:{line:2479,column:9}},line:2477},"148":{name:"(anonymous_148)",decl:{start:{line:2490,column:14},end:{line:2490,column:15}},loc:{start:{line:2490,column:32},end:{line:2493,column:9}},line:2490},"149":{name:"(anonymous_149)",decl:{start:{line:2510,column:14},end:{line:2510,column:15}},loc:{start:{line:2510,column:25},end:{line:2512,column:9}},line:2510},"150":{name:"(anonymous_150)",decl:{start:{line:2524,column:14},end:{line:2524,column:15}},loc:{start:{line:2524,column:38},end:{line:2527,column:9}},line:2524},"151":{name:"(anonymous_151)",decl:{start:{line:2553,column:14},end:{line:2553,column:15}},loc:{start:{line:2553,column:25},end:{line:2555,column:9}},line:2553},"152":{name:"(anonymous_152)",decl:{start:{line:2565,column:27},end:{line:2565,column:28}},loc:{start:{line:2565,column:43},end:{line:2567,column:9}},line:2565},"153":{name:"(anonymous_153)",decl:{start:{line:2578,column:14},end:{line:2578,column:15}},loc:{start:{line:2578,column:32},end:{line:2580,column:9}},line:2578},"154":{name:"(anonymous_154)",decl:{start:{line:2592,column:16},end:{line:2592,column:17}},loc:{start:{line:2592,column:43},end:{line:2617,column:9}},line:2592},"155":{name:"(anonymous_155)",decl:{start:{line:2593,column:35},end:{line:2593,column:36}},loc:{start:{line:2593,column:46},end:{line:2593,column:48}},line:2593},"156":{name:"(anonymous_156)",decl:{start:{line:2596,column:44},end:{line:2596,column:45}},loc:{start:{line:2596,column:68},end:{line:2614,column:13}},line:2596},"157":{name:"(anonymous_157)",decl:{start:{line:2605,column:33},end:{line:2605,column:34}},loc:{start:{line:2605,column:44},end:{line:2612,column:21}},line:2605},"158":{name:"(anonymous_158)",decl:{start:{line:2634,column:14},end:{line:2634,column:15}},loc:{start:{line:2634,column:25},end:{line:2636,column:9}},line:2634},"159":{name:"(anonymous_159)",decl:{start:{line:2652,column:14},end:{line:2652,column:15}},loc:{start:{line:2652,column:49},end:{line:2655,column:9}},line:2652},"160":{name:"(anonymous_160)",decl:{start:{line:2672,column:14},end:{line:2672,column:15}},loc:{start:{line:2672,column:25},end:{line:2674,column:9}},line:2672},"161":{name:"(anonymous_161)",decl:{start:{line:2684,column:27},end:{line:2684,column:28}},loc:{start:{line:2684,column:43},end:{line:2687,column:9}},line:2684},"162":{name:"(anonymous_162)",decl:{start:{line:2702,column:14},end:{line:2702,column:15}},loc:{start:{line:2702,column:43},end:{line:2704,column:9}},line:2702},"163":{name:"(anonymous_163)",decl:{start:{line:2720,column:14},end:{line:2720,column:15}},loc:{start:{line:2720,column:25},end:{line:2722,column:9}},line:2720},"164":{name:"(anonymous_164)",decl:{start:{line:2738,column:14},end:{line:2738,column:15}},loc:{start:{line:2738,column:49},end:{line:2743,column:9}},line:2738},"165":{name:"(anonymous_165)",decl:{start:{line:2766,column:21},end:{line:2766,column:22}},loc:{start:{line:2766,column:55},end:{line:2782,column:9}},line:2766},"166":{name:"(anonymous_166)",decl:{start:{line:2772,column:35},end:{line:2772,column:36}},loc:{start:{line:2772,column:46},end:{line:2772,column:48}},line:2772},"167":{name:"(anonymous_167)",decl:{start:{line:2779,column:51},end:{line:2779,column:52}},loc:{start:{line:2779,column:73},end:{line:2781,column:13}},line:2779},"168":{name:"(anonymous_168)",decl:{start:{line:2784,column:16},end:{line:2784,column:17}},loc:{start:{line:2784,column:35},end:{line:2791,column:9}},line:2784},"169":{name:"(anonymous_169)",decl:{start:{line:2808,column:14},end:{line:2808,column:15}},loc:{start:{line:2808,column:25},end:{line:2810,column:9}},line:2808},"170":{name:"(anonymous_170)",decl:{start:{line:2820,column:27},end:{line:2820,column:28}},loc:{start:{line:2820,column:43},end:{line:2823,column:9}},line:2820},"171":{name:"(anonymous_171)",decl:{start:{line:2838,column:14},end:{line:2838,column:15}},loc:{start:{line:2838,column:43},end:{line:2840,column:9}},line:2838},"172":{name:"(anonymous_172)",decl:{start:{line:2859,column:16},end:{line:2859,column:17}},loc:{start:{line:2859,column:49},end:{line:2872,column:9}},line:2859},"173":{name:"(anonymous_173)",decl:{start:{line:2889,column:14},end:{line:2889,column:15}},loc:{start:{line:2889,column:25},end:{line:2892,column:9}},line:2889},"174":{name:"(anonymous_174)",decl:{start:{line:2909,column:14},end:{line:2909,column:15}},loc:{start:{line:2909,column:55},end:{line:2913,column:9}},line:2909},"175":{name:"(anonymous_175)",decl:{start:{line:2931,column:14},end:{line:2931,column:15}},loc:{start:{line:2931,column:25},end:{line:2933,column:9}},line:2931},"176":{name:"(anonymous_176)",decl:{start:{line:2945,column:26},end:{line:2945,column:27}},loc:{start:{line:2945,column:37},end:{line:2947,column:9}},line:2945},"177":{name:"(anonymous_177)",decl:{start:{line:2957,column:27},end:{line:2957,column:28}},loc:{start:{line:2957,column:43},end:{line:2960,column:9}},line:2957},"178":{name:"(anonymous_178)",decl:{start:{line:2976,column:14},end:{line:2976,column:15}},loc:{start:{line:2976,column:49},end:{line:2979,column:9}},line:2976},"179":{name:"(anonymous_179)",decl:{start:{line:2998,column:16},end:{line:2998,column:17}},loc:{start:{line:2998,column:55},end:{line:3016,column:9}},line:2998},"180":{name:"(anonymous_180)",decl:{start:{line:3042,column:14},end:{line:3042,column:15}},loc:{start:{line:3042,column:25},end:{line:3044,column:9}},line:3042},"181":{name:"(anonymous_181)",decl:{start:{line:3054,column:27},end:{line:3054,column:28}},loc:{start:{line:3054,column:43},end:{line:3056,column:9}},line:3054},"182":{name:"(anonymous_182)",decl:{start:{line:3071,column:14},end:{line:3071,column:15}},loc:{start:{line:3071,column:43},end:{line:3077,column:9}},line:3071},"183":{name:"(anonymous_183)",decl:{start:{line:3095,column:16},end:{line:3095,column:17}},loc:{start:{line:3095,column:45},end:{line:3123,column:9}},line:3095},"184":{name:"(anonymous_184)",decl:{start:{line:3102,column:35},end:{line:3102,column:36}},loc:{start:{line:3102,column:46},end:{line:3102,column:48}},line:3102},"185":{name:"(anonymous_185)",decl:{start:{line:3105,column:56},end:{line:3105,column:57}},loc:{start:{line:3105,column:80},end:{line:3120,column:13}},line:3105},"186":{name:"(anonymous_186)",decl:{start:{line:3111,column:33},end:{line:3111,column:34}},loc:{start:{line:3111,column:44},end:{line:3118,column:21}},line:3111},"187":{name:"(anonymous_187)",decl:{start:{line:3125,column:23},end:{line:3125,column:24}},loc:{start:{line:3125,column:48},end:{line:3151,column:9}},line:3125},"188":{name:"(anonymous_188)",decl:{start:{line:3133,column:58},end:{line:3133,column:59}},loc:{start:{line:3133,column:63},end:{line:3133,column:82}},line:3133},"189":{name:"(anonymous_189)",decl:{start:{line:3153,column:25},end:{line:3153,column:26}},loc:{start:{line:3153,column:54},end:{line:3169,column:9}},line:3153},"190":{name:"(anonymous_190)",decl:{start:{line:3171,column:19},end:{line:3171,column:20}},loc:{start:{line:3171,column:90},end:{line:3212,column:9}},line:3171},"191":{name:"(anonymous_191)",decl:{start:{line:3172,column:35},end:{line:3172,column:36}},loc:{start:{line:3172,column:46},end:{line:3172,column:48}},line:3172},"192":{name:"(anonymous_192)",decl:{start:{line:3185,column:20},end:{line:3185,column:21}},loc:{start:{line:3185,column:38},end:{line:3185,column:92}},line:3185},"193":{name:"(anonymous_193)",decl:{start:{line:3200,column:55},end:{line:3200,column:56}},loc:{start:{line:3200,column:81},end:{line:3203,column:17}},line:3200},"194":{name:"(anonymous_194)",decl:{start:{line:3207,column:49},end:{line:3207,column:50}},loc:{start:{line:3207,column:73},end:{line:3210,column:17}},line:3207},"195":{name:"(anonymous_195)",decl:{start:{line:3229,column:14},end:{line:3229,column:15}},loc:{start:{line:3229,column:25},end:{line:3231,column:9}},line:3229},"196":{name:"(anonymous_196)",decl:{start:{line:3247,column:14},end:{line:3247,column:15}},loc:{start:{line:3247,column:48},end:{line:3269,column:9}},line:3247},"197":{name:"(anonymous_197)",decl:{start:{line:3286,column:16},end:{line:3286,column:17}},loc:{start:{line:3286,column:35},end:{line:3290,column:9}},line:3286},"198":{name:"(anonymous_198)",decl:{start:{line:3307,column:24},end:{line:3307,column:25}},loc:{start:{line:3307,column:43},end:{line:3316,column:9}},line:3307},"199":{name:"(anonymous_199)",decl:{start:{line:3308,column:35},end:{line:3308,column:36}},loc:{start:{line:3308,column:46},end:{line:3308,column:48}},line:3308},"200":{name:"(anonymous_200)",decl:{start:{line:3311,column:71},end:{line:3311,column:72}},loc:{start:{line:3311,column:85},end:{line:3313,column:13}},line:3311},"201":{name:"(anonymous_201)",decl:{start:{line:3333,column:23},end:{line:3333,column:24}},loc:{start:{line:3333,column:42},end:{line:3342,column:9}},line:3333},"202":{name:"(anonymous_202)",decl:{start:{line:3334,column:35},end:{line:3334,column:36}},loc:{start:{line:3334,column:46},end:{line:3334,column:48}},line:3334},"203":{name:"(anonymous_203)",decl:{start:{line:3337,column:70},end:{line:3337,column:71}},loc:{start:{line:3337,column:84},end:{line:3339,column:13}},line:3337},"204":{name:"(anonymous_204)",decl:{start:{line:3360,column:16},end:{line:3360,column:17}},loc:{start:{line:3360,column:43},end:{line:3374,column:9}},line:3360},"205":{name:"(anonymous_205)",decl:{start:{line:3361,column:35},end:{line:3361,column:36}},loc:{start:{line:3361,column:46},end:{line:3361,column:48}},line:3361},"206":{name:"(anonymous_206)",decl:{start:{line:3366,column:46},end:{line:3366,column:47}},loc:{start:{line:3366,column:70},end:{line:3373,column:13}},line:3366},"207":{name:"(anonymous_207)",decl:{start:{line:3391,column:18},end:{line:3391,column:19}},loc:{start:{line:3391,column:37},end:{line:3400,column:9}},line:3391},"208":{name:"(anonymous_208)",decl:{start:{line:3392,column:35},end:{line:3392,column:36}},loc:{start:{line:3392,column:46},end:{line:3392,column:48}},line:3392},"209":{name:"(anonymous_209)",decl:{start:{line:3395,column:65},end:{line:3395,column:66}},loc:{start:{line:3395,column:79},end:{line:3397,column:13}},line:3395},"210":{name:"(anonymous_210)",decl:{start:{line:3413,column:18},end:{line:3413,column:19}},loc:{start:{line:3413,column:41},end:{line:3415,column:9}},line:3413},"211":{name:"(anonymous_211)",decl:{start:{line:3432,column:15},end:{line:3432,column:16}},loc:{start:{line:3432,column:34},end:{line:3441,column:9}},line:3432},"212":{name:"(anonymous_212)",decl:{start:{line:3433,column:35},end:{line:3433,column:36}},loc:{start:{line:3433,column:46},end:{line:3433,column:48}},line:3433},"213":{name:"(anonymous_213)",decl:{start:{line:3436,column:62},end:{line:3436,column:63}},loc:{start:{line:3436,column:76},end:{line:3438,column:13}},line:3436},"214":{name:"(anonymous_214)",decl:{start:{line:3459,column:17},end:{line:3459,column:18}},loc:{start:{line:3459,column:44},end:{line:3473,column:9}},line:3459},"215":{name:"(anonymous_215)",decl:{start:{line:3460,column:35},end:{line:3460,column:36}},loc:{start:{line:3460,column:46},end:{line:3460,column:48}},line:3460},"216":{name:"(anonymous_216)",decl:{start:{line:3465,column:55},end:{line:3465,column:56}},loc:{start:{line:3465,column:79},end:{line:3472,column:13}},line:3465},"217":{name:"(anonymous_217)",decl:{start:{line:3496,column:17},end:{line:3496,column:18}},loc:{start:{line:3496,column:44},end:{line:3510,column:9}},line:3496},"218":{name:"(anonymous_218)",decl:{start:{line:3497,column:35},end:{line:3497,column:36}},loc:{start:{line:3497,column:46},end:{line:3497,column:48}},line:3497},"219":{name:"(anonymous_219)",decl:{start:{line:3502,column:47},end:{line:3502,column:48}},loc:{start:{line:3502,column:71},end:{line:3509,column:13}},line:3502},"220":{name:"(anonymous_220)",decl:{start:{line:3527,column:19},end:{line:3527,column:20}},loc:{start:{line:3527,column:38},end:{line:3539,column:9}},line:3527},"221":{name:"(anonymous_221)",decl:{start:{line:3528,column:35},end:{line:3528,column:36}},loc:{start:{line:3528,column:46},end:{line:3528,column:48}},line:3528},"222":{name:"(anonymous_222)",decl:{start:{line:3531,column:46},end:{line:3531,column:47}},loc:{start:{line:3531,column:70},end:{line:3538,column:13}},line:3531},"223":{name:"(anonymous_223)",decl:{start:{line:3557,column:21},end:{line:3557,column:22}},loc:{start:{line:3557,column:47},end:{line:3566,column:9}},line:3557},"224":{name:"(anonymous_224)",decl:{start:{line:3558,column:35},end:{line:3558,column:36}},loc:{start:{line:3558,column:46},end:{line:3558,column:48}},line:3558},"225":{name:"(anonymous_225)",decl:{start:{line:3561,column:85},end:{line:3561,column:86}},loc:{start:{line:3561,column:99},end:{line:3563,column:13}},line:3561},"226":{name:"(anonymous_226)",decl:{start:{line:3585,column:16},end:{line:3585,column:17}},loc:{start:{line:3585,column:42},end:{line:3594,column:9}},line:3585},"227":{name:"(anonymous_227)",decl:{start:{line:3586,column:35},end:{line:3586,column:36}},loc:{start:{line:3586,column:46},end:{line:3586,column:48}},line:3586},"228":{name:"(anonymous_228)",decl:{start:{line:3589,column:75},end:{line:3589,column:76}},loc:{start:{line:3589,column:89},end:{line:3591,column:13}},line:3589},"229":{name:"(anonymous_229)",decl:{start:{line:3612,column:17},end:{line:3612,column:18}},loc:{start:{line:3612,column:44},end:{line:3624,column:9}},line:3612},"230":{name:"(anonymous_230)",decl:{start:{line:3613,column:35},end:{line:3613,column:36}},loc:{start:{line:3613,column:46},end:{line:3613,column:48}},line:3613},"231":{name:"(anonymous_231)",decl:{start:{line:3616,column:47},end:{line:3616,column:48}},loc:{start:{line:3616,column:71},end:{line:3623,column:13}},line:3616},"232":{name:"(anonymous_232)",decl:{start:{line:3642,column:18},end:{line:3642,column:19}},loc:{start:{line:3642,column:45},end:{line:3654,column:9}},line:3642},"233":{name:"(anonymous_233)",decl:{start:{line:3643,column:35},end:{line:3643,column:36}},loc:{start:{line:3643,column:46},end:{line:3643,column:48}},line:3643},"234":{name:"(anonymous_234)",decl:{start:{line:3646,column:48},end:{line:3646,column:49}},loc:{start:{line:3646,column:72},end:{line:3653,column:13}},line:3646},"235":{name:"(anonymous_235)",decl:{start:{line:3672,column:15},end:{line:3672,column:16}},loc:{start:{line:3672,column:34},end:{line:3681,column:9}},line:3672},"236":{name:"(anonymous_236)",decl:{start:{line:3673,column:35},end:{line:3673,column:36}},loc:{start:{line:3673,column:46},end:{line:3673,column:48}},line:3673},"237":{name:"(anonymous_237)",decl:{start:{line:3676,column:62},end:{line:3676,column:63}},loc:{start:{line:3676,column:76},end:{line:3678,column:13}},line:3676},"238":{name:"(anonymous_238)",decl:{start:{line:3699,column:15},end:{line:3699,column:16}},loc:{start:{line:3699,column:44},end:{line:3787,column:9}},line:3699},"239":{name:"(anonymous_239)",decl:{start:{line:3715,column:49},end:{line:3715,column:50}},loc:{start:{line:3715,column:60},end:{line:3715,column:62}},line:3715},"240":{name:"(anonymous_240)",decl:{start:{line:3716,column:55},end:{line:3716,column:56}},loc:{start:{line:3716,column:66},end:{line:3716,column:68}},line:3716},"241":{name:"(anonymous_241)",decl:{start:{line:3717,column:47},end:{line:3717,column:48}},loc:{start:{line:3717,column:58},end:{line:3717,column:60}},line:3717},"242":{name:"(anonymous_242)",decl:{start:{line:3718,column:51},end:{line:3718,column:52}},loc:{start:{line:3718,column:62},end:{line:3718,column:64}},line:3718},"243":{name:"(anonymous_243)",decl:{start:{line:3719,column:49},end:{line:3719,column:50}},loc:{start:{line:3719,column:60},end:{line:3719,column:62}},line:3719},"244":{name:"(anonymous_244)",decl:{start:{line:3722,column:57},end:{line:3722,column:58}},loc:{start:{line:3722,column:68},end:{line:3722,column:70}},line:3722},"245":{name:"(anonymous_245)",decl:{start:{line:3723,column:75},end:{line:3723,column:76}},loc:{start:{line:3723,column:86},end:{line:3723,column:88}},line:3723},"246":{name:"(anonymous_246)",decl:{start:{line:3729,column:16},end:{line:3729,column:17}},loc:{start:{line:3729,column:27},end:{line:3729,column:51}},line:3729},"247":{name:"(anonymous_247)",decl:{start:{line:3730,column:16},end:{line:3730,column:17}},loc:{start:{line:3730,column:40},end:{line:3780,column:17}},line:3730},"248":{name:"(anonymous_248)",decl:{start:{line:3731,column:31},end:{line:3731,column:32}},loc:{start:{line:3731,column:50},end:{line:3779,column:21}},line:3731},"249":{name:"(anonymous_249)",decl:{start:{line:3781,column:16},end:{line:3781,column:17}},loc:{start:{line:3781,column:30},end:{line:3785,column:17}},line:3781},"250":{name:"(anonymous_250)",decl:{start:{line:3804,column:17},end:{line:3804,column:18}},loc:{start:{line:3804,column:36},end:{line:3813,column:9}},line:3804},"251":{name:"(anonymous_251)",decl:{start:{line:3805,column:35},end:{line:3805,column:36}},loc:{start:{line:3805,column:46},end:{line:3805,column:48}},line:3805},"252":{name:"(anonymous_252)",decl:{start:{line:3808,column:64},end:{line:3808,column:65}},loc:{start:{line:3808,column:78},end:{line:3810,column:13}},line:3808},"253":{name:"(anonymous_253)",decl:{start:{line:3830,column:14},end:{line:3830,column:15}},loc:{start:{line:3830,column:25},end:{line:3832,column:9}},line:3830},"254":{name:"(anonymous_254)",decl:{start:{line:3842,column:27},end:{line:3842,column:28}},loc:{start:{line:3842,column:43},end:{line:3846,column:9}},line:3842},"255":{name:"(anonymous_255)",decl:{start:{line:3861,column:14},end:{line:3861,column:15}},loc:{start:{line:3861,column:43},end:{line:3867,column:9}},line:3861},"256":{name:"(anonymous_256)",decl:{start:{line:3886,column:16},end:{line:3886,column:17}},loc:{start:{line:3886,column:50},end:{line:3917,column:9}},line:3886},"257":{name:"(anonymous_257)",decl:{start:{line:3895,column:35},end:{line:3895,column:36}},loc:{start:{line:3895,column:46},end:{line:3895,column:48}},line:3895},"258":{name:"(anonymous_258)",decl:{start:{line:3908,column:41},end:{line:3908,column:42}},loc:{start:{line:3908,column:65},end:{line:3916,column:13}},line:3908},"259":{name:"(anonymous_259)",decl:{start:{line:3944,column:16},end:{line:3944,column:17}},loc:{start:{line:3944,column:50},end:{line:3946,column:9}},line:3944},"260":{name:"(anonymous_260)",decl:{start:{line:3969,column:23},end:{line:3969,column:24}},loc:{start:{line:3969,column:57},end:{line:4014,column:9}},line:3969},"261":{name:"(anonymous_261)",decl:{start:{line:3978,column:35},end:{line:3978,column:36}},loc:{start:{line:3978,column:46},end:{line:3978,column:48}},line:3978},"262":{name:"(anonymous_262)",decl:{start:{line:4003,column:16},end:{line:4003,column:17}},loc:{start:{line:4003,column:40},end:{line:4010,column:17}},line:4003},"263":{name:"(anonymous_263)",decl:{start:{line:4071,column:14},end:{line:4071,column:15}},loc:{start:{line:4071,column:30},end:{line:4086,column:9}},line:4071},"264":{name:"(anonymous_264)",decl:{start:{line:4095,column:18},end:{line:4095,column:19}},loc:{start:{line:4095,column:29},end:{line:4097,column:9}},line:4095},"265":{name:"(anonymous_265)",decl:{start:{line:4106,column:18},end:{line:4106,column:19}},loc:{start:{line:4106,column:29},end:{line:4108,column:9}},line:4106},"266":{name:"(anonymous_266)",decl:{start:{line:4117,column:21},end:{line:4117,column:22}},loc:{start:{line:4117,column:32},end:{line:4119,column:9}},line:4117},"267":{name:"(anonymous_267)",decl:{start:{line:4128,column:23},end:{line:4128,column:24}},loc:{start:{line:4128,column:34},end:{line:4130,column:9}},line:4128},"268":{name:"(anonymous_268)",decl:{start:{line:4139,column:22},end:{line:4139,column:23}},loc:{start:{line:4139,column:33},end:{line:4141,column:9}},line:4139},"269":{name:"(anonymous_269)",decl:{start:{line:4150,column:16},end:{line:4150,column:17}},loc:{start:{line:4150,column:27},end:{line:4152,column:9}},line:4150},"270":{name:"(anonymous_270)",decl:{start:{line:4161,column:19},end:{line:4161,column:20}},loc:{start:{line:4161,column:30},end:{line:4163,column:9}},line:4161},"271":{name:"(anonymous_271)",decl:{start:{line:4191,column:14},end:{line:4191,column:15}},loc:{start:{line:4191,column:30},end:{line:4198,column:9}},line:4191},"272":{name:"(anonymous_272)",decl:{start:{line:4257,column:14},end:{line:4257,column:15}},loc:{start:{line:4257,column:30},end:{line:4283,column:9}},line:4257},"273":{name:"(anonymous_273)",decl:{start:{line:4292,column:26},end:{line:4292,column:27}},loc:{start:{line:4292,column:37},end:{line:4294,column:9}},line:4292},"274":{name:"(anonymous_274)",decl:{start:{line:4303,column:20},end:{line:4303,column:21}},loc:{start:{line:4303,column:31},end:{line:4305,column:9}},line:4303},"275":{name:"(anonymous_275)",decl:{start:{line:4314,column:18},end:{line:4314,column:19}},loc:{start:{line:4314,column:29},end:{line:4316,column:9}},line:4314},"276":{name:"(anonymous_276)",decl:{start:{line:4325,column:16},end:{line:4325,column:17}},loc:{start:{line:4325,column:27},end:{line:4327,column:9}},line:4325},"277":{name:"(anonymous_277)",decl:{start:{line:4336,column:15},end:{line:4336,column:16}},loc:{start:{line:4336,column:26},end:{line:4338,column:9}},line:4336},"278":{name:"(anonymous_278)",decl:{start:{line:4347,column:17},end:{line:4347,column:18}},loc:{start:{line:4347,column:28},end:{line:4349,column:9}},line:4347},"279":{name:"(anonymous_279)",decl:{start:{line:4382,column:14},end:{line:4382,column:15}},loc:{start:{line:4382,column:39},end:{line:4391,column:9}},line:4382},"280":{name:"(anonymous_280)",decl:{start:{line:4401,column:13},end:{line:4401,column:14}},loc:{start:{line:4401,column:38},end:{line:4412,column:9}},line:4401},"281":{name:"(anonymous_281)",decl:{start:{line:4543,column:14},end:{line:4543,column:15}},loc:{start:{line:4543,column:40},end:{line:4555,column:9}},line:4543},"282":{name:"(anonymous_282)",decl:{start:{line:4568,column:28},end:{line:4568,column:29}},loc:{start:{line:4568,column:42},end:{line:4580,column:9}},line:4568},"283":{name:"(anonymous_283)",decl:{start:{line:4594,column:19},end:{line:4594,column:20}},loc:{start:{line:4594,column:80},end:{line:4627,column:9}},line:4594},"284":{name:"(anonymous_284)",decl:{start:{line:4642,column:24},end:{line:4642,column:25}},loc:{start:{line:4642,column:96},end:{line:4682,column:9}},line:4642},"285":{name:"(anonymous_285)",decl:{start:{line:4693,column:21},end:{line:4693,column:22}},loc:{start:{line:4693,column:48},end:{line:4716,column:9}},line:4693},"286":{name:"(anonymous_286)",decl:{start:{line:4737,column:26},end:{line:4737,column:27}},loc:{start:{line:4737,column:57},end:{line:4769,column:9}},line:4737},"287":{name:"(anonymous_287)",decl:{start:{line:4782,column:28},end:{line:4782,column:29}},loc:{start:{line:4782,column:88},end:{line:4801,column:9}},line:4782},"288":{name:"(anonymous_288)",decl:{start:{line:4813,column:30},end:{line:4813,column:31}},loc:{start:{line:4813,column:62},end:{line:4834,column:9}},line:4813},"289":{name:"(anonymous_289)",decl:{start:{line:4845,column:24},end:{line:4845,column:25}},loc:{start:{line:4845,column:44},end:{line:4867,column:9}},line:4845},"290":{name:"(anonymous_290)",decl:{start:{line:4882,column:29},end:{line:4882,column:30}},loc:{start:{line:4882,column:57},end:{line:4916,column:9}},line:4882},"291":{name:"(anonymous_291)",decl:{start:{line:4928,column:31},end:{line:4928,column:32}},loc:{start:{line:4928,column:88},end:{line:4946,column:9}},line:4928},"292":{name:"(anonymous_292)",decl:{start:{line:4957,column:33},end:{line:4957,column:34}},loc:{start:{line:4957,column:58},end:{line:4977,column:9}},line:4957},"293":{name:"(anonymous_293)",decl:{start:{line:4989,column:22},end:{line:4989,column:23}},loc:{start:{line:4989,column:64},end:{line:5059,column:9}},line:4989},"294":{name:"(anonymous_294)",decl:{start:{line:5068,column:22},end:{line:5068,column:23}},loc:{start:{line:5068,column:33},end:{line:5077,column:9}},line:5068},"295":{name:"(anonymous_295)",decl:{start:{line:5101,column:15},end:{line:5101,column:16}},loc:{start:{line:5101,column:34},end:{line:5125,column:9}},line:5101},"296":{name:"(anonymous_296)",decl:{start:{line:5112,column:110},end:{line:5112,column:111}},loc:{start:{line:5112,column:134},end:{line:5124,column:13}},line:5112},"297":{name:"(anonymous_297)",decl:{start:{line:5153,column:13},end:{line:5153,column:14}},loc:{start:{line:5153,column:38},end:{line:5168,column:9}},line:5153},"298":{name:"(anonymous_298)",decl:{start:{line:5160,column:23},end:{line:5160,column:24}},loc:{start:{line:5160,column:44},end:{line:5167,column:13}},line:5160},"299":{name:"(anonymous_299)",decl:{start:{line:5224,column:14},end:{line:5224,column:15}},loc:{start:{line:5224,column:47},end:{line:5270,column:9}},line:5224},"300":{name:"(anonymous_300)",decl:{start:{line:5279,column:22},end:{line:5279,column:23}},loc:{start:{line:5279,column:33},end:{line:5281,column:9}},line:5279},"301":{name:"(anonymous_301)",decl:{start:{line:5290,column:27},end:{line:5290,column:28}},loc:{start:{line:5290,column:38},end:{line:5292,column:9}},line:5290},"302":{name:"(anonymous_302)",decl:{start:{line:5302,column:20},end:{line:5302,column:21}},loc:{start:{line:5302,column:31},end:{line:5304,column:9}},line:5302},"303":{name:"(anonymous_303)",decl:{start:{line:5316,column:21},end:{line:5316,column:22}},loc:{start:{line:5316,column:36},end:{line:5318,column:9}},line:5316},"304":{name:"(anonymous_304)",decl:{start:{line:5330,column:19},end:{line:5330,column:20}},loc:{start:{line:5330,column:30},end:{line:5348,column:9}},line:5330},"305":{name:"(anonymous_305)",decl:{start:{line:5360,column:23},end:{line:5360,column:24}},loc:{start:{line:5360,column:34},end:{line:5362,column:9}},line:5360},"306":{name:"(anonymous_306)",decl:{start:{line:5373,column:26},end:{line:5373,column:27}},loc:{start:{line:5373,column:36},end:{line:5385,column:9}},line:5373},"307":{name:"(anonymous_307)",decl:{start:{line:5396,column:30},end:{line:5396,column:31}},loc:{start:{line:5396,column:41},end:{line:5398,column:9}},line:5396},"308":{name:"(anonymous_308)",decl:{start:{line:5409,column:18},end:{line:5409,column:19}},loc:{start:{line:5409,column:38},end:{line:5411,column:9}},line:5409},"309":{name:"(anonymous_309)",decl:{start:{line:5422,column:24},end:{line:5422,column:25}},loc:{start:{line:5422,column:35},end:{line:5424,column:9}},line:5422},"310":{name:"(anonymous_310)",decl:{start:{line:5452,column:36},end:{line:5452,column:37}},loc:{start:{line:5452,column:69},end:{line:5463,column:9}},line:5452},"311":{name:"(anonymous_311)",decl:{start:{line:5484,column:21},end:{line:5484,column:22}},loc:{start:{line:5484,column:61},end:{line:5489,column:9}},line:5484},"312":{name:"(anonymous_312)",decl:{start:{line:5500,column:16},end:{line:5500,column:17}},loc:{start:{line:5500,column:27},end:{line:5502,column:9}},line:5500},"313":{name:"(anonymous_313)",decl:{start:{line:5511,column:34},end:{line:5511,column:35}},loc:{start:{line:5511,column:45},end:{line:5514,column:9}},line:5511},"314":{name:"(anonymous_314)",decl:{start:{line:5532,column:14},end:{line:5532,column:15}},loc:{start:{line:5532,column:25},end:{line:5534,column:9}},line:5532},"315":{name:"(anonymous_315)",decl:{start:{line:5554,column:14},end:{line:5554,column:15}},loc:{start:{line:5554,column:56},end:{line:5591,column:9}},line:5554},"316":{name:"(anonymous_316)",decl:{start:{line:5600,column:23},end:{line:5600,column:24}},loc:{start:{line:5600,column:34},end:{line:5602,column:9}},line:5600},"317":{name:"(anonymous_317)",decl:{start:{line:5612,column:22},end:{line:5612,column:23}},loc:{start:{line:5612,column:37},end:{line:5619,column:9}},line:5612},"318":{name:"(anonymous_318)",decl:{start:{line:5628,column:19},end:{line:5628,column:20}},loc:{start:{line:5628,column:34},end:{line:5630,column:9}},line:5628},"319":{name:"(anonymous_319)",decl:{start:{line:5644,column:16},end:{line:5644,column:17}},loc:{start:{line:5644,column:42},end:{line:5678,column:9}},line:5644},"320":{name:"(anonymous_320)",decl:{start:{line:5649,column:35},end:{line:5649,column:36}},loc:{start:{line:5649,column:46},end:{line:5649,column:48}},line:5649},"321":{name:"(anonymous_321)",decl:{start:{line:5669,column:47},end:{line:5669,column:48}},loc:{start:{line:5669,column:71},end:{line:5677,column:13}},line:5669},"322":{name:"(anonymous_322)",decl:{start:{line:5696,column:14},end:{line:5696,column:15}},loc:{start:{line:5696,column:25},end:{line:5698,column:9}},line:5696},"323":{name:"(anonymous_323)",decl:{start:{line:5712,column:14},end:{line:5712,column:15}},loc:{start:{line:5712,column:43},end:{line:5716,column:9}},line:5712},"324":{name:"(anonymous_324)",decl:{start:{line:5730,column:16},end:{line:5730,column:17}},loc:{start:{line:5730,column:49},end:{line:5752,column:9}},line:5730},"325":{name:"(anonymous_325)",decl:{start:{line:5739,column:35},end:{line:5739,column:36}},loc:{start:{line:5739,column:45},end:{line:5739,column:47}},line:5739},"326":{name:"(anonymous_326)",decl:{start:{line:5743,column:84},end:{line:5743,column:85}},loc:{start:{line:5743,column:108},end:{line:5751,column:13}},line:5743},"327":{name:"(anonymous_327)",decl:{start:{line:5764,column:27},end:{line:5764,column:28}},loc:{start:{line:5764,column:43},end:{line:5767,column:9}},line:5764},"328":{name:"(anonymous_328)",decl:{start:{line:5773,column:14},end:{line:5773,column:15}},loc:{start:{line:5773,column:41},end:{line:5779,column:9}},line:5773},"329":{name:"(anonymous_329)",decl:{start:{line:5782,column:14},end:{line:5782,column:15}},loc:{start:{line:5782,column:33},end:{line:5801,column:9}},line:5782},"330":{name:"(anonymous_330)",decl:{start:{line:5783,column:35},end:{line:5783,column:36}},loc:{start:{line:5783,column:46},end:{line:5783,column:48}},line:5783},"331":{name:"(anonymous_331)",decl:{start:{line:5790,column:42},end:{line:5790,column:43}},loc:{start:{line:5790,column:65},end:{line:5800,column:13}},line:5790}},branchMap:{"0":{loc:{start:{line:26,column:15},end:{line:26,column:30}},type:"binary-expr",locations:[{start:{line:26,column:15},end:{line:26,column:22}},{start:{line:26,column:26},end:{line:26,column:30}}],line:26},"1":{loc:{start:{line:397,column:12},end:{line:400,column:13}},type:"if",locations:[{start:{line:397,column:12},end:{line:400,column:13}},{start:{line:397,column:12},end:{line:400,column:13}}],line:397},"2":{loc:{start:{line:397,column:16},end:{line:397,column:56}},type:"binary-expr",locations:[{start:{line:397,column:16},end:{line:397,column:25}},{start:{line:397,column:29},end:{line:397,column:56}}],line:397},"3":{loc:{start:{line:420,column:12},end:{line:423,column:13}},type:"if",locations:[{start:{line:420,column:12},end:{line:423,column:13}},{start:{line:420,column:12},end:{line:423,column:13}}],line:420},"4":{loc:{start:{line:420,column:16},end:{line:420,column:56}},type:"binary-expr",locations:[{start:{line:420,column:16},end:{line:420,column:25}},{start:{line:420,column:29},end:{line:420,column:56}}],line:420},"5":{loc:{start:{line:453,column:12},end:{line:456,column:13}},type:"if",locations:[{start:{line:453,column:12},end:{line:456,column:13}},{start:{line:453,column:12},end:{line:456,column:13}}],line:453},"6":{loc:{start:{line:453,column:16},end:{line:453,column:56}},type:"binary-expr",locations:[{start:{line:453,column:16},end:{line:453,column:25}},{start:{line:453,column:29},end:{line:453,column:56}}],line:453},"7":{loc:{start:{line:478,column:23},end:{line:478,column:48}},type:"binary-expr",locations:[{start:{line:478,column:23},end:{line:478,column:31}},{start:{line:478,column:35},end:{line:478,column:48}}],line:478},"8":{loc:{start:{line:482,column:16},end:{line:496,column:17}},type:"if",locations:[{start:{line:482,column:16},end:{line:496,column:17}},{start:{line:482,column:16},end:{line:496,column:17}}],line:482},"9":{loc:{start:{line:489,column:24},end:{line:494,column:25}},type:"if",locations:[{start:{line:489,column:24},end:{line:494,column:25}},{start:{line:489,column:24},end:{line:494,column:25}}],line:489},"10":{loc:{start:{line:517,column:23},end:{line:517,column:48}},type:"binary-expr",locations:[{start:{line:517,column:23},end:{line:517,column:31}},{start:{line:517,column:35},end:{line:517,column:48}}],line:517},"11":{loc:{start:{line:544,column:12},end:{line:547,column:13}},type:"if",locations:[{start:{line:544,column:12},end:{line:547,column:13}},{start:{line:544,column:12},end:{line:547,column:13}}],line:544},"12":{loc:{start:{line:544,column:16},end:{line:544,column:53}},type:"binary-expr",locations:[{start:{line:544,column:16},end:{line:544,column:25}},{start:{line:544,column:29},end:{line:544,column:53}}],line:544},"13":{loc:{start:{line:549,column:23},end:{line:549,column:48}},type:"binary-expr",locations:[{start:{line:549,column:23},end:{line:549,column:31}},{start:{line:549,column:35},end:{line:549,column:48}}],line:549},"14":{loc:{start:{line:550,column:21},end:{line:550,column:33}},type:"binary-expr",locations:[{start:{line:550,column:21},end:{line:550,column:27}},{start:{line:550,column:31},end:{line:550,column:33}}],line:550},"15":{loc:{start:{line:555,column:16},end:{line:560,column:17}},type:"if",locations:[{start:{line:555,column:16},end:{line:560,column:17}},{start:{line:555,column:16},end:{line:560,column:17}}],line:555},"16":{loc:{start:{line:581,column:12},end:{line:584,column:13}},type:"if",locations:[{start:{line:581,column:12},end:{line:584,column:13}},{start:{line:581,column:12},end:{line:584,column:13}}],line:581},"17":{loc:{start:{line:581,column:16},end:{line:581,column:52}},type:"binary-expr",locations:[{start:{line:581,column:16},end:{line:581,column:25}},{start:{line:581,column:29},end:{line:581,column:52}}],line:581},"18":{loc:{start:{line:586,column:23},end:{line:586,column:48}},type:"binary-expr",locations:[{start:{line:586,column:23},end:{line:586,column:31}},{start:{line:586,column:35},end:{line:586,column:48}}],line:586},"19":{loc:{start:{line:588,column:23},end:{line:588,column:34}},type:"binary-expr",locations:[{start:{line:588,column:23},end:{line:588,column:28}},{start:{line:588,column:32},end:{line:588,column:34}}],line:588},"20":{loc:{start:{line:593,column:16},end:{line:599,column:17}},type:"if",locations:[{start:{line:593,column:16},end:{line:599,column:17}},{start:{line:593,column:16},end:{line:599,column:17}}],line:593},"21":{loc:{start:{line:597,column:35},end:{line:597,column:54}},type:"binary-expr",locations:[{start:{line:597,column:35},end:{line:597,column:48}},{start:{line:597,column:52},end:{line:597,column:54}}],line:597},"22":{loc:{start:{line:598,column:35},end:{line:598,column:48}},type:"binary-expr",locations:[{start:{line:598,column:35},end:{line:598,column:42}},{start:{line:598,column:46},end:{line:598,column:48}}],line:598},"23":{loc:{start:{line:625,column:12},end:{line:628,column:13}},type:"if",locations:[{start:{line:625,column:12},end:{line:628,column:13}},{start:{line:625,column:12},end:{line:628,column:13}}],line:625},"24":{loc:{start:{line:625,column:16},end:{line:625,column:53}},type:"binary-expr",locations:[{start:{line:625,column:16},end:{line:625,column:25}},{start:{line:625,column:29},end:{line:625,column:53}}],line:625},"25":{loc:{start:{line:630,column:23},end:{line:630,column:48}},type:"binary-expr",locations:[{start:{line:630,column:23},end:{line:630,column:31}},{start:{line:630,column:35},end:{line:630,column:48}}],line:630},"26":{loc:{start:{line:631,column:21},end:{line:631,column:33}},type:"binary-expr",locations:[{start:{line:631,column:21},end:{line:631,column:27}},{start:{line:631,column:31},end:{line:631,column:33}}],line:631},"27":{loc:{start:{line:634,column:12},end:{line:636,column:13}},type:"if",locations:[{start:{line:634,column:12},end:{line:636,column:13}},{start:{line:634,column:12},end:{line:636,column:13}}],line:634},"28":{loc:{start:{line:653,column:20},end:{line:658,column:21}},type:"if",locations:[{start:{line:653,column:20},end:{line:658,column:21}},{start:{line:653,column:20},end:{line:658,column:21}}],line:653},"29":{loc:{start:{line:686,column:12},end:{line:688,column:13}},type:"if",locations:[{start:{line:686,column:12},end:{line:688,column:13}},{start:{line:686,column:12},end:{line:688,column:13}}],line:686},"30":{loc:{start:{line:690,column:12},end:{line:692,column:13}},type:"if",locations:[{start:{line:690,column:12},end:{line:692,column:13}},{start:{line:690,column:12},end:{line:692,column:13}}],line:690},"31":{loc:{start:{line:726,column:12},end:{line:728,column:13}},type:"if",locations:[{start:{line:726,column:12},end:{line:728,column:13}},{start:{line:726,column:12},end:{line:728,column:13}}],line:726},"32":{loc:{start:{line:742,column:12},end:{line:744,column:13}},type:"if",locations:[{start:{line:742,column:12},end:{line:744,column:13}},{start:{line:742,column:12},end:{line:744,column:13}}],line:742},"33":{loc:{start:{line:773,column:12},end:{line:775,column:13}},type:"if",locations:[{start:{line:773,column:12},end:{line:775,column:13}},{start:{line:773,column:12},end:{line:775,column:13}}],line:773},"34":{loc:{start:{line:805,column:12},end:{line:807,column:13}},type:"if",locations:[{start:{line:805,column:12},end:{line:807,column:13}},{start:{line:805,column:12},end:{line:807,column:13}}],line:805},"35":{loc:{start:{line:878,column:31},end:{line:878,column:47}},type:"binary-expr",locations:[{start:{line:878,column:31},end:{line:878,column:41}},{start:{line:878,column:45},end:{line:878,column:47}}],line:878},"36":{loc:{start:{line:879,column:26},end:{line:879,column:42}},type:"binary-expr",locations:[{start:{line:879,column:26},end:{line:879,column:36}},{start:{line:879,column:40},end:{line:879,column:42}}],line:879},"37":{loc:{start:{line:988,column:25},end:{line:988,column:79}},type:"cond-expr",locations:[{start:{line:988,column:53},end:{line:988,column:66}},{start:{line:988,column:69},end:{line:988,column:79}}],line:988},"38":{loc:{start:{line:992,column:25},end:{line:997,column:13}},type:"binary-expr",locations:[{start:{line:992,column:25},end:{line:992,column:35}},{start:{line:992,column:39},end:{line:997,column:13}}],line:992},"39":{loc:{start:{line:1002,column:31},end:{line:1002,column:57}},type:"binary-expr",locations:[{start:{line:1002,column:31},end:{line:1002,column:49}},{start:{line:1002,column:55},end:{line:1002,column:57}}],line:1002},"40":{loc:{start:{line:1003,column:31},end:{line:1003,column:73}},type:"binary-expr",locations:[{start:{line:1003,column:31},end:{line:1003,column:48}},{start:{line:1003,column:55},end:{line:1003,column:67}},{start:{line:1003,column:71},end:{line:1003,column:73}}],line:1003},"41":{loc:{start:{line:1004,column:31},end:{line:1004,column:57}},type:"binary-expr",locations:[{start:{line:1004,column:31},end:{line:1004,column:45}},{start:{line:1004,column:55},end:{line:1004,column:57}}],line:1004},"42":{loc:{start:{line:1005,column:31},end:{line:1005,column:57}},type:"binary-expr",locations:[{start:{line:1005,column:31},end:{line:1005,column:47}},{start:{line:1005,column:55},end:{line:1005,column:57}}],line:1005},"43":{loc:{start:{line:1006,column:31},end:{line:1006,column:59}},type:"binary-expr",locations:[{start:{line:1006,column:31},end:{line:1006,column:48}},{start:{line:1006,column:55},end:{line:1006,column:59}}],line:1006},"44":{loc:{start:{line:1007,column:31},end:{line:1007,column:59}},type:"binary-expr",locations:[{start:{line:1007,column:31},end:{line:1007,column:49}},{start:{line:1007,column:55},end:{line:1007,column:59}}],line:1007},"45":{loc:{start:{line:1008,column:31},end:{line:1008,column:59}},type:"binary-expr",locations:[{start:{line:1008,column:31},end:{line:1008,column:51}},{start:{line:1008,column:55},end:{line:1008,column:59}}],line:1008},"46":{loc:{start:{line:1096,column:12},end:{line:1099,column:13}},type:"if",locations:[{start:{line:1096,column:12},end:{line:1099,column:13}},{start:{line:1096,column:12},end:{line:1099,column:13}}],line:1096},"47":{loc:{start:{line:1096,column:16},end:{line:1096,column:54}},type:"binary-expr",locations:[{start:{line:1096,column:16},end:{line:1096,column:25}},{start:{line:1096,column:29},end:{line:1096,column:54}}],line:1096},"48":{loc:{start:{line:1100,column:23},end:{line:1100,column:48}},type:"binary-expr",locations:[{start:{line:1100,column:23},end:{line:1100,column:31}},{start:{line:1100,column:35},end:{line:1100,column:48}}],line:1100},"49":{loc:{start:{line:1102,column:22},end:{line:1102,column:35}},type:"binary-expr",locations:[{start:{line:1102,column:22},end:{line:1102,column:29}},{start:{line:1102,column:33},end:{line:1102,column:35}}],line:1102},"50":{loc:{start:{line:1106,column:16},end:{line:1112,column:17}},type:"if",locations:[{start:{line:1106,column:16},end:{line:1112,column:17}},{start:{line:1106,column:16},end:{line:1112,column:17}}],line:1106},"51":{loc:{start:{line:1110,column:31},end:{line:1110,column:73}},type:"cond-expr",locations:[{start:{line:1110,column:47},end:{line:1110,column:66}},{start:{line:1110,column:69},end:{line:1110,column:73}}],line:1110},"52":{loc:{start:{line:1125,column:23},end:{line:1125,column:48}},type:"binary-expr",locations:[{start:{line:1125,column:23},end:{line:1125,column:31}},{start:{line:1125,column:35},end:{line:1125,column:48}}],line:1125},"53":{loc:{start:{line:1143,column:23},end:{line:1143,column:48}},type:"binary-expr",locations:[{start:{line:1143,column:23},end:{line:1143,column:31}},{start:{line:1143,column:35},end:{line:1143,column:48}}],line:1143},"54":{loc:{start:{line:1145,column:12},end:{line:1147,column:13}},type:"if",locations:[{start:{line:1145,column:12},end:{line:1147,column:13}},{start:{line:1145,column:12},end:{line:1147,column:13}}],line:1145},"55":{loc:{start:{line:1151,column:16},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1151,column:16},end:{line:1167,column:17}},{start:{line:1151,column:16},end:{line:1167,column:17}}],line:1151},"56":{loc:{start:{line:1151,column:20},end:{line:1151,column:47}},type:"binary-expr",locations:[{start:{line:1151,column:20},end:{line:1151,column:24}},{start:{line:1151,column:28},end:{line:1151,column:47}}],line:1151},"57":{loc:{start:{line:1155,column:21},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1155,column:21},end:{line:1167,column:17}},{start:{line:1155,column:21},end:{line:1167,column:17}}],line:1155},"58":{loc:{start:{line:1155,column:25},end:{line:1155,column:51}},type:"binary-expr",locations:[{start:{line:1155,column:25},end:{line:1155,column:29}},{start:{line:1155,column:33},end:{line:1155,column:51}}],line:1155},"59":{loc:{start:{line:1157,column:24},end:{line:1162,column:25}},type:"if",locations:[{start:{line:1157,column:24},end:{line:1162,column:25}},{start:{line:1157,column:24},end:{line:1162,column:25}}],line:1157},"60":{loc:{start:{line:1182,column:23},end:{line:1182,column:48}},type:"binary-expr",locations:[{start:{line:1182,column:23},end:{line:1182,column:31}},{start:{line:1182,column:35},end:{line:1182,column:48}}],line:1182},"61":{loc:{start:{line:1186,column:16},end:{line:1191,column:17}},type:"if",locations:[{start:{line:1186,column:16},end:{line:1191,column:17}},{start:{line:1186,column:16},end:{line:1191,column:17}}],line:1186},"62":{loc:{start:{line:1204,column:23},end:{line:1204,column:48}},type:"binary-expr",locations:[{start:{line:1204,column:23},end:{line:1204,column:31}},{start:{line:1204,column:35},end:{line:1204,column:48}}],line:1204},"63":{loc:{start:{line:1208,column:16},end:{line:1213,column:17}},type:"if",locations:[{start:{line:1208,column:16},end:{line:1213,column:17}},{start:{line:1208,column:16},end:{line:1213,column:17}}],line:1208},"64":{loc:{start:{line:1226,column:23},end:{line:1226,column:48}},type:"binary-expr",locations:[{start:{line:1226,column:23},end:{line:1226,column:31}},{start:{line:1226,column:35},end:{line:1226,column:48}}],line:1226},"65":{loc:{start:{line:1230,column:16},end:{line:1235,column:17}},type:"if",locations:[{start:{line:1230,column:16},end:{line:1235,column:17}},{start:{line:1230,column:16},end:{line:1235,column:17}}],line:1230},"66":{loc:{start:{line:1318,column:37},end:{line:1318,column:59}},type:"binary-expr",locations:[{start:{line:1318,column:37},end:{line:1318,column:53}},{start:{line:1318,column:57},end:{line:1318,column:59}}],line:1318},"67":{loc:{start:{line:1325,column:16},end:{line:1330,column:17}},type:"if",locations:[{start:{line:1325,column:16},end:{line:1330,column:17}},{start:{line:1325,column:16},end:{line:1330,column:17}}],line:1325},"68":{loc:{start:{line:1334,column:35},end:{line:1334,column:61}},type:"binary-expr",locations:[{start:{line:1334,column:35},end:{line:1334,column:52}},{start:{line:1334,column:59},end:{line:1334,column:61}}],line:1334},"69":{loc:{start:{line:1335,column:35},end:{line:1335,column:61}},type:"binary-expr",locations:[{start:{line:1335,column:35},end:{line:1335,column:51}},{start:{line:1335,column:59},end:{line:1335,column:61}}],line:1335},"70":{loc:{start:{line:1336,column:35},end:{line:1336,column:63}},type:"binary-expr",locations:[{start:{line:1336,column:35},end:{line:1336,column:53}},{start:{line:1336,column:59},end:{line:1336,column:63}}],line:1336},"71":{loc:{start:{line:1389,column:12},end:{line:1392,column:13}},type:"if",locations:[{start:{line:1389,column:12},end:{line:1392,column:13}},{start:{line:1389,column:12},end:{line:1392,column:13}}],line:1389},"72":{loc:{start:{line:1389,column:16},end:{line:1389,column:54}},type:"binary-expr",locations:[{start:{line:1389,column:16},end:{line:1389,column:25}},{start:{line:1389,column:29},end:{line:1389,column:54}}],line:1389},"73":{loc:{start:{line:1393,column:23},end:{line:1393,column:48}},type:"binary-expr",locations:[{start:{line:1393,column:23},end:{line:1393,column:31}},{start:{line:1393,column:35},end:{line:1393,column:48}}],line:1393},"74":{loc:{start:{line:1395,column:22},end:{line:1395,column:35}},type:"binary-expr",locations:[{start:{line:1395,column:22},end:{line:1395,column:29}},{start:{line:1395,column:33},end:{line:1395,column:35}}],line:1395},"75":{loc:{start:{line:1396,column:12},end:{line:1398,column:13}},type:"if",locations:[{start:{line:1396,column:12},end:{line:1398,column:13}},{start:{line:1396,column:12},end:{line:1398,column:13}}],line:1396},"76":{loc:{start:{line:1402,column:16},end:{line:1408,column:17}},type:"if",locations:[{start:{line:1402,column:16},end:{line:1408,column:17}},{start:{line:1402,column:16},end:{line:1408,column:17}}],line:1402},"77":{loc:{start:{line:1415,column:22},end:{line:1415,column:35}},type:"binary-expr",locations:[{start:{line:1415,column:22},end:{line:1415,column:29}},{start:{line:1415,column:33},end:{line:1415,column:35}}],line:1415},"78":{loc:{start:{line:1416,column:12},end:{line:1418,column:13}},type:"if",locations:[{start:{line:1416,column:12},end:{line:1418,column:13}},{start:{line:1416,column:12},end:{line:1418,column:13}}],line:1416},"79":{loc:{start:{line:1449,column:12},end:{line:1451,column:13}},type:"if",locations:[{start:{line:1449,column:12},end:{line:1451,column:13}},{start:{line:1449,column:12},end:{line:1451,column:13}}],line:1449},"80":{loc:{start:{line:1453,column:12},end:{line:1455,column:13}},type:"if",locations:[{start:{line:1453,column:12},end:{line:1455,column:13}},{start:{line:1453,column:12},end:{line:1455,column:13}}],line:1453},"81":{loc:{start:{line:1457,column:12},end:{line:1459,column:13}},type:"if",locations:[{start:{line:1457,column:12},end:{line:1459,column:13}},{start:{line:1457,column:12},end:{line:1459,column:13}}],line:1457},"82":{loc:{start:{line:1457,column:16},end:{line:1457,column:79}},type:"binary-expr",locations:[{start:{line:1457,column:16},end:{line:1457,column:25}},{start:{line:1457,column:30},end:{line:1457,column:51}},{start:{line:1457,column:55},end:{line:1457,column:78}}],line:1457},"83":{loc:{start:{line:1462,column:12},end:{line:1504,column:13}},type:"if",locations:[{start:{line:1462,column:12},end:{line:1504,column:13}},{start:{line:1462,column:12},end:{line:1504,column:13}}],line:1462},"84":{loc:{start:{line:1465,column:16},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1465,column:16},end:{line:1500,column:17}},{start:{line:1465,column:16},end:{line:1500,column:17}}],line:1465},"85":{loc:{start:{line:1465,column:20},end:{line:1465,column:55}},type:"binary-expr",locations:[{start:{line:1465,column:20},end:{line:1465,column:41}},{start:{line:1465,column:45},end:{line:1465,column:55}}],line:1465},"86":{loc:{start:{line:1472,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1472,column:21},end:{line:1500,column:17}},{start:{line:1472,column:21},end:{line:1500,column:17}}],line:1472},"87":{loc:{start:{line:1472,column:25},end:{line:1472,column:59}},type:"binary-expr",locations:[{start:{line:1472,column:25},end:{line:1472,column:46}},{start:{line:1472,column:50},end:{line:1472,column:59}}],line:1472},"88":{loc:{start:{line:1477,column:20},end:{line:1482,column:21}},type:"if",locations:[{start:{line:1477,column:20},end:{line:1482,column:21}},{start:{line:1477,column:20},end:{line:1482,column:21}}],line:1477},"89":{loc:{start:{line:1484,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1484,column:21},end:{line:1500,column:17}},{start:{line:1484,column:21},end:{line:1500,column:17}}],line:1484},"90":{loc:{start:{line:1484,column:25},end:{line:1484,column:58}},type:"binary-expr",locations:[{start:{line:1484,column:25},end:{line:1484,column:44}},{start:{line:1484,column:48},end:{line:1484,column:58}}],line:1484},"91":{loc:{start:{line:1496,column:24},end:{line:1498,column:25}},type:"if",locations:[{start:{line:1496,column:24},end:{line:1498,column:25}},{start:{line:1496,column:24},end:{line:1498,column:25}}],line:1496},"92":{loc:{start:{line:1525,column:23},end:{line:1525,column:48}},type:"binary-expr",locations:[{start:{line:1525,column:23},end:{line:1525,column:31}},{start:{line:1525,column:35},end:{line:1525,column:48}}],line:1525},"93":{loc:{start:{line:1528,column:16},end:{line:1553,column:17}},type:"if",locations:[{start:{line:1528,column:16},end:{line:1553,column:17}},{start:{line:1528,column:16},end:{line:1553,column:17}}],line:1528},"94":{loc:{start:{line:1533,column:20},end:{line:1535,column:21}},type:"if",locations:[{start:{line:1533,column:20},end:{line:1535,column:21}},{start:{line:1533,column:20},end:{line:1535,column:21}}],line:1533},"95":{loc:{start:{line:1540,column:20},end:{line:1552,column:21}},type:"if",locations:[{start:{line:1540,column:20},end:{line:1552,column:21}},{start:{line:1540,column:20},end:{line:1552,column:21}}],line:1540},"96":{loc:{start:{line:1542,column:28},end:{line:1547,column:29}},type:"if",locations:[{start:{line:1542,column:28},end:{line:1547,column:29}},{start:{line:1542,column:28},end:{line:1547,column:29}}],line:1542},"97":{loc:{start:{line:1575,column:23},end:{line:1575,column:48}},type:"binary-expr",locations:[{start:{line:1575,column:23},end:{line:1575,column:31}},{start:{line:1575,column:35},end:{line:1575,column:48}}],line:1575},"98":{loc:{start:{line:1637,column:19},end:{line:1637,column:77}},type:"binary-expr",locations:[{start:{line:1637,column:19},end:{line:1637,column:72}},{start:{line:1637,column:76},end:{line:1637,column:77}}],line:1637},"99":{loc:{start:{line:1657,column:23},end:{line:1657,column:48}},type:"binary-expr",locations:[{start:{line:1657,column:23},end:{line:1657,column:31}},{start:{line:1657,column:35},end:{line:1657,column:48}}],line:1657},"100":{loc:{start:{line:1689,column:12},end:{line:1692,column:13}},type:"if",locations:[{start:{line:1689,column:12},end:{line:1692,column:13}},{start:{line:1689,column:12},end:{line:1692,column:13}}],line:1689},"101":{loc:{start:{line:1689,column:16},end:{line:1689,column:54}},type:"binary-expr",locations:[{start:{line:1689,column:16},end:{line:1689,column:25}},{start:{line:1689,column:29},end:{line:1689,column:54}}],line:1689},"102":{loc:{start:{line:1694,column:23},end:{line:1694,column:48}},type:"binary-expr",locations:[{start:{line:1694,column:23},end:{line:1694,column:31}},{start:{line:1694,column:35},end:{line:1694,column:48}}],line:1694},"103":{loc:{start:{line:1695,column:22},end:{line:1695,column:35}},type:"binary-expr",locations:[{start:{line:1695,column:22},end:{line:1695,column:29}},{start:{line:1695,column:33},end:{line:1695,column:35}}],line:1695},"104":{loc:{start:{line:1699,column:16},end:{line:1702,column:17}},type:"if",locations:[{start:{line:1699,column:16},end:{line:1702,column:17}},{start:{line:1699,column:16},end:{line:1702,column:17}}],line:1699},"105":{loc:{start:{line:1749,column:12},end:{line:1752,column:13}},type:"if",locations:[{start:{line:1749,column:12},end:{line:1752,column:13}},{start:{line:1749,column:12},end:{line:1752,column:13}}],line:1749},"106":{loc:{start:{line:1749,column:16},end:{line:1749,column:54}},type:"binary-expr",locations:[{start:{line:1749,column:16},end:{line:1749,column:25}},{start:{line:1749,column:29},end:{line:1749,column:54}}],line:1749},"107":{loc:{start:{line:1754,column:23},end:{line:1754,column:48}},type:"binary-expr",locations:[{start:{line:1754,column:23},end:{line:1754,column:31}},{start:{line:1754,column:35},end:{line:1754,column:48}}],line:1754},"108":{loc:{start:{line:1755,column:22},end:{line:1755,column:35}},type:"binary-expr",locations:[{start:{line:1755,column:22},end:{line:1755,column:29}},{start:{line:1755,column:33},end:{line:1755,column:35}}],line:1755},"109":{loc:{start:{line:1759,column:16},end:{line:1762,column:17}},type:"if",locations:[{start:{line:1759,column:16},end:{line:1762,column:17}},{start:{line:1759,column:16},end:{line:1762,column:17}}],line:1759},"110":{loc:{start:{line:1765,column:27},end:{line:1765,column:52}},type:"binary-expr",locations:[{start:{line:1765,column:27},end:{line:1765,column:46}},{start:{line:1765,column:50},end:{line:1765,column:52}}],line:1765},"111":{loc:{start:{line:1795,column:23},end:{line:1795,column:48}},type:"binary-expr",locations:[{start:{line:1795,column:23},end:{line:1795,column:31}},{start:{line:1795,column:35},end:{line:1795,column:48}}],line:1795},"112":{loc:{start:{line:1816,column:21},end:{line:1816,column:33}},type:"binary-expr",locations:[{start:{line:1816,column:21},end:{line:1816,column:27}},{start:{line:1816,column:31},end:{line:1816,column:33}}],line:1816},"113":{loc:{start:{line:1818,column:12},end:{line:1841,column:13}},type:"if",locations:[{start:{line:1818,column:12},end:{line:1841,column:13}},{start:{line:1818,column:12},end:{line:1841,column:13}}],line:1818},"114":{loc:{start:{line:1821,column:20},end:{line:1834,column:21}},type:"if",locations:[{start:{line:1821,column:20},end:{line:1834,column:21}},{start:{line:1821,column:20},end:{line:1834,column:21}}],line:1821},"115":{loc:{start:{line:1827,column:28},end:{line:1832,column:29}},type:"if",locations:[{start:{line:1827,column:28},end:{line:1832,column:29}},{start:{line:1827,column:28},end:{line:1832,column:29}}],line:1827},"116":{loc:{start:{line:2021,column:19},end:{line:2021,column:50}},type:"binary-expr",locations:[{start:{line:2021,column:19},end:{line:2021,column:44}},{start:{line:2021,column:48},end:{line:2021,column:50}}],line:2021},"117":{loc:{start:{line:2031,column:19},end:{line:2031,column:55}},type:"binary-expr",locations:[{start:{line:2031,column:19},end:{line:2031,column:47}},{start:{line:2031,column:51},end:{line:2031,column:55}}],line:2031},"118":{loc:{start:{line:2057,column:19},end:{line:2057,column:69}},type:"binary-expr",locations:[{start:{line:2057,column:19},end:{line:2057,column:61}},{start:{line:2057,column:65},end:{line:2057,column:69}}],line:2057},"119":{loc:{start:{line:2067,column:19},end:{line:2067,column:61}},type:"binary-expr",locations:[{start:{line:2067,column:19},end:{line:2067,column:53}},{start:{line:2067,column:57},end:{line:2067,column:61}}],line:2067},"120":{loc:{start:{line:2078,column:19},end:{line:2078,column:65}},type:"binary-expr",locations:[{start:{line:2078,column:19},end:{line:2078,column:59}},{start:{line:2078,column:63},end:{line:2078,column:65}}],line:2078},"121":{loc:{start:{line:2088,column:19},end:{line:2088,column:48}},type:"binary-expr",locations:[{start:{line:2088,column:19},end:{line:2088,column:40}},{start:{line:2088,column:44},end:{line:2088,column:48}}],line:2088},"122":{loc:{start:{line:2098,column:19},end:{line:2098,column:57}},type:"binary-expr",locations:[{start:{line:2098,column:19},end:{line:2098,column:49}},{start:{line:2098,column:53},end:{line:2098,column:57}}],line:2098},"123":{loc:{start:{line:2110,column:19},end:{line:2110,column:66}},type:"binary-expr",locations:[{start:{line:2110,column:19},end:{line:2110,column:58}},{start:{line:2110,column:62},end:{line:2110,column:66}}],line:2110},"124":{loc:{start:{line:2122,column:19},end:{line:2122,column:73}},type:"binary-expr",locations:[{start:{line:2122,column:19},end:{line:2122,column:67}},{start:{line:2122,column:71},end:{line:2122,column:73}}],line:2122},"125":{loc:{start:{line:2173,column:19},end:{line:2173,column:77}},type:"binary-expr",locations:[{start:{line:2173,column:19},end:{line:2173,column:72}},{start:{line:2173,column:76},end:{line:2173,column:77}}],line:2173},"126":{loc:{start:{line:2194,column:12},end:{line:2197,column:13}},type:"if",locations:[{start:{line:2194,column:12},end:{line:2197,column:13}},{start:{line:2194,column:12},end:{line:2197,column:13}}],line:2194},"127":{loc:{start:{line:2194,column:16},end:{line:2194,column:54}},type:"binary-expr",locations:[{start:{line:2194,column:16},end:{line:2194,column:25}},{start:{line:2194,column:29},end:{line:2194,column:54}}],line:2194},"128":{loc:{start:{line:2199,column:23},end:{line:2199,column:48}},type:"binary-expr",locations:[{start:{line:2199,column:23},end:{line:2199,column:31}},{start:{line:2199,column:35},end:{line:2199,column:48}}],line:2199},"129":{loc:{start:{line:2200,column:22},end:{line:2200,column:35}},type:"binary-expr",locations:[{start:{line:2200,column:22},end:{line:2200,column:29}},{start:{line:2200,column:33},end:{line:2200,column:35}}],line:2200},"130":{loc:{start:{line:2204,column:16},end:{line:2207,column:17}},type:"if",locations:[{start:{line:2204,column:16},end:{line:2207,column:17}},{start:{line:2204,column:16},end:{line:2207,column:17}}],line:2204},"131":{loc:{start:{line:2210,column:27},end:{line:2210,column:52}},type:"binary-expr",locations:[{start:{line:2210,column:27},end:{line:2210,column:46}},{start:{line:2210,column:50},end:{line:2210,column:52}}],line:2210},"132":{loc:{start:{line:2368,column:23},end:{line:2368,column:48}},type:"binary-expr",locations:[{start:{line:2368,column:23},end:{line:2368,column:31}},{start:{line:2368,column:35},end:{line:2368,column:48}}],line:2368},"133":{loc:{start:{line:2372,column:16},end:{line:2377,column:17}},type:"if",locations:[{start:{line:2372,column:16},end:{line:2377,column:17}},{start:{line:2372,column:16},end:{line:2377,column:17}}],line:2372},"134":{loc:{start:{line:2397,column:23},end:{line:2397,column:48}},type:"binary-expr",locations:[{start:{line:2397,column:23},end:{line:2397,column:31}},{start:{line:2397,column:35},end:{line:2397,column:48}}],line:2397},"135":{loc:{start:{line:2401,column:16},end:{line:2406,column:17}},type:"if",locations:[{start:{line:2401,column:16},end:{line:2406,column:17}},{start:{line:2401,column:16},end:{line:2406,column:17}}],line:2401},"136":{loc:{start:{line:2593,column:23},end:{line:2593,column:48}},type:"binary-expr",locations:[{start:{line:2593,column:23},end:{line:2593,column:31}},{start:{line:2593,column:35},end:{line:2593,column:48}}],line:2593},"137":{loc:{start:{line:2597,column:16},end:{line:2613,column:17}},type:"if",locations:[{start:{line:2597,column:16},end:{line:2613,column:17}},{start:{line:2597,column:16},end:{line:2613,column:17}}],line:2597},"138":{loc:{start:{line:2606,column:24},end:{line:2611,column:25}},type:"if",locations:[{start:{line:2606,column:24},end:{line:2611,column:25}},{start:{line:2606,column:24},end:{line:2611,column:25}}],line:2606},"139":{loc:{start:{line:2767,column:12},end:{line:2770,column:13}},type:"if",locations:[{start:{line:2767,column:12},end:{line:2770,column:13}},{start:{line:2767,column:12},end:{line:2770,column:13}}],line:2767},"140":{loc:{start:{line:2767,column:16},end:{line:2767,column:53}},type:"binary-expr",locations:[{start:{line:2767,column:16},end:{line:2767,column:25}},{start:{line:2767,column:29},end:{line:2767,column:53}}],line:2767},"141":{loc:{start:{line:2772,column:23},end:{line:2772,column:48}},type:"binary-expr",locations:[{start:{line:2772,column:23},end:{line:2772,column:31}},{start:{line:2772,column:35},end:{line:2772,column:48}}],line:2772},"142":{loc:{start:{line:2773,column:21},end:{line:2773,column:33}},type:"binary-expr",locations:[{start:{line:2773,column:21},end:{line:2773,column:27}},{start:{line:2773,column:31},end:{line:2773,column:33}}],line:2773},"143":{loc:{start:{line:2785,column:12},end:{line:2790,column:13}},type:"if",locations:[{start:{line:2785,column:12},end:{line:2790,column:13}},{start:{line:2785,column:12},end:{line:2790,column:13}}],line:2785},"144":{loc:{start:{line:2862,column:12},end:{line:2866,column:13}},type:"if",locations:[{start:{line:2862,column:12},end:{line:2866,column:13}},{start:{line:2862,column:12},end:{line:2866,column:13}}],line:2862},"145":{loc:{start:{line:2862,column:16},end:{line:2862,column:77}},type:"binary-expr",locations:[{start:{line:2862,column:16},end:{line:2862,column:36}},{start:{line:2862,column:40},end:{line:2862,column:64}},{start:{line:2862,column:68},end:{line:2862,column:77}}],line:2862},"146":{loc:{start:{line:2868,column:21},end:{line:2868,column:33}},type:"binary-expr",locations:[{start:{line:2868,column:21},end:{line:2868,column:27}},{start:{line:2868,column:31},end:{line:2868,column:33}}],line:2868},"147":{loc:{start:{line:2890,column:23},end:{line:2890,column:67}},type:"cond-expr",locations:[{start:{line:2890,column:49},end:{line:2890,column:55}},{start:{line:2890,column:58},end:{line:2890,column:67}}],line:2890},"148":{loc:{start:{line:3001,column:12},end:{line:3005,column:13}},type:"if",locations:[{start:{line:3001,column:12},end:{line:3005,column:13}},{start:{line:3001,column:12},end:{line:3005,column:13}}],line:3001},"149":{loc:{start:{line:3001,column:16},end:{line:3001,column:83}},type:"binary-expr",locations:[{start:{line:3001,column:16},end:{line:3001,column:42}},{start:{line:3001,column:46},end:{line:3001,column:70}},{start:{line:3001,column:74},end:{line:3001,column:83}}],line:3001},"150":{loc:{start:{line:3007,column:12},end:{line:3010,column:13}},type:"if",locations:[{start:{line:3007,column:12},end:{line:3010,column:13}},{start:{line:3007,column:12},end:{line:3010,column:13}}],line:3007},"151":{loc:{start:{line:3007,column:16},end:{line:3007,column:53}},type:"binary-expr",locations:[{start:{line:3007,column:16},end:{line:3007,column:40}},{start:{line:3007,column:44},end:{line:3007,column:53}}],line:3007},"152":{loc:{start:{line:3012,column:21},end:{line:3012,column:33}},type:"binary-expr",locations:[{start:{line:3012,column:21},end:{line:3012,column:27}},{start:{line:3012,column:31},end:{line:3012,column:33}}],line:3012},"153":{loc:{start:{line:3072,column:12},end:{line:3074,column:13}},type:"if",locations:[{start:{line:3072,column:12},end:{line:3074,column:13}},{start:{line:3072,column:12},end:{line:3074,column:13}}],line:3072},"154":{loc:{start:{line:3072,column:16},end:{line:3072,column:78}},type:"binary-expr",locations:[{start:{line:3072,column:16},end:{line:3072,column:26}},{start:{line:3072,column:30},end:{line:3072,column:53}},{start:{line:3072,column:57},end:{line:3072,column:78}}],line:3072},"155":{loc:{start:{line:3098,column:12},end:{line:3100,column:13}},type:"if",locations:[{start:{line:3098,column:12},end:{line:3100,column:13}},{start:{line:3098,column:12},end:{line:3100,column:13}}],line:3098},"156":{loc:{start:{line:3102,column:23},end:{line:3102,column:48}},type:"binary-expr",locations:[{start:{line:3102,column:23},end:{line:3102,column:31}},{start:{line:3102,column:35},end:{line:3102,column:48}}],line:3102},"157":{loc:{start:{line:3106,column:16},end:{line:3119,column:17}},type:"if",locations:[{start:{line:3106,column:16},end:{line:3119,column:17}},{start:{line:3106,column:16},end:{line:3119,column:17}}],line:3106},"158":{loc:{start:{line:3112,column:24},end:{line:3117,column:25}},type:"if",locations:[{start:{line:3112,column:24},end:{line:3117,column:25}},{start:{line:3112,column:24},end:{line:3117,column:25}}],line:3112},"159":{loc:{start:{line:3136,column:16},end:{line:3138,column:17}},type:"if",locations:[{start:{line:3136,column:16},end:{line:3138,column:17}},{start:{line:3136,column:16},end:{line:3138,column:17}}],line:3136},"160":{loc:{start:{line:3136,column:19},end:{line:3136,column:45}},type:"binary-expr",locations:[{start:{line:3136,column:19},end:{line:3136,column:24}},{start:{line:3136,column:28},end:{line:3136,column:45}}],line:3136},"161":{loc:{start:{line:3159,column:16},end:{line:3164,column:17}},type:"if",locations:[{start:{line:3159,column:16},end:{line:3164,column:17}},{start:{line:3159,column:16},end:{line:3164,column:17}}],line:3159},"162":{loc:{start:{line:3172,column:23},end:{line:3172,column:48}},type:"binary-expr",locations:[{start:{line:3172,column:23},end:{line:3172,column:31}},{start:{line:3172,column:35},end:{line:3172,column:48}}],line:3172},"163":{loc:{start:{line:3180,column:12},end:{line:3189,column:13}},type:"if",locations:[{start:{line:3180,column:12},end:{line:3189,column:13}},{start:{line:3180,column:12},end:{line:3189,column:13}}],line:3180},"164":{loc:{start:{line:3196,column:12},end:{line:3211,column:13}},type:"if",locations:[{start:{line:3196,column:12},end:{line:3211,column:13}},{start:{line:3196,column:12},end:{line:3211,column:13}}],line:3196},"165":{loc:{start:{line:3308,column:23},end:{line:3308,column:48}},type:"binary-expr",locations:[{start:{line:3308,column:23},end:{line:3308,column:31}},{start:{line:3308,column:35},end:{line:3308,column:48}}],line:3308},"166":{loc:{start:{line:3334,column:23},end:{line:3334,column:48}},type:"binary-expr",locations:[{start:{line:3334,column:23},end:{line:3334,column:31}},{start:{line:3334,column:35},end:{line:3334,column:48}}],line:3334},"167":{loc:{start:{line:3361,column:23},end:{line:3361,column:48}},type:"binary-expr",locations:[{start:{line:3361,column:23},end:{line:3361,column:31}},{start:{line:3361,column:35},end:{line:3361,column:48}}],line:3361},"168":{loc:{start:{line:3362,column:21},end:{line:3362,column:33}},type:"binary-expr",locations:[{start:{line:3362,column:21},end:{line:3362,column:27}},{start:{line:3362,column:31},end:{line:3362,column:33}}],line:3362},"169":{loc:{start:{line:3363,column:33},end:{line:3363,column:66}},type:"binary-expr",locations:[{start:{line:3363,column:33},end:{line:3363,column:51}},{start:{line:3363,column:55},end:{line:3363,column:66}}],line:3363},"170":{loc:{start:{line:3367,column:16},end:{line:3372,column:17}},type:"if",locations:[{start:{line:3367,column:16},end:{line:3372,column:17}},{start:{line:3367,column:16},end:{line:3372,column:17}}],line:3367},"171":{loc:{start:{line:3392,column:23},end:{line:3392,column:48}},type:"binary-expr",locations:[{start:{line:3392,column:23},end:{line:3392,column:31}},{start:{line:3392,column:35},end:{line:3392,column:48}}],line:3392},"172":{loc:{start:{line:3433,column:23},end:{line:3433,column:48}},type:"binary-expr",locations:[{start:{line:3433,column:23},end:{line:3433,column:31}},{start:{line:3433,column:35},end:{line:3433,column:48}}],line:3433},"173":{loc:{start:{line:3460,column:23},end:{line:3460,column:48}},type:"binary-expr",locations:[{start:{line:3460,column:23},end:{line:3460,column:31}},{start:{line:3460,column:35},end:{line:3460,column:48}}],line:3460},"174":{loc:{start:{line:3461,column:21},end:{line:3461,column:33}},type:"binary-expr",locations:[{start:{line:3461,column:21},end:{line:3461,column:27}},{start:{line:3461,column:31},end:{line:3461,column:33}}],line:3461},"175":{loc:{start:{line:3462,column:33},end:{line:3462,column:66}},type:"binary-expr",locations:[{start:{line:3462,column:33},end:{line:3462,column:51}},{start:{line:3462,column:55},end:{line:3462,column:66}}],line:3462},"176":{loc:{start:{line:3466,column:16},end:{line:3471,column:17}},type:"if",locations:[{start:{line:3466,column:16},end:{line:3471,column:17}},{start:{line:3466,column:16},end:{line:3471,column:17}}],line:3466},"177":{loc:{start:{line:3497,column:23},end:{line:3497,column:48}},type:"binary-expr",locations:[{start:{line:3497,column:23},end:{line:3497,column:31}},{start:{line:3497,column:35},end:{line:3497,column:48}}],line:3497},"178":{loc:{start:{line:3498,column:21},end:{line:3498,column:33}},type:"binary-expr",locations:[{start:{line:3498,column:21},end:{line:3498,column:27}},{start:{line:3498,column:31},end:{line:3498,column:33}}],line:3498},"179":{loc:{start:{line:3499,column:33},end:{line:3499,column:66}},type:"binary-expr",locations:[{start:{line:3499,column:33},end:{line:3499,column:51}},{start:{line:3499,column:55},end:{line:3499,column:66}}],line:3499},"180":{loc:{start:{line:3503,column:16},end:{line:3508,column:17}},type:"if",locations:[{start:{line:3503,column:16},end:{line:3508,column:17}},{start:{line:3503,column:16},end:{line:3508,column:17}}],line:3503},"181":{loc:{start:{line:3528,column:23},end:{line:3528,column:48}},type:"binary-expr",locations:[{start:{line:3528,column:23},end:{line:3528,column:31}},{start:{line:3528,column:35},end:{line:3528,column:48}}],line:3528},"182":{loc:{start:{line:3532,column:16},end:{line:3537,column:17}},type:"if",locations:[{start:{line:3532,column:16},end:{line:3537,column:17}},{start:{line:3532,column:16},end:{line:3537,column:17}}],line:3532},"183":{loc:{start:{line:3558,column:23},end:{line:3558,column:48}},type:"binary-expr",locations:[{start:{line:3558,column:23},end:{line:3558,column:31}},{start:{line:3558,column:35},end:{line:3558,column:48}}],line:3558},"184":{loc:{start:{line:3586,column:23},end:{line:3586,column:48}},type:"binary-expr",locations:[{start:{line:3586,column:23},end:{line:3586,column:31}},{start:{line:3586,column:35},end:{line:3586,column:48}}],line:3586},"185":{loc:{start:{line:3613,column:23},end:{line:3613,column:48}},type:"binary-expr",locations:[{start:{line:3613,column:23},end:{line:3613,column:31}},{start:{line:3613,column:35},end:{line:3613,column:48}}],line:3613},"186":{loc:{start:{line:3617,column:16},end:{line:3622,column:17}},type:"if",locations:[{start:{line:3617,column:16},end:{line:3622,column:17}},{start:{line:3617,column:16},end:{line:3622,column:17}}],line:3617},"187":{loc:{start:{line:3643,column:23},end:{line:3643,column:48}},type:"binary-expr",locations:[{start:{line:3643,column:23},end:{line:3643,column:31}},{start:{line:3643,column:35},end:{line:3643,column:48}}],line:3643},"188":{loc:{start:{line:3647,column:16},end:{line:3652,column:17}},type:"if",locations:[{start:{line:3647,column:16},end:{line:3652,column:17}},{start:{line:3647,column:16},end:{line:3652,column:17}}],line:3647},"189":{loc:{start:{line:3673,column:23},end:{line:3673,column:48}},type:"binary-expr",locations:[{start:{line:3673,column:23},end:{line:3673,column:31}},{start:{line:3673,column:35},end:{line:3673,column:48}}],line:3673},"190":{loc:{start:{line:3700,column:25},end:{line:3700,column:46}},type:"binary-expr",locations:[{start:{line:3700,column:25},end:{line:3700,column:39}},{start:{line:3700,column:43},end:{line:3700,column:46}}],line:3700},"191":{loc:{start:{line:3702,column:12},end:{line:3706,column:13}},type:"if",locations:[{start:{line:3702,column:12},end:{line:3706,column:13}},{start:{line:3702,column:12},end:{line:3706,column:13}}],line:3702},"192":{loc:{start:{line:3709,column:16},end:{line:3712,column:32}},type:"binary-expr",locations:[{start:{line:3709,column:16},end:{line:3709,column:35}},{start:{line:3710,column:16},end:{line:3710,column:31}},{start:{line:3711,column:16},end:{line:3711,column:33}},{start:{line:3712,column:16},end:{line:3712,column:32}}],line:3709},"193":{loc:{start:{line:3715,column:30},end:{line:3715,column:62}},type:"binary-expr",locations:[{start:{line:3715,column:30},end:{line:3715,column:45}},{start:{line:3715,column:49},end:{line:3715,column:62}}],line:3715},"194":{loc:{start:{line:3716,column:33},end:{line:3716,column:68}},type:"binary-expr",locations:[{start:{line:3716,column:33},end:{line:3716,column:51}},{start:{line:3716,column:55},end:{line:3716,column:68}}],line:3716},"195":{loc:{start:{line:3717,column:29},end:{line:3717,column:60}},type:"binary-expr",locations:[{start:{line:3717,column:29},end:{line:3717,column:43}},{start:{line:3717,column:47},end:{line:3717,column:60}}],line:3717},"196":{loc:{start:{line:3718,column:31},end:{line:3718,column:64}},type:"binary-expr",locations:[{start:{line:3718,column:31},end:{line:3718,column:47}},{start:{line:3718,column:51},end:{line:3718,column:64}}],line:3718},"197":{loc:{start:{line:3719,column:30},end:{line:3719,column:62}},type:"binary-expr",locations:[{start:{line:3719,column:30},end:{line:3719,column:45}},{start:{line:3719,column:49},end:{line:3719,column:62}}],line:3719},"198":{loc:{start:{line:3722,column:34},end:{line:3722,column:70}},type:"binary-expr",locations:[{start:{line:3722,column:34},end:{line:3722,column:53}},{start:{line:3722,column:57},end:{line:3722,column:70}}],line:3722},"199":{loc:{start:{line:3723,column:43},end:{line:3723,column:88}},type:"binary-expr",locations:[{start:{line:3723,column:43},end:{line:3723,column:71}},{start:{line:3723,column:75},end:{line:3723,column:88}}],line:3723},"200":{loc:{start:{line:3732,column:24},end:{line:3735,column:25}},type:"if",locations:[{start:{line:3732,column:24},end:{line:3735,column:25}},{start:{line:3732,column:24},end:{line:3735,column:25}}],line:3732},"201":{loc:{start:{line:3738,column:39},end:{line:3738,column:96}},type:"binary-expr",locations:[{start:{line:3738,column:39},end:{line:3738,column:65}},{start:{line:3738,column:69},end:{line:3738,column:96}}],line:3738},"202":{loc:{start:{line:3739,column:24},end:{line:3776,column:25}},type:"if",locations:[{start:{line:3739,column:24},end:{line:3776,column:25}},{start:{line:3739,column:24},end:{line:3776,column:25}}],line:3739},"203":{loc:{start:{line:3743,column:28},end:{line:3756,column:29}},type:"if",locations:[{start:{line:3743,column:28},end:{line:3756,column:29}},{start:{line:3743,column:28},end:{line:3756,column:29}}],line:3743},"204":{loc:{start:{line:3749,column:32},end:{line:3755,column:33}},type:"if",locations:[{start:{line:3749,column:32},end:{line:3755,column:33}},{start:{line:3749,column:32},end:{line:3755,column:33}}],line:3749},"205":{loc:{start:{line:3762,column:28},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3762,column:28},end:{line:3775,column:29}},{start:{line:3762,column:28},end:{line:3775,column:29}}],line:3762},"206":{loc:{start:{line:3762,column:32},end:{line:3762,column:72}},type:"binary-expr",locations:[{start:{line:3762,column:32},end:{line:3762,column:56}},{start:{line:3762,column:60},end:{line:3762,column:72}}],line:3762},"207":{loc:{start:{line:3769,column:33},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3769,column:33},end:{line:3775,column:29}},{start:{line:3769,column:33},end:{line:3775,column:29}}],line:3769},"208":{loc:{start:{line:3769,column:37},end:{line:3769,column:81}},type:"binary-expr",locations:[{start:{line:3769,column:37},end:{line:3769,column:63}},{start:{line:3769,column:67},end:{line:3769,column:81}}],line:3769},"209":{loc:{start:{line:3782,column:20},end:{line:3784,column:21}},type:"if",locations:[{start:{line:3782,column:20},end:{line:3784,column:21}},{start:{line:3782,column:20},end:{line:3784,column:21}}],line:3782},"210":{loc:{start:{line:3805,column:23},end:{line:3805,column:48}},type:"binary-expr",locations:[{start:{line:3805,column:23},end:{line:3805,column:31}},{start:{line:3805,column:35},end:{line:3805,column:48}}],line:3805},"211":{loc:{start:{line:3889,column:12},end:{line:3893,column:13}},type:"if",locations:[{start:{line:3889,column:12},end:{line:3893,column:13}},{start:{line:3889,column:12},end:{line:3893,column:13}}],line:3889},"212":{loc:{start:{line:3889,column:16},end:{line:3889,column:78}},type:"binary-expr",locations:[{start:{line:3889,column:16},end:{line:3889,column:37}},{start:{line:3889,column:41},end:{line:3889,column:65}},{start:{line:3889,column:69},end:{line:3889,column:78}}],line:3889},"213":{loc:{start:{line:3895,column:23},end:{line:3895,column:48}},type:"binary-expr",locations:[{start:{line:3895,column:23},end:{line:3895,column:31}},{start:{line:3895,column:35},end:{line:3895,column:48}}],line:3895},"214":{loc:{start:{line:3896,column:21},end:{line:3896,column:33}},type:"binary-expr",locations:[{start:{line:3896,column:21},end:{line:3896,column:27}},{start:{line:3896,column:31},end:{line:3896,column:33}}],line:3896},"215":{loc:{start:{line:3899,column:12},end:{line:3901,column:13}},type:"if",locations:[{start:{line:3899,column:12},end:{line:3901,column:13}},{start:{line:3899,column:12},end:{line:3901,column:13}}],line:3899},"216":{loc:{start:{line:3899,column:17},end:{line:3899,column:39}},type:"binary-expr",locations:[{start:{line:3899,column:17},end:{line:3899,column:33}},{start:{line:3899,column:37},end:{line:3899,column:39}}],line:3899},"217":{loc:{start:{line:3903,column:12},end:{line:3906,column:13}},type:"if",locations:[{start:{line:3903,column:12},end:{line:3906,column:13}},{start:{line:3903,column:12},end:{line:3906,column:13}}],line:3903},"218":{loc:{start:{line:3909,column:16},end:{line:3915,column:17}},type:"if",locations:[{start:{line:3909,column:16},end:{line:3915,column:17}},{start:{line:3909,column:16},end:{line:3915,column:17}}],line:3909},"219":{loc:{start:{line:3972,column:12},end:{line:3976,column:13}},type:"if",locations:[{start:{line:3972,column:12},end:{line:3976,column:13}},{start:{line:3972,column:12},end:{line:3976,column:13}}],line:3972},"220":{loc:{start:{line:3972,column:16},end:{line:3972,column:78}},type:"binary-expr",locations:[{start:{line:3972,column:16},end:{line:3972,column:37}},{start:{line:3972,column:41},end:{line:3972,column:65}},{start:{line:3972,column:69},end:{line:3972,column:78}}],line:3972},"221":{loc:{start:{line:3978,column:23},end:{line:3978,column:48}},type:"binary-expr",locations:[{start:{line:3978,column:23},end:{line:3978,column:31}},{start:{line:3978,column:35},end:{line:3978,column:48}}],line:3978},"222":{loc:{start:{line:3979,column:21},end:{line:3979,column:33}},type:"binary-expr",locations:[{start:{line:3979,column:21},end:{line:3979,column:27}},{start:{line:3979,column:31},end:{line:3979,column:33}}],line:3979},"223":{loc:{start:{line:3983,column:12},end:{line:3985,column:13}},type:"if",locations:[{start:{line:3983,column:12},end:{line:3985,column:13}},{start:{line:3983,column:12},end:{line:3985,column:13}}],line:3983},"224":{loc:{start:{line:3987,column:29},end:{line:3987,column:62}},type:"binary-expr",locations:[{start:{line:3987,column:29},end:{line:3987,column:47}},{start:{line:3987,column:51},end:{line:3987,column:62}}],line:3987},"225":{loc:{start:{line:4004,column:20},end:{line:4009,column:21}},type:"if",locations:[{start:{line:4004,column:20},end:{line:4009,column:21}},{start:{line:4004,column:20},end:{line:4009,column:21}}],line:4004},"226":{loc:{start:{line:4072,column:20},end:{line:4072,column:31}},type:"binary-expr",locations:[{start:{line:4072,column:20},end:{line:4072,column:25}},{start:{line:4072,column:29},end:{line:4072,column:31}}],line:4072},"227":{loc:{start:{line:4073,column:26},end:{line:4073,column:43}},type:"binary-expr",locations:[{start:{line:4073,column:26},end:{line:4073,column:37}},{start:{line:4073,column:41},end:{line:4073,column:43}}],line:4073},"228":{loc:{start:{line:4082,column:34},end:{line:4082,column:55}},type:"binary-expr",locations:[{start:{line:4082,column:34},end:{line:4082,column:47}},{start:{line:4082,column:51},end:{line:4082,column:55}}],line:4082},"229":{loc:{start:{line:4192,column:20},end:{line:4192,column:31}},type:"binary-expr",locations:[{start:{line:4192,column:20},end:{line:4192,column:25}},{start:{line:4192,column:29},end:{line:4192,column:31}}],line:4192},"230":{loc:{start:{line:4193,column:26},end:{line:4193,column:43}},type:"binary-expr",locations:[{start:{line:4193,column:26},end:{line:4193,column:37}},{start:{line:4193,column:41},end:{line:4193,column:43}}],line:4193},"231":{loc:{start:{line:4258,column:20},end:{line:4258,column:31}},type:"binary-expr",locations:[{start:{line:4258,column:20},end:{line:4258,column:25}},{start:{line:4258,column:29},end:{line:4258,column:31}}],line:4258},"232":{loc:{start:{line:4259,column:26},end:{line:4259,column:43}},type:"binary-expr",locations:[{start:{line:4259,column:26},end:{line:4259,column:37}},{start:{line:4259,column:41},end:{line:4259,column:43}}],line:4259},"233":{loc:{start:{line:4263,column:34},end:{line:4263,column:55}},type:"binary-expr",locations:[{start:{line:4263,column:34},end:{line:4263,column:47}},{start:{line:4263,column:51},end:{line:4263,column:55}}],line:4263},"234":{loc:{start:{line:4273,column:12},end:{line:4275,column:13}},type:"if",locations:[{start:{line:4273,column:12},end:{line:4275,column:13}},{start:{line:4273,column:12},end:{line:4275,column:13}}],line:4273},"235":{loc:{start:{line:4273,column:16},end:{line:4273,column:59}},type:"binary-expr",locations:[{start:{line:4273,column:16},end:{line:4273,column:36}},{start:{line:4273,column:40},end:{line:4273,column:59}}],line:4273},"236":{loc:{start:{line:4276,column:12},end:{line:4278,column:13}},type:"if",locations:[{start:{line:4276,column:12},end:{line:4278,column:13}},{start:{line:4276,column:12},end:{line:4278,column:13}}],line:4276},"237":{loc:{start:{line:4276,column:16},end:{line:4276,column:60}},type:"binary-expr",locations:[{start:{line:4276,column:16},end:{line:4276,column:37}},{start:{line:4276,column:41},end:{line:4276,column:60}}],line:4276},"238":{loc:{start:{line:4279,column:12},end:{line:4282,column:13}},type:"if",locations:[{start:{line:4279,column:12},end:{line:4282,column:13}},{start:{line:4279,column:12},end:{line:4282,column:13}}],line:4279},"239":{loc:{start:{line:4388,column:32},end:{line:4388,column:59}},type:"binary-expr",locations:[{start:{line:4388,column:32},end:{line:4388,column:51}},{start:{line:4388,column:55},end:{line:4388,column:59}}],line:4388},"240":{loc:{start:{line:4402,column:12},end:{line:4405,column:13}},type:"if",locations:[{start:{line:4402,column:12},end:{line:4405,column:13}},{start:{line:4402,column:12},end:{line:4405,column:13}}],line:4402},"241":{loc:{start:{line:4406,column:12},end:{line:4408,column:13}},type:"if",locations:[{start:{line:4406,column:12},end:{line:4408,column:13}},{start:{line:4406,column:12},end:{line:4408,column:13}}],line:4406},"242":{loc:{start:{line:4406,column:16},end:{line:4406,column:55}},type:"binary-expr",locations:[{start:{line:4406,column:16},end:{line:4406,column:21}},{start:{line:4406,column:25},end:{line:4406,column:55}}],line:4406},"243":{loc:{start:{line:4411,column:32},end:{line:4411,column:69}},type:"binary-expr",locations:[{start:{line:4411,column:32},end:{line:4411,column:49}},{start:{line:4411,column:53},end:{line:4411,column:69}}],line:4411},"244":{loc:{start:{line:4550,column:41},end:{line:4551,column:53}},type:"cond-expr",locations:[{start:{line:4551,column:16},end:{line:4551,column:46}},{start:{line:4551,column:49},end:{line:4551,column:53}}],line:4550},"245":{loc:{start:{line:4570,column:12},end:{line:4572,column:13}},type:"if",locations:[{start:{line:4570,column:12},end:{line:4572,column:13}},{start:{line:4570,column:12},end:{line:4572,column:13}}],line:4570},"246":{loc:{start:{line:4570,column:16},end:{line:4570,column:49}},type:"binary-expr",locations:[{start:{line:4570,column:16},end:{line:4570,column:19}},{start:{line:4570,column:23},end:{line:4570,column:49}}],line:4570},"247":{loc:{start:{line:4574,column:12},end:{line:4576,column:13}},type:"if",locations:[{start:{line:4574,column:12},end:{line:4576,column:13}},{start:{line:4574,column:12},end:{line:4576,column:13}}],line:4574},"248":{loc:{start:{line:4595,column:12},end:{line:4597,column:13}},type:"if",locations:[{start:{line:4595,column:12},end:{line:4597,column:13}},{start:{line:4595,column:12},end:{line:4597,column:13}}],line:4595},"249":{loc:{start:{line:4598,column:12},end:{line:4604,column:13}},type:"if",locations:[{start:{line:4598,column:12},end:{line:4604,column:13}},{start:{line:4598,column:12},end:{line:4604,column:13}}],line:4598},"250":{loc:{start:{line:4605,column:12},end:{line:4610,column:13}},type:"if",locations:[{start:{line:4605,column:12},end:{line:4610,column:13}},{start:{line:4605,column:12},end:{line:4610,column:13}}],line:4605},"251":{loc:{start:{line:4618,column:12},end:{line:4623,column:13}},type:"if",locations:[{start:{line:4618,column:12},end:{line:4623,column:13}},{start:{line:4618,column:12},end:{line:4623,column:13}}],line:4618},"252":{loc:{start:{line:4643,column:12},end:{line:4645,column:13}},type:"if",locations:[{start:{line:4643,column:12},end:{line:4645,column:13}},{start:{line:4643,column:12},end:{line:4645,column:13}}],line:4643},"253":{loc:{start:{line:4649,column:12},end:{line:4651,column:13}},type:"if",locations:[{start:{line:4649,column:12},end:{line:4651,column:13}},{start:{line:4649,column:12},end:{line:4651,column:13}}],line:4649},"254":{loc:{start:{line:4653,column:12},end:{line:4656,column:13}},type:"if",locations:[{start:{line:4653,column:12},end:{line:4656,column:13}},{start:{line:4653,column:12},end:{line:4656,column:13}}],line:4653},"255":{loc:{start:{line:4653,column:16},end:{line:4653,column:86}},type:"binary-expr",locations:[{start:{line:4653,column:16},end:{line:4653,column:35}},{start:{line:4653,column:39},end:{line:4653,column:86}}],line:4653},"256":{loc:{start:{line:4658,column:12},end:{line:4661,column:13}},type:"if",locations:[{start:{line:4658,column:12},end:{line:4661,column:13}},{start:{line:4658,column:12},end:{line:4661,column:13}}],line:4658},"257":{loc:{start:{line:4658,column:16},end:{line:4658,column:104}},type:"binary-expr",locations:[{start:{line:4658,column:16},end:{line:4658,column:35}},{start:{line:4658,column:39},end:{line:4658,column:104}}],line:4658},"258":{loc:{start:{line:4663,column:12},end:{line:4665,column:13}},type:"if",locations:[{start:{line:4663,column:12},end:{line:4665,column:13}},{start:{line:4663,column:12},end:{line:4665,column:13}}],line:4663},"259":{loc:{start:{line:4663,column:16},end:{line:4663,column:85}},type:"binary-expr",locations:[{start:{line:4663,column:16},end:{line:4663,column:40}},{start:{line:4663,column:44},end:{line:4663,column:85}}],line:4663},"260":{loc:{start:{line:4678,column:31},end:{line:4678,column:83}},type:"cond-expr",locations:[{start:{line:4678,column:63},end:{line:4678,column:71}},{start:{line:4678,column:74},end:{line:4678,column:83}}],line:4678},"261":{loc:{start:{line:4694,column:12},end:{line:4696,column:13}},type:"if",locations:[{start:{line:4694,column:12},end:{line:4696,column:13}},{start:{line:4694,column:12},end:{line:4696,column:13}}],line:4694},"262":{loc:{start:{line:4698,column:12},end:{line:4700,column:13}},type:"if",locations:[{start:{line:4698,column:12},end:{line:4700,column:13}},{start:{line:4698,column:12},end:{line:4700,column:13}}],line:4698},"263":{loc:{start:{line:4709,column:12},end:{line:4711,column:13}},type:"if",locations:[{start:{line:4709,column:12},end:{line:4711,column:13}},{start:{line:4709,column:12},end:{line:4711,column:13}}],line:4709},"264":{loc:{start:{line:4738,column:12},end:{line:4740,column:13}},type:"if",locations:[{start:{line:4738,column:12},end:{line:4740,column:13}},{start:{line:4738,column:12},end:{line:4740,column:13}}],line:4738},"265":{loc:{start:{line:4742,column:12},end:{line:4744,column:13}},type:"if",locations:[{start:{line:4742,column:12},end:{line:4744,column:13}},{start:{line:4742,column:12},end:{line:4744,column:13}}],line:4742},"266":{loc:{start:{line:4746,column:12},end:{line:4748,column:13}},type:"if",locations:[{start:{line:4746,column:12},end:{line:4748,column:13}},{start:{line:4746,column:12},end:{line:4748,column:13}}],line:4746},"267":{loc:{start:{line:4746,column:16},end:{line:4746,column:73}},type:"binary-expr",locations:[{start:{line:4746,column:16},end:{line:4746,column:48}},{start:{line:4746,column:52},end:{line:4746,column:73}}],line:4746},"268":{loc:{start:{line:4749,column:12},end:{line:4751,column:13}},type:"if",locations:[{start:{line:4749,column:12},end:{line:4751,column:13}},{start:{line:4749,column:12},end:{line:4751,column:13}}],line:4749},"269":{loc:{start:{line:4749,column:16},end:{line:4749,column:69}},type:"binary-expr",locations:[{start:{line:4749,column:16},end:{line:4749,column:46}},{start:{line:4749,column:50},end:{line:4749,column:69}}],line:4749},"270":{loc:{start:{line:4752,column:12},end:{line:4754,column:13}},type:"if",locations:[{start:{line:4752,column:12},end:{line:4754,column:13}},{start:{line:4752,column:12},end:{line:4754,column:13}}],line:4752},"271":{loc:{start:{line:4752,column:16},end:{line:4752,column:71}},type:"binary-expr",locations:[{start:{line:4752,column:16},end:{line:4752,column:47}},{start:{line:4752,column:51},end:{line:4752,column:71}}],line:4752},"272":{loc:{start:{line:4755,column:12},end:{line:4757,column:13}},type:"if",locations:[{start:{line:4755,column:12},end:{line:4757,column:13}},{start:{line:4755,column:12},end:{line:4757,column:13}}],line:4755},"273":{loc:{start:{line:4755,column:16},end:{line:4755,column:73}},type:"binary-expr",locations:[{start:{line:4755,column:16},end:{line:4755,column:48}},{start:{line:4755,column:52},end:{line:4755,column:73}}],line:4755},"274":{loc:{start:{line:4783,column:12},end:{line:4785,column:13}},type:"if",locations:[{start:{line:4783,column:12},end:{line:4785,column:13}},{start:{line:4783,column:12},end:{line:4785,column:13}}],line:4783},"275":{loc:{start:{line:4787,column:12},end:{line:4789,column:13}},type:"if",locations:[{start:{line:4787,column:12},end:{line:4789,column:13}},{start:{line:4787,column:12},end:{line:4789,column:13}}],line:4787},"276":{loc:{start:{line:4814,column:12},end:{line:4816,column:13}},type:"if",locations:[{start:{line:4814,column:12},end:{line:4816,column:13}},{start:{line:4814,column:12},end:{line:4816,column:13}}],line:4814},"277":{loc:{start:{line:4818,column:12},end:{line:4820,column:13}},type:"if",locations:[{start:{line:4818,column:12},end:{line:4820,column:13}},{start:{line:4818,column:12},end:{line:4820,column:13}}],line:4818},"278":{loc:{start:{line:4821,column:12},end:{line:4823,column:13}},type:"if",locations:[{start:{line:4821,column:12},end:{line:4823,column:13}},{start:{line:4821,column:12},end:{line:4823,column:13}}],line:4821},"279":{loc:{start:{line:4846,column:12},end:{line:4848,column:13}},type:"if",locations:[{start:{line:4846,column:12},end:{line:4848,column:13}},{start:{line:4846,column:12},end:{line:4848,column:13}}],line:4846},"280":{loc:{start:{line:4850,column:12},end:{line:4852,column:13}},type:"if",locations:[{start:{line:4850,column:12},end:{line:4852,column:13}},{start:{line:4850,column:12},end:{line:4852,column:13}}],line:4850},"281":{loc:{start:{line:4860,column:12},end:{line:4862,column:13}},type:"if",locations:[{start:{line:4860,column:12},end:{line:4862,column:13}},{start:{line:4860,column:12},end:{line:4862,column:13}}],line:4860},"282":{loc:{start:{line:4883,column:12},end:{line:4885,column:13}},type:"if",locations:[{start:{line:4883,column:12},end:{line:4885,column:13}},{start:{line:4883,column:12},end:{line:4885,column:13}}],line:4883},"283":{loc:{start:{line:4887,column:12},end:{line:4889,column:13}},type:"if",locations:[{start:{line:4887,column:12},end:{line:4889,column:13}},{start:{line:4887,column:12},end:{line:4889,column:13}}],line:4887},"284":{loc:{start:{line:4894,column:12},end:{line:4896,column:13}},type:"if",locations:[{start:{line:4894,column:12},end:{line:4896,column:13}},{start:{line:4894,column:12},end:{line:4896,column:13}}],line:4894},"285":{loc:{start:{line:4894,column:16},end:{line:4894,column:73}},type:"binary-expr",locations:[{start:{line:4894,column:16},end:{line:4894,column:48}},{start:{line:4894,column:52},end:{line:4894,column:73}}],line:4894},"286":{loc:{start:{line:4897,column:12},end:{line:4899,column:13}},type:"if",locations:[{start:{line:4897,column:12},end:{line:4899,column:13}},{start:{line:4897,column:12},end:{line:4899,column:13}}],line:4897},"287":{loc:{start:{line:4897,column:16},end:{line:4897,column:69}},type:"binary-expr",locations:[{start:{line:4897,column:16},end:{line:4897,column:46}},{start:{line:4897,column:50},end:{line:4897,column:69}}],line:4897},"288":{loc:{start:{line:4900,column:12},end:{line:4902,column:13}},type:"if",locations:[{start:{line:4900,column:12},end:{line:4902,column:13}},{start:{line:4900,column:12},end:{line:4902,column:13}}],line:4900},"289":{loc:{start:{line:4900,column:16},end:{line:4900,column:71}},type:"binary-expr",locations:[{start:{line:4900,column:16},end:{line:4900,column:47}},{start:{line:4900,column:51},end:{line:4900,column:71}}],line:4900},"290":{loc:{start:{line:4903,column:12},end:{line:4905,column:13}},type:"if",locations:[{start:{line:4903,column:12},end:{line:4905,column:13}},{start:{line:4903,column:12},end:{line:4905,column:13}}],line:4903},"291":{loc:{start:{line:4903,column:16},end:{line:4903,column:73}},type:"binary-expr",locations:[{start:{line:4903,column:16},end:{line:4903,column:48}},{start:{line:4903,column:52},end:{line:4903,column:73}}],line:4903},"292":{loc:{start:{line:4929,column:12},end:{line:4931,column:13}},type:"if",locations:[{start:{line:4929,column:12},end:{line:4931,column:13}},{start:{line:4929,column:12},end:{line:4931,column:13}}],line:4929},"293":{loc:{start:{line:4933,column:12},end:{line:4935,column:13}},type:"if",locations:[{start:{line:4933,column:12},end:{line:4935,column:13}},{start:{line:4933,column:12},end:{line:4935,column:13}}],line:4933},"294":{loc:{start:{line:4958,column:12},end:{line:4960,column:13}},type:"if",locations:[{start:{line:4958,column:12},end:{line:4960,column:13}},{start:{line:4958,column:12},end:{line:4960,column:13}}],line:4958},"295":{loc:{start:{line:4962,column:12},end:{line:4964,column:13}},type:"if",locations:[{start:{line:4962,column:12},end:{line:4964,column:13}},{start:{line:4962,column:12},end:{line:4964,column:13}}],line:4962},"296":{loc:{start:{line:4965,column:12},end:{line:4967,column:13}},type:"if",locations:[{start:{line:4965,column:12},end:{line:4967,column:13}},{start:{line:4965,column:12},end:{line:4967,column:13}}],line:4965},"297":{loc:{start:{line:4990,column:12},end:{line:4992,column:13}},type:"if",locations:[{start:{line:4990,column:12},end:{line:4992,column:13}},{start:{line:4990,column:12},end:{line:4992,column:13}}],line:4990},"298":{loc:{start:{line:4995,column:12},end:{line:5047,column:13}},type:"if",locations:[{start:{line:4995,column:12},end:{line:5047,column:13}},{start:{line:4995,column:12},end:{line:5047,column:13}}],line:4995},"299":{loc:{start:{line:4995,column:16},end:{line:5002,column:41}},type:"binary-expr",locations:[{start:{line:4995,column:16},end:{line:4995,column:58}},{start:{line:4996,column:16},end:{line:5002,column:41}}],line:4995},"300":{loc:{start:{line:5008,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5008,column:17},end:{line:5047,column:13}},{start:{line:5008,column:17},end:{line:5047,column:13}}],line:5008},"301":{loc:{start:{line:5008,column:21},end:{line:5018,column:37}},type:"binary-expr",locations:[{start:{line:5008,column:21},end:{line:5008,column:40}},{start:{line:5009,column:16},end:{line:5018,column:37}}],line:5008},"302":{loc:{start:{line:5025,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5025,column:17},end:{line:5047,column:13}},{start:{line:5025,column:17},end:{line:5047,column:13}}],line:5025},"303":{loc:{start:{line:5025,column:21},end:{line:5032,column:37}},type:"binary-expr",locations:[{start:{line:5025,column:21},end:{line:5025,column:43}},{start:{line:5026,column:16},end:{line:5032,column:37}}],line:5025},"304":{loc:{start:{line:5039,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5039,column:17},end:{line:5047,column:13}},{start:{line:5039,column:17},end:{line:5047,column:13}}],line:5039},"305":{loc:{start:{line:5039,column:21},end:{line:5040,column:41}},type:"binary-expr",locations:[{start:{line:5039,column:21},end:{line:5039,column:74}},{start:{line:5040,column:16},end:{line:5040,column:41}}],line:5039},"306":{loc:{start:{line:5045,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5045,column:17},end:{line:5047,column:13}},{start:{line:5045,column:17},end:{line:5047,column:13}}],line:5045},"307":{loc:{start:{line:5108,column:12},end:{line:5110,column:13}},type:"if",locations:[{start:{line:5108,column:12},end:{line:5110,column:13}},{start:{line:5108,column:12},end:{line:5110,column:13}}],line:5108},"308":{loc:{start:{line:5113,column:16},end:{line:5116,column:17}},type:"if",locations:[{start:{line:5113,column:16},end:{line:5116,column:17}},{start:{line:5113,column:16},end:{line:5116,column:17}}],line:5113},"309":{loc:{start:{line:5118,column:16},end:{line:5123,column:17}},type:"if",locations:[{start:{line:5118,column:16},end:{line:5123,column:17}},{start:{line:5118,column:16},end:{line:5123,column:17}}],line:5118},"310":{loc:{start:{line:5118,column:20},end:{line:5118,column:65}},type:"binary-expr",locations:[{start:{line:5118,column:20},end:{line:5118,column:39}},{start:{line:5118,column:43},end:{line:5118,column:65}}],line:5118},"311":{loc:{start:{line:5154,column:12},end:{line:5157,column:13}},type:"if",locations:[{start:{line:5154,column:12},end:{line:5157,column:13}},{start:{line:5154,column:12},end:{line:5157,column:13}}],line:5154},"312":{loc:{start:{line:5158,column:19},end:{line:5158,column:29}},type:"binary-expr",locations:[{start:{line:5158,column:19},end:{line:5158,column:23}},{start:{line:5158,column:27},end:{line:5158,column:29}}],line:5158},"313":{loc:{start:{line:5161,column:16},end:{line:5166,column:17}},type:"if",locations:[{start:{line:5161,column:16},end:{line:5166,column:17}},{start:{line:5161,column:16},end:{line:5166,column:17}}],line:5161},"314":{loc:{start:{line:5225,column:20},end:{line:5225,column:31}},type:"binary-expr",locations:[{start:{line:5225,column:20},end:{line:5225,column:25}},{start:{line:5225,column:29},end:{line:5225,column:31}}],line:5225},"315":{loc:{start:{line:5226,column:26},end:{line:5226,column:43}},type:"binary-expr",locations:[{start:{line:5226,column:26},end:{line:5226,column:37}},{start:{line:5226,column:41},end:{line:5226,column:43}}],line:5226},"316":{loc:{start:{line:5235,column:12},end:{line:5237,column:13}},type:"if",locations:[{start:{line:5235,column:12},end:{line:5237,column:13}},{start:{line:5235,column:12},end:{line:5237,column:13}}],line:5235},"317":{loc:{start:{line:5238,column:12},end:{line:5240,column:13}},type:"if",locations:[{start:{line:5238,column:12},end:{line:5240,column:13}},{start:{line:5238,column:12},end:{line:5240,column:13}}],line:5238},"318":{loc:{start:{line:5241,column:12},end:{line:5243,column:13}},type:"if",locations:[{start:{line:5241,column:12},end:{line:5243,column:13}},{start:{line:5241,column:12},end:{line:5243,column:13}}],line:5241},"319":{loc:{start:{line:5244,column:12},end:{line:5246,column:13}},type:"if",locations:[{start:{line:5244,column:12},end:{line:5246,column:13}},{start:{line:5244,column:12},end:{line:5246,column:13}}],line:5244},"320":{loc:{start:{line:5249,column:12},end:{line:5251,column:13}},type:"if",locations:[{start:{line:5249,column:12},end:{line:5251,column:13}},{start:{line:5249,column:12},end:{line:5251,column:13}}],line:5249},"321":{loc:{start:{line:5317,column:19},end:{line:5317,column:77}},type:"binary-expr",locations:[{start:{line:5317,column:19},end:{line:5317,column:48}},{start:{line:5317,column:52},end:{line:5317,column:69}},{start:{line:5317,column:73},end:{line:5317,column:77}}],line:5317},"322":{loc:{start:{line:5335,column:16},end:{line:5337,column:17}},type:"if",locations:[{start:{line:5335,column:16},end:{line:5337,column:17}},{start:{line:5335,column:16},end:{line:5337,column:17}}],line:5335},"323":{loc:{start:{line:5342,column:16},end:{line:5344,column:17}},type:"if",locations:[{start:{line:5342,column:16},end:{line:5344,column:17}},{start:{line:5342,column:16},end:{line:5344,column:17}}],line:5342},"324":{loc:{start:{line:5454,column:12},end:{line:5457,column:13}},type:"if",locations:[{start:{line:5454,column:12},end:{line:5457,column:13}},{start:{line:5454,column:12},end:{line:5457,column:13}}],line:5454},"325":{loc:{start:{line:5454,column:16},end:{line:5454,column:59}},type:"binary-expr",locations:[{start:{line:5454,column:16},end:{line:5454,column:25}},{start:{line:5454,column:29},end:{line:5454,column:59}}],line:5454},"326":{loc:{start:{line:5460,column:23},end:{line:5460,column:72}},type:"cond-expr",locations:[{start:{line:5460,column:38},end:{line:5460,column:67}},{start:{line:5460,column:70},end:{line:5460,column:72}}],line:5460},"327":{loc:{start:{line:5487,column:26},end:{line:5487,column:68}},type:"cond-expr",locations:[{start:{line:5487,column:43},end:{line:5487,column:60}},{start:{line:5487,column:65},end:{line:5487,column:67}}],line:5487},"328":{loc:{start:{line:5556,column:12},end:{line:5559,column:13}},type:"if",locations:[{start:{line:5556,column:12},end:{line:5559,column:13}},{start:{line:5556,column:12},end:{line:5559,column:13}}],line:5556},"329":{loc:{start:{line:5564,column:32},end:{line:5564,column:76}},type:"binary-expr",locations:[{start:{line:5564,column:32},end:{line:5564,column:70}},{start:{line:5564,column:74},end:{line:5564,column:76}}],line:5564},"330":{loc:{start:{line:5565,column:12},end:{line:5568,column:13}},type:"if",locations:[{start:{line:5565,column:12},end:{line:5568,column:13}},{start:{line:5565,column:12},end:{line:5568,column:13}}],line:5565},"331":{loc:{start:{line:5572,column:12},end:{line:5574,column:13}},type:"if",locations:[{start:{line:5572,column:12},end:{line:5574,column:13}},{start:{line:5572,column:12},end:{line:5574,column:13}}],line:5572},"332":{loc:{start:{line:5572,column:16},end:{line:5572,column:84}},type:"binary-expr",locations:[{start:{line:5572,column:16},end:{line:5572,column:48}},{start:{line:5572,column:52},end:{line:5572,column:84}}],line:5572},"333":{loc:{start:{line:5614,column:16},end:{line:5616,column:17}},type:"if",locations:[{start:{line:5614,column:16},end:{line:5616,column:17}},{start:{line:5614,column:16},end:{line:5616,column:17}}],line:5614},"334":{loc:{start:{line:5645,column:12},end:{line:5648,column:13}},type:"if",locations:[{start:{line:5645,column:12},end:{line:5648,column:13}},{start:{line:5645,column:12},end:{line:5648,column:13}}],line:5645},"335":{loc:{start:{line:5649,column:23},end:{line:5649,column:48}},type:"binary-expr",locations:[{start:{line:5649,column:23},end:{line:5649,column:31}},{start:{line:5649,column:35},end:{line:5649,column:48}}],line:5649},"336":{loc:{start:{line:5651,column:12},end:{line:5654,column:13}},type:"if",locations:[{start:{line:5651,column:12},end:{line:5654,column:13}},{start:{line:5651,column:12},end:{line:5654,column:13}}],line:5651},"337":{loc:{start:{line:5655,column:12},end:{line:5658,column:13}},type:"if",locations:[{start:{line:5655,column:12},end:{line:5658,column:13}},{start:{line:5655,column:12},end:{line:5658,column:13}}],line:5655},"338":{loc:{start:{line:5662,column:29},end:{line:5662,column:107}},type:"binary-expr",locations:[{start:{line:5662,column:29},end:{line:5662,column:48}},{start:{line:5662,column:52},end:{line:5662,column:78}},{start:{line:5662,column:82},end:{line:5662,column:107}}],line:5662},"339":{loc:{start:{line:5663,column:35},end:{line:5663,column:123}},type:"binary-expr",locations:[{start:{line:5663,column:35},end:{line:5663,column:54}},{start:{line:5663,column:58},end:{line:5663,column:89}},{start:{line:5663,column:93},end:{line:5663,column:123}}],line:5663},"340":{loc:{start:{line:5664,column:35},end:{line:5664,column:123}},type:"binary-expr",locations:[{start:{line:5664,column:35},end:{line:5664,column:54}},{start:{line:5664,column:58},end:{line:5664,column:89}},{start:{line:5664,column:93},end:{line:5664,column:123}}],line:5664},"341":{loc:{start:{line:5670,column:16},end:{line:5676,column:17}},type:"if",locations:[{start:{line:5670,column:16},end:{line:5676,column:17}},{start:{line:5670,column:16},end:{line:5676,column:17}}],line:5670},"342":{loc:{start:{line:5713,column:24},end:{line:5713,column:39}},type:"binary-expr",locations:[{start:{line:5713,column:24},end:{line:5713,column:33}},{start:{line:5713,column:37},end:{line:5713,column:39}}],line:5713},"343":{loc:{start:{line:5733,column:12},end:{line:5736,column:13}},type:"if",locations:[{start:{line:5733,column:12},end:{line:5736,column:13}},{start:{line:5733,column:12},end:{line:5736,column:13}}],line:5733},"344":{loc:{start:{line:5733,column:16},end:{line:5733,column:53}},type:"binary-expr",locations:[{start:{line:5733,column:16},end:{line:5733,column:40}},{start:{line:5733,column:44},end:{line:5733,column:53}}],line:5733},"345":{loc:{start:{line:5738,column:21},end:{line:5738,column:33}},type:"binary-expr",locations:[{start:{line:5738,column:21},end:{line:5738,column:27}},{start:{line:5738,column:31},end:{line:5738,column:33}}],line:5738},"346":{loc:{start:{line:5739,column:23},end:{line:5739,column:47}},type:"binary-expr",locations:[{start:{line:5739,column:23},end:{line:5739,column:31}},{start:{line:5739,column:35},end:{line:5739,column:47}}],line:5739},"347":{loc:{start:{line:5744,column:16},end:{line:5750,column:17}},type:"if",locations:[{start:{line:5744,column:16},end:{line:5750,column:17}},{start:{line:5744,column:16},end:{line:5750,column:17}}],line:5744},"348":{loc:{start:{line:5774,column:21},end:{line:5774,column:33}},type:"binary-expr",locations:[{start:{line:5774,column:21},end:{line:5774,column:27}},{start:{line:5774,column:31},end:{line:5774,column:33}}],line:5774},"349":{loc:{start:{line:5777,column:29},end:{line:5777,column:49}},type:"binary-expr",locations:[{start:{line:5777,column:29},end:{line:5777,column:44}},{start:{line:5777,column:48},end:{line:5777,column:49}}],line:5777},"350":{loc:{start:{line:5783,column:23},end:{line:5783,column:48}},type:"binary-expr",locations:[{start:{line:5783,column:23},end:{line:5783,column:31}},{start:{line:5783,column:35},end:{line:5783,column:48}}],line:5783},"351":{loc:{start:{line:5791,column:16},end:{line:5799,column:17}},type:"if",locations:[{start:{line:5791,column:16},end:{line:5799,column:17}},{start:{line:5791,column:16},end:{line:5799,column:17}}],line:5791},"352":{loc:{start:{line:5795,column:38},end:{line:5795,column:76}},type:"cond-expr",locations:[{start:{line:5795,column:53},end:{line:5795,column:72}},{start:{line:5795,column:75},end:{line:5795,column:76}}],line:5795}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0,0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0,0],"322":[0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0,0],"339":[0,0,0],"340":[0,0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b527bc3bbffe3a4fee511c63590269cdc3ea500f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1ks4ntaci2=function(){return actualCoverage;};}return actualCoverage;}cov_1ks4ntaci2();cov_1ks4ntaci2().s[0]++;/*!*/ // Copyright 2014 Splunk, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"): you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +(function(){"use strict";cov_1ks4ntaci2().f[0]++;var Context=(cov_1ks4ntaci2().s[1]++,require('./context'));var Http=(cov_1ks4ntaci2().s[2]++,require('./http'));var Async=(cov_1ks4ntaci2().s[3]++,require('./async'));var Paths=(cov_1ks4ntaci2().s[4]++,require('./paths').Paths);var Class=(cov_1ks4ntaci2().s[5]++,require('./jquery.class').Class);var utils=(cov_1ks4ntaci2().s[6]++,require('./utils'));var root=(cov_1ks4ntaci2().s[7]++,(cov_1ks4ntaci2().b[0][0]++,exports)||(cov_1ks4ntaci2().b[0][1]++,this));var Service=(cov_1ks4ntaci2().s[8]++,null);/** + * Contains functionality common to Splunk Enterprise and Splunk Storm. + * + * This class is an implementation detail and is therefore SDK-private. + * + * @class splunkjs.private.BaseService + * @extends splunkjs.Context + */var BaseService=(cov_1ks4ntaci2().s[9]++,Context.extend({init:function(){cov_1ks4ntaci2().f[1]++;cov_1ks4ntaci2().s[10]++;this._super.apply(this,arguments);}}));/** + * Provides a root access point to Splunk functionality with typed access to + * Splunk resources such as searches, indexes, inputs, and more. Provides + * methods to authenticate and create specialized instances of the service. + * + * @class splunkjs.Service + * @extends splunkjs.private.BaseService + */cov_1ks4ntaci2().s[11]++;module.exports=root=Service=BaseService.extend({/** + * Constructor for `splunkjs.Service`. + * + * @constructor + * @param {splunkjs.Http} http An instance of a `splunkjs.Http` class. + * @param {Object} params A dictionary of optional parameters: + * - `scheme` (_string_): The scheme ("http" or "https") for accessing Splunk. + * - `host` (_string_): The host name (the default is "localhost"). + * - `port` (_integer_): The port number (the default is 8089). + * - `username` (_string_): The Splunk account username, which is used to authenticate the Splunk instance. + * - `password` (_string_): The password, which is used to authenticate the Splunk instance. + * - `owner` (_string_): The owner (username) component of the namespace. + * - `app` (_string_): The app component of the namespace. + * - `sessionKey` (_string_): The current session token. + * - `autologin` (_boolean_): `true` to automatically try to log in again if the session terminates, `false` if not (`true` by default). + * - `version` (_string_): The version string for Splunk, for example "4.3.2" (the default is "5.0"). + * @return {splunkjs.Service} A new `splunkjs.Service` instance. + * + * @method splunkjs.Service + */init:function(){cov_1ks4ntaci2().f[2]++;cov_1ks4ntaci2().s[12]++;this._super.apply(this,arguments);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[13]++;this.specialize=utils.bind(this,this.specialize);cov_1ks4ntaci2().s[14]++;this.apps=utils.bind(this,this.apps);cov_1ks4ntaci2().s[15]++;this.configurations=utils.bind(this,this.configurations);cov_1ks4ntaci2().s[16]++;this.indexes=utils.bind(this,this.indexes);cov_1ks4ntaci2().s[17]++;this.savedSearches=utils.bind(this,this.savedSearches);cov_1ks4ntaci2().s[18]++;this.jobs=utils.bind(this,this.jobs);cov_1ks4ntaci2().s[19]++;this.users=utils.bind(this,this.users);cov_1ks4ntaci2().s[20]++;this.currentUser=utils.bind(this,this.currentUser);cov_1ks4ntaci2().s[21]++;this.views=utils.bind(this,this.views);cov_1ks4ntaci2().s[22]++;this.firedAlertGroups=utils.bind(this,this.firedAlertGroups);cov_1ks4ntaci2().s[23]++;this.dataModels=utils.bind(this,this.dataModels);},/** + * Creates a specialized version of the current `Service` instance for + * a specific namespace context. + * + * @example + * + * var svc = ...; + * var newService = svc.specialize("myuser", "unix"); + * + * @param {String} owner The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * @param {String} app The app context for this resource (such as "search"). The "-" wildcard means all apps. + * @return {splunkjs.Service} The specialized `Service` instance. + * + * @method splunkjs.Service + */specialize:function(owner,app){cov_1ks4ntaci2().f[3]++;cov_1ks4ntaci2().s[24]++;return new Service(this.http,{scheme:this.scheme,host:this.host,port:this.port,username:this.username,password:this.password,owner:owner,app:app,sessionKey:this.sessionKey,version:this.version});},/** + * Gets the `Applications` collection, which allows you to + * list installed apps and retrieve information about them. + * + * @example + * + * // List installed apps + * var apps = svc.apps(); + * apps.fetch(function(err) { console.log(apps.list()); }); + * + * @return {splunkjs.Service.Collection} The `Applications` collection. + * + * @endpoint apps/local + * @method splunkjs.Service + * @see splunkjs.Service.Applications + */apps:function(){cov_1ks4ntaci2().f[4]++;cov_1ks4ntaci2().s[25]++;return new root.Applications(this);},/** + * Gets the `Configurations` collection, which lets you + * create, list, and retrieve configuration (.conf) files. + * + * @example + * + * // List all properties in the 'props.conf' file + * var files = svc.configurations(); + * files.item("props", function(err, propsFile) { + * propsFile.fetch(function(err, props) { + * console.log(props.properties()); + * }); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Configurations} The `Configurations` collection. + * + * @endpoint configs + * @method splunkjs.Service + * @see splunkjs.Service.Configurations + */configurations:function(namespace){cov_1ks4ntaci2().f[5]++;cov_1ks4ntaci2().s[26]++;return new root.Configurations(this,namespace);},/** + * Gets the `Indexes` collection, which lets you create, + * list, and update indexes. + * + * @example + * + * // Check if we have an _internal index + * var indexes = svc.indexes(); + * indexes.fetch(function(err, indexes) { + * var index = indexes.item("_internal"); + * console.log("Was index found: " + !!index); + * // `index` is an Index object. + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Indexes} The `Indexes` collection. + * + * @endpoint data/indexes + * @method splunkjs.Service + * @see splunkjs.Service.Indexes + */indexes:function(namespace){cov_1ks4ntaci2().f[6]++;cov_1ks4ntaci2().s[27]++;return new root.Indexes(this,namespace);},/** + * Gets the `SavedSearches` collection, which lets you + * create, list, and update saved searches. + * + * @example + * + * // List all # of saved searches + * var savedSearches = svc.savedSearches(); + * savedSearches.fetch(function(err, savedSearches) { + * console.log("# Of Saved Searches: " + savedSearches.list().length); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.SavedSearches} The `SavedSearches` collection. + * + * @endpoint saved/searches + * @method splunkjs.Service + * @see splunkjs.Service.SavedSearches + */savedSearches:function(namespace){cov_1ks4ntaci2().f[7]++;cov_1ks4ntaci2().s[28]++;return new root.SavedSearches(this,namespace);},/** + * Gets the `StoragePasswords` collection, which lets you + * create, list, and update storage passwords. + * + * @example + * + * // List all # of storage passwords + * var storagePasswords = svc.storagePasswords(); + * storagePasswords.fetch(function(err, storagePasswords) { + * console.log("# of Storage Passwords: " + storagePasswords.list().length); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePasswords} The `StoragePasswords` collection. + * + * @endpoint storage/passwords + * @method splunkjs.Service + * @see splunkjs.Service.StoragePasswords + */storagePasswords:function(namespace){cov_1ks4ntaci2().f[8]++;cov_1ks4ntaci2().s[29]++;return new root.StoragePasswords(this,namespace);},/** + * Gets the `FiredAlertGroupCollection` collection, which lets you + * list alert groups. + * + * @example + * + * // List all # of fired alert groups + * var firedAlertGroups = svc.firedAlertGroups(); + * firedAlertGroups.fetch(function(err, firedAlertGroups) { + * console.log("# of alert groups: " + firedAlertGroups.list().length); + * }); + * + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.FiredAlertGroupCollection} The `FiredAlertGroupCollection` collection. + * + * @endpoint saved/searches + * @method splunkjs.Service + * @see splunkjs.Service.FiredAlertGroupCollection + */firedAlertGroups:function(namespace){cov_1ks4ntaci2().f[9]++;cov_1ks4ntaci2().s[30]++;return new root.FiredAlertGroupCollection(this,namespace);},/** + * Gets the `Jobs` collection, which lets you create, list, + * and retrieve search jobs. + * + * @example + * + * // List all job IDs + * var jobs = svc.jobs(); + * jobs.fetch(function(err, jobs) { + * var list = jobs.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("Job " + (i+1) + ": " + list[i].sid); + * } + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Jobs} The `Jobs` collection. + * + * @endpoint search/jobs + * @method splunkjs.Service + * @see splunkjs.Service.Jobs + */jobs:function(namespace){cov_1ks4ntaci2().f[10]++;cov_1ks4ntaci2().s[31]++;return new root.Jobs(this,namespace);},/** + * Gets the `DataModels` collection, which lets you create, list, + * and retrieve data models. + * + * @endpoint datamodel/model + * @method splunkjs.Service + * @see splunkjs.Service.DataModels + */dataModels:function(namespace){cov_1ks4ntaci2().f[11]++;cov_1ks4ntaci2().s[32]++;return new root.DataModels(this,namespace);},/** + * Gets the `Users` collection, which lets you create, + * list, and retrieve users. + * + * @example + * + * // List all usernames + * var users = svc.users(); + * users.fetch(function(err, users) { + * var list = users.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("User " + (i+1) + ": " + list[i].properties().name); + * } + * }); + * + * @return {splunkjs.Service.Users} The `Users` collection. + * + * @endpoint authorization/users + * @method splunkjs.Service + * @see splunkjs.Service.Users + */users:function(){cov_1ks4ntaci2().f[12]++;cov_1ks4ntaci2().s[33]++;return new root.Users(this);},/** + * Gets the `Views` collection, which lets you create, + * list, and retrieve views (custom UIs built in Splunk's app framework). + * + * @example + * + * // List all views + * var views = svc.views(); + * views.fetch(function(err, views) { + * var list = views.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("View " + (i+1) + ": " + list[i].properties().name); + * } + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Views} The `Views` collection. + * + * @endpoint data/ui/views + * @method splunkjs.Service + * @see splunkjs.Service.Views + */views:function(namespace){cov_1ks4ntaci2().f[13]++;cov_1ks4ntaci2().s[34]++;return new root.Views(this,namespace);},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.oneshotSearch`. + * + * @example + * + * service.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { + * console.log("CREATED": newJob.sid); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the created job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */search:function(query,params,namespace,callback){cov_1ks4ntaci2().f[14]++;cov_1ks4ntaci2().s[35]++;if((cov_1ks4ntaci2().b[2][0]++,!callback)&&(cov_1ks4ntaci2().b[2][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[1][0]++;cov_1ks4ntaci2().s[36]++;callback=namespace;cov_1ks4ntaci2().s[37]++;namespace=null;}else{cov_1ks4ntaci2().b[1][1]++;}var jobs=(cov_1ks4ntaci2().s[38]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[39]++;return jobs.search(query,params,callback);},/** + * A convenience method to get a `Job` by its sid. + * + * @param {String} sid The search ID for a search job. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the created job: `(err, job)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */getJob:function(sid,namespace,callback){cov_1ks4ntaci2().f[15]++;cov_1ks4ntaci2().s[40]++;if((cov_1ks4ntaci2().b[4][0]++,!callback)&&(cov_1ks4ntaci2().b[4][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[3][0]++;cov_1ks4ntaci2().s[41]++;callback=namespace;cov_1ks4ntaci2().s[42]++;namespace=null;}else{cov_1ks4ntaci2().b[3][1]++;}var job=(cov_1ks4ntaci2().s[43]++,new root.Job(this,sid,namespace));cov_1ks4ntaci2().s[44]++;return job.fetch({},callback);},/** + * Creates a oneshot search from a given search query and optional parameters. + * + * @example + * + * service.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { + * console.log("RESULT FIELDS": results.fields); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search: + * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). + * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `rf` (_string_): Specifies one or more fields to add to the search. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the results of the search: `(err, results)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */oneshotSearch:function(query,params,namespace,callback){cov_1ks4ntaci2().f[16]++;cov_1ks4ntaci2().s[45]++;if((cov_1ks4ntaci2().b[6][0]++,!callback)&&(cov_1ks4ntaci2().b[6][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[5][0]++;cov_1ks4ntaci2().s[46]++;callback=namespace;cov_1ks4ntaci2().s[47]++;namespace=null;}else{cov_1ks4ntaci2().b[5][1]++;}var jobs=(cov_1ks4ntaci2().s[48]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[49]++;return jobs.oneshotSearch(query,params,callback);},/** + * Gets the user that is currently logged in. + * + * @example + * + * service.currentUser(function(err, user) { + * console.log("Real name: ", user.properties().realname); + * }); + * + * @param {Function} callback A function to call with the user instance: `(err, user)`. + * @return {splunkjs.Service.currentUser} The `User`. + * + * @endpoint authorization/current-context + * @method splunkjs.Service + */currentUser:function(callback){cov_1ks4ntaci2().f[17]++;cov_1ks4ntaci2().s[50]++;callback=(cov_1ks4ntaci2().b[7][0]++,callback)||(cov_1ks4ntaci2().b[7][1]++,function(){cov_1ks4ntaci2().f[18]++;});var that=(cov_1ks4ntaci2().s[51]++,this);var req=(cov_1ks4ntaci2().s[52]++,this.get(Paths.currentUser,{},function(err,response){cov_1ks4ntaci2().f[19]++;cov_1ks4ntaci2().s[53]++;if(err){cov_1ks4ntaci2().b[8][0]++;cov_1ks4ntaci2().s[54]++;callback(err);}else{cov_1ks4ntaci2().b[8][1]++;var username=(cov_1ks4ntaci2().s[55]++,response.data.entry[0].content.username);var user=(cov_1ks4ntaci2().s[56]++,new root.User(that,username));cov_1ks4ntaci2().s[57]++;user.fetch(function(){cov_1ks4ntaci2().f[20]++;cov_1ks4ntaci2().s[58]++;if(req.wasAborted){cov_1ks4ntaci2().b[9][0]++;cov_1ks4ntaci2().s[59]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[9][1]++;cov_1ks4ntaci2().s[60]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[61]++;return req;},/** + * Gets configuration information about the server. + * + * @example + * + * service.serverInfo(function(err, info) { + * console.log("Splunk Version: ", info.properties().version); + * }); + * + * @param {Function} callback A function to call with the server info: `(err, info)`. + * + * @endpoint server/info + * @method splunkjs.Service + */serverInfo:function(callback){cov_1ks4ntaci2().f[21]++;cov_1ks4ntaci2().s[62]++;callback=(cov_1ks4ntaci2().b[10][0]++,callback)||(cov_1ks4ntaci2().b[10][1]++,function(){cov_1ks4ntaci2().f[22]++;});var serverInfo=(cov_1ks4ntaci2().s[63]++,new root.ServerInfo(this));cov_1ks4ntaci2().s[64]++;return serverInfo.fetch(callback);},/** + * Parses a search query. + * + * @example + * + * service.parse("search index=_internal | head 1", function(err, parse) { + * console.log("Commands: ", parse.commands); + * }); + * + * @param {String} query The search query to parse. + * @param {Object} params An object of options for the parser: + * - `enable_lookups` (_boolean_): If `true`, performs reverse lookups to expand the search expression. + * - `output_mode` (_string_): The output format (XML or JSON). + * - `parse_only` (_boolean_): If `true`, disables the expansion of search due to evaluation of subsearches, time term expansion, lookups, tags, eventtypes, and sourcetype alias. + * - `reload_macros` (_boolean_): If `true`, reloads macro definitions from macros.conf. + * @param {Function} callback A function to call with the parse info: `(err, parse)`. + * + * @endpoint search/parser + * @method splunkjs.Service + */parse:function(query,params,callback){cov_1ks4ntaci2().f[23]++;cov_1ks4ntaci2().s[65]++;if((cov_1ks4ntaci2().b[12][0]++,!callback)&&(cov_1ks4ntaci2().b[12][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[11][0]++;cov_1ks4ntaci2().s[66]++;callback=params;cov_1ks4ntaci2().s[67]++;params={};}else{cov_1ks4ntaci2().b[11][1]++;}cov_1ks4ntaci2().s[68]++;callback=(cov_1ks4ntaci2().b[13][0]++,callback)||(cov_1ks4ntaci2().b[13][1]++,function(){cov_1ks4ntaci2().f[24]++;});cov_1ks4ntaci2().s[69]++;params=(cov_1ks4ntaci2().b[14][0]++,params)||(cov_1ks4ntaci2().b[14][1]++,{});cov_1ks4ntaci2().s[70]++;params.q=query;cov_1ks4ntaci2().s[71]++;return this.get(Paths.parser,params,function(err,response){cov_1ks4ntaci2().f[25]++;cov_1ks4ntaci2().s[72]++;if(err){cov_1ks4ntaci2().b[15][0]++;cov_1ks4ntaci2().s[73]++;callback(err);}else{cov_1ks4ntaci2().b[15][1]++;cov_1ks4ntaci2().s[74]++;callback(null,response.data);}});},/** + * Provides auto-complete suggestions for search queries. + * + * @example + * + * service.typeahead("index=", 10, function(err, options) { + * console.log("Autocompletion options: ", options); + * }); + * + * @param {String} prefix The query fragment to autocomplete. + * @param {Number} count The number of options to return (optional). + * @param {Function} callback A function to call with the autocompletion info: `(err, options)`. + * + * @endpoint search/typeahead + * @method splunkjs.Service + */typeahead:function(prefix,count,callback){cov_1ks4ntaci2().f[26]++;cov_1ks4ntaci2().s[75]++;if((cov_1ks4ntaci2().b[17][0]++,!callback)&&(cov_1ks4ntaci2().b[17][1]++,utils.isFunction(count))){cov_1ks4ntaci2().b[16][0]++;cov_1ks4ntaci2().s[76]++;callback=count;cov_1ks4ntaci2().s[77]++;count=10;}else{cov_1ks4ntaci2().b[16][1]++;}cov_1ks4ntaci2().s[78]++;callback=(cov_1ks4ntaci2().b[18][0]++,callback)||(cov_1ks4ntaci2().b[18][1]++,function(){cov_1ks4ntaci2().f[27]++;});var params=(cov_1ks4ntaci2().s[79]++,{count:(cov_1ks4ntaci2().b[19][0]++,count)||(cov_1ks4ntaci2().b[19][1]++,10),prefix:prefix});cov_1ks4ntaci2().s[80]++;return this.get(Paths.typeahead,params,function(err,response){cov_1ks4ntaci2().f[28]++;cov_1ks4ntaci2().s[81]++;if(err){cov_1ks4ntaci2().b[20][0]++;cov_1ks4ntaci2().s[82]++;callback(err);}else{cov_1ks4ntaci2().b[20][1]++;var results=(cov_1ks4ntaci2().s[83]++,((cov_1ks4ntaci2().b[21][0]++,response.data)||(cov_1ks4ntaci2().b[21][1]++,{})).results);cov_1ks4ntaci2().s[84]++;callback(null,(cov_1ks4ntaci2().b[22][0]++,results)||(cov_1ks4ntaci2().b[22][1]++,[]));}});},/** + * Logs an event to Splunk. + * + * @example + * + * service.log("A new event", {index: "_internal", sourcetype: "mysourcetype"}, function(err, result) { + * console.log("Submitted event: ", result); + * }); + * + * @param {String|Object} event The text for this event, or a JSON object. + * @param {Object} params A dictionary of parameters for indexing: + * - `index` (_string_): The index to send events from this input to. + * - `host` (_string_): The value to populate in the Host field for events from this data input. + * - `host_regex` (_string_): A regular expression used to extract the host value from each event. + * - `source` (_string_): The value to populate in the Source field for events from this data input. + * - `sourcetype` (_string_): The value to populate in the Sourcetype field for events from this data input. + * @param {Function} callback A function to call when the event is submitted: `(err, result)`. + * + * @endpoint receivers/simple + * @method splunkjs.Service + */log:function(event,params,callback){cov_1ks4ntaci2().f[29]++;cov_1ks4ntaci2().s[85]++;if((cov_1ks4ntaci2().b[24][0]++,!callback)&&(cov_1ks4ntaci2().b[24][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[23][0]++;cov_1ks4ntaci2().s[86]++;callback=params;cov_1ks4ntaci2().s[87]++;params={};}else{cov_1ks4ntaci2().b[23][1]++;}cov_1ks4ntaci2().s[88]++;callback=(cov_1ks4ntaci2().b[25][0]++,callback)||(cov_1ks4ntaci2().b[25][1]++,function(){cov_1ks4ntaci2().f[30]++;});cov_1ks4ntaci2().s[89]++;params=(cov_1ks4ntaci2().b[26][0]++,params)||(cov_1ks4ntaci2().b[26][1]++,{});// If the event is a JSON object, convert it to a string. +cov_1ks4ntaci2().s[90]++;if(utils.isObject(event)){cov_1ks4ntaci2().b[27][0]++;cov_1ks4ntaci2().s[91]++;event=JSON.stringify(event);}else{cov_1ks4ntaci2().b[27][1]++;}var path=(cov_1ks4ntaci2().s[92]++,this.paths.submitEvent);var method=(cov_1ks4ntaci2().s[93]++,"POST");var headers=(cov_1ks4ntaci2().s[94]++,{"Content-Type":"text/plain"});var body=(cov_1ks4ntaci2().s[95]++,event);var get=(cov_1ks4ntaci2().s[96]++,params);var post=(cov_1ks4ntaci2().s[97]++,{});var req=(cov_1ks4ntaci2().s[98]++,this.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[31]++;cov_1ks4ntaci2().s[99]++;if(err){cov_1ks4ntaci2().b[28][0]++;cov_1ks4ntaci2().s[100]++;callback(err);}else{cov_1ks4ntaci2().b[28][1]++;cov_1ks4ntaci2().s[101]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[102]++;return req;}});/** + * Provides a base definition for a Splunk endpoint, which is a combination of + * a specific service and path. Provides convenience methods for GET, POST, and + * DELETE operations used in splunkjs, automatically preparing the path correctly + * and allowing for relative calls. + * + * @class splunkjs.Service.Endpoint + */cov_1ks4ntaci2().s[103]++;root.Endpoint=Class.extend({/** + * Constructor for `splunkjs.Service.Endpoint`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} qualifiedPath A fully-qualified relative endpoint path (for example, "/services/search/jobs"). + * @return {splunkjs.Service.Endpoint} A new `splunkjs.Service.Endpoint` instance. + * + * @method splunkjs.Service.Endpoint + */init:function(service,qualifiedPath){cov_1ks4ntaci2().f[32]++;cov_1ks4ntaci2().s[104]++;if(!service){cov_1ks4ntaci2().b[29][0]++;cov_1ks4ntaci2().s[105]++;throw new Error("Passed in a null Service.");}else{cov_1ks4ntaci2().b[29][1]++;}cov_1ks4ntaci2().s[106]++;if(!qualifiedPath){cov_1ks4ntaci2().b[30][0]++;cov_1ks4ntaci2().s[107]++;throw new Error("Passed in an empty path.");}else{cov_1ks4ntaci2().b[30][1]++;}cov_1ks4ntaci2().s[108]++;this.service=service;cov_1ks4ntaci2().s[109]++;this.qualifiedPath=qualifiedPath;// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[110]++;this.get=utils.bind(this,this.get);// this.get_v2 = utils.bind(this, this.get_v2); +cov_1ks4ntaci2().s[111]++;this.post=utils.bind(this,this.post);cov_1ks4ntaci2().s[112]++;this.del=utils.bind(this,this.del);},/** + * Performs a relative GET request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456/results?offset=1 + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.get("results", {offset: 1}, function() { console.log("DONE"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the query string. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */get:function(relpath,params,callback){cov_1ks4ntaci2().f[33]++;var url=(cov_1ks4ntaci2().s[113]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[114]++;if(relpath){cov_1ks4ntaci2().b[31][0]++;cov_1ks4ntaci2().s[115]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[31][1]++;}cov_1ks4ntaci2().s[116]++;return this.service.get(url,params,callback);},get_v2:function(relpath,params){cov_1ks4ntaci2().f[34]++;var url=(cov_1ks4ntaci2().s[117]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[118]++;if(relpath){cov_1ks4ntaci2().b[32][0]++;cov_1ks4ntaci2().s[119]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[32][1]++;}cov_1ks4ntaci2().s[120]++;return this.service.get_v2(url,params);},/** + * Performs a relative POST request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456/control + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.post("control", {action: "cancel"}, function() { console.log("CANCELLED"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the body. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */post:function(relpath,params,callback){cov_1ks4ntaci2().f[35]++;var url=(cov_1ks4ntaci2().s[121]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[122]++;if(relpath){cov_1ks4ntaci2().b[33][0]++;cov_1ks4ntaci2().s[123]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[33][1]++;}cov_1ks4ntaci2().s[124]++;return this.service.post(url,params,callback);},/** + * Performs a relative DELETE request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456 + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.delete("", {}, function() { console.log("DELETED"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the query string. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */del:function(relpath,params,callback){cov_1ks4ntaci2().f[36]++;var url=(cov_1ks4ntaci2().s[125]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[126]++;if(relpath){cov_1ks4ntaci2().b[34][0]++;cov_1ks4ntaci2().s[127]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[34][1]++;}cov_1ks4ntaci2().s[128]++;return this.service.del(url,params,callback);}});/** + * Provides a base definition for a Splunk resource (for example, an entity + * such as an index or search job, or a collection of entities). Provides + * basic methods for handling Splunk resources, such as validation and + * accessing properties. + * + * This class should not be used directly because most methods are meant to be overridden. + * + * @class splunkjs.Service.Resource + * @extends splunkjs.Service.Endpoint + */cov_1ks4ntaci2().s[129]++;root.Resource=root.Endpoint.extend({/** + * Constructor for `splunkjs.Service.Resource`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Resource} A new `splunkjs.Service.Resource` instance. + * + * @method splunkjs.Service.Resource + */init:function(service,path,namespace){cov_1ks4ntaci2().f[37]++;var fullpath=(cov_1ks4ntaci2().s[130]++,service.fullpath(path,namespace));cov_1ks4ntaci2().s[131]++;this._super(service,fullpath);cov_1ks4ntaci2().s[132]++;this.namespace=namespace;cov_1ks4ntaci2().s[133]++;this._properties={};cov_1ks4ntaci2().s[134]++;this._state={};// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[135]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[136]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[137]++;this.properties=utils.bind(this,this.properties);cov_1ks4ntaci2().s[138]++;this.state=utils.bind(this,this.state);cov_1ks4ntaci2().s[139]++;this.path=utils.bind(this,this.path);},/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Resource + */path:function(){cov_1ks4ntaci2().f[38]++;cov_1ks4ntaci2().s[140]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Loads the resource and stores the properties. + * + * @param {Object} properties The properties for this resource. + * + * @method splunkjs.Service.Resource + * @protected + */_load:function(properties){cov_1ks4ntaci2().f[39]++;cov_1ks4ntaci2().s[141]++;this._properties=(cov_1ks4ntaci2().b[35][0]++,properties)||(cov_1ks4ntaci2().b[35][1]++,{});cov_1ks4ntaci2().s[142]++;this._state=(cov_1ks4ntaci2().b[36][0]++,properties)||(cov_1ks4ntaci2().b[36][1]++,{});},/** + * Refreshes the resource by fetching the object from the server + * and loading it. + * + * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. + * + * @method splunkjs.Service.Resource + * @protected + */fetch:function(callback){cov_1ks4ntaci2().f[40]++;cov_1ks4ntaci2().s[143]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Retrieves the current properties for this resource. + * + * @return {Object} The properties. + * + * @method splunkjs.Service.Resource + */properties:function(){cov_1ks4ntaci2().f[41]++;cov_1ks4ntaci2().s[144]++;return this._properties;},/** + * Retrieves the current full state (properties and metadata) of this resource. + * + * @return {Object} The current full state of this resource. + * + * @method splunkjs.Service.Resource + */state:function(){cov_1ks4ntaci2().f[42]++;cov_1ks4ntaci2().s[145]++;return this._state;}});/** + * Defines a base class for a Splunk entity, which is a well-defined construct + * with certain operations (such as "properties", "update", and "delete"). + * Entities include search jobs, indexes, inputs, apps, and more. + * + * Provides basic methods for working with Splunk entities, such as fetching and + * updating them. + * + * @class splunkjs.Service.Entity + * @extends splunkjs.Service.Resource + */cov_1ks4ntaci2().s[146]++;root.Entity=root.Resource.extend({/** + * A static property that indicates whether to call `fetch` after an + * update to get the updated entity. By default, the entity is not + * fetched because the endpoint returns (echoes) the updated entity. + * + * @method splunkjs.Service.Entity + */fetchOnUpdate:false,/** + * Constructor for `splunkjs.Service.Entity`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. + * + * @method splunkjs.Service.Entity + */init:function(service,path,namespace){cov_1ks4ntaci2().f[43]++;cov_1ks4ntaci2().s[147]++;this._super(service,path,namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[148]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[149]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[150]++;this.remove=utils.bind(this,this.remove);cov_1ks4ntaci2().s[151]++;this.update=utils.bind(this,this.update);cov_1ks4ntaci2().s[152]++;this.fields=utils.bind(this,this.fields);cov_1ks4ntaci2().s[153]++;this.links=utils.bind(this,this.links);cov_1ks4ntaci2().s[154]++;this.acl=utils.bind(this,this.acl);cov_1ks4ntaci2().s[155]++;this.author=utils.bind(this,this.author);cov_1ks4ntaci2().s[156]++;this.updated=utils.bind(this,this.updated);cov_1ks4ntaci2().s[157]++;this.published=utils.bind(this,this.published);cov_1ks4ntaci2().s[158]++;this.enable=utils.bind(this,this.enable);cov_1ks4ntaci2().s[159]++;this.disable=utils.bind(this,this.disable);cov_1ks4ntaci2().s[160]++;this.reload=utils.bind(this,this.reload);// Initial values +cov_1ks4ntaci2().s[161]++;this._properties={};cov_1ks4ntaci2().s[162]++;this._fields={};cov_1ks4ntaci2().s[163]++;this._acl={};cov_1ks4ntaci2().s[164]++;this._links={};},/** + * Loads the entity and stores the properties. + * + * @param {Object} properties The properties for this entity. + * + * @method splunkjs.Service.Entity + * @protected + */_load:function(properties){cov_1ks4ntaci2().f[44]++;cov_1ks4ntaci2().s[165]++;properties=utils.isArray(properties)?(cov_1ks4ntaci2().b[37][0]++,properties[0]):(cov_1ks4ntaci2().b[37][1]++,properties);// Initialize the properties to +// empty values +cov_1ks4ntaci2().s[166]++;properties=(cov_1ks4ntaci2().b[38][0]++,properties)||(cov_1ks4ntaci2().b[38][1]++,{content:{},fields:{},acl:{},links:{}});cov_1ks4ntaci2().s[167]++;this._super(properties);// Take out the entity-specific content +cov_1ks4ntaci2().s[168]++;this._properties=(cov_1ks4ntaci2().b[39][0]++,properties.content)||(cov_1ks4ntaci2().b[39][1]++,{});cov_1ks4ntaci2().s[169]++;this._fields=(cov_1ks4ntaci2().b[40][0]++,properties.fields)||(cov_1ks4ntaci2().b[40][1]++,this._fields)||(cov_1ks4ntaci2().b[40][2]++,{});cov_1ks4ntaci2().s[170]++;this._acl=(cov_1ks4ntaci2().b[41][0]++,properties.acl)||(cov_1ks4ntaci2().b[41][1]++,{});cov_1ks4ntaci2().s[171]++;this._links=(cov_1ks4ntaci2().b[42][0]++,properties.links)||(cov_1ks4ntaci2().b[42][1]++,{});cov_1ks4ntaci2().s[172]++;this._author=(cov_1ks4ntaci2().b[43][0]++,properties.author)||(cov_1ks4ntaci2().b[43][1]++,null);cov_1ks4ntaci2().s[173]++;this._updated=(cov_1ks4ntaci2().b[44][0]++,properties.updated)||(cov_1ks4ntaci2().b[44][1]++,null);cov_1ks4ntaci2().s[174]++;this._published=(cov_1ks4ntaci2().b[45][0]++,properties.published)||(cov_1ks4ntaci2().b[45][1]++,null);},/** + * Retrieves the fields information for this entity, indicating which + * fields are wildcards, required, and optional. + * + * @return {Object} The fields information. + * + * @method splunkjs.Service.Entity + */fields:function(){cov_1ks4ntaci2().f[45]++;cov_1ks4ntaci2().s[175]++;return this._fields;},/** + * Retrieves the access control list (ACL) information for this entity, + * which contains the permissions for accessing the entity. + * + * @return {Object} The ACL. + * + * @method splunkjs.Service.Entity + */acl:function(){cov_1ks4ntaci2().f[46]++;cov_1ks4ntaci2().s[176]++;return this._acl;},/** + * Retrieves the links information for this entity, which is the URI of + * the entity relative to the management port of a Splunk instance. + * + * @return {Object} The links information. + * + * @method splunkjs.Service.Entity + */links:function(){cov_1ks4ntaci2().f[47]++;cov_1ks4ntaci2().s[177]++;return this._links;},/** + * Retrieves the author information for this entity. + * + * @return {String} The author. + * + * @method splunkjs.Service.Entity + */author:function(){cov_1ks4ntaci2().f[48]++;cov_1ks4ntaci2().s[178]++;return this._author;},/** + * Retrieves the updated time for this entity. + * + * @return {String} The updated time. + * + * @method splunkjs.Service.Entity + */updated:function(){cov_1ks4ntaci2().f[49]++;cov_1ks4ntaci2().s[179]++;return this._updated;},/** + * Retrieves the published time for this entity. + * + * @return {String} The published time. + * + * @method splunkjs.Service.Entity + */published:function(){cov_1ks4ntaci2().f[50]++;cov_1ks4ntaci2().s[180]++;return this._published;},/** + * Refreshes the entity by fetching the object from the server and + * loading it. + * + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `count` (_integer_): The maximum number of items to return. + * - `offset` (_integer_): The offset of the first item to return. + * - `search` (_string_): The search query to filter responses. + * - `sort_dir` (_string_): The direction to sort returned items: “asc” or “desc”. + * - `sort_key` (_string_): The field to use for sorting (optional). + * - `sort_mode` (_string_): The collating sequence for sorting returned items: “auto”, “alpha”, “alpha_case”, or “num”. + * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. + * + * @method splunkjs.Service.Entity + */fetch:function(options,callback){cov_1ks4ntaci2().f[51]++;cov_1ks4ntaci2().s[181]++;if((cov_1ks4ntaci2().b[47][0]++,!callback)&&(cov_1ks4ntaci2().b[47][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[46][0]++;cov_1ks4ntaci2().s[182]++;callback=options;cov_1ks4ntaci2().s[183]++;options={};}else{cov_1ks4ntaci2().b[46][1]++;}cov_1ks4ntaci2().s[184]++;callback=(cov_1ks4ntaci2().b[48][0]++,callback)||(cov_1ks4ntaci2().b[48][1]++,function(){cov_1ks4ntaci2().f[52]++;});cov_1ks4ntaci2().s[185]++;options=(cov_1ks4ntaci2().b[49][0]++,options)||(cov_1ks4ntaci2().b[49][1]++,{});var that=(cov_1ks4ntaci2().s[186]++,this);cov_1ks4ntaci2().s[187]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[53]++;cov_1ks4ntaci2().s[188]++;if(err){cov_1ks4ntaci2().b[50][0]++;cov_1ks4ntaci2().s[189]++;callback(err);}else{cov_1ks4ntaci2().b[50][1]++;cov_1ks4ntaci2().s[190]++;that._load(response.data?(cov_1ks4ntaci2().b[51][0]++,response.data.entry):(cov_1ks4ntaci2().b[51][1]++,null));cov_1ks4ntaci2().s[191]++;callback(null,that);}});},/** + * Deletes the entity from the server. + * + * @param {Function} callback A function to call when the object is deleted: `(err)`. + * + * @method splunkjs.Service.Entity + * @protected + */remove:function(callback){cov_1ks4ntaci2().f[54]++;cov_1ks4ntaci2().s[192]++;callback=(cov_1ks4ntaci2().b[52][0]++,callback)||(cov_1ks4ntaci2().b[52][1]++,function(){cov_1ks4ntaci2().f[55]++;});var that=(cov_1ks4ntaci2().s[193]++,this);cov_1ks4ntaci2().s[194]++;return this.del("",{},function(err){cov_1ks4ntaci2().f[56]++;cov_1ks4ntaci2().s[195]++;callback(err);});},/** + * Updates the entity on the server. + * + * @param {Object} props The properties to update the object with. + * @param {Function} callback A function to call when the object is updated: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */update:function(props,callback){cov_1ks4ntaci2().f[57]++;cov_1ks4ntaci2().s[196]++;callback=(cov_1ks4ntaci2().b[53][0]++,callback)||(cov_1ks4ntaci2().b[53][1]++,function(){cov_1ks4ntaci2().f[58]++;});cov_1ks4ntaci2().s[197]++;if(props.hasOwnProperty("name")){cov_1ks4ntaci2().b[54][0]++;cov_1ks4ntaci2().s[198]++;throw new Error("Cannot set 'name' field in 'update'");}else{cov_1ks4ntaci2().b[54][1]++;}var that=(cov_1ks4ntaci2().s[199]++,this);var req=(cov_1ks4ntaci2().s[200]++,this.post("",props,function(err,response){cov_1ks4ntaci2().f[59]++;cov_1ks4ntaci2().s[201]++;if((cov_1ks4ntaci2().b[56][0]++,!err)&&(cov_1ks4ntaci2().b[56][1]++,!that.fetchOnUpdate)){cov_1ks4ntaci2().b[55][0]++;cov_1ks4ntaci2().s[202]++;that._load(response.data.entry);cov_1ks4ntaci2().s[203]++;callback(err,that);}else{cov_1ks4ntaci2().b[55][1]++;cov_1ks4ntaci2().s[204]++;if((cov_1ks4ntaci2().b[58][0]++,!err)&&(cov_1ks4ntaci2().b[58][1]++,that.fetchOnUpdate)){cov_1ks4ntaci2().b[57][0]++;cov_1ks4ntaci2().s[205]++;that.fetch(function(){cov_1ks4ntaci2().f[60]++;cov_1ks4ntaci2().s[206]++;if(req.wasAborted){cov_1ks4ntaci2().b[59][0]++;cov_1ks4ntaci2().s[207]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[59][1]++;cov_1ks4ntaci2().s[208]++;callback.apply(null,arguments);}});}else{cov_1ks4ntaci2().b[57][1]++;cov_1ks4ntaci2().s[209]++;callback(err,that);}}}));cov_1ks4ntaci2().s[210]++;return req;},/** + * Disables the entity on the server. + * + * @param {Function} callback A function to call when the object is disabled: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */disable:function(callback){cov_1ks4ntaci2().f[61]++;cov_1ks4ntaci2().s[211]++;callback=(cov_1ks4ntaci2().b[60][0]++,callback)||(cov_1ks4ntaci2().b[60][1]++,function(){cov_1ks4ntaci2().f[62]++;});var that=(cov_1ks4ntaci2().s[212]++,this);cov_1ks4ntaci2().s[213]++;this.post("disable",{},function(err,response){cov_1ks4ntaci2().f[63]++;cov_1ks4ntaci2().s[214]++;if(err){cov_1ks4ntaci2().b[61][0]++;cov_1ks4ntaci2().s[215]++;callback(err);}else{cov_1ks4ntaci2().b[61][1]++;cov_1ks4ntaci2().s[216]++;callback(null,that);}});},/** + * Enables the entity on the server. + * + * @param {Function} callback A function to call when the object is enabled: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */enable:function(callback){cov_1ks4ntaci2().f[64]++;cov_1ks4ntaci2().s[217]++;callback=(cov_1ks4ntaci2().b[62][0]++,callback)||(cov_1ks4ntaci2().b[62][1]++,function(){cov_1ks4ntaci2().f[65]++;});var that=(cov_1ks4ntaci2().s[218]++,this);cov_1ks4ntaci2().s[219]++;this.post("enable",{},function(err,response){cov_1ks4ntaci2().f[66]++;cov_1ks4ntaci2().s[220]++;if(err){cov_1ks4ntaci2().b[63][0]++;cov_1ks4ntaci2().s[221]++;callback(err);}else{cov_1ks4ntaci2().b[63][1]++;cov_1ks4ntaci2().s[222]++;callback(null,that);}});},/** + * Reloads the entity on the server. + * + * @param {Function} callback A function to call when the object is reloaded: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */reload:function(callback){cov_1ks4ntaci2().f[67]++;cov_1ks4ntaci2().s[223]++;callback=(cov_1ks4ntaci2().b[64][0]++,callback)||(cov_1ks4ntaci2().b[64][1]++,function(){cov_1ks4ntaci2().f[68]++;});var that=(cov_1ks4ntaci2().s[224]++,this);cov_1ks4ntaci2().s[225]++;this.post("_reload",{},function(err,response){cov_1ks4ntaci2().f[69]++;cov_1ks4ntaci2().s[226]++;if(err){cov_1ks4ntaci2().b[65][0]++;cov_1ks4ntaci2().s[227]++;callback(err);}else{cov_1ks4ntaci2().b[65][1]++;cov_1ks4ntaci2().s[228]++;callback(null,that);}});}});/** + * Defines a base class for a Splunk collection, which is a well-defined construct + * that provides basic methods for working with collections of entities, such as + * creating and listing entities. + * + * @class splunkjs.Service.Collection + * @extends splunkjs.Service.Resource + */cov_1ks4ntaci2().s[229]++;root.Collection=root.Resource.extend({/** + * A static property that indicates whether to call `fetch` after an + * entity has been created. By default, the entity is not fetched + * because the endpoint returns (echoes) the new entity. + + * @method splunkjs.Service.Collection + */fetchOnEntityCreation:false,/** + * Constructor for `splunkjs.Service.Collection`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Collection} A new `splunkjs.Service.Collection` instance. + * + * @method splunkjs.Service.Collection + */init:function(service,path,namespace){cov_1ks4ntaci2().f[70]++;cov_1ks4ntaci2().s[230]++;this._super(service,path,namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[231]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[232]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[233]++;this.create=utils.bind(this,this.create);cov_1ks4ntaci2().s[234]++;this.list=utils.bind(this,this.list);cov_1ks4ntaci2().s[235]++;this.item=utils.bind(this,this.item);cov_1ks4ntaci2().s[236]++;this.instantiateEntity=utils.bind(this,this.instantiateEntity);// Initial values +cov_1ks4ntaci2().s[237]++;this._entities=[];cov_1ks4ntaci2().s[238]++;this._entitiesByName={};cov_1ks4ntaci2().s[239]++;this._properties={};cov_1ks4ntaci2().s[240]++;this._paging={};cov_1ks4ntaci2().s[241]++;this._links={};},/** + * Creates a local instance of an entity. + * + * @param {Object} props The properties for this entity. + * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. + * + * @method splunkjs.Service.Collection + */instantiateEntity:function(props){cov_1ks4ntaci2().f[71]++;cov_1ks4ntaci2().s[242]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Loads the collection and properties, and creates a map of entity + * names to entity IDs (for retrieval purposes). + * + * @param {Object} properties The properties for this collection. + * + * @method splunkjs.Service.Collection + * @private + */_load:function(properties){cov_1ks4ntaci2().f[72]++;cov_1ks4ntaci2().s[243]++;this._super(properties);var entities=(cov_1ks4ntaci2().s[244]++,[]);var entitiesByName=(cov_1ks4ntaci2().s[245]++,{});var entityPropertyList=(cov_1ks4ntaci2().s[246]++,(cov_1ks4ntaci2().b[66][0]++,properties.entry)||(cov_1ks4ntaci2().b[66][1]++,[]));cov_1ks4ntaci2().s[247]++;for(var i=(cov_1ks4ntaci2().s[248]++,0);i1)&&(cov_1ks4ntaci2().b[90][1]++,!namespace)){cov_1ks4ntaci2().b[89][0]++;cov_1ks4ntaci2().s[302]++;// If there is more than one entity and we didn't +// specify a namespace, then we return an error +// saying the match is ambiguous +throw new Error("Ambiguous match for name '"+id+"'");}else{cov_1ks4ntaci2().b[89][1]++;cov_1ks4ntaci2().s[303]++;// There is more than one entity, and we do have +// a namespace, so we try and find it +for(var i=(cov_1ks4ntaci2().s[304]++,0);iPagination and Filtering options in the REST API documentation. + * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. + * + * @endpoint saved/searches/{name}/history + * @method splunkjs.Service.SavedSearch + */history:function(options,callback){cov_1ks4ntaci2().f[97]++;cov_1ks4ntaci2().s[358]++;if((cov_1ks4ntaci2().b[106][0]++,!callback)&&(cov_1ks4ntaci2().b[106][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[105][0]++;cov_1ks4ntaci2().s[359]++;callback=options;cov_1ks4ntaci2().s[360]++;options={};}else{cov_1ks4ntaci2().b[105][1]++;}cov_1ks4ntaci2().s[361]++;callback=(cov_1ks4ntaci2().b[107][0]++,callback)||(cov_1ks4ntaci2().b[107][1]++,function(){cov_1ks4ntaci2().f[98]++;});cov_1ks4ntaci2().s[362]++;options=(cov_1ks4ntaci2().b[108][0]++,options)||(cov_1ks4ntaci2().b[108][1]++,{});var that=(cov_1ks4ntaci2().s[363]++,this);cov_1ks4ntaci2().s[364]++;return this.get("history",options,function(err,response){cov_1ks4ntaci2().f[99]++;cov_1ks4ntaci2().s[365]++;if(err){cov_1ks4ntaci2().b[109][0]++;cov_1ks4ntaci2().s[366]++;callback(err);cov_1ks4ntaci2().s[367]++;return;}else{cov_1ks4ntaci2().b[109][1]++;}var jobs=(cov_1ks4ntaci2().s[368]++,[]);var data=(cov_1ks4ntaci2().s[369]++,(cov_1ks4ntaci2().b[110][0]++,response.data.entry)||(cov_1ks4ntaci2().b[110][1]++,[]));cov_1ks4ntaci2().s[370]++;for(var i=(cov_1ks4ntaci2().s[371]++,0);iSaved search parameters on Splunk Developer Portal. + * @param {Function} callback A function to call when the object is updated: `(err, entity)`. + * + * @method splunkjs.Service.SavedSearch + */update:function(params,callback){cov_1ks4ntaci2().f[103]++;cov_1ks4ntaci2().s[382]++;params=(cov_1ks4ntaci2().b[112][0]++,params)||(cov_1ks4ntaci2().b[112][1]++,{});cov_1ks4ntaci2().s[383]++;if(!params.search){cov_1ks4ntaci2().b[113][0]++;var update=(cov_1ks4ntaci2().s[384]++,this._super);var req=(cov_1ks4ntaci2().s[385]++,this.fetch(function(err,search){cov_1ks4ntaci2().f[104]++;cov_1ks4ntaci2().s[386]++;if(err){cov_1ks4ntaci2().b[114][0]++;cov_1ks4ntaci2().s[387]++;callback(err);}else{cov_1ks4ntaci2().b[114][1]++;cov_1ks4ntaci2().s[388]++;params.search=search.properties().search;cov_1ks4ntaci2().s[389]++;update.call(search,params,function(){cov_1ks4ntaci2().f[105]++;cov_1ks4ntaci2().s[390]++;if(req.wasAborted){cov_1ks4ntaci2().b[115][0]++;cov_1ks4ntaci2().s[391]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[115][1]++;cov_1ks4ntaci2().s[392]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[393]++;return req;}else{cov_1ks4ntaci2().b[113][1]++;cov_1ks4ntaci2().s[394]++;return this._super(params,callback);}}});/** + * Represents a collection of saved searches. You can create and list saved + * searches using this collection container, or get a specific saved search. + * + * + * @endpoint saved/searches + * @class splunkjs.Service.SavedSearches + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[395]++;root.SavedSearches=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.SavedSearches + */path:function(){cov_1ks4ntaci2().f[106]++;cov_1ks4ntaci2().s[396]++;return Paths.savedSearches;},/** + * Creates a local instance of a saved search. + * + * @param {Object} props The properties for the new saved search. For a list of available parameters, see Saved search parameters on Splunk Developer Portal. + * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.SavedSearch` instance. + * + * @method splunkjs.Service.SavedSearches + */instantiateEntity:function(props){cov_1ks4ntaci2().f[107]++;var entityNamespace=(cov_1ks4ntaci2().s[397]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[398]++;return new root.SavedSearch(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.SavedSearches`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.SavedSearches} A new `splunkjs.Service.SavedSearches` instance. + * + * @method splunkjs.Service.SavedSearches + */init:function(service,namespace){cov_1ks4ntaci2().f[108]++;cov_1ks4ntaci2().s[399]++;this._super(service,this.path(),namespace);}});/** + * Represents a specific storage password, which you can then view, modify, and + * remove. + * + * @endpoint storage/passwords/{name} + * @class splunkjs.Service.StoragePassword + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[400]++;root.StoragePassword=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.StoragePassword + */path:function(){cov_1ks4ntaci2().f[109]++;cov_1ks4ntaci2().s[401]++;return Paths.storagePasswords+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.StoragePassword`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new storage password. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePassword} A new `splunkjs.Service.StoragePassword` instance. + * + * @method splunkjs.Service.StoragePassword + */init:function(service,name,namespace){cov_1ks4ntaci2().f[110]++;cov_1ks4ntaci2().s[402]++;this.name=name;cov_1ks4ntaci2().s[403]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of storage passwords. You can create and list storage + * passwords using this collection container, or get a specific storage password. + * + * @endpoint storage/passwords + * @class splunkjs.Service.StoragePasswords + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[404]++;root.StoragePasswords=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.StoragePasswords + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.StoragePasswords + */path:function(){cov_1ks4ntaci2().f[111]++;cov_1ks4ntaci2().s[405]++;return Paths.storagePasswords;},/** + * Creates a local instance of a storage password. + * + * @param {Object} props The properties for the new storage password. For a list of available parameters, + * see + * POST storage/passwords on Splunk Developer Portal. + * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.StoragePassword` instance. + * + * @method splunkjs.Service.StoragePasswords + */instantiateEntity:function(props){cov_1ks4ntaci2().f[112]++;var entityNamespace=(cov_1ks4ntaci2().s[406]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[407]++;return new root.StoragePassword(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.StoragePasswords`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePasswords} A new `splunkjs.Service.StoragePasswords` instance. + * + * @method splunkjs.Service.StoragePasswords + */init:function(service,namespace){cov_1ks4ntaci2().f[113]++;cov_1ks4ntaci2().s[408]++;this._super(service,this.path(),namespace);}});/** + * Represents a fired alert. + * You can retrieve several of the fired alert's properties by + * the corresponding function name. + * + * @endpoint alerts/fired_alerts/{name} + * @class splunkjs.Service.FiredAlert + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[409]++;root.FiredAlert=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.FiredAlert + */path:function(){cov_1ks4ntaci2().f[114]++;cov_1ks4ntaci2().s[410]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** + * Returns this alert's actions (such as notifying by email, running a + * script, adding to RSS, tracking in Alert Manager, and enabling + * summary indexing). + * + * @return {Array} of actions, an empty {Array} if no actions + * @method splunkjs.Service.FiredAlert + */actions:function(){cov_1ks4ntaci2().f[115]++;cov_1ks4ntaci2().s[411]++;return(cov_1ks4ntaci2().b[116][0]++,this.properties().actions)||(cov_1ks4ntaci2().b[116][1]++,[]);},/** + * Returns this alert's type. + * + * @return {String} the alert's type. + * @method splunkjs.Service.FiredAlert + */alertType:function(){cov_1ks4ntaci2().f[116]++;cov_1ks4ntaci2().s[412]++;return(cov_1ks4ntaci2().b[117][0]++,this.properties().alert_type)||(cov_1ks4ntaci2().b[117][1]++,null);},/** + * Indicates whether the result is a set of events (digest) or a single + * event (per result). + * + * This method is available in Splunk 4.3 and later. + * + * @return {Boolean} true if the result is a digest, false if per result + * @method splunkjs.Service.FiredAlert + */isDigestMode:function(){cov_1ks4ntaci2().f[117]++;cov_1ks4ntaci2().s[413]++;// Convert this property to a Boolean +return!!this.properties().digest_mode;},/** + * Returns the rendered expiration time for this alert. + * + * This method is available in Splunk 4.3 and later. + * + * @return {String} + * @method splunkjs.Service.FiredAlert + */expirationTime:function(){cov_1ks4ntaci2().f[118]++;cov_1ks4ntaci2().s[414]++;return(cov_1ks4ntaci2().b[118][0]++,this.properties().expiration_time_rendered)||(cov_1ks4ntaci2().b[118][1]++,null);},/** + * Returns the saved search for this alert. + * + * @return {String} The saved search name, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */savedSearchName:function(){cov_1ks4ntaci2().f[119]++;cov_1ks4ntaci2().s[415]++;return(cov_1ks4ntaci2().b[119][0]++,this.properties().savedsearch_name)||(cov_1ks4ntaci2().b[119][1]++,null);},/** + * Returns this alert's severity on a scale of 1 to 10, with 1 being the + * highest severity. + * + * @return {Number} this alert's severity, -1 if not specified + * @method splunkjs.Service.FiredAlert + */severity:function(){cov_1ks4ntaci2().f[120]++;cov_1ks4ntaci2().s[416]++;return(cov_1ks4ntaci2().b[120][0]++,parseInt(this.properties().severity,10))||(cov_1ks4ntaci2().b[120][1]++,-1);},/** + * Returns this alert's search ID (SID). + * + * @return {String} This alert's SID, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */sid:function(){cov_1ks4ntaci2().f[121]++;cov_1ks4ntaci2().s[417]++;return(cov_1ks4ntaci2().b[121][0]++,this.properties().sid)||(cov_1ks4ntaci2().b[121][1]++,null);},/** + * Returns the time this alert was triggered. + * + * @return {Number} This alert's trigger time, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */triggerTime:function(){cov_1ks4ntaci2().f[122]++;cov_1ks4ntaci2().s[418]++;return(cov_1ks4ntaci2().b[122][0]++,this.properties().trigger_time)||(cov_1ks4ntaci2().b[122][1]++,null);},/** + * Returns this alert's rendered trigger time. + * + * This method is available in Splunk 4.3 and later. + * + * @return {String} This alert's rendered trigger time, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */triggerTimeRendered:function(){cov_1ks4ntaci2().f[123]++;cov_1ks4ntaci2().s[419]++;return(cov_1ks4ntaci2().b[123][0]++,this.properties().trigger_time_rendered)||(cov_1ks4ntaci2().b[123][1]++,null);},/** + * Returns the count of triggered alerts. + * + * This method is available in Splunk 4.3 and later. + * + * @return {Number} The number of triggered alerts, or -1 if not specified. + * @method splunkjs.Service.FiredAlert + */triggeredAlertCount:function(){cov_1ks4ntaci2().f[124]++;cov_1ks4ntaci2().s[420]++;return(cov_1ks4ntaci2().b[124][0]++,parseInt(this.properties().triggered_alerts,10))||(cov_1ks4ntaci2().b[124][1]++,-1);},/** + * Constructor for `splunkjs.Service.FiredAlert`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new alert group. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.FiredAlert} A new `splunkjs.Service.FiredAlert` instance. + * + * @method splunkjs.Service.FiredAlert + */init:function(service,name,namespace){cov_1ks4ntaci2().f[125]++;cov_1ks4ntaci2().s[421]++;this.name=name;cov_1ks4ntaci2().s[422]++;this._super(service,this.path(),namespace);}});/** + * Represents a specific alert group, which you can then view and + * remove. + * + * @endpoint alerts/fired_alerts/{name} + * @class splunkjs.Service.FiredAlertGroup + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[423]++;root.FiredAlertGroup=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.FiredAlertGroup + */path:function(){cov_1ks4ntaci2().f[126]++;cov_1ks4ntaci2().s[424]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** + * Returns the `triggered_alert_count` property, the count + * of triggered alerts. + * + * @return {Number} the count of triggered alerts + * + * @method splunkjs.Service.FiredAlertGroup + */count:function(){cov_1ks4ntaci2().f[127]++;cov_1ks4ntaci2().s[425]++;return(cov_1ks4ntaci2().b[125][0]++,parseInt(this.properties().triggered_alert_count,10))||(cov_1ks4ntaci2().b[125][1]++,0);},/** + * Returns fired instances of this alert, which is + * a list of `splunkjs.Service.FiredAlert` instances. + * + * @example + * + * var alertGroup = service.firedAlertGroups().item("MyAlert"); + * alertGroup.list(function(err, firedAlerts, alert) { + * for(var i = 0; i < firedAlerts.length; i++) { + * console.log("Fired alert", i, ":", firedAlerts[i].sid); + * } + * }); + * + * @param {Function} callback A function to call when the fired alerts are retrieved: `(err, firedAlerts, alertGroup)`. + * + * @method splunkjs.Service.FiredAlertGroup + */list:function(options,callback){cov_1ks4ntaci2().f[128]++;cov_1ks4ntaci2().s[426]++;if((cov_1ks4ntaci2().b[127][0]++,!callback)&&(cov_1ks4ntaci2().b[127][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[126][0]++;cov_1ks4ntaci2().s[427]++;callback=options;cov_1ks4ntaci2().s[428]++;options={};}else{cov_1ks4ntaci2().b[126][1]++;}cov_1ks4ntaci2().s[429]++;callback=(cov_1ks4ntaci2().b[128][0]++,callback)||(cov_1ks4ntaci2().b[128][1]++,function(){cov_1ks4ntaci2().f[129]++;});cov_1ks4ntaci2().s[430]++;options=(cov_1ks4ntaci2().b[129][0]++,options)||(cov_1ks4ntaci2().b[129][1]++,{});var that=(cov_1ks4ntaci2().s[431]++,this);cov_1ks4ntaci2().s[432]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[130]++;cov_1ks4ntaci2().s[433]++;if(err){cov_1ks4ntaci2().b[130][0]++;cov_1ks4ntaci2().s[434]++;callback(err);cov_1ks4ntaci2().s[435]++;return;}else{cov_1ks4ntaci2().b[130][1]++;}var firedAlerts=(cov_1ks4ntaci2().s[436]++,[]);var data=(cov_1ks4ntaci2().s[437]++,(cov_1ks4ntaci2().b[131][0]++,response.data.entry)||(cov_1ks4ntaci2().b[131][1]++,[]));cov_1ks4ntaci2().s[438]++;for(var i=(cov_1ks4ntaci2().s[439]++,0);iPOST apps/local endpoint in the REST API documentation. + * @return {splunkjs.Service.Application} A new `splunkjs.Service.Application` instance. + * + * @method splunkjs.Service.Applications + */instantiateEntity:function(props){cov_1ks4ntaci2().f[145]++;cov_1ks4ntaci2().s[477]++;return new root.Application(this.service,props.name,{});},/** + * Constructor for `splunkjs.Service.Applications`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.Applications} A new `splunkjs.Service.Applications` instance. + * + * @method splunkjs.Service.Applications + */init:function(service){cov_1ks4ntaci2().f[146]++;cov_1ks4ntaci2().s[478]++;this._super(service,this.path(),{});}});/** + * Provides access to configuration information about the server. + * + * @endpoint server/info + * @class splunkjs.Service.ServerInfo + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[479]++;root.ServerInfo=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ServerInfo + */path:function(){cov_1ks4ntaci2().f[147]++;cov_1ks4ntaci2().s[480]++;return Paths.info;},/** + * Constructor for `splunkjs.Service.ServerInfo`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.ServerInfo} A new `splunkjs.Service.ServerInfo` instance. + * + * @method splunkjs.Service.ServerInfo + */init:function(service){cov_1ks4ntaci2().f[148]++;cov_1ks4ntaci2().s[481]++;this.name="server-info";cov_1ks4ntaci2().s[482]++;this._super(service,this.path(),{});}});/** + * Represents a specific Splunk user, which you can view, modify, and + * remove. + * + * @endpoint authentication/users/{name} + * @class splunkjs.Service.User + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[483]++;root.User=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.User + */path:function(){cov_1ks4ntaci2().f[149]++;cov_1ks4ntaci2().s[484]++;return Paths.users+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.User`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The Splunk username. + * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. + * + * @method splunkjs.Service.User + */init:function(service,name){cov_1ks4ntaci2().f[150]++;cov_1ks4ntaci2().s[485]++;this.name=name;cov_1ks4ntaci2().s[486]++;this._super(service,this.path(),{});}});/** + * Represents a collection of users. You can create and list users using + * this collection container, or get a specific user. + * + * @endpoint authentication/users + * @class splunkjs.Service.Users + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[487]++;root.Users=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.Users + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Users + */path:function(){cov_1ks4ntaci2().f[151]++;cov_1ks4ntaci2().s[488]++;return Paths.users;},/** + * Creates a local instance of a user. + * + * @param {Object} props The properties for this new user. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. + * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. + * + * @method splunkjs.Service.Users + */instantiateEntity:function(props){cov_1ks4ntaci2().f[152]++;cov_1ks4ntaci2().s[489]++;return new root.User(this.service,props.name,{});},/** + * Constructor for `splunkjs.Service.Users`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.Users} A new `splunkjs.Service.Users` instance. + * + * @method splunkjs.Service.Users + */init:function(service){cov_1ks4ntaci2().f[153]++;cov_1ks4ntaci2().s[490]++;this._super(service,this.path(),{});},/** + * Creates a new user. + * + * **Note:** This endpoint requires a special implementation. + * + * @param {Object} params A dictionary of properties. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the new entity: `(err, createdEntity)`. + * + * @method splunkjs.Service.Users + */create:function(params,callback){cov_1ks4ntaci2().f[154]++;cov_1ks4ntaci2().s[491]++;callback=(cov_1ks4ntaci2().b[136][0]++,callback)||(cov_1ks4ntaci2().b[136][1]++,function(){cov_1ks4ntaci2().f[155]++;});var that=(cov_1ks4ntaci2().s[492]++,this);var req=(cov_1ks4ntaci2().s[493]++,this.post("",params,function(err,response){cov_1ks4ntaci2().f[156]++;cov_1ks4ntaci2().s[494]++;if(err){cov_1ks4ntaci2().b[137][0]++;cov_1ks4ntaci2().s[495]++;callback(err);}else{cov_1ks4ntaci2().b[137][1]++;// This endpoint requires us to use the passed-in name +var props=(cov_1ks4ntaci2().s[496]++,{name:params.name});var entity=(cov_1ks4ntaci2().s[497]++,that.instantiateEntity(props));cov_1ks4ntaci2().s[498]++;entity.fetch(function(){cov_1ks4ntaci2().f[157]++;cov_1ks4ntaci2().s[499]++;if(req.wasAborted){cov_1ks4ntaci2().b[138][0]++;cov_1ks4ntaci2().s[500]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[138][1]++;cov_1ks4ntaci2().s[501]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[502]++;return req;}});/** + * Represents a specific Splunk view, which you can view, modify, and + * remove. + * + * @endpoint data/ui/views/{name} + * @class splunkjs.Service.View + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[503]++;root.View=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.View + */path:function(){cov_1ks4ntaci2().f[158]++;cov_1ks4ntaci2().s[504]++;return Paths.views+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.View`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the view. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. + * + * @method splunkjs.Service.View + */init:function(service,name,namespace){cov_1ks4ntaci2().f[159]++;cov_1ks4ntaci2().s[505]++;this.name=name;cov_1ks4ntaci2().s[506]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of views. You can create and list views using + * this collection container, or get a specific view. + * + * @endpoint data/ui/views + * @class splunkjs.Service.Views + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[507]++;root.Views=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Views + */path:function(){cov_1ks4ntaci2().f[160]++;cov_1ks4ntaci2().s[508]++;return Paths.views;},/** + * Creates a local instance of a view. + * + * @param {Object} props The properties for the new view. For a list of available parameters, see the POST scheduled/views/{name} endpoint in the REST API documentation. + * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. + * + * @method splunkjs.Service.Views + */instantiateEntity:function(props){cov_1ks4ntaci2().f[161]++;var entityNamespace=(cov_1ks4ntaci2().s[509]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[510]++;return new root.View(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.Views`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Views} A new `splunkjs.Service.Views` instance. + * + * @method splunkjs.Service.Views + */init:function(service,namespace){cov_1ks4ntaci2().f[162]++;cov_1ks4ntaci2().s[511]++;this._super(service,this.path(),namespace);}});/** + * Represents an index, which you can update and submit events to. + * + * @endpoint data/indexes/name + * @class splunkjs.Service.Index + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[512]++;root.Index=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Index + */path:function(){cov_1ks4ntaci2().f[163]++;cov_1ks4ntaci2().s[513]++;return Paths.indexes+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.Index`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the index. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. + * + * @method splunkjs.Service.Index + */init:function(service,name,namespace){cov_1ks4ntaci2().f[164]++;cov_1ks4ntaci2().s[514]++;this.name=name;cov_1ks4ntaci2().s[515]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[516]++;this.submitEvent=utils.bind(this,this.submitEvent);},/** + * Submits an event to this index. + * + * @example + * + * var index = service.indexes().item("_internal"); + * index.submitEvent("A new event", {sourcetype: "mysourcetype"}, function(err, result, index) { + * console.log("Submitted event: ", result); + * }); + * + * @param {String} event The text for this event. + * @param {Object} params A dictionary of parameters for indexing: + * - `host` (_string_): The value to populate in the host field for events from this data input. + * - `host_regex` (_string_): A regular expression used to extract the host value from each event. + * - `source` (_string_): The source value to fill in the metadata for this input's events. + * - `sourcetype` (_string_): The sourcetype to apply to events from this input. + * @param {Function} callback A function to call when the event is submitted: `(err, result, index)`. + * + * @endpoint receivers/simple?index={name} + * @method splunkjs.Service.Index + */submitEvent:function(event,params,callback){cov_1ks4ntaci2().f[165]++;cov_1ks4ntaci2().s[517]++;if((cov_1ks4ntaci2().b[140][0]++,!callback)&&(cov_1ks4ntaci2().b[140][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[139][0]++;cov_1ks4ntaci2().s[518]++;callback=params;cov_1ks4ntaci2().s[519]++;params={};}else{cov_1ks4ntaci2().b[139][1]++;}cov_1ks4ntaci2().s[520]++;callback=(cov_1ks4ntaci2().b[141][0]++,callback)||(cov_1ks4ntaci2().b[141][1]++,function(){cov_1ks4ntaci2().f[166]++;});cov_1ks4ntaci2().s[521]++;params=(cov_1ks4ntaci2().b[142][0]++,params)||(cov_1ks4ntaci2().b[142][1]++,{});// Add the index name +cov_1ks4ntaci2().s[522]++;params["index"]=this.name;var that=(cov_1ks4ntaci2().s[523]++,this);cov_1ks4ntaci2().s[524]++;return this.service.log(event,params,function(err,result){cov_1ks4ntaci2().f[167]++;cov_1ks4ntaci2().s[525]++;callback(err,result,that);});},remove:function(callback){cov_1ks4ntaci2().f[168]++;cov_1ks4ntaci2().s[526]++;if(this.service.versionCompare("5.0")<0){cov_1ks4ntaci2().b[143][0]++;cov_1ks4ntaci2().s[527]++;throw new Error("Indexes cannot be removed in Splunk 4.x");}else{cov_1ks4ntaci2().b[143][1]++;cov_1ks4ntaci2().s[528]++;return this._super(callback);}}});/** + * Represents a collection of indexes. You can create and list indexes using + * this collection container, or get a specific index. + * + * @endpoint data/indexes + * @class splunkjs.Service.Indexes + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[529]++;root.Indexes=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Indexes + */path:function(){cov_1ks4ntaci2().f[169]++;cov_1ks4ntaci2().s[530]++;return Paths.indexes;},/** + * Creates a local instance of an index. + * + * @param {Object} props The properties for the new index. For a list of available parameters, see Index parameters on Splunk Developer Portal. + * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. + * + * @method splunkjs.Service.Indexes + */instantiateEntity:function(props){cov_1ks4ntaci2().f[170]++;var entityNamespace=(cov_1ks4ntaci2().s[531]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[532]++;return new root.Index(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.Indexes`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Indexes} A new `splunkjs.Service.Indexes` instance. + * + * @method splunkjs.Service.Indexes + */init:function(service,namespace){cov_1ks4ntaci2().f[171]++;cov_1ks4ntaci2().s[533]++;this._super(service,this.path(),namespace);},/** + * Creates an index with the given name and parameters. + * + * @example + * + * var indexes = service.indexes(); + * indexes.create("NewIndex", {assureUTF8: true}, function(err, newIndex) { + * console.log("CREATED"); + * }); + * + * @param {String} name A name for this index. + * @param {Object} params A dictionary of properties. For a list of available parameters, see Index parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the new index: `(err, createdIndex)`. + * + * @endpoint data/indexes + * @method splunkjs.Service.Indexes + */create:function(name,params,callback){cov_1ks4ntaci2().f[172]++;cov_1ks4ntaci2().s[534]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[145][0]++,utils.isObject(name))&&(cov_1ks4ntaci2().b[145][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[145][2]++,!callback)){cov_1ks4ntaci2().b[144][0]++;cov_1ks4ntaci2().s[535]++;callback=params;cov_1ks4ntaci2().s[536]++;params=name;cov_1ks4ntaci2().s[537]++;name=params.name;}else{cov_1ks4ntaci2().b[144][1]++;}cov_1ks4ntaci2().s[538]++;params=(cov_1ks4ntaci2().b[146][0]++,params)||(cov_1ks4ntaci2().b[146][1]++,{});cov_1ks4ntaci2().s[539]++;params["name"]=name;cov_1ks4ntaci2().s[540]++;return this._super(params,callback);}});/** + * Represents a specific stanza, which you can update and remove, from a + * configuration file. + * + * @endpoint configs/conf-{file}/{name}` + * @class splunkjs.Service.ConfigurationStanza + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[541]++;root.ConfigurationStanza=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ConfigurationStanza + */path:function(){cov_1ks4ntaci2().f[173]++;var name=(cov_1ks4ntaci2().s[542]++,this.name==="default"?(cov_1ks4ntaci2().b[147][0]++,"_new"):(cov_1ks4ntaci2().b[147][1]++,this.name));cov_1ks4ntaci2().s[543]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.file)+"/"+encodeURIComponent(name);},/** + * Constructor for `splunkjs.Service.ConfigurationStanza`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} file The name of the configuration file. + * @param {String} name The name of the new stanza. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationStanza + */init:function(service,file,name,namespace){cov_1ks4ntaci2().f[174]++;cov_1ks4ntaci2().s[544]++;this.name=name;cov_1ks4ntaci2().s[545]++;this.file=file;cov_1ks4ntaci2().s[546]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of stanzas for a specific property file. You can + * create and list stanzas using this collection container, or get a specific + * stanza. + * + * @endpoint configs/conf-{file} + * @class splunkjs.Service.ConfigurationFile + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[547]++;root.ConfigurationFile=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ConfigurationFile + */path:function(){cov_1ks4ntaci2().f[175]++;cov_1ks4ntaci2().s[548]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.name);},/** + * Creates a local instance of the default stanza in a configuration file. + * You cannot directly update the `ConfigurationStanza` returned by this function. + * + * This is equivalent to viewing `configs/conf-{file}/_new`. + * + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationFile + */getDefaultStanza:function(){cov_1ks4ntaci2().f[176]++;cov_1ks4ntaci2().s[549]++;return new root.ConfigurationStanza(this.service,this.name,"default",this.namespace);},/** + * Creates a local instance of a stanza in a configuration file. + * + * @param {Object} props The key-value properties for the new stanza. + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationFile + */instantiateEntity:function(props){cov_1ks4ntaci2().f[177]++;var entityNamespace=(cov_1ks4ntaci2().s[550]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[551]++;return new root.ConfigurationStanza(this.service,this.name,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.ConfigurationFile`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the configuration file. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. + * + * @method splunkjs.Service.ConfigurationFile + */init:function(service,name,namespace){cov_1ks4ntaci2().f[178]++;cov_1ks4ntaci2().s[552]++;this.name=name;cov_1ks4ntaci2().s[553]++;this._super(service,this.path(),namespace);},/** + * Creates a stanza in this configuration file. + * + * @example + * + * var file = service.configurations().item("props"); + * file.create("my_stanza", function(err, newStanza) { + * console.log("CREATED"); + * }); + * + * @param {String} stanzaName A name for this stanza. + * @param {Object} values A dictionary of key-value pairs to put in this stanza. + * @param {Function} callback A function to call with the created stanza: `(err, createdStanza)`. + * + * @endpoint configs/conf-{file} + * @method splunkjs.Service.ConfigurationFile + */create:function(stanzaName,values,callback){cov_1ks4ntaci2().f[179]++;cov_1ks4ntaci2().s[554]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[149][0]++,utils.isObject(stanzaName))&&(cov_1ks4ntaci2().b[149][1]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[149][2]++,!callback)){cov_1ks4ntaci2().b[148][0]++;cov_1ks4ntaci2().s[555]++;callback=values;cov_1ks4ntaci2().s[556]++;values=stanzaName;cov_1ks4ntaci2().s[557]++;stanzaName=values.name;}else{cov_1ks4ntaci2().b[148][1]++;}cov_1ks4ntaci2().s[558]++;if((cov_1ks4ntaci2().b[151][0]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[151][1]++,!callback)){cov_1ks4ntaci2().b[150][0]++;cov_1ks4ntaci2().s[559]++;callback=values;cov_1ks4ntaci2().s[560]++;values={};}else{cov_1ks4ntaci2().b[150][1]++;}cov_1ks4ntaci2().s[561]++;values=(cov_1ks4ntaci2().b[152][0]++,values)||(cov_1ks4ntaci2().b[152][1]++,{});cov_1ks4ntaci2().s[562]++;values["name"]=stanzaName;cov_1ks4ntaci2().s[563]++;return this._super(values,callback);}});/** + * Represents a collection of configuration files. You can create and list + * configuration files using this collection container, or get a specific file. + * + * @endpoint properties + * @class splunkjs.Service.Configurations + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[564]++;root.Configurations=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.Configurations + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Configurations + */path:function(){cov_1ks4ntaci2().f[180]++;cov_1ks4ntaci2().s[565]++;return Paths.properties;},/** + * Creates a local instance of a configuration file. + * + * @param {Object} props The properties for this configuration file. + * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. + * + * @method splunkjs.Service.Configurations + */instantiateEntity:function(props){cov_1ks4ntaci2().f[181]++;cov_1ks4ntaci2().s[566]++;return new root.ConfigurationFile(this.service,props.name,this.namespace);},/** + * Constructor for `splunkjs.Service.Configurations`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Configurations} A new `splunkjs.Service.Configurations` instance. + * + * @method splunkjs.Service.Configurations + */init:function(service,namespace){cov_1ks4ntaci2().f[182]++;cov_1ks4ntaci2().s[567]++;if((cov_1ks4ntaci2().b[154][0]++,!namespace)||(cov_1ks4ntaci2().b[154][1]++,namespace.owner==="-")||(cov_1ks4ntaci2().b[154][2]++,namespace.app==="-")){cov_1ks4ntaci2().b[153][0]++;cov_1ks4ntaci2().s[568]++;throw new Error("Configurations requires a non-wildcard owner/app");}else{cov_1ks4ntaci2().b[153][1]++;}cov_1ks4ntaci2().s[569]++;this._super(service,this.path(),namespace);},/** + * Creates a configuration file. + * + * @example + * + * var configurations = service.configurations(); + * configurations.create("myprops", function(err, newFile) { + * console.log("CREATED"); + * }); + * + * @param {String} filename A name for this configuration file. + * @param {Function} callback A function to call with the new configuration file: `(err, createdFile)`. + * + * @endpoint properties + * @method splunkjs.Service.Configurations + */create:function(filename,callback){cov_1ks4ntaci2().f[183]++;cov_1ks4ntaci2().s[570]++;// If someone called us with the default style of (params, callback), +// lets make it work +if(utils.isObject(filename)){cov_1ks4ntaci2().b[155][0]++;cov_1ks4ntaci2().s[571]++;filename=filename["__conf"];}else{cov_1ks4ntaci2().b[155][1]++;}cov_1ks4ntaci2().s[572]++;callback=(cov_1ks4ntaci2().b[156][0]++,callback)||(cov_1ks4ntaci2().b[156][1]++,function(){cov_1ks4ntaci2().f[184]++;});var that=(cov_1ks4ntaci2().s[573]++,this);var req=(cov_1ks4ntaci2().s[574]++,this.post("",{__conf:filename},function(err,response){cov_1ks4ntaci2().f[185]++;cov_1ks4ntaci2().s[575]++;if(err){cov_1ks4ntaci2().b[157][0]++;cov_1ks4ntaci2().s[576]++;callback(err);}else{cov_1ks4ntaci2().b[157][1]++;var entity=(cov_1ks4ntaci2().s[577]++,new root.ConfigurationFile(that.service,filename));cov_1ks4ntaci2().s[578]++;entity.fetch(function(){cov_1ks4ntaci2().f[186]++;cov_1ks4ntaci2().s[579]++;if(req.wasAborted){cov_1ks4ntaci2().b[158][0]++;cov_1ks4ntaci2().s[580]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[158][1]++;cov_1ks4ntaci2().s[581]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[582]++;return req;},doesFileExist:async function(filename){cov_1ks4ntaci2().f[187]++;cov_1ks4ntaci2().s[583]++;try{var that=(cov_1ks4ntaci2().s[584]++,this);// 1. Fetch files list +var response=(cov_1ks4ntaci2().s[585]++,await this.get_v2("",{__conf:filename}));// 2. Filter the files +var files=(cov_1ks4ntaci2().s[586]++,response?.body?.entry?.filter(f=>{cov_1ks4ntaci2().f[188]++;cov_1ks4ntaci2().s[587]++;return f.name===filename;}));// 2. Check if the file exists +cov_1ks4ntaci2().s[588]++;if((cov_1ks4ntaci2().b[160][0]++,files)&&(cov_1ks4ntaci2().b[160][1]++,files.length==0)){cov_1ks4ntaci2().b[159][0]++;cov_1ks4ntaci2().s[589]++;return{code:"FILE_NOT_FOUND",message:`File with the name '${filename}' does not exist.`};}else{cov_1ks4ntaci2().b[159][1]++;}// 3. Create a local instance +var configurationFile=(cov_1ks4ntaci2().s[590]++,new root.ConfigurationFile(that.service,filename));// 4. Load the file content +var fetchedFile=(cov_1ks4ntaci2().s[591]++,await configurationFile.fetch_v2());cov_1ks4ntaci2().s[592]++;return{file:fetchedFile};}catch(error){cov_1ks4ntaci2().s[593]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},doesStanzaExist:async function(file,stanza){cov_1ks4ntaci2().f[189]++;cov_1ks4ntaci2().s[594]++;try{// 1. check if the stanza exists +var fetchedStanza=(cov_1ks4ntaci2().s[595]++,file.item(stanza));cov_1ks4ntaci2().s[596]++;if(!fetchedStanza){cov_1ks4ntaci2().b[161][0]++;cov_1ks4ntaci2().s[597]++;return{code:"STANZA_NOT_FOUND",message:`Stanza with the name '${stanza}' does not exist.`};}else{cov_1ks4ntaci2().b[161][1]++;cov_1ks4ntaci2().s[598]++;return{stanza:fetchedStanza};}}catch(error){cov_1ks4ntaci2().s[599]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},create_v2:async function(configs,svc,filename,stanza,keyValueMap,callback){cov_1ks4ntaci2().f[190]++;cov_1ks4ntaci2().s[600]++;callback=(cov_1ks4ntaci2().b[162][0]++,callback)||(cov_1ks4ntaci2().b[162][1]++,function(){cov_1ks4ntaci2().f[191]++;});var that=(cov_1ks4ntaci2().s[601]++,this);// 1. Check if the file exists +var doesFileExistResponse=(cov_1ks4ntaci2().s[602]++,await this.doesFileExist(filename));var configFile=(cov_1ks4ntaci2().s[603]++,doesFileExistResponse.file);// 2. If the file doesn't exist, create a new file +cov_1ks4ntaci2().s[604]++;if(!configFile){cov_1ks4ntaci2().b[163][0]++;cov_1ks4ntaci2().s[605]++;console.log(doesFileExistResponse);cov_1ks4ntaci2().s[606]++;console.log("Creating a new configuration file...");cov_1ks4ntaci2().s[607]++;that.create({__conf:filename},(err,newFile)=>{cov_1ks4ntaci2().f[192]++;cov_1ks4ntaci2().s[608]++;return console.log(`Configuration File created: ${filename}`);});cov_1ks4ntaci2().s[609]++;configFile=new root.ConfigurationFile(that.service,filename);cov_1ks4ntaci2().s[610]++;configFile=await configFile.fetch_v2();}else{cov_1ks4ntaci2().b[163][1]++;}// 2. Check if the stanza exists +var doesStanzaExistResponse=(cov_1ks4ntaci2().s[611]++,await this.doesStanzaExist(configFile,stanza));var configStanza=(cov_1ks4ntaci2().s[612]++,doesStanzaExistResponse.stanza);// 3. If the stanza doesn't exist, create a new stanza with given keyValueMap +cov_1ks4ntaci2().s[613]++;if(!configStanza){cov_1ks4ntaci2().b[164][0]++;cov_1ks4ntaci2().s[614]++;console.log(doesStanzaExistResponse);cov_1ks4ntaci2().s[615]++;console.log("Creating a new configuration stanza...");cov_1ks4ntaci2().s[616]++;configFile.create(stanza,keyValueMap,function(err,newStanza){cov_1ks4ntaci2().f[193]++;cov_1ks4ntaci2().s[617]++;console.log(`Configuration Stanza created: ${stanza}`);cov_1ks4ntaci2().s[618]++;callback();});}// 4. If the stanza exists, update it with the keyValueMap +else{cov_1ks4ntaci2().b[164][1]++;cov_1ks4ntaci2().s[619]++;configStanza.update(keyValueMap,(err,updatedStanza)=>{cov_1ks4ntaci2().f[194]++;cov_1ks4ntaci2().s[620]++;console.log(`Configuration Stanza updated: ${stanza}`);cov_1ks4ntaci2().s[621]++;callback();});}}});/** + * Represents a specific search job. You can perform different operations + * on this job, such as reading its status, canceling it, and getting results. + * + * @endpoint search/jobs/{search_id} + * @class splunkjs.Service.Job + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[622]++;root.Job=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Job + */path:function(){cov_1ks4ntaci2().f[195]++;cov_1ks4ntaci2().s[623]++;return Paths.jobs+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.Job`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} sid The search ID for this search job. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. + * + * @method splunkjs.Service.Job + */init:function(service,sid,namespace){cov_1ks4ntaci2().f[196]++;cov_1ks4ntaci2().s[624]++;this.name=sid;cov_1ks4ntaci2().s[625]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[626]++;this.sid=sid;// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[627]++;this.cancel=utils.bind(this,this.cancel);cov_1ks4ntaci2().s[628]++;this.disablePreview=utils.bind(this,this.disablePreview);cov_1ks4ntaci2().s[629]++;this.enablePreview=utils.bind(this,this.enablePreview);cov_1ks4ntaci2().s[630]++;this.events=utils.bind(this,this.events);cov_1ks4ntaci2().s[631]++;this.finalize=utils.bind(this,this.finalize);cov_1ks4ntaci2().s[632]++;this.pause=utils.bind(this,this.pause);cov_1ks4ntaci2().s[633]++;this.preview=utils.bind(this,this.preview);cov_1ks4ntaci2().s[634]++;this.results=utils.bind(this,this.results);cov_1ks4ntaci2().s[635]++;this.searchlog=utils.bind(this,this.searchlog);cov_1ks4ntaci2().s[636]++;this.setPriority=utils.bind(this,this.setPriority);cov_1ks4ntaci2().s[637]++;this.setTTL=utils.bind(this,this.setTTL);cov_1ks4ntaci2().s[638]++;this.summary=utils.bind(this,this.summary);cov_1ks4ntaci2().s[639]++;this.timeline=utils.bind(this,this.timeline);cov_1ks4ntaci2().s[640]++;this.touch=utils.bind(this,this.touch);cov_1ks4ntaci2().s[641]++;this.unpause=utils.bind(this,this.unpause);},/** + * Cancels a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.cancel(function(err) { + * console.log("CANCELLED"); + * }); + * + * @param {Function} callback A function to call when the search is done: `(err)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */cancel:function(callback){cov_1ks4ntaci2().f[197]++;var req=(cov_1ks4ntaci2().s[642]++,this.post("control",{action:"cancel"},callback));cov_1ks4ntaci2().s[643]++;return req;},/** + * Disables preview generation for a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.disablePreview(function(err, job) { + * console.log("PREVIEW DISABLED"); + * }); + * + * @param {Function} callback A function to call with this search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */disablePreview:function(callback){cov_1ks4ntaci2().f[198]++;cov_1ks4ntaci2().s[644]++;callback=(cov_1ks4ntaci2().b[165][0]++,callback)||(cov_1ks4ntaci2().b[165][1]++,function(){cov_1ks4ntaci2().f[199]++;});var that=(cov_1ks4ntaci2().s[645]++,this);var req=(cov_1ks4ntaci2().s[646]++,this.post("control",{action:"disablepreview"},function(err){cov_1ks4ntaci2().f[200]++;cov_1ks4ntaci2().s[647]++;callback(err,that);}));cov_1ks4ntaci2().s[648]++;return req;},/** + * Enables preview generation for a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.disablePreview(function(err, job) { + * console.log("PREVIEW ENABLED"); + * }); + * + * @param {Function} callback A function to call with this search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */enablePreview:function(callback){cov_1ks4ntaci2().f[201]++;cov_1ks4ntaci2().s[649]++;callback=(cov_1ks4ntaci2().b[166][0]++,callback)||(cov_1ks4ntaci2().b[166][1]++,function(){cov_1ks4ntaci2().f[202]++;});var that=(cov_1ks4ntaci2().s[650]++,this);var req=(cov_1ks4ntaci2().s[651]++,this.post("control",{action:"enablepreview"},function(err){cov_1ks4ntaci2().f[203]++;cov_1ks4ntaci2().s[652]++;callback(err,that);}));cov_1ks4ntaci2().s[653]++;return req;},/** + * Returns the events of a search job with given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.events({count: 10}, function(err, events, job) { + * console.log("Fields: ", events.fields); + * }); + * + * @param {Object} params The parameters for retrieving events. For a list of available parameters, see the GET search/jobs/{search_id}/events endpoint in the REST API documentation. + * @param {Function} callback A function to call when the events are retrieved: `(err, events, job)`. + * + * @endpoint search/jobs/{search_id}/events + * @method splunkjs.Service.Job + */events:function(params,callback){cov_1ks4ntaci2().f[204]++;cov_1ks4ntaci2().s[654]++;callback=(cov_1ks4ntaci2().b[167][0]++,callback)||(cov_1ks4ntaci2().b[167][1]++,function(){cov_1ks4ntaci2().f[205]++;});cov_1ks4ntaci2().s[655]++;params=(cov_1ks4ntaci2().b[168][0]++,params)||(cov_1ks4ntaci2().b[168][1]++,{});cov_1ks4ntaci2().s[656]++;params.output_mode=(cov_1ks4ntaci2().b[169][0]++,params.output_mode)||(cov_1ks4ntaci2().b[169][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[657]++,this);cov_1ks4ntaci2().s[658]++;return this.get("events",params,function(err,response){cov_1ks4ntaci2().f[206]++;cov_1ks4ntaci2().s[659]++;if(err){cov_1ks4ntaci2().b[170][0]++;cov_1ks4ntaci2().s[660]++;callback(err);}else{cov_1ks4ntaci2().b[170][1]++;cov_1ks4ntaci2().s[661]++;callback(null,response.data,that);}});},/** + * Finalizes a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.finalize(function(err, job) { + * console.log("JOB FINALIZED"); + * }); + * + * @param {Function} callback A function to call with the job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */finalize:function(callback){cov_1ks4ntaci2().f[207]++;cov_1ks4ntaci2().s[662]++;callback=(cov_1ks4ntaci2().b[171][0]++,callback)||(cov_1ks4ntaci2().b[171][1]++,function(){cov_1ks4ntaci2().f[208]++;});var that=(cov_1ks4ntaci2().s[663]++,this);var req=(cov_1ks4ntaci2().s[664]++,this.post("control",{action:"finalize"},function(err){cov_1ks4ntaci2().f[209]++;cov_1ks4ntaci2().s[665]++;callback(err,that);}));cov_1ks4ntaci2().s[666]++;return req;},/** + * Returns an iterator over this search job's events or results. + * + * @param {String} type One of {"events", "preview", "results"}. + * @param {Object} params A dictionary of optional parameters: + * - `pagesize` (_integer_): The number of items to return on each request. Defaults to as many as possible. + * @return {Object} An iterator object with a `next(callback)` method, where `callback` is of the form `(err, results, hasMoreResults)`. + * + * @endpoint search/jobs/{search_id}/results + * @method splunkjs.Service.Job + */iterator:function(type,params){cov_1ks4ntaci2().f[210]++;cov_1ks4ntaci2().s[667]++;return new root.PaginatedEndpointIterator(this[type],params);},/** + * Pauses a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.pause(function(err, job) { + * console.log("JOB PAUSED"); + * }); + * + * @param {Function} callback A function to call with the job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */pause:function(callback){cov_1ks4ntaci2().f[211]++;cov_1ks4ntaci2().s[668]++;callback=(cov_1ks4ntaci2().b[172][0]++,callback)||(cov_1ks4ntaci2().b[172][1]++,function(){cov_1ks4ntaci2().f[212]++;});var that=(cov_1ks4ntaci2().s[669]++,this);var req=(cov_1ks4ntaci2().s[670]++,this.post("control",{action:"pause"},function(err){cov_1ks4ntaci2().f[213]++;cov_1ks4ntaci2().s[671]++;callback(err,that);}));cov_1ks4ntaci2().s[672]++;return req;},/* + * Gets the preview results for a search job with given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.preview({count: 10}, function(err, results, job) { + * console.log("Fields: ", results.fields); + * }); + * + * @param {Object} params The parameters for retrieving preview results. For a list of available parameters, see the GET search/jobs/{search_id}/results_preview endpoint in the REST API documentation. + * @param {Function} callback A function to call when the preview results are retrieved : `(err, results, job)`. + * + * @endpoint search/jobs/{search_id}/results_preview + * @method splunkjs.Service.Job + */preview:function(params,callback){cov_1ks4ntaci2().f[214]++;cov_1ks4ntaci2().s[673]++;callback=(cov_1ks4ntaci2().b[173][0]++,callback)||(cov_1ks4ntaci2().b[173][1]++,function(){cov_1ks4ntaci2().f[215]++;});cov_1ks4ntaci2().s[674]++;params=(cov_1ks4ntaci2().b[174][0]++,params)||(cov_1ks4ntaci2().b[174][1]++,{});cov_1ks4ntaci2().s[675]++;params.output_mode=(cov_1ks4ntaci2().b[175][0]++,params.output_mode)||(cov_1ks4ntaci2().b[175][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[676]++,this);cov_1ks4ntaci2().s[677]++;return this.get("results_preview",params,function(err,response){cov_1ks4ntaci2().f[216]++;cov_1ks4ntaci2().s[678]++;if(err){cov_1ks4ntaci2().b[176][0]++;cov_1ks4ntaci2().s[679]++;callback(err);}else{cov_1ks4ntaci2().b[176][1]++;cov_1ks4ntaci2().s[680]++;callback(null,response.data,that);}});},/** + * Gets the results for a search job with given parameters. + * + * The callback can get `undefined` for its `results` parameter if the + * job is not yet done. To avoid this, use the `Job.track()` method to + * wait until the job is complete prior to fetching the results with + * this method. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.results({count: 10}, function(err, results, job) { + * console.log("Fields: ", results.results); + * }); + * + * @param {Object} params The parameters for retrieving search results. For a list of available parameters, see the GET search/jobs/{search_id}/results endpoint in the REST API documentation. + * @param {Function} callback A function to call when the results are retrieved: `(err, results, job)`. + * + * @endpoint search/jobs/{search_id}/results + * @method splunkjs.Service.Job + */results:function(params,callback){cov_1ks4ntaci2().f[217]++;cov_1ks4ntaci2().s[681]++;callback=(cov_1ks4ntaci2().b[177][0]++,callback)||(cov_1ks4ntaci2().b[177][1]++,function(){cov_1ks4ntaci2().f[218]++;});cov_1ks4ntaci2().s[682]++;params=(cov_1ks4ntaci2().b[178][0]++,params)||(cov_1ks4ntaci2().b[178][1]++,{});cov_1ks4ntaci2().s[683]++;params.output_mode=(cov_1ks4ntaci2().b[179][0]++,params.output_mode)||(cov_1ks4ntaci2().b[179][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[684]++,this);cov_1ks4ntaci2().s[685]++;return this.get("results",params,function(err,response){cov_1ks4ntaci2().f[219]++;cov_1ks4ntaci2().s[686]++;if(err){cov_1ks4ntaci2().b[180][0]++;cov_1ks4ntaci2().s[687]++;callback(err);}else{cov_1ks4ntaci2().b[180][1]++;cov_1ks4ntaci2().s[688]++;callback(null,response.data,that);}});},/** + * Gets the search log for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.searchlog(function(err, searchlog, job) { + * console.log(searchlog); + * }); + * + * @param {Function} callback A function to call with the search log and job: `(err, searchlog, job)`. + * + * @endpoint search/jobs/{search_id}/search.log + * @method splunkjs.Service.Job + */searchlog:function(callback){cov_1ks4ntaci2().f[220]++;cov_1ks4ntaci2().s[689]++;callback=(cov_1ks4ntaci2().b[181][0]++,callback)||(cov_1ks4ntaci2().b[181][1]++,function(){cov_1ks4ntaci2().f[221]++;});var that=(cov_1ks4ntaci2().s[690]++,this);cov_1ks4ntaci2().s[691]++;return this.get("search.log",{},function(err,response){cov_1ks4ntaci2().f[222]++;cov_1ks4ntaci2().s[692]++;if(err){cov_1ks4ntaci2().b[182][0]++;cov_1ks4ntaci2().s[693]++;callback(err);}else{cov_1ks4ntaci2().b[182][1]++;cov_1ks4ntaci2().s[694]++;callback(null,response.data,that);}});},/** + * Sets the priority for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.setPriority(6, function(err, job) { + * console.log("JOB PRIORITY SET"); + * }); + * + * @param {Number} value The priority (an integer between 1-10). A higher value means a higher priority. + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */setPriority:function(value,callback){cov_1ks4ntaci2().f[223]++;cov_1ks4ntaci2().s[695]++;callback=(cov_1ks4ntaci2().b[183][0]++,callback)||(cov_1ks4ntaci2().b[183][1]++,function(){cov_1ks4ntaci2().f[224]++;});var that=(cov_1ks4ntaci2().s[696]++,this);var req=(cov_1ks4ntaci2().s[697]++,this.post("control",{action:"setpriority",priority:value},function(err){cov_1ks4ntaci2().f[225]++;cov_1ks4ntaci2().s[698]++;callback(err,that);}));cov_1ks4ntaci2().s[699]++;return req;},/** + * Sets the time to live (TTL) for the search job, which is the time before + * the search job expires after it has been completed and is still available. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.setTTL(1000, function(err, job) { + * console.log("JOB TTL SET"); + * }); + * + * @param {Number} value The time to live, in seconds. + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */setTTL:function(value,callback){cov_1ks4ntaci2().f[226]++;cov_1ks4ntaci2().s[700]++;callback=(cov_1ks4ntaci2().b[184][0]++,callback)||(cov_1ks4ntaci2().b[184][1]++,function(){cov_1ks4ntaci2().f[227]++;});var that=(cov_1ks4ntaci2().s[701]++,this);var req=(cov_1ks4ntaci2().s[702]++,this.post("control",{action:"setttl",ttl:value},function(err){cov_1ks4ntaci2().f[228]++;cov_1ks4ntaci2().s[703]++;callback(err,that);}));cov_1ks4ntaci2().s[704]++;return req;},/** + * Gets the summary for this search job with the given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.summary({top_count: 5}, function(err, summary, job) { + * console.log("Summary: ", summary); + * }); + * + * @param {Object} params The parameters for retrieving the summary. For a list of available parameters, see the GET search/jobs/{search_id}/summary endpoint in the REST API documentation. + * @param {Function} callback A function to call with the summary and search job: `(err, summary, job)`. + * + * @endpoint search/jobs/{search_id}/summmary + * @method splunkjs.Service.Job + */summary:function(params,callback){cov_1ks4ntaci2().f[229]++;cov_1ks4ntaci2().s[705]++;callback=(cov_1ks4ntaci2().b[185][0]++,callback)||(cov_1ks4ntaci2().b[185][1]++,function(){cov_1ks4ntaci2().f[230]++;});var that=(cov_1ks4ntaci2().s[706]++,this);cov_1ks4ntaci2().s[707]++;return this.get("summary",params,function(err,response){cov_1ks4ntaci2().f[231]++;cov_1ks4ntaci2().s[708]++;if(err){cov_1ks4ntaci2().b[186][0]++;cov_1ks4ntaci2().s[709]++;callback(err);}else{cov_1ks4ntaci2().b[186][1]++;cov_1ks4ntaci2().s[710]++;callback(null,response.data,that);}});},/** + * Gets the timeline for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.timeline({time_format: "%c"}, function(err, job, timeline) { + * console.log("Timeline: ", timeline); + * }); + * + * @param {Object} params The parameters for retrieving the timeline. For a list of available parameters, see the GET search/jobs/{search_id}/timeline endpoint in the REST API documentation. + * @param {Function} callback A function to call with the timeline and search job: `(err, timeline, job)`. + * + * @endpoint search/jobs/{search_id}/timeline + * @method splunkjs.Service.Job + */timeline:function(params,callback){cov_1ks4ntaci2().f[232]++;cov_1ks4ntaci2().s[711]++;callback=(cov_1ks4ntaci2().b[187][0]++,callback)||(cov_1ks4ntaci2().b[187][1]++,function(){cov_1ks4ntaci2().f[233]++;});var that=(cov_1ks4ntaci2().s[712]++,this);cov_1ks4ntaci2().s[713]++;return this.get("timeline",params,function(err,response){cov_1ks4ntaci2().f[234]++;cov_1ks4ntaci2().s[714]++;if(err){cov_1ks4ntaci2().b[188][0]++;cov_1ks4ntaci2().s[715]++;callback(err);}else{cov_1ks4ntaci2().b[188][1]++;cov_1ks4ntaci2().s[716]++;callback(null,response.data,that);}});},/** + * Touches a search job, which means extending the expiration time of + * the search to now plus the time to live (TTL). + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.touch(function(err) { + * console.log("JOB TOUCHED"); + * }); + * + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */touch:function(callback){cov_1ks4ntaci2().f[235]++;cov_1ks4ntaci2().s[717]++;callback=(cov_1ks4ntaci2().b[189][0]++,callback)||(cov_1ks4ntaci2().b[189][1]++,function(){cov_1ks4ntaci2().f[236]++;});var that=(cov_1ks4ntaci2().s[718]++,this);var req=(cov_1ks4ntaci2().s[719]++,this.post("control",{action:"touch"},function(err){cov_1ks4ntaci2().f[237]++;cov_1ks4ntaci2().s[720]++;callback(err,that);}));cov_1ks4ntaci2().s[721]++;return req;},/** + * Starts polling the status of this search job, and fires callbacks + * upon each status change. + * + * @param {Object} options A dictionary of optional parameters: + * - `period` (_integer_): The number of milliseconds to wait between each poll. Defaults to 500. + * @param {Object|Function} callbacks A dictionary of optional callbacks: + * - `ready`: A function `(job)` invoked when the job's properties first become available. + * - `progress`: A function `(job)` invoked whenever new job properties are available. + * - `done`: A function `(job)` invoked if the job completes successfully. No further polling is done. + * - `failed`: A function `(job)` invoked if the job fails executing on the server. No further polling is done. + * - `error`: A function `(err)` invoked if an error occurs while polling. No further polling is done. + * Or, if a function `(job)`, equivalent to passing it as a `done` callback. + * + * @method splunkjs.Service.Job + */track:function(options,callbacks){cov_1ks4ntaci2().f[238]++;var period=(cov_1ks4ntaci2().s[722]++,(cov_1ks4ntaci2().b[190][0]++,options.period)||(cov_1ks4ntaci2().b[190][1]++,500));// ms +cov_1ks4ntaci2().s[723]++;if(utils.isFunction(callbacks)){cov_1ks4ntaci2().b[191][0]++;cov_1ks4ntaci2().s[724]++;callbacks={done:callbacks};}else{cov_1ks4ntaci2().b[191][1]++;}var noCallbacksAfterReady=(cov_1ks4ntaci2().s[725]++,(cov_1ks4ntaci2().b[192][0]++,!callbacks.progress)&&(cov_1ks4ntaci2().b[192][1]++,!callbacks.done)&&(cov_1ks4ntaci2().b[192][2]++,!callbacks.failed)&&(cov_1ks4ntaci2().b[192][3]++,!callbacks.error));cov_1ks4ntaci2().s[726]++;callbacks.ready=(cov_1ks4ntaci2().b[193][0]++,callbacks.ready)||(cov_1ks4ntaci2().b[193][1]++,function(){cov_1ks4ntaci2().f[239]++;});cov_1ks4ntaci2().s[727]++;callbacks.progress=(cov_1ks4ntaci2().b[194][0]++,callbacks.progress)||(cov_1ks4ntaci2().b[194][1]++,function(){cov_1ks4ntaci2().f[240]++;});cov_1ks4ntaci2().s[728]++;callbacks.done=(cov_1ks4ntaci2().b[195][0]++,callbacks.done)||(cov_1ks4ntaci2().b[195][1]++,function(){cov_1ks4ntaci2().f[241]++;});cov_1ks4ntaci2().s[729]++;callbacks.failed=(cov_1ks4ntaci2().b[196][0]++,callbacks.failed)||(cov_1ks4ntaci2().b[196][1]++,function(){cov_1ks4ntaci2().f[242]++;});cov_1ks4ntaci2().s[730]++;callbacks.error=(cov_1ks4ntaci2().b[197][0]++,callbacks.error)||(cov_1ks4ntaci2().b[197][1]++,function(){cov_1ks4ntaci2().f[243]++;});// For use by tests only +cov_1ks4ntaci2().s[731]++;callbacks._preready=(cov_1ks4ntaci2().b[198][0]++,callbacks._preready)||(cov_1ks4ntaci2().b[198][1]++,function(){cov_1ks4ntaci2().f[244]++;});cov_1ks4ntaci2().s[732]++;callbacks._stoppedAfterReady=(cov_1ks4ntaci2().b[199][0]++,callbacks._stoppedAfterReady)||(cov_1ks4ntaci2().b[199][1]++,function(){cov_1ks4ntaci2().f[245]++;});var that=(cov_1ks4ntaci2().s[733]++,this);var emittedReady=(cov_1ks4ntaci2().s[734]++,false);var doneLooping=(cov_1ks4ntaci2().s[735]++,false);cov_1ks4ntaci2().s[736]++;Async.whilst(function(){cov_1ks4ntaci2().f[246]++;cov_1ks4ntaci2().s[737]++;return!doneLooping;},function(nextIteration){cov_1ks4ntaci2().f[247]++;cov_1ks4ntaci2().s[738]++;that.fetch(function(err,job){cov_1ks4ntaci2().f[248]++;cov_1ks4ntaci2().s[739]++;if(err){cov_1ks4ntaci2().b[200][0]++;cov_1ks4ntaci2().s[740]++;nextIteration(err);cov_1ks4ntaci2().s[741]++;return;}else{cov_1ks4ntaci2().b[200][1]++;}var dispatchState=(cov_1ks4ntaci2().s[742]++,job.properties().dispatchState);var notReady=(cov_1ks4ntaci2().s[743]++,(cov_1ks4ntaci2().b[201][0]++,dispatchState==="QUEUED")||(cov_1ks4ntaci2().b[201][1]++,dispatchState==="PARSING"));cov_1ks4ntaci2().s[744]++;if(notReady){cov_1ks4ntaci2().b[202][0]++;cov_1ks4ntaci2().s[745]++;callbacks._preready(job);}else{cov_1ks4ntaci2().b[202][1]++;cov_1ks4ntaci2().s[746]++;if(!emittedReady){cov_1ks4ntaci2().b[203][0]++;cov_1ks4ntaci2().s[747]++;callbacks.ready(job);cov_1ks4ntaci2().s[748]++;emittedReady=true;// Optimization: Don't keep polling the job if the +// caller only cares about the `ready` event. +cov_1ks4ntaci2().s[749]++;if(noCallbacksAfterReady){cov_1ks4ntaci2().b[204][0]++;cov_1ks4ntaci2().s[750]++;callbacks._stoppedAfterReady(job);cov_1ks4ntaci2().s[751]++;doneLooping=true;cov_1ks4ntaci2().s[752]++;nextIteration();cov_1ks4ntaci2().s[753]++;return;}else{cov_1ks4ntaci2().b[204][1]++;}}else{cov_1ks4ntaci2().b[203][1]++;}cov_1ks4ntaci2().s[754]++;callbacks.progress(job);var props=(cov_1ks4ntaci2().s[755]++,job.properties());cov_1ks4ntaci2().s[756]++;if((cov_1ks4ntaci2().b[206][0]++,dispatchState==="DONE")&&(cov_1ks4ntaci2().b[206][1]++,props.isDone)){cov_1ks4ntaci2().b[205][0]++;cov_1ks4ntaci2().s[757]++;callbacks.done(job);cov_1ks4ntaci2().s[758]++;doneLooping=true;cov_1ks4ntaci2().s[759]++;nextIteration();cov_1ks4ntaci2().s[760]++;return;}else{cov_1ks4ntaci2().b[205][1]++;cov_1ks4ntaci2().s[761]++;if((cov_1ks4ntaci2().b[208][0]++,dispatchState==="FAILED")&&(cov_1ks4ntaci2().b[208][1]++,props.isFailed)){cov_1ks4ntaci2().b[207][0]++;cov_1ks4ntaci2().s[762]++;callbacks.failed(job);cov_1ks4ntaci2().s[763]++;doneLooping=true;cov_1ks4ntaci2().s[764]++;nextIteration();cov_1ks4ntaci2().s[765]++;return;}else{cov_1ks4ntaci2().b[207][1]++;}}}cov_1ks4ntaci2().s[766]++;Async.sleep(period,nextIteration);});},function(err){cov_1ks4ntaci2().f[249]++;cov_1ks4ntaci2().s[767]++;if(err){cov_1ks4ntaci2().b[209][0]++;cov_1ks4ntaci2().s[768]++;callbacks.error(err);}else{cov_1ks4ntaci2().b[209][1]++;}});},/** + * Resumes a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.unpause(function(err) { + * console.log("JOB UNPAUSED"); + * }); + * + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */unpause:function(callback){cov_1ks4ntaci2().f[250]++;cov_1ks4ntaci2().s[769]++;callback=(cov_1ks4ntaci2().b[210][0]++,callback)||(cov_1ks4ntaci2().b[210][1]++,function(){cov_1ks4ntaci2().f[251]++;});var that=(cov_1ks4ntaci2().s[770]++,this);var req=(cov_1ks4ntaci2().s[771]++,this.post("control",{action:"unpause"},function(err){cov_1ks4ntaci2().f[252]++;cov_1ks4ntaci2().s[772]++;callback(err,that);}));cov_1ks4ntaci2().s[773]++;return req;}});/** + * Represents a collection of search jobs. You can create and list search + * jobs using this collection container, or get a specific search job. + * + * @endpoint search/jobs + * @class splunkjs.Service.Jobs + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[774]++;root.Jobs=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Jobs + */path:function(){cov_1ks4ntaci2().f[253]++;cov_1ks4ntaci2().s[775]++;return Paths.jobs;},/** + * Creates a local instance of a job. + * + * @param {Object} props The properties for this new job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. + * + * @method splunkjs.Service.Jobs + */instantiateEntity:function(props){cov_1ks4ntaci2().f[254]++;var sid=(cov_1ks4ntaci2().s[776]++,props.content.sid);var entityNamespace=(cov_1ks4ntaci2().s[777]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[778]++;return new root.Job(this.service,sid,entityNamespace);},/** + * Constructor for `splunkjs.Service.Jobs`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Jobs} A new `splunkjs.Service.Jobs` instance. + * + * @method splunkjs.Service.Jobs + */init:function(service,namespace){cov_1ks4ntaci2().f[255]++;cov_1ks4ntaci2().s[779]++;this._super(service,this.path(),namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[780]++;this.create=utils.bind(this,this.create);},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the created job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */create:function(query,params,callback){cov_1ks4ntaci2().f[256]++;cov_1ks4ntaci2().s[781]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[212][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[212][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[212][2]++,!callback)){cov_1ks4ntaci2().b[211][0]++;cov_1ks4ntaci2().s[782]++;callback=params;cov_1ks4ntaci2().s[783]++;params=query;cov_1ks4ntaci2().s[784]++;query=params.search;}else{cov_1ks4ntaci2().b[211][1]++;}cov_1ks4ntaci2().s[785]++;callback=(cov_1ks4ntaci2().b[213][0]++,callback)||(cov_1ks4ntaci2().b[213][1]++,function(){cov_1ks4ntaci2().f[257]++;});cov_1ks4ntaci2().s[786]++;params=(cov_1ks4ntaci2().b[214][0]++,params)||(cov_1ks4ntaci2().b[214][1]++,{});cov_1ks4ntaci2().s[787]++;params.search=query;cov_1ks4ntaci2().s[788]++;if(((cov_1ks4ntaci2().b[216][0]++,params.exec_mode)||(cov_1ks4ntaci2().b[216][1]++,"")).toLowerCase()==="oneshot"){cov_1ks4ntaci2().b[215][0]++;cov_1ks4ntaci2().s[789]++;throw new Error("Please use splunkjs.Service.Jobs.oneshotSearch for exec_mode=oneshot");}else{cov_1ks4ntaci2().b[215][1]++;}cov_1ks4ntaci2().s[790]++;if(!params.search){cov_1ks4ntaci2().b[217][0]++;cov_1ks4ntaci2().s[791]++;callback("Must provide a query to create a search job");cov_1ks4ntaci2().s[792]++;return;}else{cov_1ks4ntaci2().b[217][1]++;}var that=(cov_1ks4ntaci2().s[793]++,this);cov_1ks4ntaci2().s[794]++;return this.post("",params,function(err,response){cov_1ks4ntaci2().f[258]++;cov_1ks4ntaci2().s[795]++;if(err){cov_1ks4ntaci2().b[218][0]++;cov_1ks4ntaci2().s[796]++;callback(err);}else{cov_1ks4ntaci2().b[218][1]++;var job=(cov_1ks4ntaci2().s[797]++,new root.Job(that.service,response.data.sid,that.namespace));cov_1ks4ntaci2().s[798]++;callback(null,job);}});},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. + * + * @example + * + * var jobs = service.jobs(); + * jobs.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { + * console.log("CREATED": newJob.sid); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call with the new search job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */search:function(query,params,callback){cov_1ks4ntaci2().f[259]++;cov_1ks4ntaci2().s[799]++;return this.create(query,params,callback);},/** + * Creates a oneshot search from a given search query and parameters. + * + * @example + * + * var jobs = service.jobs(); + * jobs.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { + * console.log("RESULT FIELDS": results.fields); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search: + * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). + * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `rf` (_string_): Specifies one or more fields to add to the search. + * @param {Function} callback A function to call with the results of the search: `(err, results)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */oneshotSearch:function(query,params,callback){cov_1ks4ntaci2().f[260]++;cov_1ks4ntaci2().s[800]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[220][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[220][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[220][2]++,!callback)){cov_1ks4ntaci2().b[219][0]++;cov_1ks4ntaci2().s[801]++;callback=params;cov_1ks4ntaci2().s[802]++;params=query;cov_1ks4ntaci2().s[803]++;query=params.search;}else{cov_1ks4ntaci2().b[219][1]++;}cov_1ks4ntaci2().s[804]++;callback=(cov_1ks4ntaci2().b[221][0]++,callback)||(cov_1ks4ntaci2().b[221][1]++,function(){cov_1ks4ntaci2().f[261]++;});cov_1ks4ntaci2().s[805]++;params=(cov_1ks4ntaci2().b[222][0]++,params)||(cov_1ks4ntaci2().b[222][1]++,{});cov_1ks4ntaci2().s[806]++;params.search=query;cov_1ks4ntaci2().s[807]++;params.exec_mode="oneshot";cov_1ks4ntaci2().s[808]++;if(!params.search){cov_1ks4ntaci2().b[223][0]++;cov_1ks4ntaci2().s[809]++;callback("Must provide a query to create a search job");}else{cov_1ks4ntaci2().b[223][1]++;}var outputMode=(cov_1ks4ntaci2().s[810]++,(cov_1ks4ntaci2().b[224][0]++,params.output_mode)||(cov_1ks4ntaci2().b[224][1]++,"json_rows"));var path=(cov_1ks4ntaci2().s[811]++,this.qualifiedPath);var method=(cov_1ks4ntaci2().s[812]++,"POST");var headers=(cov_1ks4ntaci2().s[813]++,{});var post=(cov_1ks4ntaci2().s[814]++,params);var get=(cov_1ks4ntaci2().s[815]++,{output_mode:outputMode});var body=(cov_1ks4ntaci2().s[816]++,null);var req=(cov_1ks4ntaci2().s[817]++,this.service.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[262]++;cov_1ks4ntaci2().s[818]++;if(err){cov_1ks4ntaci2().b[225][0]++;cov_1ks4ntaci2().s[819]++;callback(err);}else{cov_1ks4ntaci2().b[225][1]++;cov_1ks4ntaci2().s[820]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[821]++;return req;}});/** + * Represents a field of a data model object. + * This is a helper class for `DataModelCalculation` + * and `DataModelObject`. + * + * Has these properties: + * - `fieldName` (_string_): The name of this field. + * - `displayName` (_string_): A human readable name for this field. + * - `type` (_string_): The type of this field. + * - `multivalued` (_boolean_): Whether this field is multivalued. + * - `required` (_boolean_): Whether this field is required. + * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. + * - `editable` (_boolean_): Whether this field can be edited. + * - `comment` (_string_): A comment for this field, or `null` if there isn't one. + * - `fieldSearch` (_string_): A search query fragment for this field. + * - `lineage` (_array_): An array of strings of the lineage of the data model + * on which this field is defined. + * - `owner` (_string_): The name of the data model object on which this field is defined. + * + * Possible types for a data model field: + * - `string` + * - `boolean` + * - `number` + * - `timestamp` + * - `objectCount` + * - `childCount` + * - `ipv4` + * + * @class splunkjs.Service.DataModelField + */cov_1ks4ntaci2().s[822]++;root.DataModelField=Class.extend({_types:["string","number","timestamp","objectCount","childCount","ipv4","boolean"],/** + * Constructor for a data model field. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `fieldName` (_string_): The name of this field. + * - `displayName` (_string_): A human readable name for this field. + * - `type` (_string_): The type of this field, see valid types in class docs. + * - `multivalue` (_boolean_): Whether this field is multivalued. + * - `required` (_boolean_): Whether this field is required on events in the object + * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. + * - `editable` (_boolean_): Whether this field can be edited. + * - `comment` (_string_): A comment for this field, or `null` if there isn't one. + * - `fieldSearch` (_string_): A search query fragment for this field. + * - `lineage` (_string_): The lineage of the data model object on which this field + * is defined, items are delimited by a dot. This is converted into an array of + * strings upon construction. + * + * @method splunkjs.Service.DataModelField + */init:function(props){cov_1ks4ntaci2().f[263]++;cov_1ks4ntaci2().s[823]++;props=(cov_1ks4ntaci2().b[226][0]++,props)||(cov_1ks4ntaci2().b[226][1]++,{});cov_1ks4ntaci2().s[824]++;props.owner=(cov_1ks4ntaci2().b[227][0]++,props.owner)||(cov_1ks4ntaci2().b[227][1]++,"");cov_1ks4ntaci2().s[825]++;this.name=props.fieldName;cov_1ks4ntaci2().s[826]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[827]++;this.type=props.type;cov_1ks4ntaci2().s[828]++;this.multivalued=props.multivalue;cov_1ks4ntaci2().s[829]++;this.required=props.required;cov_1ks4ntaci2().s[830]++;this.hidden=props.hidden;cov_1ks4ntaci2().s[831]++;this.editable=props.editable;cov_1ks4ntaci2().s[832]++;this.comment=(cov_1ks4ntaci2().b[228][0]++,props.comment)||(cov_1ks4ntaci2().b[228][1]++,null);cov_1ks4ntaci2().s[833]++;this.fieldSearch=props.fieldSearch;cov_1ks4ntaci2().s[834]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[835]++;this.owner=this.lineage[this.lineage.length-1];},/** + * Is this data model field of type string? + * + * @return {Boolean} True if this data model field is of type string. + * + * @method splunkjs.Service.DataModelField + */isString:function(){cov_1ks4ntaci2().f[264]++;cov_1ks4ntaci2().s[836]++;return"string"===this.type;},/** + * Is this data model field of type number? + * + * @return {Boolean} True if this data model field is of type number. + * + * @method splunkjs.Service.DataModelField + */isNumber:function(){cov_1ks4ntaci2().f[265]++;cov_1ks4ntaci2().s[837]++;return"number"===this.type;},/** + * Is this data model field of type timestamp? + * + * @return {Boolean} True if this data model field is of type timestamp. + * + * @method splunkjs.Service.DataModelField + */isTimestamp:function(){cov_1ks4ntaci2().f[266]++;cov_1ks4ntaci2().s[838]++;return"timestamp"===this.type;},/** + * Is this data model field of type object count? + * + * @return {Boolean} True if this data model field is of type object count. + * + * @method splunkjs.Service.DataModelField + */isObjectcount:function(){cov_1ks4ntaci2().f[267]++;cov_1ks4ntaci2().s[839]++;return"objectCount"===this.type;},/** + * Is this data model field of type child count? + * + * @return {Boolean} True if this data model field is of type child count. + * + * @method splunkjs.Service.DataModelField + */isChildcount:function(){cov_1ks4ntaci2().f[268]++;cov_1ks4ntaci2().s[840]++;return"childCount"===this.type;},/** + * Is this data model field of type ipv4? + * + * @return {Boolean} True if this data model field is of type ipv4. + * + * @method splunkjs.Service.DataModelField + */isIPv4:function(){cov_1ks4ntaci2().f[269]++;cov_1ks4ntaci2().s[841]++;return"ipv4"===this.type;},/** + * Is this data model field of type boolean? + * + * @return {Boolean} True if this data model field is of type boolean. + * + * @method splunkjs.Service.DataModelField + */isBoolean:function(){cov_1ks4ntaci2().f[270]++;cov_1ks4ntaci2().s[842]++;return"boolean"===this.type;}});/** + * Represents a constraint on a `DataModelObject` or a `DataModelField`. + * + * Has these properties: + * - `query` (_string_): The search query defining this data model constraint. + * - `lineage` (_array_): The lineage of this data model constraint. + * - `owner` (_string_): The name of the data model object that owns + * this data model constraint. + * + * @class splunkjs.Service.DataModelConstraint + */cov_1ks4ntaci2().s[843]++;root.DataModelConstraint=Class.extend({/** + * Constructor for a data model constraint. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `search` (_string_): The Splunk search query this constraint specifies. + * - `owner` (_string_): The lineage of the data model object that owns this + * constraint, items are delimited by a dot. This is converted into + * an array of strings upon construction. + * + * @method splunkjs.Service.DataModelConstraint + */init:function(props){cov_1ks4ntaci2().f[271]++;cov_1ks4ntaci2().s[844]++;props=(cov_1ks4ntaci2().b[229][0]++,props)||(cov_1ks4ntaci2().b[229][1]++,{});cov_1ks4ntaci2().s[845]++;props.owner=(cov_1ks4ntaci2().b[230][0]++,props.owner)||(cov_1ks4ntaci2().b[230][1]++,"");cov_1ks4ntaci2().s[846]++;this.query=props.search;cov_1ks4ntaci2().s[847]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[848]++;this.owner=this.lineage[this.lineage.length-1];}});/** + * Used for specifying a calculation on a `DataModelObject`. + * + * Has these properties: + * - `id` (_string_): The ID for this data model calculation. + * - `type` (_string_): The type of this data model calculation. + * - `comment` (_string_|_null_): The comment for this data model calculation, or `null`. + * - `editable` (_boolean_): True if this calculation can be edited, false otherwise. + * - `lineage` (_array_): The lineage of the data model object on which this calculation + * is defined in an array of strings. + * - `owner` (_string_): The data model that this calculation belongs to. + * - `outputFields` (_array_): The fields output by this calculation. + * + * The Rex and Eval types have an additional property: + * - `expression` (_string_): The expression to use for this calculation. + * + * The Rex and GeoIP types have an additional property: + * - `inputField` (_string_): The field to use for calculation. + * + * The Lookup type has additional properties: + * - `lookupName` (_string_): The name of the lookup to perform. + * - `inputFieldMappings` (_object_): The mappings from fields in the events to fields in the lookup. + * + * Valid types of calculations are: + * - `Lookup` + * - `Eval` + * - `GeoIP` + * - `Rex` + * + * @class splunkjs.Service.DataModelCalculation + */cov_1ks4ntaci2().s[849]++;root.DataModelCalculation=Class.extend({_types:["Lookup","Eval","GeoIP","Rex"],/** + * Constructor for a data model calculation. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `calculationID` (_string_): The ID of this calculation. + * - `calculationType` (_string_): The type of this calculation, see class docs for valid types. + * - `editable` (_boolean_): Whether this calculation can be edited. + * - `comment` (_string_): A comment for this calculation, or `null` if there isn't one. + * - `owner` (_string_): The lineage of the data model object on which this calculation + * is defined, items are delimited by a dot. This is converted into an array of + * strings upon construction. + * - `outputFields` (_array_): An array of the fields this calculation generates. + * - `expression` (_string_): The expression to use for this calculation; exclusive to `Eval` and `Rex` calculations (optional) + * - `inputField` (_string_): The field to use for calculation; exclusive to `GeoIP` and `Rex` calculations (optional) + * - `lookupName` (_string_): The name of the lookup to perform; exclusive to `Lookup` calculations (optional) + * - `inputFieldMappings` (_array_): One element array containing an object with the mappings from fields in the events to fields + * in the lookup; exclusive to `Lookup` calculations (optional) + * + * @method splunkjs.Service.DataModelCalculation + */init:function(props){cov_1ks4ntaci2().f[272]++;cov_1ks4ntaci2().s[850]++;props=(cov_1ks4ntaci2().b[231][0]++,props)||(cov_1ks4ntaci2().b[231][1]++,{});cov_1ks4ntaci2().s[851]++;props.owner=(cov_1ks4ntaci2().b[232][0]++,props.owner)||(cov_1ks4ntaci2().b[232][1]++,"");cov_1ks4ntaci2().s[852]++;this.id=props.calculationID;cov_1ks4ntaci2().s[853]++;this.type=props.calculationType;cov_1ks4ntaci2().s[854]++;this.comment=(cov_1ks4ntaci2().b[233][0]++,props.comment)||(cov_1ks4ntaci2().b[233][1]++,null);cov_1ks4ntaci2().s[855]++;this.editable=props.editable;cov_1ks4ntaci2().s[856]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[857]++;this.owner=this.lineage[this.lineage.length-1];cov_1ks4ntaci2().s[858]++;this.outputFields=[];cov_1ks4ntaci2().s[859]++;for(var i=(cov_1ks4ntaci2().s[860]++,0);iSearch job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call when done creating the search job: `(err, job)`. + * @method splunkjs.Service.Pivot + */run:function(args,callback){cov_1ks4ntaci2().f[280]++;cov_1ks4ntaci2().s[883]++;if(utils.isUndefined(callback)){cov_1ks4ntaci2().b[240][0]++;cov_1ks4ntaci2().s[884]++;callback=args;cov_1ks4ntaci2().s[885]++;args={};}else{cov_1ks4ntaci2().b[240][1]++;}cov_1ks4ntaci2().s[886]++;if((cov_1ks4ntaci2().b[242][0]++,!args)||(cov_1ks4ntaci2().b[242][1]++,Object.keys(args).length===0)){cov_1ks4ntaci2().b[241][0]++;cov_1ks4ntaci2().s[887]++;args={};}else{cov_1ks4ntaci2().b[241][1]++;}// If tstats is undefined, use pivotSearch (try to run an accelerated search if possible) +cov_1ks4ntaci2().s[888]++;this.service.search((cov_1ks4ntaci2().b[243][0]++,this.tstatsSearch)||(cov_1ks4ntaci2().b[243][1]++,this.pivotSearch),args,callback);}});/** + * PivotSpecification represents a pivot to be done on a particular data model object. + * The user creates a PivotSpecification on some data model object, adds filters, row splits, + * column splits, and cell values, then calls the pivot method to query splunkd and + * get a set of SPL queries corresponding to this specification. + * + * Call the `pivot` method to query Splunk for SPL queries corresponding to this pivot. + * + * This class supports a fluent API, each function except `init`, `toJsonObject` & `pivot` + * return the modified `splunkjs.Service.PivotSpecification` instance. + * + * @example + * service.dataModels().fetch(function(err, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpecification = searches.createPivotSpecification(); + * pivotSpecification + * .addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .pivot(function(err, pivot) { + * console.log("Got a Pivot object from the Splunk server!"); + * }); + * }); + * + * Has these properties: + * - `dataModelObject` (_splunkjs.Service.DataModelObject_): The `DataModelObject` from which + * this `PivotSpecification` was created. + * - `columns` (_array_): The column splits on this `PivotSpecification`. + * - `rows` (_array_): The row splits on this `PivotSpecification`. + * - `filters` (_array_): The filters on this `PivotSpecification`. + * - `cells` (_array_): The cell aggregations for this`PivotSpecification`. + * - `accelerationNamespace` (_string_|_null_): The name of the `DataModel` that owns the `DataModelObject` + * on which this `PivotSpecification` was created if the `DataModel` is accelerated. Alternatively, + * you can set this property manually to the sid of an acceleration job in the format `sid=`. + * + * Valid comparison types are: + * - `boolean` + * - `string` + * - `number` + * - `ipv4` + * + * Valid boolean comparisons are: + * - `=` + * - `is` + * - `isNull` + * - `isNotNull` + * + * Valid string comparisons are: + * - `=` + * - `is` + * - `isNull` + * - `isNotNull` + * - `contains` + * - `doesNotContain` + * - `startsWith` + * - `endsWith` + * - `regex` + * + * Valid number comparisons are: + * - `=` + * - `!=` + * - `<` + * - `>` + * - `<=` + * - `>=` + * - `is` + * - `isNull` + * - `isNotNull` + * + * Valid ipv4 comparisons are: + * - `is` + * - `isNull` + * - `isNotNull` + * - `contains` + * - `doesNotContain` + * - `startsWith` + * + * Valid binning values are: + * - `auto` + * - `year` + * - `month` + * - `day` + * - `hour` + * - `minute` + * - `second` + * + * Valid sort directions are: + * - `ASCENDING` + * - `DECENDING` + * - `DEFAULT` + * + * Valid stats functions are: + * - `list` + * - `values` + * - `first` + * - `last` + * - `count` + * - `dc` + * - `sum` + * - `average` + * - `max` + * - `min` + * - `stdev` + * - `duration` + * - `earliest` + * - `latest` + * + * @class splunkjs.Service.PivotSpecification + */cov_1ks4ntaci2().s[889]++;root.PivotSpecification=Class.extend({_comparisons:{boolean:["=","is","isNull","isNotNull"],string:["=","is","isNull","isNotNull","contains","doesNotContain","startsWith","endsWith","regex"],number:["=","!=","<",">","<=",">=","is","isNull","isNotNull"],ipv4:["is","isNull","isNotNull","contains","doesNotContain","startsWith"]},_binning:["auto","year","month","day","hour","minute","second"],_sortDirection:["ASCENDING","DESCENDING","DEFAULT"],_statsFunctions:["list","values","first","last","count","dc","sum","average","max","min","stdev","duration","earliest","latest"],/** + * Constructor for a pivot specification. + * + * @constructor + * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. + * + * @method splunkjs.Service.PivotSpecification + */init:function(dataModelObject){cov_1ks4ntaci2().f[281]++;cov_1ks4ntaci2().s[890]++;this.dataModelObject=dataModelObject;cov_1ks4ntaci2().s[891]++;this.columns=[];cov_1ks4ntaci2().s[892]++;this.rows=[];cov_1ks4ntaci2().s[893]++;this.filters=[];cov_1ks4ntaci2().s[894]++;this.cells=[];cov_1ks4ntaci2().s[895]++;this.accelerationNamespace=dataModelObject.dataModel.isAccelerated()?(cov_1ks4ntaci2().b[244][0]++,dataModelObject.dataModel.name):(cov_1ks4ntaci2().b[244][1]++,null);cov_1ks4ntaci2().s[896]++;this.run=utils.bind(this,this.run);cov_1ks4ntaci2().s[897]++;this.pivot=utils.bind(this,this.pivot);},/** + * Set the acceleration cache for this pivot specification to a job, + * usually generated by createLocalAccelerationJob on a DataModelObject + * instance, as the acceleration cache for this pivot specification. + * + * @param {String|splunkjs.Service.Job} sid The sid of an acceleration job, + * or, a `splunkjs.Service.Job` instance. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */setAccelerationJob:function(sid){cov_1ks4ntaci2().f[282]++;cov_1ks4ntaci2().s[898]++;// If a search object is passed in, get its sid +if((cov_1ks4ntaci2().b[246][0]++,sid)&&(cov_1ks4ntaci2().b[246][1]++,sid instanceof Service.Job)){cov_1ks4ntaci2().b[245][0]++;cov_1ks4ntaci2().s[899]++;sid=sid.sid;}else{cov_1ks4ntaci2().b[245][1]++;}cov_1ks4ntaci2().s[900]++;if(!sid){cov_1ks4ntaci2().b[247][0]++;cov_1ks4ntaci2().s[901]++;throw new Error("Sid to use for acceleration must not be null.");}else{cov_1ks4ntaci2().b[247][1]++;}cov_1ks4ntaci2().s[902]++;this.accelerationNamespace="sid="+sid;cov_1ks4ntaci2().s[903]++;return this;},/** + * Add a filter on a boolean valued field. The filter will be a constraint of the form + * `field `comparison` compareTo`, for example: `is_remote = false`. + * + * @param {String} fieldName The name of field to filter on + * @param {String} comparisonType The type of comparison, see class docs for valid types. + * @param {String} comparisonOp The comparison, see class docs for valid comparisons, based on type. + * @param {String} compareTo The value to compare the field to. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addFilter:function(fieldName,comparisonType,comparisonOp,compareTo){cov_1ks4ntaci2().f[283]++;cov_1ks4ntaci2().s[904]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[248][0]++;cov_1ks4ntaci2().s[905]++;throw new Error("Cannot add filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[248][1]++;}cov_1ks4ntaci2().s[906]++;if(comparisonType!==this.dataModelObject.fieldByName(fieldName).type){cov_1ks4ntaci2().b[249][0]++;cov_1ks4ntaci2().s[907]++;throw new Error("Cannot add "+comparisonType+" filter on "+fieldName+" because it is of type "+this.dataModelObject.fieldByName(fieldName).type);}else{cov_1ks4ntaci2().b[249][1]++;}cov_1ks4ntaci2().s[908]++;if(!utils.contains(this._comparisons[comparisonType],comparisonOp)){cov_1ks4ntaci2().b[250][0]++;cov_1ks4ntaci2().s[909]++;throw new Error("Cannot add "+comparisonType+" filter because "+comparisonOp+" is not a valid comparison operator");}else{cov_1ks4ntaci2().b[250][1]++;}var ret=(cov_1ks4ntaci2().s[910]++,{fieldName:fieldName,owner:this.dataModelObject.fieldByName(fieldName).lineage.join("."),type:comparisonType});// These fields are type dependent +cov_1ks4ntaci2().s[911]++;if(utils.contains(["boolean","string","ipv4","number"],ret.type)){cov_1ks4ntaci2().b[251][0]++;cov_1ks4ntaci2().s[912]++;ret.rule={comparator:comparisonOp,compareTo:compareTo};}else{cov_1ks4ntaci2().b[251][1]++;}cov_1ks4ntaci2().s[913]++;this.filters.push(ret);cov_1ks4ntaci2().s[914]++;return this;},/** + * Add a limit on the events shown in a pivot by sorting them according to some field, then taking + * the specified number from the beginning or end of the list. + * + * @param {String} fieldName The name of field to filter on. + * @param {String} sortAttribute The name of the field to use for sorting. + * @param {String} sortDirection The direction to sort events, see class docs for valid types. + * @param {String} limit The number of values from the sorted list to allow through this filter. + * @param {String} statsFunction The stats function to use for aggregation before sorting, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addLimitFilter:function(fieldName,sortAttribute,sortDirection,limit,statsFunction){cov_1ks4ntaci2().f[284]++;cov_1ks4ntaci2().s[915]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[252][0]++;cov_1ks4ntaci2().s[916]++;throw new Error("Cannot add limit filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[252][1]++;}var f=(cov_1ks4ntaci2().s[917]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[918]++;if(!utils.contains(["string","number","objectCount"],f.type)){cov_1ks4ntaci2().b[253][0]++;cov_1ks4ntaci2().s[919]++;throw new Error("Cannot add limit filter on "+fieldName+" because it is of type "+f.type);}else{cov_1ks4ntaci2().b[253][1]++;}cov_1ks4ntaci2().s[920]++;if((cov_1ks4ntaci2().b[255][0]++,"string"===f.type)&&(cov_1ks4ntaci2().b[255][1]++,!utils.contains(["count","dc"],statsFunction))){cov_1ks4ntaci2().b[254][0]++;cov_1ks4ntaci2().s[921]++;throw new Error("Stats function for fields of type string must be COUNT or DISTINCT_COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[254][1]++;}cov_1ks4ntaci2().s[922]++;if((cov_1ks4ntaci2().b[257][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[257][1]++,!utils.contains(["count","dc","average","sum"],statsFunction))){cov_1ks4ntaci2().b[256][0]++;cov_1ks4ntaci2().s[923]++;throw new Error("Stats function for fields of type number must be one of COUNT, DISTINCT_COUNT, SUM, or AVERAGE; found "+statsFunction);}else{cov_1ks4ntaci2().b[256][1]++;}cov_1ks4ntaci2().s[924]++;if((cov_1ks4ntaci2().b[259][0]++,"objectCount"===f.type)&&(cov_1ks4ntaci2().b[259][1]++,!utils.contains(["count"],statsFunction))){cov_1ks4ntaci2().b[258][0]++;cov_1ks4ntaci2().s[925]++;throw new Error("Stats function for fields of type object count must be COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[258][1]++;}var filter=(cov_1ks4ntaci2().s[926]++,{fieldName:fieldName,owner:f.lineage.join("."),type:f.type,attributeName:sortAttribute,attributeOwner:this.dataModelObject.fieldByName(sortAttribute).lineage.join("."),sortDirection:sortDirection,limitAmount:limit,statsFn:statsFunction});// Assumed "highest" is preferred for when sortDirection is "DEFAULT" +cov_1ks4ntaci2().s[927]++;filter.limitType="ASCENDING"===sortDirection?(cov_1ks4ntaci2().b[260][0]++,"lowest"):(cov_1ks4ntaci2().b[260][1]++,"highest");cov_1ks4ntaci2().s[928]++;this.filters.push(filter);cov_1ks4ntaci2().s[929]++;return this;},/** + * Add a row split on a numeric or string valued field, splitting on each distinct value of the field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRowSplit:function(fieldName,label){cov_1ks4ntaci2().f[285]++;cov_1ks4ntaci2().s[930]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[261][0]++;cov_1ks4ntaci2().s[931]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[261][1]++;}var f=(cov_1ks4ntaci2().s[932]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[933]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[262][0]++;cov_1ks4ntaci2().s[934]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[262][1]++;}var row=(cov_1ks4ntaci2().s[935]++,{fieldName:fieldName,owner:f.owner,type:f.type,label:label});cov_1ks4ntaci2().s[936]++;if("number"===f.type){cov_1ks4ntaci2().b[263][0]++;cov_1ks4ntaci2().s[937]++;row.display="all";}else{cov_1ks4ntaci2().b[263][1]++;}cov_1ks4ntaci2().s[938]++;this.rows.push(row);cov_1ks4ntaci2().s[939]++;return this;},/** + * Add a row split on a numeric field, splitting into numeric ranges. + * + * This split generates bins with edges equivalent to the + * classic loop 'for i in to by ' but with a maximum + * number of bins . This dispatches to the stats and xyseries search commands. + * See their documentation for more details. + * + * @param {String} fieldName The field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. + * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. + * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. + * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRangeRowSplit:function(field,label,ranges){cov_1ks4ntaci2().f[286]++;cov_1ks4ntaci2().s[940]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[264][0]++;cov_1ks4ntaci2().s[941]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[264][1]++;}var f=(cov_1ks4ntaci2().s[942]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[943]++;if("number"!==f.type){cov_1ks4ntaci2().b[265][0]++;cov_1ks4ntaci2().s[944]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[265][1]++;}var updateRanges=(cov_1ks4ntaci2().s[945]++,{});cov_1ks4ntaci2().s[946]++;if((cov_1ks4ntaci2().b[267][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[267][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[266][0]++;cov_1ks4ntaci2().s[947]++;updateRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[266][1]++;}cov_1ks4ntaci2().s[948]++;if((cov_1ks4ntaci2().b[269][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[269][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[268][0]++;cov_1ks4ntaci2().s[949]++;updateRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[268][1]++;}cov_1ks4ntaci2().s[950]++;if((cov_1ks4ntaci2().b[271][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[271][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[270][0]++;cov_1ks4ntaci2().s[951]++;updateRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[270][1]++;}cov_1ks4ntaci2().s[952]++;if((cov_1ks4ntaci2().b[273][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[273][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[272][0]++;cov_1ks4ntaci2().s[953]++;updateRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[272][1]++;}cov_1ks4ntaci2().s[954]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,display:"ranges",ranges:updateRanges});cov_1ks4ntaci2().s[955]++;return this;},/** + * Add a row split on a boolean valued field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {String} trueDisplayValue A string to display in the true valued row label. + * @param {String} falseDisplayValue A string to display in the false valued row label. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addBooleanRowSplit:function(field,label,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[287]++;cov_1ks4ntaci2().s[956]++;if(!this.dataModelObject.fieldByName(field)){cov_1ks4ntaci2().b[274][0]++;cov_1ks4ntaci2().s[957]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[274][1]++;}var f=(cov_1ks4ntaci2().s[958]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[959]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[275][0]++;cov_1ks4ntaci2().s[960]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[275][1]++;}cov_1ks4ntaci2().s[961]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[962]++;return this;},/** + * Add a row split on a timestamp valued field, binned by the specified bucket size. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {String} binning The size of bins to use, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addTimestampRowSplit:function(field,label,binning){cov_1ks4ntaci2().f[288]++;cov_1ks4ntaci2().s[963]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[276][0]++;cov_1ks4ntaci2().s[964]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[276][1]++;}var f=(cov_1ks4ntaci2().s[965]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[966]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[277][0]++;cov_1ks4ntaci2().s[967]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[277][1]++;}cov_1ks4ntaci2().s[968]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[278][0]++;cov_1ks4ntaci2().s[969]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[278][1]++;}cov_1ks4ntaci2().s[970]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,period:binning});cov_1ks4ntaci2().s[971]++;return this;},/** + * Add a column split on a string or number valued field, producing a column for + * each distinct value of the field. + * + * @param {String} fieldName The name of field to split on. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addColumnSplit:function(fieldName){cov_1ks4ntaci2().f[289]++;cov_1ks4ntaci2().s[972]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[279][0]++;cov_1ks4ntaci2().s[973]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[279][1]++;}var f=(cov_1ks4ntaci2().s[974]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[975]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[280][0]++;cov_1ks4ntaci2().s[976]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[280][1]++;}var col=(cov_1ks4ntaci2().s[977]++,{fieldName:fieldName,owner:f.owner,type:f.type});cov_1ks4ntaci2().s[978]++;if("number"===f.type){cov_1ks4ntaci2().b[281][0]++;cov_1ks4ntaci2().s[979]++;col.display="all";}else{cov_1ks4ntaci2().b[281][1]++;}cov_1ks4ntaci2().s[980]++;this.columns.push(col);cov_1ks4ntaci2().s[981]++;return this;},/** + * Add a column split on a numeric field, splitting the values into ranges. + * + * @param {String} fieldName The field to split on. + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. + * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. + * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. + * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRangeColumnSplit:function(fieldName,ranges){cov_1ks4ntaci2().f[290]++;cov_1ks4ntaci2().s[982]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[282][0]++;cov_1ks4ntaci2().s[983]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[282][1]++;}var f=(cov_1ks4ntaci2().s[984]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[985]++;if("number"!==f.type){cov_1ks4ntaci2().b[283][0]++;cov_1ks4ntaci2().s[986]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[283][1]++;}// In Splunk 6.0.1.1, data models incorrectly expect strings for these fields +// instead of numbers. In 6.1, this is fixed and both are accepted. +var updatedRanges=(cov_1ks4ntaci2().s[987]++,{});cov_1ks4ntaci2().s[988]++;if((cov_1ks4ntaci2().b[285][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[285][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[284][0]++;cov_1ks4ntaci2().s[989]++;updatedRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[284][1]++;}cov_1ks4ntaci2().s[990]++;if((cov_1ks4ntaci2().b[287][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[287][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[286][0]++;cov_1ks4ntaci2().s[991]++;updatedRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[286][1]++;}cov_1ks4ntaci2().s[992]++;if((cov_1ks4ntaci2().b[289][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[289][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[288][0]++;cov_1ks4ntaci2().s[993]++;updatedRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[288][1]++;}cov_1ks4ntaci2().s[994]++;if((cov_1ks4ntaci2().b[291][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[291][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[290][0]++;cov_1ks4ntaci2().s[995]++;updatedRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[290][1]++;}cov_1ks4ntaci2().s[996]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,display:"ranges",ranges:updatedRanges});cov_1ks4ntaci2().s[997]++;return this;},/** + * Add a column split on a boolean valued field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} trueDisplayValue A string to display in the true valued column label. + * @param {String} falseDisplayValue A string to display in the false valued column label. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addBooleanColumnSplit:function(fieldName,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[291]++;cov_1ks4ntaci2().s[998]++;if(!this.dataModelObject.fieldByName(fieldName)){cov_1ks4ntaci2().b[292][0]++;cov_1ks4ntaci2().s[999]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[292][1]++;}var f=(cov_1ks4ntaci2().s[1000]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1001]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[293][0]++;cov_1ks4ntaci2().s[1002]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[293][1]++;}cov_1ks4ntaci2().s[1003]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[1004]++;return this;},/** + * Add a column split on a timestamp valued field, binned by the specified bucket size. + * + * @param {String} fieldName The name of field to split on. + * @param {String} binning The size of bins to use, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addTimestampColumnSplit:function(field,binning){cov_1ks4ntaci2().f[292]++;cov_1ks4ntaci2().s[1005]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[294][0]++;cov_1ks4ntaci2().s[1006]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[294][1]++;}var f=(cov_1ks4ntaci2().s[1007]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[1008]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[295][0]++;cov_1ks4ntaci2().s[1009]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[295][1]++;}cov_1ks4ntaci2().s[1010]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[296][0]++;cov_1ks4ntaci2().s[1011]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[296][1]++;}cov_1ks4ntaci2().s[1012]++;this.columns.push({fieldName:field,owner:f.owner,type:f.type,period:binning});cov_1ks4ntaci2().s[1013]++;return this;},/** + * Add an aggregate to each cell of the pivot. + * + * @param {String} fieldName The name of field to aggregate. + * @param {String} label a human readable name for this aggregate. + * @param {String} statsFunction The function to use for aggregation, see class docs for valid stats functions. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addCellValue:function(fieldName,label,statsFunction){cov_1ks4ntaci2().f[293]++;cov_1ks4ntaci2().s[1014]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[297][0]++;cov_1ks4ntaci2().s[1015]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[297][1]++;}var f=(cov_1ks4ntaci2().s[1016]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1017]++;if((cov_1ks4ntaci2().b[299][0]++,utils.contains(["string","ipv4"],f.type))&&(cov_1ks4ntaci2().b[299][1]++,!utils.contains(["list","values","first","last","count","dc"],statsFunction))){cov_1ks4ntaci2().b[298][0]++;cov_1ks4ntaci2().s[1018]++;throw new Error("Stats function on string and IPv4 fields must be one of:"+" list, distinct_values, first, last, count, or distinct_count; found "+statsFunction);}else{cov_1ks4ntaci2().b[298][1]++;cov_1ks4ntaci2().s[1019]++;if((cov_1ks4ntaci2().b[301][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[301][1]++,!utils.contains(["sum","count","average","min","max","stdev","list","values"],statsFunction))){cov_1ks4ntaci2().b[300][0]++;cov_1ks4ntaci2().s[1020]++;throw new Error("Stats function on number field must be must be one of:"+" sum, count, average, max, min, stdev, list, or distinct_values; found "+statsFunction);}else{cov_1ks4ntaci2().b[300][1]++;cov_1ks4ntaci2().s[1021]++;if((cov_1ks4ntaci2().b[303][0]++,"timestamp"===f.type)&&(cov_1ks4ntaci2().b[303][1]++,!utils.contains(["duration","earliest","latest","list","values"],statsFunction))){cov_1ks4ntaci2().b[302][0]++;cov_1ks4ntaci2().s[1022]++;throw new Error("Stats function on timestamp field must be one of:"+" duration, earliest, latest, list, or distinct values; found "+statsFunction);}else{cov_1ks4ntaci2().b[302][1]++;cov_1ks4ntaci2().s[1023]++;if((cov_1ks4ntaci2().b[305][0]++,utils.contains(["objectCount","childCount"],f.type))&&(cov_1ks4ntaci2().b[305][1]++,"count"!==statsFunction)){cov_1ks4ntaci2().b[304][0]++;cov_1ks4ntaci2().s[1024]++;throw new Error("Stats function on childcount and objectcount fields must be count; "+"found "+statsFunction);}else{cov_1ks4ntaci2().b[304][1]++;cov_1ks4ntaci2().s[1025]++;if("boolean"===f.type){cov_1ks4ntaci2().b[306][0]++;cov_1ks4ntaci2().s[1026]++;throw new Error("Cannot use boolean valued fields as cell values.");}else{cov_1ks4ntaci2().b[306][1]++;}}}}}cov_1ks4ntaci2().s[1027]++;this.cells.push({fieldName:fieldName,owner:f.lineage.join("."),type:f.type,label:label,sparkline:false,// Not properly implemented in core yet. +value:statsFunction});cov_1ks4ntaci2().s[1028]++;return this;},/** + * Returns a JSON ready object representation of this pivot specification. + * + * @return {Object} The JSON ready object representation of this pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */toJsonObject:function(){cov_1ks4ntaci2().f[294]++;cov_1ks4ntaci2().s[1029]++;return{dataModel:this.dataModelObject.dataModel.name,baseClass:this.dataModelObject.name,rows:this.rows,columns:this.columns,cells:this.cells,filters:this.filters};},/** + * Query Splunk for SPL queries corresponding to a pivot report + * for this data model, defined by this `PivotSpecification`. + * + * @example + * + * service.dataModels().fetch(function(err, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpec = searches.createPivotSpecification(); + * // Use of the fluent API + * pivotSpec.addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .pivot(function(pivotErr, pivot) { + * console.log("Pivot search is:", pivot.search); + * }); + * }); + * + * @param {Function} callback A function to call when done getting the pivot: `(err, pivot)`. + * + * @method splunkjs.Service.PivotSpecification + */pivot:function(callback){cov_1ks4ntaci2().f[295]++;var svc=(cov_1ks4ntaci2().s[1030]++,this.dataModelObject.dataModel.service);var args=(cov_1ks4ntaci2().s[1031]++,{pivot_json:JSON.stringify(this.toJsonObject())});cov_1ks4ntaci2().s[1032]++;if(!utils.isUndefined(this.accelerationNamespace)){cov_1ks4ntaci2().b[307][0]++;cov_1ks4ntaci2().s[1033]++;args.namespace=this.accelerationNamespace;}else{cov_1ks4ntaci2().b[307][1]++;}cov_1ks4ntaci2().s[1034]++;return svc.get(Paths.pivot+"/"+encodeURIComponent(this.dataModelObject.dataModel.name),args,function(err,response){cov_1ks4ntaci2().f[296]++;cov_1ks4ntaci2().s[1035]++;if(err){cov_1ks4ntaci2().b[308][0]++;cov_1ks4ntaci2().s[1036]++;callback(new Error(err.data.messages[0].text),response);cov_1ks4ntaci2().s[1037]++;return;}else{cov_1ks4ntaci2().b[308][1]++;}cov_1ks4ntaci2().s[1038]++;if((cov_1ks4ntaci2().b[310][0]++,response.data.entry)&&(cov_1ks4ntaci2().b[310][1]++,response.data.entry[0])){cov_1ks4ntaci2().b[309][0]++;cov_1ks4ntaci2().s[1039]++;callback(null,new root.Pivot(svc,response.data.entry[0].content));}else{cov_1ks4ntaci2().b[309][1]++;cov_1ks4ntaci2().s[1040]++;callback(new Error("Didn't get a Pivot report back from Splunk"),response);}});},/** + * Convenience method to wrap up the `PivotSpecification.pivot()` and + * `Pivot.run()` function calls. + * + * Query Splunk for SPL queries corresponding to a pivot report + * for this data model, defined by this `PivotSpecification`; then, + * starts a search job running this pivot, accelerated if possible. + * + * service.dataModels().fetch(function(fetchErr, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpec = searches.createPivotSpecification(); + * // Use of the fluent API + * pivotSpec.addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .run(function(err, job, pivot) { + * console.log("Job SID is:", job.sid); + * console.log("Pivot search is:", pivot.search); + * }); + * }); + * @param {Object} args A dictionary of properties for the search job (optional). For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call when done getting the pivot: `(err, job, pivot)`. + * + * @method splunkjs.Service.PivotSpecification + */run:function(args,callback){cov_1ks4ntaci2().f[297]++;cov_1ks4ntaci2().s[1041]++;if(!callback){cov_1ks4ntaci2().b[311][0]++;cov_1ks4ntaci2().s[1042]++;callback=args;cov_1ks4ntaci2().s[1043]++;args={};}else{cov_1ks4ntaci2().b[311][1]++;}cov_1ks4ntaci2().s[1044]++;args=(cov_1ks4ntaci2().b[312][0]++,args)||(cov_1ks4ntaci2().b[312][1]++,{});cov_1ks4ntaci2().s[1045]++;this.pivot(function(err,pivot){cov_1ks4ntaci2().f[298]++;cov_1ks4ntaci2().s[1046]++;if(err){cov_1ks4ntaci2().b[313][0]++;cov_1ks4ntaci2().s[1047]++;callback(err,null,null);}else{cov_1ks4ntaci2().b[313][1]++;cov_1ks4ntaci2().s[1048]++;pivot.run(args,Async.augment(callback,pivot));}});}});/** + * Represents one of the structured views in a `DataModel`. + * + * Has these properties: + * - `dataModel` (_splunkjs.Service.DataModel_): The `DataModel` to which this `DataModelObject` belongs. + * - `name` (_string_): The name of this `DataModelObject`. + * - `displayName` (_string_): The human readable name of this `DataModelObject`. + * - `parentName` (_string_): The name of the parent `DataModelObject` to this one. + * - `lineage` (_array_): An array of strings of the lineage of the data model + * on which this field is defined. + * - `fields` (_object_): A dictionary of `DataModelField` objects, accessible by name. + * - `constraints` (_array_): An array of `DataModelConstraint` objects. + * - `calculations` (_object_): A dictionary of `DataModelCalculation` objects, accessible by ID. + * + * BaseSearch has an additional property: + * - `baseSearch` (_string_): The search query wrapped by this data model object. + * + * BaseTransaction has additional properties: + * - `groupByFields` (_string_): The fields that will be used to group events into transactions. + * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned + * and split into transactions. + * - `maxSpan` (_string_): The maximum time span of a transaction. + * - `maxPause` (_string_): The maximum pause time of a transaction. + * + * @class splunkjs.Service.DataModelObject + */cov_1ks4ntaci2().s[1049]++;root.DataModelObject=Class.extend({/** + * Constructor for a data model object. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `objectName` (_string_): The name for this data model object. + * - `displayName` (_string_): A human readable name for this data model object. + * - `parentName` (_string_): The name of the data model that owns this data model object. + * - `lineage` (_string_): The lineage of the data model that owns this data model object, + * items are delimited by a dot. This is converted into an array of + * strings upon construction. + * - `fields` (_array_): An array of data model fields. + * - `constraints` (_array_): An array of data model constraints. + * - `calculations` (_array_): An array of data model calculations. + * - `baseSearch` (_string_): The search query wrapped by this data model object; exclusive to BaseSearch (optional) + * - `groupByFields` (_array_): The fields that will be used to group events into transactions; exclusive to BaseTransaction (optional) + * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned + * and split into transactions; exclusive to BaseTransaction (optional) + * - `maxSpan` (_string_): The maximum time span of a transaction; exclusive to BaseTransaction (optional) + * - `maxPause` (_string_): The maximum pause time of a transaction; exclusive to BaseTransaction (optional) + * + * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. + * + * @method splunkjs.Service.DataModelObject + */init:function(props,parentDataModel){cov_1ks4ntaci2().f[299]++;cov_1ks4ntaci2().s[1050]++;props=(cov_1ks4ntaci2().b[314][0]++,props)||(cov_1ks4ntaci2().b[314][1]++,{});cov_1ks4ntaci2().s[1051]++;props.owner=(cov_1ks4ntaci2().b[315][0]++,props.owner)||(cov_1ks4ntaci2().b[315][1]++,"");cov_1ks4ntaci2().s[1052]++;this.dataModel=parentDataModel;cov_1ks4ntaci2().s[1053]++;this.name=props.objectName;cov_1ks4ntaci2().s[1054]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[1055]++;this.parentName=props.parentName;cov_1ks4ntaci2().s[1056]++;this.lineage=props.lineage.split(".");// Properties exclusive to BaseTransaction +cov_1ks4ntaci2().s[1057]++;if(props.hasOwnProperty("groupByFields")){cov_1ks4ntaci2().b[316][0]++;cov_1ks4ntaci2().s[1058]++;this.groupByFields=props.groupByFields;}else{cov_1ks4ntaci2().b[316][1]++;}cov_1ks4ntaci2().s[1059]++;if(props.hasOwnProperty("objectsToGroup")){cov_1ks4ntaci2().b[317][0]++;cov_1ks4ntaci2().s[1060]++;this.objectsToGroup=props.objectsToGroup;}else{cov_1ks4ntaci2().b[317][1]++;}cov_1ks4ntaci2().s[1061]++;if(props.hasOwnProperty("transactionMaxTimeSpan")){cov_1ks4ntaci2().b[318][0]++;cov_1ks4ntaci2().s[1062]++;this.maxSpan=props.transactionMaxTimeSpan;}else{cov_1ks4ntaci2().b[318][1]++;}cov_1ks4ntaci2().s[1063]++;if(props.hasOwnProperty("transactionMaxPause")){cov_1ks4ntaci2().b[319][0]++;cov_1ks4ntaci2().s[1064]++;this.maxPause=props.transactionMaxPause;}else{cov_1ks4ntaci2().b[319][1]++;}// Property exclusive to BaseSearch +cov_1ks4ntaci2().s[1065]++;if(props.hasOwnProperty("baseSearch")){cov_1ks4ntaci2().b[320][0]++;cov_1ks4ntaci2().s[1066]++;this.baseSearch=props.baseSearch;}else{cov_1ks4ntaci2().b[320][1]++;}// Parse fields +cov_1ks4ntaci2().s[1067]++;this.fields={};cov_1ks4ntaci2().s[1068]++;for(var i=(cov_1ks4ntaci2().s[1069]++,0);iSearch job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {String} querySuffix A search query, starting with a '|' that will be appended to the command to fetch the contents of this data model object (e.g., "| head 3"). + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @method splunkjs.Service.DataModelObject + */startSearch:function(params,querySuffix,callback){cov_1ks4ntaci2().f[311]++;var query=(cov_1ks4ntaci2().s[1112]++,"| datamodel "+this.dataModel.name+" "+this.name+" search");// Prepend a space to the querySuffix, or set it to an empty string if null or undefined +cov_1ks4ntaci2().s[1113]++;querySuffix=querySuffix?(cov_1ks4ntaci2().b[327][0]++," "+querySuffix):(cov_1ks4ntaci2().b[327][1]++,"");cov_1ks4ntaci2().s[1114]++;this.dataModel.service.search(query+querySuffix,params,callback);},/** + * Returns the data model object this one inherits from if it is a user defined, + * otherwise return null. + * + * @return {splunkjs.Service.DataModelObject|null} This data model object's parent + * or null if this is not a user defined data model object. + * + * @method splunkjs.Service.DataModelObject + */parent:function(){cov_1ks4ntaci2().f[312]++;cov_1ks4ntaci2().s[1115]++;return this.dataModel.objectByName(this.parentName);},/** + * Returns a new Pivot Specification, accepts no parameters. + * + * @return {splunkjs.Service.PivotSpecification} A new pivot specification. + * + * @method splunkjs.Service.DataModelObject + */createPivotSpecification:function(){cov_1ks4ntaci2().f[313]++;cov_1ks4ntaci2().s[1116]++;// Pass in this DataModelObject to create a PivotSpecification +return new root.PivotSpecification(this);}});/** + * Represents a data model on the server. Data models + * contain `DataModelObject` instances, which specify structured + * views on Splunk data. + * + * @endpoint datamodel/model/{name} + * @class splunkjs.Service.DataModel + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[1117]++;root.DataModel=Service.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.DataModel + */path:function(){cov_1ks4ntaci2().f[314]++;cov_1ks4ntaci2().s[1118]++;return Paths.dataModels+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.DataModel`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new data model. + * @param {Object} namespace (Optional) namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Object} props Properties of this data model: + * - `acceleration` (_string_): A JSON object with an `enabled` key, representing if acceleration is enabled or not. + * - `concise` (_string_): Indicates whether to list a concise JSON description of the data model, should always be "0". + * - `description` (_string_): The JSON describing the data model. + * - `displayName` (_string_): The name displayed for the data model in Splunk Web. + * + * @method splunkjs.Service.DataModel + */init:function(service,name,namespace,props){cov_1ks4ntaci2().f[315]++;cov_1ks4ntaci2().s[1119]++;// If not given a 4th arg, assume the namespace was omitted +if(!props){cov_1ks4ntaci2().b[328][0]++;cov_1ks4ntaci2().s[1120]++;props=namespace;cov_1ks4ntaci2().s[1121]++;namespace={};}else{cov_1ks4ntaci2().b[328][1]++;}cov_1ks4ntaci2().s[1122]++;this.name=name;cov_1ks4ntaci2().s[1123]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[1124]++;this.acceleration=(cov_1ks4ntaci2().b[329][0]++,JSON.parse(props.content.acceleration))||(cov_1ks4ntaci2().b[329][1]++,{});cov_1ks4ntaci2().s[1125]++;if(this.acceleration.hasOwnProperty("enabled")){cov_1ks4ntaci2().b[330][0]++;cov_1ks4ntaci2().s[1126]++;// convert the enabled property to a boolean +this.acceleration.enabled=!!this.acceleration.enabled;}else{cov_1ks4ntaci2().b[330][1]++;}// concise=0 (false) forces the server to return all details of the newly created data model. +// we do not want a summary of this data model +cov_1ks4ntaci2().s[1127]++;if((cov_1ks4ntaci2().b[332][0]++,!props.hasOwnProperty("concise"))||(cov_1ks4ntaci2().b[332][1]++,utils.isUndefined(props.concise))){cov_1ks4ntaci2().b[331][0]++;cov_1ks4ntaci2().s[1128]++;this.concise="0";}else{cov_1ks4ntaci2().b[331][1]++;}var dataModelDefinition=(cov_1ks4ntaci2().s[1129]++,JSON.parse(props.content.description));cov_1ks4ntaci2().s[1130]++;this.objectNames=dataModelDefinition.objectNameList;cov_1ks4ntaci2().s[1131]++;this.displayName=dataModelDefinition.displayName;cov_1ks4ntaci2().s[1132]++;this.description=dataModelDefinition.description;// Parse the objects for this data model +var objs=(cov_1ks4ntaci2().s[1133]++,dataModelDefinition.objects);cov_1ks4ntaci2().s[1134]++;this.objects=[];cov_1ks4ntaci2().s[1135]++;for(var i=(cov_1ks4ntaci2().s[1136]++,0);i0);}});}});})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UuanMiXSwibmFtZXMiOlsiQ29udGV4dCIsInJlcXVpcmUiLCJIdHRwIiwiQXN5bmMiLCJQYXRocyIsIkNsYXNzIiwidXRpbHMiLCJyb290IiwiZXhwb3J0cyIsIlNlcnZpY2UiLCJCYXNlU2VydmljZSIsImV4dGVuZCIsImluaXQiLCJfc3VwZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIm1vZHVsZSIsInNwZWNpYWxpemUiLCJiaW5kIiwiYXBwcyIsImNvbmZpZ3VyYXRpb25zIiwiaW5kZXhlcyIsInNhdmVkU2VhcmNoZXMiLCJqb2JzIiwidXNlcnMiLCJjdXJyZW50VXNlciIsInZpZXdzIiwiZmlyZWRBbGVydEdyb3VwcyIsImRhdGFNb2RlbHMiLCJvd25lciIsImFwcCIsImh0dHAiLCJzY2hlbWUiLCJob3N0IiwicG9ydCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzZXNzaW9uS2V5IiwidmVyc2lvbiIsIkFwcGxpY2F0aW9ucyIsIm5hbWVzcGFjZSIsIkNvbmZpZ3VyYXRpb25zIiwiSW5kZXhlcyIsIlNhdmVkU2VhcmNoZXMiLCJzdG9yYWdlUGFzc3dvcmRzIiwiU3RvcmFnZVBhc3N3b3JkcyIsIkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24iLCJKb2JzIiwiRGF0YU1vZGVscyIsIlVzZXJzIiwiVmlld3MiLCJzZWFyY2giLCJxdWVyeSIsInBhcmFtcyIsImNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsImdldEpvYiIsInNpZCIsImpvYiIsIkpvYiIsImZldGNoIiwib25lc2hvdFNlYXJjaCIsInRoYXQiLCJyZXEiLCJnZXQiLCJlcnIiLCJyZXNwb25zZSIsImRhdGEiLCJlbnRyeSIsImNvbnRlbnQiLCJ1c2VyIiwiVXNlciIsIndhc0Fib3J0ZWQiLCJzZXJ2ZXJJbmZvIiwiU2VydmVySW5mbyIsInBhcnNlIiwicSIsInBhcnNlciIsInR5cGVhaGVhZCIsInByZWZpeCIsImNvdW50IiwicmVzdWx0cyIsImxvZyIsImV2ZW50IiwiaXNPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwicGF0aCIsInBhdGhzIiwic3VibWl0RXZlbnQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsInBvc3QiLCJyZXF1ZXN0IiwiRW5kcG9pbnQiLCJzZXJ2aWNlIiwicXVhbGlmaWVkUGF0aCIsIkVycm9yIiwiZGVsIiwicmVscGF0aCIsInVybCIsImdldF92MiIsIlJlc291cmNlIiwiZnVsbHBhdGgiLCJfcHJvcGVydGllcyIsIl9zdGF0ZSIsIl9sb2FkIiwicHJvcGVydGllcyIsInN0YXRlIiwiRW50aXR5IiwiZmV0Y2hPblVwZGF0ZSIsInJlbW92ZSIsInVwZGF0ZSIsImZpZWxkcyIsImxpbmtzIiwiYWNsIiwiYXV0aG9yIiwidXBkYXRlZCIsInB1Ymxpc2hlZCIsImVuYWJsZSIsImRpc2FibGUiLCJyZWxvYWQiLCJfZmllbGRzIiwiX2FjbCIsIl9saW5rcyIsImlzQXJyYXkiLCJfYXV0aG9yIiwiX3VwZGF0ZWQiLCJfcHVibGlzaGVkIiwib3B0aW9ucyIsInByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJDb2xsZWN0aW9uIiwiZmV0Y2hPbkVudGl0eUNyZWF0aW9uIiwiY3JlYXRlIiwibGlzdCIsIml0ZW0iLCJpbnN0YW50aWF0ZUVudGl0eSIsIl9lbnRpdGllcyIsIl9lbnRpdGllc0J5TmFtZSIsIl9wYWdpbmciLCJlbnRpdGllcyIsImVudGl0aWVzQnlOYW1lIiwiZW50aXR5UHJvcGVydHlMaXN0IiwiaSIsImxlbmd0aCIsImVudGl0eSIsInB1c2giLCJuYW1lIiwicGFnaW5nIiwiZmV0Y2hfdjIiLCJpZCIsImlzRW1wdHkiLCJmdWxsUGF0aCIsImNsb25lIiwiU2F2ZWRTZWFyY2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJhY2tub3dsZWRnZSIsImRpc3BhdGNoIiwiaGlzdG9yeSIsInN1cHByZXNzSW5mbyIsImFsZXJ0Q291bnQiLCJwYXJzZUludCIsInRyaWdnZXJlZF9hbGVydF9jb3VudCIsImZpcmVkQWxlcnRHcm91cCIsIkZpcmVkQWxlcnRHcm91cCIsImpvYkRhdGEiLCJuYW1lc3BhY2VGcm9tUHJvcGVydGllcyIsImNhbGwiLCJlbnRpdHlOYW1lc3BhY2UiLCJTdG9yYWdlUGFzc3dvcmQiLCJGaXJlZEFsZXJ0IiwiZmlyZWRBbGVydHMiLCJhY3Rpb25zIiwiYWxlcnRUeXBlIiwiYWxlcnRfdHlwZSIsImlzRGlnZXN0TW9kZSIsImRpZ2VzdF9tb2RlIiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uX3RpbWVfcmVuZGVyZWQiLCJzYXZlZFNlYXJjaE5hbWUiLCJzYXZlZHNlYXJjaF9uYW1lIiwic2V2ZXJpdHkiLCJ0cmlnZ2VyVGltZSIsInRyaWdnZXJfdGltZSIsInRyaWdnZXJUaW1lUmVuZGVyZWQiLCJ0cmlnZ2VyX3RpbWVfcmVuZGVyZWQiLCJ0cmlnZ2VyZWRBbGVydENvdW50IiwidHJpZ2dlcmVkX2FsZXJ0cyIsImZpcmVkQWxlcnREYXRhIiwiZmlyZWRBbGVydCIsIkFwcGxpY2F0aW9uIiwic2V0dXBJbmZvIiwidXBkYXRlSW5mbyIsImluZm8iLCJWaWV3IiwiSW5kZXgiLCJyZXN1bHQiLCJ2ZXJzaW9uQ29tcGFyZSIsIkNvbmZpZ3VyYXRpb25TdGFuemEiLCJmaWxlIiwiQ29uZmlndXJhdGlvbkZpbGUiLCJnZXREZWZhdWx0U3RhbnphIiwic3RhbnphTmFtZSIsInZhbHVlcyIsImZpbGVuYW1lIiwiX19jb25mIiwiZG9lc0ZpbGVFeGlzdCIsImZpbGVzIiwiZmlsdGVyIiwiZiIsImNvZGUiLCJtZXNzYWdlIiwiY29uZmlndXJhdGlvbkZpbGUiLCJmZXRjaGVkRmlsZSIsImVycm9yIiwiZXJyb3JDb2RlIiwiZXJyb3JNZXNzYWdlIiwiZG9lc1N0YW56YUV4aXN0Iiwic3RhbnphIiwiZmV0Y2hlZFN0YW56YSIsImNyZWF0ZV92MiIsImNvbmZpZ3MiLCJzdmMiLCJrZXlWYWx1ZU1hcCIsImRvZXNGaWxlRXhpc3RSZXNwb25zZSIsImNvbmZpZ0ZpbGUiLCJjb25zb2xlIiwibmV3RmlsZSIsImRvZXNTdGFuemFFeGlzdFJlc3BvbnNlIiwiY29uZmlnU3RhbnphIiwibmV3U3RhbnphIiwidXBkYXRlZFN0YW56YSIsImNhbmNlbCIsImRpc2FibGVQcmV2aWV3IiwiZW5hYmxlUHJldmlldyIsImV2ZW50cyIsImZpbmFsaXplIiwicGF1c2UiLCJwcmV2aWV3Iiwic2VhcmNobG9nIiwic2V0UHJpb3JpdHkiLCJzZXRUVEwiLCJzdW1tYXJ5IiwidGltZWxpbmUiLCJ0b3VjaCIsInVucGF1c2UiLCJhY3Rpb24iLCJvdXRwdXRfbW9kZSIsIml0ZXJhdG9yIiwidHlwZSIsIlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IiLCJ2YWx1ZSIsInByaW9yaXR5IiwidHRsIiwidHJhY2siLCJjYWxsYmFja3MiLCJwZXJpb2QiLCJkb25lIiwibm9DYWxsYmFja3NBZnRlclJlYWR5IiwicHJvZ3Jlc3MiLCJmYWlsZWQiLCJyZWFkeSIsIl9wcmVyZWFkeSIsIl9zdG9wcGVkQWZ0ZXJSZWFkeSIsImVtaXR0ZWRSZWFkeSIsImRvbmVMb29waW5nIiwid2hpbHN0IiwibmV4dEl0ZXJhdGlvbiIsImRpc3BhdGNoU3RhdGUiLCJub3RSZWFkeSIsImlzRG9uZSIsImlzRmFpbGVkIiwic2xlZXAiLCJleGVjX21vZGUiLCJ0b0xvd2VyQ2FzZSIsIm91dHB1dE1vZGUiLCJEYXRhTW9kZWxGaWVsZCIsIl90eXBlcyIsImZpZWxkTmFtZSIsImRpc3BsYXlOYW1lIiwibXVsdGl2YWx1ZWQiLCJtdWx0aXZhbHVlIiwicmVxdWlyZWQiLCJoaWRkZW4iLCJlZGl0YWJsZSIsImNvbW1lbnQiLCJmaWVsZFNlYXJjaCIsImxpbmVhZ2UiLCJzcGxpdCIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1RpbWVzdGFtcCIsImlzT2JqZWN0Y291bnQiLCJpc0NoaWxkY291bnQiLCJpc0lQdjQiLCJpc0Jvb2xlYW4iLCJEYXRhTW9kZWxDb25zdHJhaW50IiwiRGF0YU1vZGVsQ2FsY3VsYXRpb24iLCJjYWxjdWxhdGlvbklEIiwiY2FsY3VsYXRpb25UeXBlIiwib3V0cHV0RmllbGRzIiwiZXhwcmVzc2lvbiIsImlucHV0RmllbGQiLCJsb29rdXBOYW1lIiwiaW5wdXRGaWVsZE1hcHBpbmdzIiwibG9va3VwSW5wdXRzIiwib3V0cHV0RmllbGROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpc0VkaXRhYmxlIiwiaXNMb29rdXAiLCJpc0V2YWwiLCJpc1JleCIsImlzR2VvSVAiLCJQaXZvdCIsImRyaWxsZG93blNlYXJjaCIsImRyaWxsZG93bl9zZWFyY2giLCJwcmV0dHlRdWVyeSIsIm9wZW5JblNlYXJjaCIsIm9wZW5faW5fc2VhcmNoIiwicGl2b3RTZWFyY2giLCJwaXZvdF9zZWFyY2giLCJ0c3RhdHNTZWFyY2giLCJ0c3RhdHNfc2VhcmNoIiwicnVuIiwiYXJncyIsImlzVW5kZWZpbmVkIiwiUGl2b3RTcGVjaWZpY2F0aW9uIiwiX2NvbXBhcmlzb25zIiwiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsImlwdjQiLCJfYmlubmluZyIsIl9zb3J0RGlyZWN0aW9uIiwiX3N0YXRzRnVuY3Rpb25zIiwiZGF0YU1vZGVsT2JqZWN0IiwiY29sdW1ucyIsInJvd3MiLCJmaWx0ZXJzIiwiY2VsbHMiLCJhY2NlbGVyYXRpb25OYW1lc3BhY2UiLCJkYXRhTW9kZWwiLCJpc0FjY2VsZXJhdGVkIiwicGl2b3QiLCJzZXRBY2NlbGVyYXRpb25Kb2IiLCJhZGRGaWx0ZXIiLCJjb21wYXJpc29uVHlwZSIsImNvbXBhcmlzb25PcCIsImNvbXBhcmVUbyIsImhhc0ZpZWxkIiwiZmllbGRCeU5hbWUiLCJjb250YWlucyIsInJldCIsImpvaW4iLCJydWxlIiwiY29tcGFyYXRvciIsImFkZExpbWl0RmlsdGVyIiwic29ydEF0dHJpYnV0ZSIsInNvcnREaXJlY3Rpb24iLCJsaW1pdCIsInN0YXRzRnVuY3Rpb24iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlT3duZXIiLCJsaW1pdEFtb3VudCIsInN0YXRzRm4iLCJsaW1pdFR5cGUiLCJhZGRSb3dTcGxpdCIsImxhYmVsIiwicm93IiwiZGlzcGxheSIsImFkZFJhbmdlUm93U3BsaXQiLCJmaWVsZCIsInJhbmdlcyIsInVwZGF0ZVJhbmdlcyIsInN0YXJ0IiwiZW5kIiwic3RlcCIsInNpemUiLCJtYXhOdW1iZXJPZiIsImFkZEJvb2xlYW5Sb3dTcGxpdCIsInRydWVEaXNwbGF5VmFsdWUiLCJmYWxzZURpc3BsYXlWYWx1ZSIsInRydWVMYWJlbCIsImZhbHNlTGFiZWwiLCJhZGRUaW1lc3RhbXBSb3dTcGxpdCIsImJpbm5pbmciLCJhZGRDb2x1bW5TcGxpdCIsImNvbCIsImFkZFJhbmdlQ29sdW1uU3BsaXQiLCJ1cGRhdGVkUmFuZ2VzIiwiYWRkQm9vbGVhbkNvbHVtblNwbGl0IiwiYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQiLCJhZGRDZWxsVmFsdWUiLCJzcGFya2xpbmUiLCJ0b0pzb25PYmplY3QiLCJiYXNlQ2xhc3MiLCJwaXZvdF9qc29uIiwibWVzc2FnZXMiLCJ0ZXh0IiwiYXVnbWVudCIsIkRhdGFNb2RlbE9iamVjdCIsInBhcmVudERhdGFNb2RlbCIsIm9iamVjdE5hbWUiLCJwYXJlbnROYW1lIiwiZ3JvdXBCeUZpZWxkcyIsIm9iamVjdHNUb0dyb3VwIiwibWF4U3BhbiIsInRyYW5zYWN0aW9uTWF4VGltZVNwYW4iLCJtYXhQYXVzZSIsInRyYW5zYWN0aW9uTWF4UGF1c2UiLCJiYXNlU2VhcmNoIiwiY29uc3RyYWludHMiLCJqIiwiY2FsY3VsYXRpb25zIiwiayIsImlzQmFzZVNlYXJjaCIsImlzQmFzZVRyYW5zYWN0aW9uIiwiZmllbGROYW1lcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJhbGxGaWVsZHMiLCJjb21iaW5lZEZpZWxkcyIsImNmIiwiYWxsRmllbGROYW1lcyIsImNhbGN1bGF0aW9uSURzIiwiY2FsY3VsYXRpb24iLCJjYWxjdWxhdGVkRmllbGROYW1lcyIsImNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iIiwiZWFybGllc3RUaW1lIiwidW5kZWZpbmVkIiwiZWFybGllc3RfdGltZSIsInN0YXJ0U2VhcmNoIiwicXVlcnlTdWZmaXgiLCJwYXJlbnQiLCJvYmplY3RCeU5hbWUiLCJjcmVhdGVQaXZvdFNwZWNpZmljYXRpb24iLCJEYXRhTW9kZWwiLCJhY2NlbGVyYXRpb24iLCJlbmFibGVkIiwiY29uY2lzZSIsImRhdGFNb2RlbERlZmluaXRpb24iLCJkZXNjcmlwdGlvbiIsIm9iamVjdE5hbWVzIiwib2JqZWN0TmFtZUxpc3QiLCJvYmpzIiwib2JqZWN0cyIsImhhc09iamVjdCIsInVwZGF0ZWRQcm9wcyIsImFjY2NlbGVyYXRpb24iLCJjcm9uX3NjaGVkdWxlIiwiY3JvblNjaGVkdWxlIiwiZGF0YU1vZGVsTmFtZXNwYWNlIiwicmVwbGFjZSIsImVuZHBvaW50IiwiX2VuZHBvaW50IiwiX3BhZ2VzaXplIiwicGFnZXNpemUiLCJfb2Zmc2V0IiwibmV4dCIsIm9mZnNldCIsIm51bVJlc3VsdHMiXSwibWFwcGluZ3MiOiI4bnZOQWVZO21IQWZaLEssQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLENBQUMsVUFBVyxDQUNSLGFBRFEsd0JBR1IsR0FBSUEsQ0FBQUEsT0FBTywwQkFBT0MsT0FBTyxDQUFDLFdBQUQsQ0FBZCxDQUFYLENBQ0EsR0FBSUMsQ0FBQUEsSUFBSSwwQkFBVUQsT0FBTyxDQUFDLFFBQUQsQ0FBakIsQ0FBUixDQUNBLEdBQUlFLENBQUFBLEtBQUssMEJBQVNGLE9BQU8sQ0FBQyxTQUFELENBQWhCLENBQVQsQ0FDQSxHQUFJRyxDQUFBQSxLQUFLLDBCQUFTSCxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CRyxLQUE1QixDQUFULENBQ0EsR0FBSUMsQ0FBQUEsS0FBSywwQkFBU0osT0FBTyxDQUFDLGdCQUFELENBQVAsQ0FBMEJJLEtBQW5DLENBQVQsQ0FDQSxHQUFJQyxDQUFBQSxLQUFLLDBCQUFTTCxPQUFPLENBQUMsU0FBRCxDQUFoQixDQUFULENBRUEsR0FBSU0sQ0FBQUEsSUFBSSwwQkFBRyw0QkFBQUMsT0FBTywrQkFBSSxJQUFKLENBQVYsQ0FBUixDQUNBLEdB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UCxDQUFnQjZYLFVBQVUsQ0FBRyxDQUE3QixDQUFSLENBQ0gsQ0FDSixDQVZNLENBQVAsQ0FXSCxDQTdCeUMsQ0FBYixDQUFqQyxDQStCSCxDQTNwTEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEqL1xuLy8gQ29weXJpZ2h0IDIwMTQgU3BsdW5rLCBJbmMuXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTogeW91IG1heVxuLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW5cbi8vIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVRcbi8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZVxuLy8gTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbi8vIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgXG4gICAgdmFyIENvbnRleHQgICAgID0gcmVxdWlyZSgnLi9jb250ZXh0Jyk7XG4gICAgdmFyIEh0dHAgICAgICAgID0gcmVxdWlyZSgnLi9odHRwJyk7XG4gICAgdmFyIEFzeW5jICAgICAgID0gcmVxdWlyZSgnLi9hc3luYycpO1xuICAgIHZhciBQYXRocyAgICAgICA9IHJlcXVpcmUoJy4vcGF0aHMnKS5QYXRocztcbiAgICB2YXIgQ2xhc3MgICAgICAgPSByZXF1aXJlKCcuL2pxdWVyeS5jbGFzcycpLkNsYXNzO1xuICAgIHZhciB1dGlscyAgICAgICA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbiAgICBcbiAgICB2YXIgcm9vdCA9IGV4cG9ydHMgfHwgdGhpcztcbiAgICB2YXIgU2VydmljZSA9IG51bGw7XG4gICAgXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gU3BsdW5rIEVudGVycHJpc2UgYW5kIFNwbHVuayBTdG9ybS5cbiAgICAgKiBcbiAgICAgKiBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgaXMgdGhlcmVmb3JlIFNESy1wcml2YXRlLlxuICAgICAqIFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5wcml2YXRlLkJhc2VTZXJ2aWNlXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuQ29udGV4dFxuICAgICAqL1xuICAgIHZhciBCYXNlU2VydmljZSA9IENvbnRleHQuZXh0ZW5kKHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHJvb3QgYWNjZXNzIHBvaW50IHRvIFNwbHVuayBmdW5jdGlvbmFsaXR5IHdpdGggdHlwZWQgYWNjZXNzIHRvIFxuICAgICAqIFNwbHVuayByZXNvdXJjZXMgc3VjaCBhcyBzZWFyY2hlcywgaW5kZXhlcywgaW5wdXRzLCBhbmQgbW9yZS4gUHJvdmlkZXNcbiAgICAgKiBtZXRob2RzIHRvIGF1dGhlbnRpY2F0ZSBhbmQgY3JlYXRlIHNwZWNpYWxpemVkIGluc3RhbmNlcyBvZiB0aGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMucHJpdmF0ZS5CYXNlU2VydmljZVxuICAgICAqL1xuICAgIG1vZHVsZS5leHBvcnRzID0gcm9vdCA9IFNlcnZpY2UgPSBCYXNlU2VydmljZS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuSHR0cH0gaHR0cCBBbiBpbnN0YW5jZSBvZiBhIGBzcGx1bmtqcy5IdHRwYCBjbGFzcy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczogXG4gICAgICAgICAqICAgIC0gYHNjaGVtZWAgKF9zdHJpbmdfKTogVGhlIHNjaGVtZSAoXCJodHRwXCIgb3IgXCJodHRwc1wiKSBmb3IgYWNjZXNzaW5nIFNwbHVuay5cbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIGhvc3QgbmFtZSAodGhlIGRlZmF1bHQgaXMgXCJsb2NhbGhvc3RcIikuXG4gICAgICAgICAqICAgIC0gYHBvcnRgIChfaW50ZWdlcl8pOiBUaGUgcG9ydCBudW1iZXIgKHRoZSBkZWZhdWx0IGlzIDgwODkpLlxuICAgICAgICAgKiAgICAtIGB1c2VybmFtZWAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayBhY2NvdW50IHVzZXJuYW1lLCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKiAgICAtIGBwYXNzd29yZGAgKF9zdHJpbmdfKTogVGhlIHBhc3N3b3JkLCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIG93bmVyICh1c2VybmFtZSkgY29tcG9uZW50IG9mIHRoZSBuYW1lc3BhY2UuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb21wb25lbnQgb2YgdGhlIG5hbWVzcGFjZS5cbiAgICAgICAgICogICAgLSBgc2Vzc2lvbktleWAgKF9zdHJpbmdfKTogVGhlIGN1cnJlbnQgc2Vzc2lvbiB0b2tlbi5cbiAgICAgICAgICogICAgLSBgYXV0b2xvZ2luYCAoX2Jvb2xlYW5fKTogYHRydWVgIHRvIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIGxvZyBpbiBhZ2FpbiBpZiB0aGUgc2Vzc2lvbiB0ZXJtaW5hdGVzLCBgZmFsc2VgIGlmIG5vdCAoYHRydWVgIGJ5IGRlZmF1bHQpLlxuICAgICAgICAgKiAgICAtIGB2ZXJzaW9uYCAoX3N0cmluZ18pOiBUaGUgdmVyc2lvbiBzdHJpbmcgZm9yIFNwbHVuaywgZm9yIGV4YW1wbGUgXCI0LjMuMlwiICh0aGUgZGVmYXVsdCBpcyBcIjUuMFwiKS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxpemUgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zcGVjaWFsaXplKTtcbiAgICAgICAgICAgIHRoaXMuYXBwcyAgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmFwcHMpO1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleGVzICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaW5kZXhlcyk7XG4gICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zYXZlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIHRoaXMuam9icyAgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmpvYnMpO1xuICAgICAgICAgICAgdGhpcy51c2VycyAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXNlcnMpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3VycmVudFVzZXIpO1xuICAgICAgICAgICAgdGhpcy52aWV3cyAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudmlld3MpO1xuICAgICAgICAgICAgdGhpcy5maXJlZEFsZXJ0R3JvdXBzICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmlyZWRBbGVydEdyb3Vwcyk7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbHMgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kYXRhTW9kZWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBgU2VydmljZWAgaW5zdGFuY2UgZm9yXG4gICAgICAgICAqIGEgc3BlY2lmaWMgbmFtZXNwYWNlIGNvbnRleHQuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzdmMgPSAuLi47XG4gICAgICAgICAqICAgICAgdmFyIG5ld1NlcnZpY2UgPSBzdmMuc3BlY2lhbGl6ZShcIm15dXNlclwiLCBcInVuaXhcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvd25lciBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhcHAgVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2V9IFRoZSBzcGVjaWFsaXplZCBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc3BlY2lhbGl6ZTogZnVuY3Rpb24ob3duZXIsIGFwcCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlKHRoaXMuaHR0cCwge1xuICAgICAgICAgICAgICAgIHNjaGVtZTogdGhpcy5zY2hlbWUsXG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5ob3N0LCAgIFxuICAgICAgICAgICAgICAgIHBvcnQ6IHRoaXMucG9ydCwgICAgICAgXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IG93bmVyLFxuICAgICAgICAgICAgICAgIGFwcDogYXBwLCBcbiAgICAgICAgICAgICAgICBzZXNzaW9uS2V5OiB0aGlzLnNlc3Npb25LZXksXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgQXBwbGljYXRpb25zYCBjb2xsZWN0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIFxuICAgICAgICAgKiBsaXN0IGluc3RhbGxlZCBhcHBzIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgaW5zdGFsbGVkIGFwcHNcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHN2Yy5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5mZXRjaChmdW5jdGlvbihlcnIpIHsgY29uc29sZS5sb2coYXBwcy5saXN0KCkpOyB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9ufSBUaGUgYEFwcGxpY2F0aW9uc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWxcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGFwcHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkFwcGxpY2F0aW9ucyh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgQ29uZmlndXJhdGlvbnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IFxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCByZXRyaWV2ZSBjb25maWd1cmF0aW9uICguY29uZikgZmlsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgcHJvcGVydGllcyBpbiB0aGUgJ3Byb3BzLmNvbmYnIGZpbGVcbiAgICAgICAgICogICAgICB2YXIgZmlsZXMgPSBzdmMuY29uZmlndXJhdGlvbnMoKTtcbiAgICAgICAgICogICAgICBmaWxlcy5pdGVtKFwicHJvcHNcIiwgZnVuY3Rpb24oZXJyLCBwcm9wc0ZpbGUpIHtcbiAgICAgICAgICogICAgICAgICAgcHJvcHNGaWxlLmZldGNoKGZ1bmN0aW9uKGVyciwgcHJvcHMpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BzLnByb3BlcnRpZXMoKSk7IFxuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnN9IFRoZSBgQ29uZmlndXJhdGlvbnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBjb25maWdzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZ3VyYXRpb25zOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9ucyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBJbmRleGVzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIFxuICAgICAgICAgKiBsaXN0LCBhbmQgdXBkYXRlIGluZGV4ZXMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW4gX2ludGVybmFsIGluZGV4XG4gICAgICAgICAqICAgICAgdmFyIGluZGV4ZXMgPSBzdmMuaW5kZXhlcygpO1xuICAgICAgICAgKiAgICAgIGluZGV4ZXMuZmV0Y2goZnVuY3Rpb24oZXJyLCBpbmRleGVzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXMuaXRlbShcIl9pbnRlcm5hbFwiKTtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJXYXMgaW5kZXggZm91bmQ6IFwiICsgISFpbmRleCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIGBpbmRleGAgaXMgYW4gSW5kZXggb2JqZWN0LlxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleGVzfSBUaGUgYEluZGV4ZXNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqLyAgICAgICAgXG4gICAgICAgIGluZGV4ZXM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkgeyBcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5JbmRleGVzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFNhdmVkU2VhcmNoZXNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91XG4gICAgICAgICAqIGNyZWF0ZSwgbGlzdCwgYW5kIHVwZGF0ZSBzYXZlZCBzZWFyY2hlcy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBzYXZlZCBzZWFyY2hlc1xuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaGVzID0gc3ZjLnNhdmVkU2VhcmNoZXMoKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaGVzLmZldGNoKGZ1bmN0aW9uKGVyciwgc2F2ZWRTZWFyY2hlcykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIiMgT2YgU2F2ZWQgU2VhcmNoZXM6IFwiICsgc2F2ZWRTZWFyY2hlcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc30gVGhlIGBTYXZlZFNlYXJjaGVzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBzYXZlZFNlYXJjaGVzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TYXZlZFNlYXJjaGVzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFN0b3JhZ2VQYXNzd29yZHNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91XG4gICAgICAgICAqIGNyZWF0ZSwgbGlzdCwgYW5kIHVwZGF0ZSBzdG9yYWdlIHBhc3N3b3Jkcy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBzdG9yYWdlIHBhc3N3b3Jkc1xuICAgICAgICAgKiAgICAgIHZhciBzdG9yYWdlUGFzc3dvcmRzID0gc3ZjLnN0b3JhZ2VQYXNzd29yZHMoKTtcbiAgICAgICAgICogICAgICBzdG9yYWdlUGFzc3dvcmRzLmZldGNoKGZ1bmN0aW9uKGVyciwgc3RvcmFnZVBhc3N3b3Jkcykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIiMgb2YgU3RvcmFnZSBQYXNzd29yZHM6IFwiICsgc3RvcmFnZVBhc3N3b3Jkcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc30gVGhlIGBTdG9yYWdlUGFzc3dvcmRzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc3RvcmFnZS9wYXNzd29yZHNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzXG4gICAgICAgICAqL1xuICAgICAgICBzdG9yYWdlUGFzc3dvcmRzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TdG9yYWdlUGFzc3dvcmRzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBGaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBsaXN0IGFsZXJ0IGdyb3Vwcy5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqICAgICAgXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBmaXJlZCBhbGVydCBncm91cHNcbiAgICAgICAgICogICAgICB2YXIgZmlyZWRBbGVydEdyb3VwcyA9IHN2Yy5maXJlZEFsZXJ0R3JvdXBzKCk7XG4gICAgICAgICAqICAgICAgZmlyZWRBbGVydEdyb3Vwcy5mZXRjaChmdW5jdGlvbihlcnIsIGZpcmVkQWxlcnRHcm91cHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIG9mIGFsZXJ0IGdyb3VwczogXCIgKyBmaXJlZEFsZXJ0R3JvdXBzLmxpc3QoKS5sZW5ndGgpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9ufSBUaGUgYEZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25gIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGZpcmVkQWxlcnRHcm91cHM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24odGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYEpvYnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgbGlzdCxcbiAgICAgICAgICogYW5kIHJldHJpZXZlIHNlYXJjaCBqb2JzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBMaXN0IGFsbCBqb2IgSURzXG4gICAgICAgICAqICAgICAgdmFyIGpvYnMgPSBzdmMuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMuZmV0Y2goZnVuY3Rpb24oZXJyLCBqb2JzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBsaXN0ID0gam9icy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYiBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYnN9IFRoZSBgSm9ic2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi9cbiAgICAgICAgam9iczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYERhdGFNb2RlbHNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgbGlzdCxcbiAgICAgICAgICogYW5kIHJldHJpZXZlIGRhdGEgbW9kZWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YW1vZGVsL21vZGVsXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgZGF0YU1vZGVsczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRGF0YU1vZGVscyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgVXNlcnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgXG4gICAgICAgICAqIGxpc3QsIGFuZCByZXRyaWV2ZSB1c2Vycy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgdXNlcm5hbWVzXG4gICAgICAgICAqICAgICAgdmFyIHVzZXJzID0gc3ZjLnVzZXJzKCk7XG4gICAgICAgICAqICAgICAgdXNlcnMuZmV0Y2goZnVuY3Rpb24oZXJyLCB1c2Vycykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IHVzZXJzLmxpc3QoKTtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5wcm9wZXJ0aWVzKCkubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Vc2Vyc30gVGhlIGBVc2Vyc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGF1dGhvcml6YXRpb24vdXNlcnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlVzZXJzKHRoaXMpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFZpZXdzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsXG4gICAgICAgICAqIGxpc3QsIGFuZCByZXRyaWV2ZSB2aWV3cyAoY3VzdG9tIFVJcyBidWlsdCBpbiBTcGx1bmsncyBhcHAgZnJhbWV3b3JrKS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgdmlld3NcbiAgICAgICAgICogICAgICB2YXIgdmlld3MgPSBzdmMudmlld3MoKTtcbiAgICAgICAgICogICAgICB2aWV3cy5mZXRjaChmdW5jdGlvbihlcnIsIHZpZXdzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBsaXN0ID0gdmlld3MubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJWaWV3IFwiICsgKGkrMSkgKyBcIjogXCIgKyBsaXN0W2ldLnByb3BlcnRpZXMoKS5uYW1lKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3c30gVGhlIGBWaWV3c2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3NcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgdmlld3M6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlZpZXdzKHRoaXMsIG5hbWVzcGFjZSk7ICBcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2Uub25lc2hvdFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5zZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCBuZXdKb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCI6IG5ld0pvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCIgaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGNyZWF0ZWQgam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGpvYnMgPSBuZXcgcm9vdC5Kb2JzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9icy5zZWFyY2gocXVlcnksIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBnZXQgYSBgSm9iYCBieSBpdHMgc2lkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2lkIFRoZSBzZWFyY2ggSUQgZm9yIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBnZXRKb2I6IGZ1bmN0aW9uKHNpZCwgbmFtZXNwYWNlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGlzLCBzaWQsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9iLmZldGNoKHt9LCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG9uZXNob3Qgc2VhcmNoIGZyb20gYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5vbmVzaG90U2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFU1VMVCBGSUVMRFNcIjogcmVzdWx0cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgcmVzdWx0cyAoWE1MLCBKU09OLCBvciBDU1YpLlxuICAgICAgICAgKiAgICAtIGBlYXJsaWVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGVhcmxpZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYGxhdGVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGxhdGVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGByZmAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpZWxkcyB0byBhZGQgdG8gdGhlIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2g6IGAoZXJyLCByZXN1bHRzKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIG9uZXNob3RTZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGpvYnMgPSBuZXcgcm9vdC5Kb2JzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9icy5vbmVzaG90U2VhcmNoKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGxvZ2dlZCBpbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmN1cnJlbnRVc2VyKGZ1bmN0aW9uKGVyciwgdXNlcikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlYWwgbmFtZTogXCIsIHVzZXIucHJvcGVydGllcygpLnJlYWxuYW1lKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHVzZXIgaW5zdGFuY2U6IGAoZXJyLCB1c2VyKWAuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuY3VycmVudFVzZXJ9IFRoZSBgVXNlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhdXRob3JpemF0aW9uL2N1cnJlbnQtY29udGV4dFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGN1cnJlbnRVc2VyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5nZXQoUGF0aHMuY3VycmVudFVzZXIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VybmFtZSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudC51c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIgPSBuZXcgcm9vdC5Vc2VyKHRoYXQsIHVzZXJuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnNlcnZlckluZm8oZnVuY3Rpb24oZXJyLCBpbmZvKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3BsdW5rIFZlcnNpb246IFwiLCBpbmZvLnByb3BlcnRpZXMoKS52ZXJzaW9uKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlcnZlciBpbmZvOiBgKGVyciwgaW5mbylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VydmVyL2luZm9cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBzZXJ2ZXJJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2VydmVySW5mbyA9IG5ldyByb290LlNlcnZlckluZm8odGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gc2VydmVySW5mby5mZXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUGFyc2VzIGEgc2VhcmNoIHF1ZXJ5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UucGFyc2UoXCJzZWFyY2ggaW5kZXg9X2ludGVybmFsIHwgaGVhZCAxXCIsIGZ1bmN0aW9uKGVyciwgcGFyc2UpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDb21tYW5kczogXCIsIHBhcnNlLmNvbW1hbmRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkgdG8gcGFyc2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQW4gb2JqZWN0IG9mIG9wdGlvbnMgZm9yIHRoZSBwYXJzZXI6XG4gICAgICAgICAqICAgIC0gYGVuYWJsZV9sb29rdXBzYCAoX2Jvb2xlYW5fKTogSWYgYHRydWVgLCBwZXJmb3JtcyByZXZlcnNlIGxvb2t1cHMgdG8gZXhwYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBvdXRwdXQgZm9ybWF0IChYTUwgb3IgSlNPTikuXG4gICAgICAgICAqICAgIC0gYHBhcnNlX29ubHlgIChfYm9vbGVhbl8pOiBJZiBgdHJ1ZWAsIGRpc2FibGVzIHRoZSBleHBhbnNpb24gb2Ygc2VhcmNoIGR1ZSB0byBldmFsdWF0aW9uIG9mIHN1YnNlYXJjaGVzLCB0aW1lIHRlcm0gZXhwYW5zaW9uLCBsb29rdXBzLCB0YWdzLCBldmVudHR5cGVzLCBhbmQgc291cmNldHlwZSBhbGlhcy5cbiAgICAgICAgICogICAgLSBgcmVsb2FkX21hY3Jvc2AgKF9ib29sZWFuXyk6IElmIGB0cnVlYCwgcmVsb2FkcyBtYWNybyBkZWZpbml0aW9ucyBmcm9tIG1hY3Jvcy5jb25mLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcGFyc2UgaW5mbzogYChlcnIsIHBhcnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvcGFyc2VyXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmFtcy5xID0gcXVlcnk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChQYXRocy5wYXJzZXIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb3ZpZGVzIGF1dG8tY29tcGxldGUgc3VnZ2VzdGlvbnMgZm9yIHNlYXJjaCBxdWVyaWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UudHlwZWFoZWFkKFwiaW5kZXg9XCIsIDEwLCBmdW5jdGlvbihlcnIsIG9wdGlvbnMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJBdXRvY29tcGxldGlvbiBvcHRpb25zOiBcIiwgb3B0aW9ucyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggVGhlIHF1ZXJ5IGZyYWdtZW50IHRvIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IFRoZSBudW1iZXIgb2Ygb3B0aW9ucyB0byByZXR1cm4gKG9wdGlvbmFsKS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGF1dG9jb21wbGV0aW9uIGluZm86IGAoZXJyLCBvcHRpb25zKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvdHlwZWFoZWFkXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgdHlwZWFoZWFkOiBmdW5jdGlvbihwcmVmaXgsIGNvdW50LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKGNvdW50KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY291bnQ7XG4gICAgICAgICAgICAgICAgY291bnQgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBjb3VudDogY291bnQgfHwgMTAsXG4gICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChQYXRocy50eXBlYWhlYWQsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gKHJlc3BvbnNlLmRhdGEgfHwge30pLnJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMgfHwgW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvZ3MgYW4gZXZlbnQgdG8gU3BsdW5rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UubG9nKFwiQSBuZXcgZXZlbnRcIiwge2luZGV4OiBcIl9pbnRlcm5hbFwiLCBzb3VyY2V0eXBlOiBcIm15c291cmNldHlwZVwifSwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgZXZlbnQ6IFwiLCByZXN1bHQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGV2ZW50IFRoZSB0ZXh0IGZvciB0aGlzIGV2ZW50LCBvciBhIEpTT04gb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwYXJhbWV0ZXJzIGZvciBpbmRleGluZzogXG4gICAgICAgICAqICAgIC0gYGluZGV4YCAoX3N0cmluZ18pOiBUaGUgaW5kZXggdG8gc2VuZCBldmVudHMgZnJvbSB0aGlzIGlucHV0IHRvLlxuICAgICAgICAgKiAgICAtIGBob3N0YCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIEhvc3QgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC4gXG4gICAgICAgICAqICAgIC0gYGhvc3RfcmVnZXhgIChfc3RyaW5nXyk6IEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZXh0cmFjdCB0aGUgaG9zdCB2YWx1ZSBmcm9tIGVhY2ggZXZlbnQuIFxuICAgICAgICAgKiAgICAtIGBzb3VyY2VgIChfc3RyaW5nXyk6IFRoZSB2YWx1ZSB0byBwb3B1bGF0ZSBpbiB0aGUgU291cmNlIGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuXG4gICAgICAgICAqICAgIC0gYHNvdXJjZXR5cGVgIChfc3RyaW5nXyk6IFRoZSB2YWx1ZSB0byBwb3B1bGF0ZSBpbiB0aGUgU291cmNldHlwZSBmaWVsZCBmb3IgZXZlbnRzIGZyb20gdGhpcyBkYXRhIGlucHV0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgc3VibWl0dGVkOiBgKGVyciwgcmVzdWx0KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCByZWNlaXZlcnMvc2ltcGxlXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgbG9nOiBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgYSBKU09OIG9iamVjdCwgY29udmVydCBpdCB0byBhIHN0cmluZy5cbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLnBhdGhzLnN1Ym1pdEV2ZW50O1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7XCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L3BsYWluXCJ9O1xuICAgICAgICAgICAgdmFyIGJvZHkgPSBldmVudDtcbiAgICAgICAgICAgIHZhciBnZXQgPSBwYXJhbXM7XG4gICAgICAgICAgICB2YXIgcG9zdCA9IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5yZXF1ZXN0KFxuICAgICAgICAgICAgICAgIHBhdGgsIFxuICAgICAgICAgICAgICAgIG1ldGhvZCwgXG4gICAgICAgICAgICAgICAgZ2V0LCBcbiAgICAgICAgICAgICAgICBwb3N0LCBcbiAgICAgICAgICAgICAgICBib2R5LCBcbiAgICAgICAgICAgICAgICBoZWFkZXJzLCBcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIGJhc2UgZGVmaW5pdGlvbiBmb3IgYSBTcGx1bmsgZW5kcG9pbnQsIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2ZcbiAgICAgKiBhIHNwZWNpZmljIHNlcnZpY2UgYW5kIHBhdGguIFByb3ZpZGVzIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIEdFVCwgUE9TVCwgYW5kXG4gICAgICogREVMRVRFIG9wZXJhdGlvbnMgdXNlZCBpbiBzcGx1bmtqcywgYXV0b21hdGljYWxseSBwcmVwYXJpbmcgdGhlIHBhdGggY29ycmVjdGx5XG4gICAgICogYW5kIGFsbG93aW5nIGZvciByZWxhdGl2ZSBjYWxscy5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICovXG4gICAgcm9vdC5FbmRwb2ludCA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkUGF0aCBBIGZ1bGx5LXF1YWxpZmllZCByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCIvc2VydmljZXMvc2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnR9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBxdWFsaWZpZWRQYXRoKSB7XG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXNzZWQgaW4gYSBudWxsIFNlcnZpY2UuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXF1YWxpZmllZFBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXNzZWQgaW4gYW4gZW1wdHkgcGF0aC5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB0aGlzLnF1YWxpZmllZFBhdGggPSBxdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuZ2V0ICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmdldCk7XG4gICAgICAgICAgICAvLyB0aGlzLmdldF92MiA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5nZXRfdjIpO1xuICAgICAgICAgICAgdGhpcy5wb3N0ICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucG9zdCk7XG4gICAgICAgICAgICB0aGlzLmRlbCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kZWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIEdFVCByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2L3Jlc3VsdHM/b2Zmc2V0PTFcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LmdldChcInJlc3VsdHNcIiwge29mZnNldDogMX0sIGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyhcIkRPTkVcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgcXVlcnkgc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0X3YyOiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRfdjIoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcmZvcm1zIGEgcmVsYXRpdmUgUE9TVCByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2L2NvbnRyb2xcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiY2FuY2VsXCJ9LCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coXCJDQU5DRUxMRURcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgYm9keS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgY29tcGxldGU6IGAoZXJyLCByZXNwb25zZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIHBvc3Q6IGZ1bmN0aW9uKHJlbHBhdGgsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5wb3N0KFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcmZvcm1zIGEgcmVsYXRpdmUgREVMRVRFIHJlcXVlc3Qgb24gYW4gZW5kcG9pbnQncyBwYXRoLFxuICAgICAgICAgKiBjb21iaW5lZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGFuZCBhIHJlbGF0aXZlIHBhdGggaWYgc3BlY2lmaWVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIFdpbGwgbWFrZSBhIHJlcXVlc3QgdG8ge3NlcnZpY2UucHJlZml4fS9zZWFyY2gvam9icy8xMjM0NTZcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LmRlbGV0ZShcIlwiLCB7fSwgZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKFwiREVMRVRFRFwiKSl9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHJlbHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgZW5kcG9pbnQgcGF0aC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgZW50aXR5LXNwZWNpZmljIHBhcmFtZXRlcnMgdG8gYWRkIHRvIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBkZWw6IGZ1bmN0aW9uKHJlbHBhdGgsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kZWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgYmFzZSBkZWZpbml0aW9uIGZvciBhIFNwbHVuayByZXNvdXJjZSAoZm9yIGV4YW1wbGUsIGFuIGVudGl0eSBcbiAgICAgKiBzdWNoIGFzIGFuIGluZGV4IG9yIHNlYXJjaCBqb2IsIG9yIGEgY29sbGVjdGlvbiBvZiBlbnRpdGllcykuIFByb3ZpZGVzIFxuICAgICAqIGJhc2ljIG1ldGhvZHMgZm9yIGhhbmRsaW5nIFNwbHVuayByZXNvdXJjZXMsIHN1Y2ggYXMgdmFsaWRhdGlvbiBhbmQgXG4gICAgICogYWNjZXNzaW5nIHByb3BlcnRpZXMuIFxuICAgICAqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgYmVjYXVzZSBtb3N0IG1ldGhvZHMgYXJlIG1lYW50IHRvIGJlIG92ZXJyaWRkZW4uXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgKi9cbiAgICByb290LlJlc291cmNlID0gcm9vdC5FbmRwb2ludC5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2V9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHZhciBmdWxscGF0aCA9IHNlcnZpY2UuZnVsbHBhdGgocGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgZnVsbHBhdGgpO1xuICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuX2xvYWQgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuX2xvYWQpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaCAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5mZXRjaCk7XG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGggICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNVVNUIEJFIE9WRVJSSURERU5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIHJlc291cmNlIGFuZCBzdG9yZXMgdGhlIHByb3BlcnRpZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgX2xvYWQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyB0aGUgcmVzb3VyY2UgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgICogYW5kIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwcm9wZXJ0aWVzIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICovXG4gICAgICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGZ1bGwgc3RhdGUgKHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhKSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBjdXJyZW50IGZ1bGwgc3RhdGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgYSBTcGx1bmsgZW50aXR5LCB3aGljaCBpcyBhIHdlbGwtZGVmaW5lZCBjb25zdHJ1Y3RcbiAgICAgKiB3aXRoIGNlcnRhaW4gb3BlcmF0aW9ucyAoc3VjaCBhcyBcInByb3BlcnRpZXNcIiwgXCJ1cGRhdGVcIiwgYW5kIFwiZGVsZXRlXCIpLiBcbiAgICAgKiBFbnRpdGllcyBpbmNsdWRlIHNlYXJjaCBqb2JzLCBpbmRleGVzLCBpbnB1dHMsIGFwcHMsIGFuZCBtb3JlLiBcbiAgICAgKlxuICAgICAqIFByb3ZpZGVzIGJhc2ljIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTcGx1bmsgZW50aXRpZXMsIHN1Y2ggYXMgZmV0Y2hpbmcgYW5kXG4gICAgICogdXBkYXRpbmcgdGhlbS5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgKi9cbiAgICByb290LkVudGl0eSA9IHJvb3QuUmVzb3VyY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgc3RhdGljIHByb3BlcnR5IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIFxuICAgICAgICAgKiB1cGRhdGUgdG8gZ2V0IHRoZSB1cGRhdGVkIGVudGl0eS4gQnkgZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgXG4gICAgICAgICAqIGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJucyAoZWNob2VzKSB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25VcGRhdGU6IGZhbHNlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBBIHJlbGF0aXZlIGVuZHBvaW50IHBhdGggKGZvciBleGFtcGxlLCBcInNlYXJjaC9qb2JzXCIpLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5FbnRpdHl9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5fbG9hZCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5mZXRjaCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZW1vdmUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpZWxkcyk7XG4gICAgICAgICAgICB0aGlzLmxpbmtzICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saW5rcyk7XG4gICAgICAgICAgICB0aGlzLmFjbCAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hY2wpO1xuICAgICAgICAgICAgdGhpcy5hdXRob3IgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuYXV0aG9yKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZCAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZWQpO1xuICAgICAgICAgICAgdGhpcy5wdWJsaXNoZWQgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucHVibGlzaGVkKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmVuYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGUgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kaXNhYmxlKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJlbG9hZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9maWVsZHMgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9hY2wgICAgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9saW5rcyAgICAgID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIGVudGl0eSBhbmQgc3RvcmVzIHRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgX2xvYWQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB1dGlscy5pc0FycmF5KHByb3BlcnRpZXMpID8gcHJvcGVydGllc1swXSA6IHByb3BlcnRpZXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHByb3BlcnRpZXMgdG9cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlc1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkczoge30sXG4gICAgICAgICAgICAgICAgYWNsOiB7fSxcbiAgICAgICAgICAgICAgICBsaW5rczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWtlIG91dCB0aGUgZW50aXR5LXNwZWNpZmljIGNvbnRlbnRcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmNvbnRlbnQgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyAgICAgPSBwcm9wZXJ0aWVzLmZpZWxkcyAgICB8fCB0aGlzLl9maWVsZHMgfHwge307XG4gICAgICAgICAgICB0aGlzLl9hY2wgICAgICAgID0gcHJvcGVydGllcy5hY2wgICAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9saW5rcyAgICAgID0gcHJvcGVydGllcy5saW5rcyAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9hdXRob3IgICAgID0gcHJvcGVydGllcy5hdXRob3IgICAgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWQgICAgPSBwcm9wZXJ0aWVzLnVwZGF0ZWQgICB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVkICA9IHByb3BlcnRpZXMucHVibGlzaGVkIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBmaWVsZHMgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LCBpbmRpY2F0aW5nIHdoaWNoIFxuICAgICAgICAgKiBmaWVsZHMgYXJlIHdpbGRjYXJkcywgcmVxdWlyZWQsIGFuZCBvcHRpb25hbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmllbGRzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LFxuICAgICAgICAgKiB3aGljaCBjb250YWlucyB0aGUgcGVybWlzc2lvbnMgZm9yIGFjY2Vzc2luZyB0aGUgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBBQ0wuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGFjbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWNsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgbGlua3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LCB3aGljaCBpcyB0aGUgVVJJIG9mXG4gICAgICAgICAqIHRoZSBlbnRpdHkgcmVsYXRpdmUgdG8gdGhlIG1hbmFnZW1lbnQgcG9ydCBvZiBhIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbGlua3MgaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5rcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGF1dGhvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aG9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRob3I7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSB1cGRhdGVkIHRpbWUgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB1cGRhdGVkIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBwdWJsaXNoZWQgdGltZSBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHB1Ymxpc2hlZCB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaXNoZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlZDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZyZXNoZXMgdGhlIGVudGl0eSBieSBmZXRjaGluZyB0aGUgb2JqZWN0IGZyb20gdGhlIHNlcnZlciBhbmQgXG4gICAgICAgICAqIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgY291bnRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBvZmZzZXRgIChfaW50ZWdlcl8pOiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGZpbHRlciByZXNwb25zZXMuXG4gICAgICAgICAqICAgIC0gYHNvcnRfZGlyYCAoX3N0cmluZ18pOiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgcmV0dXJuZWQgaXRlbXM6IOKAnGFzY+KAnSBvciDigJxkZXNj4oCdLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2tleWAgKF9zdHJpbmdfKTogVGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZyAob3B0aW9uYWwpLlxuICAgICAgICAgKiAgICAtIGBzb3J0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBjb2xsYXRpbmcgc2VxdWVuY2UgZm9yIHNvcnRpbmcgcmV0dXJuZWQgaXRlbXM6IOKAnGF1dG/igJ0sIOKAnGFscGhh4oCdLCDigJxhbHBoYV9jYXNl4oCdLCBvciDigJxudW3igJ0uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fbG9hZChyZXNwb25zZS5kYXRhID8gcmVzcG9uc2UuZGF0YS5lbnRyeSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWxldGVzIHRoZSBlbnRpdHkgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGRlbGV0ZWQ6IGAoZXJyKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWwoXCJcIiwge30sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IHdpdGguXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgdXBkYXRlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0ICduYW1lJyBmaWVsZCBpbiAndXBkYXRlJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCBwcm9wcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmICghZXJyICYmICF0aGF0LmZldGNoT25VcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fbG9hZChyZXNwb25zZS5kYXRhLmVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVyciAmJiB0aGF0LmZldGNoT25VcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZXMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGRpc2FibGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5wb3N0KFwiZGlzYWJsZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGVuYWJsZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICBlbmFibGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMucG9zdChcImVuYWJsZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbG9hZHMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJlbG9hZGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgcmVsb2FkOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBvc3QoXCJfcmVsb2FkXCIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBiYXNlIGNsYXNzIGZvciBhIFNwbHVuayBjb2xsZWN0aW9uLCB3aGljaCBpcyBhIHdlbGwtZGVmaW5lZCBjb25zdHJ1Y3RcbiAgICAgKiB0aGF0IHByb3ZpZGVzIGJhc2ljIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBjb2xsZWN0aW9ucyBvZiBlbnRpdGllcywgc3VjaCBhcyBcbiAgICAgKiBjcmVhdGluZyBhbmQgbGlzdGluZyBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICovXG4gICAgcm9vdC5Db2xsZWN0aW9uID0gcm9vdC5SZXNvdXJjZS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBzdGF0aWMgcHJvcGVydHkgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gXG4gICAgICAgICAqIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIFxuICAgICAgICAgKiBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uRW50aXR5Q3JlYXRpb246IGZhbHNlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLl9sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2ggICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGUgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICAgICAgdGhpcy5saXN0ICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saXN0KTtcbiAgICAgICAgICAgIHRoaXMuaXRlbSAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbnRpYXRlRW50aXR5ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmluc3RhbnRpYXRlRW50aXR5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzICAgICAgID0gW107XG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllc0J5TmFtZSA9IHt9OyAgICBcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9wYWdpbmcgICAgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICAgICAgPSB7fTsgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGVudGl0eS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNVVNUIEJFIE9WRVJSSURERU5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIGNvbGxlY3Rpb24gYW5kIHByb3BlcnRpZXMsIGFuZCBjcmVhdGVzIGEgbWFwIG9mIGVudGl0eVxuICAgICAgICAgKiBuYW1lcyB0byBlbnRpdHkgSURzIChmb3IgcmV0cmlldmFsIHB1cnBvc2VzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0aWVzID0gW107XG4gICAgICAgICAgICB2YXIgZW50aXRpZXNCeU5hbWUgPSB7fTtcbiAgICAgICAgICAgIHZhciBlbnRpdHlQcm9wZXJ0eUxpc3QgPSBwcm9wZXJ0aWVzLmVudHJ5IHx8IFtdO1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVudGl0eVByb3BlcnR5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IGVudGl0eVByb3BlcnR5TGlzdFtpXTtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhpcy5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7XG4gICAgICAgICAgICAgICAgZW50aXR5Ll9sb2FkKHByb3BzKTtcbiAgICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0aWVzQnlOYW1lLmhhc093blByb3BlcnR5KGVudGl0eS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdGllc0J5TmFtZVtlbnRpdHkubmFtZV0ucHVzaChlbnRpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNCeU5hbWVbZW50aXR5Lm5hbWVdID0gW2VudGl0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZW50aXRpZXMgICAgICAgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzQnlOYW1lID0gZW50aXRpZXNCeU5hbWU7XG4gICAgICAgICAgICB0aGlzLl9wYWdpbmcgICAgICAgICA9IHByb3BlcnRpZXMucGFnaW5nICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICAgICAgPSBwcm9wZXJ0aWVzLmxpbmtzICAgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWQgICAgICAgID0gcHJvcGVydGllcy51cGRhdGVkICAgfHwgbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGxpbmtzIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbGxlY3Rpb24sIHdoaWNoIGlzIHRoZSBVUkkgb2ZcbiAgICAgICAgICogdGhlIHJlc291cmNlIHJlbGF0aXZlIHRvIHRoZSBtYW5hZ2VtZW50IHBvcnQgb2YgYSBTcGx1bmsgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGxpbmtzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbGlua3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmtzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgYXV0aG9yIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGF1dGhvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhZ2luZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5nO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgdXBkYXRlZCB0aW1lIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHVwZGF0ZWQgdGltZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIHRoZSByZXNvdXJjZSBieSBmZXRjaGluZyB0aGUgb2JqZWN0IGZyb20gdGhlIHNlcnZlciBhbmQgXG4gICAgICAgICAqIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSBvZiBjb2xsZWN0aW9uIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbiBvcHRpb25zOlxuICAgICAgICAgKiAgICAtIGBjb3VudGAgKF9pbnRlZ2VyXyk6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byByZXR1cm4uXG4gICAgICAgICAqICAgIC0gYG9mZnNldGAgKF9pbnRlZ2VyXyk6IFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGl0ZW0gdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggcXVlcnkgdG8gZmlsdGVyIHJlc3BvbnNlcy5cbiAgICAgICAgICogICAgLSBgc29ydF9kaXJgIChfc3RyaW5nXyk6IFRoZSBkaXJlY3Rpb24gdG8gc29ydCByZXR1cm5lZCBpdGVtczog4oCcYXNj4oCdIG9yIOKAnGRlc2PigJ0uXG4gICAgICAgICAqICAgIC0gYHNvcnRfa2V5YCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBzb3J0aW5nIChvcHRpb25hbCkuXG4gICAgICAgICAqICAgIC0gYHNvcnRfbW9kZWAgKF9zdHJpbmdfKTogVGhlIGNvbGxhdGluZyBzZXF1ZW5jZSBmb3Igc29ydGluZyByZXR1cm5lZCBpdGVtczog4oCcYXV0b+KAnSwg4oCcYWxwaGHigJ0sIOKAnGFscGhhX2Nhc2XigJ0sIG9yIOKAnG51beKAnS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyByZXRyaWV2ZWQ6IGAoZXJyLCByZXNvdXJjZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb3VudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhhdC5nZXQoXCJcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZldGNoX3YyOiBhc3luYyBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb3VudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCB0aGF0LmdldF92MihcIlwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIC8vIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3BlY2lmaWMgZW50aXR5IGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzZXJ2aWNlLmFwcHMoKTtcbiAgICAgICAgICogICAgICBhcHBzLmZldGNoKGZ1bmN0aW9uKGVyciwgYXBwcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgYXBwID0gYXBwcy5pdGVtKFwic2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNlYXJjaCBBcHAgRm91bmQ6IFwiICsgISFhcHApO1xuICAgICAgICAgKiAgICAgICAgICAvLyBgYXBwYCBpcyBhbiBBcHBsaWNhdGlvbiBvYmplY3QuXG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHRvIHJldHJpZXZlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIHdpbGRjYXJkIHZhbHVlIFwiLVwiLCBpcyBub3QgYWNjZXB0YWJsZSB3aGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIHdpbGRjYXJkIHZhbHVlIFwiLVwiIGlzIHVuYWNjZXB0YWJsZSB3aGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3BsdW5ranMuU2VydmljZS5FbnRpdHl9IFRoZSBlbnRpdHksIG9yIGBudWxsYCBpZiBvbmUgaXMgbm90IGZvdW5kLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXRlbTogZnVuY3Rpb24oaWQsIG5hbWVzcGFjZSkgeyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0VtcHR5KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3Qgc3VwbHkgYSBub24tZW1wdHkgbmFtZS5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgJiYgKG5hbWVzcGFjZS5hcHAgPT09ICctJyB8fCBuYW1lc3BhY2Uub3duZXIgPT09ICctJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXaGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LCB3aWxkY2FyZHMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBuYW1lc3BhY2UuIFBsZWFzZSByZWZpbmUgeW91ciBzZWFyY2guXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgZnVsbFBhdGggPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudGl0aWVzQnlOYW1lLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzQnlOYW1lW2lkXTsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDEgJiYgIW5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbnRpdHkgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkIG5hbWUgYW5kIHRoZSB1c2VyIGRpZCBub3RcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBhIG5hbWVzcGFjZSwgdGhlbiB3ZSBqdXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpdFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50aXRpZXNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMSAmJiBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3BlY2lmaWVkIGEgbmFtZXNwYWNlLCB0aGVuIHdlIFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHJldHVybiB0aGUgZW50aXR5IGlmIGl0IG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZ1bGwgcGF0aFxuICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCA9IHRoaXMuc2VydmljZS5mdWxscGF0aChlbnRpdGllc1swXS5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdGllc1swXS5xdWFsaWZpZWRQYXRoID09PSBmdWxsUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZW50aXRpZXMubGVuZ3RoID4gMSAmJiAhbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZW50aXR5IGFuZCB3ZSBkaWRuJ3RcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBhIG5hbWVzcGFjZSwgdGhlbiB3ZSByZXR1cm4gYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gc2F5aW5nIHRoZSBtYXRjaCBpcyBhbWJpZ3VvdXNcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW1iaWd1b3VzIG1hdGNoIGZvciBuYW1lICdcIiArIGlkICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBlbnRpdHksIGFuZCB3ZSBkbyBoYXZlXG4gICAgICAgICAgICAgICAgICAgIC8vIGEgbmFtZXNwYWNlLCBzbyB3ZSB0cnkgYW5kIGZpbmQgaXRcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gZW50aXRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCA9IHRoaXMuc2VydmljZS5mdWxscGF0aChlbnRpdGllc1tpXS5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5LnF1YWxpZmllZFBhdGggPT09IGZ1bGxQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBlbnRpdHkgb24gdGhlIHNlcnZlciBmb3IgdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZFxuICAgICAgICAgKiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHBzID0gc2VydmljZS5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5jcmVhdGUoe25hbWU6IFwiTmV3U2VhcmNoQXBwXCJ9LCBmdW5jdGlvbihlcnIsIG5ld0FwcCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIG9iamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gcmVzcG9uc2UuZGF0YS5lbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhhdC5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eS5fbG9hZChwcm9wcyk7IFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuZmV0Y2hPbkVudGl0eUNyZWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCBlbnRpdGllcyBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHNlcnZpY2UuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuZmV0Y2goZnVuY3Rpb24oZXJyLCBhcHBzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBhcHBMaXN0ID0gYXBwcy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKGFwcExpc3QubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGxpc3Qgb2YgZW50aXRpZXM6IGAoZXJyLCBsaXN0KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuY2xvbmUodGhpcy5fZW50aXRpZXMpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHNhdmVkIHNlYXJjaCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlNhdmVkU2VhcmNoID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc2F2ZWRTZWFyY2hlcyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgc2F2ZWQgc2VhcmNoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYWNrbm93bGVkZ2UgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmFja25vd2xlZGdlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2ggICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmRpc3BhdGNoKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmhpc3RvcnkpO1xuICAgICAgICAgICAgdGhpcy5zdXBwcmVzc0luZm8gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VwcHJlc3NJbmZvKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cyBmb3IgdGhpcyBzYXZlZFNlYXJjaCxcbiAgICAgICAgICogZGVmYXVsdGluZyB0byAwIHdoZW4gdW5kZWZpbmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHZhciBhbGVydENvdW50ID0gc2F2ZWRTZWFyY2guYWxlcnRDb3VudCgpO1xuICAgICAgICAgKiBcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSBUaGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBhbGVydENvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyZWRfYWxlcnRfY291bnQsIDEwKSB8fCAwO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBY2tub3dsZWRnZXMgdGhlIHN1cHByZXNzaW9uIG9mIHRoZSBhbGVydHMgZnJvbSBhIHNhdmVkIHNlYXJjaCBhbmRcbiAgICAgICAgICogcmVzdW1lcyBhbGVydGluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5hY2tub3dsZWRnZShmdW5jdGlvbihlcnIsIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFDS05PV0xFREdFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNhdmVkIHNlYXJjaCBpcyBhY2tub3dsZWRnZWQ6IGAoZXJyLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2Fja25vd2xlZGdlXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgYWNrbm93bGVkZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJhY2tub3dsZWRnZVwiLCB7fSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc3BhdGNoZXMgYSBzYXZlZCBzZWFyY2gsIHdoaWNoIGNyZWF0ZXMgYSBzZWFyY2ggam9iIGFuZCByZXR1cm5zIGEgXG4gICAgICAgICAqIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHNhdmVkU2VhcmNoLmRpc3BhdGNoKHtmb3JjZV9kaXNwYXRjaDogZmFsc2V9LCBmdW5jdGlvbihlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgU0lEOiBcIiwgam9iLnNpZCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBkaXNwYXRjaGluZyB0aGlzIHNhdmVkIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgZGlzcGF0Y2gubm93YCAoX3N0cmluZ18pOiBUaGUgdGltZSB0aGF0IGlzIHVzZWQgdG8gZGlzcGF0Y2ggdGhlIHNlYXJjaCBhcyB0aG91Z2ggdGhlIHNwZWNpZmllZCB0aW1lIHdlcmUgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgICAgICogICAgLSBgZGlzcGF0Y2guKmAgKF9zdHJpbmdfKTogT3ZlcndyaXRlcyB0aGUgdmFsdWUgb2YgdGhlIHNlYXJjaCBmaWVsZCBzcGVjaWZpZWQgaW4gKi5cbiAgICAgICAgICogICAgLSBgdHJpZ2dlcl9hY3Rpb25zYCAoX2Jvb2xlYW5fKTogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdHJpZ2dlciBhbGVydCBhY3Rpb25zLlxuICAgICAgICAgKiAgICAtIGBmb3JjZV9kaXNwYXRjaGAgKF9ib29sZWFuXyk6IEluZGljYXRlcyB3aGV0aGVyIHRvIHN0YXJ0IGEgbmV3IHNlYXJjaCBpZiBhbm90aGVyIGluc3RhbmNlIG9mIHRoaXMgc2VhcmNoIGlzIGFscmVhZHkgcnVubmluZy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNhdmVkIHNlYXJjaCBpcyBkaXNwYXRjaGVkOiBgKGVyciwgam9iLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2Rpc3BhdGNoXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImRpc3BhdGNoXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIHNpZCA9IHJlc3BvbnNlLmRhdGEuc2lkO1xuICAgICAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhhdC5zZXJ2aWNlLCBzaWQsIHRoYXQubmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBqb2IsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqIFxuICAgICAgICAgKiBHZXRzIHRoZSBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBgIGZvciBmaXJlZEFsZXJ0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFsZXJ0cyA9IHNlcnZpY2UuZmlyZWRBbGVydEdyb3VwcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cH0gQW4gQWxlcnRHcm91cCBvYmplY3Qgd2l0aCB0aGVcbiAgICAgICAgICogc2FtZSBuYW1lIGFzIHRoaXMgU2F2ZWRTZWFyY2ggb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGZpcmVkQWxlcnRHcm91cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRmlyZWRBbGVydEdyb3VwKHRoaXMuc2VydmljZSwgdGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBqb2IgaGlzdG9yeSBmb3IgYSBzYXZlZCBzZWFyY2gsIHdoaWNoIGlzIGEgbGlzdCBvZiBcbiAgICAgICAgICogYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guaGlzdG9yeSh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCBqb2JzLCBzZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGpvYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSm9iXCIsIGksIFwiOlwiLCBqb2JzW2ldLnNpZCk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgcmV0cmlldmluZyBoaXN0b3J5LiBGb3IgYSBmdWxsIGxpc3QsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rLzguMC4yL1JFU1RSRUYvUkVTVHByb2xvZyNQYWdpbmF0aW9uX2FuZF9maWx0ZXJpbmdfcGFyYW1ldGVyc1wiIHRhcmdldD1cIl9ibGFua1wiPlBhZ2luYXRpb24gYW5kIEZpbHRlcmluZyBvcHRpb25zPC9hPiBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGhpc3RvcnkgaXMgcmV0cmlldmVkOiBgKGVyciwgam9iLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2hpc3RvcnlcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBoaXN0b3J5OiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcImhpc3RvcnlcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgam9icyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgam9iRGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhqb2JEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGF0LnNlcnZpY2UsIGpvYkRhdGEubmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGpvYi5fbG9hZChqb2JEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgam9icy5wdXNoKGpvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGpvYnMsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBzdXBwcmVzc2lvbiBzdGF0ZSBvZiBhIHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5oaXN0b3J5KGZ1bmN0aW9uKGVyciwgc3VwcHJlc3Npb25TdGF0ZSwgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU1RBVEU6IFwiLCBzdXBwcmVzc2lvblN0YXRlKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHN1cHByZXNzaW9uIHN0YXRlIGlzIHJldHJpZXZlZDogYChlcnIsIHN1cHByZXNzaW9uU3RhdGUsIHNhdmVkU2VhcmNoKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlcy97bmFtZX0vc3VwcHJlc3NcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBzdXBwcmVzc0luZm86IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInN1cHByZXNzXCIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgc2F2ZWQgc2VhcmNoIG9uIHRoZSBzZXJ2ZXIuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhlIHNlYXJjaCBxdWVyeSBpcyByZXF1aXJlZCwgZXZlbiB3aGVuIGl0IGlzbid0IGJlaW5nIG1vZGlmaWVkLlxuICAgICAgICAgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBpdCwgdGhpcyBtZXRob2Qgd2lsbCBmZXRjaCB0aGUgc2VhcmNoIHN0cmluZyBmcm9tXG4gICAgICAgICAqIHRoZSBzZXJ2ZXIgb3IgZnJvbSB0aGUgbG9jYWwgY2FjaGUuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgdG8gdXBkYXRlIHRoZSBzYXZlZCBzZWFyY2ggd2l0aC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NhdmVkc2VhcmNocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2F2ZWQgc2VhcmNoIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHVwZGF0ZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3N1cGVyO1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLmZldGNoKGZ1bmN0aW9uKGVyciwgc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gc2VhcmNoLnByb3BlcnRpZXMoKS5zZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuY2FsbChzZWFyY2gsIHBhcmFtcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHNhdmVkIHNlYXJjaGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBzYXZlZCBcbiAgICAgKiBzZWFyY2hlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBzYXZlZCBzZWFyY2guXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LlNhdmVkU2VhcmNoZXMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5zYXZlZFNlYXJjaGVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHNhdmVkIHNlYXJjaC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NhdmVkc2VhcmNocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2F2ZWQgc2VhcmNoIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNofSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU2F2ZWRTZWFyY2godGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzYC4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgc3RvcmFnZSBwYXNzd29yZCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TdG9yYWdlUGFzc3dvcmQgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnN0b3JhZ2VQYXNzd29yZHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbiAoc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHN0b3JhZ2UgcGFzc3dvcmRzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBzdG9yYWdlIFxuICAgICAqIHBhc3N3b3JkcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBzdG9yYWdlIHBhc3N3b3JkLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuU3RvcmFnZVBhc3N3b3JkcyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBcbiAgICAgICAgICogZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zXG4gICAgICAgICAqIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc3RvcmFnZVBhc3N3b3JkcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBzdG9yYWdlIHBhc3N3b3JkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgc3RvcmFnZSBwYXNzd29yZC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycyxcbiAgICAgICAgICogc2VlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RhY2Nlc3MjUE9TVF9zdG9yYWdlLjJGcGFzc3dvcmRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAqIFBPU1Qgc3RvcmFnZS9wYXNzd29yZHM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNofSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlN0b3JhZ2VQYXNzd29yZCh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNgLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBmaXJlZCBhbGVydC4gXG4gICAgICogWW91IGNhbiByZXRyaWV2ZSBzZXZlcmFsIG9mIHRoZSBmaXJlZCBhbGVydCdzIHByb3BlcnRpZXMgYnlcbiAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBuYW1lLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHMve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5GaXJlZEFsZXJ0ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5maXJlZEFsZXJ0cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIGFjdGlvbnMgKHN1Y2ggYXMgbm90aWZ5aW5nIGJ5IGVtYWlsLCBydW5uaW5nIGEgXG4gICAgICAgICAqIHNjcmlwdCwgYWRkaW5nIHRvIFJTUywgdHJhY2tpbmcgaW4gQWxlcnQgTWFuYWdlciwgYW5kIGVuYWJsaW5nIFxuICAgICAgICAgKiBzdW1tYXJ5IGluZGV4aW5nKS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBhY3Rpb25zLCBhbiBlbXB0eSB7QXJyYXl9IGlmIG5vIGFjdGlvbnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIGFjdGlvbnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmFjdGlvbnMgfHwgW107XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHR5cGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGFsZXJ0J3MgdHlwZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIGFsZXJ0VHlwZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuYWxlcnRfdHlwZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzdWx0IGlzIGEgc2V0IG9mIGV2ZW50cyAoZGlnZXN0KSBvciBhIHNpbmdsZVxuICAgICAgICAgKiBldmVudCAocGVyIHJlc3VsdCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIGEgZGlnZXN0LCBmYWxzZSBpZiBwZXIgcmVzdWx0XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBpc0RpZ2VzdE1vZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gQ29udmVydCB0aGlzIHByb3BlcnR5IHRvIGEgQm9vbGVhblxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5wcm9wZXJ0aWVzKCkuZGlnZXN0X21vZGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHJlbmRlcmVkIGV4cGlyYXRpb24gdGltZSBmb3IgdGhpcyBhbGVydC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIGluIFNwbHVuayA0LjMgYW5kIGxhdGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBleHBpcmF0aW9uVGltZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuZXhwaXJhdGlvbl90aW1lX3JlbmRlcmVkIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHNhdmVkIHNlYXJjaCBmb3IgdGhpcyBhbGVydC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgc2F2ZWQgc2VhcmNoIG5hbWUsIG9yIHtudWxsfSBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgc2F2ZWRTZWFyY2hOYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS5zYXZlZHNlYXJjaF9uYW1lIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHNldmVyaXR5IG9uIGEgc2NhbGUgb2YgMSB0byAxMCwgd2l0aCAxIGJlaW5nIHRoZVxuICAgICAgICAgKiBoaWdoZXN0IHNldmVyaXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoaXMgYWxlcnQncyBzZXZlcml0eSwgLTEgaWYgbm90IHNwZWNpZmllZFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgc2V2ZXJpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllcygpLnNldmVyaXR5LCAxMCkgfHwgLTE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHNlYXJjaCBJRCAoU0lEKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGlzIGFsZXJ0J3MgU0lELCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNpZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuc2lkIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHRpbWUgdGhpcyBhbGVydCB3YXMgdHJpZ2dlcmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoaXMgYWxlcnQncyB0cmlnZ2VyIHRpbWUsIG9yIHtudWxsfSBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlclRpbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJfdGltZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyByZW5kZXJlZCB0cmlnZ2VyIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGlzIGFsZXJ0J3MgcmVuZGVyZWQgdHJpZ2dlciB0aW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJUaW1lUmVuZGVyZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJfdGltZV9yZW5kZXJlZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiB0cmlnZ2VyZWQgYWxlcnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiB0cmlnZ2VyZWQgYWxlcnRzLCBvciAtMSBpZiBub3Qgc3BlY2lmaWVkLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcmVkQWxlcnRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0cywgMTApIHx8IC0xO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIGFsZXJ0IGdyb3VwLCB3aGljaCB5b3UgY2FuIHRoZW4gdmlldyBhbmRcbiAgICAgKiByZW1vdmUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgYWxlcnRzL2ZpcmVkX2FsZXJ0cy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydEdyb3VwID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmZpcmVkQWxlcnRzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgYHRyaWdnZXJlZF9hbGVydF9jb3VudGAgcHJvcGVydHksIHRoZSBjb3VudFxuICAgICAgICAgKiBvZiB0cmlnZ2VyZWQgYWxlcnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjb3VudCBvZiB0cmlnZ2VyZWQgYWxlcnRzXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyZWRfYWxlcnRfY291bnQsIDEwKSB8fCAwO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGZpcmVkIGluc3RhbmNlcyBvZiB0aGlzIGFsZXJ0LCB3aGljaCBpc1xuICAgICAgICAgKiBhIGxpc3Qgb2YgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAgaW5zdGFuY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhbGVydEdyb3VwID0gc2VydmljZS5maXJlZEFsZXJ0R3JvdXBzKCkuaXRlbShcIk15QWxlcnRcIik7XG4gICAgICAgICAqICAgICAgYWxlcnRHcm91cC5saXN0KGZ1bmN0aW9uKGVyciwgZmlyZWRBbGVydHMsIGFsZXJ0KSB7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmaXJlZEFsZXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGaXJlZCBhbGVydFwiLCBpLCBcIjpcIiwgZmlyZWRBbGVydHNbaV0uc2lkKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZmlyZWQgYWxlcnRzIGFyZSByZXRyaWV2ZWQ6IGAoZXJyLCBmaXJlZEFsZXJ0cywgYWxlcnRHcm91cClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0OiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcIlwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0cyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcmVkQWxlcnREYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeVtpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKGZpcmVkQWxlcnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcmVkQWxlcnQgPSBuZXcgcm9vdC5GaXJlZEFsZXJ0KHRoYXQuc2VydmljZSwgZmlyZWRBbGVydERhdGEubmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgZmlyZWRBbGVydC5fbG9hZChmaXJlZEFsZXJ0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVkQWxlcnRzLnB1c2goZmlyZWRBbGVydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpcmVkQWxlcnRzLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgYWxlcnQgZ3JvdXAuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMubGlzdCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saXN0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZmlyZWQgYWxlcnRzIGZvciBhIHNhdmVkIHNlYXJjaC4gWW91IGNhblxuICAgICAqIGNyZWF0ZSBhbmQgbGlzdCBzYXZlZCBzZWFyY2hlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvclxuICAgICAqIGdldCBhIHNwZWNpZmljIGFsZXJ0IGdyb3VwLiBcbiAgICAgKlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovXG4gICAgcm9vdC5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuZmlyZWRBbGVydHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBhbGVydCBncm91cC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRmlyZWRBbGVydEdyb3VwKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3VwcHJlc3MgcmVtb3ZpbmcgYWxlcnRzIHZpYSB0aGUgZmlyZWQgYWxlcnRzIGVuZHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHJlbW92ZSBhbiBhbGVydCwgcmVtb3ZlIHRoZSBzYXZlZCBzZWFyY2ggd2l0aCB0aGUgc2FtZSBuYW1lLlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZW1vdmUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayBhcHAgdGhhdCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuQXBwbGljYXRpb24gPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIHVwZGF0ZSB0byBnZXQgdGhlIHVwZGF0ZWQgXG4gICAgICAgICAqIGl0ZW0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPblVwZGF0ZTogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmFwcHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBTcGx1bmsgYXBwLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNldHVwSW5mbyAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0dXBJbmZvKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5mbyA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGVJbmZvKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHNldHVwIGluZm9ybWF0aW9uIGZvciBhIFNwbHVuayBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcCA9IHNlcnZpY2UuYXBwcygpLml0ZW0oXCJhcHBcIik7XG4gICAgICAgICAqICAgICAgYXBwLnNldHVwKGZ1bmN0aW9uKGVyciwgaW5mbywgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU0VUVVAgSU5GTzogXCIsIGluZm8pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzZXR1cCBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBpbmZvLCBhcHApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9L3NldHVwXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgc2V0dXBJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzZXR1cFwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyBhbnkgaW5mb3JtYXRpb24gZm9yIGFuIHVwZGF0ZSB0byBhIGxvY2FsbHktaW5zdGFsbGVkIFNwbHVuayBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcCA9IHNlcnZpY2UuYXBwcygpLml0ZW0oXCJNeUFwcFwiKTtcbiAgICAgICAgICogICAgICBhcHAudXBkYXRlSW5mbyhmdW5jdGlvbihlcnIsIGluZm8sIGFwcCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlVQREFURSBJTkZPOiBcIiwgaW5mbyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHVwZGF0ZSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBpbmZvLCBhcHApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9L3VwZGF0ZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZUluZm86IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInVwZGF0ZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgU3BsdW5rIGFwcHMuIFlvdSBjYW4gY3JlYXRlIGFuZCBsaXN0IGFwcGxpY2F0aW9ucyBcbiAgICAgKiB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBhcHAuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgYXBwcy9sb2NhbFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5BcHBsaWNhdGlvbnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmFwcHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGFwcC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGFwcC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVGFwcHMjUE9TVF9hcHBzLjJGbG9jYWxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5QT1NUIGFwcHMvbG9jYWw8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkFwcGxpY2F0aW9uKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwge30pO1xuICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNlcnZlci9pbmZvXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TZXJ2ZXJJbmZvID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5pbmZvO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNlcnZlckluZm9cbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBcInNlcnZlci1pbmZvXCI7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayB1c2VyLCB3aGljaCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGF1dGhlbnRpY2F0aW9uL3VzZXJzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuVXNlciA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuVXNlclxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudXNlcnMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Vc2VyYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIFNwbHVuayB1c2VybmFtZS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Vc2VyfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Vc2VyYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHVzZXJzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCB1c2VycyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyB1c2VyLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGF1dGhlbnRpY2F0aW9uL3VzZXJzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuVXNlcnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uRW50aXR5Q3JlYXRpb246IHRydWUsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy51c2VycztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgbmV3IHVzZXIuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKOCN1c2VyYXV0aHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlVzZXIgYXV0aGVudGljYXRpb24gcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuVXNlcih0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVXNlcnNgLiBcbiAgICAgICAgICogXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyB1c2VyLiBcbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgZW5kcG9pbnQgcmVxdWlyZXMgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjgjdXNlcmF1dGhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Vc2VyIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgbmV3IGVudGl0eTogYChlcnIsIGNyZWF0ZWRFbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuZHBvaW50IHJlcXVpcmVzIHVzIHRvIHVzZSB0aGUgcGFzc2VkLWluIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0ge25hbWU6IHBhcmFtcy5uYW1lfTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRpdHkgPSB0aGF0Lmluc3RhbnRpYXRlRW50aXR5KHByb3BzKTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBlbnRpdHkuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgU3BsdW5rIHZpZXcsIHdoaWNoIHlvdSBjYW4gdmlldywgbW9kaWZ5LCBhbmRcbiAgICAgKiByZW1vdmUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YS91aS92aWV3cy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlZpZXcgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnZpZXdzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2aWV3LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHZpZXdzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCB2aWV3cyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyB2aWV3LlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3NcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5WaWV3cyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy52aWV3cztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSB2aWV3LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgdmlldy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI1BPU1Rfc2NoZWR1bGVkLjJGdmlld3MuMkYuN0JuYW1lLjdEXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UE9TVCBzY2hlZHVsZWQvdmlld3Mve25hbWV9PC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuVmlldyh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld3N9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGluZGV4LCB3aGljaCB5b3UgY2FuIHVwZGF0ZSBhbmQgc3VibWl0IGV2ZW50cyB0by5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXMvbmFtZVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkluZGV4ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuaW5kZXhlcyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRFdmVudCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdWJtaXRFdmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU3VibWl0cyBhbiBldmVudCB0byB0aGlzIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBpbmRleCA9IHNlcnZpY2UuaW5kZXhlcygpLml0ZW0oXCJfaW50ZXJuYWxcIik7XG4gICAgICAgICAqICAgICAgaW5kZXguc3VibWl0RXZlbnQoXCJBIG5ldyBldmVudFwiLCB7c291cmNldHlwZTogXCJteXNvdXJjZXR5cGVcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0LCBpbmRleCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlN1Ym1pdHRlZCBldmVudDogXCIsIHJlc3VsdCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgdGV4dCBmb3IgdGhpcyBldmVudC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcGFyYW1ldGVycyBmb3IgaW5kZXhpbmc6IFxuICAgICAgICAgKiAgICAtIGBob3N0YCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIGhvc3QgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC4gXG4gICAgICAgICAqICAgIC0gYGhvc3RfcmVnZXhgIChfc3RyaW5nXyk6IEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZXh0cmFjdCB0aGUgaG9zdCB2YWx1ZSBmcm9tIGVhY2ggZXZlbnQuIFxuICAgICAgICAgKiAgICAtIGBzb3VyY2VgIChfc3RyaW5nXyk6IFRoZSBzb3VyY2UgdmFsdWUgdG8gZmlsbCBpbiB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgaW5wdXQncyBldmVudHMuXG4gICAgICAgICAqICAgIC0gYHNvdXJjZXR5cGVgIChfc3RyaW5nXyk6IFRoZSBzb3VyY2V0eXBlIHRvIGFwcGx5IHRvIGV2ZW50cyBmcm9tIHRoaXMgaW5wdXQuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBzdWJtaXR0ZWQ6IGAoZXJyLCByZXN1bHQsIGluZGV4KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCByZWNlaXZlcnMvc2ltcGxlP2luZGV4PXtuYW1lfVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHN1Ym1pdEV2ZW50OiBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgdGhlIGluZGV4IG5hbWVcbiAgICAgICAgICAgIHBhcmFtc1tcImluZGV4XCJdID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmxvZyhldmVudCwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0LCB0aGF0KTsgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2UudmVyc2lvbkNvbXBhcmUoXCI1LjBcIikgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5kZXhlcyBjYW5ub3QgYmUgcmVtb3ZlZCBpbiBTcGx1bmsgNC54XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgICAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBpbmRleGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBpbmRleGVzIHVzaW5nIFxuICAgICAqIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvaW5kZXhlc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuSW5kZXhlcyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmluZGV4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgaW5kZXguIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKMyNpbmRleHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPkluZGV4IHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkluZGV4fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5JbmRleGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSW5kZXgodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5JbmRleGVzYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXhlc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBpbmRleCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBpbmRleGVzID0gc2VydmljZS5pbmRleGVzKCk7XG4gICAgICAgICAqICAgICAgaW5kZXhlcy5jcmVhdGUoXCJOZXdJbmRleFwiLCB7YXNzdXJlVVRGODogdHJ1ZX0sIGZ1bmN0aW9uKGVyciwgbmV3SW5kZXgpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBBIG5hbWUgZm9yIHRoaXMgaW5kZXguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKMyNpbmRleHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPkluZGV4IHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgbmV3IGluZGV4OiBgKGVyciwgY3JlYXRlZEluZGV4KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24obmFtZSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KG5hbWUpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBuYW1lO1xuICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbXMubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zW1wibmFtZVwiXSA9IG5hbWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzdGFuemEsIHdoaWNoIHlvdSBjYW4gdXBkYXRlIGFuZCByZW1vdmUsIGZyb20gYSBcbiAgICAgKiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgY29uZmlncy9jb25mLXtmaWxlfS97bmFtZX1gXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5Db25maWd1cmF0aW9uU3RhbnphID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lID09PSBcImRlZmF1bHRcIiA/IFwiX25ld1wiIDogdGhpcy5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmNvbmZpZ3VyYXRpb25zICsgXCIvY29uZi1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmZpbGUpICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbmV3IHN0YW56YS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgZmlsZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2Ygc3RhbnphcyBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBmaWxlLiBZb3UgY2FuXG4gICAgICogY3JlYXRlIGFuZCBsaXN0IHN0YW56YXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgXG4gICAgICogc3RhbnphLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5Db25maWd1cmF0aW9uRmlsZSA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoeyBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuY29uZmlndXJhdGlvbnMgKyBcIi9jb25mLVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBzdGFuemEgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIFlvdSBjYW5ub3QgZGlyZWN0bHkgdXBkYXRlIHRoZSBgQ29uZmlndXJhdGlvblN0YW56YWAgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHZpZXdpbmcgYGNvbmZpZ3MvY29uZi17ZmlsZX0vX25ld2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0RGVmYXVsdFN0YW56YTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvblN0YW56YSh0aGlzLnNlcnZpY2UsIHRoaXMubmFtZSwgXCJkZWZhdWx0XCIsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgc3RhbnphIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIGtleS12YWx1ZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHN0YW56YS4gXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkNvbmZpZ3VyYXRpb25TdGFuemEodGhpcy5zZXJ2aWNlLCB0aGlzLm5hbWUsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGV9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc3RhbnphIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBmaWxlID0gc2VydmljZS5jb25maWd1cmF0aW9ucygpLml0ZW0oXCJwcm9wc1wiKTtcbiAgICAgICAgICogICAgICBmaWxlLmNyZWF0ZShcIm15X3N0YW56YVwiLCBmdW5jdGlvbihlcnIsIG5ld1N0YW56YSkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGFuemFOYW1lIEEgbmFtZSBmb3IgdGhpcyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgQSBkaWN0aW9uYXJ5IG9mIGtleS12YWx1ZSBwYWlycyB0byBwdXQgaW4gdGhpcyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIHN0YW56YTogYChlcnIsIGNyZWF0ZWRTdGFuemEpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX1cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHN0YW56YU5hbWUsIHZhbHVlcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChzdGFuemFOYW1lKSAmJiB1dGlscy5pc0Z1bmN0aW9uKHZhbHVlcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0gc3RhbnphTmFtZTtcbiAgICAgICAgICAgICAgICBzdGFuemFOYW1lID0gdmFsdWVzLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHZhbHVlcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlc1tcIm5hbWVcIl0gPSBzdGFuemFOYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIodmFsdWVzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBjb25maWd1cmF0aW9uIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBcbiAgICAgKiBjb25maWd1cmF0aW9uIGZpbGVzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIGZpbGUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgcHJvcGVydGllc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkNvbmZpZ3VyYXRpb25zID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMucHJvcGVydGllcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGV9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2Uub3duZXIgPT09IFwiLVwiIHx8IG5hbWVzcGFjZS5hcHAgPT09IFwiLVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbnMgcmVxdWlyZXMgYSBub24td2lsZGNhcmQgb3duZXIvYXBwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgY29uZmlndXJhdGlvbnMgPSBzZXJ2aWNlLmNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgICAqICAgICAgY29uZmlndXJhdGlvbnMuY3JlYXRlKFwibXlwcm9wc1wiLCBmdW5jdGlvbihlcnIsIG5ld0ZpbGUpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWUgQSBuYW1lIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBjb25maWd1cmF0aW9uIGZpbGU6IGAoZXJyLCBjcmVhdGVkRmlsZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcHJvcGVydGllc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24oZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVtcIl9fY29uZlwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiXCIsIHtfX2NvbmY6IGZpbGVuYW1lfSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRpdHkgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGF0LnNlcnZpY2UsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBhYm9ydGVkLCBzbyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgZG9lc0ZpbGVFeGlzdDogYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgLy8gMS4gRmV0Y2ggZmlsZXMgbGlzdFxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0X3YyKFwiXCIsICB7X19jb25mOiBmaWxlbmFtZX0pO1xuXG4gICAgICAgICAgICAgICAgLy8gMi4gRmlsdGVyIHRoZSBmaWxlc1xuICAgICAgICAgICAgICAgIHZhciBmaWxlcyA9IHJlc3BvbnNlPy5ib2R5Py5lbnRyeT8uZmlsdGVyKGYgPT4gZi5uYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzXG4gICAgICAgICAgICAgICAgaWYoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY29kZTpcIkZJTEVfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBGaWxlIHdpdGggdGhlIG5hbWUgJyR7ZmlsZW5hbWV9JyBkb2VzIG5vdCBleGlzdC5gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyAzLiBDcmVhdGUgYSBsb2NhbCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmF0aW9uRmlsZSA9IG5ldyByb290LkNvbmZpZ3VyYXRpb25GaWxlKHRoYXQuc2VydmljZSwgZmlsZW5hbWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gNC4gTG9hZCB0aGUgZmlsZSBjb250ZW50XG4gICAgICAgICAgICAgICAgdmFyIGZldGNoZWRGaWxlID0gYXdhaXQgY29uZmlndXJhdGlvbkZpbGUuZmV0Y2hfdjIoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7ZmlsZTogZmV0Y2hlZEZpbGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckNvZGU6XCJTWVNURU1fRVJST1JcIiwgZXJyb3JNZXNzYWdlOiBlcnJvcn07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZG9lc1N0YW56YUV4aXN0OiBhc3luYyBmdW5jdGlvbihmaWxlLCBzdGFuemEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gMS4gY2hlY2sgaWYgdGhlIHN0YW56YSBleGlzdHNcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hlZFN0YW56YSA9IGZpbGUuaXRlbShzdGFuemEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKCFmZXRjaGVkU3RhbnphKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNvZGU6XCJTVEFOWkFfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBTdGFuemEgd2l0aCB0aGUgbmFtZSAnJHtzdGFuemF9JyBkb2VzIG5vdCBleGlzdC5gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7c3RhbnphOiBmZXRjaGVkU3RhbnphfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yQ29kZTpcIlNZU1RFTV9FUlJPUlwiLCBlcnJvck1lc3NhZ2U6IGVycm9yfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVfdjI6IGFzeW5jIGZ1bmN0aW9uIChjb25maWdzLCBzdmMsIGZpbGVuYW1lLCBzdGFuemEsIGtleVZhbHVlTWFwLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyAxLiBDaGVjayBpZiB0aGUgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHZhciBkb2VzRmlsZUV4aXN0UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvZXNGaWxlRXhpc3QoZmlsZW5hbWUpO1xuICAgICAgICAgICAgdmFyIGNvbmZpZ0ZpbGUgPSBkb2VzRmlsZUV4aXN0UmVzcG9uc2UuZmlsZTtcblxuICAgICAgICAgICAgLy8gMi4gSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGEgbmV3IGZpbGVcbiAgICAgICAgICAgIGlmKCFjb25maWdGaWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZG9lc0ZpbGVFeGlzdFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4uLlwiKTtcblxuICAgICAgICAgICAgICAgIHRoYXQuY3JlYXRlKCB7IF9fY29uZjogZmlsZW5hbWUgfSwgXG4gICAgICAgICAgICAgICAgICAgIChlcnIsIG5ld0ZpbGUpID0+IGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIEZpbGUgY3JlYXRlZDogJHtmaWxlbmFtZX1gKSApO1xuXG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZSA9IG5ldyByb290LkNvbmZpZ3VyYXRpb25GaWxlKCB0aGF0LnNlcnZpY2UsIGZpbGVuYW1lICk7XG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZSA9IGF3YWl0IGNvbmZpZ0ZpbGUuZmV0Y2hfdjIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIHN0YW56YSBleGlzdHNcbiAgICAgICAgICAgIHZhciBkb2VzU3RhbnphRXhpc3RSZXNwb25zZSA9IGF3YWl0IHRoaXMuZG9lc1N0YW56YUV4aXN0KGNvbmZpZ0ZpbGUsIHN0YW56YSk7XG4gICAgICAgICAgICB2YXIgY29uZmlnU3RhbnphID0gZG9lc1N0YW56YUV4aXN0UmVzcG9uc2Uuc3RhbnphO1xuXG4gICAgICAgICAgICAvLyAzLiBJZiB0aGUgc3RhbnphIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBzdGFuemEgd2l0aCBnaXZlbiBrZXlWYWx1ZU1hcFxuICAgICAgICAgICAgaWYoIWNvbmZpZ1N0YW56YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRvZXNTdGFuemFFeGlzdFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gc3RhbnphLi4uXCIpO1xuXG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZS5jcmVhdGUoc3RhbnphLCBrZXlWYWx1ZU1hcCwgZnVuY3Rpb24gKGVyciwgbmV3U3RhbnphKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIFN0YW56YSBjcmVhdGVkOiAke3N0YW56YX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDQuIElmIHRoZSBzdGFuemEgZXhpc3RzLCB1cGRhdGUgaXQgd2l0aCB0aGUga2V5VmFsdWVNYXBcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZpZ1N0YW56YS51cGRhdGUoa2V5VmFsdWVNYXAsIChlcnIsIHVwZGF0ZWRTdGFuemEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvbmZpZ3VyYXRpb24gU3RhbnphIHVwZGF0ZWQ6ICR7c3RhbnphfWApO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHNlYXJjaCBqb2IuIFlvdSBjYW4gcGVyZm9ybSBkaWZmZXJlbnQgb3BlcmF0aW9uc1xuICAgICAqIG9uIHRoaXMgam9iLCBzdWNoIGFzIHJlYWRpbmcgaXRzIHN0YXR1cywgY2FuY2VsaW5nIGl0LCBhbmQgZ2V0dGluZyByZXN1bHRzLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkpvYiA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5qb2JzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSm9iYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNpZCBUaGUgc2VhcmNoIElEIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHNpZCwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBzaWQ7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHRoaXMuc2lkID0gc2lkO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuY2FuY2VsICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY2FuY2VsKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVByZXZpZXcgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGlzYWJsZVByZXZpZXcpO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVQcmV2aWV3ICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5lbmFibGVQcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZXZlbnRzKTtcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmluYWxpemUpO1xuICAgICAgICAgICAgdGhpcy5wYXVzZSAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wYXVzZSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnByZXZpZXcpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZXN1bHRzKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNobG9nICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2VhcmNobG9nKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJpb3JpdHkgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0UHJpb3JpdHkpO1xuICAgICAgICAgICAgdGhpcy5zZXRUVEwgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zZXRUVEwpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5ICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdW1tYXJ5KTtcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudGltZWxpbmUpO1xuICAgICAgICAgICAgdGhpcy50b3VjaCAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy50b3VjaCk7XG4gICAgICAgICAgICB0aGlzLnVucGF1c2UgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVucGF1c2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW5jZWxzIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5jYW5jZWwoZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0FOQ0VMTEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgc2VhcmNoIGlzIGRvbmU6IGAoZXJyKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGNhbmNlbDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiY2FuY2VsXCJ9LCBjYWxsYmFjayk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGVzIHByZXZpZXcgZ2VuZXJhdGlvbiBmb3IgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmRpc2FibGVQcmV2aWV3KGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFVklFVyBESVNBQkxFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhpcyBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGRpc2FibGVQcmV2aWV3OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImRpc2FibGVwcmV2aWV3XCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgcHJldmlldyBnZW5lcmF0aW9uIGZvciBhIHNlYXJjaCBqb2IuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmRpc2FibGVQcmV2aWV3KGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFVklFVyBFTkFCTEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGlzIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlUHJldmlldzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJlbmFibGVwcmV2aWV3XCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGV2ZW50cyBvZiBhIHNlYXJjaCBqb2Igd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmV2ZW50cyh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCBldmVudHMsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkczogXCIsIGV2ZW50cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIGV2ZW50cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGZXZlbnRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2V2ZW50czwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudHMgYXJlIHJldHJpZXZlZDogYChlcnIsIGV2ZW50cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9ldmVudHNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZXZlbnRzOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcImV2ZW50c1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluYWxpemVzIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5maW5hbGl6ZShmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBGSU5BTElaRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiZmluYWxpemVcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhpcyBzZWFyY2ggam9iJ3MgZXZlbnRzIG9yIHJlc3VsdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIE9uZSBvZiB7XCJldmVudHNcIiwgXCJwcmV2aWV3XCIsIFwicmVzdWx0c1wifS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczpcbiAgICAgICAgICogICAgLSBgcGFnZXNpemVgIChfaW50ZWdlcl8pOiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiBvbiBlYWNoIHJlcXVlc3QuIERlZmF1bHRzIHRvIGFzIG1hbnkgYXMgcG9zc2libGUuXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmF0b3Igb2JqZWN0IHdpdGggYSBgbmV4dChjYWxsYmFjaylgIG1ldGhvZCwgd2hlcmUgYGNhbGxiYWNrYCBpcyBvZiB0aGUgZm9ybSBgKGVyciwgcmVzdWx0cywgaGFzTW9yZVJlc3VsdHMpYC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGl0ZXJhdG9yOiBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5QYWdpbmF0ZWRFbmRwb2ludEl0ZXJhdG9yKHRoaXNbdHlwZV0sIHBhcmFtcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhdXNlcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IucGF1c2UoZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgUEFVU0VEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHBhdXNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInBhdXNlXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLypcbiAgICAgICAgICogR2V0cyB0aGUgcHJldmlldyByZXN1bHRzIGZvciBhIHNlYXJjaCBqb2Igd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnByZXZpZXcoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGRzOiBcIiwgcmVzdWx0cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHByZXZpZXcgcmVzdWx0cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGcmVzdWx0c19wcmV2aWV3XCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHNfcHJldmlldzwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwcmV2aWV3IHJlc3VsdHMgYXJlIHJldHJpZXZlZCA6IGAoZXJyLCByZXN1bHRzLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHNfcHJldmlld1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwcmV2aWV3OiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInJlc3VsdHNfcHJldmlld1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgcmVzdWx0cyBmb3IgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayBjYW4gZ2V0IGB1bmRlZmluZWRgIGZvciBpdHMgYHJlc3VsdHNgIHBhcmFtZXRlciBpZiB0aGVcbiAgICAgICAgICogam9iIGlzIG5vdCB5ZXQgZG9uZS4gVG8gYXZvaWQgdGhpcywgdXNlIHRoZSBgSm9iLnRyYWNrKClgIG1ldGhvZCB0b1xuICAgICAgICAgKiB3YWl0IHVudGlsIHRoZSBqb2IgaXMgY29tcGxldGUgcHJpb3IgdG8gZmV0Y2hpbmcgdGhlIHJlc3VsdHMgd2l0aFxuICAgICAgICAgKiB0aGlzIG1ldGhvZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IucmVzdWx0cyh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZHM6IFwiLCByZXN1bHRzLnJlc3VsdHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHNlYXJjaCByZXN1bHRzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZyZXN1bHRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHM8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVzdWx0cyBhcmUgcmV0cmlldmVkOiBgKGVyciwgcmVzdWx0cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHJlc3VsdHM6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5vdXRwdXRfbW9kZSA9IHBhcmFtcy5vdXRwdXRfbW9kZSB8fCBcImpzb25fcm93c1wiO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJyZXN1bHRzXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWFyY2ggbG9nIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc2VhcmNobG9nKGZ1bmN0aW9uKGVyciwgc2VhcmNobG9nLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coc2VhcmNobG9nKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBsb2cgYW5kIGpvYjogYChlcnIsIHNlYXJjaGxvZywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9zZWFyY2gubG9nXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNlYXJjaGxvZzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwic2VhcmNoLmxvZ1wiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBwcmlvcml0eSBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNldFByaW9yaXR5KDYsIGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFBSSU9SSVRZIFNFVFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBwcmlvcml0eSAoYW4gaW50ZWdlciBiZXR3ZWVuIDEtMTApLiBBIGhpZ2hlciB2YWx1ZSBtZWFucyBhIGhpZ2hlciBwcmlvcml0eS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0UHJpb3JpdHk6IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInNldHByaW9yaXR5XCIsIHByaW9yaXR5OiB2YWx1ZX0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGltZSB0byBsaXZlIChUVEwpIGZvciB0aGUgc2VhcmNoIGpvYiwgd2hpY2ggaXMgdGhlIHRpbWUgYmVmb3JlXG4gICAgICAgICAqIHRoZSBzZWFyY2ggam9iIGV4cGlyZXMgYWZ0ZXIgaXQgaGFzIGJlZW4gY29tcGxldGVkIGFuZCBpcyBzdGlsbCBhdmFpbGFibGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc2V0VFRMKDEwMDAsIGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFRUTCBTRVRcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgdGltZSB0byBsaXZlLCBpbiBzZWNvbmRzLiBcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0VFRMOiBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJzZXR0dGxcIiwgdHRsOiB2YWx1ZX0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgc3VtbWFyeSBmb3IgdGhpcyBzZWFyY2ggam9iIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc3VtbWFyeSh7dG9wX2NvdW50OiA1fSwgZnVuY3Rpb24oZXJyLCBzdW1tYXJ5LCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdW1tYXJ5OiBcIiwgc3VtbWFyeSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIHN1bW1hcnkuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnN1bW1hcnlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5HRVQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc3VtbWFyeTwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzdW1tYXJ5IGFuZCBzZWFyY2ggam9iOiBgKGVyciwgc3VtbWFyeSwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9zdW1tbWFyeVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBzdW1tYXJ5OiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInN1bW1hcnlcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHRpbWVsaW5lIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudGltZWxpbmUoe3RpbWVfZm9ybWF0OiBcIiVjXCJ9LCBmdW5jdGlvbihlcnIsIGpvYiwgdGltZWxpbmUpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJUaW1lbGluZTogXCIsIHRpbWVsaW5lKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgdGltZWxpbmUuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnRpbWVsaW5lXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3RpbWVsaW5lIDwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSB0aW1lbGluZSBhbmQgc2VhcmNoIGpvYjogYChlcnIsIHRpbWVsaW5lLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3RpbWVsaW5lXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRpbWVsaW5lOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInRpbWVsaW5lXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUb3VjaGVzIGEgc2VhcmNoIGpvYiwgd2hpY2ggbWVhbnMgZXh0ZW5kaW5nIHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgXG4gICAgICAgICAqIHRoZSBzZWFyY2ggdG8gbm93IHBsdXMgdGhlIHRpbWUgdG8gbGl2ZSAoVFRMKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi50b3VjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgVE9VQ0hFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgdG91Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwidG91Y2hcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydHMgcG9sbGluZyB0aGUgc3RhdHVzIG9mIHRoaXMgc2VhcmNoIGpvYiwgYW5kIGZpcmVzIGNhbGxiYWNrc1xuICAgICAgICAgKiB1cG9uIGVhY2ggc3RhdHVzIGNoYW5nZS5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzOlxuICAgICAgICAgKiAgICAtIGBwZXJpb2RgIChfaW50ZWdlcl8pOiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZWFjaCBwb2xsLiBEZWZhdWx0cyB0byA1MDAuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBjYWxsYmFja3MgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIGNhbGxiYWNrczpcbiAgICAgICAgICogICAgLSBgcmVhZHlgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCB3aGVuIHRoZSBqb2IncyBwcm9wZXJ0aWVzIGZpcnN0IGJlY29tZSBhdmFpbGFibGUuXG4gICAgICAgICAqICAgIC0gYHByb2dyZXNzYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgd2hlbmV2ZXIgbmV3IGpvYiBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgICAqICAgIC0gYGRvbmVgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCBpZiB0aGUgam9iIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuIE5vIGZ1cnRoZXIgcG9sbGluZyBpcyBkb25lLlxuICAgICAgICAgKiAgICAtIGBmYWlsZWRgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCBpZiB0aGUgam9iIGZhaWxzIGV4ZWN1dGluZyBvbiB0aGUgc2VydmVyLiBObyBmdXJ0aGVyIHBvbGxpbmcgaXMgZG9uZS5cbiAgICAgICAgICogICAgLSBgZXJyb3JgOiBBIGZ1bmN0aW9uIGAoZXJyKWAgaW52b2tlZCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9sbGluZy4gTm8gZnVydGhlciBwb2xsaW5nIGlzIGRvbmUuXG4gICAgICAgICAqIE9yLCBpZiBhIGZ1bmN0aW9uIGAoam9iKWAsIGVxdWl2YWxlbnQgdG8gcGFzc2luZyBpdCBhcyBhIGBkb25lYCBjYWxsYmFjay5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgdHJhY2s6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgdmFyIHBlcmlvZCA9IG9wdGlvbnMucGVyaW9kIHx8IDUwMDsgLy8gbXNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oY2FsbGJhY2tzKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogY2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG5vQ2FsbGJhY2tzQWZ0ZXJSZWFkeSA9IChcbiAgICAgICAgICAgICAgICAhY2FsbGJhY2tzLnByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5kb25lICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5mYWlsZWQgJiZcbiAgICAgICAgICAgICAgICAhY2FsbGJhY2tzLmVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFja3MucmVhZHkgPSBjYWxsYmFja3MucmVhZHkgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5wcm9ncmVzcyA9IGNhbGxiYWNrcy5wcm9ncmVzcyB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLmRvbmUgPSBjYWxsYmFja3MuZG9uZSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLmZhaWxlZCA9IGNhbGxiYWNrcy5mYWlsZWQgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5lcnJvciA9IGNhbGxiYWNrcy5lcnJvciB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb3IgdXNlIGJ5IHRlc3RzIG9ubHlcbiAgICAgICAgICAgIGNhbGxiYWNrcy5fcHJlcmVhZHkgPSBjYWxsYmFja3MuX3ByZXJlYWR5IHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MuX3N0b3BwZWRBZnRlclJlYWR5ID0gY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZW1pdHRlZFJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgZG9uZUxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIEFzeW5jLndoaWxzdChcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuICFkb25lTG9vcGluZzsgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihuZXh0SXRlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZmV0Y2goZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcGF0Y2hTdGF0ZSA9IGpvYi5wcm9wZXJ0aWVzKCkuZGlzcGF0Y2hTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RSZWFkeSA9IGRpc3BhdGNoU3RhdGUgPT09IFwiUVVFVUVEXCIgfHwgZGlzcGF0Y2hTdGF0ZSA9PT0gXCJQQVJTSU5HXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90UmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuX3ByZXJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVtaXR0ZWRSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucmVhZHkoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogRG9uJ3Qga2VlcCBwb2xsaW5nIHRoZSBqb2IgaWYgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBgcmVhZHlgIGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9DYWxsYmFja3NBZnRlclJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuX3N0b3BwZWRBZnRlclJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHJvZ3Jlc3Moam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBqb2IucHJvcGVydGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaFN0YXRlID09PSBcIkRPTkVcIiAmJiBwcm9wcy5pc0RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLmRvbmUoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpc3BhdGNoU3RhdGUgPT09IFwiRkFJTEVEXCIgJiYgcHJvcHMuaXNGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLmZhaWxlZChqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZUxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jLnNsZWVwKHBlcmlvZCwgbmV4dEl0ZXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmVzdW1lcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudW5wYXVzZShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgVU5QQVVTRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHVucGF1c2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwidW5wYXVzZVwifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzZWFyY2ggam9icy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc2VhcmNoIFxuICAgICAqIGpvYnMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc2VhcmNoIGpvYi5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuSm9icyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmpvYnM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgbmV3IGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSm9ifSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgc2lkID0gcHJvcHMuY29udGVudC5zaWQ7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkpvYih0aGlzLnNlcnZpY2UsIHNpZCwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSm9ic2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuY3JlYXRlICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2UuSm9icy5vbmVzaG90U2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2ggam9iLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGNyZWF0ZWQgam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24ocXVlcnksIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChxdWVyeSkgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcGFyYW1zLnNlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHF1ZXJ5OyBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKChwYXJhbXMuZXhlY19tb2RlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwib25lc2hvdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHVzZSBzcGx1bmtqcy5TZXJ2aWNlLkpvYnMub25lc2hvdFNlYXJjaCBmb3IgZXhlY19tb2RlPW9uZXNob3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFwiTXVzdCBwcm92aWRlIGEgcXVlcnkgdG8gY3JlYXRlIGEgc2VhcmNoIGpvYlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdChcIlwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgam9iID0gbmV3IHJvb3QuSm9iKHRoYXQuc2VydmljZSwgcmVzcG9uc2UuZGF0YS5zaWQsIHRoYXQubmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgam9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBzZWFyY2ggam9iIHdpdGggYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBgZXhlY19tb2RlYCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHNlYXJjaDpcbiAgICAgICAgICpcbiAgICAgICAgICogICAgLSBVc2UgYGV4ZWNfbW9kZT1ub3JtYWxgIHRvIHJldHVybiBhIHNlYXJjaCBqb2IgSUQgaW1tZWRpYXRlbHkgKGRlZmF1bHQpLlxuICAgICAgICAgKiAgICAgIFBvbGwgZm9yIGNvbXBsZXRpb24gdG8gZmluZCBvdXQgd2hlbiB5b3UgY2FuIHJldHJpZXZlIHNlYXJjaCByZXN1bHRzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogICAgLSBVc2UgYGV4ZWNfbW9kZT1ibG9ja2luZ2AgdG8gcmV0dXJuIHRoZSBzZWFyY2ggam9iIElEIHdoZW4gdGhlIHNlYXJjaCBoYXMgZmluaXNoZWQuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBUbyBydW4gYSBvbmVzaG90IHNlYXJjaCwgd2hpY2ggZG9lcyBub3QgY3JlYXRlIGEgam9iIGJ1dCByYXRoZXIgcmV0dXJucyB0aGUgc2VhcmNoIHJlc3VsdHMsIHVzZSBgU2VydmljZS5Kb2JzLm9uZXNob3RTZWFyY2hgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2JzID0gc2VydmljZS5qb2JzKCk7XG4gICAgICAgICAqICAgICAgam9icy5zZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCBuZXdKb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCI6IG5ld0pvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiAgICAgICAgKipOb3RlOioqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYGV4ZWNfbW9kZT1vbmVzaG90YCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIHdpdGggdGhlIHByb3BlcnRpZXMgZGljdGlvbmFyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBzZWFyY2ggam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIHNlYXJjaDogZnVuY3Rpb24ocXVlcnksIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShxdWVyeSwgcGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgb25lc2hvdCBzZWFyY2ggZnJvbSBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9icyA9IHNlcnZpY2Uuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMub25lc2hvdFNlYXJjaChcInNlYXJjaCBFUlJPUlwiLCB7aWQ6IFwibXlqb2JfMTIzXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSRVNVTFQgRklFTERTXCI6IHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuIFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoOlxuICAgICAgICAgKiAgICAtIGBvdXRwdXRfbW9kZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSByZXN1bHRzIChYTUwsIEpTT04sIG9yIENTVikuXG4gICAgICAgICAqICAgIC0gYGVhcmxpZXN0X3RpbWVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgZWFybGllc3QgdGltZSBpbiB0aGUgdGltZSByYW5nZSB0byBzZWFyY2guIFRoZSB0aW1lIHN0cmluZyBjYW4gYmUgYSBVVEMgdGltZSAod2l0aCBmcmFjdGlvbmFsIHNlY29uZHMpLCBhIHJlbGF0aXZlIHRpbWUgc3BlY2lmaWVyICh0byBub3cpLCBvciBhIGZvcm1hdHRlZCB0aW1lIHN0cmluZy5cbiAgICAgICAgICogICAgLSBgbGF0ZXN0X3RpbWVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgbGF0ZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYHJmYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgb25lIG9yIG1vcmUgZmllbGRzIHRvIGFkZCB0byB0aGUgc2VhcmNoLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgc2VhcmNoOiBgKGVyciwgcmVzdWx0cylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIG9uZXNob3RTZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QocXVlcnkpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHBhcmFtcy5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5zZWFyY2ggPSBxdWVyeTsgXG4gICAgICAgICAgICBwYXJhbXMuZXhlY19tb2RlID0gXCJvbmVzaG90XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFwiTXVzdCBwcm92aWRlIGEgcXVlcnkgdG8gY3JlYXRlIGEgc2VhcmNoIGpvYlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG91dHB1dE1vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLnF1YWxpZmllZFBhdGg7XG4gICAgICAgICAgICB2YXIgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgICAgICAgICB2YXIgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgdmFyIHBvc3QgPSBwYXJhbXM7XG4gICAgICAgICAgICB2YXIgZ2V0ID0ge291dHB1dF9tb2RlOiBvdXRwdXRNb2RlfTtcbiAgICAgICAgICAgIHZhciBib2R5ID0gbnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMuc2VydmljZS5yZXF1ZXN0KFxuICAgICAgICAgICAgICAgIHBhdGgsIFxuICAgICAgICAgICAgICAgIG1ldGhvZCwgXG4gICAgICAgICAgICAgICAgZ2V0LCBcbiAgICAgICAgICAgICAgICBwb3N0LCBcbiAgICAgICAgICAgICAgICBib2R5LCBcbiAgICAgICAgICAgICAgICBoZWFkZXJzLCBcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBmaWVsZCBvZiBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgZm9yIGBEYXRhTW9kZWxDYWxjdWxhdGlvbmBcbiAgICAgKiBhbmQgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBmaWVsZE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6ICBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgdHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBmaWVsZC5cbiAgICAgKiAgICAtIGBtdWx0aXZhbHVlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyBtdWx0aXZhbHVlZC5cbiAgICAgKiAgICAtIGByZXF1aXJlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cbiAgICAgKiAgICAtIGBoaWRkZW5gIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRhdGEgbW9kZWwgVUkuXG4gICAgICogICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgY2FuIGJlIGVkaXRlZC5cbiAgICAgKiAgICAtIGBjb21tZW50YCAoX3N0cmluZ18pOiBBIGNvbW1lbnQgZm9yIHRoaXMgZmllbGQsIG9yIGBudWxsYCBpZiB0aGVyZSBpc24ndCBvbmUuXG4gICAgICogICAgLSBgZmllbGRTZWFyY2hgIChfc3RyaW5nXyk6IEEgc2VhcmNoIHF1ZXJ5IGZyYWdtZW50IGZvciB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqICAgICAgICAgIG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKlxuICAgICAqIFBvc3NpYmxlIHR5cGVzIGZvciBhIGRhdGEgbW9kZWwgZmllbGQ6XG4gICAgICogICAgLSBgc3RyaW5nYFxuICAgICAqICAgIC0gYGJvb2xlYW5gXG4gICAgICogICAgLSBgbnVtYmVyYFxuICAgICAqICAgIC0gYHRpbWVzdGFtcGBcbiAgICAgKiAgICAtIGBvYmplY3RDb3VudGBcbiAgICAgKiAgICAtIGBjaGlsZENvdW50YFxuICAgICAqICAgIC0gYGlwdjRgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsRmllbGQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBfdHlwZXM6IFsgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJ0aW1lc3RhbXBcIiwgXCJvYmplY3RDb3VudFwiLCBcImNoaWxkQ291bnRcIiwgXCJpcHY0XCIsIFwiYm9vbGVhblwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBmaWVsZC5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgZmllbGROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGlzIGZpZWxkLlxuICAgICAgICAgKiAgICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZmllbGQsIHNlZSB2YWxpZCB0eXBlcyBpbiBjbGFzcyBkb2NzLlxuICAgICAgICAgKiAgICAgLSBgbXVsdGl2YWx1ZWAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyBtdWx0aXZhbHVlZC5cbiAgICAgICAgICogICAgIC0gYHJlcXVpcmVkYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIG9uIGV2ZW50cyBpbiB0aGUgb2JqZWN0XG4gICAgICAgICAqICAgICAtIGBoaWRkZW5gIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRhdGEgbW9kZWwgVUkuXG4gICAgICAgICAqICAgICAtIGBlZGl0YWJsZWAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBjYW4gYmUgZWRpdGVkLlxuICAgICAgICAgKiAgICAgLSBgY29tbWVudGAgKF9zdHJpbmdfKTogQSBjb21tZW50IGZvciB0aGlzIGZpZWxkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXNuJ3Qgb25lLlxuICAgICAgICAgKiAgICAgLSBgZmllbGRTZWFyY2hgIChfc3RyaW5nXyk6IEEgc2VhcmNoIHF1ZXJ5IGZyYWdtZW50IGZvciB0aGlzIGZpZWxkLlxuICAgICAgICAgKiAgICAgLSBgbGluZWFnZWAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgZmllbGRcbiAgICAgICAgICogICAgICAgICAgaXMgZGVmaW5lZCwgaXRlbXMgYXJlIGRlbGltaXRlZCBieSBhIGRvdC4gVGhpcyBpcyBjb252ZXJ0ZWQgaW50byBhbiBhcnJheSBvZlxuICAgICAgICAgKiAgICAgICAgICBzdHJpbmdzIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgID0gcHJvcHMuZmllbGROYW1lO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSAgICA9IHByb3BzLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdGhpcy50eXBlICAgICAgICAgICA9IHByb3BzLnR5cGU7XG4gICAgICAgICAgICB0aGlzLm11bHRpdmFsdWVkICAgID0gcHJvcHMubXVsdGl2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWQgICAgICAgPSBwcm9wcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuICAgICAgICAgPSBwcm9wcy5oaWRkZW47XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlICAgICAgID0gcHJvcHMuZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgICAgICAgID0gcHJvcHMuY29tbWVudCB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaCAgICA9IHByb3BzLmZpZWxkU2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlICAgICAgICA9IHByb3BzLm93bmVyLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIHRoaXMub3duZXIgICAgICAgICAgPSB0aGlzLmxpbmVhZ2VbdGhpcy5saW5lYWdlLmxlbmd0aCAtIDFdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBzdHJpbmc/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgc3RyaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIG51bWJlcj9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSBudW1iZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgdGltZXN0YW1wP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIHRpbWVzdGFtcC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc1RpbWVzdGFtcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0aW1lc3RhbXBcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBvYmplY3QgY291bnQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGNvdW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzT2JqZWN0Y291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0Q291bnRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBjaGlsZCBjb3VudD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSBjaGlsZCBjb3VudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0NoaWxkY291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiY2hpbGRDb3VudFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIGlwdjQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgaXB2NC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0lQdjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiaXB2NFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIGJvb2xlYW4/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgYm9vbGVhbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0Jvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29uc3RyYWludCBvbiBhIGBEYXRhTW9kZWxPYmplY3RgIG9yIGEgYERhdGFNb2RlbEZpZWxkYC5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYHF1ZXJ5YCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IGRlZmluaW5nIHRoaXMgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogVGhlIGxpbmVhZ2Ugb2YgdGhpcyBkYXRhIG1vZGVsIGNvbnN0cmFpbnQuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IG93bnNcbiAgICAgKiAgICAgICAgICB0aGlzIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENvbnN0cmFpbnRcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbENvbnN0cmFpbnQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgc2VhcmNoIHF1ZXJ5IHRoaXMgY29uc3RyYWludCBzcGVjaWZpZXMuXG4gICAgICAgICAqICAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHRoYXQgb3ducyB0aGlzXG4gICAgICAgICAqICAgICAgICAgIGNvbnN0cmFpbnQsIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG9cbiAgICAgICAgICogICAgICAgICAgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENvbnN0cmFpbnRcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5ICAgPSBwcm9wcy5zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgPSB0aGlzLmxpbmVhZ2VbdGhpcy5saW5lYWdlLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc3BlY2lmeWluZyBhIGNhbGN1bGF0aW9uIG9uIGEgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBpZGAgKF9zdHJpbmdfKTogVGhlIElEIGZvciB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24uXG4gICAgICogICAgLSBgdHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAqICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nX3xfbnVsbF8pOiBUaGUgY29tbWVudCBmb3IgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLCBvciBgbnVsbGAuXG4gICAgICogICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBUcnVlIGlmIHRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIGVkaXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgY2FsY3VsYXRpb25cbiAgICAgKiAgICAgICAgICBpcyBkZWZpbmVkIGluIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBkYXRhIG1vZGVsIHRoYXQgdGhpcyBjYWxjdWxhdGlvbiBiZWxvbmdzIHRvLlxuICAgICAqICAgIC0gYG91dHB1dEZpZWxkc2AgKF9hcnJheV8pOiBUaGUgZmllbGRzIG91dHB1dCBieSB0aGlzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIFJleCBhbmQgRXZhbCB0eXBlcyBoYXZlIGFuIGFkZGl0aW9uYWwgcHJvcGVydHk6XG4gICAgICogICAgLSBgZXhwcmVzc2lvbmAgKF9zdHJpbmdfKTogVGhlIGV4cHJlc3Npb24gdG8gdXNlIGZvciB0aGlzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIFJleCBhbmQgR2VvSVAgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGlucHV0RmllbGRgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIExvb2t1cCB0eXBlIGhhcyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgbG9va3VwTmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIGxvb2t1cCB0byBwZXJmb3JtLlxuICAgICAqICAgIC0gYGlucHV0RmllbGRNYXBwaW5nc2AgKF9vYmplY3RfKTogVGhlIG1hcHBpbmdzIGZyb20gZmllbGRzIGluIHRoZSBldmVudHMgdG8gZmllbGRzIGluIHRoZSBsb29rdXAuXG4gICAgICpcbiAgICAgKiBWYWxpZCB0eXBlcyBvZiBjYWxjdWxhdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYExvb2t1cGBcbiAgICAgKiAgICAtIGBFdmFsYFxuICAgICAqICAgIC0gYEdlb0lQYFxuICAgICAqICAgIC0gYFJleGBcbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxDYWxjdWxhdGlvbiA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIF90eXBlczogW1wiTG9va3VwXCIsIFwiRXZhbFwiLCBcIkdlb0lQXCIsIFwiUmV4XCJdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYSBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvbklEYCAoX3N0cmluZ18pOiBUaGUgSUQgb2YgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgICAgICogICAgIC0gYGNhbGN1bGF0aW9uVHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBjYWxjdWxhdGlvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiAgICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIGVkaXRlZC5cbiAgICAgICAgICogICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nXyk6IEEgY29tbWVudCBmb3IgdGhpcyBjYWxjdWxhdGlvbiwgb3IgYG51bGxgIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICAgICAgICogICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3Qgb24gd2hpY2ggdGhpcyBjYWxjdWxhdGlvblxuICAgICAgICAgKiAgICAgICAgICBpcyBkZWZpbmVkLCBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvIGFuIGFycmF5IG9mXG4gICAgICAgICAqICAgICAgICAgIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqICAgICAtIGBvdXRwdXRGaWVsZHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgdGhlIGZpZWxkcyB0aGlzIGNhbGN1bGF0aW9uIGdlbmVyYXRlcy5cbiAgICAgICAgICogICAgIC0gYGV4cHJlc3Npb25gIChfc3RyaW5nXyk6IFRoZSBleHByZXNzaW9uIHRvIHVzZSBmb3IgdGhpcyBjYWxjdWxhdGlvbjsgZXhjbHVzaXZlIHRvIGBFdmFsYCBhbmQgYFJleGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGlucHV0RmllbGRgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIGNhbGN1bGF0aW9uOyBleGNsdXNpdmUgdG8gYEdlb0lQYCBhbmQgYFJleGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGxvb2t1cE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBsb29rdXAgdG8gcGVyZm9ybTsgZXhjbHVzaXZlIHRvIGBMb29rdXBgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBpbnB1dEZpZWxkTWFwcGluZ3NgIChfYXJyYXlfKTogT25lIGVsZW1lbnQgYXJyYXkgY29udGFpbmluZyBhbiBvYmplY3Qgd2l0aCB0aGUgbWFwcGluZ3MgZnJvbSBmaWVsZHMgaW4gdGhlIGV2ZW50cyB0byBmaWVsZHNcbiAgICAgICAgICogICAgICAgICBpbiB0aGUgbG9va3VwOyBleGNsdXNpdmUgdG8gYExvb2t1cGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5pZCAgICAgICAgICAgICA9IHByb3BzLmNhbGN1bGF0aW9uSUQ7XG4gICAgICAgICAgICB0aGlzLnR5cGUgICAgICAgICAgID0gcHJvcHMuY2FsY3VsYXRpb25UeXBlO1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ICAgICAgICA9IHByb3BzLmNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZWRpdGFibGUgICAgICAgPSBwcm9wcy5lZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMubGluZWFnZSAgICAgICAgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgICAgICAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgdGhpcy5vdXRwdXRGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMub3V0cHV0RmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRGaWVsZHNbcHJvcHMub3V0cHV0RmllbGRzW2ldLmZpZWxkTmFtZV0gPSBuZXcgcm9vdC5EYXRhTW9kZWxGaWVsZChwcm9wcy5vdXRwdXRGaWVsZHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJFdmFsXCIgPT09IHRoaXMudHlwZSB8fCBcIlJleFwiID09PSB0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBwcm9wcy5leHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiR2VvSVBcIiA9PT0gdGhpcy50eXBlIHx8IFwiUmV4XCIgPT09IHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHByb3BzLmlucHV0RmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJMb29rdXBcIiA9PT0gdGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29rdXBOYW1lID0gcHJvcHMubG9va3VwTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RmllbGRNYXBwaW5ncyA9IHByb3BzLmxvb2t1cElucHV0c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIG9mIG91dHB1dCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2Ygb3V0cHV0IGZpZWxkIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIG91dHB1dEZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub3V0cHV0RmllbGRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGVkaXRhYmxlP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBlZGl0YWJsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0VkaXRhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZWRpdGFibGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIGxvb2t1cD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBsb29rdXAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXNMb29rdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiTG9va3VwXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIG9mIHR5cGUgZXZhbD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBldmFsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzRXZhbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFdmFsXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBSZXg/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgUmV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzUmV4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlJleFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIEdlb0lQP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBvZiB0eXBlIEdlb0lQLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzR2VvSVA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiR2VvSVBcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUGl2b3QgcmVwcmVzZW50cyBkYXRhIGFib3V0IGEgcGl2b3QgcmVwb3J0IHJldHVybmVkIGJ5IHRoZSBTcGx1bmsgU2VydmVyLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgc2VydmljZWAgKF9zcGx1bmtqcy5TZXJ2aWNlXyk6IEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAqICAgIC0gYHNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBzdHJpbmcgZm9yIHJ1bm5pbmcgdGhlIHBpdm90IHJlcG9ydC5cbiAgICAgKiAgICAtIGBkcmlsbGRvd25TZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgZHJpbGxkb3duLlxuICAgICAqICAgIC0gYG9wZW5JblNlYXJjaGAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBzZWFyY2ggcGFyYW1ldGVyLCBidXQgbGlzdGVkIG1vcmUgc2ltcGx5LlxuICAgICAqICAgIC0gYHByZXR0eVF1ZXJ5YCAoX3N0cmluZ18pOiBFcXVpdmFsZW50IHRvIGBvcGVuSW5TZWFyY2hgLlxuICAgICAqICAgIC0gYHBpdm90U2VhcmNoYCAoX3N0cmluZ18pOiBBIHBpdm90IHNlYXJjaCBjb21tYW5kIGJhc2VkIG9uIHRoZSBuYW1lZCBkYXRhIG1vZGVsLlxuICAgICAqICAgIC0gYHRzdGF0c1NlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBmb3IgcnVubmluZyB0aGlzIHBpdm90IHJlcG9ydCB1c2luZyB0c3RhdHMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAqL1xuICAgIHJvb3QuUGl2b3QgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgcGl2b3QuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggc3RyaW5nIGZvciBydW5uaW5nIHRoZSBwaXZvdCByZXBvcnQuXG4gICAgICAgICAqICAgIC0gYGRyaWxsZG93bl9zZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgZHJpbGxkb3duLlxuICAgICAgICAgKiAgICAtIGBvcGVuX2luX3NlYXJjaGAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBzZWFyY2ggcGFyYW1ldGVyLCBidXQgbGlzdGVkIG1vcmUgc2ltcGx5LlxuICAgICAgICAgKiAgICAtIGBwaXZvdF9zZWFyY2hgIChfc3RyaW5nXyk6IEEgcGl2b3Qgc2VhcmNoIGNvbW1hbmQgYmFzZWQgb24gdGhlIG5hbWVkIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgIC0gYHRzdGF0c19zZWFyY2hgIChfc3RyaW5nX3xfbnVsbF8pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIHRzdGF0cywgbnVsbCBpZiBhY2NlbGVyYXRpb24gaXMgZGlzYWJsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IHByb3BzLnNlYXJjaDtcbiAgICAgICAgICAgIHRoaXMuZHJpbGxkb3duU2VhcmNoID0gcHJvcHMuZHJpbGxkb3duX3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMucHJldHR5UXVlcnkgPSB0aGlzLm9wZW5JblNlYXJjaCA9IHByb3BzLm9wZW5faW5fc2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5waXZvdFNlYXJjaCA9IHByb3BzLnBpdm90X3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMudHN0YXRzU2VhcmNoID0gcHJvcHMudHN0YXRzX3NlYXJjaCB8fCBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnJ1biA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5ydW4pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydHMgYSBzZWFyY2ggam9iIHJ1bm5pbmcgdGhpcyBwaXZvdCwgYWNjZWxlcmF0ZWQgaWYgcG9zc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYiAob3B0aW9uYWwpLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgY3JlYXRpbmcgdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90XG4gICAgICAgICAqL1xuICAgICAgICBydW46IGZ1bmN0aW9uKGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYXJncyB8fCBPYmplY3Qua2V5cyhhcmdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRzdGF0cyBpcyB1bmRlZmluZWQsIHVzZSBwaXZvdFNlYXJjaCAodHJ5IHRvIHJ1biBhbiBhY2NlbGVyYXRlZCBzZWFyY2ggaWYgcG9zc2libGUpXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc2VhcmNoKHRoaXMudHN0YXRzU2VhcmNoIHx8IHRoaXMucGl2b3RTZWFyY2gsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUGl2b3RTcGVjaWZpY2F0aW9uIHJlcHJlc2VudHMgYSBwaXZvdCB0byBiZSBkb25lIG9uIGEgcGFydGljdWxhciBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKiBUaGUgdXNlciBjcmVhdGVzIGEgUGl2b3RTcGVjaWZpY2F0aW9uIG9uIHNvbWUgZGF0YSBtb2RlbCBvYmplY3QsIGFkZHMgZmlsdGVycywgcm93IHNwbGl0cyxcbiAgICAgKiBjb2x1bW4gc3BsaXRzLCBhbmQgY2VsbCB2YWx1ZXMsIHRoZW4gY2FsbHMgdGhlIHBpdm90IG1ldGhvZCB0byBxdWVyeSBzcGx1bmtkIGFuZFxuICAgICAqIGdldCBhIHNldCBvZiBTUEwgcXVlcmllcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgICAgKlxuICAgICAqIENhbGwgdGhlIGBwaXZvdGAgbWV0aG9kIHRvIHF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIHBpdm90LlxuICAgICAqXG4gICAgICogVGhpcyBjbGFzcyBzdXBwb3J0cyBhIGZsdWVudCBBUEksIGVhY2ggZnVuY3Rpb24gZXhjZXB0IGBpbml0YCwgYHRvSnNvbk9iamVjdGAgJiBgcGl2b3RgXG4gICAgICogcmV0dXJuIHRoZSBtb2RpZmllZCBgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25gIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICogICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAqICAgICAgICAgdmFyIHBpdm90U3BlY2lmaWNhdGlvbiA9IHNlYXJjaGVzLmNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbigpO1xuICAgICAqICAgICAgICAgcGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICogICAgICAgICAgICAgLmFkZFJvd1NwbGl0KFwidXNlclwiLCBcIkV4ZWN1dGluZyB1c2VyXCIpXG4gICAgICogICAgICAgICAgICAgLmFkZFJhbmdlQ29sdW1uU3BsaXQoXCJleGVjX3RpbWVcIiwge2xpbWl0OiA0fSlcbiAgICAgKiAgICAgICAgICAgICAuYWRkQ2VsbFZhbHVlKFwic2VhcmNoXCIsIFwiU2VhcmNoIFF1ZXJ5XCIsIFwidmFsdWVzXCIpXG4gICAgICogICAgICAgICAgICAgLnBpdm90KGZ1bmN0aW9uKGVyciwgcGl2b3QpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHb3QgYSBQaXZvdCBvYmplY3QgZnJvbSB0aGUgU3BsdW5rIHNlcnZlciFcIik7XG4gICAgICogICAgICAgICAgICAgfSk7XG4gICAgICogICAgIH0pO1xuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZGF0YU1vZGVsT2JqZWN0YCAoX3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0Xyk6IFRoZSBgRGF0YU1vZGVsT2JqZWN0YCBmcm9tIHdoaWNoXG4gICAgICogICAgICAgIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAgd2FzIGNyZWF0ZWQuXG4gICAgICogICAgLSBgY29sdW1uc2AgKF9hcnJheV8pOiBUaGUgY29sdW1uIHNwbGl0cyBvbiB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYHJvd3NgIChfYXJyYXlfKTogVGhlIHJvdyBzcGxpdHMgb24gdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYC5cbiAgICAgKiAgICAtIGBmaWx0ZXJzYCAoX2FycmF5Xyk6IFRoZSBmaWx0ZXJzIG9uIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgY2VsbHNgIChfYXJyYXlfKTogVGhlIGNlbGwgYWdncmVnYXRpb25zIGZvciB0aGlzYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgYWNjZWxlcmF0aW9uTmFtZXNwYWNlYCAoX3N0cmluZ198X251bGxfKTogVGhlIG5hbWUgb2YgdGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGUgYERhdGFNb2RlbE9iamVjdGBcbiAgICAgKiAgICAgICAgb24gd2hpY2ggdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYCB3YXMgY3JlYXRlZCBpZiB0aGUgYERhdGFNb2RlbGAgaXMgYWNjZWxlcmF0ZWQuIEFsdGVybmF0aXZlbHksXG4gICAgICogICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgbWFudWFsbHkgdG8gdGhlIHNpZCBvZiBhbiBhY2NlbGVyYXRpb24gam9iIGluIHRoZSBmb3JtYXQgYHNpZD08c2lkPmAuXG4gICAgICpcbiAgICAgKiBWYWxpZCBjb21wYXJpc29uIHR5cGVzIGFyZTpcbiAgICAgKiAgICAtIGBib29sZWFuYFxuICAgICAqICAgIC0gYHN0cmluZ2BcbiAgICAgKiAgICAtIGBudW1iZXJgXG4gICAgICogICAgLSBgaXB2NGBcbiAgICAgKlxuICAgICAqIFZhbGlkIGJvb2xlYW4gY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKlxuICAgICAqIFZhbGlkIHN0cmluZyBjb21wYXJpc29ucyBhcmU6XG4gICAgICogICAgLSBgPWBcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqICAgIC0gYGNvbnRhaW5zYFxuICAgICAqICAgIC0gYGRvZXNOb3RDb250YWluYFxuICAgICAqICAgIC0gYHN0YXJ0c1dpdGhgXG4gICAgICogICAgLSBgZW5kc1dpdGhgXG4gICAgICogICAgLSBgcmVnZXhgXG4gICAgICpcbiAgICAgKiBWYWxpZCBudW1iZXIgY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgIT1gXG4gICAgICogICAgLSBgPGBcbiAgICAgKiAgICAtIGA+YFxuICAgICAqICAgIC0gYDw9YFxuICAgICAqICAgIC0gYD49YFxuICAgICAqICAgIC0gYGlzYFxuICAgICAqICAgIC0gYGlzTnVsbGBcbiAgICAgKiAgICAtIGBpc05vdE51bGxgXG4gICAgICpcbiAgICAgKiBWYWxpZCBpcHY0IGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqICAgIC0gYGNvbnRhaW5zYFxuICAgICAqICAgIC0gYGRvZXNOb3RDb250YWluYFxuICAgICAqICAgIC0gYHN0YXJ0c1dpdGhgXG4gICAgICpcbiAgICAgKiBWYWxpZCBiaW5uaW5nIHZhbHVlcyBhcmU6XG4gICAgICogICAgLSBgYXV0b2BcbiAgICAgKiAgICAtIGB5ZWFyYFxuICAgICAqICAgIC0gYG1vbnRoYFxuICAgICAqICAgIC0gYGRheWBcbiAgICAgKiAgICAtIGBob3VyYFxuICAgICAqICAgIC0gYG1pbnV0ZWBcbiAgICAgKiAgICAtIGBzZWNvbmRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzb3J0IGRpcmVjdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYEFTQ0VORElOR2BcbiAgICAgKiAgICAtIGBERUNFTkRJTkdgXG4gICAgICogICAgLSBgREVGQVVMVGBcbiAgICAgKlxuICAgICAqIFZhbGlkIHN0YXRzIGZ1bmN0aW9ucyBhcmU6XG4gICAgICogICAgLSBgbGlzdGBcbiAgICAgKiAgICAtIGB2YWx1ZXNgXG4gICAgICogICAgLSBgZmlyc3RgXG4gICAgICogICAgLSBgbGFzdGBcbiAgICAgKiAgICAtIGBjb3VudGBcbiAgICAgKiAgICAtIGBkY2BcbiAgICAgKiAgICAtIGBzdW1gXG4gICAgICogICAgLSBgYXZlcmFnZWBcbiAgICAgKiAgICAtIGBtYXhgXG4gICAgICogICAgLSBgbWluYFxuICAgICAqICAgIC0gYHN0ZGV2YFxuICAgICAqICAgIC0gYGR1cmF0aW9uYFxuICAgICAqICAgIC0gYGVhcmxpZXN0YFxuICAgICAqICAgIC0gYGxhdGVzdGBcbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAqL1xuICAgIHJvb3QuUGl2b3RTcGVjaWZpY2F0aW9uID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgX2NvbXBhcmlzb25zOiB7XG4gICAgICAgICAgICBib29sZWFuOiBbXCI9XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIl0sXG4gICAgICAgICAgICBzdHJpbmc6IFtcIj1cIiwgXCJpc1wiLCBcImlzTnVsbFwiLCBcImlzTm90TnVsbFwiLCBcImNvbnRhaW5zXCIsIFwiZG9lc05vdENvbnRhaW5cIiwgXCJzdGFydHNXaXRoXCIsIFwiZW5kc1dpdGhcIiwgXCJyZWdleFwiXSxcbiAgICAgICAgICAgIG51bWJlcjogW1wiPVwiLCBcIiE9XCIsIFwiPFwiLCBcIj5cIiwgXCI8PVwiLCBcIj49XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIl0sXG4gICAgICAgICAgICBpcHY0OiBbXCJpc1wiLCBcImlzTnVsbFwiLCBcImlzTm90TnVsbFwiLCBcImNvbnRhaW5zXCIsIFwiZG9lc05vdENvbnRhaW5cIiwgXCJzdGFydHNXaXRoXCJdXG4gICAgICAgIH0sXG4gICAgICAgIF9iaW5uaW5nOiBbXCJhdXRvXCIsIFwieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiXSxcbiAgICAgICAgX3NvcnREaXJlY3Rpb246IFtcIkFTQ0VORElOR1wiLCBcIkRFU0NFTkRJTkdcIiwgXCJERUZBVUxUXCJdLFxuICAgICAgICBfc3RhdHNGdW5jdGlvbnM6IFtcImxpc3RcIiwgXCJ2YWx1ZXNcIiwgXCJmaXJzdFwiLCBcImxhc3RcIiwgXCJjb3VudFwiLCBcImRjXCIsIFwic3VtXCIsIFwiYXZlcmFnZVwiLCBcIm1heFwiLCBcIm1pblwiLCBcInN0ZGV2XCIsIFwiZHVyYXRpb25cIiwgXCJlYXJsaWVzdFwiLCBcImxhdGVzdFwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWx9IHBhcmVudERhdGFNb2RlbCBUaGUgYERhdGFNb2RlbGAgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKGRhdGFNb2RlbE9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxPYmplY3QgPSBkYXRhTW9kZWxPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLmNlbGxzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlID0gZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5pc0FjY2VsZXJhdGVkKCkgPyBcbiAgICAgICAgICAgICAgICBkYXRhTW9kZWxPYmplY3QuZGF0YU1vZGVsLm5hbWUgOiBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnJ1biAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJ1bik7XG4gICAgICAgICAgICB0aGlzLnBpdm90ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBpdm90KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhlIGFjY2VsZXJhdGlvbiBjYWNoZSBmb3IgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uIHRvIGEgam9iLFxuICAgICAgICAgKiB1c3VhbGx5IGdlbmVyYXRlZCBieSBjcmVhdGVMb2NhbEFjY2VsZXJhdGlvbkpvYiBvbiBhIERhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKiBpbnN0YW5jZSwgYXMgdGhlIGFjY2VsZXJhdGlvbiBjYWNoZSBmb3IgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gc2lkIFRoZSBzaWQgb2YgYW4gYWNjZWxlcmF0aW9uIGpvYixcbiAgICAgICAgICogICAgIG9yLCBhIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY2NlbGVyYXRpb25Kb2I6IGZ1bmN0aW9uKHNpZCkge1xuICAgICAgICAgICAgLy8gSWYgYSBzZWFyY2ggb2JqZWN0IGlzIHBhc3NlZCBpbiwgZ2V0IGl0cyBzaWRcbiAgICAgICAgICAgIGlmIChzaWQgJiYgc2lkIGluc3RhbmNlb2YgU2VydmljZS5Kb2IpIHtcbiAgICAgICAgICAgICAgICBzaWQgPSBzaWQuc2lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXNpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZCB0byB1c2UgZm9yIGFjY2VsZXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25OYW1lc3BhY2UgPSBcInNpZD1cIiArIHNpZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBmaWx0ZXIgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC4gVGhlIGZpbHRlciB3aWxsIGJlIGEgY29uc3RyYWludCBvZiB0aGUgZm9ybVxuICAgICAgICAgKiBgZmllbGQgYGNvbXBhcmlzb25gIGNvbXBhcmVUb2AsIGZvciBleGFtcGxlOiBgaXNfcmVtb3RlID0gZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGZpbHRlciBvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyaXNvblR5cGUgVGhlIHR5cGUgb2YgY29tcGFyaXNvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyaXNvbk9wIFRoZSBjb21wYXJpc29uLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgY29tcGFyaXNvbnMsIGJhc2VkIG9uIHR5cGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21wYXJlVG8gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdGhlIGZpZWxkIHRvLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkRmlsdGVyOiBmdW5jdGlvbihmaWVsZE5hbWUsIGNvbXBhcmlzb25UeXBlLCBjb21wYXJpc29uT3AsIGNvbXBhcmVUbykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBmaWx0ZXIgb24gYSBub25leGlzdGVudCBmaWVsZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcGFyaXNvblR5cGUgIT09IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgYWRkIFwiICsgY29tcGFyaXNvblR5cGUgKyAgXG4gICAgICAgICAgICAgICAgICAgIFwiIGZpbHRlciBvbiBcIiArIGZpZWxkTmFtZSArIFxuICAgICAgICAgICAgICAgICAgICBcIiBiZWNhdXNlIGl0IGlzIG9mIHR5cGUgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyh0aGlzLl9jb21wYXJpc29uc1tjb21wYXJpc29uVHlwZV0sIGNvbXBhcmlzb25PcCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGFkZCBcIiArIGNvbXBhcmlzb25UeXBlICsgXG4gICAgICAgICAgICAgICAgICAgIFwiIGZpbHRlciBiZWNhdXNlIFwiICsgY29tcGFyaXNvbk9wICtcbiAgICAgICAgICAgICAgICAgICAgXCIgaXMgbm90IGEgdmFsaWQgY29tcGFyaXNvbiBvcGVyYXRvclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKS5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGNvbXBhcmlzb25UeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVGhlc2UgZmllbGRzIGFyZSB0eXBlIGRlcGVuZGVudFxuICAgICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJpcHY0XCIsIFwibnVtYmVyXCJdLCByZXQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXQucnVsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvcjogY29tcGFyaXNvbk9wLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlVG86IGNvbXBhcmVUb1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChyZXQpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGxpbWl0IG9uIHRoZSBldmVudHMgc2hvd24gaW4gYSBwaXZvdCBieSBzb3J0aW5nIHRoZW0gYWNjb3JkaW5nIHRvIHNvbWUgZmllbGQsIHRoZW4gdGFraW5nXG4gICAgICAgICAqIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGZyb20gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gZmlsdGVyIG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc29ydEF0dHJpYnV0ZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gdXNlIGZvciBzb3J0aW5nLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc29ydERpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgZXZlbnRzLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgdHlwZXMuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsaW1pdCBUaGUgbnVtYmVyIG9mIHZhbHVlcyBmcm9tIHRoZSBzb3J0ZWQgbGlzdCB0byBhbGxvdyB0aHJvdWdoIHRoaXMgZmlsdGVyLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdHNGdW5jdGlvbiBUaGUgc3RhdHMgZnVuY3Rpb24gdG8gdXNlIGZvciBhZ2dyZWdhdGlvbiBiZWZvcmUgc29ydGluZywgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkTGltaXRGaWx0ZXI6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgc29ydEF0dHJpYnV0ZSwgc29ydERpcmVjdGlvbiwgbGltaXQsIHN0YXRzRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgbGltaXQgZmlsdGVyIG9uIGEgbm9uZXhpc3RlbnQgZmllbGQuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0Q291bnRcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIGxpbWl0IGZpbHRlciBvbiBcIiArIGZpZWxkTmFtZSArIFwiIGJlY2F1c2UgaXQgaXMgb2YgdHlwZSBcIiArIGYudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSBmLnR5cGUgJiYgIXV0aWxzLmNvbnRhaW5zKFtcImNvdW50XCIsIFwiZGNcIl0sIHN0YXRzRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gZm9yIGZpZWxkcyBvZiB0eXBlIHN0cmluZyBtdXN0IGJlIENPVU5UIG9yIERJU1RJTkNUX0NPVU5UOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiLCBcImRjXCIsIFwiYXZlcmFnZVwiLCBcInN1bVwiXSwgc3RhdHNGdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBmb3IgZmllbGRzIG9mIHR5cGUgbnVtYmVyIG11c3QgYmUgb25lIG9mIENPVU5ULCBESVNUSU5DVF9DT1VOVCwgU1VNLCBvciBBVkVSQUdFOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJvYmplY3RDb3VudFwiID09PSBmLnR5cGUgJiYgIXV0aWxzLmNvbnRhaW5zKFtcImNvdW50XCJdLCBzdGF0c0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIGZvciBmaWVsZHMgb2YgdHlwZSBvYmplY3QgY291bnQgbXVzdCBiZSBDT1VOVDsgZm91bmQgXCIgKyBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBzb3J0QXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU93bmVyOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShzb3J0QXR0cmlidXRlKS5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgbGltaXRBbW91bnQ6IGxpbWl0LFxuICAgICAgICAgICAgICAgIHN0YXRzRm46IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBBc3N1bWVkIFwiaGlnaGVzdFwiIGlzIHByZWZlcnJlZCBmb3Igd2hlbiBzb3J0RGlyZWN0aW9uIGlzIFwiREVGQVVMVFwiXG4gICAgICAgICAgICBmaWx0ZXIubGltaXRUeXBlID0gXCJBU0NFTkRJTkdcIiA9PT0gc29ydERpcmVjdGlvbiA/IFwibG93ZXN0XCIgOiBcImhpZ2hlc3RcIjtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSBudW1lcmljIG9yIHN0cmluZyB2YWx1ZWQgZmllbGQsIHNwbGl0dGluZyBvbiBlYWNoIGRpc3RpbmN0IHZhbHVlIG9mIHRoZSBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJvd1NwbGl0OiBmdW5jdGlvbihmaWVsZE5hbWUsIGxhYmVsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyhbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIgb3Igc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJvdyA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgcm93LmRpc3BsYXkgPSBcImFsbFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgbnVtZXJpYyBmaWVsZCwgc3BsaXR0aW5nIGludG8gbnVtZXJpYyByYW5nZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgc3BsaXQgZ2VuZXJhdGVzIGJpbnMgd2l0aCBlZGdlcyBlcXVpdmFsZW50IHRvIHRoZVxuICAgICAgICAgKiBjbGFzc2ljIGxvb3AgJ2ZvciBpIGluIDxzdGFydD4gdG8gPGVuZD4gYnkgPHN0ZXA+JyBidXQgd2l0aCBhIG1heGltdW1cbiAgICAgICAgICogbnVtYmVyIG9mIGJpbnMgPGxpbWl0Pi4gVGhpcyBkaXNwYXRjaGVzIHRvIHRoZSBzdGF0cyBhbmQgeHlzZXJpZXMgc2VhcmNoIGNvbW1hbmRzLlxuICAgICAgICAgKiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSBvZiBjb2xsZWN0aW9uIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbiBvcHRpb25zOlxuICAgICAgICAgKiAgICAtIGBzdGFydGAgKF9pbnRlZ2VyXyk6IFRoZSB2YWx1ZSBvZiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGxvd2VzdCB2YWx1ZSBpbiB0aGUgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBlbmRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgZm9yIHRoZSBlbmQgb2YgdGhlIGxhc3QgcmFuZ2UsIG9yIG51bGwgdG8gdGFrZSB0aGUgaGlnaGVzdCB2YWx1ZSBpbiB0aGUgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBzdGVwYCAoX2ludGVnZXJfKTogVGhlIHRoZSB3aWR0aCBvZiBlYWNoIHJhbmdlLCBvciBudWxsIHRvIGhhdmUgU3BsdW5rIGNhbGN1bGF0ZSBpdC5cbiAgICAgICAgICogICAgLSBgbGltaXRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmFuZ2VzIHRvIHNwbGl0IGludG8sIG9yIG51bGwgZm9yIG5vIGxpbWl0LlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkUmFuZ2VSb3dTcGxpdDogZnVuY3Rpb24oZmllbGQsIGxhYmVsLCByYW5nZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1cGRhdGVSYW5nZXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0YXJ0KSAmJiByYW5nZXMuc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMuc3RhcnQgPSByYW5nZXMuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5lbmQpICYmIHJhbmdlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMuZW5kID0gcmFuZ2VzLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0ZXApICYmIHJhbmdlcy5zdGVwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLnNpemUgPSByYW5nZXMuc3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLmxpbWl0KSAmJiByYW5nZXMubGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMubWF4TnVtYmVyT2YgPSByYW5nZXMubGltaXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJyYW5nZXNcIixcbiAgICAgICAgICAgICAgICByYW5nZXM6IHVwZGF0ZVJhbmdlc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHRydWVEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgdHJ1ZSB2YWx1ZWQgcm93IGxhYmVsLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsc2VEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmFsc2UgdmFsdWVkIHJvdyBsYWJlbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEJvb2xlYW5Sb3dTcGxpdDogZnVuY3Rpb24oZmllbGQsIGxhYmVsLCB0cnVlRGlzcGxheVZhbHVlLCBmYWxzZURpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChcImJvb2xlYW5cIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgYm9vbGVhbi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgdHJ1ZUxhYmVsOiB0cnVlRGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICAgIGZhbHNlTGFiZWw6IGZhbHNlRGlzcGxheVZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIHJvdyBzcGxpdCBvbiBhIHRpbWVzdGFtcCB2YWx1ZWQgZmllbGQsIGJpbm5lZCBieSB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBzaXplLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciB0aGlzIHNldCBvZiByb3dzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmlubmluZyBUaGUgc2l6ZSBvZiBiaW5zIHRvIHVzZSwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkVGltZXN0YW1wUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgYmlubmluZykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChcInRpbWVzdGFtcFwiICE9PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCB0aW1lc3RhbXAuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyh0aGlzLl9iaW5uaW5nLCBiaW5uaW5nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmlubmluZyBcIiArIGJpbm5pbmcgKyBcIiBmb3VuZC4gVmFsaWQgdmFsdWVzIGFyZTogXCIgKyB0aGlzLl9iaW5uaW5nLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBiaW5uaW5nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZWQgZmllbGQsIHByb2R1Y2luZyBhIGNvbHVtbiBmb3JcbiAgICAgICAgICogZWFjaCBkaXN0aW5jdCB2YWx1ZSBvZiB0aGUgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRDb2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGROYW1lKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyhbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIgb3Igc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbCA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiID09PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb2wuZGlzcGxheSA9IFwiYWxsXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBjb2x1bW4gc3BsaXQgb24gYSBudW1lcmljIGZpZWxkLCBzcGxpdHRpbmcgdGhlIHZhbHVlcyBpbnRvIHJhbmdlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgc3RhcnRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgZW5kYCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIGZvciB0aGUgZW5kIG9mIHRoZSBsYXN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgc3RlcGAgKF9pbnRlZ2VyXyk6IFRoZSB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSwgb3IgbnVsbCB0byBoYXZlIFNwbHVuayBjYWxjdWxhdGUgaXQuXG4gICAgICAgICAqICAgIC0gYGxpbWl0YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJhbmdlcyB0byBzcGxpdCBpbnRvLCBvciBudWxsIGZvciBubyBsaW1pdC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJhbmdlQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIG51bWJlci5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluIFNwbHVuayA2LjAuMS4xLCBkYXRhIG1vZGVscyBpbmNvcnJlY3RseSBleHBlY3Qgc3RyaW5ncyBmb3IgdGhlc2UgZmllbGRzXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIG51bWJlcnMuIEluIDYuMSwgdGhpcyBpcyBmaXhlZCBhbmQgYm90aCBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICB2YXIgdXBkYXRlZFJhbmdlcyA9IHt9O1xuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuc3RhcnQpICYmIHJhbmdlcy5zdGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMuc3RhcnQgPSByYW5nZXMuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5lbmQpICYmIHJhbmdlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLmVuZCA9IHJhbmdlcy5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGVwKSAmJiByYW5nZXMuc3RlcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMuc2l6ZSA9IHJhbmdlcy5zdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMubGltaXQpICYmIHJhbmdlcy5saW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMubWF4TnVtYmVyT2YgPSByYW5nZXMubGltaXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJyYW5nZXNcIixcbiAgICAgICAgICAgICAgICByYW5nZXM6IHVwZGF0ZWRSYW5nZXNcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBjb2x1bW4gc3BsaXQgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHRydWVEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgdHJ1ZSB2YWx1ZWQgY29sdW1uIGxhYmVsLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsc2VEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmFsc2UgdmFsdWVkIGNvbHVtbiBsYWJlbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEJvb2xlYW5Db2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGROYW1lLCB0cnVlRGlzcGxheVZhbHVlLCBmYWxzZURpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmIChcImJvb2xlYW5cIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgYm9vbGVhbi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgdHJ1ZUxhYmVsOiB0cnVlRGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICAgIGZhbHNlTGFiZWw6IGZhbHNlRGlzcGxheVZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgdGltZXN0YW1wIHZhbHVlZCBmaWVsZCwgYmlubmVkIGJ5IHRoZSBzcGVjaWZpZWQgYnVja2V0IHNpemUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiaW5uaW5nIFRoZSBzaXplIG9mIGJpbnMgdG8gdXNlLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgdHlwZXMuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRUaW1lc3RhbXBDb2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGQsIGJpbm5pbmcpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJ0aW1lc3RhbXBcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgdGltZXN0YW1wLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fYmlubmluZywgYmlubmluZykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJpbm5pbmcgXCIgKyBiaW5uaW5nICsgXCIgZm91bmQuIFZhbGlkIHZhbHVlcyBhcmU6IFwiICsgdGhpcy5fYmlubmluZy5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBiaW5uaW5nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGFuIGFnZ3JlZ2F0ZSB0byBlYWNoIGNlbGwgb2YgdGhlIHBpdm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGFnZ3JlZ2F0ZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIGEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBhZ2dyZWdhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGF0c0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byB1c2UgZm9yIGFnZ3JlZ2F0aW9uLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgc3RhdHMgZnVuY3Rpb25zLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkQ2VsbFZhbHVlOiBmdW5jdGlvbihmaWVsZE5hbWUsIGxhYmVsLCBzdGF0c0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnMoW1wic3RyaW5nXCIsIFwiaXB2NFwiXSwgZi50eXBlKSAmJlxuICAgICAgICAgICAgICAgICF1dGlscy5jb250YWlucyhbXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiLFxuICAgICAgICAgICAgICAgICAgICBcImZpcnN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGNcIl0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gc3RyaW5nIGFuZCBJUHY0IGZpZWxkcyBtdXN0IGJlIG9uZSBvZjpcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIGxpc3QsIGRpc3RpbmN0X3ZhbHVlcywgZmlyc3QsIGxhc3QsIGNvdW50LCBvciBkaXN0aW5jdF9jb3VudDsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSAmJiBcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcInN1bVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXZlcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1pblwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1heFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0ZGV2XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgIF0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gbnVtYmVyIGZpZWxkIG11c3QgYmUgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBzdW0sIGNvdW50LCBhdmVyYWdlLCBtYXgsIG1pbiwgc3RkZXYsIGxpc3QsIG9yIGRpc3RpbmN0X3ZhbHVlczsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcInRpbWVzdGFtcFwiID09PSBmLnR5cGUgJiZcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWFybGllc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYXRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgXSwgc3RhdHNGdW5jdGlvbilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBvbiB0aW1lc3RhbXAgZmllbGQgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBkdXJhdGlvbiwgZWFybGllc3QsIGxhdGVzdCwgbGlzdCwgb3IgZGlzdGluY3QgdmFsdWVzOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIm9iamVjdENvdW50XCIsIFwiY2hpbGRDb3VudFwiXSwgZi50eXBlKSAmJlxuICAgICAgICAgICAgICAgIFwiY291bnRcIiAhPT0gc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIGNoaWxkY291bnQgYW5kIG9iamVjdGNvdW50IGZpZWxkcyBtdXN0IGJlIGNvdW50OyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZm91bmQgXCIgKyBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFwiYm9vbGVhblwiID09PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGJvb2xlYW4gdmFsdWVkIGZpZWxkcyBhcyBjZWxsIHZhbHVlcy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2VsbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHNwYXJrbGluZTogZmFsc2UsIC8vIE5vdCBwcm9wZXJseSBpbXBsZW1lbnRlZCBpbiBjb3JlIHlldC5cbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBKU09OIHJlYWR5IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIEpTT04gcmVhZHkgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgdG9Kc29uT2JqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwubmFtZSxcbiAgICAgICAgICAgICAgICBiYXNlQ2xhc3M6IHRoaXMuZGF0YU1vZGVsT2JqZWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjZWxsczogdGhpcy5jZWxscyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byBhIHBpdm90IHJlcG9ydFxuICAgICAgICAgKiBmb3IgdGhpcyBkYXRhIG1vZGVsLCBkZWZpbmVkIGJ5IHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBzZWFyY2hlcyA9IGRhdGFNb2RlbHMuaXRlbShcImludGVybmFsX2F1ZGl0X2xvZ3NcIikub2JqZWN0QnlOYW1lKFwic2VhcmNoZXNcIik7XG4gICAgICAgICAqICAgICAgICAgIHZhciBwaXZvdFNwZWMgPSBzZWFyY2hlcy5jcmVhdGVQaXZvdFNwZWNpZmljYXRpb24oKTtcbiAgICAgICAgICogICAgICAgICAgLy8gVXNlIG9mIHRoZSBmbHVlbnQgQVBJXG4gICAgICAgICAqICAgICAgICAgIHBpdm90U3BlYy5hZGRSb3dTcGxpdChcInVzZXJcIiwgXCJFeGVjdXRpbmcgdXNlclwiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZFJhbmdlQ29sdW1uU3BsaXQoXCJleGVjX3RpbWVcIiwge3N0YXJ0OiAwLCBlbmQ6IDEyLCBzdGVwOiA1LCBsaW1pdDogNH0pXG4gICAgICAgICAqICAgICAgICAgICAgICAuYWRkQ2VsbFZhbHVlKFwic2VhcmNoXCIsIFwiU2VhcmNoIFF1ZXJ5XCIsIFwidmFsdWVzXCIpXG4gICAgICAgICAqICAgICAgICAgICAgICAucGl2b3QoZnVuY3Rpb24ocGl2b3RFcnIsIHBpdm90KSB7XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQaXZvdCBzZWFyY2ggaXM6XCIsIHBpdm90LnNlYXJjaCk7XG4gICAgICAgICAqICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gZG9uZSBnZXR0aW5nIHRoZSBwaXZvdDogYChlcnIsIHBpdm90KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHBpdm90OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHN2YyA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5zZXJ2aWNlO1xuXG4gICAgICAgICAgICB2YXIgYXJncyA9IHtcbiAgICAgICAgICAgICAgICBwaXZvdF9qc29uOiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSnNvbk9iamVjdCgpKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZCh0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzLm5hbWVzcGFjZSA9IHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gc3ZjLmdldChQYXRocy5waXZvdCArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5uYW1lKSwgYXJncywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVyci5kYXRhLm1lc3NhZ2VzWzBdLnRleHQpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lbnRyeSAmJiByZXNwb25zZS5kYXRhLmVudHJ5WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyByb290LlBpdm90KHN2YywgcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5jb250ZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJEaWRuJ3QgZ2V0IGEgUGl2b3QgcmVwb3J0IGJhY2sgZnJvbSBTcGx1bmtcIiksIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHdyYXAgdXAgdGhlIGBQaXZvdFNwZWNpZmljYXRpb24ucGl2b3QoKWAgYW5kXG4gICAgICAgICAqIGBQaXZvdC5ydW4oKWAgZnVuY3Rpb24gY2FsbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byBhIHBpdm90IHJlcG9ydFxuICAgICAgICAgKiBmb3IgdGhpcyBkYXRhIG1vZGVsLCBkZWZpbmVkIGJ5IHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmA7IHRoZW4sXG4gICAgICAgICAqIHN0YXJ0cyBhIHNlYXJjaCBqb2IgcnVubmluZyB0aGlzIHBpdm90LCBhY2NlbGVyYXRlZCBpZiBwb3NzaWJsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmRhdGFNb2RlbHMoKS5mZXRjaChmdW5jdGlvbihmZXRjaEVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICB2YXIgcGl2b3RTcGVjID0gc2VhcmNoZXMuY3JlYXRlUGl2b3RTcGVjaWZpY2F0aW9uKCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIFVzZSBvZiB0aGUgZmx1ZW50IEFQSVxuICAgICAgICAgKiAgICAgICAgICBwaXZvdFNwZWMuYWRkUm93U3BsaXQoXCJ1c2VyXCIsIFwiRXhlY3V0aW5nIHVzZXJcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtzdGFydDogMCwgZW5kOiAxMiwgc3RlcDogNSwgbGltaXQ6IDR9KVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLnJ1bihmdW5jdGlvbihlcnIsIGpvYiwgcGl2b3QpIHtcbiAgICAgICAgICogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYiBTSUQgaXM6XCIsIGpvYi5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGl2b3Qgc2VhcmNoIGlzOlwiLCBwaXZvdC5zZWFyY2gpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYiAob3B0aW9uYWwpLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgZ2V0dGluZyB0aGUgcGl2b3Q6IGAoZXJyLCBqb2IsIHBpdm90KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHJ1bjogZnVuY3Rpb24oYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwge307XG5cbiAgICAgICAgICAgIHRoaXMucGl2b3QoZnVuY3Rpb24oZXJyLCBwaXZvdCkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBpdm90LnJ1bihhcmdzLCBBc3luYy5hdWdtZW50KGNhbGxiYWNrLCBwaXZvdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIG9uZSBvZiB0aGUgc3RydWN0dXJlZCB2aWV3cyBpbiBhIGBEYXRhTW9kZWxgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZGF0YU1vZGVsYCAoX3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXyk6IFRoZSBgRGF0YU1vZGVsYCB0byB3aGljaCB0aGlzIGBEYXRhTW9kZWxPYmplY3RgIGJlbG9uZ3MuXG4gICAgICogICAgLSBgbmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhpcyBgRGF0YU1vZGVsT2JqZWN0YC5cbiAgICAgKiAgICAtIGBkaXNwbGF5TmFtZWAgKF9zdHJpbmdfKTogVGhlIGh1bWFuIHJlYWRhYmxlIG5hbWUgb2YgdGhpcyBgRGF0YU1vZGVsT2JqZWN0YC5cbiAgICAgKiAgICAtIGBwYXJlbnROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IGBEYXRhTW9kZWxPYmplY3RgIHRvIHRoaXMgb25lLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqICAgICAgICAgIG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKiAgICAtIGBmaWVsZHNgIChfb2JqZWN0Xyk6IEEgZGljdGlvbmFyeSBvZiBgRGF0YU1vZGVsRmllbGRgIG9iamVjdHMsIGFjY2Vzc2libGUgYnkgbmFtZS5cbiAgICAgKiAgICAtIGBjb25zdHJhaW50c2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBgRGF0YU1vZGVsQ29uc3RyYWludGAgb2JqZWN0cy5cbiAgICAgKiAgICAtIGBjYWxjdWxhdGlvbnNgIChfb2JqZWN0Xyk6IEEgZGljdGlvbmFyeSBvZiBgRGF0YU1vZGVsQ2FsY3VsYXRpb25gIG9iamVjdHMsIGFjY2Vzc2libGUgYnkgSUQuXG4gICAgICpcbiAgICAgKiBCYXNlU2VhcmNoIGhhcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGJhc2VTZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggcXVlcnkgd3JhcHBlZCBieSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAqXG4gICAgICogQmFzZVRyYW5zYWN0aW9uIGhhcyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZ3JvdXBCeUZpZWxkc2AgKF9zdHJpbmdfKTogVGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBncm91cCBldmVudHMgaW50byB0cmFuc2FjdGlvbnMuXG4gICAgICogICAgLSBgb2JqZWN0c1RvR3JvdXBgIChfYXJyYXlfKTogTmFtZXMgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1bmlvbmVkXG4gICAgICogICAgICAgIGFuZCBzcGxpdCBpbnRvIHRyYW5zYWN0aW9ucy5cbiAgICAgKiAgICAtIGBtYXhTcGFuYCAoX3N0cmluZ18pOiBUaGUgbWF4aW11bSB0aW1lIHNwYW4gb2YgYSB0cmFuc2FjdGlvbi5cbiAgICAgKiAgICAtIGBtYXhQYXVzZWAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gcGF1c2UgdGltZSBvZiBhIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxPYmplY3QgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgIC0gYG9iamVjdE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIGZvciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiAgICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYHBhcmVudE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiAgICAgLSBgbGluZWFnZWAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QsXG4gICAgICAgICAqICAgICAgICAgIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG8gYW4gYXJyYXkgb2ZcbiAgICAgICAgICogICAgICAgICAgc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICogICAgIC0gYGZpZWxkc2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcy5cbiAgICAgICAgICogICAgIC0gYGNvbnN0cmFpbnRzYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIGRhdGEgbW9kZWwgY29uc3RyYWludHMuXG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvbnNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqICAgICAtIGBiYXNlU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHdyYXBwZWQgYnkgdGhpcyBkYXRhIG1vZGVsIG9iamVjdDsgZXhjbHVzaXZlIHRvIEJhc2VTZWFyY2ggKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgZ3JvdXBCeUZpZWxkc2AgKF9hcnJheV8pOiBUaGUgZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdyb3VwIGV2ZW50cyBpbnRvIHRyYW5zYWN0aW9uczsgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvbiAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBvYmplY3RzVG9Hcm91cGAgKF9hcnJheV8pOiBOYW1lcyBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIHVuaW9uZWRcbiAgICAgICAgICogICAgICAgICBhbmQgc3BsaXQgaW50byB0cmFuc2FjdGlvbnM7IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgbWF4U3BhbmAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gdGltZSBzcGFuIG9mIGEgdHJhbnNhY3Rpb247IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgbWF4UGF1c2VgIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHBhdXNlIHRpbWUgb2YgYSB0cmFuc2FjdGlvbjsgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvbiAob3B0aW9uYWwpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWx9IHBhcmVudERhdGFNb2RlbCBUaGUgYERhdGFNb2RlbGAgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzLCBwYXJlbnREYXRhTW9kZWwpIHtcbiAgICAgICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgICAgICBwcm9wcy5vd25lciA9IHByb3BzLm93bmVyIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsICAgICAgICAgICAgICA9IHBhcmVudERhdGFNb2RlbDtcbiAgICAgICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgICAgICAgICA9IHByb3BzLm9iamVjdE5hbWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lICAgICAgICAgICAgPSBwcm9wcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50TmFtZSAgICAgICAgICAgICA9IHByb3BzLnBhcmVudE5hbWU7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgICAgICAgICAgICAgICAgPSBwcm9wcy5saW5lYWdlLnNwbGl0KFwiLlwiKTtcblxuICAgICAgICAgICAgLy8gUHJvcGVydGllcyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJncm91cEJ5RmllbGRzXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEJ5RmllbGRzID0gcHJvcHMuZ3JvdXBCeUZpZWxkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcIm9iamVjdHNUb0dyb3VwXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzVG9Hcm91cCA9IHByb3BzLm9iamVjdHNUb0dyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwidHJhbnNhY3Rpb25NYXhUaW1lU3BhblwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4U3BhbiA9IHByb3BzLnRyYW5zYWN0aW9uTWF4VGltZVNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJ0cmFuc2FjdGlvbk1heFBhdXNlXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhQYXVzZSA9IHByb3BzLnRyYW5zYWN0aW9uTWF4UGF1c2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByb3BlcnR5IGV4Y2x1c2l2ZSB0byBCYXNlU2VhcmNoXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJiYXNlU2VhcmNoXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlU2VhcmNoID0gcHJvcHMuYmFzZVNlYXJjaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUGFyc2UgZmllbGRzXG4gICAgICAgICAgICB0aGlzLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkc1twcm9wcy5maWVsZHNbaV0uZmllbGROYW1lXSA9IG5ldyByb290LkRhdGFNb2RlbEZpZWxkKHByb3BzLmZpZWxkc1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGNvbnN0cmFpbnRzXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cy5wdXNoKG5ldyByb290LkRhdGFNb2RlbENvbnN0cmFpbnQocHJvcHMuY29uc3RyYWludHNbal0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUGFyc2UgY2FsY3VsYXRpb25zXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwcm9wcy5jYWxjdWxhdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0aW9uc1twcm9wcy5jYWxjdWxhdGlvbnNba10uY2FsY3VsYXRpb25JRF0gPSBuZXcgcm9vdC5EYXRhTW9kZWxDYWxjdWxhdGlvbihwcm9wcy5jYWxjdWxhdGlvbnNba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGEgQmFzZVNlYXJjaD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gV2hldGhlciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGlzIHRoZSByb290IHR5cGUsIEJhc2VTZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGlzQmFzZVNlYXJjaDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHRoaXMuYmFzZVNlYXJjaCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgaXMgYSBCYXNlVHJhbnNhY3Rpb24/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBpcyB0aGUgcm9vdCB0eXBlLCBCYXNlVHJhbnNhY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGlzQmFzZVRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQodGhpcy5tYXhTcGFuKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGRhdGEgbW9kZWwgZmllbGQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIGZpZWxkIG9uIHRoaXNcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkfG51bGx9IFRoZSBkYXRhIG1vZGVsIGZpZWxkXG4gICAgICAgICAqIGZyb20gdGhpcyBkYXRhIG1vZGVsIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgbnVsbCBpZiBpdCB0aGUgXG4gICAgICAgICAqIGZpZWxkIGJ5IHRoYXQgbmFtZSBkb2Vzbid0IGV4aXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZEJ5TmFtZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlZEZpZWxkcygpW25hbWVdIHx8IHRoaXMuZmllbGRzW25hbWVdIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMsIGFuZCB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgZmllbGRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVuay5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkYCBvYmplY3RzXG4gICAgICAgICAqIHdoaWNoIGluY2x1ZGVzIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMsIGFuZCB0aGUgZmllbGRzIGZyb21cbiAgICAgICAgICogdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgYWxsRmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIG1lcmdlIGZpZWxkcyBhbmQgY2FsY3VsYXRlZEZpZWxkcygpXG4gICAgICAgICAgICB2YXIgY29tYmluZWRGaWVsZHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgZiBpbiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEZpZWxkc1tmXSA9IHRoaXMuZmllbGRzW2ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGNmIGluIGNhbGN1bGF0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRlZEZpZWxkcy5oYXNPd25Qcm9wZXJ0eShjZikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRGaWVsZHNbY2ZdID0gY2FsY3VsYXRlZEZpZWxkc1tjZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRGaWVsZHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgYXJyYXkgb2YgdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMsIGFuZCB0aGUgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMsIGFuZCB0aGUgbmFtZXMgb2YgZmllbGRzIG9uIFxuICAgICAgICAgKiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBhbGxGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmFsbEZpZWxkcygpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBgc3BsdW5rLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRgIG9iamVjdHNcbiAgICAgICAgICogb2YgdGhlIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0ZWRGaWVsZHM6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgZmllbGRzID0ge307XG4gICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNhbGN1bGF0aW9ucywgZ2V0IHRoZWlyIGZpZWxkc1xuICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLmNhbGN1bGF0aW9uSURzKCk7XG4gICAgICAgICAgICB2YXIgY2FsY3VsYXRpb25zID0gdGhpcy5jYWxjdWxhdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRpb24gPSBjYWxjdWxhdGlvbnNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZE5hbWVzKCkubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzW2NhbGN1bGF0aW9uLm91dHB1dEZpZWxkTmFtZXMoKVtmXV0gPSBjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZHNbY2FsY3VsYXRpb24ub3V0cHV0RmllbGROYW1lcygpW2ZdXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIFxuICAgICAgICAgKiBkYXRhIG1vZGVsIG9iamVjdCdzIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgY2FsY3VsYXRlZEZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2FsY3VsYXRlZEZpZWxkcygpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgY29udGFpbnMgdGhlIGZpZWxkIHdpdGggdGhlXG4gICAgICAgICAqIG5hbWUgcGFzc2VkIGluIHRoZSBgZmllbGROYW1lYCBwYXJhbWV0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGxvb2sgZm9yLlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjb250YWlucyB0aGUgZmllbGQgYnkgbmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgaGFzRmllbGQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuYWxsRmllbGROYW1lcygpLCBmaWVsZE5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBJRHMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzXG4gICAgICAgICAqIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgSURzIG9mIHRoaXMgZGF0YSBtb2RlbFxuICAgICAgICAgKiBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0aW9uSURzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhbGN1bGF0aW9ucyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvY2FsIGFjY2VsZXJhdGlvbiBpcyB0c2lkeCBhY2NlbGVyYXRpb24gb2YgYSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IGlzIGhhbmRsZWRcbiAgICAgICAgICogbWFudWFsbHkgYnkgYSB1c2VyLiBZb3UgY3JlYXRlIGEgam9iIHdoaWNoIGdlbmVyYXRlcyBhbiBpbmRleCwgYW5kIHRoZW4gdXNlIHRoYXRcbiAgICAgICAgICogaW5kZXggaW4geW91ciBwaXZvdHMgb24gdGhlIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgbmFtZXNwYWNlIGNyZWF0ZWQgYnkgdGhlIGpvYiBpcyAnc2lkPXtzaWR9JyB3aGVyZSB7c2lkfSBpcyB0aGUgam9iJ3Mgc2lkLiBZb3VcbiAgICAgICAgICogd291bGQgdXNlIGl0IGluIGFub3RoZXIgam9iIGJ5IHN0YXJ0aW5nIHlvdXIgc2VhcmNoIHF1ZXJ5IHdpdGggYHwgdHN0YXRzIC4uLiBmcm9tIHNpZD17c2lkfSB8IC4uLmBcbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHRzaWR4IGluZGV4IGNyZWF0ZWQgYnkgdGhpcyBqb2IgaXMgZGVsZXRlZCB3aGVuIHRoZSBqb2IgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkgU3BsdW5rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIG1hbmFnZSB0aGlzIGpvYiwgaW5jbHVkaW5nIGNhbmNlbGxpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBvYmplY3QgPSBkYXRhTW9kZWxzLml0ZW0oXCJzb21lX2RhdGFfbW9kZWxcIikub2JqZWN0QnlOYW1lKFwic29tZV9vYmplY3RcIik7XG4gICAgICAgICAqICAgICAgICAgIG9iamVjdC5jcmVhdGVMb2NhbEFjY2VsZXJhdGlvbkpvYihcIi0xZFwiLCBmdW5jdGlvbihlcnIsIGFjY2VsZXJhdGlvbkpvYikge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUaGUgam9iIGhhcyBuYW1lOlwiLCBhY2NlbGVyYXRpb25Kb2IubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZWFybGllc3RUaW1lIEEgdGltZSBtb2RpZmllciAoZS5nLiwgXCItMndcIikgc2V0dGluZyB0aGUgZWFybGllc3QgdGltZSB0byBpbmRleC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBhY2NlbGVyYXRpb25Kb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2I6IGZ1bmN0aW9uKGVhcmxpZXN0VGltZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIGVhcmxpZXN0VGltZSBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBzZXQgY2FsbGJhY2sgdG8gaXRzIHZhbHVlXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24oZWFybGllc3RUaW1lKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZWFybGllc3RUaW1lO1xuICAgICAgICAgICAgICAgIGVhcmxpZXN0VGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gXCJ8IGRhdGFtb2RlbCBcXFwiXCIgKyB0aGlzLmRhdGFNb2RlbC5uYW1lICsgXCJcXFwiIFwiICsgdGhpcy5uYW1lICsgXCIgc2VhcmNoIHwgdHNjb2xsZWN0XCI7XG4gICAgICAgICAgICB2YXIgYXJncyA9IGVhcmxpZXN0VGltZSA/IHtlYXJsaWVzdF90aW1lOiBlYXJsaWVzdFRpbWV9IDoge307XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLnNlcnZpY2Uuc2VhcmNoKHF1ZXJ5LCBhcmdzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXJ0IGEgc2VhcmNoIGpvYiB0aGF0IGFwcGxpZXMgcXVlcnlTdWZmaXggdG8gYWxsIHRoZSBldmVudHMgaW4gdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmRhdGFNb2RlbHMoKS5mZXRjaChmdW5jdGlvbihlcnIsIGRhdGFNb2RlbHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIG9iamVjdCA9IGRhdGFNb2RlbHMuaXRlbShcImludGVybmFsX2F1ZGl0X2xvZ3NcIikub2JqZWN0QnlOYW1lKFwic2VhcmNoZXNcIik7XG4gICAgICAgICAqICAgICAgICAgIG9iamVjdC5zdGFydFNlYXJjaCh7fSwgXCJ8IGhlYWQgNVwiLCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUaGUgam9iIGhhcyBuYW1lOlwiLCBqb2IubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnlTdWZmaXggQSBzZWFyY2ggcXVlcnksIHN0YXJ0aW5nIHdpdGggYSAnfCcgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIHRvIGZldGNoIHRoZSBjb250ZW50cyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IChlLmcuLCBcInwgaGVhZCAzXCIpLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBzdGFydFNlYXJjaDogZnVuY3Rpb24ocGFyYW1zLCBxdWVyeVN1ZmZpeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBxdWVyeSA9IFwifCBkYXRhbW9kZWwgXCIgKyB0aGlzLmRhdGFNb2RlbC5uYW1lICsgXCIgXCIgKyB0aGlzLm5hbWUgKyBcIiBzZWFyY2hcIjtcbiAgICAgICAgICAgIC8vIFByZXBlbmQgYSBzcGFjZSB0byB0aGUgcXVlcnlTdWZmaXgsIG9yIHNldCBpdCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIHF1ZXJ5U3VmZml4ID0gKHF1ZXJ5U3VmZml4KSA/IChcIiBcIiArIHF1ZXJ5U3VmZml4KSA6IChcIlwiKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLnNlcnZpY2Uuc2VhcmNoKHF1ZXJ5ICsgcXVlcnlTdWZmaXgsIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHRoaXMgb25lIGluaGVyaXRzIGZyb20gaWYgaXQgaXMgYSB1c2VyIGRlZmluZWQsXG4gICAgICAgICAqIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3R8bnVsbH0gVGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIHBhcmVudFxuICAgICAgICAgKiAgICAgb3IgbnVsbCBpZiB0aGlzIGlzIG5vdCBhIHVzZXIgZGVmaW5lZCBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgcGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFNb2RlbC5vYmplY3RCeU5hbWUodGhpcy5wYXJlbnROYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IFBpdm90IFNwZWNpZmljYXRpb24sIGFjY2VwdHMgbm8gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IEEgbmV3IHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBQYXNzIGluIHRoaXMgRGF0YU1vZGVsT2JqZWN0IHRvIGNyZWF0ZSBhIFBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlBpdm90U3BlY2lmaWNhdGlvbih0aGlzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBkYXRhIG1vZGVsIG9uIHRoZSBzZXJ2ZXIuIERhdGEgbW9kZWxzXG4gICAgICogY29udGFpbiBgRGF0YU1vZGVsT2JqZWN0YCBpbnN0YW5jZXMsIHdoaWNoIHNwZWNpZnkgc3RydWN0dXJlZFxuICAgICAqIHZpZXdzIG9uIFNwbHVuayBkYXRhLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbC97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsID0gU2VydmljZS5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmRhdGFNb2RlbHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgZGF0YSBtb2RlbC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSAoT3B0aW9uYWwpIG5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFByb3BlcnRpZXMgb2YgdGhpcyBkYXRhIG1vZGVsOlxuICAgICAgICAgKiAgICAtIGBhY2NlbGVyYXRpb25gIChfc3RyaW5nXyk6IEEgSlNPTiBvYmplY3Qgd2l0aCBhbiBgZW5hYmxlZGAga2V5LCByZXByZXNlbnRpbmcgaWYgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgICAgICAgKiAgICAtIGBjb25jaXNlYCAoX3N0cmluZ18pOiBJbmRpY2F0ZXMgd2hldGhlciB0byBsaXN0IGEgY29uY2lzZSBKU09OIGRlc2NyaXB0aW9uIG9mIHRoZSBkYXRhIG1vZGVsLCBzaG91bGQgYWx3YXlzIGJlIFwiMFwiLlxuICAgICAgICAgKiAgICAtIGBkZXNjcmlwdGlvbmAgKF9zdHJpbmdfKTogVGhlIEpTT04gZGVzY3JpYmluZyB0aGUgZGF0YSBtb2RlbC5cbiAgICAgICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIGRpc3BsYXllZCBmb3IgdGhlIGRhdGEgbW9kZWwgaW4gU3BsdW5rIFdlYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlLCBwcm9wcykge1xuICAgICAgICAgICAgLy8gSWYgbm90IGdpdmVuIGEgNHRoIGFyZywgYXNzdW1lIHRoZSBuYW1lc3BhY2Ugd2FzIG9taXR0ZWRcbiAgICAgICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgICAgICBwcm9wcyA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvbiA9IEpTT04ucGFyc2UocHJvcHMuY29udGVudC5hY2NlbGVyYXRpb24pIHx8IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMuYWNjZWxlcmF0aW9uLmhhc093blByb3BlcnR5KFwiZW5hYmxlZFwiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIGVuYWJsZWQgcHJvcGVydHkgdG8gYSBib29sZWFuXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZCA9ICEhdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY29uY2lzZT0wIChmYWxzZSkgZm9yY2VzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuIGFsbCBkZXRhaWxzIG9mIHRoZSBuZXdseSBjcmVhdGVkIGRhdGEgbW9kZWwuXG4gICAgICAgICAgICAvLyB3ZSBkbyBub3Qgd2FudCBhIHN1bW1hcnkgb2YgdGhpcyBkYXRhIG1vZGVsXG4gICAgICAgICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KFwiY29uY2lzZVwiKSB8fCB1dGlscy5pc1VuZGVmaW5lZChwcm9wcy5jb25jaXNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uY2lzZSA9IFwiMFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZGF0YU1vZGVsRGVmaW5pdGlvbiA9IEpTT04ucGFyc2UocHJvcHMuY29udGVudC5kZXNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIHRoaXMub2JqZWN0TmFtZXMgPSBkYXRhTW9kZWxEZWZpbml0aW9uLm9iamVjdE5hbWVMaXN0O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IGRhdGFNb2RlbERlZmluaXRpb24uZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YU1vZGVsRGVmaW5pdGlvbi5kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIG9iamVjdHMgZm9yIHRoaXMgZGF0YSBtb2RlbCAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb2JqcyA9IGRhdGFNb2RlbERlZmluaXRpb24ub2JqZWN0cztcbiAgICAgICAgICAgIHRoaXMub2JqZWN0cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzLnB1c2gobmV3IHJvb3QuRGF0YU1vZGVsT2JqZWN0KG9ianNbaV0sIHRoaXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhY2NlbGVyYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaXNBY2NlbGVyYXRlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmFjY2VsZXJhdGlvbi5lbmFibGVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgZGF0YSBtb2RlbCBvYmplY3QgZnJvbSB0aGlzIGRhdGEgbW9kZWxcbiAgICAgICAgICogd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgaWYgaXQgZXhpc3RzLCBudWxsIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fG51bGx9IGEgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIG9iamVjdEJ5TmFtZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmplY3RzW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0c1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGJvb2xlYW4gb2Ygd2hldGhlciB0aGlzIGV4aXN0cyBpbiB0aGlzIGRhdGEgbW9kZWwgb3Igbm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGhhcyBvYmplY3Qgd2l0aCBzcGVjaWZpZWQgbmFtZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBoYXNPYmplY3Q6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLm9iamVjdE5hbWVzLCBuYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgZGF0YSBtb2RlbCBvbiB0aGUgc2VydmVyLCB1c2VkIHRvIHVwZGF0ZSBhY2NlbGVyYXRpb24gc2V0dGluZ3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byB1cGRhdGUgdGhlIG9iamVjdCB3aXRoOlxuICAgICAgICAgKiAgICAgLSBgYWNjZWxlcmF0aW9uYCAoX29iamVjdF8pOiBUaGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzIGZvciB0aGUgZGF0YSBtb2RlbC5cbiAgICAgICAgICogICAgICAgICBWYWxpZCBrZXlzIGFyZTogYGVuYWJsZWRgLCBgZWFybGllc3RUaW1lYCwgYGNyb25TY2hlZHVsZWAuXG4gICAgICAgICAqICAgICAgICAgQW55IGtleXMgbm90IHNldCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBhY2NlbGVyYXRpb24gc2V0dGluZ3MgYWxyZWFkeVxuICAgICAgICAgKiAgICAgICAgIHNldCBvbiB0aGlzIGRhdGEgbW9kZWwuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkYXRhIG1vZGVsIGlzIHVwZGF0ZWQ6IGAoZXJyLCBkYXRhTW9kZWwpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9wcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZChjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb3BzO1xuICAgICAgICAgICAgICAgIHByb3BzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJNdXN0IHNwZWNpZnkgYSBwcm9wcyBhcmd1bWVudCB0byB1cGRhdGUgYSBkYXRhIG1vZGVsLlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGlmIHByb3BzIGlzbid0IHNldCwgdG8gYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgdHdpY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiQ2Fubm90IHNldCAnbmFtZScgZmllbGQgaW4gJ3VwZGF0ZSdcIiksIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiB0aGUgbmFtZSBpcyBzZXQsIHRvIGF2b2lkIGNhbGxpbmcgdGhlIGNhbGxiYWNrIHR3aWNlLlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdXBkYXRlZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIGFjY2VsZXJhdGlvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5lbmFibGVkIHx8IHRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0X3RpbWU6IHByb3BzLmFjY2NlbGVyYXRpb24gJiYgcHJvcHMuYWNjZWxlcmF0aW9uLmVhcmxpZXN0VGltZSB8fCB0aGlzLmFjY2VsZXJhdGlvbi5lYXJsaWVzdFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGNyb25fc2NoZWR1bGU6IHByb3BzLmFjY2NlbGVyYXRpb24gJiYgcHJvcHMuYWNjZWxlcmF0aW9uLmNyb25TY2hlZHVsZSB8fCB0aGlzLmFjY2VsZXJhdGlvbi5jcm9uU2NoZWR1bGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdChcIlwiLCB1cGRhdGVkUHJvcHMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU1vZGVsTmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocmVzcG9uc2UuZGF0YS5lbnRyeVswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyByb290LkRhdGFNb2RlbCh0aGF0LnNlcnZpY2UsIHJlc3BvbnNlLmRhdGEuZW50cnlbMF0ubmFtZSwgZGF0YU1vZGVsTmFtZXNwYWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkYXRhIG1vZGVscy4gWW91IGNhbiBjcmVhdGUgYW5kXG4gICAgICogbGlzdCBkYXRhIG1vZGVscyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvclxuICAgICAqIGdldCBhIHNwZWNpZmljIGRhdGEgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YW1vZGVsL21vZGVsXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVscyA9IFNlcnZpY2UuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmRhdGFNb2RlbHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzYC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgKE9wdGlvbmFsKSBuYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UgfHwge307XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNyZWF0ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgYERhdGFNb2RlbGAgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHBhcmFtZXRlcnMuXG4gICAgICAgICAqIEl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBjcmVhdGUgZGF0YSBtb2RlbHMgdGhyb3VnaCB0aGUgU3BsdW5rXG4gICAgICAgICAqIEVudGVycHJpc2Ugd2l0aCBhIGJyb3dzZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIHRvIGNyZWF0ZS4gSWYgaXQgY29udGFpbnMgc3BhY2VzIHRoZXkgd2lsbCBiZSByZXBsYWNlZFxuICAgICAgICAgKiAgICAgd2l0aCB1bmRlcnNjb3Jlcy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBgRGF0YU1vZGVsYCBvYmplY3Q6IGAoZXJyLCBjcmVhdGVkRGF0YU1vZGVsKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGdldCAobmFtZSwgY2FsbGJhY2spIGluc3RlYWQgb2YgKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spXG4gICAgICAgICAgICAvLyBkbyB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlIHN3YXBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvIC9nLCBcIl9cIik7XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwge25hbWU6IG5hbWUsIGRlc2NyaXB0aW9uOiBKU09OLnN0cmluZ2lmeShwYXJhbXMpfSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTW9kZWwgPSBuZXcgcm9vdC5EYXRhTW9kZWwodGhhdC5zZXJ2aWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdLm5hbWUsIHRoYXQubmFtZXNwYWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YU1vZGVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdXNlZCB0byBjcmVhdGUgYSBcbiAgICAgICAgICogYERhdGFNb2RlbGAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBBIG5ldyBgRGF0YU1vZGVsYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5EYXRhTW9kZWwodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UsIHByb3BzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyohKi9cbiAgICAvLyBJdGVyYXRlcyBvdmVyIGFuIGVuZHBvaW50J3MgcmVzdWx0cy5cbiAgICByb290LlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBpbml0OiBmdW5jdGlvbihlbmRwb2ludCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX2VuZHBvaW50ID0gZW5kcG9pbnQ7XG4gICAgICAgICAgICB0aGlzLl9wYWdlc2l6ZSA9IHBhcmFtcy5wYWdlc2l6ZSB8fCAwO1xuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEZldGNoZXMgdGhlIG5leHQgcGFnZSBmcm9tIHRoZSBlbmRwb2ludC5cbiAgICAgICAgbmV4dDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdGhpcy5fcGFnZXNpemUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnQocGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1SZXN1bHRzID0gKHJlc3VsdHMucm93cyA/IHJlc3VsdHMucm93cy5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb2Zmc2V0ICs9IG51bVJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLCBudW1SZXN1bHRzID4gMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7Il19 \ No newline at end of file diff --git a/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js b/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js new file mode 100644 index 000000000..2b64393bb --- /dev/null +++ b/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js @@ -0,0 +1,2875 @@ +function cov_1ks4ntaci2(){var path="/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js";var hash="1e13507780108878ff5a225bb0ab3d0d383df74e";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js",statementMap:{"0":{start:{line:16,column:0},end:{line:5803,column:5}},"1":{start:{line:19,column:22},end:{line:19,column:42}},"2":{start:{line:20,column:22},end:{line:20,column:39}},"3":{start:{line:21,column:22},end:{line:21,column:40}},"4":{start:{line:22,column:22},end:{line:22,column:46}},"5":{start:{line:23,column:22},end:{line:23,column:53}},"6":{start:{line:24,column:22},end:{line:24,column:40}},"7":{start:{line:26,column:15},end:{line:26,column:30}},"8":{start:{line:27,column:18},end:{line:27,column:22}},"9":{start:{line:37,column:22},end:{line:41,column:6}},"10":{start:{line:39,column:12},end:{line:39,column:47}},"11":{start:{line:51,column:4},end:{line:664,column:7}},"12":{start:{line:73,column:12},end:{line:73,column:47}},"13":{start:{line:77,column:12},end:{line:77,column:72}},"14":{start:{line:78,column:12},end:{line:78,column:66}},"15":{start:{line:79,column:12},end:{line:79,column:76}},"16":{start:{line:80,column:12},end:{line:80,column:69}},"17":{start:{line:81,column:12},end:{line:81,column:75}},"18":{start:{line:82,column:12},end:{line:82,column:66}},"19":{start:{line:83,column:12},end:{line:83,column:67}},"20":{start:{line:84,column:12},end:{line:84,column:73}},"21":{start:{line:85,column:12},end:{line:85,column:67}},"22":{start:{line:86,column:12},end:{line:86,column:78}},"23":{start:{line:87,column:12},end:{line:87,column:72}},"24":{start:{line:106,column:12},end:{line:116,column:15}},"25":{start:{line:136,column:12},end:{line:136,column:47}},"26":{start:{line:164,column:12},end:{line:164,column:60}},"27":{start:{line:192,column:12},end:{line:192,column:53}},"28":{start:{line:218,column:12},end:{line:218,column:59}},"29":{start:{line:244,column:12},end:{line:244,column:62}},"30":{start:{line:271,column:12},end:{line:271,column:71}},"31":{start:{line:300,column:12},end:{line:300,column:50}},"32":{start:{line:312,column:12},end:{line:312,column:56}},"33":{start:{line:337,column:12},end:{line:337,column:40}},"34":{start:{line:366,column:12},end:{line:366,column:51}},"35":{start:{line:397,column:12},end:{line:400,column:13}},"36":{start:{line:398,column:16},end:{line:398,column:37}},"37":{start:{line:399,column:16},end:{line:399,column:33}},"38":{start:{line:402,column:23},end:{line:402,column:53}},"39":{start:{line:403,column:12},end:{line:403,column:56}},"40":{start:{line:420,column:12},end:{line:423,column:13}},"41":{start:{line:421,column:16},end:{line:421,column:37}},"42":{start:{line:422,column:16},end:{line:422,column:33}},"43":{start:{line:424,column:22},end:{line:424,column:56}},"44":{start:{line:425,column:12},end:{line:425,column:43}},"45":{start:{line:453,column:12},end:{line:456,column:13}},"46":{start:{line:454,column:16},end:{line:454,column:37}},"47":{start:{line:455,column:16},end:{line:455,column:33}},"48":{start:{line:458,column:23},end:{line:458,column:53}},"49":{start:{line:459,column:12},end:{line:459,column:63}},"50":{start:{line:478,column:12},end:{line:478,column:49}},"51":{start:{line:480,column:23},end:{line:480,column:27}},"52":{start:{line:481,column:22},end:{line:497,column:14}},"53":{start:{line:482,column:16},end:{line:496,column:17}},"54":{start:{line:483,column:20},end:{line:483,column:34}},"55":{start:{line:486,column:35},end:{line:486,column:74}},"56":{start:{line:487,column:31},end:{line:487,column:60}},"57":{start:{line:488,column:20},end:{line:495,column:23}},"58":{start:{line:489,column:24},end:{line:494,column:25}},"59":{start:{line:490,column:28},end:{line:490,column:35}},"60":{start:{line:493,column:28},end:{line:493,column:60}},"61":{start:{line:499,column:12},end:{line:499,column:23}},"62":{start:{line:517,column:12},end:{line:517,column:49}},"63":{start:{line:519,column:29},end:{line:519,column:54}},"64":{start:{line:520,column:12},end:{line:520,column:46}},"65":{start:{line:544,column:12},end:{line:547,column:13}},"66":{start:{line:545,column:16},end:{line:545,column:34}},"67":{start:{line:546,column:16},end:{line:546,column:28}},"68":{start:{line:549,column:12},end:{line:549,column:49}},"69":{start:{line:550,column:12},end:{line:550,column:34}},"70":{start:{line:552,column:12},end:{line:552,column:29}},"71":{start:{line:554,column:12},end:{line:561,column:15}},"72":{start:{line:555,column:16},end:{line:560,column:17}},"73":{start:{line:556,column:20},end:{line:556,column:34}},"74":{start:{line:559,column:20},end:{line:559,column:50}},"75":{start:{line:581,column:12},end:{line:584,column:13}},"76":{start:{line:582,column:16},end:{line:582,column:33}},"77":{start:{line:583,column:16},end:{line:583,column:27}},"78":{start:{line:586,column:12},end:{line:586,column:49}},"79":{start:{line:587,column:25},end:{line:590,column:13}},"80":{start:{line:592,column:12},end:{line:600,column:15}},"81":{start:{line:593,column:16},end:{line:599,column:17}},"82":{start:{line:594,column:20},end:{line:594,column:34}},"83":{start:{line:597,column:34},end:{line:597,column:63}},"84":{start:{line:598,column:20},end:{line:598,column:50}},"85":{start:{line:625,column:12},end:{line:628,column:13}},"86":{start:{line:626,column:16},end:{line:626,column:34}},"87":{start:{line:627,column:16},end:{line:627,column:28}},"88":{start:{line:630,column:12},end:{line:630,column:49}},"89":{start:{line:631,column:12},end:{line:631,column:34}},"90":{start:{line:634,column:12},end:{line:636,column:13}},"91":{start:{line:635,column:16},end:{line:635,column:46}},"92":{start:{line:638,column:23},end:{line:638,column:45}},"93":{start:{line:639,column:25},end:{line:639,column:31}},"94":{start:{line:640,column:26},end:{line:640,column:56}},"95":{start:{line:641,column:23},end:{line:641,column:28}},"96":{start:{line:642,column:22},end:{line:642,column:28}},"97":{start:{line:643,column:23},end:{line:643,column:25}},"98":{start:{line:645,column:22},end:{line:660,column:13}},"99":{start:{line:653,column:20},end:{line:658,column:21}},"100":{start:{line:654,column:24},end:{line:654,column:38}},"101":{start:{line:657,column:24},end:{line:657,column:54}},"102":{start:{line:662,column:12},end:{line:662,column:23}},"103":{start:{line:674,column:4},end:{line:815,column:7}},"104":{start:{line:686,column:12},end:{line:688,column:13}},"105":{start:{line:687,column:16},end:{line:687,column:61}},"106":{start:{line:690,column:12},end:{line:692,column:13}},"107":{start:{line:691,column:16},end:{line:691,column:60}},"108":{start:{line:694,column:12},end:{line:694,column:35}},"109":{start:{line:695,column:12},end:{line:695,column:47}},"110":{start:{line:699,column:12},end:{line:699,column:53}},"111":{start:{line:700,column:12},end:{line:700,column:56}},"112":{start:{line:701,column:12},end:{line:701,column:54}},"113":{start:{line:702,column:12},end:{line:702,column:53}},"114":{start:{line:722,column:22},end:{line:722,column:40}},"115":{start:{line:726,column:12},end:{line:728,column:13}},"116":{start:{line:727,column:16},end:{line:727,column:42}},"117":{start:{line:730,column:12},end:{line:734,column:14}},"118":{start:{line:738,column:22},end:{line:738,column:40}},"119":{start:{line:742,column:12},end:{line:744,column:13}},"120":{start:{line:743,column:16},end:{line:743,column:42}},"121":{start:{line:746,column:12},end:{line:749,column:14}},"122":{start:{line:769,column:22},end:{line:769,column:40}},"123":{start:{line:773,column:12},end:{line:775,column:13}},"124":{start:{line:774,column:16},end:{line:774,column:42}},"125":{start:{line:777,column:12},end:{line:781,column:14}},"126":{start:{line:801,column:22},end:{line:801,column:40}},"127":{start:{line:805,column:12},end:{line:807,column:13}},"128":{start:{line:806,column:16},end:{line:806,column:42}},"129":{start:{line:809,column:12},end:{line:813,column:14}},"130":{start:{line:828,column:4},end:{line:916,column:7}},"131":{start:{line:844,column:27},end:{line:844,column:60}},"132":{start:{line:846,column:12},end:{line:846,column:43}},"133":{start:{line:847,column:12},end:{line:847,column:39}},"134":{start:{line:848,column:12},end:{line:848,column:34}},"135":{start:{line:849,column:12},end:{line:849,column:29}},"136":{start:{line:853,column:12},end:{line:853,column:60}},"137":{start:{line:854,column:12},end:{line:854,column:60}},"138":{start:{line:855,column:12},end:{line:855,column:65}},"139":{start:{line:856,column:12},end:{line:856,column:60}},"140":{start:{line:857,column:12},end:{line:857,column:59}},"141":{start:{line:866,column:12},end:{line:866,column:50}},"142":{start:{line:878,column:12},end:{line:878,column:48}},"143":{start:{line:879,column:12},end:{line:879,column:43}},"144":{start:{line:892,column:12},end:{line:892,column:50}},"145":{start:{line:903,column:12},end:{line:903,column:36}},"146":{start:{line:914,column:12},end:{line:914,column:31}},"147":{start:{line:929,column:4},end:{line:1238,column:7}},"148":{start:{line:954,column:12},end:{line:954,column:50}},"149":{start:{line:958,column:12},end:{line:958,column:58}},"150":{start:{line:959,column:12},end:{line:959,column:58}},"151":{start:{line:960,column:12},end:{line:960,column:59}},"152":{start:{line:961,column:12},end:{line:961,column:59}},"153":{start:{line:962,column:12},end:{line:962,column:59}},"154":{start:{line:963,column:12},end:{line:963,column:58}},"155":{start:{line:964,column:12},end:{line:964,column:56}},"156":{start:{line:965,column:12},end:{line:965,column:59}},"157":{start:{line:966,column:12},end:{line:966,column:60}},"158":{start:{line:967,column:12},end:{line:967,column:62}},"159":{start:{line:968,column:12},end:{line:968,column:59}},"160":{start:{line:969,column:12},end:{line:969,column:60}},"161":{start:{line:970,column:12},end:{line:970,column:59}},"162":{start:{line:973,column:12},end:{line:973,column:34}},"163":{start:{line:974,column:12},end:{line:974,column:34}},"164":{start:{line:975,column:12},end:{line:975,column:34}},"165":{start:{line:976,column:12},end:{line:976,column:34}},"166":{start:{line:988,column:12},end:{line:988,column:80}},"167":{start:{line:992,column:12},end:{line:997,column:14}},"168":{start:{line:999,column:12},end:{line:999,column:36}},"169":{start:{line:1002,column:12},end:{line:1002,column:58}},"170":{start:{line:1003,column:12},end:{line:1003,column:74}},"171":{start:{line:1004,column:12},end:{line:1004,column:58}},"172":{start:{line:1005,column:12},end:{line:1005,column:58}},"173":{start:{line:1006,column:12},end:{line:1006,column:60}},"174":{start:{line:1007,column:12},end:{line:1007,column:60}},"175":{start:{line:1008,column:12},end:{line:1008,column:60}},"176":{start:{line:1020,column:12},end:{line:1020,column:32}},"177":{start:{line:1032,column:12},end:{line:1032,column:29}},"178":{start:{line:1044,column:12},end:{line:1044,column:31}},"179":{start:{line:1055,column:12},end:{line:1055,column:32}},"180":{start:{line:1066,column:12},end:{line:1066,column:33}},"181":{start:{line:1077,column:12},end:{line:1077,column:35}},"182":{start:{line:1096,column:12},end:{line:1099,column:13}},"183":{start:{line:1097,column:16},end:{line:1097,column:35}},"184":{start:{line:1098,column:16},end:{line:1098,column:29}},"185":{start:{line:1100,column:12},end:{line:1100,column:49}},"186":{start:{line:1102,column:12},end:{line:1102,column:36}},"187":{start:{line:1104,column:23},end:{line:1104,column:27}},"188":{start:{line:1105,column:12},end:{line:1113,column:15}},"189":{start:{line:1106,column:16},end:{line:1112,column:17}},"190":{start:{line:1107,column:20},end:{line:1107,column:34}},"191":{start:{line:1110,column:20},end:{line:1110,column:75}},"192":{start:{line:1111,column:20},end:{line:1111,column:41}},"193":{start:{line:1125,column:12},end:{line:1125,column:49}},"194":{start:{line:1127,column:23},end:{line:1127,column:27}},"195":{start:{line:1128,column:12},end:{line:1130,column:15}},"196":{start:{line:1129,column:16},end:{line:1129,column:30}},"197":{start:{line:1143,column:12},end:{line:1143,column:49}},"198":{start:{line:1145,column:12},end:{line:1147,column:13}},"199":{start:{line:1146,column:16},end:{line:1146,column:71}},"200":{start:{line:1149,column:23},end:{line:1149,column:27}},"201":{start:{line:1150,column:22},end:{line:1168,column:14}},"202":{start:{line:1151,column:16},end:{line:1167,column:17}},"203":{start:{line:1152,column:20},end:{line:1152,column:52}},"204":{start:{line:1153,column:20},end:{line:1153,column:40}},"205":{start:{line:1155,column:21},end:{line:1167,column:17}},"206":{start:{line:1156,column:20},end:{line:1163,column:23}},"207":{start:{line:1157,column:24},end:{line:1162,column:25}},"208":{start:{line:1158,column:28},end:{line:1158,column:35}},"209":{start:{line:1161,column:28},end:{line:1161,column:60}},"210":{start:{line:1166,column:20},end:{line:1166,column:40}},"211":{start:{line:1170,column:12},end:{line:1170,column:23}},"212":{start:{line:1182,column:12},end:{line:1182,column:49}},"213":{start:{line:1184,column:23},end:{line:1184,column:27}},"214":{start:{line:1185,column:12},end:{line:1192,column:15}},"215":{start:{line:1186,column:16},end:{line:1191,column:17}},"216":{start:{line:1187,column:20},end:{line:1187,column:34}},"217":{start:{line:1190,column:20},end:{line:1190,column:41}},"218":{start:{line:1204,column:12},end:{line:1204,column:49}},"219":{start:{line:1206,column:23},end:{line:1206,column:27}},"220":{start:{line:1207,column:12},end:{line:1214,column:15}},"221":{start:{line:1208,column:16},end:{line:1213,column:17}},"222":{start:{line:1209,column:20},end:{line:1209,column:34}},"223":{start:{line:1212,column:20},end:{line:1212,column:41}},"224":{start:{line:1226,column:12},end:{line:1226,column:49}},"225":{start:{line:1228,column:23},end:{line:1228,column:27}},"226":{start:{line:1229,column:12},end:{line:1236,column:15}},"227":{start:{line:1230,column:16},end:{line:1235,column:17}},"228":{start:{line:1231,column:20},end:{line:1231,column:34}},"229":{start:{line:1234,column:20},end:{line:1234,column:41}},"230":{start:{line:1248,column:4},end:{line:1579,column:7}},"231":{start:{line:1273,column:12},end:{line:1273,column:50}},"232":{start:{line:1277,column:12},end:{line:1277,column:66}},"233":{start:{line:1278,column:12},end:{line:1278,column:66}},"234":{start:{line:1279,column:12},end:{line:1279,column:67}},"235":{start:{line:1280,column:12},end:{line:1280,column:65}},"236":{start:{line:1281,column:12},end:{line:1281,column:65}},"237":{start:{line:1282,column:12},end:{line:1282,column:78}},"238":{start:{line:1285,column:12},end:{line:1285,column:38}},"239":{start:{line:1286,column:12},end:{line:1286,column:38}},"240":{start:{line:1287,column:12},end:{line:1287,column:38}},"241":{start:{line:1288,column:12},end:{line:1288,column:38}},"242":{start:{line:1289,column:12},end:{line:1289,column:38}},"243":{start:{line:1301,column:12},end:{line:1301,column:50}},"244":{start:{line:1314,column:12},end:{line:1314,column:36}},"245":{start:{line:1316,column:27},end:{line:1316,column:29}},"246":{start:{line:1317,column:33},end:{line:1317,column:35}},"247":{start:{line:1318,column:37},end:{line:1318,column:59}},"248":{start:{line:1319,column:12},end:{line:1331,column:13}},"249":{start:{line:1319,column:24},end:{line:1319,column:25}},"250":{start:{line:1320,column:28},end:{line:1320,column:49}},"251":{start:{line:1321,column:29},end:{line:1321,column:58}},"252":{start:{line:1322,column:16},end:{line:1322,column:36}},"253":{start:{line:1323,column:16},end:{line:1323,column:38}},"254":{start:{line:1325,column:16},end:{line:1330,column:17}},"255":{start:{line:1326,column:20},end:{line:1326,column:61}},"256":{start:{line:1329,column:20},end:{line:1329,column:59}},"257":{start:{line:1332,column:12},end:{line:1332,column:44}},"258":{start:{line:1333,column:12},end:{line:1333,column:50}},"259":{start:{line:1334,column:12},end:{line:1334,column:62}},"260":{start:{line:1335,column:12},end:{line:1335,column:62}},"261":{start:{line:1336,column:12},end:{line:1336,column:64}},"262":{start:{line:1348,column:12},end:{line:1348,column:31}},"263":{start:{line:1359,column:12},end:{line:1359,column:32}},"264":{start:{line:1370,column:12},end:{line:1370,column:33}},"265":{start:{line:1389,column:12},end:{line:1392,column:13}},"266":{start:{line:1390,column:16},end:{line:1390,column:35}},"267":{start:{line:1391,column:16},end:{line:1391,column:29}},"268":{start:{line:1393,column:12},end:{line:1393,column:49}},"269":{start:{line:1395,column:12},end:{line:1395,column:36}},"270":{start:{line:1396,column:12},end:{line:1398,column:13}},"271":{start:{line:1397,column:16},end:{line:1397,column:34}},"272":{start:{line:1400,column:23},end:{line:1400,column:27}},"273":{start:{line:1401,column:22},end:{line:1409,column:14}},"274":{start:{line:1402,column:16},end:{line:1408,column:17}},"275":{start:{line:1403,column:20},end:{line:1403,column:34}},"276":{start:{line:1406,column:20},end:{line:1406,column:46}},"277":{start:{line:1407,column:20},end:{line:1407,column:41}},"278":{start:{line:1411,column:12},end:{line:1411,column:23}},"279":{start:{line:1415,column:12},end:{line:1415,column:36}},"280":{start:{line:1416,column:12},end:{line:1418,column:13}},"281":{start:{line:1417,column:16},end:{line:1417,column:34}},"282":{start:{line:1420,column:23},end:{line:1420,column:27}},"283":{start:{line:1421,column:27},end:{line:1421,column:57}},"284":{start:{line:1423,column:12},end:{line:1423,column:38}},"285":{start:{line:1424,column:12},end:{line:1424,column:24}},"286":{start:{line:1449,column:12},end:{line:1451,column:13}},"287":{start:{line:1450,column:16},end:{line:1450,column:33}},"288":{start:{line:1453,column:12},end:{line:1455,column:13}},"289":{start:{line:1454,column:16},end:{line:1454,column:64}},"290":{start:{line:1457,column:12},end:{line:1459,column:13}},"291":{start:{line:1458,column:16},end:{line:1458,column:136}},"292":{start:{line:1461,column:27},end:{line:1461,column:31}},"293":{start:{line:1462,column:12},end:{line:1504,column:13}},"294":{start:{line:1463,column:31},end:{line:1463,column:55}},"295":{start:{line:1465,column:16},end:{line:1500,column:17}},"296":{start:{line:1470,column:20},end:{line:1470,column:39}},"297":{start:{line:1472,column:21},end:{line:1500,column:17}},"298":{start:{line:1476,column:20},end:{line:1476,column:84}},"299":{start:{line:1477,column:20},end:{line:1482,column:21}},"300":{start:{line:1478,column:24},end:{line:1478,column:43}},"301":{start:{line:1481,column:24},end:{line:1481,column:36}},"302":{start:{line:1484,column:21},end:{line:1500,column:17}},"303":{start:{line:1488,column:20},end:{line:1488,column:77}},"304":{start:{line:1493,column:20},end:{line:1499,column:21}},"305":{start:{line:1493,column:32},end:{line:1493,column:33}},"306":{start:{line:1494,column:37},end:{line:1494,column:48}},"307":{start:{line:1495,column:24},end:{line:1495,column:88}},"308":{start:{line:1496,column:24},end:{line:1498,column:25}},"309":{start:{line:1497,column:28},end:{line:1497,column:42}},"310":{start:{line:1503,column:16},end:{line:1503,column:28}},"311":{start:{line:1525,column:12},end:{line:1525,column:49}},"312":{start:{line:1526,column:23},end:{line:1526,column:27}},"313":{start:{line:1527,column:22},end:{line:1554,column:14}},"314":{start:{line:1528,column:16},end:{line:1553,column:17}},"315":{start:{line:1529,column:20},end:{line:1529,column:34}},"316":{start:{line:1532,column:32},end:{line:1532,column:51}},"317":{start:{line:1533,column:20},end:{line:1535,column:21}},"318":{start:{line:1534,column:24},end:{line:1534,column:41}},"319":{start:{line:1537,column:33},end:{line:1537,column:62}},"320":{start:{line:1538,column:20},end:{line:1538,column:40}},"321":{start:{line:1540,column:20},end:{line:1552,column:21}},"322":{start:{line:1541,column:24},end:{line:1548,column:27}},"323":{start:{line:1542,column:28},end:{line:1547,column:29}},"324":{start:{line:1543,column:32},end:{line:1543,column:39}},"325":{start:{line:1546,column:32},end:{line:1546,column:64}},"326":{start:{line:1551,column:24},end:{line:1551,column:47}},"327":{start:{line:1556,column:12},end:{line:1556,column:23}},"328":{start:{line:1575,column:12},end:{line:1575,column:49}},"329":{start:{line:1577,column:12},end:{line:1577,column:47}},"330":{start:{line:1589,column:4},end:{line:1843,column:7}},"331":{start:{line:1596,column:12},end:{line:1596,column:77}},"332":{start:{line:1614,column:12},end:{line:1614,column:29}},"333":{start:{line:1615,column:12},end:{line:1615,column:57}},"334":{start:{line:1617,column:12},end:{line:1617,column:67}},"335":{start:{line:1618,column:12},end:{line:1618,column:64}},"336":{start:{line:1619,column:12},end:{line:1619,column:63}},"337":{start:{line:1620,column:12},end:{line:1620,column:68}},"338":{start:{line:1637,column:12},end:{line:1637,column:78}},"339":{start:{line:1657,column:12},end:{line:1657,column:49}},"340":{start:{line:1659,column:23},end:{line:1659,column:27}},"341":{start:{line:1660,column:22},end:{line:1662,column:14}},"342":{start:{line:1661,column:16},end:{line:1661,column:36}},"343":{start:{line:1664,column:12},end:{line:1664,column:23}},"344":{start:{line:1689,column:12},end:{line:1692,column:13}},"345":{start:{line:1690,column:16},end:{line:1690,column:35}},"346":{start:{line:1691,column:16},end:{line:1691,column:29}},"347":{start:{line:1694,column:12},end:{line:1694,column:49}},"348":{start:{line:1695,column:12},end:{line:1695,column:36}},"349":{start:{line:1697,column:23},end:{line:1697,column:27}},"350":{start:{line:1698,column:22},end:{line:1708,column:14}},"351":{start:{line:1699,column:16},end:{line:1702,column:17}},"352":{start:{line:1700,column:20},end:{line:1700,column:34}},"353":{start:{line:1701,column:20},end:{line:1701,column:27}},"354":{start:{line:1704,column:26},end:{line:1704,column:43}},"355":{start:{line:1705,column:26},end:{line:1705,column:73}},"356":{start:{line:1707,column:16},end:{line:1707,column:42}},"357":{start:{line:1710,column:12},end:{line:1710,column:23}},"358":{start:{line:1726,column:12},end:{line:1726,column:69}},"359":{start:{line:1749,column:12},end:{line:1752,column:13}},"360":{start:{line:1750,column:16},end:{line:1750,column:35}},"361":{start:{line:1751,column:16},end:{line:1751,column:29}},"362":{start:{line:1754,column:12},end:{line:1754,column:49}},"363":{start:{line:1755,column:12},end:{line:1755,column:36}},"364":{start:{line:1757,column:23},end:{line:1757,column:27}},"365":{start:{line:1758,column:12},end:{line:1776,column:15}},"366":{start:{line:1759,column:16},end:{line:1762,column:17}},"367":{start:{line:1760,column:20},end:{line:1760,column:34}},"368":{start:{line:1761,column:20},end:{line:1761,column:27}},"369":{start:{line:1764,column:27},end:{line:1764,column:29}},"370":{start:{line:1765,column:27},end:{line:1765,column:52}},"371":{start:{line:1766,column:16},end:{line:1773,column:17}},"372":{start:{line:1766,column:28},end:{line:1766,column:29}},"373":{start:{line:1767,column:34},end:{line:1767,column:56}},"374":{start:{line:1768,column:36},end:{line:1768,column:74}},"375":{start:{line:1769,column:30},end:{line:1769,column:81}},"376":{start:{line:1771,column:20},end:{line:1771,column:39}},"377":{start:{line:1772,column:20},end:{line:1772,column:35}},"378":{start:{line:1775,column:16},end:{line:1775,column:43}},"379":{start:{line:1795,column:12},end:{line:1795,column:49}},"380":{start:{line:1797,column:23},end:{line:1797,column:27}},"381":{start:{line:1798,column:12},end:{line:1800,column:15}},"382":{start:{line:1799,column:16},end:{line:1799,column:65}},"383":{start:{line:1816,column:12},end:{line:1816,column:34}},"384":{start:{line:1818,column:12},end:{line:1841,column:13}},"385":{start:{line:1819,column:29},end:{line:1819,column:40}},"386":{start:{line:1820,column:26},end:{line:1835,column:18}},"387":{start:{line:1821,column:20},end:{line:1834,column:21}},"388":{start:{line:1822,column:24},end:{line:1822,column:38}},"389":{start:{line:1825,column:24},end:{line:1825,column:67}},"390":{start:{line:1826,column:24},end:{line:1833,column:27}},"391":{start:{line:1827,column:28},end:{line:1832,column:29}},"392":{start:{line:1828,column:32},end:{line:1828,column:39}},"393":{start:{line:1831,column:32},end:{line:1831,column:64}},"394":{start:{line:1837,column:16},end:{line:1837,column:27}},"395":{start:{line:1840,column:16},end:{line:1840,column:53}},"396":{start:{line:1854,column:4},end:{line:1893,column:7}},"397":{start:{line:1861,column:12},end:{line:1861,column:39}},"398":{start:{line:1873,column:34},end:{line:1873,column:70}},"399":{start:{line:1874,column:12},end:{line:1874,column:83}},"400":{start:{line:1891,column:12},end:{line:1891,column:57}},"401":{start:{line:1903,column:4},end:{line:1931,column:7}},"402":{start:{line:1910,column:12},end:{line:1910,column:80}},"403":{start:{line:1928,column:12},end:{line:1928,column:29}},"404":{start:{line:1929,column:12},end:{line:1929,column:57}},"405":{start:{line:1941,column:4},end:{line:1991,column:7}},"406":{start:{line:1957,column:12},end:{line:1957,column:42}},"407":{start:{line:1971,column:34},end:{line:1971,column:70}},"408":{start:{line:1972,column:12},end:{line:1972,column:87}},"409":{start:{line:1989,column:12},end:{line:1989,column:57}},"410":{start:{line:2002,column:4},end:{line:2143,column:7}},"411":{start:{line:2009,column:12},end:{line:2009,column:75}},"412":{start:{line:2021,column:12},end:{line:2021,column:51}},"413":{start:{line:2031,column:12},end:{line:2031,column:56}},"414":{start:{line:2045,column:12},end:{line:2045,column:51}},"415":{start:{line:2057,column:12},end:{line:2057,column:70}},"416":{start:{line:2067,column:12},end:{line:2067,column:62}},"417":{start:{line:2078,column:12},end:{line:2078,column:66}},"418":{start:{line:2088,column:12},end:{line:2088,column:49}},"419":{start:{line:2098,column:12},end:{line:2098,column:58}},"420":{start:{line:2110,column:12},end:{line:2110,column:67}},"421":{start:{line:2122,column:12},end:{line:2122,column:74}},"422":{start:{line:2140,column:12},end:{line:2140,column:29}},"423":{start:{line:2141,column:12},end:{line:2141,column:57}},"424":{start:{line:2154,column:4},end:{line:2243,column:7}},"425":{start:{line:2161,column:12},end:{line:2161,column:75}},"426":{start:{line:2173,column:12},end:{line:2173,column:78}},"427":{start:{line:2194,column:12},end:{line:2197,column:13}},"428":{start:{line:2195,column:16},end:{line:2195,column:35}},"429":{start:{line:2196,column:16},end:{line:2196,column:29}},"430":{start:{line:2199,column:12},end:{line:2199,column:49}},"431":{start:{line:2200,column:12},end:{line:2200,column:36}},"432":{start:{line:2202,column:23},end:{line:2202,column:27}},"433":{start:{line:2203,column:12},end:{line:2220,column:15}},"434":{start:{line:2204,column:16},end:{line:2207,column:17}},"435":{start:{line:2205,column:20},end:{line:2205,column:34}},"436":{start:{line:2206,column:20},end:{line:2206,column:27}},"437":{start:{line:2209,column:34},end:{line:2209,column:36}},"438":{start:{line:2210,column:27},end:{line:2210,column:52}},"439":{start:{line:2211,column:16},end:{line:2217,column:17}},"440":{start:{line:2211,column:29},end:{line:2211,column:30}},"441":{start:{line:2212,column:41},end:{line:2212,column:63}},"442":{start:{line:2213,column:36},end:{line:2213,column:81}},"443":{start:{line:2214,column:37},end:{line:2214,column:102}},"444":{start:{line:2215,column:20},end:{line:2215,column:53}},"445":{start:{line:2216,column:20},end:{line:2216,column:49}},"446":{start:{line:2219,column:16},end:{line:2219,column:50}},"447":{start:{line:2238,column:12},end:{line:2238,column:29}},"448":{start:{line:2239,column:12},end:{line:2239,column:57}},"449":{start:{line:2241,column:12},end:{line:2241,column:52}},"450":{start:{line:2255,column:4},end:{line:2306,column:7}},"451":{start:{line:2262,column:12},end:{line:2262,column:37}},"452":{start:{line:2274,column:34},end:{line:2274,column:70}},"453":{start:{line:2275,column:12},end:{line:2275,column:87}},"454":{start:{line:2284,column:12},end:{line:2284,column:95}},"455":{start:{line:2301,column:12},end:{line:2301,column:57}},"456":{start:{line:2303,column:12},end:{line:2303,column:78}},"457":{start:{line:2304,column:12},end:{line:2304,column:56}},"458":{start:{line:2316,column:4},end:{line:2409,column:7}},"459":{start:{line:2331,column:12},end:{line:2331,column:68}},"460":{start:{line:2345,column:12},end:{line:2345,column:29}},"461":{start:{line:2346,column:12},end:{line:2346,column:50}},"462":{start:{line:2348,column:12},end:{line:2348,column:63}},"463":{start:{line:2349,column:12},end:{line:2349,column:64}},"464":{start:{line:2368,column:12},end:{line:2368,column:49}},"465":{start:{line:2370,column:23},end:{line:2370,column:27}},"466":{start:{line:2371,column:12},end:{line:2378,column:15}},"467":{start:{line:2372,column:16},end:{line:2377,column:17}},"468":{start:{line:2373,column:20},end:{line:2373,column:34}},"469":{start:{line:2376,column:20},end:{line:2376,column:70}},"470":{start:{line:2397,column:12},end:{line:2397,column:49}},"471":{start:{line:2399,column:23},end:{line:2399,column:27}},"472":{start:{line:2400,column:12},end:{line:2407,column:15}},"473":{start:{line:2401,column:16},end:{line:2406,column:17}},"474":{start:{line:2402,column:20},end:{line:2402,column:34}},"475":{start:{line:2405,column:20},end:{line:2405,column:70}},"476":{start:{line:2419,column:4},end:{line:2462,column:7}},"477":{start:{line:2435,column:12},end:{line:2435,column:30}},"478":{start:{line:2447,column:12},end:{line:2447,column:70}},"479":{start:{line:2460,column:12},end:{line:2460,column:50}},"480":{start:{line:2471,column:4},end:{line:2494,column:7}},"481":{start:{line:2478,column:12},end:{line:2478,column:30}},"482":{start:{line:2491,column:12},end:{line:2491,column:38}},"483":{start:{line:2492,column:12},end:{line:2492,column:50}},"484":{start:{line:2504,column:4},end:{line:2528,column:7}},"485":{start:{line:2511,column:12},end:{line:2511,column:69}},"486":{start:{line:2525,column:12},end:{line:2525,column:29}},"487":{start:{line:2526,column:12},end:{line:2526,column:50}},"488":{start:{line:2538,column:4},end:{line:2618,column:7}},"489":{start:{line:2554,column:12},end:{line:2554,column:31}},"490":{start:{line:2566,column:12},end:{line:2566,column:63}},"491":{start:{line:2579,column:12},end:{line:2579,column:50}},"492":{start:{line:2593,column:12},end:{line:2593,column:49}},"493":{start:{line:2595,column:23},end:{line:2595,column:27}},"494":{start:{line:2596,column:22},end:{line:2614,column:14}},"495":{start:{line:2597,column:16},end:{line:2613,column:17}},"496":{start:{line:2598,column:20},end:{line:2598,column:34}},"497":{start:{line:2602,column:32},end:{line:2602,column:51}},"498":{start:{line:2604,column:33},end:{line:2604,column:62}},"499":{start:{line:2605,column:20},end:{line:2612,column:23}},"500":{start:{line:2606,column:24},end:{line:2611,column:25}},"501":{start:{line:2607,column:28},end:{line:2607,column:35}},"502":{start:{line:2610,column:28},end:{line:2610,column:60}},"503":{start:{line:2616,column:12},end:{line:2616,column:23}},"504":{start:{line:2628,column:4},end:{line:2656,column:7}},"505":{start:{line:2635,column:12},end:{line:2635,column:69}},"506":{start:{line:2653,column:12},end:{line:2653,column:29}},"507":{start:{line:2654,column:12},end:{line:2654,column:57}},"508":{start:{line:2666,column:4},end:{line:2705,column:7}},"509":{start:{line:2673,column:12},end:{line:2673,column:31}},"510":{start:{line:2685,column:34},end:{line:2685,column:70}},"511":{start:{line:2686,column:12},end:{line:2686,column:76}},"512":{start:{line:2703,column:12},end:{line:2703,column:57}},"513":{start:{line:2714,column:4},end:{line:2792,column:7}},"514":{start:{line:2721,column:12},end:{line:2721,column:71}},"515":{start:{line:2739,column:12},end:{line:2739,column:29}},"516":{start:{line:2740,column:12},end:{line:2740,column:57}},"517":{start:{line:2742,column:12},end:{line:2742,column:66}},"518":{start:{line:2767,column:12},end:{line:2770,column:13}},"519":{start:{line:2768,column:16},end:{line:2768,column:34}},"520":{start:{line:2769,column:16},end:{line:2769,column:28}},"521":{start:{line:2772,column:12},end:{line:2772,column:49}},"522":{start:{line:2773,column:12},end:{line:2773,column:34}},"523":{start:{line:2776,column:12},end:{line:2776,column:40}},"524":{start:{line:2778,column:23},end:{line:2778,column:27}},"525":{start:{line:2779,column:12},end:{line:2781,column:15}},"526":{start:{line:2780,column:16},end:{line:2780,column:44}},"527":{start:{line:2785,column:12},end:{line:2790,column:13}},"528":{start:{line:2786,column:16},end:{line:2786,column:75}},"529":{start:{line:2789,column:16},end:{line:2789,column:45}},"530":{start:{line:2802,column:4},end:{line:2873,column:7}},"531":{start:{line:2809,column:12},end:{line:2809,column:33}},"532":{start:{line:2821,column:34},end:{line:2821,column:70}},"533":{start:{line:2822,column:12},end:{line:2822,column:77}},"534":{start:{line:2839,column:12},end:{line:2839,column:57}},"535":{start:{line:2862,column:12},end:{line:2866,column:13}},"536":{start:{line:2863,column:16},end:{line:2863,column:34}},"537":{start:{line:2864,column:16},end:{line:2864,column:30}},"538":{start:{line:2865,column:16},end:{line:2865,column:35}},"539":{start:{line:2868,column:12},end:{line:2868,column:34}},"540":{start:{line:2869,column:12},end:{line:2869,column:34}},"541":{start:{line:2871,column:12},end:{line:2871,column:49}},"542":{start:{line:2883,column:4},end:{line:2914,column:7}},"543":{start:{line:2890,column:23},end:{line:2890,column:67}},"544":{start:{line:2891,column:12},end:{line:2891,column:116}},"545":{start:{line:2910,column:12},end:{line:2910,column:29}},"546":{start:{line:2911,column:12},end:{line:2911,column:29}},"547":{start:{line:2912,column:12},end:{line:2912,column:57}},"548":{start:{line:2925,column:4},end:{line:3017,column:7}},"549":{start:{line:2932,column:12},end:{line:2932,column:83}},"550":{start:{line:2946,column:12},end:{line:2946,column:100}},"551":{start:{line:2958,column:34},end:{line:2958,column:70}},"552":{start:{line:2959,column:12},end:{line:2959,column:102}},"553":{start:{line:2977,column:12},end:{line:2977,column:29}},"554":{start:{line:2978,column:12},end:{line:2978,column:57}},"555":{start:{line:3001,column:12},end:{line:3005,column:13}},"556":{start:{line:3002,column:16},end:{line:3002,column:34}},"557":{start:{line:3003,column:16},end:{line:3003,column:36}},"558":{start:{line:3004,column:16},end:{line:3004,column:41}},"559":{start:{line:3007,column:12},end:{line:3010,column:13}},"560":{start:{line:3008,column:16},end:{line:3008,column:34}},"561":{start:{line:3009,column:16},end:{line:3009,column:28}},"562":{start:{line:3012,column:12},end:{line:3012,column:34}},"563":{start:{line:3013,column:12},end:{line:3013,column:40}},"564":{start:{line:3015,column:12},end:{line:3015,column:49}},"565":{start:{line:3027,column:4},end:{line:3213,column:7}},"566":{start:{line:3043,column:12},end:{line:3043,column:36}},"567":{start:{line:3055,column:12},end:{line:3055,column:88}},"568":{start:{line:3072,column:12},end:{line:3074,column:13}},"569":{start:{line:3073,column:16},end:{line:3073,column:84}},"570":{start:{line:3076,column:12},end:{line:3076,column:57}},"571":{start:{line:3098,column:12},end:{line:3100,column:13}},"572":{start:{line:3099,column:16},end:{line:3099,column:46}},"573":{start:{line:3102,column:12},end:{line:3102,column:49}},"574":{start:{line:3104,column:23},end:{line:3104,column:27}},"575":{start:{line:3105,column:22},end:{line:3120,column:14}},"576":{start:{line:3106,column:16},end:{line:3119,column:17}},"577":{start:{line:3107,column:20},end:{line:3107,column:34}},"578":{start:{line:3110,column:33},end:{line:3110,column:83}},"579":{start:{line:3111,column:20},end:{line:3118,column:23}},"580":{start:{line:3112,column:24},end:{line:3117,column:25}},"581":{start:{line:3113,column:28},end:{line:3113,column:35}},"582":{start:{line:3116,column:28},end:{line:3116,column:60}},"583":{start:{line:3122,column:12},end:{line:3122,column:23}},"584":{start:{line:3126,column:12},end:{line:3150,column:13}},"585":{start:{line:3127,column:27},end:{line:3127,column:31}},"586":{start:{line:3130,column:31},end:{line:3130,column:73}},"587":{start:{line:3133,column:28},end:{line:3133,column:83}},"588":{start:{line:3133,column:63},end:{line:3133,column:82}},"589":{start:{line:3136,column:16},end:{line:3138,column:17}},"590":{start:{line:3137,column:20},end:{line:3137,column:113}},"591":{start:{line:3141,column:40},end:{line:3141,column:90}},"592":{start:{line:3144,column:34},end:{line:3144,column:68}},"593":{start:{line:3146,column:16},end:{line:3146,column:43}},"594":{start:{line:3149,column:16},end:{line:3149,column:72}},"595":{start:{line:3154,column:12},end:{line:3168,column:13}},"596":{start:{line:3157,column:36},end:{line:3157,column:53}},"597":{start:{line:3159,column:16},end:{line:3164,column:17}},"598":{start:{line:3160,column:20},end:{line:3160,column:115}},"599":{start:{line:3163,column:20},end:{line:3163,column:51}},"600":{start:{line:3167,column:16},end:{line:3167,column:72}},"601":{start:{line:3172,column:12},end:{line:3172,column:49}},"602":{start:{line:3173,column:23},end:{line:3173,column:27}},"603":{start:{line:3176,column:40},end:{line:3176,column:74}},"604":{start:{line:3177,column:29},end:{line:3177,column:55}},"605":{start:{line:3180,column:12},end:{line:3189,column:13}},"606":{start:{line:3181,column:16},end:{line:3181,column:51}},"607":{start:{line:3182,column:16},end:{line:3182,column:68}},"608":{start:{line:3184,column:16},end:{line:3185,column:95}},"609":{start:{line:3185,column:38},end:{line:3185,column:92}},"610":{start:{line:3187,column:16},end:{line:3187,column:82}},"611":{start:{line:3188,column:16},end:{line:3188,column:57}},"612":{start:{line:3192,column:42},end:{line:3192,column:88}},"613":{start:{line:3193,column:31},end:{line:3193,column:61}},"614":{start:{line:3196,column:12},end:{line:3211,column:13}},"615":{start:{line:3197,column:16},end:{line:3197,column:53}},"616":{start:{line:3198,column:16},end:{line:3198,column:70}},"617":{start:{line:3200,column:16},end:{line:3203,column:19}},"618":{start:{line:3201,column:20},end:{line:3201,column:75}},"619":{start:{line:3202,column:20},end:{line:3202,column:31}},"620":{start:{line:3207,column:16},end:{line:3210,column:19}},"621":{start:{line:3208,column:20},end:{line:3208,column:75}},"622":{start:{line:3209,column:20},end:{line:3209,column:31}},"623":{start:{line:3223,column:4},end:{line:3814,column:7}},"624":{start:{line:3230,column:12},end:{line:3230,column:68}},"625":{start:{line:3248,column:12},end:{line:3248,column:28}},"626":{start:{line:3249,column:12},end:{line:3249,column:57}},"627":{start:{line:3250,column:12},end:{line:3250,column:27}},"628":{start:{line:3254,column:12},end:{line:3254,column:64}},"629":{start:{line:3255,column:12},end:{line:3255,column:72}},"630":{start:{line:3256,column:12},end:{line:3256,column:71}},"631":{start:{line:3257,column:12},end:{line:3257,column:64}},"632":{start:{line:3258,column:12},end:{line:3258,column:66}},"633":{start:{line:3259,column:12},end:{line:3259,column:63}},"634":{start:{line:3260,column:12},end:{line:3260,column:65}},"635":{start:{line:3261,column:12},end:{line:3261,column:65}},"636":{start:{line:3262,column:12},end:{line:3262,column:67}},"637":{start:{line:3263,column:12},end:{line:3263,column:69}},"638":{start:{line:3264,column:12},end:{line:3264,column:64}},"639":{start:{line:3265,column:12},end:{line:3265,column:65}},"640":{start:{line:3266,column:12},end:{line:3266,column:66}},"641":{start:{line:3267,column:12},end:{line:3267,column:63}},"642":{start:{line:3268,column:12},end:{line:3268,column:65}},"643":{start:{line:3287,column:22},end:{line:3287,column:72}},"644":{start:{line:3289,column:12},end:{line:3289,column:23}},"645":{start:{line:3308,column:12},end:{line:3308,column:49}},"646":{start:{line:3310,column:23},end:{line:3310,column:27}},"647":{start:{line:3311,column:22},end:{line:3313,column:14}},"648":{start:{line:3312,column:16},end:{line:3312,column:36}},"649":{start:{line:3315,column:12},end:{line:3315,column:23}},"650":{start:{line:3334,column:12},end:{line:3334,column:49}},"651":{start:{line:3336,column:23},end:{line:3336,column:27}},"652":{start:{line:3337,column:22},end:{line:3339,column:14}},"653":{start:{line:3338,column:16},end:{line:3338,column:36}},"654":{start:{line:3341,column:12},end:{line:3341,column:23}},"655":{start:{line:3361,column:12},end:{line:3361,column:49}},"656":{start:{line:3362,column:12},end:{line:3362,column:34}},"657":{start:{line:3363,column:12},end:{line:3363,column:67}},"658":{start:{line:3365,column:23},end:{line:3365,column:27}},"659":{start:{line:3366,column:12},end:{line:3373,column:15}},"660":{start:{line:3367,column:16},end:{line:3372,column:17}},"661":{start:{line:3368,column:20},end:{line:3368,column:34}},"662":{start:{line:3371,column:20},end:{line:3371,column:56}},"663":{start:{line:3392,column:12},end:{line:3392,column:49}},"664":{start:{line:3394,column:23},end:{line:3394,column:27}},"665":{start:{line:3395,column:22},end:{line:3397,column:14}},"666":{start:{line:3396,column:16},end:{line:3396,column:36}},"667":{start:{line:3399,column:12},end:{line:3399,column:23}},"668":{start:{line:3414,column:12},end:{line:3414,column:74}},"669":{start:{line:3433,column:12},end:{line:3433,column:49}},"670":{start:{line:3435,column:23},end:{line:3435,column:27}},"671":{start:{line:3436,column:22},end:{line:3438,column:14}},"672":{start:{line:3437,column:16},end:{line:3437,column:36}},"673":{start:{line:3440,column:12},end:{line:3440,column:23}},"674":{start:{line:3460,column:12},end:{line:3460,column:49}},"675":{start:{line:3461,column:12},end:{line:3461,column:34}},"676":{start:{line:3462,column:12},end:{line:3462,column:67}},"677":{start:{line:3464,column:23},end:{line:3464,column:27}},"678":{start:{line:3465,column:12},end:{line:3472,column:15}},"679":{start:{line:3466,column:16},end:{line:3471,column:17}},"680":{start:{line:3467,column:20},end:{line:3467,column:34}},"681":{start:{line:3470,column:20},end:{line:3470,column:56}},"682":{start:{line:3497,column:12},end:{line:3497,column:49}},"683":{start:{line:3498,column:12},end:{line:3498,column:34}},"684":{start:{line:3499,column:12},end:{line:3499,column:67}},"685":{start:{line:3501,column:23},end:{line:3501,column:27}},"686":{start:{line:3502,column:12},end:{line:3509,column:15}},"687":{start:{line:3503,column:16},end:{line:3508,column:17}},"688":{start:{line:3504,column:20},end:{line:3504,column:34}},"689":{start:{line:3507,column:20},end:{line:3507,column:56}},"690":{start:{line:3528,column:12},end:{line:3528,column:49}},"691":{start:{line:3530,column:23},end:{line:3530,column:27}},"692":{start:{line:3531,column:12},end:{line:3538,column:15}},"693":{start:{line:3532,column:16},end:{line:3537,column:17}},"694":{start:{line:3533,column:20},end:{line:3533,column:34}},"695":{start:{line:3536,column:20},end:{line:3536,column:56}},"696":{start:{line:3558,column:12},end:{line:3558,column:49}},"697":{start:{line:3560,column:23},end:{line:3560,column:27}},"698":{start:{line:3561,column:22},end:{line:3563,column:14}},"699":{start:{line:3562,column:16},end:{line:3562,column:36}},"700":{start:{line:3565,column:12},end:{line:3565,column:23}},"701":{start:{line:3586,column:12},end:{line:3586,column:49}},"702":{start:{line:3588,column:23},end:{line:3588,column:27}},"703":{start:{line:3589,column:22},end:{line:3591,column:14}},"704":{start:{line:3590,column:16},end:{line:3590,column:36}},"705":{start:{line:3593,column:12},end:{line:3593,column:23}},"706":{start:{line:3613,column:12},end:{line:3613,column:49}},"707":{start:{line:3615,column:23},end:{line:3615,column:27}},"708":{start:{line:3616,column:12},end:{line:3623,column:15}},"709":{start:{line:3617,column:16},end:{line:3622,column:17}},"710":{start:{line:3618,column:20},end:{line:3618,column:34}},"711":{start:{line:3621,column:20},end:{line:3621,column:56}},"712":{start:{line:3643,column:12},end:{line:3643,column:49}},"713":{start:{line:3645,column:23},end:{line:3645,column:27}},"714":{start:{line:3646,column:12},end:{line:3653,column:15}},"715":{start:{line:3647,column:16},end:{line:3652,column:17}},"716":{start:{line:3648,column:20},end:{line:3648,column:34}},"717":{start:{line:3651,column:20},end:{line:3651,column:56}},"718":{start:{line:3673,column:12},end:{line:3673,column:49}},"719":{start:{line:3675,column:23},end:{line:3675,column:27}},"720":{start:{line:3676,column:22},end:{line:3678,column:14}},"721":{start:{line:3677,column:16},end:{line:3677,column:36}},"722":{start:{line:3680,column:12},end:{line:3680,column:23}},"723":{start:{line:3700,column:25},end:{line:3700,column:46}},"724":{start:{line:3702,column:12},end:{line:3706,column:13}},"725":{start:{line:3703,column:16},end:{line:3705,column:18}},"726":{start:{line:3709,column:16},end:{line:3712,column:32}},"727":{start:{line:3715,column:12},end:{line:3715,column:63}},"728":{start:{line:3716,column:12},end:{line:3716,column:69}},"729":{start:{line:3717,column:12},end:{line:3717,column:61}},"730":{start:{line:3718,column:12},end:{line:3718,column:65}},"731":{start:{line:3719,column:12},end:{line:3719,column:63}},"732":{start:{line:3722,column:12},end:{line:3722,column:71}},"733":{start:{line:3723,column:12},end:{line:3723,column:89}},"734":{start:{line:3725,column:23},end:{line:3725,column:27}},"735":{start:{line:3726,column:31},end:{line:3726,column:36}},"736":{start:{line:3727,column:30},end:{line:3727,column:35}},"737":{start:{line:3728,column:12},end:{line:3786,column:14}},"738":{start:{line:3729,column:29},end:{line:3729,column:49}},"739":{start:{line:3731,column:20},end:{line:3779,column:23}},"740":{start:{line:3732,column:24},end:{line:3735,column:25}},"741":{start:{line:3733,column:28},end:{line:3733,column:47}},"742":{start:{line:3734,column:28},end:{line:3734,column:35}},"743":{start:{line:3737,column:44},end:{line:3737,column:74}},"744":{start:{line:3738,column:39},end:{line:3738,column:96}},"745":{start:{line:3739,column:24},end:{line:3776,column:25}},"746":{start:{line:3740,column:28},end:{line:3740,column:53}},"747":{start:{line:3743,column:28},end:{line:3756,column:29}},"748":{start:{line:3744,column:32},end:{line:3744,column:53}},"749":{start:{line:3745,column:32},end:{line:3745,column:52}},"750":{start:{line:3749,column:32},end:{line:3755,column:33}},"751":{start:{line:3750,column:36},end:{line:3750,column:70}},"752":{start:{line:3752,column:36},end:{line:3752,column:55}},"753":{start:{line:3753,column:36},end:{line:3753,column:52}},"754":{start:{line:3754,column:36},end:{line:3754,column:43}},"755":{start:{line:3758,column:28},end:{line:3758,column:52}},"756":{start:{line:3760,column:40},end:{line:3760,column:56}},"757":{start:{line:3762,column:28},end:{line:3775,column:29}},"758":{start:{line:3763,column:32},end:{line:3763,column:52}},"759":{start:{line:3765,column:32},end:{line:3765,column:51}},"760":{start:{line:3766,column:32},end:{line:3766,column:48}},"761":{start:{line:3767,column:32},end:{line:3767,column:39}},"762":{start:{line:3769,column:33},end:{line:3775,column:29}},"763":{start:{line:3770,column:32},end:{line:3770,column:54}},"764":{start:{line:3772,column:32},end:{line:3772,column:51}},"765":{start:{line:3773,column:32},end:{line:3773,column:48}},"766":{start:{line:3774,column:32},end:{line:3774,column:39}},"767":{start:{line:3778,column:24},end:{line:3778,column:59}},"768":{start:{line:3782,column:20},end:{line:3784,column:21}},"769":{start:{line:3783,column:24},end:{line:3783,column:45}},"770":{start:{line:3805,column:12},end:{line:3805,column:49}},"771":{start:{line:3807,column:23},end:{line:3807,column:27}},"772":{start:{line:3808,column:22},end:{line:3810,column:14}},"773":{start:{line:3809,column:16},end:{line:3809,column:36}},"774":{start:{line:3812,column:12},end:{line:3812,column:23}},"775":{start:{line:3824,column:4},end:{line:4015,column:7}},"776":{start:{line:3831,column:12},end:{line:3831,column:30}},"777":{start:{line:3843,column:22},end:{line:3843,column:39}},"778":{start:{line:3844,column:34},end:{line:3844,column:70}},"779":{start:{line:3845,column:12},end:{line:3845,column:68}},"780":{start:{line:3862,column:12},end:{line:3862,column:57}},"781":{start:{line:3866,column:12},end:{line:3866,column:60}},"782":{start:{line:3889,column:12},end:{line:3893,column:13}},"783":{start:{line:3890,column:16},end:{line:3890,column:34}},"784":{start:{line:3891,column:16},end:{line:3891,column:31}},"785":{start:{line:3892,column:16},end:{line:3892,column:38}},"786":{start:{line:3895,column:12},end:{line:3895,column:49}},"787":{start:{line:3896,column:12},end:{line:3896,column:34}},"788":{start:{line:3897,column:12},end:{line:3897,column:34}},"789":{start:{line:3899,column:12},end:{line:3901,column:13}},"790":{start:{line:3900,column:16},end:{line:3900,column:104}},"791":{start:{line:3903,column:12},end:{line:3906,column:13}},"792":{start:{line:3904,column:16},end:{line:3904,column:72}},"793":{start:{line:3905,column:16},end:{line:3905,column:23}},"794":{start:{line:3907,column:23},end:{line:3907,column:27}},"795":{start:{line:3908,column:12},end:{line:3916,column:15}},"796":{start:{line:3909,column:16},end:{line:3915,column:17}},"797":{start:{line:3910,column:20},end:{line:3910,column:34}},"798":{start:{line:3913,column:30},end:{line:3913,column:91}},"799":{start:{line:3914,column:20},end:{line:3914,column:40}},"800":{start:{line:3945,column:12},end:{line:3945,column:56}},"801":{start:{line:3972,column:12},end:{line:3976,column:13}},"802":{start:{line:3973,column:16},end:{line:3973,column:34}},"803":{start:{line:3974,column:16},end:{line:3974,column:31}},"804":{start:{line:3975,column:16},end:{line:3975,column:38}},"805":{start:{line:3978,column:12},end:{line:3978,column:49}},"806":{start:{line:3979,column:12},end:{line:3979,column:34}},"807":{start:{line:3980,column:12},end:{line:3980,column:34}},"808":{start:{line:3981,column:12},end:{line:3981,column:41}},"809":{start:{line:3983,column:12},end:{line:3985,column:13}},"810":{start:{line:3984,column:16},end:{line:3984,column:72}},"811":{start:{line:3987,column:29},end:{line:3987,column:62}},"812":{start:{line:3989,column:23},end:{line:3989,column:41}},"813":{start:{line:3990,column:25},end:{line:3990,column:31}},"814":{start:{line:3991,column:26},end:{line:3991,column:28}},"815":{start:{line:3992,column:23},end:{line:3992,column:29}},"816":{start:{line:3993,column:22},end:{line:3993,column:47}},"817":{start:{line:3994,column:23},end:{line:3994,column:27}},"818":{start:{line:3996,column:22},end:{line:4011,column:13}},"819":{start:{line:4004,column:20},end:{line:4009,column:21}},"820":{start:{line:4005,column:24},end:{line:4005,column:38}},"821":{start:{line:4008,column:24},end:{line:4008,column:54}},"822":{start:{line:4013,column:12},end:{line:4013,column:23}},"823":{start:{line:4047,column:4},end:{line:4164,column:7}},"824":{start:{line:4072,column:12},end:{line:4072,column:32}},"825":{start:{line:4073,column:12},end:{line:4073,column:44}},"826":{start:{line:4075,column:12},end:{line:4075,column:50}},"827":{start:{line:4076,column:12},end:{line:4076,column:52}},"828":{start:{line:4077,column:12},end:{line:4077,column:45}},"829":{start:{line:4078,column:12},end:{line:4078,column:51}},"830":{start:{line:4079,column:12},end:{line:4079,column:49}},"831":{start:{line:4080,column:12},end:{line:4080,column:47}},"832":{start:{line:4081,column:12},end:{line:4081,column:49}},"833":{start:{line:4082,column:12},end:{line:4082,column:56}},"834":{start:{line:4083,column:12},end:{line:4083,column:52}},"835":{start:{line:4084,column:12},end:{line:4084,column:57}},"836":{start:{line:4085,column:12},end:{line:4085,column:72}},"837":{start:{line:4096,column:12},end:{line:4096,column:42}},"838":{start:{line:4107,column:12},end:{line:4107,column:42}},"839":{start:{line:4118,column:12},end:{line:4118,column:45}},"840":{start:{line:4129,column:12},end:{line:4129,column:47}},"841":{start:{line:4140,column:12},end:{line:4140,column:46}},"842":{start:{line:4151,column:12},end:{line:4151,column:40}},"843":{start:{line:4162,column:12},end:{line:4162,column:43}},"844":{start:{line:4177,column:4},end:{line:4199,column:7}},"845":{start:{line:4192,column:12},end:{line:4192,column:32}},"846":{start:{line:4193,column:12},end:{line:4193,column:44}},"847":{start:{line:4195,column:12},end:{line:4195,column:40}},"848":{start:{line:4196,column:12},end:{line:4196,column:50}},"849":{start:{line:4197,column:12},end:{line:4197,column:65}},"850":{start:{line:4232,column:4},end:{line:4350,column:7}},"851":{start:{line:4258,column:12},end:{line:4258,column:32}},"852":{start:{line:4259,column:12},end:{line:4259,column:44}},"853":{start:{line:4261,column:12},end:{line:4261,column:54}},"854":{start:{line:4262,column:12},end:{line:4262,column:56}},"855":{start:{line:4263,column:12},end:{line:4263,column:56}},"856":{start:{line:4264,column:12},end:{line:4264,column:49}},"857":{start:{line:4265,column:12},end:{line:4265,column:57}},"858":{start:{line:4266,column:12},end:{line:4266,column:72}},"859":{start:{line:4268,column:12},end:{line:4268,column:35}},"860":{start:{line:4269,column:12},end:{line:4271,column:13}},"861":{start:{line:4269,column:25},end:{line:4269,column:26}},"862":{start:{line:4270,column:16},end:{line:4270,column:116}},"863":{start:{line:4273,column:12},end:{line:4275,column:13}},"864":{start:{line:4274,column:16},end:{line:4274,column:51}},"865":{start:{line:4276,column:12},end:{line:4278,column:13}},"866":{start:{line:4277,column:16},end:{line:4277,column:51}},"867":{start:{line:4279,column:12},end:{line:4282,column:13}},"868":{start:{line:4280,column:16},end:{line:4280,column:51}},"869":{start:{line:4281,column:16},end:{line:4281,column:64}},"870":{start:{line:4293,column:12},end:{line:4293,column:50}},"871":{start:{line:4304,column:12},end:{line:4304,column:35}},"872":{start:{line:4315,column:12},end:{line:4315,column:42}},"873":{start:{line:4326,column:12},end:{line:4326,column:40}},"874":{start:{line:4337,column:12},end:{line:4337,column:39}},"875":{start:{line:4348,column:12},end:{line:4348,column:41}},"876":{start:{line:4366,column:4},end:{line:4413,column:7}},"877":{start:{line:4383,column:12},end:{line:4383,column:35}},"878":{start:{line:4384,column:12},end:{line:4384,column:39}},"879":{start:{line:4385,column:12},end:{line:4385,column:58}},"880":{start:{line:4386,column:12},end:{line:4386,column:72}},"881":{start:{line:4387,column:12},end:{line:4387,column:50}},"882":{start:{line:4388,column:12},end:{line:4388,column:60}},"883":{start:{line:4390,column:12},end:{line:4390,column:50}},"884":{start:{line:4402,column:12},end:{line:4405,column:13}},"885":{start:{line:4403,column:16},end:{line:4403,column:32}},"886":{start:{line:4404,column:16},end:{line:4404,column:26}},"887":{start:{line:4406,column:12},end:{line:4408,column:13}},"888":{start:{line:4407,column:16},end:{line:4407,column:26}},"889":{start:{line:4411,column:12},end:{line:4411,column:87}},"890":{start:{line:4524,column:4},end:{line:5169,column:7}},"891":{start:{line:4544,column:12},end:{line:4544,column:51}},"892":{start:{line:4545,column:12},end:{line:4545,column:30}},"893":{start:{line:4546,column:12},end:{line:4546,column:27}},"894":{start:{line:4547,column:12},end:{line:4547,column:30}},"895":{start:{line:4548,column:12},end:{line:4548,column:28}},"896":{start:{line:4550,column:12},end:{line:4551,column:54}},"897":{start:{line:4553,column:12},end:{line:4553,column:52}},"898":{start:{line:4554,column:12},end:{line:4554,column:54}},"899":{start:{line:4570,column:12},end:{line:4572,column:13}},"900":{start:{line:4571,column:16},end:{line:4571,column:30}},"901":{start:{line:4574,column:12},end:{line:4576,column:13}},"902":{start:{line:4575,column:16},end:{line:4575,column:81}},"903":{start:{line:4578,column:12},end:{line:4578,column:54}},"904":{start:{line:4579,column:12},end:{line:4579,column:24}},"905":{start:{line:4595,column:12},end:{line:4597,column:13}},"906":{start:{line:4596,column:16},end:{line:4596,column:77}},"907":{start:{line:4598,column:12},end:{line:4604,column:13}},"908":{start:{line:4599,column:16},end:{line:4603,column:70}},"909":{start:{line:4605,column:12},end:{line:4610,column:13}},"910":{start:{line:4606,column:16},end:{line:4609,column:59}},"911":{start:{line:4612,column:22},end:{line:4616,column:13}},"912":{start:{line:4618,column:12},end:{line:4623,column:13}},"913":{start:{line:4619,column:16},end:{line:4622,column:18}},"914":{start:{line:4624,column:12},end:{line:4624,column:35}},"915":{start:{line:4626,column:12},end:{line:4626,column:24}},"916":{start:{line:4643,column:12},end:{line:4645,column:13}},"917":{start:{line:4644,column:16},end:{line:4644,column:83}},"918":{start:{line:4647,column:20},end:{line:4647,column:63}},"919":{start:{line:4649,column:12},end:{line:4651,column:13}},"920":{start:{line:4650,column:16},end:{line:4650,column:112}},"921":{start:{line:4653,column:12},end:{line:4656,column:13}},"922":{start:{line:4654,column:16},end:{line:4655,column:35}},"923":{start:{line:4658,column:12},end:{line:4661,column:13}},"924":{start:{line:4659,column:16},end:{line:4660,column:35}},"925":{start:{line:4663,column:12},end:{line:4665,column:13}},"926":{start:{line:4664,column:16},end:{line:4664,column:120}},"927":{start:{line:4667,column:25},end:{line:4676,column:13}},"928":{start:{line:4678,column:12},end:{line:4678,column:84}},"929":{start:{line:4679,column:12},end:{line:4679,column:38}},"930":{start:{line:4681,column:12},end:{line:4681,column:24}},"931":{start:{line:4694,column:12},end:{line:4696,column:13}},"932":{start:{line:4695,column:16},end:{line:4695,column:67}},"933":{start:{line:4697,column:20},end:{line:4697,column:63}},"934":{start:{line:4698,column:12},end:{line:4700,column:13}},"935":{start:{line:4699,column:16},end:{line:4699,column:96}},"936":{start:{line:4702,column:22},end:{line:4707,column:13}},"937":{start:{line:4709,column:12},end:{line:4711,column:13}},"938":{start:{line:4710,column:16},end:{line:4710,column:36}},"939":{start:{line:4713,column:12},end:{line:4713,column:32}},"940":{start:{line:4715,column:12},end:{line:4715,column:24}},"941":{start:{line:4738,column:12},end:{line:4740,column:13}},"942":{start:{line:4739,column:16},end:{line:4739,column:63}},"943":{start:{line:4741,column:20},end:{line:4741,column:59}},"944":{start:{line:4742,column:12},end:{line:4744,column:13}},"945":{start:{line:4743,column:16},end:{line:4743,column:86}},"946":{start:{line:4745,column:31},end:{line:4745,column:33}},"947":{start:{line:4746,column:12},end:{line:4748,column:13}},"948":{start:{line:4747,column:16},end:{line:4747,column:50}},"949":{start:{line:4749,column:12},end:{line:4751,column:13}},"950":{start:{line:4750,column:16},end:{line:4750,column:46}},"951":{start:{line:4752,column:12},end:{line:4754,column:13}},"952":{start:{line:4753,column:16},end:{line:4753,column:48}},"953":{start:{line:4755,column:12},end:{line:4757,column:13}},"954":{start:{line:4756,column:16},end:{line:4756,column:56}},"955":{start:{line:4759,column:12},end:{line:4766,column:15}},"956":{start:{line:4768,column:12},end:{line:4768,column:24}},"957":{start:{line:4783,column:12},end:{line:4785,column:13}},"958":{start:{line:4784,column:16},end:{line:4784,column:63}},"959":{start:{line:4786,column:20},end:{line:4786,column:59}},"960":{start:{line:4787,column:12},end:{line:4789,column:13}},"961":{start:{line:4788,column:16},end:{line:4788,column:87}},"962":{start:{line:4791,column:12},end:{line:4798,column:15}},"963":{start:{line:4800,column:12},end:{line:4800,column:24}},"964":{start:{line:4814,column:12},end:{line:4816,column:13}},"965":{start:{line:4815,column:16},end:{line:4815,column:63}},"966":{start:{line:4817,column:20},end:{line:4817,column:59}},"967":{start:{line:4818,column:12},end:{line:4820,column:13}},"968":{start:{line:4819,column:16},end:{line:4819,column:89}},"969":{start:{line:4821,column:12},end:{line:4823,column:13}},"970":{start:{line:4822,column:16},end:{line:4822,column:120}},"971":{start:{line:4825,column:12},end:{line:4831,column:15}},"972":{start:{line:4833,column:12},end:{line:4833,column:24}},"973":{start:{line:4846,column:12},end:{line:4848,column:13}},"974":{start:{line:4847,column:16},end:{line:4847,column:67}},"975":{start:{line:4849,column:20},end:{line:4849,column:63}},"976":{start:{line:4850,column:12},end:{line:4852,column:13}},"977":{start:{line:4851,column:16},end:{line:4851,column:96}},"978":{start:{line:4854,column:22},end:{line:4858,column:13}},"979":{start:{line:4860,column:12},end:{line:4862,column:13}},"980":{start:{line:4861,column:16},end:{line:4861,column:36}},"981":{start:{line:4864,column:12},end:{line:4864,column:35}},"982":{start:{line:4866,column:12},end:{line:4866,column:24}},"983":{start:{line:4883,column:12},end:{line:4885,column:13}},"984":{start:{line:4884,column:16},end:{line:4884,column:67}},"985":{start:{line:4886,column:20},end:{line:4886,column:63}},"986":{start:{line:4887,column:12},end:{line:4889,column:13}},"987":{start:{line:4888,column:16},end:{line:4888,column:86}},"988":{start:{line:4893,column:32},end:{line:4893,column:34}},"989":{start:{line:4894,column:12},end:{line:4896,column:13}},"990":{start:{line:4895,column:16},end:{line:4895,column:51}},"991":{start:{line:4897,column:12},end:{line:4899,column:13}},"992":{start:{line:4898,column:16},end:{line:4898,column:47}},"993":{start:{line:4900,column:12},end:{line:4902,column:13}},"994":{start:{line:4901,column:16},end:{line:4901,column:49}},"995":{start:{line:4903,column:12},end:{line:4905,column:13}},"996":{start:{line:4904,column:16},end:{line:4904,column:57}},"997":{start:{line:4907,column:12},end:{line:4913,column:15}},"998":{start:{line:4915,column:12},end:{line:4915,column:24}},"999":{start:{line:4929,column:12},end:{line:4931,column:13}},"1000":{start:{line:4930,column:16},end:{line:4930,column:67}},"1001":{start:{line:4932,column:20},end:{line:4932,column:63}},"1002":{start:{line:4933,column:12},end:{line:4935,column:13}},"1003":{start:{line:4934,column:16},end:{line:4934,column:87}},"1004":{start:{line:4937,column:12},end:{line:4943,column:15}},"1005":{start:{line:4945,column:12},end:{line:4945,column:24}},"1006":{start:{line:4958,column:12},end:{line:4960,column:13}},"1007":{start:{line:4959,column:16},end:{line:4959,column:63}},"1008":{start:{line:4961,column:20},end:{line:4961,column:59}},"1009":{start:{line:4962,column:12},end:{line:4964,column:13}},"1010":{start:{line:4963,column:16},end:{line:4963,column:89}},"1011":{start:{line:4965,column:12},end:{line:4967,column:13}},"1012":{start:{line:4966,column:16},end:{line:4966,column:120}},"1013":{start:{line:4969,column:12},end:{line:4974,column:15}},"1014":{start:{line:4976,column:12},end:{line:4976,column:24}},"1015":{start:{line:4990,column:12},end:{line:4992,column:13}},"1016":{start:{line:4991,column:16},end:{line:4991,column:67}},"1017":{start:{line:4994,column:20},end:{line:4994,column:63}},"1018":{start:{line:4995,column:12},end:{line:5047,column:13}},"1019":{start:{line:5004,column:16},end:{line:5006,column:35}},"1020":{start:{line:5008,column:17},end:{line:5047,column:13}},"1021":{start:{line:5020,column:16},end:{line:5023,column:22}},"1022":{start:{line:5025,column:17},end:{line:5047,column:13}},"1023":{start:{line:5034,column:16},end:{line:5037,column:22}},"1024":{start:{line:5039,column:17},end:{line:5047,column:13}},"1025":{start:{line:5042,column:16},end:{line:5043,column:46}},"1026":{start:{line:5045,column:17},end:{line:5047,column:13}},"1027":{start:{line:5046,column:16},end:{line:5046,column:84}},"1028":{start:{line:5049,column:12},end:{line:5056,column:15}},"1029":{start:{line:5058,column:12},end:{line:5058,column:24}},"1030":{start:{line:5069,column:12},end:{line:5076,column:14}},"1031":{start:{line:5102,column:22},end:{line:5102,column:60}},"1032":{start:{line:5104,column:23},end:{line:5106,column:13}},"1033":{start:{line:5108,column:12},end:{line:5110,column:13}},"1034":{start:{line:5109,column:16},end:{line:5109,column:60}},"1035":{start:{line:5112,column:12},end:{line:5124,column:15}},"1036":{start:{line:5113,column:16},end:{line:5116,column:17}},"1037":{start:{line:5114,column:20},end:{line:5114,column:77}},"1038":{start:{line:5115,column:20},end:{line:5115,column:27}},"1039":{start:{line:5118,column:16},end:{line:5123,column:17}},"1040":{start:{line:5119,column:20},end:{line:5119,column:88}},"1041":{start:{line:5122,column:20},end:{line:5122,column:96}},"1042":{start:{line:5154,column:12},end:{line:5157,column:13}},"1043":{start:{line:5155,column:16},end:{line:5155,column:32}},"1044":{start:{line:5156,column:16},end:{line:5156,column:26}},"1045":{start:{line:5158,column:12},end:{line:5158,column:30}},"1046":{start:{line:5160,column:12},end:{line:5167,column:15}},"1047":{start:{line:5161,column:16},end:{line:5166,column:17}},"1048":{start:{line:5162,column:20},end:{line:5162,column:46}},"1049":{start:{line:5165,column:20},end:{line:5165,column:68}},"1050":{start:{line:5197,column:4},end:{line:5515,column:7}},"1051":{start:{line:5225,column:12},end:{line:5225,column:32}},"1052":{start:{line:5226,column:12},end:{line:5226,column:44}},"1053":{start:{line:5228,column:12},end:{line:5228,column:58}},"1054":{start:{line:5229,column:12},end:{line:5229,column:59}},"1055":{start:{line:5230,column:12},end:{line:5230,column:60}},"1056":{start:{line:5231,column:12},end:{line:5231,column:59}},"1057":{start:{line:5232,column:12},end:{line:5232,column:67}},"1058":{start:{line:5235,column:12},end:{line:5237,column:13}},"1059":{start:{line:5236,column:16},end:{line:5236,column:57}},"1060":{start:{line:5238,column:12},end:{line:5240,column:13}},"1061":{start:{line:5239,column:16},end:{line:5239,column:59}},"1062":{start:{line:5241,column:12},end:{line:5243,column:13}},"1063":{start:{line:5242,column:16},end:{line:5242,column:60}},"1064":{start:{line:5244,column:12},end:{line:5246,column:13}},"1065":{start:{line:5245,column:16},end:{line:5245,column:58}},"1066":{start:{line:5249,column:12},end:{line:5251,column:13}},"1067":{start:{line:5250,column:16},end:{line:5250,column:51}},"1068":{start:{line:5254,column:12},end:{line:5254,column:29}},"1069":{start:{line:5255,column:12},end:{line:5257,column:13}},"1070":{start:{line:5255,column:25},end:{line:5255,column:26}},"1071":{start:{line:5256,column:16},end:{line:5256,column:98}},"1072":{start:{line:5260,column:12},end:{line:5260,column:34}},"1073":{start:{line:5261,column:12},end:{line:5263,column:13}},"1074":{start:{line:5261,column:25},end:{line:5261,column:26}},"1075":{start:{line:5262,column:16},end:{line:5262,column:90}},"1076":{start:{line:5266,column:12},end:{line:5266,column:35}},"1077":{start:{line:5267,column:12},end:{line:5269,column:13}},"1078":{start:{line:5267,column:25},end:{line:5267,column:26}},"1079":{start:{line:5268,column:16},end:{line:5268,column:126}},"1080":{start:{line:5280,column:12},end:{line:5280,column:55}},"1081":{start:{line:5291,column:12},end:{line:5291,column:52}},"1082":{start:{line:5303,column:12},end:{line:5303,column:44}},"1083":{start:{line:5317,column:12},end:{line:5317,column:78}},"1084":{start:{line:5332,column:33},end:{line:5332,column:35}},"1085":{start:{line:5334,column:12},end:{line:5338,column:13}},"1086":{start:{line:5335,column:16},end:{line:5337,column:17}},"1087":{start:{line:5336,column:20},end:{line:5336,column:55}},"1088":{start:{line:5340,column:35},end:{line:5340,column:58}},"1089":{start:{line:5341,column:12},end:{line:5345,column:13}},"1090":{start:{line:5342,column:16},end:{line:5344,column:17}},"1091":{start:{line:5343,column:20},end:{line:5343,column:62}},"1092":{start:{line:5347,column:12},end:{line:5347,column:34}},"1093":{start:{line:5361,column:12},end:{line:5361,column:49}},"1094":{start:{line:5374,column:25},end:{line:5374,column:27}},"1095":{start:{line:5376,column:23},end:{line:5376,column:44}},"1096":{start:{line:5377,column:31},end:{line:5377,column:48}},"1097":{start:{line:5378,column:12},end:{line:5383,column:13}},"1098":{start:{line:5378,column:25},end:{line:5378,column:26}},"1099":{start:{line:5379,column:34},end:{line:5379,column:55}},"1100":{start:{line:5380,column:16},end:{line:5382,column:17}},"1101":{start:{line:5380,column:29},end:{line:5380,column:30}},"1102":{start:{line:5381,column:20},end:{line:5381,column:124}},"1103":{start:{line:5384,column:12},end:{line:5384,column:26}},"1104":{start:{line:5397,column:12},end:{line:5397,column:56}},"1105":{start:{line:5410,column:12},end:{line:5410,column:67}},"1106":{start:{line:5423,column:12},end:{line:5423,column:50}},"1107":{start:{line:5454,column:12},end:{line:5457,column:13}},"1108":{start:{line:5455,column:16},end:{line:5455,column:40}},"1109":{start:{line:5456,column:16},end:{line:5456,column:41}},"1110":{start:{line:5459,column:24},end:{line:5459,column:106}},"1111":{start:{line:5460,column:23},end:{line:5460,column:72}},"1112":{start:{line:5462,column:12},end:{line:5462,column:65}},"1113":{start:{line:5485,column:24},end:{line:5485,column:90}},"1114":{start:{line:5487,column:12},end:{line:5487,column:69}},"1115":{start:{line:5488,column:12},end:{line:5488,column:81}},"1116":{start:{line:5501,column:12},end:{line:5501,column:64}},"1117":{start:{line:5513,column:12},end:{line:5513,column:53}},"1118":{start:{line:5526,column:4},end:{line:5679,column:7}},"1119":{start:{line:5533,column:12},end:{line:5533,column:74}},"1120":{start:{line:5556,column:12},end:{line:5559,column:13}},"1121":{start:{line:5557,column:16},end:{line:5557,column:34}},"1122":{start:{line:5558,column:16},end:{line:5558,column:31}},"1123":{start:{line:5561,column:12},end:{line:5561,column:29}},"1124":{start:{line:5562,column:12},end:{line:5562,column:57}},"1125":{start:{line:5564,column:12},end:{line:5564,column:77}},"1126":{start:{line:5565,column:12},end:{line:5568,column:13}},"1127":{start:{line:5567,column:16},end:{line:5567,column:72}},"1128":{start:{line:5572,column:12},end:{line:5574,column:13}},"1129":{start:{line:5573,column:16},end:{line:5573,column:35}},"1130":{start:{line:5576,column:38},end:{line:5576,column:75}},"1131":{start:{line:5578,column:12},end:{line:5578,column:66}},"1132":{start:{line:5579,column:12},end:{line:5579,column:63}},"1133":{start:{line:5580,column:12},end:{line:5580,column:63}},"1134":{start:{line:5583,column:23},end:{line:5583,column:50}},"1135":{start:{line:5584,column:12},end:{line:5584,column:30}},"1136":{start:{line:5585,column:12},end:{line:5587,column:13}},"1137":{start:{line:5585,column:25},end:{line:5585,column:26}},"1138":{start:{line:5586,column:16},end:{line:5586,column:75}},"1139":{start:{line:5589,column:12},end:{line:5589,column:56}},"1140":{start:{line:5590,column:12},end:{line:5590,column:56}},"1141":{start:{line:5601,column:12},end:{line:5601,column:47}},"1142":{start:{line:5613,column:12},end:{line:5617,column:13}},"1143":{start:{line:5613,column:25},end:{line:5613,column:26}},"1144":{start:{line:5614,column:16},end:{line:5616,column:17}},"1145":{start:{line:5615,column:20},end:{line:5615,column:43}},"1146":{start:{line:5618,column:12},end:{line:5618,column:24}},"1147":{start:{line:5629,column:12},end:{line:5629,column:58}},"1148":{start:{line:5645,column:12},end:{line:5648,column:13}},"1149":{start:{line:5646,column:16},end:{line:5646,column:33}},"1150":{start:{line:5647,column:16},end:{line:5647,column:27}},"1151":{start:{line:5649,column:12},end:{line:5649,column:49}},"1152":{start:{line:5651,column:12},end:{line:5654,column:13}},"1153":{start:{line:5652,column:16},end:{line:5652,column:93}},"1154":{start:{line:5653,column:16},end:{line:5653,column:23}},"1155":{start:{line:5655,column:12},end:{line:5658,column:13}},"1156":{start:{line:5656,column:16},end:{line:5656,column:81}},"1157":{start:{line:5657,column:16},end:{line:5657,column:23}},"1158":{start:{line:5660,column:31},end:{line:5666,column:13}},"1159":{start:{line:5668,column:23},end:{line:5668,column:27}},"1160":{start:{line:5669,column:12},end:{line:5677,column:15}},"1161":{start:{line:5670,column:16},end:{line:5676,column:17}},"1162":{start:{line:5671,column:20},end:{line:5671,column:40}},"1163":{start:{line:5674,column:45},end:{line:5674,column:98}},"1164":{start:{line:5675,column:20},end:{line:5675,column:142}},"1165":{start:{line:5690,column:4},end:{line:5768,column:7}},"1166":{start:{line:5697,column:12},end:{line:5697,column:36}},"1167":{start:{line:5713,column:12},end:{line:5713,column:40}},"1168":{start:{line:5714,column:12},end:{line:5714,column:57}},"1169":{start:{line:5715,column:12},end:{line:5715,column:56}},"1170":{start:{line:5733,column:12},end:{line:5736,column:13}},"1171":{start:{line:5734,column:16},end:{line:5734,column:34}},"1172":{start:{line:5735,column:16},end:{line:5735,column:28}},"1173":{start:{line:5738,column:12},end:{line:5738,column:34}},"1174":{start:{line:5739,column:12},end:{line:5739,column:48}},"1175":{start:{line:5740,column:12},end:{line:5740,column:43}},"1176":{start:{line:5742,column:23},end:{line:5742,column:27}},"1177":{start:{line:5743,column:12},end:{line:5751,column:15}},"1178":{start:{line:5744,column:16},end:{line:5750,column:17}},"1179":{start:{line:5745,column:20},end:{line:5745,column:34}},"1180":{start:{line:5748,column:36},end:{line:5748,column:137}},"1181":{start:{line:5749,column:20},end:{line:5749,column:46}},"1182":{start:{line:5765,column:34},end:{line:5765,column:70}},"1183":{start:{line:5766,column:12},end:{line:5766,column:88}},"1184":{start:{line:5772,column:4},end:{line:5802,column:7}},"1185":{start:{line:5774,column:12},end:{line:5774,column:34}},"1186":{start:{line:5776,column:12},end:{line:5776,column:38}},"1187":{start:{line:5777,column:12},end:{line:5777,column:50}},"1188":{start:{line:5778,column:12},end:{line:5778,column:29}},"1189":{start:{line:5783,column:12},end:{line:5783,column:49}},"1190":{start:{line:5785,column:23},end:{line:5785,column:27}},"1191":{start:{line:5786,column:25},end:{line:5789,column:13}},"1192":{start:{line:5790,column:12},end:{line:5800,column:15}},"1193":{start:{line:5791,column:16},end:{line:5799,column:17}},"1194":{start:{line:5792,column:20},end:{line:5792,column:34}},"1195":{start:{line:5795,column:38},end:{line:5795,column:76}},"1196":{start:{line:5796,column:20},end:{line:5796,column:47}},"1197":{start:{line:5798,column:20},end:{line:5798,column:60}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:16,column:1},end:{line:16,column:2}},loc:{start:{line:16,column:12},end:{line:5803,column:1}},line:16},"1":{name:"(anonymous_1)",decl:{start:{line:38,column:14},end:{line:38,column:15}},loc:{start:{line:38,column:25},end:{line:40,column:9}},line:38},"2":{name:"(anonymous_2)",decl:{start:{line:72,column:14},end:{line:72,column:15}},loc:{start:{line:72,column:25},end:{line:88,column:9}},line:72},"3":{name:"(anonymous_3)",decl:{start:{line:105,column:20},end:{line:105,column:21}},loc:{start:{line:105,column:41},end:{line:117,column:9}},line:105},"4":{name:"(anonymous_4)",decl:{start:{line:135,column:14},end:{line:135,column:15}},loc:{start:{line:135,column:25},end:{line:137,column:9}},line:135},"5":{name:"(anonymous_5)",decl:{start:{line:163,column:24},end:{line:163,column:25}},loc:{start:{line:163,column:44},end:{line:165,column:9}},line:163},"6":{name:"(anonymous_6)",decl:{start:{line:191,column:17},end:{line:191,column:18}},loc:{start:{line:191,column:37},end:{line:193,column:9}},line:191},"7":{name:"(anonymous_7)",decl:{start:{line:217,column:23},end:{line:217,column:24}},loc:{start:{line:217,column:43},end:{line:219,column:9}},line:217},"8":{name:"(anonymous_8)",decl:{start:{line:243,column:26},end:{line:243,column:27}},loc:{start:{line:243,column:46},end:{line:245,column:9}},line:243},"9":{name:"(anonymous_9)",decl:{start:{line:270,column:26},end:{line:270,column:27}},loc:{start:{line:270,column:46},end:{line:272,column:9}},line:270},"10":{name:"(anonymous_10)",decl:{start:{line:299,column:14},end:{line:299,column:15}},loc:{start:{line:299,column:34},end:{line:301,column:9}},line:299},"11":{name:"(anonymous_11)",decl:{start:{line:311,column:20},end:{line:311,column:21}},loc:{start:{line:311,column:40},end:{line:313,column:9}},line:311},"12":{name:"(anonymous_12)",decl:{start:{line:336,column:15},end:{line:336,column:16}},loc:{start:{line:336,column:26},end:{line:338,column:9}},line:336},"13":{name:"(anonymous_13)",decl:{start:{line:365,column:15},end:{line:365,column:16}},loc:{start:{line:365,column:35},end:{line:367,column:9}},line:365},"14":{name:"(anonymous_14)",decl:{start:{line:396,column:16},end:{line:396,column:17}},loc:{start:{line:396,column:61},end:{line:404,column:9}},line:396},"15":{name:"(anonymous_15)",decl:{start:{line:419,column:16},end:{line:419,column:17}},loc:{start:{line:419,column:51},end:{line:426,column:9}},line:419},"16":{name:"(anonymous_16)",decl:{start:{line:452,column:23},end:{line:452,column:24}},loc:{start:{line:452,column:68},end:{line:460,column:9}},line:452},"17":{name:"(anonymous_17)",decl:{start:{line:477,column:21},end:{line:477,column:22}},loc:{start:{line:477,column:40},end:{line:500,column:9}},line:477},"18":{name:"(anonymous_18)",decl:{start:{line:478,column:35},end:{line:478,column:36}},loc:{start:{line:478,column:46},end:{line:478,column:48}},line:478},"19":{name:"(anonymous_19)",decl:{start:{line:481,column:54},end:{line:481,column:55}},loc:{start:{line:481,column:78},end:{line:497,column:13}},line:481},"20":{name:"(anonymous_20)",decl:{start:{line:488,column:31},end:{line:488,column:32}},loc:{start:{line:488,column:42},end:{line:495,column:21}},line:488},"21":{name:"(anonymous_21)",decl:{start:{line:516,column:20},end:{line:516,column:21}},loc:{start:{line:516,column:39},end:{line:521,column:9}},line:516},"22":{name:"(anonymous_22)",decl:{start:{line:517,column:35},end:{line:517,column:36}},loc:{start:{line:517,column:46},end:{line:517,column:48}},line:517},"23":{name:"(anonymous_23)",decl:{start:{line:543,column:15},end:{line:543,column:16}},loc:{start:{line:543,column:49},end:{line:562,column:9}},line:543},"24":{name:"(anonymous_24)",decl:{start:{line:549,column:35},end:{line:549,column:36}},loc:{start:{line:549,column:46},end:{line:549,column:48}},line:549},"25":{name:"(anonymous_25)",decl:{start:{line:554,column:50},end:{line:554,column:51}},loc:{start:{line:554,column:74},end:{line:561,column:13}},line:554},"26":{name:"(anonymous_26)",decl:{start:{line:580,column:19},end:{line:580,column:20}},loc:{start:{line:580,column:53},end:{line:601,column:9}},line:580},"27":{name:"(anonymous_27)",decl:{start:{line:586,column:35},end:{line:586,column:36}},loc:{start:{line:586,column:46},end:{line:586,column:48}},line:586},"28":{name:"(anonymous_28)",decl:{start:{line:592,column:53},end:{line:592,column:54}},loc:{start:{line:592,column:77},end:{line:600,column:13}},line:592},"29":{name:"(anonymous_29)",decl:{start:{line:624,column:13},end:{line:624,column:14}},loc:{start:{line:624,column:47},end:{line:663,column:9}},line:624},"30":{name:"(anonymous_30)",decl:{start:{line:630,column:35},end:{line:630,column:36}},loc:{start:{line:630,column:46},end:{line:630,column:48}},line:630},"31":{name:"(anonymous_31)",decl:{start:{line:652,column:16},end:{line:652,column:17}},loc:{start:{line:652,column:40},end:{line:659,column:17}},line:652},"32":{name:"(anonymous_32)",decl:{start:{line:685,column:14},end:{line:685,column:15}},loc:{start:{line:685,column:47},end:{line:703,column:9}},line:685},"33":{name:"(anonymous_33)",decl:{start:{line:721,column:13},end:{line:721,column:14}},loc:{start:{line:721,column:49},end:{line:735,column:9}},line:721},"34":{name:"(anonymous_34)",decl:{start:{line:737,column:16},end:{line:737,column:17}},loc:{start:{line:737,column:42},end:{line:750,column:9}},line:737},"35":{name:"(anonymous_35)",decl:{start:{line:768,column:14},end:{line:768,column:15}},loc:{start:{line:768,column:50},end:{line:782,column:9}},line:768},"36":{name:"(anonymous_36)",decl:{start:{line:800,column:13},end:{line:800,column:14}},loc:{start:{line:800,column:49},end:{line:814,column:9}},line:800},"37":{name:"(anonymous_37)",decl:{start:{line:843,column:14},end:{line:843,column:15}},loc:{start:{line:843,column:49},end:{line:858,column:9}},line:843},"38":{name:"(anonymous_38)",decl:{start:{line:865,column:14},end:{line:865,column:15}},loc:{start:{line:865,column:25},end:{line:867,column:9}},line:865},"39":{name:"(anonymous_39)",decl:{start:{line:877,column:15},end:{line:877,column:16}},loc:{start:{line:877,column:36},end:{line:880,column:9}},line:877},"40":{name:"(anonymous_40)",decl:{start:{line:891,column:15},end:{line:891,column:16}},loc:{start:{line:891,column:34},end:{line:893,column:9}},line:891},"41":{name:"(anonymous_41)",decl:{start:{line:902,column:20},end:{line:902,column:21}},loc:{start:{line:902,column:31},end:{line:904,column:9}},line:902},"42":{name:"(anonymous_42)",decl:{start:{line:913,column:15},end:{line:913,column:16}},loc:{start:{line:913,column:26},end:{line:915,column:9}},line:913},"43":{name:"(anonymous_43)",decl:{start:{line:953,column:14},end:{line:953,column:15}},loc:{start:{line:953,column:49},end:{line:977,column:9}},line:953},"44":{name:"(anonymous_44)",decl:{start:{line:987,column:15},end:{line:987,column:16}},loc:{start:{line:987,column:36},end:{line:1009,column:9}},line:987},"45":{name:"(anonymous_45)",decl:{start:{line:1019,column:16},end:{line:1019,column:17}},loc:{start:{line:1019,column:27},end:{line:1021,column:9}},line:1019},"46":{name:"(anonymous_46)",decl:{start:{line:1031,column:13},end:{line:1031,column:14}},loc:{start:{line:1031,column:24},end:{line:1033,column:9}},line:1031},"47":{name:"(anonymous_47)",decl:{start:{line:1043,column:15},end:{line:1043,column:16}},loc:{start:{line:1043,column:26},end:{line:1045,column:9}},line:1043},"48":{name:"(anonymous_48)",decl:{start:{line:1054,column:16},end:{line:1054,column:17}},loc:{start:{line:1054,column:27},end:{line:1056,column:9}},line:1054},"49":{name:"(anonymous_49)",decl:{start:{line:1065,column:17},end:{line:1065,column:18}},loc:{start:{line:1065,column:28},end:{line:1067,column:9}},line:1065},"50":{name:"(anonymous_50)",decl:{start:{line:1076,column:19},end:{line:1076,column:20}},loc:{start:{line:1076,column:30},end:{line:1078,column:9}},line:1076},"51":{name:"(anonymous_51)",decl:{start:{line:1095,column:15},end:{line:1095,column:16}},loc:{start:{line:1095,column:43},end:{line:1114,column:9}},line:1095},"52":{name:"(anonymous_52)",decl:{start:{line:1100,column:35},end:{line:1100,column:36}},loc:{start:{line:1100,column:46},end:{line:1100,column:48}},line:1100},"53":{name:"(anonymous_53)",decl:{start:{line:1105,column:41},end:{line:1105,column:42}},loc:{start:{line:1105,column:65},end:{line:1113,column:13}},line:1105},"54":{name:"(anonymous_54)",decl:{start:{line:1124,column:16},end:{line:1124,column:17}},loc:{start:{line:1124,column:35},end:{line:1131,column:9}},line:1124},"55":{name:"(anonymous_55)",decl:{start:{line:1125,column:35},end:{line:1125,column:36}},loc:{start:{line:1125,column:46},end:{line:1125,column:48}},line:1125},"56":{name:"(anonymous_56)",decl:{start:{line:1128,column:36},end:{line:1128,column:37}},loc:{start:{line:1128,column:50},end:{line:1130,column:13}},line:1128},"57":{name:"(anonymous_57)",decl:{start:{line:1142,column:16},end:{line:1142,column:17}},loc:{start:{line:1142,column:42},end:{line:1171,column:9}},line:1142},"58":{name:"(anonymous_58)",decl:{start:{line:1143,column:35},end:{line:1143,column:36}},loc:{start:{line:1143,column:46},end:{line:1143,column:48}},line:1143},"59":{name:"(anonymous_59)",decl:{start:{line:1150,column:43},end:{line:1150,column:44}},loc:{start:{line:1150,column:67},end:{line:1168,column:13}},line:1150},"60":{name:"(anonymous_60)",decl:{start:{line:1156,column:31},end:{line:1156,column:32}},loc:{start:{line:1156,column:42},end:{line:1163,column:21}},line:1156},"61":{name:"(anonymous_61)",decl:{start:{line:1181,column:17},end:{line:1181,column:18}},loc:{start:{line:1181,column:36},end:{line:1193,column:9}},line:1181},"62":{name:"(anonymous_62)",decl:{start:{line:1182,column:35},end:{line:1182,column:36}},loc:{start:{line:1182,column:46},end:{line:1182,column:48}},line:1182},"63":{name:"(anonymous_63)",decl:{start:{line:1185,column:37},end:{line:1185,column:38}},loc:{start:{line:1185,column:61},end:{line:1192,column:13}},line:1185},"64":{name:"(anonymous_64)",decl:{start:{line:1203,column:16},end:{line:1203,column:17}},loc:{start:{line:1203,column:35},end:{line:1215,column:9}},line:1203},"65":{name:"(anonymous_65)",decl:{start:{line:1204,column:35},end:{line:1204,column:36}},loc:{start:{line:1204,column:46},end:{line:1204,column:48}},line:1204},"66":{name:"(anonymous_66)",decl:{start:{line:1207,column:36},end:{line:1207,column:37}},loc:{start:{line:1207,column:60},end:{line:1214,column:13}},line:1207},"67":{name:"(anonymous_67)",decl:{start:{line:1225,column:16},end:{line:1225,column:17}},loc:{start:{line:1225,column:35},end:{line:1237,column:9}},line:1225},"68":{name:"(anonymous_68)",decl:{start:{line:1226,column:35},end:{line:1226,column:36}},loc:{start:{line:1226,column:46},end:{line:1226,column:48}},line:1226},"69":{name:"(anonymous_69)",decl:{start:{line:1229,column:37},end:{line:1229,column:38}},loc:{start:{line:1229,column:61},end:{line:1236,column:13}},line:1229},"70":{name:"(anonymous_70)",decl:{start:{line:1272,column:14},end:{line:1272,column:15}},loc:{start:{line:1272,column:49},end:{line:1290,column:9}},line:1272},"71":{name:"(anonymous_71)",decl:{start:{line:1300,column:27},end:{line:1300,column:28}},loc:{start:{line:1300,column:43},end:{line:1302,column:9}},line:1300},"72":{name:"(anonymous_72)",decl:{start:{line:1313,column:15},end:{line:1313,column:16}},loc:{start:{line:1313,column:36},end:{line:1337,column:9}},line:1313},"73":{name:"(anonymous_73)",decl:{start:{line:1347,column:15},end:{line:1347,column:16}},loc:{start:{line:1347,column:26},end:{line:1349,column:9}},line:1347},"74":{name:"(anonymous_74)",decl:{start:{line:1358,column:16},end:{line:1358,column:17}},loc:{start:{line:1358,column:27},end:{line:1360,column:9}},line:1358},"75":{name:"(anonymous_75)",decl:{start:{line:1369,column:17},end:{line:1369,column:18}},loc:{start:{line:1369,column:28},end:{line:1371,column:9}},line:1369},"76":{name:"(anonymous_76)",decl:{start:{line:1388,column:15},end:{line:1388,column:16}},loc:{start:{line:1388,column:43},end:{line:1412,column:9}},line:1388},"77":{name:"(anonymous_77)",decl:{start:{line:1393,column:35},end:{line:1393,column:36}},loc:{start:{line:1393,column:46},end:{line:1393,column:48}},line:1393},"78":{name:"(anonymous_78)",decl:{start:{line:1401,column:44},end:{line:1401,column:45}},loc:{start:{line:1401,column:68},end:{line:1409,column:13}},line:1401},"79":{name:"(anonymous_79)",decl:{start:{line:1414,column:18},end:{line:1414,column:19}},loc:{start:{line:1414,column:42},end:{line:1425,column:9}},line:1414},"80":{name:"(anonymous_80)",decl:{start:{line:1448,column:14},end:{line:1448,column:15}},loc:{start:{line:1448,column:38},end:{line:1505,column:9}},line:1448},"81":{name:"(anonymous_81)",decl:{start:{line:1524,column:16},end:{line:1524,column:17}},loc:{start:{line:1524,column:43},end:{line:1557,column:9}},line:1524},"82":{name:"(anonymous_82)",decl:{start:{line:1525,column:35},end:{line:1525,column:36}},loc:{start:{line:1525,column:46},end:{line:1525,column:48}},line:1525},"83":{name:"(anonymous_83)",decl:{start:{line:1527,column:44},end:{line:1527,column:45}},loc:{start:{line:1527,column:68},end:{line:1554,column:13}},line:1527},"84":{name:"(anonymous_84)",decl:{start:{line:1541,column:37},end:{line:1541,column:38}},loc:{start:{line:1541,column:48},end:{line:1548,column:25}},line:1541},"85":{name:"(anonymous_85)",decl:{start:{line:1574,column:14},end:{line:1574,column:15}},loc:{start:{line:1574,column:33},end:{line:1578,column:9}},line:1574},"86":{name:"(anonymous_86)",decl:{start:{line:1575,column:35},end:{line:1575,column:36}},loc:{start:{line:1575,column:46},end:{line:1575,column:48}},line:1575},"87":{name:"(anonymous_87)",decl:{start:{line:1595,column:14},end:{line:1595,column:15}},loc:{start:{line:1595,column:25},end:{line:1597,column:9}},line:1595},"88":{name:"(anonymous_88)",decl:{start:{line:1613,column:14},end:{line:1613,column:15}},loc:{start:{line:1613,column:49},end:{line:1621,column:9}},line:1613},"89":{name:"(anonymous_89)",decl:{start:{line:1636,column:20},end:{line:1636,column:21}},loc:{start:{line:1636,column:31},end:{line:1638,column:9}},line:1636},"90":{name:"(anonymous_90)",decl:{start:{line:1656,column:21},end:{line:1656,column:22}},loc:{start:{line:1656,column:40},end:{line:1665,column:9}},line:1656},"91":{name:"(anonymous_91)",decl:{start:{line:1657,column:35},end:{line:1657,column:36}},loc:{start:{line:1657,column:46},end:{line:1657,column:48}},line:1657},"92":{name:"(anonymous_92)",decl:{start:{line:1660,column:51},end:{line:1660,column:52}},loc:{start:{line:1660,column:65},end:{line:1662,column:13}},line:1660},"93":{name:"(anonymous_93)",decl:{start:{line:1688,column:18},end:{line:1688,column:19}},loc:{start:{line:1688,column:46},end:{line:1711,column:9}},line:1688},"94":{name:"(anonymous_94)",decl:{start:{line:1694,column:35},end:{line:1694,column:36}},loc:{start:{line:1694,column:46},end:{line:1694,column:48}},line:1694},"95":{name:"(anonymous_95)",decl:{start:{line:1698,column:53},end:{line:1698,column:54}},loc:{start:{line:1698,column:77},end:{line:1708,column:13}},line:1698},"96":{name:"(anonymous_96)",decl:{start:{line:1725,column:25},end:{line:1725,column:26}},loc:{start:{line:1725,column:36},end:{line:1727,column:9}},line:1725},"97":{name:"(anonymous_97)",decl:{start:{line:1748,column:17},end:{line:1748,column:18}},loc:{start:{line:1748,column:45},end:{line:1777,column:9}},line:1748},"98":{name:"(anonymous_98)",decl:{start:{line:1754,column:35},end:{line:1754,column:36}},loc:{start:{line:1754,column:46},end:{line:1754,column:48}},line:1754},"99":{name:"(anonymous_99)",decl:{start:{line:1758,column:48},end:{line:1758,column:49}},loc:{start:{line:1758,column:72},end:{line:1776,column:13}},line:1758},"100":{name:"(anonymous_100)",decl:{start:{line:1794,column:22},end:{line:1794,column:23}},loc:{start:{line:1794,column:41},end:{line:1801,column:9}},line:1794},"101":{name:"(anonymous_101)",decl:{start:{line:1795,column:35},end:{line:1795,column:36}},loc:{start:{line:1795,column:46},end:{line:1795,column:48}},line:1795},"102":{name:"(anonymous_102)",decl:{start:{line:1798,column:44},end:{line:1798,column:45}},loc:{start:{line:1798,column:68},end:{line:1800,column:13}},line:1798},"103":{name:"(anonymous_103)",decl:{start:{line:1815,column:16},end:{line:1815,column:17}},loc:{start:{line:1815,column:43},end:{line:1842,column:9}},line:1815},"104":{name:"(anonymous_104)",decl:{start:{line:1820,column:37},end:{line:1820,column:38}},loc:{start:{line:1820,column:59},end:{line:1835,column:17}},line:1820},"105":{name:"(anonymous_105)",decl:{start:{line:1826,column:52},end:{line:1826,column:53}},loc:{start:{line:1826,column:63},end:{line:1833,column:25}},line:1826},"106":{name:"(anonymous_106)",decl:{start:{line:1860,column:14},end:{line:1860,column:15}},loc:{start:{line:1860,column:25},end:{line:1862,column:9}},line:1860},"107":{name:"(anonymous_107)",decl:{start:{line:1872,column:27},end:{line:1872,column:28}},loc:{start:{line:1872,column:43},end:{line:1875,column:9}},line:1872},"108":{name:"(anonymous_108)",decl:{start:{line:1890,column:14},end:{line:1890,column:15}},loc:{start:{line:1890,column:43},end:{line:1892,column:9}},line:1890},"109":{name:"(anonymous_109)",decl:{start:{line:1909,column:14},end:{line:1909,column:15}},loc:{start:{line:1909,column:26},end:{line:1911,column:9}},line:1909},"110":{name:"(anonymous_110)",decl:{start:{line:1927,column:14},end:{line:1927,column:15}},loc:{start:{line:1927,column:50},end:{line:1930,column:9}},line:1927},"111":{name:"(anonymous_111)",decl:{start:{line:1956,column:14},end:{line:1956,column:15}},loc:{start:{line:1956,column:25},end:{line:1958,column:9}},line:1956},"112":{name:"(anonymous_112)",decl:{start:{line:1970,column:27},end:{line:1970,column:28}},loc:{start:{line:1970,column:43},end:{line:1973,column:9}},line:1970},"113":{name:"(anonymous_113)",decl:{start:{line:1988,column:14},end:{line:1988,column:15}},loc:{start:{line:1988,column:43},end:{line:1990,column:9}},line:1988},"114":{name:"(anonymous_114)",decl:{start:{line:2008,column:14},end:{line:2008,column:15}},loc:{start:{line:2008,column:25},end:{line:2010,column:9}},line:2008},"115":{name:"(anonymous_115)",decl:{start:{line:2020,column:17},end:{line:2020,column:18}},loc:{start:{line:2020,column:28},end:{line:2022,column:9}},line:2020},"116":{name:"(anonymous_116)",decl:{start:{line:2030,column:19},end:{line:2030,column:20}},loc:{start:{line:2030,column:30},end:{line:2032,column:9}},line:2030},"117":{name:"(anonymous_117)",decl:{start:{line:2043,column:22},end:{line:2043,column:23}},loc:{start:{line:2043,column:33},end:{line:2046,column:9}},line:2043},"118":{name:"(anonymous_118)",decl:{start:{line:2056,column:24},end:{line:2056,column:25}},loc:{start:{line:2056,column:35},end:{line:2058,column:9}},line:2056},"119":{name:"(anonymous_119)",decl:{start:{line:2066,column:25},end:{line:2066,column:26}},loc:{start:{line:2066,column:36},end:{line:2068,column:9}},line:2066},"120":{name:"(anonymous_120)",decl:{start:{line:2077,column:18},end:{line:2077,column:19}},loc:{start:{line:2077,column:29},end:{line:2079,column:9}},line:2077},"121":{name:"(anonymous_121)",decl:{start:{line:2087,column:13},end:{line:2087,column:14}},loc:{start:{line:2087,column:24},end:{line:2089,column:9}},line:2087},"122":{name:"(anonymous_122)",decl:{start:{line:2097,column:21},end:{line:2097,column:22}},loc:{start:{line:2097,column:32},end:{line:2099,column:9}},line:2097},"123":{name:"(anonymous_123)",decl:{start:{line:2109,column:29},end:{line:2109,column:30}},loc:{start:{line:2109,column:40},end:{line:2111,column:9}},line:2109},"124":{name:"(anonymous_124)",decl:{start:{line:2121,column:29},end:{line:2121,column:30}},loc:{start:{line:2121,column:40},end:{line:2123,column:9}},line:2121},"125":{name:"(anonymous_125)",decl:{start:{line:2139,column:14},end:{line:2139,column:15}},loc:{start:{line:2139,column:49},end:{line:2142,column:9}},line:2139},"126":{name:"(anonymous_126)",decl:{start:{line:2160,column:14},end:{line:2160,column:15}},loc:{start:{line:2160,column:25},end:{line:2162,column:9}},line:2160},"127":{name:"(anonymous_127)",decl:{start:{line:2172,column:15},end:{line:2172,column:16}},loc:{start:{line:2172,column:26},end:{line:2174,column:9}},line:2172},"128":{name:"(anonymous_128)",decl:{start:{line:2193,column:14},end:{line:2193,column:15}},loc:{start:{line:2193,column:42},end:{line:2221,column:9}},line:2193},"129":{name:"(anonymous_129)",decl:{start:{line:2199,column:35},end:{line:2199,column:36}},loc:{start:{line:2199,column:46},end:{line:2199,column:48}},line:2199},"130":{name:"(anonymous_130)",decl:{start:{line:2203,column:41},end:{line:2203,column:42}},loc:{start:{line:2203,column:65},end:{line:2220,column:13}},line:2203},"131":{name:"(anonymous_131)",decl:{start:{line:2237,column:14},end:{line:2237,column:15}},loc:{start:{line:2237,column:49},end:{line:2242,column:9}},line:2237},"132":{name:"(anonymous_132)",decl:{start:{line:2261,column:14},end:{line:2261,column:15}},loc:{start:{line:2261,column:25},end:{line:2263,column:9}},line:2261},"133":{name:"(anonymous_133)",decl:{start:{line:2273,column:27},end:{line:2273,column:28}},loc:{start:{line:2273,column:43},end:{line:2276,column:9}},line:2273},"134":{name:"(anonymous_134)",decl:{start:{line:2283,column:16},end:{line:2283,column:17}},loc:{start:{line:2283,column:27},end:{line:2285,column:9}},line:2283},"135":{name:"(anonymous_135)",decl:{start:{line:2300,column:14},end:{line:2300,column:15}},loc:{start:{line:2300,column:43},end:{line:2305,column:9}},line:2300},"136":{name:"(anonymous_136)",decl:{start:{line:2330,column:14},end:{line:2330,column:15}},loc:{start:{line:2330,column:25},end:{line:2332,column:9}},line:2330},"137":{name:"(anonymous_137)",decl:{start:{line:2344,column:14},end:{line:2344,column:15}},loc:{start:{line:2344,column:38},end:{line:2350,column:9}},line:2344},"138":{name:"(anonymous_138)",decl:{start:{line:2367,column:19},end:{line:2367,column:20}},loc:{start:{line:2367,column:38},end:{line:2379,column:9}},line:2367},"139":{name:"(anonymous_139)",decl:{start:{line:2368,column:35},end:{line:2368,column:36}},loc:{start:{line:2368,column:46},end:{line:2368,column:48}},line:2368},"140":{name:"(anonymous_140)",decl:{start:{line:2371,column:41},end:{line:2371,column:42}},loc:{start:{line:2371,column:65},end:{line:2378,column:13}},line:2371},"141":{name:"(anonymous_141)",decl:{start:{line:2396,column:20},end:{line:2396,column:21}},loc:{start:{line:2396,column:39},end:{line:2408,column:9}},line:2396},"142":{name:"(anonymous_142)",decl:{start:{line:2397,column:35},end:{line:2397,column:36}},loc:{start:{line:2397,column:46},end:{line:2397,column:48}},line:2397},"143":{name:"(anonymous_143)",decl:{start:{line:2400,column:42},end:{line:2400,column:43}},loc:{start:{line:2400,column:66},end:{line:2407,column:13}},line:2400},"144":{name:"(anonymous_144)",decl:{start:{line:2434,column:14},end:{line:2434,column:15}},loc:{start:{line:2434,column:25},end:{line:2436,column:9}},line:2434},"145":{name:"(anonymous_145)",decl:{start:{line:2446,column:27},end:{line:2446,column:28}},loc:{start:{line:2446,column:43},end:{line:2448,column:9}},line:2446},"146":{name:"(anonymous_146)",decl:{start:{line:2459,column:14},end:{line:2459,column:15}},loc:{start:{line:2459,column:32},end:{line:2461,column:9}},line:2459},"147":{name:"(anonymous_147)",decl:{start:{line:2477,column:14},end:{line:2477,column:15}},loc:{start:{line:2477,column:25},end:{line:2479,column:9}},line:2477},"148":{name:"(anonymous_148)",decl:{start:{line:2490,column:14},end:{line:2490,column:15}},loc:{start:{line:2490,column:32},end:{line:2493,column:9}},line:2490},"149":{name:"(anonymous_149)",decl:{start:{line:2510,column:14},end:{line:2510,column:15}},loc:{start:{line:2510,column:25},end:{line:2512,column:9}},line:2510},"150":{name:"(anonymous_150)",decl:{start:{line:2524,column:14},end:{line:2524,column:15}},loc:{start:{line:2524,column:38},end:{line:2527,column:9}},line:2524},"151":{name:"(anonymous_151)",decl:{start:{line:2553,column:14},end:{line:2553,column:15}},loc:{start:{line:2553,column:25},end:{line:2555,column:9}},line:2553},"152":{name:"(anonymous_152)",decl:{start:{line:2565,column:27},end:{line:2565,column:28}},loc:{start:{line:2565,column:43},end:{line:2567,column:9}},line:2565},"153":{name:"(anonymous_153)",decl:{start:{line:2578,column:14},end:{line:2578,column:15}},loc:{start:{line:2578,column:32},end:{line:2580,column:9}},line:2578},"154":{name:"(anonymous_154)",decl:{start:{line:2592,column:16},end:{line:2592,column:17}},loc:{start:{line:2592,column:43},end:{line:2617,column:9}},line:2592},"155":{name:"(anonymous_155)",decl:{start:{line:2593,column:35},end:{line:2593,column:36}},loc:{start:{line:2593,column:46},end:{line:2593,column:48}},line:2593},"156":{name:"(anonymous_156)",decl:{start:{line:2596,column:44},end:{line:2596,column:45}},loc:{start:{line:2596,column:68},end:{line:2614,column:13}},line:2596},"157":{name:"(anonymous_157)",decl:{start:{line:2605,column:33},end:{line:2605,column:34}},loc:{start:{line:2605,column:44},end:{line:2612,column:21}},line:2605},"158":{name:"(anonymous_158)",decl:{start:{line:2634,column:14},end:{line:2634,column:15}},loc:{start:{line:2634,column:25},end:{line:2636,column:9}},line:2634},"159":{name:"(anonymous_159)",decl:{start:{line:2652,column:14},end:{line:2652,column:15}},loc:{start:{line:2652,column:49},end:{line:2655,column:9}},line:2652},"160":{name:"(anonymous_160)",decl:{start:{line:2672,column:14},end:{line:2672,column:15}},loc:{start:{line:2672,column:25},end:{line:2674,column:9}},line:2672},"161":{name:"(anonymous_161)",decl:{start:{line:2684,column:27},end:{line:2684,column:28}},loc:{start:{line:2684,column:43},end:{line:2687,column:9}},line:2684},"162":{name:"(anonymous_162)",decl:{start:{line:2702,column:14},end:{line:2702,column:15}},loc:{start:{line:2702,column:43},end:{line:2704,column:9}},line:2702},"163":{name:"(anonymous_163)",decl:{start:{line:2720,column:14},end:{line:2720,column:15}},loc:{start:{line:2720,column:25},end:{line:2722,column:9}},line:2720},"164":{name:"(anonymous_164)",decl:{start:{line:2738,column:14},end:{line:2738,column:15}},loc:{start:{line:2738,column:49},end:{line:2743,column:9}},line:2738},"165":{name:"(anonymous_165)",decl:{start:{line:2766,column:21},end:{line:2766,column:22}},loc:{start:{line:2766,column:55},end:{line:2782,column:9}},line:2766},"166":{name:"(anonymous_166)",decl:{start:{line:2772,column:35},end:{line:2772,column:36}},loc:{start:{line:2772,column:46},end:{line:2772,column:48}},line:2772},"167":{name:"(anonymous_167)",decl:{start:{line:2779,column:51},end:{line:2779,column:52}},loc:{start:{line:2779,column:73},end:{line:2781,column:13}},line:2779},"168":{name:"(anonymous_168)",decl:{start:{line:2784,column:16},end:{line:2784,column:17}},loc:{start:{line:2784,column:35},end:{line:2791,column:9}},line:2784},"169":{name:"(anonymous_169)",decl:{start:{line:2808,column:14},end:{line:2808,column:15}},loc:{start:{line:2808,column:25},end:{line:2810,column:9}},line:2808},"170":{name:"(anonymous_170)",decl:{start:{line:2820,column:27},end:{line:2820,column:28}},loc:{start:{line:2820,column:43},end:{line:2823,column:9}},line:2820},"171":{name:"(anonymous_171)",decl:{start:{line:2838,column:14},end:{line:2838,column:15}},loc:{start:{line:2838,column:43},end:{line:2840,column:9}},line:2838},"172":{name:"(anonymous_172)",decl:{start:{line:2859,column:16},end:{line:2859,column:17}},loc:{start:{line:2859,column:49},end:{line:2872,column:9}},line:2859},"173":{name:"(anonymous_173)",decl:{start:{line:2889,column:14},end:{line:2889,column:15}},loc:{start:{line:2889,column:25},end:{line:2892,column:9}},line:2889},"174":{name:"(anonymous_174)",decl:{start:{line:2909,column:14},end:{line:2909,column:15}},loc:{start:{line:2909,column:55},end:{line:2913,column:9}},line:2909},"175":{name:"(anonymous_175)",decl:{start:{line:2931,column:14},end:{line:2931,column:15}},loc:{start:{line:2931,column:25},end:{line:2933,column:9}},line:2931},"176":{name:"(anonymous_176)",decl:{start:{line:2945,column:26},end:{line:2945,column:27}},loc:{start:{line:2945,column:37},end:{line:2947,column:9}},line:2945},"177":{name:"(anonymous_177)",decl:{start:{line:2957,column:27},end:{line:2957,column:28}},loc:{start:{line:2957,column:43},end:{line:2960,column:9}},line:2957},"178":{name:"(anonymous_178)",decl:{start:{line:2976,column:14},end:{line:2976,column:15}},loc:{start:{line:2976,column:49},end:{line:2979,column:9}},line:2976},"179":{name:"(anonymous_179)",decl:{start:{line:2998,column:16},end:{line:2998,column:17}},loc:{start:{line:2998,column:55},end:{line:3016,column:9}},line:2998},"180":{name:"(anonymous_180)",decl:{start:{line:3042,column:14},end:{line:3042,column:15}},loc:{start:{line:3042,column:25},end:{line:3044,column:9}},line:3042},"181":{name:"(anonymous_181)",decl:{start:{line:3054,column:27},end:{line:3054,column:28}},loc:{start:{line:3054,column:43},end:{line:3056,column:9}},line:3054},"182":{name:"(anonymous_182)",decl:{start:{line:3071,column:14},end:{line:3071,column:15}},loc:{start:{line:3071,column:43},end:{line:3077,column:9}},line:3071},"183":{name:"(anonymous_183)",decl:{start:{line:3095,column:16},end:{line:3095,column:17}},loc:{start:{line:3095,column:45},end:{line:3123,column:9}},line:3095},"184":{name:"(anonymous_184)",decl:{start:{line:3102,column:35},end:{line:3102,column:36}},loc:{start:{line:3102,column:46},end:{line:3102,column:48}},line:3102},"185":{name:"(anonymous_185)",decl:{start:{line:3105,column:56},end:{line:3105,column:57}},loc:{start:{line:3105,column:80},end:{line:3120,column:13}},line:3105},"186":{name:"(anonymous_186)",decl:{start:{line:3111,column:33},end:{line:3111,column:34}},loc:{start:{line:3111,column:44},end:{line:3118,column:21}},line:3111},"187":{name:"(anonymous_187)",decl:{start:{line:3125,column:23},end:{line:3125,column:24}},loc:{start:{line:3125,column:48},end:{line:3151,column:9}},line:3125},"188":{name:"(anonymous_188)",decl:{start:{line:3133,column:58},end:{line:3133,column:59}},loc:{start:{line:3133,column:63},end:{line:3133,column:82}},line:3133},"189":{name:"(anonymous_189)",decl:{start:{line:3153,column:25},end:{line:3153,column:26}},loc:{start:{line:3153,column:54},end:{line:3169,column:9}},line:3153},"190":{name:"(anonymous_190)",decl:{start:{line:3171,column:19},end:{line:3171,column:20}},loc:{start:{line:3171,column:90},end:{line:3212,column:9}},line:3171},"191":{name:"(anonymous_191)",decl:{start:{line:3172,column:35},end:{line:3172,column:36}},loc:{start:{line:3172,column:46},end:{line:3172,column:48}},line:3172},"192":{name:"(anonymous_192)",decl:{start:{line:3185,column:20},end:{line:3185,column:21}},loc:{start:{line:3185,column:38},end:{line:3185,column:92}},line:3185},"193":{name:"(anonymous_193)",decl:{start:{line:3200,column:55},end:{line:3200,column:56}},loc:{start:{line:3200,column:81},end:{line:3203,column:17}},line:3200},"194":{name:"(anonymous_194)",decl:{start:{line:3207,column:49},end:{line:3207,column:50}},loc:{start:{line:3207,column:73},end:{line:3210,column:17}},line:3207},"195":{name:"(anonymous_195)",decl:{start:{line:3229,column:14},end:{line:3229,column:15}},loc:{start:{line:3229,column:25},end:{line:3231,column:9}},line:3229},"196":{name:"(anonymous_196)",decl:{start:{line:3247,column:14},end:{line:3247,column:15}},loc:{start:{line:3247,column:48},end:{line:3269,column:9}},line:3247},"197":{name:"(anonymous_197)",decl:{start:{line:3286,column:16},end:{line:3286,column:17}},loc:{start:{line:3286,column:35},end:{line:3290,column:9}},line:3286},"198":{name:"(anonymous_198)",decl:{start:{line:3307,column:24},end:{line:3307,column:25}},loc:{start:{line:3307,column:43},end:{line:3316,column:9}},line:3307},"199":{name:"(anonymous_199)",decl:{start:{line:3308,column:35},end:{line:3308,column:36}},loc:{start:{line:3308,column:46},end:{line:3308,column:48}},line:3308},"200":{name:"(anonymous_200)",decl:{start:{line:3311,column:71},end:{line:3311,column:72}},loc:{start:{line:3311,column:85},end:{line:3313,column:13}},line:3311},"201":{name:"(anonymous_201)",decl:{start:{line:3333,column:23},end:{line:3333,column:24}},loc:{start:{line:3333,column:42},end:{line:3342,column:9}},line:3333},"202":{name:"(anonymous_202)",decl:{start:{line:3334,column:35},end:{line:3334,column:36}},loc:{start:{line:3334,column:46},end:{line:3334,column:48}},line:3334},"203":{name:"(anonymous_203)",decl:{start:{line:3337,column:70},end:{line:3337,column:71}},loc:{start:{line:3337,column:84},end:{line:3339,column:13}},line:3337},"204":{name:"(anonymous_204)",decl:{start:{line:3360,column:16},end:{line:3360,column:17}},loc:{start:{line:3360,column:43},end:{line:3374,column:9}},line:3360},"205":{name:"(anonymous_205)",decl:{start:{line:3361,column:35},end:{line:3361,column:36}},loc:{start:{line:3361,column:46},end:{line:3361,column:48}},line:3361},"206":{name:"(anonymous_206)",decl:{start:{line:3366,column:46},end:{line:3366,column:47}},loc:{start:{line:3366,column:70},end:{line:3373,column:13}},line:3366},"207":{name:"(anonymous_207)",decl:{start:{line:3391,column:18},end:{line:3391,column:19}},loc:{start:{line:3391,column:37},end:{line:3400,column:9}},line:3391},"208":{name:"(anonymous_208)",decl:{start:{line:3392,column:35},end:{line:3392,column:36}},loc:{start:{line:3392,column:46},end:{line:3392,column:48}},line:3392},"209":{name:"(anonymous_209)",decl:{start:{line:3395,column:65},end:{line:3395,column:66}},loc:{start:{line:3395,column:79},end:{line:3397,column:13}},line:3395},"210":{name:"(anonymous_210)",decl:{start:{line:3413,column:18},end:{line:3413,column:19}},loc:{start:{line:3413,column:41},end:{line:3415,column:9}},line:3413},"211":{name:"(anonymous_211)",decl:{start:{line:3432,column:15},end:{line:3432,column:16}},loc:{start:{line:3432,column:34},end:{line:3441,column:9}},line:3432},"212":{name:"(anonymous_212)",decl:{start:{line:3433,column:35},end:{line:3433,column:36}},loc:{start:{line:3433,column:46},end:{line:3433,column:48}},line:3433},"213":{name:"(anonymous_213)",decl:{start:{line:3436,column:62},end:{line:3436,column:63}},loc:{start:{line:3436,column:76},end:{line:3438,column:13}},line:3436},"214":{name:"(anonymous_214)",decl:{start:{line:3459,column:17},end:{line:3459,column:18}},loc:{start:{line:3459,column:44},end:{line:3473,column:9}},line:3459},"215":{name:"(anonymous_215)",decl:{start:{line:3460,column:35},end:{line:3460,column:36}},loc:{start:{line:3460,column:46},end:{line:3460,column:48}},line:3460},"216":{name:"(anonymous_216)",decl:{start:{line:3465,column:55},end:{line:3465,column:56}},loc:{start:{line:3465,column:79},end:{line:3472,column:13}},line:3465},"217":{name:"(anonymous_217)",decl:{start:{line:3496,column:17},end:{line:3496,column:18}},loc:{start:{line:3496,column:44},end:{line:3510,column:9}},line:3496},"218":{name:"(anonymous_218)",decl:{start:{line:3497,column:35},end:{line:3497,column:36}},loc:{start:{line:3497,column:46},end:{line:3497,column:48}},line:3497},"219":{name:"(anonymous_219)",decl:{start:{line:3502,column:47},end:{line:3502,column:48}},loc:{start:{line:3502,column:71},end:{line:3509,column:13}},line:3502},"220":{name:"(anonymous_220)",decl:{start:{line:3527,column:19},end:{line:3527,column:20}},loc:{start:{line:3527,column:38},end:{line:3539,column:9}},line:3527},"221":{name:"(anonymous_221)",decl:{start:{line:3528,column:35},end:{line:3528,column:36}},loc:{start:{line:3528,column:46},end:{line:3528,column:48}},line:3528},"222":{name:"(anonymous_222)",decl:{start:{line:3531,column:46},end:{line:3531,column:47}},loc:{start:{line:3531,column:70},end:{line:3538,column:13}},line:3531},"223":{name:"(anonymous_223)",decl:{start:{line:3557,column:21},end:{line:3557,column:22}},loc:{start:{line:3557,column:47},end:{line:3566,column:9}},line:3557},"224":{name:"(anonymous_224)",decl:{start:{line:3558,column:35},end:{line:3558,column:36}},loc:{start:{line:3558,column:46},end:{line:3558,column:48}},line:3558},"225":{name:"(anonymous_225)",decl:{start:{line:3561,column:85},end:{line:3561,column:86}},loc:{start:{line:3561,column:99},end:{line:3563,column:13}},line:3561},"226":{name:"(anonymous_226)",decl:{start:{line:3585,column:16},end:{line:3585,column:17}},loc:{start:{line:3585,column:42},end:{line:3594,column:9}},line:3585},"227":{name:"(anonymous_227)",decl:{start:{line:3586,column:35},end:{line:3586,column:36}},loc:{start:{line:3586,column:46},end:{line:3586,column:48}},line:3586},"228":{name:"(anonymous_228)",decl:{start:{line:3589,column:75},end:{line:3589,column:76}},loc:{start:{line:3589,column:89},end:{line:3591,column:13}},line:3589},"229":{name:"(anonymous_229)",decl:{start:{line:3612,column:17},end:{line:3612,column:18}},loc:{start:{line:3612,column:44},end:{line:3624,column:9}},line:3612},"230":{name:"(anonymous_230)",decl:{start:{line:3613,column:35},end:{line:3613,column:36}},loc:{start:{line:3613,column:46},end:{line:3613,column:48}},line:3613},"231":{name:"(anonymous_231)",decl:{start:{line:3616,column:47},end:{line:3616,column:48}},loc:{start:{line:3616,column:71},end:{line:3623,column:13}},line:3616},"232":{name:"(anonymous_232)",decl:{start:{line:3642,column:18},end:{line:3642,column:19}},loc:{start:{line:3642,column:45},end:{line:3654,column:9}},line:3642},"233":{name:"(anonymous_233)",decl:{start:{line:3643,column:35},end:{line:3643,column:36}},loc:{start:{line:3643,column:46},end:{line:3643,column:48}},line:3643},"234":{name:"(anonymous_234)",decl:{start:{line:3646,column:48},end:{line:3646,column:49}},loc:{start:{line:3646,column:72},end:{line:3653,column:13}},line:3646},"235":{name:"(anonymous_235)",decl:{start:{line:3672,column:15},end:{line:3672,column:16}},loc:{start:{line:3672,column:34},end:{line:3681,column:9}},line:3672},"236":{name:"(anonymous_236)",decl:{start:{line:3673,column:35},end:{line:3673,column:36}},loc:{start:{line:3673,column:46},end:{line:3673,column:48}},line:3673},"237":{name:"(anonymous_237)",decl:{start:{line:3676,column:62},end:{line:3676,column:63}},loc:{start:{line:3676,column:76},end:{line:3678,column:13}},line:3676},"238":{name:"(anonymous_238)",decl:{start:{line:3699,column:15},end:{line:3699,column:16}},loc:{start:{line:3699,column:44},end:{line:3787,column:9}},line:3699},"239":{name:"(anonymous_239)",decl:{start:{line:3715,column:49},end:{line:3715,column:50}},loc:{start:{line:3715,column:60},end:{line:3715,column:62}},line:3715},"240":{name:"(anonymous_240)",decl:{start:{line:3716,column:55},end:{line:3716,column:56}},loc:{start:{line:3716,column:66},end:{line:3716,column:68}},line:3716},"241":{name:"(anonymous_241)",decl:{start:{line:3717,column:47},end:{line:3717,column:48}},loc:{start:{line:3717,column:58},end:{line:3717,column:60}},line:3717},"242":{name:"(anonymous_242)",decl:{start:{line:3718,column:51},end:{line:3718,column:52}},loc:{start:{line:3718,column:62},end:{line:3718,column:64}},line:3718},"243":{name:"(anonymous_243)",decl:{start:{line:3719,column:49},end:{line:3719,column:50}},loc:{start:{line:3719,column:60},end:{line:3719,column:62}},line:3719},"244":{name:"(anonymous_244)",decl:{start:{line:3722,column:57},end:{line:3722,column:58}},loc:{start:{line:3722,column:68},end:{line:3722,column:70}},line:3722},"245":{name:"(anonymous_245)",decl:{start:{line:3723,column:75},end:{line:3723,column:76}},loc:{start:{line:3723,column:86},end:{line:3723,column:88}},line:3723},"246":{name:"(anonymous_246)",decl:{start:{line:3729,column:16},end:{line:3729,column:17}},loc:{start:{line:3729,column:27},end:{line:3729,column:51}},line:3729},"247":{name:"(anonymous_247)",decl:{start:{line:3730,column:16},end:{line:3730,column:17}},loc:{start:{line:3730,column:40},end:{line:3780,column:17}},line:3730},"248":{name:"(anonymous_248)",decl:{start:{line:3731,column:31},end:{line:3731,column:32}},loc:{start:{line:3731,column:50},end:{line:3779,column:21}},line:3731},"249":{name:"(anonymous_249)",decl:{start:{line:3781,column:16},end:{line:3781,column:17}},loc:{start:{line:3781,column:30},end:{line:3785,column:17}},line:3781},"250":{name:"(anonymous_250)",decl:{start:{line:3804,column:17},end:{line:3804,column:18}},loc:{start:{line:3804,column:36},end:{line:3813,column:9}},line:3804},"251":{name:"(anonymous_251)",decl:{start:{line:3805,column:35},end:{line:3805,column:36}},loc:{start:{line:3805,column:46},end:{line:3805,column:48}},line:3805},"252":{name:"(anonymous_252)",decl:{start:{line:3808,column:64},end:{line:3808,column:65}},loc:{start:{line:3808,column:78},end:{line:3810,column:13}},line:3808},"253":{name:"(anonymous_253)",decl:{start:{line:3830,column:14},end:{line:3830,column:15}},loc:{start:{line:3830,column:25},end:{line:3832,column:9}},line:3830},"254":{name:"(anonymous_254)",decl:{start:{line:3842,column:27},end:{line:3842,column:28}},loc:{start:{line:3842,column:43},end:{line:3846,column:9}},line:3842},"255":{name:"(anonymous_255)",decl:{start:{line:3861,column:14},end:{line:3861,column:15}},loc:{start:{line:3861,column:43},end:{line:3867,column:9}},line:3861},"256":{name:"(anonymous_256)",decl:{start:{line:3886,column:16},end:{line:3886,column:17}},loc:{start:{line:3886,column:50},end:{line:3917,column:9}},line:3886},"257":{name:"(anonymous_257)",decl:{start:{line:3895,column:35},end:{line:3895,column:36}},loc:{start:{line:3895,column:46},end:{line:3895,column:48}},line:3895},"258":{name:"(anonymous_258)",decl:{start:{line:3908,column:41},end:{line:3908,column:42}},loc:{start:{line:3908,column:65},end:{line:3916,column:13}},line:3908},"259":{name:"(anonymous_259)",decl:{start:{line:3944,column:16},end:{line:3944,column:17}},loc:{start:{line:3944,column:50},end:{line:3946,column:9}},line:3944},"260":{name:"(anonymous_260)",decl:{start:{line:3969,column:23},end:{line:3969,column:24}},loc:{start:{line:3969,column:57},end:{line:4014,column:9}},line:3969},"261":{name:"(anonymous_261)",decl:{start:{line:3978,column:35},end:{line:3978,column:36}},loc:{start:{line:3978,column:46},end:{line:3978,column:48}},line:3978},"262":{name:"(anonymous_262)",decl:{start:{line:4003,column:16},end:{line:4003,column:17}},loc:{start:{line:4003,column:40},end:{line:4010,column:17}},line:4003},"263":{name:"(anonymous_263)",decl:{start:{line:4071,column:14},end:{line:4071,column:15}},loc:{start:{line:4071,column:30},end:{line:4086,column:9}},line:4071},"264":{name:"(anonymous_264)",decl:{start:{line:4095,column:18},end:{line:4095,column:19}},loc:{start:{line:4095,column:29},end:{line:4097,column:9}},line:4095},"265":{name:"(anonymous_265)",decl:{start:{line:4106,column:18},end:{line:4106,column:19}},loc:{start:{line:4106,column:29},end:{line:4108,column:9}},line:4106},"266":{name:"(anonymous_266)",decl:{start:{line:4117,column:21},end:{line:4117,column:22}},loc:{start:{line:4117,column:32},end:{line:4119,column:9}},line:4117},"267":{name:"(anonymous_267)",decl:{start:{line:4128,column:23},end:{line:4128,column:24}},loc:{start:{line:4128,column:34},end:{line:4130,column:9}},line:4128},"268":{name:"(anonymous_268)",decl:{start:{line:4139,column:22},end:{line:4139,column:23}},loc:{start:{line:4139,column:33},end:{line:4141,column:9}},line:4139},"269":{name:"(anonymous_269)",decl:{start:{line:4150,column:16},end:{line:4150,column:17}},loc:{start:{line:4150,column:27},end:{line:4152,column:9}},line:4150},"270":{name:"(anonymous_270)",decl:{start:{line:4161,column:19},end:{line:4161,column:20}},loc:{start:{line:4161,column:30},end:{line:4163,column:9}},line:4161},"271":{name:"(anonymous_271)",decl:{start:{line:4191,column:14},end:{line:4191,column:15}},loc:{start:{line:4191,column:30},end:{line:4198,column:9}},line:4191},"272":{name:"(anonymous_272)",decl:{start:{line:4257,column:14},end:{line:4257,column:15}},loc:{start:{line:4257,column:30},end:{line:4283,column:9}},line:4257},"273":{name:"(anonymous_273)",decl:{start:{line:4292,column:26},end:{line:4292,column:27}},loc:{start:{line:4292,column:37},end:{line:4294,column:9}},line:4292},"274":{name:"(anonymous_274)",decl:{start:{line:4303,column:20},end:{line:4303,column:21}},loc:{start:{line:4303,column:31},end:{line:4305,column:9}},line:4303},"275":{name:"(anonymous_275)",decl:{start:{line:4314,column:18},end:{line:4314,column:19}},loc:{start:{line:4314,column:29},end:{line:4316,column:9}},line:4314},"276":{name:"(anonymous_276)",decl:{start:{line:4325,column:16},end:{line:4325,column:17}},loc:{start:{line:4325,column:27},end:{line:4327,column:9}},line:4325},"277":{name:"(anonymous_277)",decl:{start:{line:4336,column:15},end:{line:4336,column:16}},loc:{start:{line:4336,column:26},end:{line:4338,column:9}},line:4336},"278":{name:"(anonymous_278)",decl:{start:{line:4347,column:17},end:{line:4347,column:18}},loc:{start:{line:4347,column:28},end:{line:4349,column:9}},line:4347},"279":{name:"(anonymous_279)",decl:{start:{line:4382,column:14},end:{line:4382,column:15}},loc:{start:{line:4382,column:39},end:{line:4391,column:9}},line:4382},"280":{name:"(anonymous_280)",decl:{start:{line:4401,column:13},end:{line:4401,column:14}},loc:{start:{line:4401,column:38},end:{line:4412,column:9}},line:4401},"281":{name:"(anonymous_281)",decl:{start:{line:4543,column:14},end:{line:4543,column:15}},loc:{start:{line:4543,column:40},end:{line:4555,column:9}},line:4543},"282":{name:"(anonymous_282)",decl:{start:{line:4568,column:28},end:{line:4568,column:29}},loc:{start:{line:4568,column:42},end:{line:4580,column:9}},line:4568},"283":{name:"(anonymous_283)",decl:{start:{line:4594,column:19},end:{line:4594,column:20}},loc:{start:{line:4594,column:80},end:{line:4627,column:9}},line:4594},"284":{name:"(anonymous_284)",decl:{start:{line:4642,column:24},end:{line:4642,column:25}},loc:{start:{line:4642,column:96},end:{line:4682,column:9}},line:4642},"285":{name:"(anonymous_285)",decl:{start:{line:4693,column:21},end:{line:4693,column:22}},loc:{start:{line:4693,column:48},end:{line:4716,column:9}},line:4693},"286":{name:"(anonymous_286)",decl:{start:{line:4737,column:26},end:{line:4737,column:27}},loc:{start:{line:4737,column:57},end:{line:4769,column:9}},line:4737},"287":{name:"(anonymous_287)",decl:{start:{line:4782,column:28},end:{line:4782,column:29}},loc:{start:{line:4782,column:88},end:{line:4801,column:9}},line:4782},"288":{name:"(anonymous_288)",decl:{start:{line:4813,column:30},end:{line:4813,column:31}},loc:{start:{line:4813,column:62},end:{line:4834,column:9}},line:4813},"289":{name:"(anonymous_289)",decl:{start:{line:4845,column:24},end:{line:4845,column:25}},loc:{start:{line:4845,column:44},end:{line:4867,column:9}},line:4845},"290":{name:"(anonymous_290)",decl:{start:{line:4882,column:29},end:{line:4882,column:30}},loc:{start:{line:4882,column:57},end:{line:4916,column:9}},line:4882},"291":{name:"(anonymous_291)",decl:{start:{line:4928,column:31},end:{line:4928,column:32}},loc:{start:{line:4928,column:88},end:{line:4946,column:9}},line:4928},"292":{name:"(anonymous_292)",decl:{start:{line:4957,column:33},end:{line:4957,column:34}},loc:{start:{line:4957,column:58},end:{line:4977,column:9}},line:4957},"293":{name:"(anonymous_293)",decl:{start:{line:4989,column:22},end:{line:4989,column:23}},loc:{start:{line:4989,column:64},end:{line:5059,column:9}},line:4989},"294":{name:"(anonymous_294)",decl:{start:{line:5068,column:22},end:{line:5068,column:23}},loc:{start:{line:5068,column:33},end:{line:5077,column:9}},line:5068},"295":{name:"(anonymous_295)",decl:{start:{line:5101,column:15},end:{line:5101,column:16}},loc:{start:{line:5101,column:34},end:{line:5125,column:9}},line:5101},"296":{name:"(anonymous_296)",decl:{start:{line:5112,column:110},end:{line:5112,column:111}},loc:{start:{line:5112,column:134},end:{line:5124,column:13}},line:5112},"297":{name:"(anonymous_297)",decl:{start:{line:5153,column:13},end:{line:5153,column:14}},loc:{start:{line:5153,column:38},end:{line:5168,column:9}},line:5153},"298":{name:"(anonymous_298)",decl:{start:{line:5160,column:23},end:{line:5160,column:24}},loc:{start:{line:5160,column:44},end:{line:5167,column:13}},line:5160},"299":{name:"(anonymous_299)",decl:{start:{line:5224,column:14},end:{line:5224,column:15}},loc:{start:{line:5224,column:47},end:{line:5270,column:9}},line:5224},"300":{name:"(anonymous_300)",decl:{start:{line:5279,column:22},end:{line:5279,column:23}},loc:{start:{line:5279,column:33},end:{line:5281,column:9}},line:5279},"301":{name:"(anonymous_301)",decl:{start:{line:5290,column:27},end:{line:5290,column:28}},loc:{start:{line:5290,column:38},end:{line:5292,column:9}},line:5290},"302":{name:"(anonymous_302)",decl:{start:{line:5302,column:20},end:{line:5302,column:21}},loc:{start:{line:5302,column:31},end:{line:5304,column:9}},line:5302},"303":{name:"(anonymous_303)",decl:{start:{line:5316,column:21},end:{line:5316,column:22}},loc:{start:{line:5316,column:36},end:{line:5318,column:9}},line:5316},"304":{name:"(anonymous_304)",decl:{start:{line:5330,column:19},end:{line:5330,column:20}},loc:{start:{line:5330,column:30},end:{line:5348,column:9}},line:5330},"305":{name:"(anonymous_305)",decl:{start:{line:5360,column:23},end:{line:5360,column:24}},loc:{start:{line:5360,column:34},end:{line:5362,column:9}},line:5360},"306":{name:"(anonymous_306)",decl:{start:{line:5373,column:26},end:{line:5373,column:27}},loc:{start:{line:5373,column:36},end:{line:5385,column:9}},line:5373},"307":{name:"(anonymous_307)",decl:{start:{line:5396,column:30},end:{line:5396,column:31}},loc:{start:{line:5396,column:41},end:{line:5398,column:9}},line:5396},"308":{name:"(anonymous_308)",decl:{start:{line:5409,column:18},end:{line:5409,column:19}},loc:{start:{line:5409,column:38},end:{line:5411,column:9}},line:5409},"309":{name:"(anonymous_309)",decl:{start:{line:5422,column:24},end:{line:5422,column:25}},loc:{start:{line:5422,column:35},end:{line:5424,column:9}},line:5422},"310":{name:"(anonymous_310)",decl:{start:{line:5452,column:36},end:{line:5452,column:37}},loc:{start:{line:5452,column:69},end:{line:5463,column:9}},line:5452},"311":{name:"(anonymous_311)",decl:{start:{line:5484,column:21},end:{line:5484,column:22}},loc:{start:{line:5484,column:61},end:{line:5489,column:9}},line:5484},"312":{name:"(anonymous_312)",decl:{start:{line:5500,column:16},end:{line:5500,column:17}},loc:{start:{line:5500,column:27},end:{line:5502,column:9}},line:5500},"313":{name:"(anonymous_313)",decl:{start:{line:5511,column:34},end:{line:5511,column:35}},loc:{start:{line:5511,column:45},end:{line:5514,column:9}},line:5511},"314":{name:"(anonymous_314)",decl:{start:{line:5532,column:14},end:{line:5532,column:15}},loc:{start:{line:5532,column:25},end:{line:5534,column:9}},line:5532},"315":{name:"(anonymous_315)",decl:{start:{line:5554,column:14},end:{line:5554,column:15}},loc:{start:{line:5554,column:56},end:{line:5591,column:9}},line:5554},"316":{name:"(anonymous_316)",decl:{start:{line:5600,column:23},end:{line:5600,column:24}},loc:{start:{line:5600,column:34},end:{line:5602,column:9}},line:5600},"317":{name:"(anonymous_317)",decl:{start:{line:5612,column:22},end:{line:5612,column:23}},loc:{start:{line:5612,column:37},end:{line:5619,column:9}},line:5612},"318":{name:"(anonymous_318)",decl:{start:{line:5628,column:19},end:{line:5628,column:20}},loc:{start:{line:5628,column:34},end:{line:5630,column:9}},line:5628},"319":{name:"(anonymous_319)",decl:{start:{line:5644,column:16},end:{line:5644,column:17}},loc:{start:{line:5644,column:42},end:{line:5678,column:9}},line:5644},"320":{name:"(anonymous_320)",decl:{start:{line:5649,column:35},end:{line:5649,column:36}},loc:{start:{line:5649,column:46},end:{line:5649,column:48}},line:5649},"321":{name:"(anonymous_321)",decl:{start:{line:5669,column:47},end:{line:5669,column:48}},loc:{start:{line:5669,column:71},end:{line:5677,column:13}},line:5669},"322":{name:"(anonymous_322)",decl:{start:{line:5696,column:14},end:{line:5696,column:15}},loc:{start:{line:5696,column:25},end:{line:5698,column:9}},line:5696},"323":{name:"(anonymous_323)",decl:{start:{line:5712,column:14},end:{line:5712,column:15}},loc:{start:{line:5712,column:43},end:{line:5716,column:9}},line:5712},"324":{name:"(anonymous_324)",decl:{start:{line:5730,column:16},end:{line:5730,column:17}},loc:{start:{line:5730,column:49},end:{line:5752,column:9}},line:5730},"325":{name:"(anonymous_325)",decl:{start:{line:5739,column:35},end:{line:5739,column:36}},loc:{start:{line:5739,column:45},end:{line:5739,column:47}},line:5739},"326":{name:"(anonymous_326)",decl:{start:{line:5743,column:84},end:{line:5743,column:85}},loc:{start:{line:5743,column:108},end:{line:5751,column:13}},line:5743},"327":{name:"(anonymous_327)",decl:{start:{line:5764,column:27},end:{line:5764,column:28}},loc:{start:{line:5764,column:43},end:{line:5767,column:9}},line:5764},"328":{name:"(anonymous_328)",decl:{start:{line:5773,column:14},end:{line:5773,column:15}},loc:{start:{line:5773,column:41},end:{line:5779,column:9}},line:5773},"329":{name:"(anonymous_329)",decl:{start:{line:5782,column:14},end:{line:5782,column:15}},loc:{start:{line:5782,column:33},end:{line:5801,column:9}},line:5782},"330":{name:"(anonymous_330)",decl:{start:{line:5783,column:35},end:{line:5783,column:36}},loc:{start:{line:5783,column:46},end:{line:5783,column:48}},line:5783},"331":{name:"(anonymous_331)",decl:{start:{line:5790,column:42},end:{line:5790,column:43}},loc:{start:{line:5790,column:65},end:{line:5800,column:13}},line:5790}},branchMap:{"0":{loc:{start:{line:26,column:15},end:{line:26,column:30}},type:"binary-expr",locations:[{start:{line:26,column:15},end:{line:26,column:22}},{start:{line:26,column:26},end:{line:26,column:30}}],line:26},"1":{loc:{start:{line:397,column:12},end:{line:400,column:13}},type:"if",locations:[{start:{line:397,column:12},end:{line:400,column:13}},{start:{line:397,column:12},end:{line:400,column:13}}],line:397},"2":{loc:{start:{line:397,column:16},end:{line:397,column:56}},type:"binary-expr",locations:[{start:{line:397,column:16},end:{line:397,column:25}},{start:{line:397,column:29},end:{line:397,column:56}}],line:397},"3":{loc:{start:{line:420,column:12},end:{line:423,column:13}},type:"if",locations:[{start:{line:420,column:12},end:{line:423,column:13}},{start:{line:420,column:12},end:{line:423,column:13}}],line:420},"4":{loc:{start:{line:420,column:16},end:{line:420,column:56}},type:"binary-expr",locations:[{start:{line:420,column:16},end:{line:420,column:25}},{start:{line:420,column:29},end:{line:420,column:56}}],line:420},"5":{loc:{start:{line:453,column:12},end:{line:456,column:13}},type:"if",locations:[{start:{line:453,column:12},end:{line:456,column:13}},{start:{line:453,column:12},end:{line:456,column:13}}],line:453},"6":{loc:{start:{line:453,column:16},end:{line:453,column:56}},type:"binary-expr",locations:[{start:{line:453,column:16},end:{line:453,column:25}},{start:{line:453,column:29},end:{line:453,column:56}}],line:453},"7":{loc:{start:{line:478,column:23},end:{line:478,column:48}},type:"binary-expr",locations:[{start:{line:478,column:23},end:{line:478,column:31}},{start:{line:478,column:35},end:{line:478,column:48}}],line:478},"8":{loc:{start:{line:482,column:16},end:{line:496,column:17}},type:"if",locations:[{start:{line:482,column:16},end:{line:496,column:17}},{start:{line:482,column:16},end:{line:496,column:17}}],line:482},"9":{loc:{start:{line:489,column:24},end:{line:494,column:25}},type:"if",locations:[{start:{line:489,column:24},end:{line:494,column:25}},{start:{line:489,column:24},end:{line:494,column:25}}],line:489},"10":{loc:{start:{line:517,column:23},end:{line:517,column:48}},type:"binary-expr",locations:[{start:{line:517,column:23},end:{line:517,column:31}},{start:{line:517,column:35},end:{line:517,column:48}}],line:517},"11":{loc:{start:{line:544,column:12},end:{line:547,column:13}},type:"if",locations:[{start:{line:544,column:12},end:{line:547,column:13}},{start:{line:544,column:12},end:{line:547,column:13}}],line:544},"12":{loc:{start:{line:544,column:16},end:{line:544,column:53}},type:"binary-expr",locations:[{start:{line:544,column:16},end:{line:544,column:25}},{start:{line:544,column:29},end:{line:544,column:53}}],line:544},"13":{loc:{start:{line:549,column:23},end:{line:549,column:48}},type:"binary-expr",locations:[{start:{line:549,column:23},end:{line:549,column:31}},{start:{line:549,column:35},end:{line:549,column:48}}],line:549},"14":{loc:{start:{line:550,column:21},end:{line:550,column:33}},type:"binary-expr",locations:[{start:{line:550,column:21},end:{line:550,column:27}},{start:{line:550,column:31},end:{line:550,column:33}}],line:550},"15":{loc:{start:{line:555,column:16},end:{line:560,column:17}},type:"if",locations:[{start:{line:555,column:16},end:{line:560,column:17}},{start:{line:555,column:16},end:{line:560,column:17}}],line:555},"16":{loc:{start:{line:581,column:12},end:{line:584,column:13}},type:"if",locations:[{start:{line:581,column:12},end:{line:584,column:13}},{start:{line:581,column:12},end:{line:584,column:13}}],line:581},"17":{loc:{start:{line:581,column:16},end:{line:581,column:52}},type:"binary-expr",locations:[{start:{line:581,column:16},end:{line:581,column:25}},{start:{line:581,column:29},end:{line:581,column:52}}],line:581},"18":{loc:{start:{line:586,column:23},end:{line:586,column:48}},type:"binary-expr",locations:[{start:{line:586,column:23},end:{line:586,column:31}},{start:{line:586,column:35},end:{line:586,column:48}}],line:586},"19":{loc:{start:{line:588,column:23},end:{line:588,column:34}},type:"binary-expr",locations:[{start:{line:588,column:23},end:{line:588,column:28}},{start:{line:588,column:32},end:{line:588,column:34}}],line:588},"20":{loc:{start:{line:593,column:16},end:{line:599,column:17}},type:"if",locations:[{start:{line:593,column:16},end:{line:599,column:17}},{start:{line:593,column:16},end:{line:599,column:17}}],line:593},"21":{loc:{start:{line:597,column:35},end:{line:597,column:54}},type:"binary-expr",locations:[{start:{line:597,column:35},end:{line:597,column:48}},{start:{line:597,column:52},end:{line:597,column:54}}],line:597},"22":{loc:{start:{line:598,column:35},end:{line:598,column:48}},type:"binary-expr",locations:[{start:{line:598,column:35},end:{line:598,column:42}},{start:{line:598,column:46},end:{line:598,column:48}}],line:598},"23":{loc:{start:{line:625,column:12},end:{line:628,column:13}},type:"if",locations:[{start:{line:625,column:12},end:{line:628,column:13}},{start:{line:625,column:12},end:{line:628,column:13}}],line:625},"24":{loc:{start:{line:625,column:16},end:{line:625,column:53}},type:"binary-expr",locations:[{start:{line:625,column:16},end:{line:625,column:25}},{start:{line:625,column:29},end:{line:625,column:53}}],line:625},"25":{loc:{start:{line:630,column:23},end:{line:630,column:48}},type:"binary-expr",locations:[{start:{line:630,column:23},end:{line:630,column:31}},{start:{line:630,column:35},end:{line:630,column:48}}],line:630},"26":{loc:{start:{line:631,column:21},end:{line:631,column:33}},type:"binary-expr",locations:[{start:{line:631,column:21},end:{line:631,column:27}},{start:{line:631,column:31},end:{line:631,column:33}}],line:631},"27":{loc:{start:{line:634,column:12},end:{line:636,column:13}},type:"if",locations:[{start:{line:634,column:12},end:{line:636,column:13}},{start:{line:634,column:12},end:{line:636,column:13}}],line:634},"28":{loc:{start:{line:653,column:20},end:{line:658,column:21}},type:"if",locations:[{start:{line:653,column:20},end:{line:658,column:21}},{start:{line:653,column:20},end:{line:658,column:21}}],line:653},"29":{loc:{start:{line:686,column:12},end:{line:688,column:13}},type:"if",locations:[{start:{line:686,column:12},end:{line:688,column:13}},{start:{line:686,column:12},end:{line:688,column:13}}],line:686},"30":{loc:{start:{line:690,column:12},end:{line:692,column:13}},type:"if",locations:[{start:{line:690,column:12},end:{line:692,column:13}},{start:{line:690,column:12},end:{line:692,column:13}}],line:690},"31":{loc:{start:{line:726,column:12},end:{line:728,column:13}},type:"if",locations:[{start:{line:726,column:12},end:{line:728,column:13}},{start:{line:726,column:12},end:{line:728,column:13}}],line:726},"32":{loc:{start:{line:742,column:12},end:{line:744,column:13}},type:"if",locations:[{start:{line:742,column:12},end:{line:744,column:13}},{start:{line:742,column:12},end:{line:744,column:13}}],line:742},"33":{loc:{start:{line:773,column:12},end:{line:775,column:13}},type:"if",locations:[{start:{line:773,column:12},end:{line:775,column:13}},{start:{line:773,column:12},end:{line:775,column:13}}],line:773},"34":{loc:{start:{line:805,column:12},end:{line:807,column:13}},type:"if",locations:[{start:{line:805,column:12},end:{line:807,column:13}},{start:{line:805,column:12},end:{line:807,column:13}}],line:805},"35":{loc:{start:{line:878,column:31},end:{line:878,column:47}},type:"binary-expr",locations:[{start:{line:878,column:31},end:{line:878,column:41}},{start:{line:878,column:45},end:{line:878,column:47}}],line:878},"36":{loc:{start:{line:879,column:26},end:{line:879,column:42}},type:"binary-expr",locations:[{start:{line:879,column:26},end:{line:879,column:36}},{start:{line:879,column:40},end:{line:879,column:42}}],line:879},"37":{loc:{start:{line:988,column:25},end:{line:988,column:79}},type:"cond-expr",locations:[{start:{line:988,column:53},end:{line:988,column:66}},{start:{line:988,column:69},end:{line:988,column:79}}],line:988},"38":{loc:{start:{line:992,column:25},end:{line:997,column:13}},type:"binary-expr",locations:[{start:{line:992,column:25},end:{line:992,column:35}},{start:{line:992,column:39},end:{line:997,column:13}}],line:992},"39":{loc:{start:{line:1002,column:31},end:{line:1002,column:57}},type:"binary-expr",locations:[{start:{line:1002,column:31},end:{line:1002,column:49}},{start:{line:1002,column:55},end:{line:1002,column:57}}],line:1002},"40":{loc:{start:{line:1003,column:31},end:{line:1003,column:73}},type:"binary-expr",locations:[{start:{line:1003,column:31},end:{line:1003,column:48}},{start:{line:1003,column:55},end:{line:1003,column:67}},{start:{line:1003,column:71},end:{line:1003,column:73}}],line:1003},"41":{loc:{start:{line:1004,column:31},end:{line:1004,column:57}},type:"binary-expr",locations:[{start:{line:1004,column:31},end:{line:1004,column:45}},{start:{line:1004,column:55},end:{line:1004,column:57}}],line:1004},"42":{loc:{start:{line:1005,column:31},end:{line:1005,column:57}},type:"binary-expr",locations:[{start:{line:1005,column:31},end:{line:1005,column:47}},{start:{line:1005,column:55},end:{line:1005,column:57}}],line:1005},"43":{loc:{start:{line:1006,column:31},end:{line:1006,column:59}},type:"binary-expr",locations:[{start:{line:1006,column:31},end:{line:1006,column:48}},{start:{line:1006,column:55},end:{line:1006,column:59}}],line:1006},"44":{loc:{start:{line:1007,column:31},end:{line:1007,column:59}},type:"binary-expr",locations:[{start:{line:1007,column:31},end:{line:1007,column:49}},{start:{line:1007,column:55},end:{line:1007,column:59}}],line:1007},"45":{loc:{start:{line:1008,column:31},end:{line:1008,column:59}},type:"binary-expr",locations:[{start:{line:1008,column:31},end:{line:1008,column:51}},{start:{line:1008,column:55},end:{line:1008,column:59}}],line:1008},"46":{loc:{start:{line:1096,column:12},end:{line:1099,column:13}},type:"if",locations:[{start:{line:1096,column:12},end:{line:1099,column:13}},{start:{line:1096,column:12},end:{line:1099,column:13}}],line:1096},"47":{loc:{start:{line:1096,column:16},end:{line:1096,column:54}},type:"binary-expr",locations:[{start:{line:1096,column:16},end:{line:1096,column:25}},{start:{line:1096,column:29},end:{line:1096,column:54}}],line:1096},"48":{loc:{start:{line:1100,column:23},end:{line:1100,column:48}},type:"binary-expr",locations:[{start:{line:1100,column:23},end:{line:1100,column:31}},{start:{line:1100,column:35},end:{line:1100,column:48}}],line:1100},"49":{loc:{start:{line:1102,column:22},end:{line:1102,column:35}},type:"binary-expr",locations:[{start:{line:1102,column:22},end:{line:1102,column:29}},{start:{line:1102,column:33},end:{line:1102,column:35}}],line:1102},"50":{loc:{start:{line:1106,column:16},end:{line:1112,column:17}},type:"if",locations:[{start:{line:1106,column:16},end:{line:1112,column:17}},{start:{line:1106,column:16},end:{line:1112,column:17}}],line:1106},"51":{loc:{start:{line:1110,column:31},end:{line:1110,column:73}},type:"cond-expr",locations:[{start:{line:1110,column:47},end:{line:1110,column:66}},{start:{line:1110,column:69},end:{line:1110,column:73}}],line:1110},"52":{loc:{start:{line:1125,column:23},end:{line:1125,column:48}},type:"binary-expr",locations:[{start:{line:1125,column:23},end:{line:1125,column:31}},{start:{line:1125,column:35},end:{line:1125,column:48}}],line:1125},"53":{loc:{start:{line:1143,column:23},end:{line:1143,column:48}},type:"binary-expr",locations:[{start:{line:1143,column:23},end:{line:1143,column:31}},{start:{line:1143,column:35},end:{line:1143,column:48}}],line:1143},"54":{loc:{start:{line:1145,column:12},end:{line:1147,column:13}},type:"if",locations:[{start:{line:1145,column:12},end:{line:1147,column:13}},{start:{line:1145,column:12},end:{line:1147,column:13}}],line:1145},"55":{loc:{start:{line:1151,column:16},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1151,column:16},end:{line:1167,column:17}},{start:{line:1151,column:16},end:{line:1167,column:17}}],line:1151},"56":{loc:{start:{line:1151,column:20},end:{line:1151,column:47}},type:"binary-expr",locations:[{start:{line:1151,column:20},end:{line:1151,column:24}},{start:{line:1151,column:28},end:{line:1151,column:47}}],line:1151},"57":{loc:{start:{line:1155,column:21},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1155,column:21},end:{line:1167,column:17}},{start:{line:1155,column:21},end:{line:1167,column:17}}],line:1155},"58":{loc:{start:{line:1155,column:25},end:{line:1155,column:51}},type:"binary-expr",locations:[{start:{line:1155,column:25},end:{line:1155,column:29}},{start:{line:1155,column:33},end:{line:1155,column:51}}],line:1155},"59":{loc:{start:{line:1157,column:24},end:{line:1162,column:25}},type:"if",locations:[{start:{line:1157,column:24},end:{line:1162,column:25}},{start:{line:1157,column:24},end:{line:1162,column:25}}],line:1157},"60":{loc:{start:{line:1182,column:23},end:{line:1182,column:48}},type:"binary-expr",locations:[{start:{line:1182,column:23},end:{line:1182,column:31}},{start:{line:1182,column:35},end:{line:1182,column:48}}],line:1182},"61":{loc:{start:{line:1186,column:16},end:{line:1191,column:17}},type:"if",locations:[{start:{line:1186,column:16},end:{line:1191,column:17}},{start:{line:1186,column:16},end:{line:1191,column:17}}],line:1186},"62":{loc:{start:{line:1204,column:23},end:{line:1204,column:48}},type:"binary-expr",locations:[{start:{line:1204,column:23},end:{line:1204,column:31}},{start:{line:1204,column:35},end:{line:1204,column:48}}],line:1204},"63":{loc:{start:{line:1208,column:16},end:{line:1213,column:17}},type:"if",locations:[{start:{line:1208,column:16},end:{line:1213,column:17}},{start:{line:1208,column:16},end:{line:1213,column:17}}],line:1208},"64":{loc:{start:{line:1226,column:23},end:{line:1226,column:48}},type:"binary-expr",locations:[{start:{line:1226,column:23},end:{line:1226,column:31}},{start:{line:1226,column:35},end:{line:1226,column:48}}],line:1226},"65":{loc:{start:{line:1230,column:16},end:{line:1235,column:17}},type:"if",locations:[{start:{line:1230,column:16},end:{line:1235,column:17}},{start:{line:1230,column:16},end:{line:1235,column:17}}],line:1230},"66":{loc:{start:{line:1318,column:37},end:{line:1318,column:59}},type:"binary-expr",locations:[{start:{line:1318,column:37},end:{line:1318,column:53}},{start:{line:1318,column:57},end:{line:1318,column:59}}],line:1318},"67":{loc:{start:{line:1325,column:16},end:{line:1330,column:17}},type:"if",locations:[{start:{line:1325,column:16},end:{line:1330,column:17}},{start:{line:1325,column:16},end:{line:1330,column:17}}],line:1325},"68":{loc:{start:{line:1334,column:35},end:{line:1334,column:61}},type:"binary-expr",locations:[{start:{line:1334,column:35},end:{line:1334,column:52}},{start:{line:1334,column:59},end:{line:1334,column:61}}],line:1334},"69":{loc:{start:{line:1335,column:35},end:{line:1335,column:61}},type:"binary-expr",locations:[{start:{line:1335,column:35},end:{line:1335,column:51}},{start:{line:1335,column:59},end:{line:1335,column:61}}],line:1335},"70":{loc:{start:{line:1336,column:35},end:{line:1336,column:63}},type:"binary-expr",locations:[{start:{line:1336,column:35},end:{line:1336,column:53}},{start:{line:1336,column:59},end:{line:1336,column:63}}],line:1336},"71":{loc:{start:{line:1389,column:12},end:{line:1392,column:13}},type:"if",locations:[{start:{line:1389,column:12},end:{line:1392,column:13}},{start:{line:1389,column:12},end:{line:1392,column:13}}],line:1389},"72":{loc:{start:{line:1389,column:16},end:{line:1389,column:54}},type:"binary-expr",locations:[{start:{line:1389,column:16},end:{line:1389,column:25}},{start:{line:1389,column:29},end:{line:1389,column:54}}],line:1389},"73":{loc:{start:{line:1393,column:23},end:{line:1393,column:48}},type:"binary-expr",locations:[{start:{line:1393,column:23},end:{line:1393,column:31}},{start:{line:1393,column:35},end:{line:1393,column:48}}],line:1393},"74":{loc:{start:{line:1395,column:22},end:{line:1395,column:35}},type:"binary-expr",locations:[{start:{line:1395,column:22},end:{line:1395,column:29}},{start:{line:1395,column:33},end:{line:1395,column:35}}],line:1395},"75":{loc:{start:{line:1396,column:12},end:{line:1398,column:13}},type:"if",locations:[{start:{line:1396,column:12},end:{line:1398,column:13}},{start:{line:1396,column:12},end:{line:1398,column:13}}],line:1396},"76":{loc:{start:{line:1402,column:16},end:{line:1408,column:17}},type:"if",locations:[{start:{line:1402,column:16},end:{line:1408,column:17}},{start:{line:1402,column:16},end:{line:1408,column:17}}],line:1402},"77":{loc:{start:{line:1415,column:22},end:{line:1415,column:35}},type:"binary-expr",locations:[{start:{line:1415,column:22},end:{line:1415,column:29}},{start:{line:1415,column:33},end:{line:1415,column:35}}],line:1415},"78":{loc:{start:{line:1416,column:12},end:{line:1418,column:13}},type:"if",locations:[{start:{line:1416,column:12},end:{line:1418,column:13}},{start:{line:1416,column:12},end:{line:1418,column:13}}],line:1416},"79":{loc:{start:{line:1449,column:12},end:{line:1451,column:13}},type:"if",locations:[{start:{line:1449,column:12},end:{line:1451,column:13}},{start:{line:1449,column:12},end:{line:1451,column:13}}],line:1449},"80":{loc:{start:{line:1453,column:12},end:{line:1455,column:13}},type:"if",locations:[{start:{line:1453,column:12},end:{line:1455,column:13}},{start:{line:1453,column:12},end:{line:1455,column:13}}],line:1453},"81":{loc:{start:{line:1457,column:12},end:{line:1459,column:13}},type:"if",locations:[{start:{line:1457,column:12},end:{line:1459,column:13}},{start:{line:1457,column:12},end:{line:1459,column:13}}],line:1457},"82":{loc:{start:{line:1457,column:16},end:{line:1457,column:79}},type:"binary-expr",locations:[{start:{line:1457,column:16},end:{line:1457,column:25}},{start:{line:1457,column:30},end:{line:1457,column:51}},{start:{line:1457,column:55},end:{line:1457,column:78}}],line:1457},"83":{loc:{start:{line:1462,column:12},end:{line:1504,column:13}},type:"if",locations:[{start:{line:1462,column:12},end:{line:1504,column:13}},{start:{line:1462,column:12},end:{line:1504,column:13}}],line:1462},"84":{loc:{start:{line:1465,column:16},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1465,column:16},end:{line:1500,column:17}},{start:{line:1465,column:16},end:{line:1500,column:17}}],line:1465},"85":{loc:{start:{line:1465,column:20},end:{line:1465,column:55}},type:"binary-expr",locations:[{start:{line:1465,column:20},end:{line:1465,column:41}},{start:{line:1465,column:45},end:{line:1465,column:55}}],line:1465},"86":{loc:{start:{line:1472,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1472,column:21},end:{line:1500,column:17}},{start:{line:1472,column:21},end:{line:1500,column:17}}],line:1472},"87":{loc:{start:{line:1472,column:25},end:{line:1472,column:59}},type:"binary-expr",locations:[{start:{line:1472,column:25},end:{line:1472,column:46}},{start:{line:1472,column:50},end:{line:1472,column:59}}],line:1472},"88":{loc:{start:{line:1477,column:20},end:{line:1482,column:21}},type:"if",locations:[{start:{line:1477,column:20},end:{line:1482,column:21}},{start:{line:1477,column:20},end:{line:1482,column:21}}],line:1477},"89":{loc:{start:{line:1484,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1484,column:21},end:{line:1500,column:17}},{start:{line:1484,column:21},end:{line:1500,column:17}}],line:1484},"90":{loc:{start:{line:1484,column:25},end:{line:1484,column:58}},type:"binary-expr",locations:[{start:{line:1484,column:25},end:{line:1484,column:44}},{start:{line:1484,column:48},end:{line:1484,column:58}}],line:1484},"91":{loc:{start:{line:1496,column:24},end:{line:1498,column:25}},type:"if",locations:[{start:{line:1496,column:24},end:{line:1498,column:25}},{start:{line:1496,column:24},end:{line:1498,column:25}}],line:1496},"92":{loc:{start:{line:1525,column:23},end:{line:1525,column:48}},type:"binary-expr",locations:[{start:{line:1525,column:23},end:{line:1525,column:31}},{start:{line:1525,column:35},end:{line:1525,column:48}}],line:1525},"93":{loc:{start:{line:1528,column:16},end:{line:1553,column:17}},type:"if",locations:[{start:{line:1528,column:16},end:{line:1553,column:17}},{start:{line:1528,column:16},end:{line:1553,column:17}}],line:1528},"94":{loc:{start:{line:1533,column:20},end:{line:1535,column:21}},type:"if",locations:[{start:{line:1533,column:20},end:{line:1535,column:21}},{start:{line:1533,column:20},end:{line:1535,column:21}}],line:1533},"95":{loc:{start:{line:1540,column:20},end:{line:1552,column:21}},type:"if",locations:[{start:{line:1540,column:20},end:{line:1552,column:21}},{start:{line:1540,column:20},end:{line:1552,column:21}}],line:1540},"96":{loc:{start:{line:1542,column:28},end:{line:1547,column:29}},type:"if",locations:[{start:{line:1542,column:28},end:{line:1547,column:29}},{start:{line:1542,column:28},end:{line:1547,column:29}}],line:1542},"97":{loc:{start:{line:1575,column:23},end:{line:1575,column:48}},type:"binary-expr",locations:[{start:{line:1575,column:23},end:{line:1575,column:31}},{start:{line:1575,column:35},end:{line:1575,column:48}}],line:1575},"98":{loc:{start:{line:1637,column:19},end:{line:1637,column:77}},type:"binary-expr",locations:[{start:{line:1637,column:19},end:{line:1637,column:72}},{start:{line:1637,column:76},end:{line:1637,column:77}}],line:1637},"99":{loc:{start:{line:1657,column:23},end:{line:1657,column:48}},type:"binary-expr",locations:[{start:{line:1657,column:23},end:{line:1657,column:31}},{start:{line:1657,column:35},end:{line:1657,column:48}}],line:1657},"100":{loc:{start:{line:1689,column:12},end:{line:1692,column:13}},type:"if",locations:[{start:{line:1689,column:12},end:{line:1692,column:13}},{start:{line:1689,column:12},end:{line:1692,column:13}}],line:1689},"101":{loc:{start:{line:1689,column:16},end:{line:1689,column:54}},type:"binary-expr",locations:[{start:{line:1689,column:16},end:{line:1689,column:25}},{start:{line:1689,column:29},end:{line:1689,column:54}}],line:1689},"102":{loc:{start:{line:1694,column:23},end:{line:1694,column:48}},type:"binary-expr",locations:[{start:{line:1694,column:23},end:{line:1694,column:31}},{start:{line:1694,column:35},end:{line:1694,column:48}}],line:1694},"103":{loc:{start:{line:1695,column:22},end:{line:1695,column:35}},type:"binary-expr",locations:[{start:{line:1695,column:22},end:{line:1695,column:29}},{start:{line:1695,column:33},end:{line:1695,column:35}}],line:1695},"104":{loc:{start:{line:1699,column:16},end:{line:1702,column:17}},type:"if",locations:[{start:{line:1699,column:16},end:{line:1702,column:17}},{start:{line:1699,column:16},end:{line:1702,column:17}}],line:1699},"105":{loc:{start:{line:1749,column:12},end:{line:1752,column:13}},type:"if",locations:[{start:{line:1749,column:12},end:{line:1752,column:13}},{start:{line:1749,column:12},end:{line:1752,column:13}}],line:1749},"106":{loc:{start:{line:1749,column:16},end:{line:1749,column:54}},type:"binary-expr",locations:[{start:{line:1749,column:16},end:{line:1749,column:25}},{start:{line:1749,column:29},end:{line:1749,column:54}}],line:1749},"107":{loc:{start:{line:1754,column:23},end:{line:1754,column:48}},type:"binary-expr",locations:[{start:{line:1754,column:23},end:{line:1754,column:31}},{start:{line:1754,column:35},end:{line:1754,column:48}}],line:1754},"108":{loc:{start:{line:1755,column:22},end:{line:1755,column:35}},type:"binary-expr",locations:[{start:{line:1755,column:22},end:{line:1755,column:29}},{start:{line:1755,column:33},end:{line:1755,column:35}}],line:1755},"109":{loc:{start:{line:1759,column:16},end:{line:1762,column:17}},type:"if",locations:[{start:{line:1759,column:16},end:{line:1762,column:17}},{start:{line:1759,column:16},end:{line:1762,column:17}}],line:1759},"110":{loc:{start:{line:1765,column:27},end:{line:1765,column:52}},type:"binary-expr",locations:[{start:{line:1765,column:27},end:{line:1765,column:46}},{start:{line:1765,column:50},end:{line:1765,column:52}}],line:1765},"111":{loc:{start:{line:1795,column:23},end:{line:1795,column:48}},type:"binary-expr",locations:[{start:{line:1795,column:23},end:{line:1795,column:31}},{start:{line:1795,column:35},end:{line:1795,column:48}}],line:1795},"112":{loc:{start:{line:1816,column:21},end:{line:1816,column:33}},type:"binary-expr",locations:[{start:{line:1816,column:21},end:{line:1816,column:27}},{start:{line:1816,column:31},end:{line:1816,column:33}}],line:1816},"113":{loc:{start:{line:1818,column:12},end:{line:1841,column:13}},type:"if",locations:[{start:{line:1818,column:12},end:{line:1841,column:13}},{start:{line:1818,column:12},end:{line:1841,column:13}}],line:1818},"114":{loc:{start:{line:1821,column:20},end:{line:1834,column:21}},type:"if",locations:[{start:{line:1821,column:20},end:{line:1834,column:21}},{start:{line:1821,column:20},end:{line:1834,column:21}}],line:1821},"115":{loc:{start:{line:1827,column:28},end:{line:1832,column:29}},type:"if",locations:[{start:{line:1827,column:28},end:{line:1832,column:29}},{start:{line:1827,column:28},end:{line:1832,column:29}}],line:1827},"116":{loc:{start:{line:2021,column:19},end:{line:2021,column:50}},type:"binary-expr",locations:[{start:{line:2021,column:19},end:{line:2021,column:44}},{start:{line:2021,column:48},end:{line:2021,column:50}}],line:2021},"117":{loc:{start:{line:2031,column:19},end:{line:2031,column:55}},type:"binary-expr",locations:[{start:{line:2031,column:19},end:{line:2031,column:47}},{start:{line:2031,column:51},end:{line:2031,column:55}}],line:2031},"118":{loc:{start:{line:2057,column:19},end:{line:2057,column:69}},type:"binary-expr",locations:[{start:{line:2057,column:19},end:{line:2057,column:61}},{start:{line:2057,column:65},end:{line:2057,column:69}}],line:2057},"119":{loc:{start:{line:2067,column:19},end:{line:2067,column:61}},type:"binary-expr",locations:[{start:{line:2067,column:19},end:{line:2067,column:53}},{start:{line:2067,column:57},end:{line:2067,column:61}}],line:2067},"120":{loc:{start:{line:2078,column:19},end:{line:2078,column:65}},type:"binary-expr",locations:[{start:{line:2078,column:19},end:{line:2078,column:59}},{start:{line:2078,column:63},end:{line:2078,column:65}}],line:2078},"121":{loc:{start:{line:2088,column:19},end:{line:2088,column:48}},type:"binary-expr",locations:[{start:{line:2088,column:19},end:{line:2088,column:40}},{start:{line:2088,column:44},end:{line:2088,column:48}}],line:2088},"122":{loc:{start:{line:2098,column:19},end:{line:2098,column:57}},type:"binary-expr",locations:[{start:{line:2098,column:19},end:{line:2098,column:49}},{start:{line:2098,column:53},end:{line:2098,column:57}}],line:2098},"123":{loc:{start:{line:2110,column:19},end:{line:2110,column:66}},type:"binary-expr",locations:[{start:{line:2110,column:19},end:{line:2110,column:58}},{start:{line:2110,column:62},end:{line:2110,column:66}}],line:2110},"124":{loc:{start:{line:2122,column:19},end:{line:2122,column:73}},type:"binary-expr",locations:[{start:{line:2122,column:19},end:{line:2122,column:67}},{start:{line:2122,column:71},end:{line:2122,column:73}}],line:2122},"125":{loc:{start:{line:2173,column:19},end:{line:2173,column:77}},type:"binary-expr",locations:[{start:{line:2173,column:19},end:{line:2173,column:72}},{start:{line:2173,column:76},end:{line:2173,column:77}}],line:2173},"126":{loc:{start:{line:2194,column:12},end:{line:2197,column:13}},type:"if",locations:[{start:{line:2194,column:12},end:{line:2197,column:13}},{start:{line:2194,column:12},end:{line:2197,column:13}}],line:2194},"127":{loc:{start:{line:2194,column:16},end:{line:2194,column:54}},type:"binary-expr",locations:[{start:{line:2194,column:16},end:{line:2194,column:25}},{start:{line:2194,column:29},end:{line:2194,column:54}}],line:2194},"128":{loc:{start:{line:2199,column:23},end:{line:2199,column:48}},type:"binary-expr",locations:[{start:{line:2199,column:23},end:{line:2199,column:31}},{start:{line:2199,column:35},end:{line:2199,column:48}}],line:2199},"129":{loc:{start:{line:2200,column:22},end:{line:2200,column:35}},type:"binary-expr",locations:[{start:{line:2200,column:22},end:{line:2200,column:29}},{start:{line:2200,column:33},end:{line:2200,column:35}}],line:2200},"130":{loc:{start:{line:2204,column:16},end:{line:2207,column:17}},type:"if",locations:[{start:{line:2204,column:16},end:{line:2207,column:17}},{start:{line:2204,column:16},end:{line:2207,column:17}}],line:2204},"131":{loc:{start:{line:2210,column:27},end:{line:2210,column:52}},type:"binary-expr",locations:[{start:{line:2210,column:27},end:{line:2210,column:46}},{start:{line:2210,column:50},end:{line:2210,column:52}}],line:2210},"132":{loc:{start:{line:2368,column:23},end:{line:2368,column:48}},type:"binary-expr",locations:[{start:{line:2368,column:23},end:{line:2368,column:31}},{start:{line:2368,column:35},end:{line:2368,column:48}}],line:2368},"133":{loc:{start:{line:2372,column:16},end:{line:2377,column:17}},type:"if",locations:[{start:{line:2372,column:16},end:{line:2377,column:17}},{start:{line:2372,column:16},end:{line:2377,column:17}}],line:2372},"134":{loc:{start:{line:2397,column:23},end:{line:2397,column:48}},type:"binary-expr",locations:[{start:{line:2397,column:23},end:{line:2397,column:31}},{start:{line:2397,column:35},end:{line:2397,column:48}}],line:2397},"135":{loc:{start:{line:2401,column:16},end:{line:2406,column:17}},type:"if",locations:[{start:{line:2401,column:16},end:{line:2406,column:17}},{start:{line:2401,column:16},end:{line:2406,column:17}}],line:2401},"136":{loc:{start:{line:2593,column:23},end:{line:2593,column:48}},type:"binary-expr",locations:[{start:{line:2593,column:23},end:{line:2593,column:31}},{start:{line:2593,column:35},end:{line:2593,column:48}}],line:2593},"137":{loc:{start:{line:2597,column:16},end:{line:2613,column:17}},type:"if",locations:[{start:{line:2597,column:16},end:{line:2613,column:17}},{start:{line:2597,column:16},end:{line:2613,column:17}}],line:2597},"138":{loc:{start:{line:2606,column:24},end:{line:2611,column:25}},type:"if",locations:[{start:{line:2606,column:24},end:{line:2611,column:25}},{start:{line:2606,column:24},end:{line:2611,column:25}}],line:2606},"139":{loc:{start:{line:2767,column:12},end:{line:2770,column:13}},type:"if",locations:[{start:{line:2767,column:12},end:{line:2770,column:13}},{start:{line:2767,column:12},end:{line:2770,column:13}}],line:2767},"140":{loc:{start:{line:2767,column:16},end:{line:2767,column:53}},type:"binary-expr",locations:[{start:{line:2767,column:16},end:{line:2767,column:25}},{start:{line:2767,column:29},end:{line:2767,column:53}}],line:2767},"141":{loc:{start:{line:2772,column:23},end:{line:2772,column:48}},type:"binary-expr",locations:[{start:{line:2772,column:23},end:{line:2772,column:31}},{start:{line:2772,column:35},end:{line:2772,column:48}}],line:2772},"142":{loc:{start:{line:2773,column:21},end:{line:2773,column:33}},type:"binary-expr",locations:[{start:{line:2773,column:21},end:{line:2773,column:27}},{start:{line:2773,column:31},end:{line:2773,column:33}}],line:2773},"143":{loc:{start:{line:2785,column:12},end:{line:2790,column:13}},type:"if",locations:[{start:{line:2785,column:12},end:{line:2790,column:13}},{start:{line:2785,column:12},end:{line:2790,column:13}}],line:2785},"144":{loc:{start:{line:2862,column:12},end:{line:2866,column:13}},type:"if",locations:[{start:{line:2862,column:12},end:{line:2866,column:13}},{start:{line:2862,column:12},end:{line:2866,column:13}}],line:2862},"145":{loc:{start:{line:2862,column:16},end:{line:2862,column:77}},type:"binary-expr",locations:[{start:{line:2862,column:16},end:{line:2862,column:36}},{start:{line:2862,column:40},end:{line:2862,column:64}},{start:{line:2862,column:68},end:{line:2862,column:77}}],line:2862},"146":{loc:{start:{line:2868,column:21},end:{line:2868,column:33}},type:"binary-expr",locations:[{start:{line:2868,column:21},end:{line:2868,column:27}},{start:{line:2868,column:31},end:{line:2868,column:33}}],line:2868},"147":{loc:{start:{line:2890,column:23},end:{line:2890,column:67}},type:"cond-expr",locations:[{start:{line:2890,column:49},end:{line:2890,column:55}},{start:{line:2890,column:58},end:{line:2890,column:67}}],line:2890},"148":{loc:{start:{line:3001,column:12},end:{line:3005,column:13}},type:"if",locations:[{start:{line:3001,column:12},end:{line:3005,column:13}},{start:{line:3001,column:12},end:{line:3005,column:13}}],line:3001},"149":{loc:{start:{line:3001,column:16},end:{line:3001,column:83}},type:"binary-expr",locations:[{start:{line:3001,column:16},end:{line:3001,column:42}},{start:{line:3001,column:46},end:{line:3001,column:70}},{start:{line:3001,column:74},end:{line:3001,column:83}}],line:3001},"150":{loc:{start:{line:3007,column:12},end:{line:3010,column:13}},type:"if",locations:[{start:{line:3007,column:12},end:{line:3010,column:13}},{start:{line:3007,column:12},end:{line:3010,column:13}}],line:3007},"151":{loc:{start:{line:3007,column:16},end:{line:3007,column:53}},type:"binary-expr",locations:[{start:{line:3007,column:16},end:{line:3007,column:40}},{start:{line:3007,column:44},end:{line:3007,column:53}}],line:3007},"152":{loc:{start:{line:3012,column:21},end:{line:3012,column:33}},type:"binary-expr",locations:[{start:{line:3012,column:21},end:{line:3012,column:27}},{start:{line:3012,column:31},end:{line:3012,column:33}}],line:3012},"153":{loc:{start:{line:3072,column:12},end:{line:3074,column:13}},type:"if",locations:[{start:{line:3072,column:12},end:{line:3074,column:13}},{start:{line:3072,column:12},end:{line:3074,column:13}}],line:3072},"154":{loc:{start:{line:3072,column:16},end:{line:3072,column:78}},type:"binary-expr",locations:[{start:{line:3072,column:16},end:{line:3072,column:26}},{start:{line:3072,column:30},end:{line:3072,column:53}},{start:{line:3072,column:57},end:{line:3072,column:78}}],line:3072},"155":{loc:{start:{line:3098,column:12},end:{line:3100,column:13}},type:"if",locations:[{start:{line:3098,column:12},end:{line:3100,column:13}},{start:{line:3098,column:12},end:{line:3100,column:13}}],line:3098},"156":{loc:{start:{line:3102,column:23},end:{line:3102,column:48}},type:"binary-expr",locations:[{start:{line:3102,column:23},end:{line:3102,column:31}},{start:{line:3102,column:35},end:{line:3102,column:48}}],line:3102},"157":{loc:{start:{line:3106,column:16},end:{line:3119,column:17}},type:"if",locations:[{start:{line:3106,column:16},end:{line:3119,column:17}},{start:{line:3106,column:16},end:{line:3119,column:17}}],line:3106},"158":{loc:{start:{line:3112,column:24},end:{line:3117,column:25}},type:"if",locations:[{start:{line:3112,column:24},end:{line:3117,column:25}},{start:{line:3112,column:24},end:{line:3117,column:25}}],line:3112},"159":{loc:{start:{line:3136,column:16},end:{line:3138,column:17}},type:"if",locations:[{start:{line:3136,column:16},end:{line:3138,column:17}},{start:{line:3136,column:16},end:{line:3138,column:17}}],line:3136},"160":{loc:{start:{line:3136,column:19},end:{line:3136,column:45}},type:"binary-expr",locations:[{start:{line:3136,column:19},end:{line:3136,column:24}},{start:{line:3136,column:28},end:{line:3136,column:45}}],line:3136},"161":{loc:{start:{line:3159,column:16},end:{line:3164,column:17}},type:"if",locations:[{start:{line:3159,column:16},end:{line:3164,column:17}},{start:{line:3159,column:16},end:{line:3164,column:17}}],line:3159},"162":{loc:{start:{line:3172,column:23},end:{line:3172,column:48}},type:"binary-expr",locations:[{start:{line:3172,column:23},end:{line:3172,column:31}},{start:{line:3172,column:35},end:{line:3172,column:48}}],line:3172},"163":{loc:{start:{line:3180,column:12},end:{line:3189,column:13}},type:"if",locations:[{start:{line:3180,column:12},end:{line:3189,column:13}},{start:{line:3180,column:12},end:{line:3189,column:13}}],line:3180},"164":{loc:{start:{line:3196,column:12},end:{line:3211,column:13}},type:"if",locations:[{start:{line:3196,column:12},end:{line:3211,column:13}},{start:{line:3196,column:12},end:{line:3211,column:13}}],line:3196},"165":{loc:{start:{line:3308,column:23},end:{line:3308,column:48}},type:"binary-expr",locations:[{start:{line:3308,column:23},end:{line:3308,column:31}},{start:{line:3308,column:35},end:{line:3308,column:48}}],line:3308},"166":{loc:{start:{line:3334,column:23},end:{line:3334,column:48}},type:"binary-expr",locations:[{start:{line:3334,column:23},end:{line:3334,column:31}},{start:{line:3334,column:35},end:{line:3334,column:48}}],line:3334},"167":{loc:{start:{line:3361,column:23},end:{line:3361,column:48}},type:"binary-expr",locations:[{start:{line:3361,column:23},end:{line:3361,column:31}},{start:{line:3361,column:35},end:{line:3361,column:48}}],line:3361},"168":{loc:{start:{line:3362,column:21},end:{line:3362,column:33}},type:"binary-expr",locations:[{start:{line:3362,column:21},end:{line:3362,column:27}},{start:{line:3362,column:31},end:{line:3362,column:33}}],line:3362},"169":{loc:{start:{line:3363,column:33},end:{line:3363,column:66}},type:"binary-expr",locations:[{start:{line:3363,column:33},end:{line:3363,column:51}},{start:{line:3363,column:55},end:{line:3363,column:66}}],line:3363},"170":{loc:{start:{line:3367,column:16},end:{line:3372,column:17}},type:"if",locations:[{start:{line:3367,column:16},end:{line:3372,column:17}},{start:{line:3367,column:16},end:{line:3372,column:17}}],line:3367},"171":{loc:{start:{line:3392,column:23},end:{line:3392,column:48}},type:"binary-expr",locations:[{start:{line:3392,column:23},end:{line:3392,column:31}},{start:{line:3392,column:35},end:{line:3392,column:48}}],line:3392},"172":{loc:{start:{line:3433,column:23},end:{line:3433,column:48}},type:"binary-expr",locations:[{start:{line:3433,column:23},end:{line:3433,column:31}},{start:{line:3433,column:35},end:{line:3433,column:48}}],line:3433},"173":{loc:{start:{line:3460,column:23},end:{line:3460,column:48}},type:"binary-expr",locations:[{start:{line:3460,column:23},end:{line:3460,column:31}},{start:{line:3460,column:35},end:{line:3460,column:48}}],line:3460},"174":{loc:{start:{line:3461,column:21},end:{line:3461,column:33}},type:"binary-expr",locations:[{start:{line:3461,column:21},end:{line:3461,column:27}},{start:{line:3461,column:31},end:{line:3461,column:33}}],line:3461},"175":{loc:{start:{line:3462,column:33},end:{line:3462,column:66}},type:"binary-expr",locations:[{start:{line:3462,column:33},end:{line:3462,column:51}},{start:{line:3462,column:55},end:{line:3462,column:66}}],line:3462},"176":{loc:{start:{line:3466,column:16},end:{line:3471,column:17}},type:"if",locations:[{start:{line:3466,column:16},end:{line:3471,column:17}},{start:{line:3466,column:16},end:{line:3471,column:17}}],line:3466},"177":{loc:{start:{line:3497,column:23},end:{line:3497,column:48}},type:"binary-expr",locations:[{start:{line:3497,column:23},end:{line:3497,column:31}},{start:{line:3497,column:35},end:{line:3497,column:48}}],line:3497},"178":{loc:{start:{line:3498,column:21},end:{line:3498,column:33}},type:"binary-expr",locations:[{start:{line:3498,column:21},end:{line:3498,column:27}},{start:{line:3498,column:31},end:{line:3498,column:33}}],line:3498},"179":{loc:{start:{line:3499,column:33},end:{line:3499,column:66}},type:"binary-expr",locations:[{start:{line:3499,column:33},end:{line:3499,column:51}},{start:{line:3499,column:55},end:{line:3499,column:66}}],line:3499},"180":{loc:{start:{line:3503,column:16},end:{line:3508,column:17}},type:"if",locations:[{start:{line:3503,column:16},end:{line:3508,column:17}},{start:{line:3503,column:16},end:{line:3508,column:17}}],line:3503},"181":{loc:{start:{line:3528,column:23},end:{line:3528,column:48}},type:"binary-expr",locations:[{start:{line:3528,column:23},end:{line:3528,column:31}},{start:{line:3528,column:35},end:{line:3528,column:48}}],line:3528},"182":{loc:{start:{line:3532,column:16},end:{line:3537,column:17}},type:"if",locations:[{start:{line:3532,column:16},end:{line:3537,column:17}},{start:{line:3532,column:16},end:{line:3537,column:17}}],line:3532},"183":{loc:{start:{line:3558,column:23},end:{line:3558,column:48}},type:"binary-expr",locations:[{start:{line:3558,column:23},end:{line:3558,column:31}},{start:{line:3558,column:35},end:{line:3558,column:48}}],line:3558},"184":{loc:{start:{line:3586,column:23},end:{line:3586,column:48}},type:"binary-expr",locations:[{start:{line:3586,column:23},end:{line:3586,column:31}},{start:{line:3586,column:35},end:{line:3586,column:48}}],line:3586},"185":{loc:{start:{line:3613,column:23},end:{line:3613,column:48}},type:"binary-expr",locations:[{start:{line:3613,column:23},end:{line:3613,column:31}},{start:{line:3613,column:35},end:{line:3613,column:48}}],line:3613},"186":{loc:{start:{line:3617,column:16},end:{line:3622,column:17}},type:"if",locations:[{start:{line:3617,column:16},end:{line:3622,column:17}},{start:{line:3617,column:16},end:{line:3622,column:17}}],line:3617},"187":{loc:{start:{line:3643,column:23},end:{line:3643,column:48}},type:"binary-expr",locations:[{start:{line:3643,column:23},end:{line:3643,column:31}},{start:{line:3643,column:35},end:{line:3643,column:48}}],line:3643},"188":{loc:{start:{line:3647,column:16},end:{line:3652,column:17}},type:"if",locations:[{start:{line:3647,column:16},end:{line:3652,column:17}},{start:{line:3647,column:16},end:{line:3652,column:17}}],line:3647},"189":{loc:{start:{line:3673,column:23},end:{line:3673,column:48}},type:"binary-expr",locations:[{start:{line:3673,column:23},end:{line:3673,column:31}},{start:{line:3673,column:35},end:{line:3673,column:48}}],line:3673},"190":{loc:{start:{line:3700,column:25},end:{line:3700,column:46}},type:"binary-expr",locations:[{start:{line:3700,column:25},end:{line:3700,column:39}},{start:{line:3700,column:43},end:{line:3700,column:46}}],line:3700},"191":{loc:{start:{line:3702,column:12},end:{line:3706,column:13}},type:"if",locations:[{start:{line:3702,column:12},end:{line:3706,column:13}},{start:{line:3702,column:12},end:{line:3706,column:13}}],line:3702},"192":{loc:{start:{line:3709,column:16},end:{line:3712,column:32}},type:"binary-expr",locations:[{start:{line:3709,column:16},end:{line:3709,column:35}},{start:{line:3710,column:16},end:{line:3710,column:31}},{start:{line:3711,column:16},end:{line:3711,column:33}},{start:{line:3712,column:16},end:{line:3712,column:32}}],line:3709},"193":{loc:{start:{line:3715,column:30},end:{line:3715,column:62}},type:"binary-expr",locations:[{start:{line:3715,column:30},end:{line:3715,column:45}},{start:{line:3715,column:49},end:{line:3715,column:62}}],line:3715},"194":{loc:{start:{line:3716,column:33},end:{line:3716,column:68}},type:"binary-expr",locations:[{start:{line:3716,column:33},end:{line:3716,column:51}},{start:{line:3716,column:55},end:{line:3716,column:68}}],line:3716},"195":{loc:{start:{line:3717,column:29},end:{line:3717,column:60}},type:"binary-expr",locations:[{start:{line:3717,column:29},end:{line:3717,column:43}},{start:{line:3717,column:47},end:{line:3717,column:60}}],line:3717},"196":{loc:{start:{line:3718,column:31},end:{line:3718,column:64}},type:"binary-expr",locations:[{start:{line:3718,column:31},end:{line:3718,column:47}},{start:{line:3718,column:51},end:{line:3718,column:64}}],line:3718},"197":{loc:{start:{line:3719,column:30},end:{line:3719,column:62}},type:"binary-expr",locations:[{start:{line:3719,column:30},end:{line:3719,column:45}},{start:{line:3719,column:49},end:{line:3719,column:62}}],line:3719},"198":{loc:{start:{line:3722,column:34},end:{line:3722,column:70}},type:"binary-expr",locations:[{start:{line:3722,column:34},end:{line:3722,column:53}},{start:{line:3722,column:57},end:{line:3722,column:70}}],line:3722},"199":{loc:{start:{line:3723,column:43},end:{line:3723,column:88}},type:"binary-expr",locations:[{start:{line:3723,column:43},end:{line:3723,column:71}},{start:{line:3723,column:75},end:{line:3723,column:88}}],line:3723},"200":{loc:{start:{line:3732,column:24},end:{line:3735,column:25}},type:"if",locations:[{start:{line:3732,column:24},end:{line:3735,column:25}},{start:{line:3732,column:24},end:{line:3735,column:25}}],line:3732},"201":{loc:{start:{line:3738,column:39},end:{line:3738,column:96}},type:"binary-expr",locations:[{start:{line:3738,column:39},end:{line:3738,column:65}},{start:{line:3738,column:69},end:{line:3738,column:96}}],line:3738},"202":{loc:{start:{line:3739,column:24},end:{line:3776,column:25}},type:"if",locations:[{start:{line:3739,column:24},end:{line:3776,column:25}},{start:{line:3739,column:24},end:{line:3776,column:25}}],line:3739},"203":{loc:{start:{line:3743,column:28},end:{line:3756,column:29}},type:"if",locations:[{start:{line:3743,column:28},end:{line:3756,column:29}},{start:{line:3743,column:28},end:{line:3756,column:29}}],line:3743},"204":{loc:{start:{line:3749,column:32},end:{line:3755,column:33}},type:"if",locations:[{start:{line:3749,column:32},end:{line:3755,column:33}},{start:{line:3749,column:32},end:{line:3755,column:33}}],line:3749},"205":{loc:{start:{line:3762,column:28},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3762,column:28},end:{line:3775,column:29}},{start:{line:3762,column:28},end:{line:3775,column:29}}],line:3762},"206":{loc:{start:{line:3762,column:32},end:{line:3762,column:72}},type:"binary-expr",locations:[{start:{line:3762,column:32},end:{line:3762,column:56}},{start:{line:3762,column:60},end:{line:3762,column:72}}],line:3762},"207":{loc:{start:{line:3769,column:33},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3769,column:33},end:{line:3775,column:29}},{start:{line:3769,column:33},end:{line:3775,column:29}}],line:3769},"208":{loc:{start:{line:3769,column:37},end:{line:3769,column:81}},type:"binary-expr",locations:[{start:{line:3769,column:37},end:{line:3769,column:63}},{start:{line:3769,column:67},end:{line:3769,column:81}}],line:3769},"209":{loc:{start:{line:3782,column:20},end:{line:3784,column:21}},type:"if",locations:[{start:{line:3782,column:20},end:{line:3784,column:21}},{start:{line:3782,column:20},end:{line:3784,column:21}}],line:3782},"210":{loc:{start:{line:3805,column:23},end:{line:3805,column:48}},type:"binary-expr",locations:[{start:{line:3805,column:23},end:{line:3805,column:31}},{start:{line:3805,column:35},end:{line:3805,column:48}}],line:3805},"211":{loc:{start:{line:3889,column:12},end:{line:3893,column:13}},type:"if",locations:[{start:{line:3889,column:12},end:{line:3893,column:13}},{start:{line:3889,column:12},end:{line:3893,column:13}}],line:3889},"212":{loc:{start:{line:3889,column:16},end:{line:3889,column:78}},type:"binary-expr",locations:[{start:{line:3889,column:16},end:{line:3889,column:37}},{start:{line:3889,column:41},end:{line:3889,column:65}},{start:{line:3889,column:69},end:{line:3889,column:78}}],line:3889},"213":{loc:{start:{line:3895,column:23},end:{line:3895,column:48}},type:"binary-expr",locations:[{start:{line:3895,column:23},end:{line:3895,column:31}},{start:{line:3895,column:35},end:{line:3895,column:48}}],line:3895},"214":{loc:{start:{line:3896,column:21},end:{line:3896,column:33}},type:"binary-expr",locations:[{start:{line:3896,column:21},end:{line:3896,column:27}},{start:{line:3896,column:31},end:{line:3896,column:33}}],line:3896},"215":{loc:{start:{line:3899,column:12},end:{line:3901,column:13}},type:"if",locations:[{start:{line:3899,column:12},end:{line:3901,column:13}},{start:{line:3899,column:12},end:{line:3901,column:13}}],line:3899},"216":{loc:{start:{line:3899,column:17},end:{line:3899,column:39}},type:"binary-expr",locations:[{start:{line:3899,column:17},end:{line:3899,column:33}},{start:{line:3899,column:37},end:{line:3899,column:39}}],line:3899},"217":{loc:{start:{line:3903,column:12},end:{line:3906,column:13}},type:"if",locations:[{start:{line:3903,column:12},end:{line:3906,column:13}},{start:{line:3903,column:12},end:{line:3906,column:13}}],line:3903},"218":{loc:{start:{line:3909,column:16},end:{line:3915,column:17}},type:"if",locations:[{start:{line:3909,column:16},end:{line:3915,column:17}},{start:{line:3909,column:16},end:{line:3915,column:17}}],line:3909},"219":{loc:{start:{line:3972,column:12},end:{line:3976,column:13}},type:"if",locations:[{start:{line:3972,column:12},end:{line:3976,column:13}},{start:{line:3972,column:12},end:{line:3976,column:13}}],line:3972},"220":{loc:{start:{line:3972,column:16},end:{line:3972,column:78}},type:"binary-expr",locations:[{start:{line:3972,column:16},end:{line:3972,column:37}},{start:{line:3972,column:41},end:{line:3972,column:65}},{start:{line:3972,column:69},end:{line:3972,column:78}}],line:3972},"221":{loc:{start:{line:3978,column:23},end:{line:3978,column:48}},type:"binary-expr",locations:[{start:{line:3978,column:23},end:{line:3978,column:31}},{start:{line:3978,column:35},end:{line:3978,column:48}}],line:3978},"222":{loc:{start:{line:3979,column:21},end:{line:3979,column:33}},type:"binary-expr",locations:[{start:{line:3979,column:21},end:{line:3979,column:27}},{start:{line:3979,column:31},end:{line:3979,column:33}}],line:3979},"223":{loc:{start:{line:3983,column:12},end:{line:3985,column:13}},type:"if",locations:[{start:{line:3983,column:12},end:{line:3985,column:13}},{start:{line:3983,column:12},end:{line:3985,column:13}}],line:3983},"224":{loc:{start:{line:3987,column:29},end:{line:3987,column:62}},type:"binary-expr",locations:[{start:{line:3987,column:29},end:{line:3987,column:47}},{start:{line:3987,column:51},end:{line:3987,column:62}}],line:3987},"225":{loc:{start:{line:4004,column:20},end:{line:4009,column:21}},type:"if",locations:[{start:{line:4004,column:20},end:{line:4009,column:21}},{start:{line:4004,column:20},end:{line:4009,column:21}}],line:4004},"226":{loc:{start:{line:4072,column:20},end:{line:4072,column:31}},type:"binary-expr",locations:[{start:{line:4072,column:20},end:{line:4072,column:25}},{start:{line:4072,column:29},end:{line:4072,column:31}}],line:4072},"227":{loc:{start:{line:4073,column:26},end:{line:4073,column:43}},type:"binary-expr",locations:[{start:{line:4073,column:26},end:{line:4073,column:37}},{start:{line:4073,column:41},end:{line:4073,column:43}}],line:4073},"228":{loc:{start:{line:4082,column:34},end:{line:4082,column:55}},type:"binary-expr",locations:[{start:{line:4082,column:34},end:{line:4082,column:47}},{start:{line:4082,column:51},end:{line:4082,column:55}}],line:4082},"229":{loc:{start:{line:4192,column:20},end:{line:4192,column:31}},type:"binary-expr",locations:[{start:{line:4192,column:20},end:{line:4192,column:25}},{start:{line:4192,column:29},end:{line:4192,column:31}}],line:4192},"230":{loc:{start:{line:4193,column:26},end:{line:4193,column:43}},type:"binary-expr",locations:[{start:{line:4193,column:26},end:{line:4193,column:37}},{start:{line:4193,column:41},end:{line:4193,column:43}}],line:4193},"231":{loc:{start:{line:4258,column:20},end:{line:4258,column:31}},type:"binary-expr",locations:[{start:{line:4258,column:20},end:{line:4258,column:25}},{start:{line:4258,column:29},end:{line:4258,column:31}}],line:4258},"232":{loc:{start:{line:4259,column:26},end:{line:4259,column:43}},type:"binary-expr",locations:[{start:{line:4259,column:26},end:{line:4259,column:37}},{start:{line:4259,column:41},end:{line:4259,column:43}}],line:4259},"233":{loc:{start:{line:4263,column:34},end:{line:4263,column:55}},type:"binary-expr",locations:[{start:{line:4263,column:34},end:{line:4263,column:47}},{start:{line:4263,column:51},end:{line:4263,column:55}}],line:4263},"234":{loc:{start:{line:4273,column:12},end:{line:4275,column:13}},type:"if",locations:[{start:{line:4273,column:12},end:{line:4275,column:13}},{start:{line:4273,column:12},end:{line:4275,column:13}}],line:4273},"235":{loc:{start:{line:4273,column:16},end:{line:4273,column:59}},type:"binary-expr",locations:[{start:{line:4273,column:16},end:{line:4273,column:36}},{start:{line:4273,column:40},end:{line:4273,column:59}}],line:4273},"236":{loc:{start:{line:4276,column:12},end:{line:4278,column:13}},type:"if",locations:[{start:{line:4276,column:12},end:{line:4278,column:13}},{start:{line:4276,column:12},end:{line:4278,column:13}}],line:4276},"237":{loc:{start:{line:4276,column:16},end:{line:4276,column:60}},type:"binary-expr",locations:[{start:{line:4276,column:16},end:{line:4276,column:37}},{start:{line:4276,column:41},end:{line:4276,column:60}}],line:4276},"238":{loc:{start:{line:4279,column:12},end:{line:4282,column:13}},type:"if",locations:[{start:{line:4279,column:12},end:{line:4282,column:13}},{start:{line:4279,column:12},end:{line:4282,column:13}}],line:4279},"239":{loc:{start:{line:4388,column:32},end:{line:4388,column:59}},type:"binary-expr",locations:[{start:{line:4388,column:32},end:{line:4388,column:51}},{start:{line:4388,column:55},end:{line:4388,column:59}}],line:4388},"240":{loc:{start:{line:4402,column:12},end:{line:4405,column:13}},type:"if",locations:[{start:{line:4402,column:12},end:{line:4405,column:13}},{start:{line:4402,column:12},end:{line:4405,column:13}}],line:4402},"241":{loc:{start:{line:4406,column:12},end:{line:4408,column:13}},type:"if",locations:[{start:{line:4406,column:12},end:{line:4408,column:13}},{start:{line:4406,column:12},end:{line:4408,column:13}}],line:4406},"242":{loc:{start:{line:4406,column:16},end:{line:4406,column:55}},type:"binary-expr",locations:[{start:{line:4406,column:16},end:{line:4406,column:21}},{start:{line:4406,column:25},end:{line:4406,column:55}}],line:4406},"243":{loc:{start:{line:4411,column:32},end:{line:4411,column:69}},type:"binary-expr",locations:[{start:{line:4411,column:32},end:{line:4411,column:49}},{start:{line:4411,column:53},end:{line:4411,column:69}}],line:4411},"244":{loc:{start:{line:4550,column:41},end:{line:4551,column:53}},type:"cond-expr",locations:[{start:{line:4551,column:16},end:{line:4551,column:46}},{start:{line:4551,column:49},end:{line:4551,column:53}}],line:4550},"245":{loc:{start:{line:4570,column:12},end:{line:4572,column:13}},type:"if",locations:[{start:{line:4570,column:12},end:{line:4572,column:13}},{start:{line:4570,column:12},end:{line:4572,column:13}}],line:4570},"246":{loc:{start:{line:4570,column:16},end:{line:4570,column:49}},type:"binary-expr",locations:[{start:{line:4570,column:16},end:{line:4570,column:19}},{start:{line:4570,column:23},end:{line:4570,column:49}}],line:4570},"247":{loc:{start:{line:4574,column:12},end:{line:4576,column:13}},type:"if",locations:[{start:{line:4574,column:12},end:{line:4576,column:13}},{start:{line:4574,column:12},end:{line:4576,column:13}}],line:4574},"248":{loc:{start:{line:4595,column:12},end:{line:4597,column:13}},type:"if",locations:[{start:{line:4595,column:12},end:{line:4597,column:13}},{start:{line:4595,column:12},end:{line:4597,column:13}}],line:4595},"249":{loc:{start:{line:4598,column:12},end:{line:4604,column:13}},type:"if",locations:[{start:{line:4598,column:12},end:{line:4604,column:13}},{start:{line:4598,column:12},end:{line:4604,column:13}}],line:4598},"250":{loc:{start:{line:4605,column:12},end:{line:4610,column:13}},type:"if",locations:[{start:{line:4605,column:12},end:{line:4610,column:13}},{start:{line:4605,column:12},end:{line:4610,column:13}}],line:4605},"251":{loc:{start:{line:4618,column:12},end:{line:4623,column:13}},type:"if",locations:[{start:{line:4618,column:12},end:{line:4623,column:13}},{start:{line:4618,column:12},end:{line:4623,column:13}}],line:4618},"252":{loc:{start:{line:4643,column:12},end:{line:4645,column:13}},type:"if",locations:[{start:{line:4643,column:12},end:{line:4645,column:13}},{start:{line:4643,column:12},end:{line:4645,column:13}}],line:4643},"253":{loc:{start:{line:4649,column:12},end:{line:4651,column:13}},type:"if",locations:[{start:{line:4649,column:12},end:{line:4651,column:13}},{start:{line:4649,column:12},end:{line:4651,column:13}}],line:4649},"254":{loc:{start:{line:4653,column:12},end:{line:4656,column:13}},type:"if",locations:[{start:{line:4653,column:12},end:{line:4656,column:13}},{start:{line:4653,column:12},end:{line:4656,column:13}}],line:4653},"255":{loc:{start:{line:4653,column:16},end:{line:4653,column:86}},type:"binary-expr",locations:[{start:{line:4653,column:16},end:{line:4653,column:35}},{start:{line:4653,column:39},end:{line:4653,column:86}}],line:4653},"256":{loc:{start:{line:4658,column:12},end:{line:4661,column:13}},type:"if",locations:[{start:{line:4658,column:12},end:{line:4661,column:13}},{start:{line:4658,column:12},end:{line:4661,column:13}}],line:4658},"257":{loc:{start:{line:4658,column:16},end:{line:4658,column:104}},type:"binary-expr",locations:[{start:{line:4658,column:16},end:{line:4658,column:35}},{start:{line:4658,column:39},end:{line:4658,column:104}}],line:4658},"258":{loc:{start:{line:4663,column:12},end:{line:4665,column:13}},type:"if",locations:[{start:{line:4663,column:12},end:{line:4665,column:13}},{start:{line:4663,column:12},end:{line:4665,column:13}}],line:4663},"259":{loc:{start:{line:4663,column:16},end:{line:4663,column:85}},type:"binary-expr",locations:[{start:{line:4663,column:16},end:{line:4663,column:40}},{start:{line:4663,column:44},end:{line:4663,column:85}}],line:4663},"260":{loc:{start:{line:4678,column:31},end:{line:4678,column:83}},type:"cond-expr",locations:[{start:{line:4678,column:63},end:{line:4678,column:71}},{start:{line:4678,column:74},end:{line:4678,column:83}}],line:4678},"261":{loc:{start:{line:4694,column:12},end:{line:4696,column:13}},type:"if",locations:[{start:{line:4694,column:12},end:{line:4696,column:13}},{start:{line:4694,column:12},end:{line:4696,column:13}}],line:4694},"262":{loc:{start:{line:4698,column:12},end:{line:4700,column:13}},type:"if",locations:[{start:{line:4698,column:12},end:{line:4700,column:13}},{start:{line:4698,column:12},end:{line:4700,column:13}}],line:4698},"263":{loc:{start:{line:4709,column:12},end:{line:4711,column:13}},type:"if",locations:[{start:{line:4709,column:12},end:{line:4711,column:13}},{start:{line:4709,column:12},end:{line:4711,column:13}}],line:4709},"264":{loc:{start:{line:4738,column:12},end:{line:4740,column:13}},type:"if",locations:[{start:{line:4738,column:12},end:{line:4740,column:13}},{start:{line:4738,column:12},end:{line:4740,column:13}}],line:4738},"265":{loc:{start:{line:4742,column:12},end:{line:4744,column:13}},type:"if",locations:[{start:{line:4742,column:12},end:{line:4744,column:13}},{start:{line:4742,column:12},end:{line:4744,column:13}}],line:4742},"266":{loc:{start:{line:4746,column:12},end:{line:4748,column:13}},type:"if",locations:[{start:{line:4746,column:12},end:{line:4748,column:13}},{start:{line:4746,column:12},end:{line:4748,column:13}}],line:4746},"267":{loc:{start:{line:4746,column:16},end:{line:4746,column:73}},type:"binary-expr",locations:[{start:{line:4746,column:16},end:{line:4746,column:48}},{start:{line:4746,column:52},end:{line:4746,column:73}}],line:4746},"268":{loc:{start:{line:4749,column:12},end:{line:4751,column:13}},type:"if",locations:[{start:{line:4749,column:12},end:{line:4751,column:13}},{start:{line:4749,column:12},end:{line:4751,column:13}}],line:4749},"269":{loc:{start:{line:4749,column:16},end:{line:4749,column:69}},type:"binary-expr",locations:[{start:{line:4749,column:16},end:{line:4749,column:46}},{start:{line:4749,column:50},end:{line:4749,column:69}}],line:4749},"270":{loc:{start:{line:4752,column:12},end:{line:4754,column:13}},type:"if",locations:[{start:{line:4752,column:12},end:{line:4754,column:13}},{start:{line:4752,column:12},end:{line:4754,column:13}}],line:4752},"271":{loc:{start:{line:4752,column:16},end:{line:4752,column:71}},type:"binary-expr",locations:[{start:{line:4752,column:16},end:{line:4752,column:47}},{start:{line:4752,column:51},end:{line:4752,column:71}}],line:4752},"272":{loc:{start:{line:4755,column:12},end:{line:4757,column:13}},type:"if",locations:[{start:{line:4755,column:12},end:{line:4757,column:13}},{start:{line:4755,column:12},end:{line:4757,column:13}}],line:4755},"273":{loc:{start:{line:4755,column:16},end:{line:4755,column:73}},type:"binary-expr",locations:[{start:{line:4755,column:16},end:{line:4755,column:48}},{start:{line:4755,column:52},end:{line:4755,column:73}}],line:4755},"274":{loc:{start:{line:4783,column:12},end:{line:4785,column:13}},type:"if",locations:[{start:{line:4783,column:12},end:{line:4785,column:13}},{start:{line:4783,column:12},end:{line:4785,column:13}}],line:4783},"275":{loc:{start:{line:4787,column:12},end:{line:4789,column:13}},type:"if",locations:[{start:{line:4787,column:12},end:{line:4789,column:13}},{start:{line:4787,column:12},end:{line:4789,column:13}}],line:4787},"276":{loc:{start:{line:4814,column:12},end:{line:4816,column:13}},type:"if",locations:[{start:{line:4814,column:12},end:{line:4816,column:13}},{start:{line:4814,column:12},end:{line:4816,column:13}}],line:4814},"277":{loc:{start:{line:4818,column:12},end:{line:4820,column:13}},type:"if",locations:[{start:{line:4818,column:12},end:{line:4820,column:13}},{start:{line:4818,column:12},end:{line:4820,column:13}}],line:4818},"278":{loc:{start:{line:4821,column:12},end:{line:4823,column:13}},type:"if",locations:[{start:{line:4821,column:12},end:{line:4823,column:13}},{start:{line:4821,column:12},end:{line:4823,column:13}}],line:4821},"279":{loc:{start:{line:4846,column:12},end:{line:4848,column:13}},type:"if",locations:[{start:{line:4846,column:12},end:{line:4848,column:13}},{start:{line:4846,column:12},end:{line:4848,column:13}}],line:4846},"280":{loc:{start:{line:4850,column:12},end:{line:4852,column:13}},type:"if",locations:[{start:{line:4850,column:12},end:{line:4852,column:13}},{start:{line:4850,column:12},end:{line:4852,column:13}}],line:4850},"281":{loc:{start:{line:4860,column:12},end:{line:4862,column:13}},type:"if",locations:[{start:{line:4860,column:12},end:{line:4862,column:13}},{start:{line:4860,column:12},end:{line:4862,column:13}}],line:4860},"282":{loc:{start:{line:4883,column:12},end:{line:4885,column:13}},type:"if",locations:[{start:{line:4883,column:12},end:{line:4885,column:13}},{start:{line:4883,column:12},end:{line:4885,column:13}}],line:4883},"283":{loc:{start:{line:4887,column:12},end:{line:4889,column:13}},type:"if",locations:[{start:{line:4887,column:12},end:{line:4889,column:13}},{start:{line:4887,column:12},end:{line:4889,column:13}}],line:4887},"284":{loc:{start:{line:4894,column:12},end:{line:4896,column:13}},type:"if",locations:[{start:{line:4894,column:12},end:{line:4896,column:13}},{start:{line:4894,column:12},end:{line:4896,column:13}}],line:4894},"285":{loc:{start:{line:4894,column:16},end:{line:4894,column:73}},type:"binary-expr",locations:[{start:{line:4894,column:16},end:{line:4894,column:48}},{start:{line:4894,column:52},end:{line:4894,column:73}}],line:4894},"286":{loc:{start:{line:4897,column:12},end:{line:4899,column:13}},type:"if",locations:[{start:{line:4897,column:12},end:{line:4899,column:13}},{start:{line:4897,column:12},end:{line:4899,column:13}}],line:4897},"287":{loc:{start:{line:4897,column:16},end:{line:4897,column:69}},type:"binary-expr",locations:[{start:{line:4897,column:16},end:{line:4897,column:46}},{start:{line:4897,column:50},end:{line:4897,column:69}}],line:4897},"288":{loc:{start:{line:4900,column:12},end:{line:4902,column:13}},type:"if",locations:[{start:{line:4900,column:12},end:{line:4902,column:13}},{start:{line:4900,column:12},end:{line:4902,column:13}}],line:4900},"289":{loc:{start:{line:4900,column:16},end:{line:4900,column:71}},type:"binary-expr",locations:[{start:{line:4900,column:16},end:{line:4900,column:47}},{start:{line:4900,column:51},end:{line:4900,column:71}}],line:4900},"290":{loc:{start:{line:4903,column:12},end:{line:4905,column:13}},type:"if",locations:[{start:{line:4903,column:12},end:{line:4905,column:13}},{start:{line:4903,column:12},end:{line:4905,column:13}}],line:4903},"291":{loc:{start:{line:4903,column:16},end:{line:4903,column:73}},type:"binary-expr",locations:[{start:{line:4903,column:16},end:{line:4903,column:48}},{start:{line:4903,column:52},end:{line:4903,column:73}}],line:4903},"292":{loc:{start:{line:4929,column:12},end:{line:4931,column:13}},type:"if",locations:[{start:{line:4929,column:12},end:{line:4931,column:13}},{start:{line:4929,column:12},end:{line:4931,column:13}}],line:4929},"293":{loc:{start:{line:4933,column:12},end:{line:4935,column:13}},type:"if",locations:[{start:{line:4933,column:12},end:{line:4935,column:13}},{start:{line:4933,column:12},end:{line:4935,column:13}}],line:4933},"294":{loc:{start:{line:4958,column:12},end:{line:4960,column:13}},type:"if",locations:[{start:{line:4958,column:12},end:{line:4960,column:13}},{start:{line:4958,column:12},end:{line:4960,column:13}}],line:4958},"295":{loc:{start:{line:4962,column:12},end:{line:4964,column:13}},type:"if",locations:[{start:{line:4962,column:12},end:{line:4964,column:13}},{start:{line:4962,column:12},end:{line:4964,column:13}}],line:4962},"296":{loc:{start:{line:4965,column:12},end:{line:4967,column:13}},type:"if",locations:[{start:{line:4965,column:12},end:{line:4967,column:13}},{start:{line:4965,column:12},end:{line:4967,column:13}}],line:4965},"297":{loc:{start:{line:4990,column:12},end:{line:4992,column:13}},type:"if",locations:[{start:{line:4990,column:12},end:{line:4992,column:13}},{start:{line:4990,column:12},end:{line:4992,column:13}}],line:4990},"298":{loc:{start:{line:4995,column:12},end:{line:5047,column:13}},type:"if",locations:[{start:{line:4995,column:12},end:{line:5047,column:13}},{start:{line:4995,column:12},end:{line:5047,column:13}}],line:4995},"299":{loc:{start:{line:4995,column:16},end:{line:5002,column:41}},type:"binary-expr",locations:[{start:{line:4995,column:16},end:{line:4995,column:58}},{start:{line:4996,column:16},end:{line:5002,column:41}}],line:4995},"300":{loc:{start:{line:5008,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5008,column:17},end:{line:5047,column:13}},{start:{line:5008,column:17},end:{line:5047,column:13}}],line:5008},"301":{loc:{start:{line:5008,column:21},end:{line:5018,column:37}},type:"binary-expr",locations:[{start:{line:5008,column:21},end:{line:5008,column:40}},{start:{line:5009,column:16},end:{line:5018,column:37}}],line:5008},"302":{loc:{start:{line:5025,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5025,column:17},end:{line:5047,column:13}},{start:{line:5025,column:17},end:{line:5047,column:13}}],line:5025},"303":{loc:{start:{line:5025,column:21},end:{line:5032,column:37}},type:"binary-expr",locations:[{start:{line:5025,column:21},end:{line:5025,column:43}},{start:{line:5026,column:16},end:{line:5032,column:37}}],line:5025},"304":{loc:{start:{line:5039,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5039,column:17},end:{line:5047,column:13}},{start:{line:5039,column:17},end:{line:5047,column:13}}],line:5039},"305":{loc:{start:{line:5039,column:21},end:{line:5040,column:41}},type:"binary-expr",locations:[{start:{line:5039,column:21},end:{line:5039,column:74}},{start:{line:5040,column:16},end:{line:5040,column:41}}],line:5039},"306":{loc:{start:{line:5045,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5045,column:17},end:{line:5047,column:13}},{start:{line:5045,column:17},end:{line:5047,column:13}}],line:5045},"307":{loc:{start:{line:5108,column:12},end:{line:5110,column:13}},type:"if",locations:[{start:{line:5108,column:12},end:{line:5110,column:13}},{start:{line:5108,column:12},end:{line:5110,column:13}}],line:5108},"308":{loc:{start:{line:5113,column:16},end:{line:5116,column:17}},type:"if",locations:[{start:{line:5113,column:16},end:{line:5116,column:17}},{start:{line:5113,column:16},end:{line:5116,column:17}}],line:5113},"309":{loc:{start:{line:5118,column:16},end:{line:5123,column:17}},type:"if",locations:[{start:{line:5118,column:16},end:{line:5123,column:17}},{start:{line:5118,column:16},end:{line:5123,column:17}}],line:5118},"310":{loc:{start:{line:5118,column:20},end:{line:5118,column:65}},type:"binary-expr",locations:[{start:{line:5118,column:20},end:{line:5118,column:39}},{start:{line:5118,column:43},end:{line:5118,column:65}}],line:5118},"311":{loc:{start:{line:5154,column:12},end:{line:5157,column:13}},type:"if",locations:[{start:{line:5154,column:12},end:{line:5157,column:13}},{start:{line:5154,column:12},end:{line:5157,column:13}}],line:5154},"312":{loc:{start:{line:5158,column:19},end:{line:5158,column:29}},type:"binary-expr",locations:[{start:{line:5158,column:19},end:{line:5158,column:23}},{start:{line:5158,column:27},end:{line:5158,column:29}}],line:5158},"313":{loc:{start:{line:5161,column:16},end:{line:5166,column:17}},type:"if",locations:[{start:{line:5161,column:16},end:{line:5166,column:17}},{start:{line:5161,column:16},end:{line:5166,column:17}}],line:5161},"314":{loc:{start:{line:5225,column:20},end:{line:5225,column:31}},type:"binary-expr",locations:[{start:{line:5225,column:20},end:{line:5225,column:25}},{start:{line:5225,column:29},end:{line:5225,column:31}}],line:5225},"315":{loc:{start:{line:5226,column:26},end:{line:5226,column:43}},type:"binary-expr",locations:[{start:{line:5226,column:26},end:{line:5226,column:37}},{start:{line:5226,column:41},end:{line:5226,column:43}}],line:5226},"316":{loc:{start:{line:5235,column:12},end:{line:5237,column:13}},type:"if",locations:[{start:{line:5235,column:12},end:{line:5237,column:13}},{start:{line:5235,column:12},end:{line:5237,column:13}}],line:5235},"317":{loc:{start:{line:5238,column:12},end:{line:5240,column:13}},type:"if",locations:[{start:{line:5238,column:12},end:{line:5240,column:13}},{start:{line:5238,column:12},end:{line:5240,column:13}}],line:5238},"318":{loc:{start:{line:5241,column:12},end:{line:5243,column:13}},type:"if",locations:[{start:{line:5241,column:12},end:{line:5243,column:13}},{start:{line:5241,column:12},end:{line:5243,column:13}}],line:5241},"319":{loc:{start:{line:5244,column:12},end:{line:5246,column:13}},type:"if",locations:[{start:{line:5244,column:12},end:{line:5246,column:13}},{start:{line:5244,column:12},end:{line:5246,column:13}}],line:5244},"320":{loc:{start:{line:5249,column:12},end:{line:5251,column:13}},type:"if",locations:[{start:{line:5249,column:12},end:{line:5251,column:13}},{start:{line:5249,column:12},end:{line:5251,column:13}}],line:5249},"321":{loc:{start:{line:5317,column:19},end:{line:5317,column:77}},type:"binary-expr",locations:[{start:{line:5317,column:19},end:{line:5317,column:48}},{start:{line:5317,column:52},end:{line:5317,column:69}},{start:{line:5317,column:73},end:{line:5317,column:77}}],line:5317},"322":{loc:{start:{line:5335,column:16},end:{line:5337,column:17}},type:"if",locations:[{start:{line:5335,column:16},end:{line:5337,column:17}},{start:{line:5335,column:16},end:{line:5337,column:17}}],line:5335},"323":{loc:{start:{line:5342,column:16},end:{line:5344,column:17}},type:"if",locations:[{start:{line:5342,column:16},end:{line:5344,column:17}},{start:{line:5342,column:16},end:{line:5344,column:17}}],line:5342},"324":{loc:{start:{line:5454,column:12},end:{line:5457,column:13}},type:"if",locations:[{start:{line:5454,column:12},end:{line:5457,column:13}},{start:{line:5454,column:12},end:{line:5457,column:13}}],line:5454},"325":{loc:{start:{line:5454,column:16},end:{line:5454,column:59}},type:"binary-expr",locations:[{start:{line:5454,column:16},end:{line:5454,column:25}},{start:{line:5454,column:29},end:{line:5454,column:59}}],line:5454},"326":{loc:{start:{line:5460,column:23},end:{line:5460,column:72}},type:"cond-expr",locations:[{start:{line:5460,column:38},end:{line:5460,column:67}},{start:{line:5460,column:70},end:{line:5460,column:72}}],line:5460},"327":{loc:{start:{line:5487,column:26},end:{line:5487,column:68}},type:"cond-expr",locations:[{start:{line:5487,column:43},end:{line:5487,column:60}},{start:{line:5487,column:65},end:{line:5487,column:67}}],line:5487},"328":{loc:{start:{line:5556,column:12},end:{line:5559,column:13}},type:"if",locations:[{start:{line:5556,column:12},end:{line:5559,column:13}},{start:{line:5556,column:12},end:{line:5559,column:13}}],line:5556},"329":{loc:{start:{line:5564,column:32},end:{line:5564,column:76}},type:"binary-expr",locations:[{start:{line:5564,column:32},end:{line:5564,column:70}},{start:{line:5564,column:74},end:{line:5564,column:76}}],line:5564},"330":{loc:{start:{line:5565,column:12},end:{line:5568,column:13}},type:"if",locations:[{start:{line:5565,column:12},end:{line:5568,column:13}},{start:{line:5565,column:12},end:{line:5568,column:13}}],line:5565},"331":{loc:{start:{line:5572,column:12},end:{line:5574,column:13}},type:"if",locations:[{start:{line:5572,column:12},end:{line:5574,column:13}},{start:{line:5572,column:12},end:{line:5574,column:13}}],line:5572},"332":{loc:{start:{line:5572,column:16},end:{line:5572,column:84}},type:"binary-expr",locations:[{start:{line:5572,column:16},end:{line:5572,column:48}},{start:{line:5572,column:52},end:{line:5572,column:84}}],line:5572},"333":{loc:{start:{line:5614,column:16},end:{line:5616,column:17}},type:"if",locations:[{start:{line:5614,column:16},end:{line:5616,column:17}},{start:{line:5614,column:16},end:{line:5616,column:17}}],line:5614},"334":{loc:{start:{line:5645,column:12},end:{line:5648,column:13}},type:"if",locations:[{start:{line:5645,column:12},end:{line:5648,column:13}},{start:{line:5645,column:12},end:{line:5648,column:13}}],line:5645},"335":{loc:{start:{line:5649,column:23},end:{line:5649,column:48}},type:"binary-expr",locations:[{start:{line:5649,column:23},end:{line:5649,column:31}},{start:{line:5649,column:35},end:{line:5649,column:48}}],line:5649},"336":{loc:{start:{line:5651,column:12},end:{line:5654,column:13}},type:"if",locations:[{start:{line:5651,column:12},end:{line:5654,column:13}},{start:{line:5651,column:12},end:{line:5654,column:13}}],line:5651},"337":{loc:{start:{line:5655,column:12},end:{line:5658,column:13}},type:"if",locations:[{start:{line:5655,column:12},end:{line:5658,column:13}},{start:{line:5655,column:12},end:{line:5658,column:13}}],line:5655},"338":{loc:{start:{line:5662,column:29},end:{line:5662,column:107}},type:"binary-expr",locations:[{start:{line:5662,column:29},end:{line:5662,column:48}},{start:{line:5662,column:52},end:{line:5662,column:78}},{start:{line:5662,column:82},end:{line:5662,column:107}}],line:5662},"339":{loc:{start:{line:5663,column:35},end:{line:5663,column:123}},type:"binary-expr",locations:[{start:{line:5663,column:35},end:{line:5663,column:54}},{start:{line:5663,column:58},end:{line:5663,column:89}},{start:{line:5663,column:93},end:{line:5663,column:123}}],line:5663},"340":{loc:{start:{line:5664,column:35},end:{line:5664,column:123}},type:"binary-expr",locations:[{start:{line:5664,column:35},end:{line:5664,column:54}},{start:{line:5664,column:58},end:{line:5664,column:89}},{start:{line:5664,column:93},end:{line:5664,column:123}}],line:5664},"341":{loc:{start:{line:5670,column:16},end:{line:5676,column:17}},type:"if",locations:[{start:{line:5670,column:16},end:{line:5676,column:17}},{start:{line:5670,column:16},end:{line:5676,column:17}}],line:5670},"342":{loc:{start:{line:5713,column:24},end:{line:5713,column:39}},type:"binary-expr",locations:[{start:{line:5713,column:24},end:{line:5713,column:33}},{start:{line:5713,column:37},end:{line:5713,column:39}}],line:5713},"343":{loc:{start:{line:5733,column:12},end:{line:5736,column:13}},type:"if",locations:[{start:{line:5733,column:12},end:{line:5736,column:13}},{start:{line:5733,column:12},end:{line:5736,column:13}}],line:5733},"344":{loc:{start:{line:5733,column:16},end:{line:5733,column:53}},type:"binary-expr",locations:[{start:{line:5733,column:16},end:{line:5733,column:40}},{start:{line:5733,column:44},end:{line:5733,column:53}}],line:5733},"345":{loc:{start:{line:5738,column:21},end:{line:5738,column:33}},type:"binary-expr",locations:[{start:{line:5738,column:21},end:{line:5738,column:27}},{start:{line:5738,column:31},end:{line:5738,column:33}}],line:5738},"346":{loc:{start:{line:5739,column:23},end:{line:5739,column:47}},type:"binary-expr",locations:[{start:{line:5739,column:23},end:{line:5739,column:31}},{start:{line:5739,column:35},end:{line:5739,column:47}}],line:5739},"347":{loc:{start:{line:5744,column:16},end:{line:5750,column:17}},type:"if",locations:[{start:{line:5744,column:16},end:{line:5750,column:17}},{start:{line:5744,column:16},end:{line:5750,column:17}}],line:5744},"348":{loc:{start:{line:5774,column:21},end:{line:5774,column:33}},type:"binary-expr",locations:[{start:{line:5774,column:21},end:{line:5774,column:27}},{start:{line:5774,column:31},end:{line:5774,column:33}}],line:5774},"349":{loc:{start:{line:5777,column:29},end:{line:5777,column:49}},type:"binary-expr",locations:[{start:{line:5777,column:29},end:{line:5777,column:44}},{start:{line:5777,column:48},end:{line:5777,column:49}}],line:5777},"350":{loc:{start:{line:5783,column:23},end:{line:5783,column:48}},type:"binary-expr",locations:[{start:{line:5783,column:23},end:{line:5783,column:31}},{start:{line:5783,column:35},end:{line:5783,column:48}}],line:5783},"351":{loc:{start:{line:5791,column:16},end:{line:5799,column:17}},type:"if",locations:[{start:{line:5791,column:16},end:{line:5799,column:17}},{start:{line:5791,column:16},end:{line:5799,column:17}}],line:5791},"352":{loc:{start:{line:5795,column:38},end:{line:5795,column:76}},type:"cond-expr",locations:[{start:{line:5795,column:53},end:{line:5795,column:72}},{start:{line:5795,column:75},end:{line:5795,column:76}}],line:5795}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0,0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0,0],"322":[0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0,0],"339":[0,0,0],"340":[0,0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"1e13507780108878ff5a225bb0ab3d0d383df74e"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore +cov_1ks4ntaci2=function(){return actualCoverage;};}return actualCoverage;}cov_1ks4ntaci2();cov_1ks4ntaci2().s[0]++;/*!*/ // Copyright 2014 Splunk, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"): you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +(function(){"use strict";cov_1ks4ntaci2().f[0]++;var Context=(cov_1ks4ntaci2().s[1]++,require('./context'));var Http=(cov_1ks4ntaci2().s[2]++,require('./http'));var Async=(cov_1ks4ntaci2().s[3]++,require('./async'));var Paths=(cov_1ks4ntaci2().s[4]++,require('./paths').Paths);var Class=(cov_1ks4ntaci2().s[5]++,require('./jquery.class').Class);var utils=(cov_1ks4ntaci2().s[6]++,require('./utils'));var root=(cov_1ks4ntaci2().s[7]++,(cov_1ks4ntaci2().b[0][0]++,exports)||(cov_1ks4ntaci2().b[0][1]++,this));var Service=(cov_1ks4ntaci2().s[8]++,null);/** + * Contains functionality common to Splunk Enterprise and Splunk Storm. + * + * This class is an implementation detail and is therefore SDK-private. + * + * @class splunkjs.private.BaseService + * @extends splunkjs.Context + */var BaseService=(cov_1ks4ntaci2().s[9]++,Context.extend({init:function(){cov_1ks4ntaci2().f[1]++;cov_1ks4ntaci2().s[10]++;this._super.apply(this,arguments);}}));/** + * Provides a root access point to Splunk functionality with typed access to + * Splunk resources such as searches, indexes, inputs, and more. Provides + * methods to authenticate and create specialized instances of the service. + * + * @class splunkjs.Service + * @extends splunkjs.private.BaseService + */cov_1ks4ntaci2().s[11]++;module.exports=root=Service=BaseService.extend({/** + * Constructor for `splunkjs.Service`. + * + * @constructor + * @param {splunkjs.Http} http An instance of a `splunkjs.Http` class. + * @param {Object} params A dictionary of optional parameters: + * - `scheme` (_string_): The scheme ("http" or "https") for accessing Splunk. + * - `host` (_string_): The host name (the default is "localhost"). + * - `port` (_integer_): The port number (the default is 8089). + * - `username` (_string_): The Splunk account username, which is used to authenticate the Splunk instance. + * - `password` (_string_): The password, which is used to authenticate the Splunk instance. + * - `owner` (_string_): The owner (username) component of the namespace. + * - `app` (_string_): The app component of the namespace. + * - `sessionKey` (_string_): The current session token. + * - `autologin` (_boolean_): `true` to automatically try to log in again if the session terminates, `false` if not (`true` by default). + * - `version` (_string_): The version string for Splunk, for example "4.3.2" (the default is "5.0"). + * @return {splunkjs.Service} A new `splunkjs.Service` instance. + * + * @method splunkjs.Service + */init:function(){cov_1ks4ntaci2().f[2]++;cov_1ks4ntaci2().s[12]++;this._super.apply(this,arguments);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[13]++;this.specialize=utils.bind(this,this.specialize);cov_1ks4ntaci2().s[14]++;this.apps=utils.bind(this,this.apps);cov_1ks4ntaci2().s[15]++;this.configurations=utils.bind(this,this.configurations);cov_1ks4ntaci2().s[16]++;this.indexes=utils.bind(this,this.indexes);cov_1ks4ntaci2().s[17]++;this.savedSearches=utils.bind(this,this.savedSearches);cov_1ks4ntaci2().s[18]++;this.jobs=utils.bind(this,this.jobs);cov_1ks4ntaci2().s[19]++;this.users=utils.bind(this,this.users);cov_1ks4ntaci2().s[20]++;this.currentUser=utils.bind(this,this.currentUser);cov_1ks4ntaci2().s[21]++;this.views=utils.bind(this,this.views);cov_1ks4ntaci2().s[22]++;this.firedAlertGroups=utils.bind(this,this.firedAlertGroups);cov_1ks4ntaci2().s[23]++;this.dataModels=utils.bind(this,this.dataModels);},/** + * Creates a specialized version of the current `Service` instance for + * a specific namespace context. + * + * @example + * + * var svc = ...; + * var newService = svc.specialize("myuser", "unix"); + * + * @param {String} owner The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * @param {String} app The app context for this resource (such as "search"). The "-" wildcard means all apps. + * @return {splunkjs.Service} The specialized `Service` instance. + * + * @method splunkjs.Service + */specialize:function(owner,app){cov_1ks4ntaci2().f[3]++;cov_1ks4ntaci2().s[24]++;return new Service(this.http,{scheme:this.scheme,host:this.host,port:this.port,username:this.username,password:this.password,owner:owner,app:app,sessionKey:this.sessionKey,version:this.version});},/** + * Gets the `Applications` collection, which allows you to + * list installed apps and retrieve information about them. + * + * @example + * + * // List installed apps + * var apps = svc.apps(); + * apps.fetch(function(err) { console.log(apps.list()); }); + * + * @return {splunkjs.Service.Collection} The `Applications` collection. + * + * @endpoint apps/local + * @method splunkjs.Service + * @see splunkjs.Service.Applications + */apps:function(){cov_1ks4ntaci2().f[4]++;cov_1ks4ntaci2().s[25]++;return new root.Applications(this);},/** + * Gets the `Configurations` collection, which lets you + * create, list, and retrieve configuration (.conf) files. + * + * @example + * + * // List all properties in the 'props.conf' file + * var files = svc.configurations(); + * files.item("props", function(err, propsFile) { + * propsFile.fetch(function(err, props) { + * console.log(props.properties()); + * }); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Configurations} The `Configurations` collection. + * + * @endpoint configs + * @method splunkjs.Service + * @see splunkjs.Service.Configurations + */configurations:function(namespace){cov_1ks4ntaci2().f[5]++;cov_1ks4ntaci2().s[26]++;return new root.Configurations(this,namespace);},/** + * Gets the `Indexes` collection, which lets you create, + * list, and update indexes. + * + * @example + * + * // Check if we have an _internal index + * var indexes = svc.indexes(); + * indexes.fetch(function(err, indexes) { + * var index = indexes.item("_internal"); + * console.log("Was index found: " + !!index); + * // `index` is an Index object. + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Indexes} The `Indexes` collection. + * + * @endpoint data/indexes + * @method splunkjs.Service + * @see splunkjs.Service.Indexes + */indexes:function(namespace){cov_1ks4ntaci2().f[6]++;cov_1ks4ntaci2().s[27]++;return new root.Indexes(this,namespace);},/** + * Gets the `SavedSearches` collection, which lets you + * create, list, and update saved searches. + * + * @example + * + * // List all # of saved searches + * var savedSearches = svc.savedSearches(); + * savedSearches.fetch(function(err, savedSearches) { + * console.log("# Of Saved Searches: " + savedSearches.list().length); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.SavedSearches} The `SavedSearches` collection. + * + * @endpoint saved/searches + * @method splunkjs.Service + * @see splunkjs.Service.SavedSearches + */savedSearches:function(namespace){cov_1ks4ntaci2().f[7]++;cov_1ks4ntaci2().s[28]++;return new root.SavedSearches(this,namespace);},/** + * Gets the `StoragePasswords` collection, which lets you + * create, list, and update storage passwords. + * + * @example + * + * // List all # of storage passwords + * var storagePasswords = svc.storagePasswords(); + * storagePasswords.fetch(function(err, storagePasswords) { + * console.log("# of Storage Passwords: " + storagePasswords.list().length); + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePasswords} The `StoragePasswords` collection. + * + * @endpoint storage/passwords + * @method splunkjs.Service + * @see splunkjs.Service.StoragePasswords + */storagePasswords:function(namespace){cov_1ks4ntaci2().f[8]++;cov_1ks4ntaci2().s[29]++;return new root.StoragePasswords(this,namespace);},/** + * Gets the `FiredAlertGroupCollection` collection, which lets you + * list alert groups. + * + * @example + * + * // List all # of fired alert groups + * var firedAlertGroups = svc.firedAlertGroups(); + * firedAlertGroups.fetch(function(err, firedAlertGroups) { + * console.log("# of alert groups: " + firedAlertGroups.list().length); + * }); + * + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.FiredAlertGroupCollection} The `FiredAlertGroupCollection` collection. + * + * @endpoint saved/searches + * @method splunkjs.Service + * @see splunkjs.Service.FiredAlertGroupCollection + */firedAlertGroups:function(namespace){cov_1ks4ntaci2().f[9]++;cov_1ks4ntaci2().s[30]++;return new root.FiredAlertGroupCollection(this,namespace);},/** + * Gets the `Jobs` collection, which lets you create, list, + * and retrieve search jobs. + * + * @example + * + * // List all job IDs + * var jobs = svc.jobs(); + * jobs.fetch(function(err, jobs) { + * var list = jobs.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("Job " + (i+1) + ": " + list[i].sid); + * } + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Jobs} The `Jobs` collection. + * + * @endpoint search/jobs + * @method splunkjs.Service + * @see splunkjs.Service.Jobs + */jobs:function(namespace){cov_1ks4ntaci2().f[10]++;cov_1ks4ntaci2().s[31]++;return new root.Jobs(this,namespace);},/** + * Gets the `DataModels` collection, which lets you create, list, + * and retrieve data models. + * + * @endpoint datamodel/model + * @method splunkjs.Service + * @see splunkjs.Service.DataModels + */dataModels:function(namespace){cov_1ks4ntaci2().f[11]++;cov_1ks4ntaci2().s[32]++;return new root.DataModels(this,namespace);},/** + * Gets the `Users` collection, which lets you create, + * list, and retrieve users. + * + * @example + * + * // List all usernames + * var users = svc.users(); + * users.fetch(function(err, users) { + * var list = users.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("User " + (i+1) + ": " + list[i].properties().name); + * } + * }); + * + * @return {splunkjs.Service.Users} The `Users` collection. + * + * @endpoint authorization/users + * @method splunkjs.Service + * @see splunkjs.Service.Users + */users:function(){cov_1ks4ntaci2().f[12]++;cov_1ks4ntaci2().s[33]++;return new root.Users(this);},/** + * Gets the `Views` collection, which lets you create, + * list, and retrieve views (custom UIs built in Splunk's app framework). + * + * @example + * + * // List all views + * var views = svc.views(); + * views.fetch(function(err, views) { + * var list = views.list(); + * for(var i = 0; i < list.length; i++) { + * console.log("View " + (i+1) + ": " + list[i].properties().name); + * } + * }); + * + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Views} The `Views` collection. + * + * @endpoint data/ui/views + * @method splunkjs.Service + * @see splunkjs.Service.Views + */views:function(namespace){cov_1ks4ntaci2().f[13]++;cov_1ks4ntaci2().s[34]++;return new root.Views(this,namespace);},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.oneshotSearch`. + * + * @example + * + * service.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { + * console.log("CREATED": newJob.sid); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the created job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */search:function(query,params,namespace,callback){cov_1ks4ntaci2().f[14]++;cov_1ks4ntaci2().s[35]++;if((cov_1ks4ntaci2().b[2][0]++,!callback)&&(cov_1ks4ntaci2().b[2][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[1][0]++;cov_1ks4ntaci2().s[36]++;callback=namespace;cov_1ks4ntaci2().s[37]++;namespace=null;}else{cov_1ks4ntaci2().b[1][1]++;}var jobs=(cov_1ks4ntaci2().s[38]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[39]++;return jobs.search(query,params,callback);},/** + * A convenience method to get a `Job` by its sid. + * + * @param {String} sid The search ID for a search job. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the created job: `(err, job)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */getJob:function(sid,namespace,callback){cov_1ks4ntaci2().f[15]++;cov_1ks4ntaci2().s[40]++;if((cov_1ks4ntaci2().b[4][0]++,!callback)&&(cov_1ks4ntaci2().b[4][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[3][0]++;cov_1ks4ntaci2().s[41]++;callback=namespace;cov_1ks4ntaci2().s[42]++;namespace=null;}else{cov_1ks4ntaci2().b[3][1]++;}var job=(cov_1ks4ntaci2().s[43]++,new root.Job(this,sid,namespace));cov_1ks4ntaci2().s[44]++;return job.fetch({},callback);},/** + * Creates a oneshot search from a given search query and optional parameters. + * + * @example + * + * service.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { + * console.log("RESULT FIELDS": results.fields); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search: + * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). + * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `rf` (_string_): Specifies one or more fields to add to the search. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Function} callback A function to call with the results of the search: `(err, results)`. + * + * @endpoint search/jobs + * @method splunkjs.Service + */oneshotSearch:function(query,params,namespace,callback){cov_1ks4ntaci2().f[16]++;cov_1ks4ntaci2().s[45]++;if((cov_1ks4ntaci2().b[6][0]++,!callback)&&(cov_1ks4ntaci2().b[6][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[5][0]++;cov_1ks4ntaci2().s[46]++;callback=namespace;cov_1ks4ntaci2().s[47]++;namespace=null;}else{cov_1ks4ntaci2().b[5][1]++;}var jobs=(cov_1ks4ntaci2().s[48]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[49]++;return jobs.oneshotSearch(query,params,callback);},/** + * Gets the user that is currently logged in. + * + * @example + * + * service.currentUser(function(err, user) { + * console.log("Real name: ", user.properties().realname); + * }); + * + * @param {Function} callback A function to call with the user instance: `(err, user)`. + * @return {splunkjs.Service.currentUser} The `User`. + * + * @endpoint authorization/current-context + * @method splunkjs.Service + */currentUser:function(callback){cov_1ks4ntaci2().f[17]++;cov_1ks4ntaci2().s[50]++;callback=(cov_1ks4ntaci2().b[7][0]++,callback)||(cov_1ks4ntaci2().b[7][1]++,function(){cov_1ks4ntaci2().f[18]++;});var that=(cov_1ks4ntaci2().s[51]++,this);var req=(cov_1ks4ntaci2().s[52]++,this.get(Paths.currentUser,{},function(err,response){cov_1ks4ntaci2().f[19]++;cov_1ks4ntaci2().s[53]++;if(err){cov_1ks4ntaci2().b[8][0]++;cov_1ks4ntaci2().s[54]++;callback(err);}else{cov_1ks4ntaci2().b[8][1]++;var username=(cov_1ks4ntaci2().s[55]++,response.data.entry[0].content.username);var user=(cov_1ks4ntaci2().s[56]++,new root.User(that,username));cov_1ks4ntaci2().s[57]++;user.fetch(function(){cov_1ks4ntaci2().f[20]++;cov_1ks4ntaci2().s[58]++;if(req.wasAborted){cov_1ks4ntaci2().b[9][0]++;cov_1ks4ntaci2().s[59]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[9][1]++;cov_1ks4ntaci2().s[60]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[61]++;return req;},/** + * Gets configuration information about the server. + * + * @example + * + * service.serverInfo(function(err, info) { + * console.log("Splunk Version: ", info.properties().version); + * }); + * + * @param {Function} callback A function to call with the server info: `(err, info)`. + * + * @endpoint server/info + * @method splunkjs.Service + */serverInfo:function(callback){cov_1ks4ntaci2().f[21]++;cov_1ks4ntaci2().s[62]++;callback=(cov_1ks4ntaci2().b[10][0]++,callback)||(cov_1ks4ntaci2().b[10][1]++,function(){cov_1ks4ntaci2().f[22]++;});var serverInfo=(cov_1ks4ntaci2().s[63]++,new root.ServerInfo(this));cov_1ks4ntaci2().s[64]++;return serverInfo.fetch(callback);},/** + * Parses a search query. + * + * @example + * + * service.parse("search index=_internal | head 1", function(err, parse) { + * console.log("Commands: ", parse.commands); + * }); + * + * @param {String} query The search query to parse. + * @param {Object} params An object of options for the parser: + * - `enable_lookups` (_boolean_): If `true`, performs reverse lookups to expand the search expression. + * - `output_mode` (_string_): The output format (XML or JSON). + * - `parse_only` (_boolean_): If `true`, disables the expansion of search due to evaluation of subsearches, time term expansion, lookups, tags, eventtypes, and sourcetype alias. + * - `reload_macros` (_boolean_): If `true`, reloads macro definitions from macros.conf. + * @param {Function} callback A function to call with the parse info: `(err, parse)`. + * + * @endpoint search/parser + * @method splunkjs.Service + */parse:function(query,params,callback){cov_1ks4ntaci2().f[23]++;cov_1ks4ntaci2().s[65]++;if((cov_1ks4ntaci2().b[12][0]++,!callback)&&(cov_1ks4ntaci2().b[12][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[11][0]++;cov_1ks4ntaci2().s[66]++;callback=params;cov_1ks4ntaci2().s[67]++;params={};}else{cov_1ks4ntaci2().b[11][1]++;}cov_1ks4ntaci2().s[68]++;callback=(cov_1ks4ntaci2().b[13][0]++,callback)||(cov_1ks4ntaci2().b[13][1]++,function(){cov_1ks4ntaci2().f[24]++;});cov_1ks4ntaci2().s[69]++;params=(cov_1ks4ntaci2().b[14][0]++,params)||(cov_1ks4ntaci2().b[14][1]++,{});cov_1ks4ntaci2().s[70]++;params.q=query;cov_1ks4ntaci2().s[71]++;return this.get(Paths.parser,params,function(err,response){cov_1ks4ntaci2().f[25]++;cov_1ks4ntaci2().s[72]++;if(err){cov_1ks4ntaci2().b[15][0]++;cov_1ks4ntaci2().s[73]++;callback(err);}else{cov_1ks4ntaci2().b[15][1]++;cov_1ks4ntaci2().s[74]++;callback(null,response.data);}});},/** + * Provides auto-complete suggestions for search queries. + * + * @example + * + * service.typeahead("index=", 10, function(err, options) { + * console.log("Autocompletion options: ", options); + * }); + * + * @param {String} prefix The query fragment to autocomplete. + * @param {Number} count The number of options to return (optional). + * @param {Function} callback A function to call with the autocompletion info: `(err, options)`. + * + * @endpoint search/typeahead + * @method splunkjs.Service + */typeahead:function(prefix,count,callback){cov_1ks4ntaci2().f[26]++;cov_1ks4ntaci2().s[75]++;if((cov_1ks4ntaci2().b[17][0]++,!callback)&&(cov_1ks4ntaci2().b[17][1]++,utils.isFunction(count))){cov_1ks4ntaci2().b[16][0]++;cov_1ks4ntaci2().s[76]++;callback=count;cov_1ks4ntaci2().s[77]++;count=10;}else{cov_1ks4ntaci2().b[16][1]++;}cov_1ks4ntaci2().s[78]++;callback=(cov_1ks4ntaci2().b[18][0]++,callback)||(cov_1ks4ntaci2().b[18][1]++,function(){cov_1ks4ntaci2().f[27]++;});var params=(cov_1ks4ntaci2().s[79]++,{count:(cov_1ks4ntaci2().b[19][0]++,count)||(cov_1ks4ntaci2().b[19][1]++,10),prefix:prefix});cov_1ks4ntaci2().s[80]++;return this.get(Paths.typeahead,params,function(err,response){cov_1ks4ntaci2().f[28]++;cov_1ks4ntaci2().s[81]++;if(err){cov_1ks4ntaci2().b[20][0]++;cov_1ks4ntaci2().s[82]++;callback(err);}else{cov_1ks4ntaci2().b[20][1]++;var results=(cov_1ks4ntaci2().s[83]++,((cov_1ks4ntaci2().b[21][0]++,response.data)||(cov_1ks4ntaci2().b[21][1]++,{})).results);cov_1ks4ntaci2().s[84]++;callback(null,(cov_1ks4ntaci2().b[22][0]++,results)||(cov_1ks4ntaci2().b[22][1]++,[]));}});},/** + * Logs an event to Splunk. + * + * @example + * + * service.log("A new event", {index: "_internal", sourcetype: "mysourcetype"}, function(err, result) { + * console.log("Submitted event: ", result); + * }); + * + * @param {String|Object} event The text for this event, or a JSON object. + * @param {Object} params A dictionary of parameters for indexing: + * - `index` (_string_): The index to send events from this input to. + * - `host` (_string_): The value to populate in the Host field for events from this data input. + * - `host_regex` (_string_): A regular expression used to extract the host value from each event. + * - `source` (_string_): The value to populate in the Source field for events from this data input. + * - `sourcetype` (_string_): The value to populate in the Sourcetype field for events from this data input. + * @param {Function} callback A function to call when the event is submitted: `(err, result)`. + * + * @endpoint receivers/simple + * @method splunkjs.Service + */log:function(event,params,callback){cov_1ks4ntaci2().f[29]++;cov_1ks4ntaci2().s[85]++;if((cov_1ks4ntaci2().b[24][0]++,!callback)&&(cov_1ks4ntaci2().b[24][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[23][0]++;cov_1ks4ntaci2().s[86]++;callback=params;cov_1ks4ntaci2().s[87]++;params={};}else{cov_1ks4ntaci2().b[23][1]++;}cov_1ks4ntaci2().s[88]++;callback=(cov_1ks4ntaci2().b[25][0]++,callback)||(cov_1ks4ntaci2().b[25][1]++,function(){cov_1ks4ntaci2().f[30]++;});cov_1ks4ntaci2().s[89]++;params=(cov_1ks4ntaci2().b[26][0]++,params)||(cov_1ks4ntaci2().b[26][1]++,{});// If the event is a JSON object, convert it to a string. +cov_1ks4ntaci2().s[90]++;if(utils.isObject(event)){cov_1ks4ntaci2().b[27][0]++;cov_1ks4ntaci2().s[91]++;event=JSON.stringify(event);}else{cov_1ks4ntaci2().b[27][1]++;}var path=(cov_1ks4ntaci2().s[92]++,this.paths.submitEvent);var method=(cov_1ks4ntaci2().s[93]++,"POST");var headers=(cov_1ks4ntaci2().s[94]++,{"Content-Type":"text/plain"});var body=(cov_1ks4ntaci2().s[95]++,event);var get=(cov_1ks4ntaci2().s[96]++,params);var post=(cov_1ks4ntaci2().s[97]++,{});var req=(cov_1ks4ntaci2().s[98]++,this.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[31]++;cov_1ks4ntaci2().s[99]++;if(err){cov_1ks4ntaci2().b[28][0]++;cov_1ks4ntaci2().s[100]++;callback(err);}else{cov_1ks4ntaci2().b[28][1]++;cov_1ks4ntaci2().s[101]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[102]++;return req;}});/** + * Provides a base definition for a Splunk endpoint, which is a combination of + * a specific service and path. Provides convenience methods for GET, POST, and + * DELETE operations used in splunkjs, automatically preparing the path correctly + * and allowing for relative calls. + * + * @class splunkjs.Service.Endpoint + */cov_1ks4ntaci2().s[103]++;root.Endpoint=Class.extend({/** + * Constructor for `splunkjs.Service.Endpoint`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} qualifiedPath A fully-qualified relative endpoint path (for example, "/services/search/jobs"). + * @return {splunkjs.Service.Endpoint} A new `splunkjs.Service.Endpoint` instance. + * + * @method splunkjs.Service.Endpoint + */init:function(service,qualifiedPath){cov_1ks4ntaci2().f[32]++;cov_1ks4ntaci2().s[104]++;if(!service){cov_1ks4ntaci2().b[29][0]++;cov_1ks4ntaci2().s[105]++;throw new Error("Passed in a null Service.");}else{cov_1ks4ntaci2().b[29][1]++;}cov_1ks4ntaci2().s[106]++;if(!qualifiedPath){cov_1ks4ntaci2().b[30][0]++;cov_1ks4ntaci2().s[107]++;throw new Error("Passed in an empty path.");}else{cov_1ks4ntaci2().b[30][1]++;}cov_1ks4ntaci2().s[108]++;this.service=service;cov_1ks4ntaci2().s[109]++;this.qualifiedPath=qualifiedPath;// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[110]++;this.get=utils.bind(this,this.get);cov_1ks4ntaci2().s[111]++;this.get_v2=utils.bind(this,this.get_v2);cov_1ks4ntaci2().s[112]++;this.post=utils.bind(this,this.post);cov_1ks4ntaci2().s[113]++;this.del=utils.bind(this,this.del);},/** + * Performs a relative GET request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456/results?offset=1 + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.get("results", {offset: 1}, function() { console.log("DONE"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the query string. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */get:function(relpath,params,callback){cov_1ks4ntaci2().f[33]++;var url=(cov_1ks4ntaci2().s[114]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[115]++;if(relpath){cov_1ks4ntaci2().b[31][0]++;cov_1ks4ntaci2().s[116]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[31][1]++;}cov_1ks4ntaci2().s[117]++;return this.service.get(url,params,callback);},get_v2:function(relpath,params){cov_1ks4ntaci2().f[34]++;var url=(cov_1ks4ntaci2().s[118]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[119]++;if(relpath){cov_1ks4ntaci2().b[32][0]++;cov_1ks4ntaci2().s[120]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[32][1]++;}cov_1ks4ntaci2().s[121]++;return this.service.get_v2(url,params);},/** + * Performs a relative POST request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456/control + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.post("control", {action: "cancel"}, function() { console.log("CANCELLED"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the body. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */post:function(relpath,params,callback){cov_1ks4ntaci2().f[35]++;var url=(cov_1ks4ntaci2().s[122]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[123]++;if(relpath){cov_1ks4ntaci2().b[33][0]++;cov_1ks4ntaci2().s[124]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[33][1]++;}cov_1ks4ntaci2().s[125]++;return this.service.post(url,params,callback);},/** + * Performs a relative DELETE request on an endpoint's path, + * combined with the parameters and a relative path if specified. + * + * @example + * + * // Will make a request to {service.prefix}/search/jobs/123456 + * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); + * endpoint.delete("", {}, function() { console.log("DELETED"))}); + * + * @param {String} relpath A relative path to append to the endpoint path. + * @param {Object} params A dictionary of entity-specific parameters to add to the query string. + * @param {Function} callback A function to call when the request is complete: `(err, response)`. + * + * @method splunkjs.Service.Endpoint + */del:function(relpath,params,callback){cov_1ks4ntaci2().f[36]++;var url=(cov_1ks4ntaci2().s[126]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding +// slash. +cov_1ks4ntaci2().s[127]++;if(relpath){cov_1ks4ntaci2().b[34][0]++;cov_1ks4ntaci2().s[128]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[34][1]++;}cov_1ks4ntaci2().s[129]++;return this.service.del(url,params,callback);}});/** + * Provides a base definition for a Splunk resource (for example, an entity + * such as an index or search job, or a collection of entities). Provides + * basic methods for handling Splunk resources, such as validation and + * accessing properties. + * + * This class should not be used directly because most methods are meant to be overridden. + * + * @class splunkjs.Service.Resource + * @extends splunkjs.Service.Endpoint + */cov_1ks4ntaci2().s[130]++;root.Resource=root.Endpoint.extend({/** + * Constructor for `splunkjs.Service.Resource`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Resource} A new `splunkjs.Service.Resource` instance. + * + * @method splunkjs.Service.Resource + */init:function(service,path,namespace){cov_1ks4ntaci2().f[37]++;var fullpath=(cov_1ks4ntaci2().s[131]++,service.fullpath(path,namespace));cov_1ks4ntaci2().s[132]++;this._super(service,fullpath);cov_1ks4ntaci2().s[133]++;this.namespace=namespace;cov_1ks4ntaci2().s[134]++;this._properties={};cov_1ks4ntaci2().s[135]++;this._state={};// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[136]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[137]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[138]++;this.properties=utils.bind(this,this.properties);cov_1ks4ntaci2().s[139]++;this.state=utils.bind(this,this.state);cov_1ks4ntaci2().s[140]++;this.path=utils.bind(this,this.path);},/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Resource + */path:function(){cov_1ks4ntaci2().f[38]++;cov_1ks4ntaci2().s[141]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Loads the resource and stores the properties. + * + * @param {Object} properties The properties for this resource. + * + * @method splunkjs.Service.Resource + * @protected + */_load:function(properties){cov_1ks4ntaci2().f[39]++;cov_1ks4ntaci2().s[142]++;this._properties=(cov_1ks4ntaci2().b[35][0]++,properties)||(cov_1ks4ntaci2().b[35][1]++,{});cov_1ks4ntaci2().s[143]++;this._state=(cov_1ks4ntaci2().b[36][0]++,properties)||(cov_1ks4ntaci2().b[36][1]++,{});},/** + * Refreshes the resource by fetching the object from the server + * and loading it. + * + * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. + * + * @method splunkjs.Service.Resource + * @protected + */fetch:function(callback){cov_1ks4ntaci2().f[40]++;cov_1ks4ntaci2().s[144]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Retrieves the current properties for this resource. + * + * @return {Object} The properties. + * + * @method splunkjs.Service.Resource + */properties:function(){cov_1ks4ntaci2().f[41]++;cov_1ks4ntaci2().s[145]++;return this._properties;},/** + * Retrieves the current full state (properties and metadata) of this resource. + * + * @return {Object} The current full state of this resource. + * + * @method splunkjs.Service.Resource + */state:function(){cov_1ks4ntaci2().f[42]++;cov_1ks4ntaci2().s[146]++;return this._state;}});/** + * Defines a base class for a Splunk entity, which is a well-defined construct + * with certain operations (such as "properties", "update", and "delete"). + * Entities include search jobs, indexes, inputs, apps, and more. + * + * Provides basic methods for working with Splunk entities, such as fetching and + * updating them. + * + * @class splunkjs.Service.Entity + * @extends splunkjs.Service.Resource + */cov_1ks4ntaci2().s[147]++;root.Entity=root.Resource.extend({/** + * A static property that indicates whether to call `fetch` after an + * update to get the updated entity. By default, the entity is not + * fetched because the endpoint returns (echoes) the updated entity. + * + * @method splunkjs.Service.Entity + */fetchOnUpdate:false,/** + * Constructor for `splunkjs.Service.Entity`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. + * + * @method splunkjs.Service.Entity + */init:function(service,path,namespace){cov_1ks4ntaci2().f[43]++;cov_1ks4ntaci2().s[148]++;this._super(service,path,namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[149]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[150]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[151]++;this.remove=utils.bind(this,this.remove);cov_1ks4ntaci2().s[152]++;this.update=utils.bind(this,this.update);cov_1ks4ntaci2().s[153]++;this.fields=utils.bind(this,this.fields);cov_1ks4ntaci2().s[154]++;this.links=utils.bind(this,this.links);cov_1ks4ntaci2().s[155]++;this.acl=utils.bind(this,this.acl);cov_1ks4ntaci2().s[156]++;this.author=utils.bind(this,this.author);cov_1ks4ntaci2().s[157]++;this.updated=utils.bind(this,this.updated);cov_1ks4ntaci2().s[158]++;this.published=utils.bind(this,this.published);cov_1ks4ntaci2().s[159]++;this.enable=utils.bind(this,this.enable);cov_1ks4ntaci2().s[160]++;this.disable=utils.bind(this,this.disable);cov_1ks4ntaci2().s[161]++;this.reload=utils.bind(this,this.reload);// Initial values +cov_1ks4ntaci2().s[162]++;this._properties={};cov_1ks4ntaci2().s[163]++;this._fields={};cov_1ks4ntaci2().s[164]++;this._acl={};cov_1ks4ntaci2().s[165]++;this._links={};},/** + * Loads the entity and stores the properties. + * + * @param {Object} properties The properties for this entity. + * + * @method splunkjs.Service.Entity + * @protected + */_load:function(properties){cov_1ks4ntaci2().f[44]++;cov_1ks4ntaci2().s[166]++;properties=utils.isArray(properties)?(cov_1ks4ntaci2().b[37][0]++,properties[0]):(cov_1ks4ntaci2().b[37][1]++,properties);// Initialize the properties to +// empty values +cov_1ks4ntaci2().s[167]++;properties=(cov_1ks4ntaci2().b[38][0]++,properties)||(cov_1ks4ntaci2().b[38][1]++,{content:{},fields:{},acl:{},links:{}});cov_1ks4ntaci2().s[168]++;this._super(properties);// Take out the entity-specific content +cov_1ks4ntaci2().s[169]++;this._properties=(cov_1ks4ntaci2().b[39][0]++,properties.content)||(cov_1ks4ntaci2().b[39][1]++,{});cov_1ks4ntaci2().s[170]++;this._fields=(cov_1ks4ntaci2().b[40][0]++,properties.fields)||(cov_1ks4ntaci2().b[40][1]++,this._fields)||(cov_1ks4ntaci2().b[40][2]++,{});cov_1ks4ntaci2().s[171]++;this._acl=(cov_1ks4ntaci2().b[41][0]++,properties.acl)||(cov_1ks4ntaci2().b[41][1]++,{});cov_1ks4ntaci2().s[172]++;this._links=(cov_1ks4ntaci2().b[42][0]++,properties.links)||(cov_1ks4ntaci2().b[42][1]++,{});cov_1ks4ntaci2().s[173]++;this._author=(cov_1ks4ntaci2().b[43][0]++,properties.author)||(cov_1ks4ntaci2().b[43][1]++,null);cov_1ks4ntaci2().s[174]++;this._updated=(cov_1ks4ntaci2().b[44][0]++,properties.updated)||(cov_1ks4ntaci2().b[44][1]++,null);cov_1ks4ntaci2().s[175]++;this._published=(cov_1ks4ntaci2().b[45][0]++,properties.published)||(cov_1ks4ntaci2().b[45][1]++,null);},/** + * Retrieves the fields information for this entity, indicating which + * fields are wildcards, required, and optional. + * + * @return {Object} The fields information. + * + * @method splunkjs.Service.Entity + */fields:function(){cov_1ks4ntaci2().f[45]++;cov_1ks4ntaci2().s[176]++;return this._fields;},/** + * Retrieves the access control list (ACL) information for this entity, + * which contains the permissions for accessing the entity. + * + * @return {Object} The ACL. + * + * @method splunkjs.Service.Entity + */acl:function(){cov_1ks4ntaci2().f[46]++;cov_1ks4ntaci2().s[177]++;return this._acl;},/** + * Retrieves the links information for this entity, which is the URI of + * the entity relative to the management port of a Splunk instance. + * + * @return {Object} The links information. + * + * @method splunkjs.Service.Entity + */links:function(){cov_1ks4ntaci2().f[47]++;cov_1ks4ntaci2().s[178]++;return this._links;},/** + * Retrieves the author information for this entity. + * + * @return {String} The author. + * + * @method splunkjs.Service.Entity + */author:function(){cov_1ks4ntaci2().f[48]++;cov_1ks4ntaci2().s[179]++;return this._author;},/** + * Retrieves the updated time for this entity. + * + * @return {String} The updated time. + * + * @method splunkjs.Service.Entity + */updated:function(){cov_1ks4ntaci2().f[49]++;cov_1ks4ntaci2().s[180]++;return this._updated;},/** + * Retrieves the published time for this entity. + * + * @return {String} The published time. + * + * @method splunkjs.Service.Entity + */published:function(){cov_1ks4ntaci2().f[50]++;cov_1ks4ntaci2().s[181]++;return this._published;},/** + * Refreshes the entity by fetching the object from the server and + * loading it. + * + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `count` (_integer_): The maximum number of items to return. + * - `offset` (_integer_): The offset of the first item to return. + * - `search` (_string_): The search query to filter responses. + * - `sort_dir` (_string_): The direction to sort returned items: “asc” or “desc”. + * - `sort_key` (_string_): The field to use for sorting (optional). + * - `sort_mode` (_string_): The collating sequence for sorting returned items: “auto”, “alpha”, “alpha_case”, or “num”. + * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. + * + * @method splunkjs.Service.Entity + */fetch:function(options,callback){cov_1ks4ntaci2().f[51]++;cov_1ks4ntaci2().s[182]++;if((cov_1ks4ntaci2().b[47][0]++,!callback)&&(cov_1ks4ntaci2().b[47][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[46][0]++;cov_1ks4ntaci2().s[183]++;callback=options;cov_1ks4ntaci2().s[184]++;options={};}else{cov_1ks4ntaci2().b[46][1]++;}cov_1ks4ntaci2().s[185]++;callback=(cov_1ks4ntaci2().b[48][0]++,callback)||(cov_1ks4ntaci2().b[48][1]++,function(){cov_1ks4ntaci2().f[52]++;});cov_1ks4ntaci2().s[186]++;options=(cov_1ks4ntaci2().b[49][0]++,options)||(cov_1ks4ntaci2().b[49][1]++,{});var that=(cov_1ks4ntaci2().s[187]++,this);cov_1ks4ntaci2().s[188]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[53]++;cov_1ks4ntaci2().s[189]++;if(err){cov_1ks4ntaci2().b[50][0]++;cov_1ks4ntaci2().s[190]++;callback(err);}else{cov_1ks4ntaci2().b[50][1]++;cov_1ks4ntaci2().s[191]++;that._load(response.data?(cov_1ks4ntaci2().b[51][0]++,response.data.entry):(cov_1ks4ntaci2().b[51][1]++,null));cov_1ks4ntaci2().s[192]++;callback(null,that);}});},/** + * Deletes the entity from the server. + * + * @param {Function} callback A function to call when the object is deleted: `(err)`. + * + * @method splunkjs.Service.Entity + * @protected + */remove:function(callback){cov_1ks4ntaci2().f[54]++;cov_1ks4ntaci2().s[193]++;callback=(cov_1ks4ntaci2().b[52][0]++,callback)||(cov_1ks4ntaci2().b[52][1]++,function(){cov_1ks4ntaci2().f[55]++;});var that=(cov_1ks4ntaci2().s[194]++,this);cov_1ks4ntaci2().s[195]++;return this.del("",{},function(err){cov_1ks4ntaci2().f[56]++;cov_1ks4ntaci2().s[196]++;callback(err);});},/** + * Updates the entity on the server. + * + * @param {Object} props The properties to update the object with. + * @param {Function} callback A function to call when the object is updated: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */update:function(props,callback){cov_1ks4ntaci2().f[57]++;cov_1ks4ntaci2().s[197]++;callback=(cov_1ks4ntaci2().b[53][0]++,callback)||(cov_1ks4ntaci2().b[53][1]++,function(){cov_1ks4ntaci2().f[58]++;});cov_1ks4ntaci2().s[198]++;if(props.hasOwnProperty("name")){cov_1ks4ntaci2().b[54][0]++;cov_1ks4ntaci2().s[199]++;throw new Error("Cannot set 'name' field in 'update'");}else{cov_1ks4ntaci2().b[54][1]++;}var that=(cov_1ks4ntaci2().s[200]++,this);var req=(cov_1ks4ntaci2().s[201]++,this.post("",props,function(err,response){cov_1ks4ntaci2().f[59]++;cov_1ks4ntaci2().s[202]++;if((cov_1ks4ntaci2().b[56][0]++,!err)&&(cov_1ks4ntaci2().b[56][1]++,!that.fetchOnUpdate)){cov_1ks4ntaci2().b[55][0]++;cov_1ks4ntaci2().s[203]++;that._load(response.data.entry);cov_1ks4ntaci2().s[204]++;callback(err,that);}else{cov_1ks4ntaci2().b[55][1]++;cov_1ks4ntaci2().s[205]++;if((cov_1ks4ntaci2().b[58][0]++,!err)&&(cov_1ks4ntaci2().b[58][1]++,that.fetchOnUpdate)){cov_1ks4ntaci2().b[57][0]++;cov_1ks4ntaci2().s[206]++;that.fetch(function(){cov_1ks4ntaci2().f[60]++;cov_1ks4ntaci2().s[207]++;if(req.wasAborted){cov_1ks4ntaci2().b[59][0]++;cov_1ks4ntaci2().s[208]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[59][1]++;cov_1ks4ntaci2().s[209]++;callback.apply(null,arguments);}});}else{cov_1ks4ntaci2().b[57][1]++;cov_1ks4ntaci2().s[210]++;callback(err,that);}}}));cov_1ks4ntaci2().s[211]++;return req;},/** + * Disables the entity on the server. + * + * @param {Function} callback A function to call when the object is disabled: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */disable:function(callback){cov_1ks4ntaci2().f[61]++;cov_1ks4ntaci2().s[212]++;callback=(cov_1ks4ntaci2().b[60][0]++,callback)||(cov_1ks4ntaci2().b[60][1]++,function(){cov_1ks4ntaci2().f[62]++;});var that=(cov_1ks4ntaci2().s[213]++,this);cov_1ks4ntaci2().s[214]++;this.post("disable",{},function(err,response){cov_1ks4ntaci2().f[63]++;cov_1ks4ntaci2().s[215]++;if(err){cov_1ks4ntaci2().b[61][0]++;cov_1ks4ntaci2().s[216]++;callback(err);}else{cov_1ks4ntaci2().b[61][1]++;cov_1ks4ntaci2().s[217]++;callback(null,that);}});},/** + * Enables the entity on the server. + * + * @param {Function} callback A function to call when the object is enabled: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */enable:function(callback){cov_1ks4ntaci2().f[64]++;cov_1ks4ntaci2().s[218]++;callback=(cov_1ks4ntaci2().b[62][0]++,callback)||(cov_1ks4ntaci2().b[62][1]++,function(){cov_1ks4ntaci2().f[65]++;});var that=(cov_1ks4ntaci2().s[219]++,this);cov_1ks4ntaci2().s[220]++;this.post("enable",{},function(err,response){cov_1ks4ntaci2().f[66]++;cov_1ks4ntaci2().s[221]++;if(err){cov_1ks4ntaci2().b[63][0]++;cov_1ks4ntaci2().s[222]++;callback(err);}else{cov_1ks4ntaci2().b[63][1]++;cov_1ks4ntaci2().s[223]++;callback(null,that);}});},/** + * Reloads the entity on the server. + * + * @param {Function} callback A function to call when the object is reloaded: `(err, entity)`. + * + * @method splunkjs.Service.Entity + * @protected + */reload:function(callback){cov_1ks4ntaci2().f[67]++;cov_1ks4ntaci2().s[224]++;callback=(cov_1ks4ntaci2().b[64][0]++,callback)||(cov_1ks4ntaci2().b[64][1]++,function(){cov_1ks4ntaci2().f[68]++;});var that=(cov_1ks4ntaci2().s[225]++,this);cov_1ks4ntaci2().s[226]++;this.post("_reload",{},function(err,response){cov_1ks4ntaci2().f[69]++;cov_1ks4ntaci2().s[227]++;if(err){cov_1ks4ntaci2().b[65][0]++;cov_1ks4ntaci2().s[228]++;callback(err);}else{cov_1ks4ntaci2().b[65][1]++;cov_1ks4ntaci2().s[229]++;callback(null,that);}});}});/** + * Defines a base class for a Splunk collection, which is a well-defined construct + * that provides basic methods for working with collections of entities, such as + * creating and listing entities. + * + * @class splunkjs.Service.Collection + * @extends splunkjs.Service.Resource + */cov_1ks4ntaci2().s[230]++;root.Collection=root.Resource.extend({/** + * A static property that indicates whether to call `fetch` after an + * entity has been created. By default, the entity is not fetched + * because the endpoint returns (echoes) the new entity. + + * @method splunkjs.Service.Collection + */fetchOnEntityCreation:false,/** + * Constructor for `splunkjs.Service.Collection`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} path A relative endpoint path (for example, "search/jobs"). + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Collection} A new `splunkjs.Service.Collection` instance. + * + * @method splunkjs.Service.Collection + */init:function(service,path,namespace){cov_1ks4ntaci2().f[70]++;cov_1ks4ntaci2().s[231]++;this._super(service,path,namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[232]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[233]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[234]++;this.create=utils.bind(this,this.create);cov_1ks4ntaci2().s[235]++;this.list=utils.bind(this,this.list);cov_1ks4ntaci2().s[236]++;this.item=utils.bind(this,this.item);cov_1ks4ntaci2().s[237]++;this.instantiateEntity=utils.bind(this,this.instantiateEntity);// Initial values +cov_1ks4ntaci2().s[238]++;this._entities=[];cov_1ks4ntaci2().s[239]++;this._entitiesByName={};cov_1ks4ntaci2().s[240]++;this._properties={};cov_1ks4ntaci2().s[241]++;this._paging={};cov_1ks4ntaci2().s[242]++;this._links={};},/** + * Creates a local instance of an entity. + * + * @param {Object} props The properties for this entity. + * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. + * + * @method splunkjs.Service.Collection + */instantiateEntity:function(props){cov_1ks4ntaci2().f[71]++;cov_1ks4ntaci2().s[243]++;throw new Error("MUST BE OVERRIDDEN");},/** + * Loads the collection and properties, and creates a map of entity + * names to entity IDs (for retrieval purposes). + * + * @param {Object} properties The properties for this collection. + * + * @method splunkjs.Service.Collection + * @private + */_load:function(properties){cov_1ks4ntaci2().f[72]++;cov_1ks4ntaci2().s[244]++;this._super(properties);var entities=(cov_1ks4ntaci2().s[245]++,[]);var entitiesByName=(cov_1ks4ntaci2().s[246]++,{});var entityPropertyList=(cov_1ks4ntaci2().s[247]++,(cov_1ks4ntaci2().b[66][0]++,properties.entry)||(cov_1ks4ntaci2().b[66][1]++,[]));cov_1ks4ntaci2().s[248]++;for(var i=(cov_1ks4ntaci2().s[249]++,0);i1)&&(cov_1ks4ntaci2().b[90][1]++,!namespace)){cov_1ks4ntaci2().b[89][0]++;cov_1ks4ntaci2().s[303]++;// If there is more than one entity and we didn't +// specify a namespace, then we return an error +// saying the match is ambiguous +throw new Error("Ambiguous match for name '"+id+"'");}else{cov_1ks4ntaci2().b[89][1]++;cov_1ks4ntaci2().s[304]++;// There is more than one entity, and we do have +// a namespace, so we try and find it +for(var i=(cov_1ks4ntaci2().s[305]++,0);iPagination and Filtering options in the REST API documentation. + * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. + * + * @endpoint saved/searches/{name}/history + * @method splunkjs.Service.SavedSearch + */history:function(options,callback){cov_1ks4ntaci2().f[97]++;cov_1ks4ntaci2().s[359]++;if((cov_1ks4ntaci2().b[106][0]++,!callback)&&(cov_1ks4ntaci2().b[106][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[105][0]++;cov_1ks4ntaci2().s[360]++;callback=options;cov_1ks4ntaci2().s[361]++;options={};}else{cov_1ks4ntaci2().b[105][1]++;}cov_1ks4ntaci2().s[362]++;callback=(cov_1ks4ntaci2().b[107][0]++,callback)||(cov_1ks4ntaci2().b[107][1]++,function(){cov_1ks4ntaci2().f[98]++;});cov_1ks4ntaci2().s[363]++;options=(cov_1ks4ntaci2().b[108][0]++,options)||(cov_1ks4ntaci2().b[108][1]++,{});var that=(cov_1ks4ntaci2().s[364]++,this);cov_1ks4ntaci2().s[365]++;return this.get("history",options,function(err,response){cov_1ks4ntaci2().f[99]++;cov_1ks4ntaci2().s[366]++;if(err){cov_1ks4ntaci2().b[109][0]++;cov_1ks4ntaci2().s[367]++;callback(err);cov_1ks4ntaci2().s[368]++;return;}else{cov_1ks4ntaci2().b[109][1]++;}var jobs=(cov_1ks4ntaci2().s[369]++,[]);var data=(cov_1ks4ntaci2().s[370]++,(cov_1ks4ntaci2().b[110][0]++,response.data.entry)||(cov_1ks4ntaci2().b[110][1]++,[]));cov_1ks4ntaci2().s[371]++;for(var i=(cov_1ks4ntaci2().s[372]++,0);iSaved search parameters on Splunk Developer Portal. + * @param {Function} callback A function to call when the object is updated: `(err, entity)`. + * + * @method splunkjs.Service.SavedSearch + */update:function(params,callback){cov_1ks4ntaci2().f[103]++;cov_1ks4ntaci2().s[383]++;params=(cov_1ks4ntaci2().b[112][0]++,params)||(cov_1ks4ntaci2().b[112][1]++,{});cov_1ks4ntaci2().s[384]++;if(!params.search){cov_1ks4ntaci2().b[113][0]++;var update=(cov_1ks4ntaci2().s[385]++,this._super);var req=(cov_1ks4ntaci2().s[386]++,this.fetch(function(err,search){cov_1ks4ntaci2().f[104]++;cov_1ks4ntaci2().s[387]++;if(err){cov_1ks4ntaci2().b[114][0]++;cov_1ks4ntaci2().s[388]++;callback(err);}else{cov_1ks4ntaci2().b[114][1]++;cov_1ks4ntaci2().s[389]++;params.search=search.properties().search;cov_1ks4ntaci2().s[390]++;update.call(search,params,function(){cov_1ks4ntaci2().f[105]++;cov_1ks4ntaci2().s[391]++;if(req.wasAborted){cov_1ks4ntaci2().b[115][0]++;cov_1ks4ntaci2().s[392]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[115][1]++;cov_1ks4ntaci2().s[393]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[394]++;return req;}else{cov_1ks4ntaci2().b[113][1]++;cov_1ks4ntaci2().s[395]++;return this._super(params,callback);}}});/** + * Represents a collection of saved searches. You can create and list saved + * searches using this collection container, or get a specific saved search. + * + * + * @endpoint saved/searches + * @class splunkjs.Service.SavedSearches + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[396]++;root.SavedSearches=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.SavedSearches + */path:function(){cov_1ks4ntaci2().f[106]++;cov_1ks4ntaci2().s[397]++;return Paths.savedSearches;},/** + * Creates a local instance of a saved search. + * + * @param {Object} props The properties for the new saved search. For a list of available parameters, see Saved search parameters on Splunk Developer Portal. + * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.SavedSearch` instance. + * + * @method splunkjs.Service.SavedSearches + */instantiateEntity:function(props){cov_1ks4ntaci2().f[107]++;var entityNamespace=(cov_1ks4ntaci2().s[398]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[399]++;return new root.SavedSearch(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.SavedSearches`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.SavedSearches} A new `splunkjs.Service.SavedSearches` instance. + * + * @method splunkjs.Service.SavedSearches + */init:function(service,namespace){cov_1ks4ntaci2().f[108]++;cov_1ks4ntaci2().s[400]++;this._super(service,this.path(),namespace);}});/** + * Represents a specific storage password, which you can then view, modify, and + * remove. + * + * @endpoint storage/passwords/{name} + * @class splunkjs.Service.StoragePassword + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[401]++;root.StoragePassword=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.StoragePassword + */path:function(){cov_1ks4ntaci2().f[109]++;cov_1ks4ntaci2().s[402]++;return Paths.storagePasswords+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.StoragePassword`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new storage password. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePassword} A new `splunkjs.Service.StoragePassword` instance. + * + * @method splunkjs.Service.StoragePassword + */init:function(service,name,namespace){cov_1ks4ntaci2().f[110]++;cov_1ks4ntaci2().s[403]++;this.name=name;cov_1ks4ntaci2().s[404]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of storage passwords. You can create and list storage + * passwords using this collection container, or get a specific storage password. + * + * @endpoint storage/passwords + * @class splunkjs.Service.StoragePasswords + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[405]++;root.StoragePasswords=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.StoragePasswords + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.StoragePasswords + */path:function(){cov_1ks4ntaci2().f[111]++;cov_1ks4ntaci2().s[406]++;return Paths.storagePasswords;},/** + * Creates a local instance of a storage password. + * + * @param {Object} props The properties for the new storage password. For a list of available parameters, + * see + * POST storage/passwords on Splunk Developer Portal. + * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.StoragePassword` instance. + * + * @method splunkjs.Service.StoragePasswords + */instantiateEntity:function(props){cov_1ks4ntaci2().f[112]++;var entityNamespace=(cov_1ks4ntaci2().s[407]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[408]++;return new root.StoragePassword(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.StoragePasswords`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.StoragePasswords} A new `splunkjs.Service.StoragePasswords` instance. + * + * @method splunkjs.Service.StoragePasswords + */init:function(service,namespace){cov_1ks4ntaci2().f[113]++;cov_1ks4ntaci2().s[409]++;this._super(service,this.path(),namespace);}});/** + * Represents a fired alert. + * You can retrieve several of the fired alert's properties by + * the corresponding function name. + * + * @endpoint alerts/fired_alerts/{name} + * @class splunkjs.Service.FiredAlert + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[410]++;root.FiredAlert=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.FiredAlert + */path:function(){cov_1ks4ntaci2().f[114]++;cov_1ks4ntaci2().s[411]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** + * Returns this alert's actions (such as notifying by email, running a + * script, adding to RSS, tracking in Alert Manager, and enabling + * summary indexing). + * + * @return {Array} of actions, an empty {Array} if no actions + * @method splunkjs.Service.FiredAlert + */actions:function(){cov_1ks4ntaci2().f[115]++;cov_1ks4ntaci2().s[412]++;return(cov_1ks4ntaci2().b[116][0]++,this.properties().actions)||(cov_1ks4ntaci2().b[116][1]++,[]);},/** + * Returns this alert's type. + * + * @return {String} the alert's type. + * @method splunkjs.Service.FiredAlert + */alertType:function(){cov_1ks4ntaci2().f[116]++;cov_1ks4ntaci2().s[413]++;return(cov_1ks4ntaci2().b[117][0]++,this.properties().alert_type)||(cov_1ks4ntaci2().b[117][1]++,null);},/** + * Indicates whether the result is a set of events (digest) or a single + * event (per result). + * + * This method is available in Splunk 4.3 and later. + * + * @return {Boolean} true if the result is a digest, false if per result + * @method splunkjs.Service.FiredAlert + */isDigestMode:function(){cov_1ks4ntaci2().f[117]++;cov_1ks4ntaci2().s[414]++;// Convert this property to a Boolean +return!!this.properties().digest_mode;},/** + * Returns the rendered expiration time for this alert. + * + * This method is available in Splunk 4.3 and later. + * + * @return {String} + * @method splunkjs.Service.FiredAlert + */expirationTime:function(){cov_1ks4ntaci2().f[118]++;cov_1ks4ntaci2().s[415]++;return(cov_1ks4ntaci2().b[118][0]++,this.properties().expiration_time_rendered)||(cov_1ks4ntaci2().b[118][1]++,null);},/** + * Returns the saved search for this alert. + * + * @return {String} The saved search name, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */savedSearchName:function(){cov_1ks4ntaci2().f[119]++;cov_1ks4ntaci2().s[416]++;return(cov_1ks4ntaci2().b[119][0]++,this.properties().savedsearch_name)||(cov_1ks4ntaci2().b[119][1]++,null);},/** + * Returns this alert's severity on a scale of 1 to 10, with 1 being the + * highest severity. + * + * @return {Number} this alert's severity, -1 if not specified + * @method splunkjs.Service.FiredAlert + */severity:function(){cov_1ks4ntaci2().f[120]++;cov_1ks4ntaci2().s[417]++;return(cov_1ks4ntaci2().b[120][0]++,parseInt(this.properties().severity,10))||(cov_1ks4ntaci2().b[120][1]++,-1);},/** + * Returns this alert's search ID (SID). + * + * @return {String} This alert's SID, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */sid:function(){cov_1ks4ntaci2().f[121]++;cov_1ks4ntaci2().s[418]++;return(cov_1ks4ntaci2().b[121][0]++,this.properties().sid)||(cov_1ks4ntaci2().b[121][1]++,null);},/** + * Returns the time this alert was triggered. + * + * @return {Number} This alert's trigger time, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */triggerTime:function(){cov_1ks4ntaci2().f[122]++;cov_1ks4ntaci2().s[419]++;return(cov_1ks4ntaci2().b[122][0]++,this.properties().trigger_time)||(cov_1ks4ntaci2().b[122][1]++,null);},/** + * Returns this alert's rendered trigger time. + * + * This method is available in Splunk 4.3 and later. + * + * @return {String} This alert's rendered trigger time, or {null} if not available. + * @method splunkjs.Service.FiredAlert + */triggerTimeRendered:function(){cov_1ks4ntaci2().f[123]++;cov_1ks4ntaci2().s[420]++;return(cov_1ks4ntaci2().b[123][0]++,this.properties().trigger_time_rendered)||(cov_1ks4ntaci2().b[123][1]++,null);},/** + * Returns the count of triggered alerts. + * + * This method is available in Splunk 4.3 and later. + * + * @return {Number} The number of triggered alerts, or -1 if not specified. + * @method splunkjs.Service.FiredAlert + */triggeredAlertCount:function(){cov_1ks4ntaci2().f[124]++;cov_1ks4ntaci2().s[421]++;return(cov_1ks4ntaci2().b[124][0]++,parseInt(this.properties().triggered_alerts,10))||(cov_1ks4ntaci2().b[124][1]++,-1);},/** + * Constructor for `splunkjs.Service.FiredAlert`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new alert group. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.FiredAlert} A new `splunkjs.Service.FiredAlert` instance. + * + * @method splunkjs.Service.FiredAlert + */init:function(service,name,namespace){cov_1ks4ntaci2().f[125]++;cov_1ks4ntaci2().s[422]++;this.name=name;cov_1ks4ntaci2().s[423]++;this._super(service,this.path(),namespace);}});/** + * Represents a specific alert group, which you can then view and + * remove. + * + * @endpoint alerts/fired_alerts/{name} + * @class splunkjs.Service.FiredAlertGroup + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[424]++;root.FiredAlertGroup=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.FiredAlertGroup + */path:function(){cov_1ks4ntaci2().f[126]++;cov_1ks4ntaci2().s[425]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** + * Returns the `triggered_alert_count` property, the count + * of triggered alerts. + * + * @return {Number} the count of triggered alerts + * + * @method splunkjs.Service.FiredAlertGroup + */count:function(){cov_1ks4ntaci2().f[127]++;cov_1ks4ntaci2().s[426]++;return(cov_1ks4ntaci2().b[125][0]++,parseInt(this.properties().triggered_alert_count,10))||(cov_1ks4ntaci2().b[125][1]++,0);},/** + * Returns fired instances of this alert, which is + * a list of `splunkjs.Service.FiredAlert` instances. + * + * @example + * + * var alertGroup = service.firedAlertGroups().item("MyAlert"); + * alertGroup.list(function(err, firedAlerts, alert) { + * for(var i = 0; i < firedAlerts.length; i++) { + * console.log("Fired alert", i, ":", firedAlerts[i].sid); + * } + * }); + * + * @param {Function} callback A function to call when the fired alerts are retrieved: `(err, firedAlerts, alertGroup)`. + * + * @method splunkjs.Service.FiredAlertGroup + */list:function(options,callback){cov_1ks4ntaci2().f[128]++;cov_1ks4ntaci2().s[427]++;if((cov_1ks4ntaci2().b[127][0]++,!callback)&&(cov_1ks4ntaci2().b[127][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[126][0]++;cov_1ks4ntaci2().s[428]++;callback=options;cov_1ks4ntaci2().s[429]++;options={};}else{cov_1ks4ntaci2().b[126][1]++;}cov_1ks4ntaci2().s[430]++;callback=(cov_1ks4ntaci2().b[128][0]++,callback)||(cov_1ks4ntaci2().b[128][1]++,function(){cov_1ks4ntaci2().f[129]++;});cov_1ks4ntaci2().s[431]++;options=(cov_1ks4ntaci2().b[129][0]++,options)||(cov_1ks4ntaci2().b[129][1]++,{});var that=(cov_1ks4ntaci2().s[432]++,this);cov_1ks4ntaci2().s[433]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[130]++;cov_1ks4ntaci2().s[434]++;if(err){cov_1ks4ntaci2().b[130][0]++;cov_1ks4ntaci2().s[435]++;callback(err);cov_1ks4ntaci2().s[436]++;return;}else{cov_1ks4ntaci2().b[130][1]++;}var firedAlerts=(cov_1ks4ntaci2().s[437]++,[]);var data=(cov_1ks4ntaci2().s[438]++,(cov_1ks4ntaci2().b[131][0]++,response.data.entry)||(cov_1ks4ntaci2().b[131][1]++,[]));cov_1ks4ntaci2().s[439]++;for(var i=(cov_1ks4ntaci2().s[440]++,0);iPOST apps/local endpoint in the REST API documentation. + * @return {splunkjs.Service.Application} A new `splunkjs.Service.Application` instance. + * + * @method splunkjs.Service.Applications + */instantiateEntity:function(props){cov_1ks4ntaci2().f[145]++;cov_1ks4ntaci2().s[478]++;return new root.Application(this.service,props.name,{});},/** + * Constructor for `splunkjs.Service.Applications`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.Applications} A new `splunkjs.Service.Applications` instance. + * + * @method splunkjs.Service.Applications + */init:function(service){cov_1ks4ntaci2().f[146]++;cov_1ks4ntaci2().s[479]++;this._super(service,this.path(),{});}});/** + * Provides access to configuration information about the server. + * + * @endpoint server/info + * @class splunkjs.Service.ServerInfo + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[480]++;root.ServerInfo=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ServerInfo + */path:function(){cov_1ks4ntaci2().f[147]++;cov_1ks4ntaci2().s[481]++;return Paths.info;},/** + * Constructor for `splunkjs.Service.ServerInfo`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.ServerInfo} A new `splunkjs.Service.ServerInfo` instance. + * + * @method splunkjs.Service.ServerInfo + */init:function(service){cov_1ks4ntaci2().f[148]++;cov_1ks4ntaci2().s[482]++;this.name="server-info";cov_1ks4ntaci2().s[483]++;this._super(service,this.path(),{});}});/** + * Represents a specific Splunk user, which you can view, modify, and + * remove. + * + * @endpoint authentication/users/{name} + * @class splunkjs.Service.User + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[484]++;root.User=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.User + */path:function(){cov_1ks4ntaci2().f[149]++;cov_1ks4ntaci2().s[485]++;return Paths.users+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.User`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The Splunk username. + * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. + * + * @method splunkjs.Service.User + */init:function(service,name){cov_1ks4ntaci2().f[150]++;cov_1ks4ntaci2().s[486]++;this.name=name;cov_1ks4ntaci2().s[487]++;this._super(service,this.path(),{});}});/** + * Represents a collection of users. You can create and list users using + * this collection container, or get a specific user. + * + * @endpoint authentication/users + * @class splunkjs.Service.Users + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[488]++;root.Users=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.Users + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Users + */path:function(){cov_1ks4ntaci2().f[151]++;cov_1ks4ntaci2().s[489]++;return Paths.users;},/** + * Creates a local instance of a user. + * + * @param {Object} props The properties for this new user. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. + * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. + * + * @method splunkjs.Service.Users + */instantiateEntity:function(props){cov_1ks4ntaci2().f[152]++;cov_1ks4ntaci2().s[490]++;return new root.User(this.service,props.name,{});},/** + * Constructor for `splunkjs.Service.Users`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @return {splunkjs.Service.Users} A new `splunkjs.Service.Users` instance. + * + * @method splunkjs.Service.Users + */init:function(service){cov_1ks4ntaci2().f[153]++;cov_1ks4ntaci2().s[491]++;this._super(service,this.path(),{});},/** + * Creates a new user. + * + * **Note:** This endpoint requires a special implementation. + * + * @param {Object} params A dictionary of properties. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the new entity: `(err, createdEntity)`. + * + * @method splunkjs.Service.Users + */create:function(params,callback){cov_1ks4ntaci2().f[154]++;cov_1ks4ntaci2().s[492]++;callback=(cov_1ks4ntaci2().b[136][0]++,callback)||(cov_1ks4ntaci2().b[136][1]++,function(){cov_1ks4ntaci2().f[155]++;});var that=(cov_1ks4ntaci2().s[493]++,this);var req=(cov_1ks4ntaci2().s[494]++,this.post("",params,function(err,response){cov_1ks4ntaci2().f[156]++;cov_1ks4ntaci2().s[495]++;if(err){cov_1ks4ntaci2().b[137][0]++;cov_1ks4ntaci2().s[496]++;callback(err);}else{cov_1ks4ntaci2().b[137][1]++;// This endpoint requires us to use the passed-in name +var props=(cov_1ks4ntaci2().s[497]++,{name:params.name});var entity=(cov_1ks4ntaci2().s[498]++,that.instantiateEntity(props));cov_1ks4ntaci2().s[499]++;entity.fetch(function(){cov_1ks4ntaci2().f[157]++;cov_1ks4ntaci2().s[500]++;if(req.wasAborted){cov_1ks4ntaci2().b[138][0]++;cov_1ks4ntaci2().s[501]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[138][1]++;cov_1ks4ntaci2().s[502]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[503]++;return req;}});/** + * Represents a specific Splunk view, which you can view, modify, and + * remove. + * + * @endpoint data/ui/views/{name} + * @class splunkjs.Service.View + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[504]++;root.View=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.View + */path:function(){cov_1ks4ntaci2().f[158]++;cov_1ks4ntaci2().s[505]++;return Paths.views+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.View`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the view. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. + * + * @method splunkjs.Service.View + */init:function(service,name,namespace){cov_1ks4ntaci2().f[159]++;cov_1ks4ntaci2().s[506]++;this.name=name;cov_1ks4ntaci2().s[507]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of views. You can create and list views using + * this collection container, or get a specific view. + * + * @endpoint data/ui/views + * @class splunkjs.Service.Views + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[508]++;root.Views=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Views + */path:function(){cov_1ks4ntaci2().f[160]++;cov_1ks4ntaci2().s[509]++;return Paths.views;},/** + * Creates a local instance of a view. + * + * @param {Object} props The properties for the new view. For a list of available parameters, see the POST scheduled/views/{name} endpoint in the REST API documentation. + * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. + * + * @method splunkjs.Service.Views + */instantiateEntity:function(props){cov_1ks4ntaci2().f[161]++;var entityNamespace=(cov_1ks4ntaci2().s[510]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[511]++;return new root.View(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.Views`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Views} A new `splunkjs.Service.Views` instance. + * + * @method splunkjs.Service.Views + */init:function(service,namespace){cov_1ks4ntaci2().f[162]++;cov_1ks4ntaci2().s[512]++;this._super(service,this.path(),namespace);}});/** + * Represents an index, which you can update and submit events to. + * + * @endpoint data/indexes/name + * @class splunkjs.Service.Index + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[513]++;root.Index=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Index + */path:function(){cov_1ks4ntaci2().f[163]++;cov_1ks4ntaci2().s[514]++;return Paths.indexes+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.Index`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the index. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. + * + * @method splunkjs.Service.Index + */init:function(service,name,namespace){cov_1ks4ntaci2().f[164]++;cov_1ks4ntaci2().s[515]++;this.name=name;cov_1ks4ntaci2().s[516]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[517]++;this.submitEvent=utils.bind(this,this.submitEvent);},/** + * Submits an event to this index. + * + * @example + * + * var index = service.indexes().item("_internal"); + * index.submitEvent("A new event", {sourcetype: "mysourcetype"}, function(err, result, index) { + * console.log("Submitted event: ", result); + * }); + * + * @param {String} event The text for this event. + * @param {Object} params A dictionary of parameters for indexing: + * - `host` (_string_): The value to populate in the host field for events from this data input. + * - `host_regex` (_string_): A regular expression used to extract the host value from each event. + * - `source` (_string_): The source value to fill in the metadata for this input's events. + * - `sourcetype` (_string_): The sourcetype to apply to events from this input. + * @param {Function} callback A function to call when the event is submitted: `(err, result, index)`. + * + * @endpoint receivers/simple?index={name} + * @method splunkjs.Service.Index + */submitEvent:function(event,params,callback){cov_1ks4ntaci2().f[165]++;cov_1ks4ntaci2().s[518]++;if((cov_1ks4ntaci2().b[140][0]++,!callback)&&(cov_1ks4ntaci2().b[140][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[139][0]++;cov_1ks4ntaci2().s[519]++;callback=params;cov_1ks4ntaci2().s[520]++;params={};}else{cov_1ks4ntaci2().b[139][1]++;}cov_1ks4ntaci2().s[521]++;callback=(cov_1ks4ntaci2().b[141][0]++,callback)||(cov_1ks4ntaci2().b[141][1]++,function(){cov_1ks4ntaci2().f[166]++;});cov_1ks4ntaci2().s[522]++;params=(cov_1ks4ntaci2().b[142][0]++,params)||(cov_1ks4ntaci2().b[142][1]++,{});// Add the index name +cov_1ks4ntaci2().s[523]++;params["index"]=this.name;var that=(cov_1ks4ntaci2().s[524]++,this);cov_1ks4ntaci2().s[525]++;return this.service.log(event,params,function(err,result){cov_1ks4ntaci2().f[167]++;cov_1ks4ntaci2().s[526]++;callback(err,result,that);});},remove:function(callback){cov_1ks4ntaci2().f[168]++;cov_1ks4ntaci2().s[527]++;if(this.service.versionCompare("5.0")<0){cov_1ks4ntaci2().b[143][0]++;cov_1ks4ntaci2().s[528]++;throw new Error("Indexes cannot be removed in Splunk 4.x");}else{cov_1ks4ntaci2().b[143][1]++;cov_1ks4ntaci2().s[529]++;return this._super(callback);}}});/** + * Represents a collection of indexes. You can create and list indexes using + * this collection container, or get a specific index. + * + * @endpoint data/indexes + * @class splunkjs.Service.Indexes + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[530]++;root.Indexes=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Indexes + */path:function(){cov_1ks4ntaci2().f[169]++;cov_1ks4ntaci2().s[531]++;return Paths.indexes;},/** + * Creates a local instance of an index. + * + * @param {Object} props The properties for the new index. For a list of available parameters, see Index parameters on Splunk Developer Portal. + * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. + * + * @method splunkjs.Service.Indexes + */instantiateEntity:function(props){cov_1ks4ntaci2().f[170]++;var entityNamespace=(cov_1ks4ntaci2().s[532]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[533]++;return new root.Index(this.service,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.Indexes`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Indexes} A new `splunkjs.Service.Indexes` instance. + * + * @method splunkjs.Service.Indexes + */init:function(service,namespace){cov_1ks4ntaci2().f[171]++;cov_1ks4ntaci2().s[534]++;this._super(service,this.path(),namespace);},/** + * Creates an index with the given name and parameters. + * + * @example + * + * var indexes = service.indexes(); + * indexes.create("NewIndex", {assureUTF8: true}, function(err, newIndex) { + * console.log("CREATED"); + * }); + * + * @param {String} name A name for this index. + * @param {Object} params A dictionary of properties. For a list of available parameters, see Index parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the new index: `(err, createdIndex)`. + * + * @endpoint data/indexes + * @method splunkjs.Service.Indexes + */create:function(name,params,callback){cov_1ks4ntaci2().f[172]++;cov_1ks4ntaci2().s[535]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[145][0]++,utils.isObject(name))&&(cov_1ks4ntaci2().b[145][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[145][2]++,!callback)){cov_1ks4ntaci2().b[144][0]++;cov_1ks4ntaci2().s[536]++;callback=params;cov_1ks4ntaci2().s[537]++;params=name;cov_1ks4ntaci2().s[538]++;name=params.name;}else{cov_1ks4ntaci2().b[144][1]++;}cov_1ks4ntaci2().s[539]++;params=(cov_1ks4ntaci2().b[146][0]++,params)||(cov_1ks4ntaci2().b[146][1]++,{});cov_1ks4ntaci2().s[540]++;params["name"]=name;cov_1ks4ntaci2().s[541]++;return this._super(params,callback);}});/** + * Represents a specific stanza, which you can update and remove, from a + * configuration file. + * + * @endpoint configs/conf-{file}/{name}` + * @class splunkjs.Service.ConfigurationStanza + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[542]++;root.ConfigurationStanza=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ConfigurationStanza + */path:function(){cov_1ks4ntaci2().f[173]++;var name=(cov_1ks4ntaci2().s[543]++,this.name==="default"?(cov_1ks4ntaci2().b[147][0]++,"_new"):(cov_1ks4ntaci2().b[147][1]++,this.name));cov_1ks4ntaci2().s[544]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.file)+"/"+encodeURIComponent(name);},/** + * Constructor for `splunkjs.Service.ConfigurationStanza`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} file The name of the configuration file. + * @param {String} name The name of the new stanza. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationStanza + */init:function(service,file,name,namespace){cov_1ks4ntaci2().f[174]++;cov_1ks4ntaci2().s[545]++;this.name=name;cov_1ks4ntaci2().s[546]++;this.file=file;cov_1ks4ntaci2().s[547]++;this._super(service,this.path(),namespace);}});/** + * Represents a collection of stanzas for a specific property file. You can + * create and list stanzas using this collection container, or get a specific + * stanza. + * + * @endpoint configs/conf-{file} + * @class splunkjs.Service.ConfigurationFile + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[548]++;root.ConfigurationFile=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.ConfigurationFile + */path:function(){cov_1ks4ntaci2().f[175]++;cov_1ks4ntaci2().s[549]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.name);},/** + * Creates a local instance of the default stanza in a configuration file. + * You cannot directly update the `ConfigurationStanza` returned by this function. + * + * This is equivalent to viewing `configs/conf-{file}/_new`. + * + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationFile + */getDefaultStanza:function(){cov_1ks4ntaci2().f[176]++;cov_1ks4ntaci2().s[550]++;return new root.ConfigurationStanza(this.service,this.name,"default",this.namespace);},/** + * Creates a local instance of a stanza in a configuration file. + * + * @param {Object} props The key-value properties for the new stanza. + * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. + * + * @method splunkjs.Service.ConfigurationFile + */instantiateEntity:function(props){cov_1ks4ntaci2().f[177]++;var entityNamespace=(cov_1ks4ntaci2().s[551]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[552]++;return new root.ConfigurationStanza(this.service,this.name,props.name,entityNamespace);},/** + * Constructor for `splunkjs.Service.ConfigurationFile`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name of the configuration file. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. + * + * @method splunkjs.Service.ConfigurationFile + */init:function(service,name,namespace){cov_1ks4ntaci2().f[178]++;cov_1ks4ntaci2().s[553]++;this.name=name;cov_1ks4ntaci2().s[554]++;this._super(service,this.path(),namespace);},/** + * Creates a stanza in this configuration file. + * + * @example + * + * var file = service.configurations().item("props"); + * file.create("my_stanza", function(err, newStanza) { + * console.log("CREATED"); + * }); + * + * @param {String} stanzaName A name for this stanza. + * @param {Object} values A dictionary of key-value pairs to put in this stanza. + * @param {Function} callback A function to call with the created stanza: `(err, createdStanza)`. + * + * @endpoint configs/conf-{file} + * @method splunkjs.Service.ConfigurationFile + */create:function(stanzaName,values,callback){cov_1ks4ntaci2().f[179]++;cov_1ks4ntaci2().s[555]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[149][0]++,utils.isObject(stanzaName))&&(cov_1ks4ntaci2().b[149][1]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[149][2]++,!callback)){cov_1ks4ntaci2().b[148][0]++;cov_1ks4ntaci2().s[556]++;callback=values;cov_1ks4ntaci2().s[557]++;values=stanzaName;cov_1ks4ntaci2().s[558]++;stanzaName=values.name;}else{cov_1ks4ntaci2().b[148][1]++;}cov_1ks4ntaci2().s[559]++;if((cov_1ks4ntaci2().b[151][0]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[151][1]++,!callback)){cov_1ks4ntaci2().b[150][0]++;cov_1ks4ntaci2().s[560]++;callback=values;cov_1ks4ntaci2().s[561]++;values={};}else{cov_1ks4ntaci2().b[150][1]++;}cov_1ks4ntaci2().s[562]++;values=(cov_1ks4ntaci2().b[152][0]++,values)||(cov_1ks4ntaci2().b[152][1]++,{});cov_1ks4ntaci2().s[563]++;values["name"]=stanzaName;cov_1ks4ntaci2().s[564]++;return this._super(values,callback);}});/** + * Represents a collection of configuration files. You can create and list + * configuration files using this collection container, or get a specific file. + * + * @endpoint properties + * @class splunkjs.Service.Configurations + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[565]++;root.Configurations=root.Collection.extend({/** + * Indicates whether to call `fetch` after an entity has been created. By + * default, the entity is not fetched because the endpoint returns + * (echoes) the new entity. + * + * @method splunkjs.Service.Configurations + */fetchOnEntityCreation:true,/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Configurations + */path:function(){cov_1ks4ntaci2().f[180]++;cov_1ks4ntaci2().s[566]++;return Paths.properties;},/** + * Creates a local instance of a configuration file. + * + * @param {Object} props The properties for this configuration file. + * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. + * + * @method splunkjs.Service.Configurations + */instantiateEntity:function(props){cov_1ks4ntaci2().f[181]++;cov_1ks4ntaci2().s[567]++;return new root.ConfigurationFile(this.service,props.name,this.namespace);},/** + * Constructor for `splunkjs.Service.Configurations`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Configurations} A new `splunkjs.Service.Configurations` instance. + * + * @method splunkjs.Service.Configurations + */init:function(service,namespace){cov_1ks4ntaci2().f[182]++;cov_1ks4ntaci2().s[568]++;if((cov_1ks4ntaci2().b[154][0]++,!namespace)||(cov_1ks4ntaci2().b[154][1]++,namespace.owner==="-")||(cov_1ks4ntaci2().b[154][2]++,namespace.app==="-")){cov_1ks4ntaci2().b[153][0]++;cov_1ks4ntaci2().s[569]++;throw new Error("Configurations requires a non-wildcard owner/app");}else{cov_1ks4ntaci2().b[153][1]++;}cov_1ks4ntaci2().s[570]++;this._super(service,this.path(),namespace);},/** + * Creates a configuration file. + * + * @example + * + * var configurations = service.configurations(); + * configurations.create("myprops", function(err, newFile) { + * console.log("CREATED"); + * }); + * + * @param {String} filename A name for this configuration file. + * @param {Function} callback A function to call with the new configuration file: `(err, createdFile)`. + * + * @endpoint properties + * @method splunkjs.Service.Configurations + */create:function(filename,callback){cov_1ks4ntaci2().f[183]++;cov_1ks4ntaci2().s[571]++;// If someone called us with the default style of (params, callback), +// lets make it work +if(utils.isObject(filename)){cov_1ks4ntaci2().b[155][0]++;cov_1ks4ntaci2().s[572]++;filename=filename["__conf"];}else{cov_1ks4ntaci2().b[155][1]++;}cov_1ks4ntaci2().s[573]++;callback=(cov_1ks4ntaci2().b[156][0]++,callback)||(cov_1ks4ntaci2().b[156][1]++,function(){cov_1ks4ntaci2().f[184]++;});var that=(cov_1ks4ntaci2().s[574]++,this);var req=(cov_1ks4ntaci2().s[575]++,this.post("",{__conf:filename},function(err,response){cov_1ks4ntaci2().f[185]++;cov_1ks4ntaci2().s[576]++;if(err){cov_1ks4ntaci2().b[157][0]++;cov_1ks4ntaci2().s[577]++;callback(err);}else{cov_1ks4ntaci2().b[157][1]++;var entity=(cov_1ks4ntaci2().s[578]++,new root.ConfigurationFile(that.service,filename));cov_1ks4ntaci2().s[579]++;entity.fetch(function(){cov_1ks4ntaci2().f[186]++;cov_1ks4ntaci2().s[580]++;if(req.wasAborted){cov_1ks4ntaci2().b[158][0]++;cov_1ks4ntaci2().s[581]++;return;// aborted, so ignore +}else{cov_1ks4ntaci2().b[158][1]++;cov_1ks4ntaci2().s[582]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[583]++;return req;},doesFileExist:async function(filename){cov_1ks4ntaci2().f[187]++;cov_1ks4ntaci2().s[584]++;try{var that=(cov_1ks4ntaci2().s[585]++,this);// 1. Fetch files list +var response=(cov_1ks4ntaci2().s[586]++,await this.get_v2("",{__conf:filename}));// 2. Filter the files +var files=(cov_1ks4ntaci2().s[587]++,response?.body?.entry?.filter(f=>{cov_1ks4ntaci2().f[188]++;cov_1ks4ntaci2().s[588]++;return f.name===filename;}));// 2. Check if the file exists +cov_1ks4ntaci2().s[589]++;if((cov_1ks4ntaci2().b[160][0]++,files)&&(cov_1ks4ntaci2().b[160][1]++,files.length==0)){cov_1ks4ntaci2().b[159][0]++;cov_1ks4ntaci2().s[590]++;return{code:"FILE_NOT_FOUND",message:`File with the name '${filename}' does not exist.`};}else{cov_1ks4ntaci2().b[159][1]++;}// 3. Create a local instance +var configurationFile=(cov_1ks4ntaci2().s[591]++,new root.ConfigurationFile(that.service,filename));// 4. Load the file content +var fetchedFile=(cov_1ks4ntaci2().s[592]++,await configurationFile.fetch_v2());cov_1ks4ntaci2().s[593]++;return{file:fetchedFile};}catch(error){cov_1ks4ntaci2().s[594]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},doesStanzaExist:async function(file,stanza){cov_1ks4ntaci2().f[189]++;cov_1ks4ntaci2().s[595]++;try{// 1. check if the stanza exists +var fetchedStanza=(cov_1ks4ntaci2().s[596]++,file.item(stanza));cov_1ks4ntaci2().s[597]++;if(!fetchedStanza){cov_1ks4ntaci2().b[161][0]++;cov_1ks4ntaci2().s[598]++;return{code:"STANZA_NOT_FOUND",message:`Stanza with the name '${stanza}' does not exist.`};}else{cov_1ks4ntaci2().b[161][1]++;cov_1ks4ntaci2().s[599]++;return{stanza:fetchedStanza};}}catch(error){cov_1ks4ntaci2().s[600]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},create_v2:async function(configs,svc,filename,stanza,keyValueMap,callback){cov_1ks4ntaci2().f[190]++;cov_1ks4ntaci2().s[601]++;callback=(cov_1ks4ntaci2().b[162][0]++,callback)||(cov_1ks4ntaci2().b[162][1]++,function(){cov_1ks4ntaci2().f[191]++;});var that=(cov_1ks4ntaci2().s[602]++,this);// 1. Check if the file exists +var doesFileExistResponse=(cov_1ks4ntaci2().s[603]++,await this.doesFileExist(filename));var configFile=(cov_1ks4ntaci2().s[604]++,doesFileExistResponse.file);// 2. If the file doesn't exist, create a new file +cov_1ks4ntaci2().s[605]++;if(!configFile){cov_1ks4ntaci2().b[163][0]++;cov_1ks4ntaci2().s[606]++;console.log(doesFileExistResponse);cov_1ks4ntaci2().s[607]++;console.log("Creating a new configuration file...");cov_1ks4ntaci2().s[608]++;that.create({__conf:filename},(err,newFile)=>{cov_1ks4ntaci2().f[192]++;cov_1ks4ntaci2().s[609]++;return console.log(`Configuration File created: ${filename}`);});cov_1ks4ntaci2().s[610]++;configFile=new root.ConfigurationFile(that.service,filename);cov_1ks4ntaci2().s[611]++;configFile=await configFile.fetch_v2();}else{cov_1ks4ntaci2().b[163][1]++;}// 2. Check if the stanza exists +var doesStanzaExistResponse=(cov_1ks4ntaci2().s[612]++,await this.doesStanzaExist(configFile,stanza));var configStanza=(cov_1ks4ntaci2().s[613]++,doesStanzaExistResponse.stanza);// 3. If the stanza doesn't exist, create a new stanza with given keyValueMap +cov_1ks4ntaci2().s[614]++;if(!configStanza){cov_1ks4ntaci2().b[164][0]++;cov_1ks4ntaci2().s[615]++;console.log(doesStanzaExistResponse);cov_1ks4ntaci2().s[616]++;console.log("Creating a new configuration stanza...");cov_1ks4ntaci2().s[617]++;configFile.create(stanza,keyValueMap,function(err,newStanza){cov_1ks4ntaci2().f[193]++;cov_1ks4ntaci2().s[618]++;console.log(`Configuration Stanza created: ${stanza}`);cov_1ks4ntaci2().s[619]++;callback();});}// 4. If the stanza exists, update it with the keyValueMap +else{cov_1ks4ntaci2().b[164][1]++;cov_1ks4ntaci2().s[620]++;configStanza.update(keyValueMap,(err,updatedStanza)=>{cov_1ks4ntaci2().f[194]++;cov_1ks4ntaci2().s[621]++;console.log(`Configuration Stanza updated: ${stanza}`);cov_1ks4ntaci2().s[622]++;callback();});}}});/** + * Represents a specific search job. You can perform different operations + * on this job, such as reading its status, canceling it, and getting results. + * + * @endpoint search/jobs/{search_id} + * @class splunkjs.Service.Job + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[623]++;root.Job=root.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Job + */path:function(){cov_1ks4ntaci2().f[195]++;cov_1ks4ntaci2().s[624]++;return Paths.jobs+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.Job`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} sid The search ID for this search job. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. + * + * @method splunkjs.Service.Job + */init:function(service,sid,namespace){cov_1ks4ntaci2().f[196]++;cov_1ks4ntaci2().s[625]++;this.name=sid;cov_1ks4ntaci2().s[626]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[627]++;this.sid=sid;// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[628]++;this.cancel=utils.bind(this,this.cancel);cov_1ks4ntaci2().s[629]++;this.disablePreview=utils.bind(this,this.disablePreview);cov_1ks4ntaci2().s[630]++;this.enablePreview=utils.bind(this,this.enablePreview);cov_1ks4ntaci2().s[631]++;this.events=utils.bind(this,this.events);cov_1ks4ntaci2().s[632]++;this.finalize=utils.bind(this,this.finalize);cov_1ks4ntaci2().s[633]++;this.pause=utils.bind(this,this.pause);cov_1ks4ntaci2().s[634]++;this.preview=utils.bind(this,this.preview);cov_1ks4ntaci2().s[635]++;this.results=utils.bind(this,this.results);cov_1ks4ntaci2().s[636]++;this.searchlog=utils.bind(this,this.searchlog);cov_1ks4ntaci2().s[637]++;this.setPriority=utils.bind(this,this.setPriority);cov_1ks4ntaci2().s[638]++;this.setTTL=utils.bind(this,this.setTTL);cov_1ks4ntaci2().s[639]++;this.summary=utils.bind(this,this.summary);cov_1ks4ntaci2().s[640]++;this.timeline=utils.bind(this,this.timeline);cov_1ks4ntaci2().s[641]++;this.touch=utils.bind(this,this.touch);cov_1ks4ntaci2().s[642]++;this.unpause=utils.bind(this,this.unpause);},/** + * Cancels a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.cancel(function(err) { + * console.log("CANCELLED"); + * }); + * + * @param {Function} callback A function to call when the search is done: `(err)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */cancel:function(callback){cov_1ks4ntaci2().f[197]++;var req=(cov_1ks4ntaci2().s[643]++,this.post("control",{action:"cancel"},callback));cov_1ks4ntaci2().s[644]++;return req;},/** + * Disables preview generation for a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.disablePreview(function(err, job) { + * console.log("PREVIEW DISABLED"); + * }); + * + * @param {Function} callback A function to call with this search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */disablePreview:function(callback){cov_1ks4ntaci2().f[198]++;cov_1ks4ntaci2().s[645]++;callback=(cov_1ks4ntaci2().b[165][0]++,callback)||(cov_1ks4ntaci2().b[165][1]++,function(){cov_1ks4ntaci2().f[199]++;});var that=(cov_1ks4ntaci2().s[646]++,this);var req=(cov_1ks4ntaci2().s[647]++,this.post("control",{action:"disablepreview"},function(err){cov_1ks4ntaci2().f[200]++;cov_1ks4ntaci2().s[648]++;callback(err,that);}));cov_1ks4ntaci2().s[649]++;return req;},/** + * Enables preview generation for a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.disablePreview(function(err, job) { + * console.log("PREVIEW ENABLED"); + * }); + * + * @param {Function} callback A function to call with this search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */enablePreview:function(callback){cov_1ks4ntaci2().f[201]++;cov_1ks4ntaci2().s[650]++;callback=(cov_1ks4ntaci2().b[166][0]++,callback)||(cov_1ks4ntaci2().b[166][1]++,function(){cov_1ks4ntaci2().f[202]++;});var that=(cov_1ks4ntaci2().s[651]++,this);var req=(cov_1ks4ntaci2().s[652]++,this.post("control",{action:"enablepreview"},function(err){cov_1ks4ntaci2().f[203]++;cov_1ks4ntaci2().s[653]++;callback(err,that);}));cov_1ks4ntaci2().s[654]++;return req;},/** + * Returns the events of a search job with given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.events({count: 10}, function(err, events, job) { + * console.log("Fields: ", events.fields); + * }); + * + * @param {Object} params The parameters for retrieving events. For a list of available parameters, see the GET search/jobs/{search_id}/events endpoint in the REST API documentation. + * @param {Function} callback A function to call when the events are retrieved: `(err, events, job)`. + * + * @endpoint search/jobs/{search_id}/events + * @method splunkjs.Service.Job + */events:function(params,callback){cov_1ks4ntaci2().f[204]++;cov_1ks4ntaci2().s[655]++;callback=(cov_1ks4ntaci2().b[167][0]++,callback)||(cov_1ks4ntaci2().b[167][1]++,function(){cov_1ks4ntaci2().f[205]++;});cov_1ks4ntaci2().s[656]++;params=(cov_1ks4ntaci2().b[168][0]++,params)||(cov_1ks4ntaci2().b[168][1]++,{});cov_1ks4ntaci2().s[657]++;params.output_mode=(cov_1ks4ntaci2().b[169][0]++,params.output_mode)||(cov_1ks4ntaci2().b[169][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[658]++,this);cov_1ks4ntaci2().s[659]++;return this.get("events",params,function(err,response){cov_1ks4ntaci2().f[206]++;cov_1ks4ntaci2().s[660]++;if(err){cov_1ks4ntaci2().b[170][0]++;cov_1ks4ntaci2().s[661]++;callback(err);}else{cov_1ks4ntaci2().b[170][1]++;cov_1ks4ntaci2().s[662]++;callback(null,response.data,that);}});},/** + * Finalizes a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.finalize(function(err, job) { + * console.log("JOB FINALIZED"); + * }); + * + * @param {Function} callback A function to call with the job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */finalize:function(callback){cov_1ks4ntaci2().f[207]++;cov_1ks4ntaci2().s[663]++;callback=(cov_1ks4ntaci2().b[171][0]++,callback)||(cov_1ks4ntaci2().b[171][1]++,function(){cov_1ks4ntaci2().f[208]++;});var that=(cov_1ks4ntaci2().s[664]++,this);var req=(cov_1ks4ntaci2().s[665]++,this.post("control",{action:"finalize"},function(err){cov_1ks4ntaci2().f[209]++;cov_1ks4ntaci2().s[666]++;callback(err,that);}));cov_1ks4ntaci2().s[667]++;return req;},/** + * Returns an iterator over this search job's events or results. + * + * @param {String} type One of {"events", "preview", "results"}. + * @param {Object} params A dictionary of optional parameters: + * - `pagesize` (_integer_): The number of items to return on each request. Defaults to as many as possible. + * @return {Object} An iterator object with a `next(callback)` method, where `callback` is of the form `(err, results, hasMoreResults)`. + * + * @endpoint search/jobs/{search_id}/results + * @method splunkjs.Service.Job + */iterator:function(type,params){cov_1ks4ntaci2().f[210]++;cov_1ks4ntaci2().s[668]++;return new root.PaginatedEndpointIterator(this[type],params);},/** + * Pauses a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.pause(function(err, job) { + * console.log("JOB PAUSED"); + * }); + * + * @param {Function} callback A function to call with the job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */pause:function(callback){cov_1ks4ntaci2().f[211]++;cov_1ks4ntaci2().s[669]++;callback=(cov_1ks4ntaci2().b[172][0]++,callback)||(cov_1ks4ntaci2().b[172][1]++,function(){cov_1ks4ntaci2().f[212]++;});var that=(cov_1ks4ntaci2().s[670]++,this);var req=(cov_1ks4ntaci2().s[671]++,this.post("control",{action:"pause"},function(err){cov_1ks4ntaci2().f[213]++;cov_1ks4ntaci2().s[672]++;callback(err,that);}));cov_1ks4ntaci2().s[673]++;return req;},/* + * Gets the preview results for a search job with given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.preview({count: 10}, function(err, results, job) { + * console.log("Fields: ", results.fields); + * }); + * + * @param {Object} params The parameters for retrieving preview results. For a list of available parameters, see the GET search/jobs/{search_id}/results_preview endpoint in the REST API documentation. + * @param {Function} callback A function to call when the preview results are retrieved : `(err, results, job)`. + * + * @endpoint search/jobs/{search_id}/results_preview + * @method splunkjs.Service.Job + */preview:function(params,callback){cov_1ks4ntaci2().f[214]++;cov_1ks4ntaci2().s[674]++;callback=(cov_1ks4ntaci2().b[173][0]++,callback)||(cov_1ks4ntaci2().b[173][1]++,function(){cov_1ks4ntaci2().f[215]++;});cov_1ks4ntaci2().s[675]++;params=(cov_1ks4ntaci2().b[174][0]++,params)||(cov_1ks4ntaci2().b[174][1]++,{});cov_1ks4ntaci2().s[676]++;params.output_mode=(cov_1ks4ntaci2().b[175][0]++,params.output_mode)||(cov_1ks4ntaci2().b[175][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[677]++,this);cov_1ks4ntaci2().s[678]++;return this.get("results_preview",params,function(err,response){cov_1ks4ntaci2().f[216]++;cov_1ks4ntaci2().s[679]++;if(err){cov_1ks4ntaci2().b[176][0]++;cov_1ks4ntaci2().s[680]++;callback(err);}else{cov_1ks4ntaci2().b[176][1]++;cov_1ks4ntaci2().s[681]++;callback(null,response.data,that);}});},/** + * Gets the results for a search job with given parameters. + * + * The callback can get `undefined` for its `results` parameter if the + * job is not yet done. To avoid this, use the `Job.track()` method to + * wait until the job is complete prior to fetching the results with + * this method. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.results({count: 10}, function(err, results, job) { + * console.log("Fields: ", results.results); + * }); + * + * @param {Object} params The parameters for retrieving search results. For a list of available parameters, see the GET search/jobs/{search_id}/results endpoint in the REST API documentation. + * @param {Function} callback A function to call when the results are retrieved: `(err, results, job)`. + * + * @endpoint search/jobs/{search_id}/results + * @method splunkjs.Service.Job + */results:function(params,callback){cov_1ks4ntaci2().f[217]++;cov_1ks4ntaci2().s[682]++;callback=(cov_1ks4ntaci2().b[177][0]++,callback)||(cov_1ks4ntaci2().b[177][1]++,function(){cov_1ks4ntaci2().f[218]++;});cov_1ks4ntaci2().s[683]++;params=(cov_1ks4ntaci2().b[178][0]++,params)||(cov_1ks4ntaci2().b[178][1]++,{});cov_1ks4ntaci2().s[684]++;params.output_mode=(cov_1ks4ntaci2().b[179][0]++,params.output_mode)||(cov_1ks4ntaci2().b[179][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[685]++,this);cov_1ks4ntaci2().s[686]++;return this.get("results",params,function(err,response){cov_1ks4ntaci2().f[219]++;cov_1ks4ntaci2().s[687]++;if(err){cov_1ks4ntaci2().b[180][0]++;cov_1ks4ntaci2().s[688]++;callback(err);}else{cov_1ks4ntaci2().b[180][1]++;cov_1ks4ntaci2().s[689]++;callback(null,response.data,that);}});},/** + * Gets the search log for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.searchlog(function(err, searchlog, job) { + * console.log(searchlog); + * }); + * + * @param {Function} callback A function to call with the search log and job: `(err, searchlog, job)`. + * + * @endpoint search/jobs/{search_id}/search.log + * @method splunkjs.Service.Job + */searchlog:function(callback){cov_1ks4ntaci2().f[220]++;cov_1ks4ntaci2().s[690]++;callback=(cov_1ks4ntaci2().b[181][0]++,callback)||(cov_1ks4ntaci2().b[181][1]++,function(){cov_1ks4ntaci2().f[221]++;});var that=(cov_1ks4ntaci2().s[691]++,this);cov_1ks4ntaci2().s[692]++;return this.get("search.log",{},function(err,response){cov_1ks4ntaci2().f[222]++;cov_1ks4ntaci2().s[693]++;if(err){cov_1ks4ntaci2().b[182][0]++;cov_1ks4ntaci2().s[694]++;callback(err);}else{cov_1ks4ntaci2().b[182][1]++;cov_1ks4ntaci2().s[695]++;callback(null,response.data,that);}});},/** + * Sets the priority for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.setPriority(6, function(err, job) { + * console.log("JOB PRIORITY SET"); + * }); + * + * @param {Number} value The priority (an integer between 1-10). A higher value means a higher priority. + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */setPriority:function(value,callback){cov_1ks4ntaci2().f[223]++;cov_1ks4ntaci2().s[696]++;callback=(cov_1ks4ntaci2().b[183][0]++,callback)||(cov_1ks4ntaci2().b[183][1]++,function(){cov_1ks4ntaci2().f[224]++;});var that=(cov_1ks4ntaci2().s[697]++,this);var req=(cov_1ks4ntaci2().s[698]++,this.post("control",{action:"setpriority",priority:value},function(err){cov_1ks4ntaci2().f[225]++;cov_1ks4ntaci2().s[699]++;callback(err,that);}));cov_1ks4ntaci2().s[700]++;return req;},/** + * Sets the time to live (TTL) for the search job, which is the time before + * the search job expires after it has been completed and is still available. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.setTTL(1000, function(err, job) { + * console.log("JOB TTL SET"); + * }); + * + * @param {Number} value The time to live, in seconds. + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */setTTL:function(value,callback){cov_1ks4ntaci2().f[226]++;cov_1ks4ntaci2().s[701]++;callback=(cov_1ks4ntaci2().b[184][0]++,callback)||(cov_1ks4ntaci2().b[184][1]++,function(){cov_1ks4ntaci2().f[227]++;});var that=(cov_1ks4ntaci2().s[702]++,this);var req=(cov_1ks4ntaci2().s[703]++,this.post("control",{action:"setttl",ttl:value},function(err){cov_1ks4ntaci2().f[228]++;cov_1ks4ntaci2().s[704]++;callback(err,that);}));cov_1ks4ntaci2().s[705]++;return req;},/** + * Gets the summary for this search job with the given parameters. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.summary({top_count: 5}, function(err, summary, job) { + * console.log("Summary: ", summary); + * }); + * + * @param {Object} params The parameters for retrieving the summary. For a list of available parameters, see the GET search/jobs/{search_id}/summary endpoint in the REST API documentation. + * @param {Function} callback A function to call with the summary and search job: `(err, summary, job)`. + * + * @endpoint search/jobs/{search_id}/summmary + * @method splunkjs.Service.Job + */summary:function(params,callback){cov_1ks4ntaci2().f[229]++;cov_1ks4ntaci2().s[706]++;callback=(cov_1ks4ntaci2().b[185][0]++,callback)||(cov_1ks4ntaci2().b[185][1]++,function(){cov_1ks4ntaci2().f[230]++;});var that=(cov_1ks4ntaci2().s[707]++,this);cov_1ks4ntaci2().s[708]++;return this.get("summary",params,function(err,response){cov_1ks4ntaci2().f[231]++;cov_1ks4ntaci2().s[709]++;if(err){cov_1ks4ntaci2().b[186][0]++;cov_1ks4ntaci2().s[710]++;callback(err);}else{cov_1ks4ntaci2().b[186][1]++;cov_1ks4ntaci2().s[711]++;callback(null,response.data,that);}});},/** + * Gets the timeline for this search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.timeline({time_format: "%c"}, function(err, job, timeline) { + * console.log("Timeline: ", timeline); + * }); + * + * @param {Object} params The parameters for retrieving the timeline. For a list of available parameters, see the GET search/jobs/{search_id}/timeline endpoint in the REST API documentation. + * @param {Function} callback A function to call with the timeline and search job: `(err, timeline, job)`. + * + * @endpoint search/jobs/{search_id}/timeline + * @method splunkjs.Service.Job + */timeline:function(params,callback){cov_1ks4ntaci2().f[232]++;cov_1ks4ntaci2().s[712]++;callback=(cov_1ks4ntaci2().b[187][0]++,callback)||(cov_1ks4ntaci2().b[187][1]++,function(){cov_1ks4ntaci2().f[233]++;});var that=(cov_1ks4ntaci2().s[713]++,this);cov_1ks4ntaci2().s[714]++;return this.get("timeline",params,function(err,response){cov_1ks4ntaci2().f[234]++;cov_1ks4ntaci2().s[715]++;if(err){cov_1ks4ntaci2().b[188][0]++;cov_1ks4ntaci2().s[716]++;callback(err);}else{cov_1ks4ntaci2().b[188][1]++;cov_1ks4ntaci2().s[717]++;callback(null,response.data,that);}});},/** + * Touches a search job, which means extending the expiration time of + * the search to now plus the time to live (TTL). + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.touch(function(err) { + * console.log("JOB TOUCHED"); + * }); + * + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */touch:function(callback){cov_1ks4ntaci2().f[235]++;cov_1ks4ntaci2().s[718]++;callback=(cov_1ks4ntaci2().b[189][0]++,callback)||(cov_1ks4ntaci2().b[189][1]++,function(){cov_1ks4ntaci2().f[236]++;});var that=(cov_1ks4ntaci2().s[719]++,this);var req=(cov_1ks4ntaci2().s[720]++,this.post("control",{action:"touch"},function(err){cov_1ks4ntaci2().f[237]++;cov_1ks4ntaci2().s[721]++;callback(err,that);}));cov_1ks4ntaci2().s[722]++;return req;},/** + * Starts polling the status of this search job, and fires callbacks + * upon each status change. + * + * @param {Object} options A dictionary of optional parameters: + * - `period` (_integer_): The number of milliseconds to wait between each poll. Defaults to 500. + * @param {Object|Function} callbacks A dictionary of optional callbacks: + * - `ready`: A function `(job)` invoked when the job's properties first become available. + * - `progress`: A function `(job)` invoked whenever new job properties are available. + * - `done`: A function `(job)` invoked if the job completes successfully. No further polling is done. + * - `failed`: A function `(job)` invoked if the job fails executing on the server. No further polling is done. + * - `error`: A function `(err)` invoked if an error occurs while polling. No further polling is done. + * Or, if a function `(job)`, equivalent to passing it as a `done` callback. + * + * @method splunkjs.Service.Job + */track:function(options,callbacks){cov_1ks4ntaci2().f[238]++;var period=(cov_1ks4ntaci2().s[723]++,(cov_1ks4ntaci2().b[190][0]++,options.period)||(cov_1ks4ntaci2().b[190][1]++,500));// ms +cov_1ks4ntaci2().s[724]++;if(utils.isFunction(callbacks)){cov_1ks4ntaci2().b[191][0]++;cov_1ks4ntaci2().s[725]++;callbacks={done:callbacks};}else{cov_1ks4ntaci2().b[191][1]++;}var noCallbacksAfterReady=(cov_1ks4ntaci2().s[726]++,(cov_1ks4ntaci2().b[192][0]++,!callbacks.progress)&&(cov_1ks4ntaci2().b[192][1]++,!callbacks.done)&&(cov_1ks4ntaci2().b[192][2]++,!callbacks.failed)&&(cov_1ks4ntaci2().b[192][3]++,!callbacks.error));cov_1ks4ntaci2().s[727]++;callbacks.ready=(cov_1ks4ntaci2().b[193][0]++,callbacks.ready)||(cov_1ks4ntaci2().b[193][1]++,function(){cov_1ks4ntaci2().f[239]++;});cov_1ks4ntaci2().s[728]++;callbacks.progress=(cov_1ks4ntaci2().b[194][0]++,callbacks.progress)||(cov_1ks4ntaci2().b[194][1]++,function(){cov_1ks4ntaci2().f[240]++;});cov_1ks4ntaci2().s[729]++;callbacks.done=(cov_1ks4ntaci2().b[195][0]++,callbacks.done)||(cov_1ks4ntaci2().b[195][1]++,function(){cov_1ks4ntaci2().f[241]++;});cov_1ks4ntaci2().s[730]++;callbacks.failed=(cov_1ks4ntaci2().b[196][0]++,callbacks.failed)||(cov_1ks4ntaci2().b[196][1]++,function(){cov_1ks4ntaci2().f[242]++;});cov_1ks4ntaci2().s[731]++;callbacks.error=(cov_1ks4ntaci2().b[197][0]++,callbacks.error)||(cov_1ks4ntaci2().b[197][1]++,function(){cov_1ks4ntaci2().f[243]++;});// For use by tests only +cov_1ks4ntaci2().s[732]++;callbacks._preready=(cov_1ks4ntaci2().b[198][0]++,callbacks._preready)||(cov_1ks4ntaci2().b[198][1]++,function(){cov_1ks4ntaci2().f[244]++;});cov_1ks4ntaci2().s[733]++;callbacks._stoppedAfterReady=(cov_1ks4ntaci2().b[199][0]++,callbacks._stoppedAfterReady)||(cov_1ks4ntaci2().b[199][1]++,function(){cov_1ks4ntaci2().f[245]++;});var that=(cov_1ks4ntaci2().s[734]++,this);var emittedReady=(cov_1ks4ntaci2().s[735]++,false);var doneLooping=(cov_1ks4ntaci2().s[736]++,false);cov_1ks4ntaci2().s[737]++;Async.whilst(function(){cov_1ks4ntaci2().f[246]++;cov_1ks4ntaci2().s[738]++;return!doneLooping;},function(nextIteration){cov_1ks4ntaci2().f[247]++;cov_1ks4ntaci2().s[739]++;that.fetch(function(err,job){cov_1ks4ntaci2().f[248]++;cov_1ks4ntaci2().s[740]++;if(err){cov_1ks4ntaci2().b[200][0]++;cov_1ks4ntaci2().s[741]++;nextIteration(err);cov_1ks4ntaci2().s[742]++;return;}else{cov_1ks4ntaci2().b[200][1]++;}var dispatchState=(cov_1ks4ntaci2().s[743]++,job.properties().dispatchState);var notReady=(cov_1ks4ntaci2().s[744]++,(cov_1ks4ntaci2().b[201][0]++,dispatchState==="QUEUED")||(cov_1ks4ntaci2().b[201][1]++,dispatchState==="PARSING"));cov_1ks4ntaci2().s[745]++;if(notReady){cov_1ks4ntaci2().b[202][0]++;cov_1ks4ntaci2().s[746]++;callbacks._preready(job);}else{cov_1ks4ntaci2().b[202][1]++;cov_1ks4ntaci2().s[747]++;if(!emittedReady){cov_1ks4ntaci2().b[203][0]++;cov_1ks4ntaci2().s[748]++;callbacks.ready(job);cov_1ks4ntaci2().s[749]++;emittedReady=true;// Optimization: Don't keep polling the job if the +// caller only cares about the `ready` event. +cov_1ks4ntaci2().s[750]++;if(noCallbacksAfterReady){cov_1ks4ntaci2().b[204][0]++;cov_1ks4ntaci2().s[751]++;callbacks._stoppedAfterReady(job);cov_1ks4ntaci2().s[752]++;doneLooping=true;cov_1ks4ntaci2().s[753]++;nextIteration();cov_1ks4ntaci2().s[754]++;return;}else{cov_1ks4ntaci2().b[204][1]++;}}else{cov_1ks4ntaci2().b[203][1]++;}cov_1ks4ntaci2().s[755]++;callbacks.progress(job);var props=(cov_1ks4ntaci2().s[756]++,job.properties());cov_1ks4ntaci2().s[757]++;if((cov_1ks4ntaci2().b[206][0]++,dispatchState==="DONE")&&(cov_1ks4ntaci2().b[206][1]++,props.isDone)){cov_1ks4ntaci2().b[205][0]++;cov_1ks4ntaci2().s[758]++;callbacks.done(job);cov_1ks4ntaci2().s[759]++;doneLooping=true;cov_1ks4ntaci2().s[760]++;nextIteration();cov_1ks4ntaci2().s[761]++;return;}else{cov_1ks4ntaci2().b[205][1]++;cov_1ks4ntaci2().s[762]++;if((cov_1ks4ntaci2().b[208][0]++,dispatchState==="FAILED")&&(cov_1ks4ntaci2().b[208][1]++,props.isFailed)){cov_1ks4ntaci2().b[207][0]++;cov_1ks4ntaci2().s[763]++;callbacks.failed(job);cov_1ks4ntaci2().s[764]++;doneLooping=true;cov_1ks4ntaci2().s[765]++;nextIteration();cov_1ks4ntaci2().s[766]++;return;}else{cov_1ks4ntaci2().b[207][1]++;}}}cov_1ks4ntaci2().s[767]++;Async.sleep(period,nextIteration);});},function(err){cov_1ks4ntaci2().f[249]++;cov_1ks4ntaci2().s[768]++;if(err){cov_1ks4ntaci2().b[209][0]++;cov_1ks4ntaci2().s[769]++;callbacks.error(err);}else{cov_1ks4ntaci2().b[209][1]++;}});},/** + * Resumes a search job. + * + * @example + * + * var job = service.jobs().item("mysid"); + * job.unpause(function(err) { + * console.log("JOB UNPAUSED"); + * }); + * + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @endpoint search/jobs/{search_id}/control + * @method splunkjs.Service.Job + */unpause:function(callback){cov_1ks4ntaci2().f[250]++;cov_1ks4ntaci2().s[770]++;callback=(cov_1ks4ntaci2().b[210][0]++,callback)||(cov_1ks4ntaci2().b[210][1]++,function(){cov_1ks4ntaci2().f[251]++;});var that=(cov_1ks4ntaci2().s[771]++,this);var req=(cov_1ks4ntaci2().s[772]++,this.post("control",{action:"unpause"},function(err){cov_1ks4ntaci2().f[252]++;cov_1ks4ntaci2().s[773]++;callback(err,that);}));cov_1ks4ntaci2().s[774]++;return req;}});/** + * Represents a collection of search jobs. You can create and list search + * jobs using this collection container, or get a specific search job. + * + * @endpoint search/jobs + * @class splunkjs.Service.Jobs + * @extends splunkjs.Service.Collection + */cov_1ks4ntaci2().s[775]++;root.Jobs=root.Collection.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.Jobs + */path:function(){cov_1ks4ntaci2().f[253]++;cov_1ks4ntaci2().s[776]++;return Paths.jobs;},/** + * Creates a local instance of a job. + * + * @param {Object} props The properties for this new job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. + * + * @method splunkjs.Service.Jobs + */instantiateEntity:function(props){cov_1ks4ntaci2().f[254]++;var sid=(cov_1ks4ntaci2().s[777]++,props.content.sid);var entityNamespace=(cov_1ks4ntaci2().s[778]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[779]++;return new root.Job(this.service,sid,entityNamespace);},/** + * Constructor for `splunkjs.Service.Jobs`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {Object} namespace Namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @return {splunkjs.Service.Jobs} A new `splunkjs.Service.Jobs` instance. + * + * @method splunkjs.Service.Jobs + */init:function(service,namespace){cov_1ks4ntaci2().f[255]++;cov_1ks4ntaci2().s[780]++;this._super(service,this.path(),namespace);// We perform the bindings so that every function works +// properly when it is passed as a callback. +cov_1ks4ntaci2().s[781]++;this.create=utils.bind(this,this.create);},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * @param {Function} callback A function to call with the created job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */create:function(query,params,callback){cov_1ks4ntaci2().f[256]++;cov_1ks4ntaci2().s[782]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[212][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[212][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[212][2]++,!callback)){cov_1ks4ntaci2().b[211][0]++;cov_1ks4ntaci2().s[783]++;callback=params;cov_1ks4ntaci2().s[784]++;params=query;cov_1ks4ntaci2().s[785]++;query=params.search;}else{cov_1ks4ntaci2().b[211][1]++;}cov_1ks4ntaci2().s[786]++;callback=(cov_1ks4ntaci2().b[213][0]++,callback)||(cov_1ks4ntaci2().b[213][1]++,function(){cov_1ks4ntaci2().f[257]++;});cov_1ks4ntaci2().s[787]++;params=(cov_1ks4ntaci2().b[214][0]++,params)||(cov_1ks4ntaci2().b[214][1]++,{});cov_1ks4ntaci2().s[788]++;params.search=query;cov_1ks4ntaci2().s[789]++;if(((cov_1ks4ntaci2().b[216][0]++,params.exec_mode)||(cov_1ks4ntaci2().b[216][1]++,"")).toLowerCase()==="oneshot"){cov_1ks4ntaci2().b[215][0]++;cov_1ks4ntaci2().s[790]++;throw new Error("Please use splunkjs.Service.Jobs.oneshotSearch for exec_mode=oneshot");}else{cov_1ks4ntaci2().b[215][1]++;}cov_1ks4ntaci2().s[791]++;if(!params.search){cov_1ks4ntaci2().b[217][0]++;cov_1ks4ntaci2().s[792]++;callback("Must provide a query to create a search job");cov_1ks4ntaci2().s[793]++;return;}else{cov_1ks4ntaci2().b[217][1]++;}var that=(cov_1ks4ntaci2().s[794]++,this);cov_1ks4ntaci2().s[795]++;return this.post("",params,function(err,response){cov_1ks4ntaci2().f[258]++;cov_1ks4ntaci2().s[796]++;if(err){cov_1ks4ntaci2().b[218][0]++;cov_1ks4ntaci2().s[797]++;callback(err);}else{cov_1ks4ntaci2().b[218][1]++;var job=(cov_1ks4ntaci2().s[798]++,new root.Job(that.service,response.data.sid,that.namespace));cov_1ks4ntaci2().s[799]++;callback(null,job);}});},/** + * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: + * + * - Use `exec_mode=normal` to return a search job ID immediately (default). + * Poll for completion to find out when you can retrieve search results. + * + * - Use `exec_mode=blocking` to return the search job ID when the search has finished. + * + * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. + * + * @example + * + * var jobs = service.jobs(); + * jobs.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { + * console.log("CREATED": newJob.sid); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call with the new search job: `(err, createdJob)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */search:function(query,params,callback){cov_1ks4ntaci2().f[259]++;cov_1ks4ntaci2().s[800]++;return this.create(query,params,callback);},/** + * Creates a oneshot search from a given search query and parameters. + * + * @example + * + * var jobs = service.jobs(); + * jobs.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { + * console.log("RESULT FIELDS": results.fields); + * }); + * + * @param {String} query The search query. + * @param {Object} params A dictionary of properties for the search: + * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). + * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. + * - `rf` (_string_): Specifies one or more fields to add to the search. + * @param {Function} callback A function to call with the results of the search: `(err, results)`. + * + * @endpoint search/jobs + * @method splunkjs.Service.Jobs + */oneshotSearch:function(query,params,callback){cov_1ks4ntaci2().f[260]++;cov_1ks4ntaci2().s[801]++;// If someone called us with the default style of (params, callback), +// lets make it work +if((cov_1ks4ntaci2().b[220][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[220][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[220][2]++,!callback)){cov_1ks4ntaci2().b[219][0]++;cov_1ks4ntaci2().s[802]++;callback=params;cov_1ks4ntaci2().s[803]++;params=query;cov_1ks4ntaci2().s[804]++;query=params.search;}else{cov_1ks4ntaci2().b[219][1]++;}cov_1ks4ntaci2().s[805]++;callback=(cov_1ks4ntaci2().b[221][0]++,callback)||(cov_1ks4ntaci2().b[221][1]++,function(){cov_1ks4ntaci2().f[261]++;});cov_1ks4ntaci2().s[806]++;params=(cov_1ks4ntaci2().b[222][0]++,params)||(cov_1ks4ntaci2().b[222][1]++,{});cov_1ks4ntaci2().s[807]++;params.search=query;cov_1ks4ntaci2().s[808]++;params.exec_mode="oneshot";cov_1ks4ntaci2().s[809]++;if(!params.search){cov_1ks4ntaci2().b[223][0]++;cov_1ks4ntaci2().s[810]++;callback("Must provide a query to create a search job");}else{cov_1ks4ntaci2().b[223][1]++;}var outputMode=(cov_1ks4ntaci2().s[811]++,(cov_1ks4ntaci2().b[224][0]++,params.output_mode)||(cov_1ks4ntaci2().b[224][1]++,"json_rows"));var path=(cov_1ks4ntaci2().s[812]++,this.qualifiedPath);var method=(cov_1ks4ntaci2().s[813]++,"POST");var headers=(cov_1ks4ntaci2().s[814]++,{});var post=(cov_1ks4ntaci2().s[815]++,params);var get=(cov_1ks4ntaci2().s[816]++,{output_mode:outputMode});var body=(cov_1ks4ntaci2().s[817]++,null);var req=(cov_1ks4ntaci2().s[818]++,this.service.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[262]++;cov_1ks4ntaci2().s[819]++;if(err){cov_1ks4ntaci2().b[225][0]++;cov_1ks4ntaci2().s[820]++;callback(err);}else{cov_1ks4ntaci2().b[225][1]++;cov_1ks4ntaci2().s[821]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[822]++;return req;}});/** + * Represents a field of a data model object. + * This is a helper class for `DataModelCalculation` + * and `DataModelObject`. + * + * Has these properties: + * - `fieldName` (_string_): The name of this field. + * - `displayName` (_string_): A human readable name for this field. + * - `type` (_string_): The type of this field. + * - `multivalued` (_boolean_): Whether this field is multivalued. + * - `required` (_boolean_): Whether this field is required. + * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. + * - `editable` (_boolean_): Whether this field can be edited. + * - `comment` (_string_): A comment for this field, or `null` if there isn't one. + * - `fieldSearch` (_string_): A search query fragment for this field. + * - `lineage` (_array_): An array of strings of the lineage of the data model + * on which this field is defined. + * - `owner` (_string_): The name of the data model object on which this field is defined. + * + * Possible types for a data model field: + * - `string` + * - `boolean` + * - `number` + * - `timestamp` + * - `objectCount` + * - `childCount` + * - `ipv4` + * + * @class splunkjs.Service.DataModelField + */cov_1ks4ntaci2().s[823]++;root.DataModelField=Class.extend({_types:["string","number","timestamp","objectCount","childCount","ipv4","boolean"],/** + * Constructor for a data model field. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `fieldName` (_string_): The name of this field. + * - `displayName` (_string_): A human readable name for this field. + * - `type` (_string_): The type of this field, see valid types in class docs. + * - `multivalue` (_boolean_): Whether this field is multivalued. + * - `required` (_boolean_): Whether this field is required on events in the object + * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. + * - `editable` (_boolean_): Whether this field can be edited. + * - `comment` (_string_): A comment for this field, or `null` if there isn't one. + * - `fieldSearch` (_string_): A search query fragment for this field. + * - `lineage` (_string_): The lineage of the data model object on which this field + * is defined, items are delimited by a dot. This is converted into an array of + * strings upon construction. + * + * @method splunkjs.Service.DataModelField + */init:function(props){cov_1ks4ntaci2().f[263]++;cov_1ks4ntaci2().s[824]++;props=(cov_1ks4ntaci2().b[226][0]++,props)||(cov_1ks4ntaci2().b[226][1]++,{});cov_1ks4ntaci2().s[825]++;props.owner=(cov_1ks4ntaci2().b[227][0]++,props.owner)||(cov_1ks4ntaci2().b[227][1]++,"");cov_1ks4ntaci2().s[826]++;this.name=props.fieldName;cov_1ks4ntaci2().s[827]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[828]++;this.type=props.type;cov_1ks4ntaci2().s[829]++;this.multivalued=props.multivalue;cov_1ks4ntaci2().s[830]++;this.required=props.required;cov_1ks4ntaci2().s[831]++;this.hidden=props.hidden;cov_1ks4ntaci2().s[832]++;this.editable=props.editable;cov_1ks4ntaci2().s[833]++;this.comment=(cov_1ks4ntaci2().b[228][0]++,props.comment)||(cov_1ks4ntaci2().b[228][1]++,null);cov_1ks4ntaci2().s[834]++;this.fieldSearch=props.fieldSearch;cov_1ks4ntaci2().s[835]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[836]++;this.owner=this.lineage[this.lineage.length-1];},/** + * Is this data model field of type string? + * + * @return {Boolean} True if this data model field is of type string. + * + * @method splunkjs.Service.DataModelField + */isString:function(){cov_1ks4ntaci2().f[264]++;cov_1ks4ntaci2().s[837]++;return"string"===this.type;},/** + * Is this data model field of type number? + * + * @return {Boolean} True if this data model field is of type number. + * + * @method splunkjs.Service.DataModelField + */isNumber:function(){cov_1ks4ntaci2().f[265]++;cov_1ks4ntaci2().s[838]++;return"number"===this.type;},/** + * Is this data model field of type timestamp? + * + * @return {Boolean} True if this data model field is of type timestamp. + * + * @method splunkjs.Service.DataModelField + */isTimestamp:function(){cov_1ks4ntaci2().f[266]++;cov_1ks4ntaci2().s[839]++;return"timestamp"===this.type;},/** + * Is this data model field of type object count? + * + * @return {Boolean} True if this data model field is of type object count. + * + * @method splunkjs.Service.DataModelField + */isObjectcount:function(){cov_1ks4ntaci2().f[267]++;cov_1ks4ntaci2().s[840]++;return"objectCount"===this.type;},/** + * Is this data model field of type child count? + * + * @return {Boolean} True if this data model field is of type child count. + * + * @method splunkjs.Service.DataModelField + */isChildcount:function(){cov_1ks4ntaci2().f[268]++;cov_1ks4ntaci2().s[841]++;return"childCount"===this.type;},/** + * Is this data model field of type ipv4? + * + * @return {Boolean} True if this data model field is of type ipv4. + * + * @method splunkjs.Service.DataModelField + */isIPv4:function(){cov_1ks4ntaci2().f[269]++;cov_1ks4ntaci2().s[842]++;return"ipv4"===this.type;},/** + * Is this data model field of type boolean? + * + * @return {Boolean} True if this data model field is of type boolean. + * + * @method splunkjs.Service.DataModelField + */isBoolean:function(){cov_1ks4ntaci2().f[270]++;cov_1ks4ntaci2().s[843]++;return"boolean"===this.type;}});/** + * Represents a constraint on a `DataModelObject` or a `DataModelField`. + * + * Has these properties: + * - `query` (_string_): The search query defining this data model constraint. + * - `lineage` (_array_): The lineage of this data model constraint. + * - `owner` (_string_): The name of the data model object that owns + * this data model constraint. + * + * @class splunkjs.Service.DataModelConstraint + */cov_1ks4ntaci2().s[844]++;root.DataModelConstraint=Class.extend({/** + * Constructor for a data model constraint. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `search` (_string_): The Splunk search query this constraint specifies. + * - `owner` (_string_): The lineage of the data model object that owns this + * constraint, items are delimited by a dot. This is converted into + * an array of strings upon construction. + * + * @method splunkjs.Service.DataModelConstraint + */init:function(props){cov_1ks4ntaci2().f[271]++;cov_1ks4ntaci2().s[845]++;props=(cov_1ks4ntaci2().b[229][0]++,props)||(cov_1ks4ntaci2().b[229][1]++,{});cov_1ks4ntaci2().s[846]++;props.owner=(cov_1ks4ntaci2().b[230][0]++,props.owner)||(cov_1ks4ntaci2().b[230][1]++,"");cov_1ks4ntaci2().s[847]++;this.query=props.search;cov_1ks4ntaci2().s[848]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[849]++;this.owner=this.lineage[this.lineage.length-1];}});/** + * Used for specifying a calculation on a `DataModelObject`. + * + * Has these properties: + * - `id` (_string_): The ID for this data model calculation. + * - `type` (_string_): The type of this data model calculation. + * - `comment` (_string_|_null_): The comment for this data model calculation, or `null`. + * - `editable` (_boolean_): True if this calculation can be edited, false otherwise. + * - `lineage` (_array_): The lineage of the data model object on which this calculation + * is defined in an array of strings. + * - `owner` (_string_): The data model that this calculation belongs to. + * - `outputFields` (_array_): The fields output by this calculation. + * + * The Rex and Eval types have an additional property: + * - `expression` (_string_): The expression to use for this calculation. + * + * The Rex and GeoIP types have an additional property: + * - `inputField` (_string_): The field to use for calculation. + * + * The Lookup type has additional properties: + * - `lookupName` (_string_): The name of the lookup to perform. + * - `inputFieldMappings` (_object_): The mappings from fields in the events to fields in the lookup. + * + * Valid types of calculations are: + * - `Lookup` + * - `Eval` + * - `GeoIP` + * - `Rex` + * + * @class splunkjs.Service.DataModelCalculation + */cov_1ks4ntaci2().s[850]++;root.DataModelCalculation=Class.extend({_types:["Lookup","Eval","GeoIP","Rex"],/** + * Constructor for a data model calculation. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `calculationID` (_string_): The ID of this calculation. + * - `calculationType` (_string_): The type of this calculation, see class docs for valid types. + * - `editable` (_boolean_): Whether this calculation can be edited. + * - `comment` (_string_): A comment for this calculation, or `null` if there isn't one. + * - `owner` (_string_): The lineage of the data model object on which this calculation + * is defined, items are delimited by a dot. This is converted into an array of + * strings upon construction. + * - `outputFields` (_array_): An array of the fields this calculation generates. + * - `expression` (_string_): The expression to use for this calculation; exclusive to `Eval` and `Rex` calculations (optional) + * - `inputField` (_string_): The field to use for calculation; exclusive to `GeoIP` and `Rex` calculations (optional) + * - `lookupName` (_string_): The name of the lookup to perform; exclusive to `Lookup` calculations (optional) + * - `inputFieldMappings` (_array_): One element array containing an object with the mappings from fields in the events to fields + * in the lookup; exclusive to `Lookup` calculations (optional) + * + * @method splunkjs.Service.DataModelCalculation + */init:function(props){cov_1ks4ntaci2().f[272]++;cov_1ks4ntaci2().s[851]++;props=(cov_1ks4ntaci2().b[231][0]++,props)||(cov_1ks4ntaci2().b[231][1]++,{});cov_1ks4ntaci2().s[852]++;props.owner=(cov_1ks4ntaci2().b[232][0]++,props.owner)||(cov_1ks4ntaci2().b[232][1]++,"");cov_1ks4ntaci2().s[853]++;this.id=props.calculationID;cov_1ks4ntaci2().s[854]++;this.type=props.calculationType;cov_1ks4ntaci2().s[855]++;this.comment=(cov_1ks4ntaci2().b[233][0]++,props.comment)||(cov_1ks4ntaci2().b[233][1]++,null);cov_1ks4ntaci2().s[856]++;this.editable=props.editable;cov_1ks4ntaci2().s[857]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[858]++;this.owner=this.lineage[this.lineage.length-1];cov_1ks4ntaci2().s[859]++;this.outputFields=[];cov_1ks4ntaci2().s[860]++;for(var i=(cov_1ks4ntaci2().s[861]++,0);iSearch job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call when done creating the search job: `(err, job)`. + * @method splunkjs.Service.Pivot + */run:function(args,callback){cov_1ks4ntaci2().f[280]++;cov_1ks4ntaci2().s[884]++;if(utils.isUndefined(callback)){cov_1ks4ntaci2().b[240][0]++;cov_1ks4ntaci2().s[885]++;callback=args;cov_1ks4ntaci2().s[886]++;args={};}else{cov_1ks4ntaci2().b[240][1]++;}cov_1ks4ntaci2().s[887]++;if((cov_1ks4ntaci2().b[242][0]++,!args)||(cov_1ks4ntaci2().b[242][1]++,Object.keys(args).length===0)){cov_1ks4ntaci2().b[241][0]++;cov_1ks4ntaci2().s[888]++;args={};}else{cov_1ks4ntaci2().b[241][1]++;}// If tstats is undefined, use pivotSearch (try to run an accelerated search if possible) +cov_1ks4ntaci2().s[889]++;this.service.search((cov_1ks4ntaci2().b[243][0]++,this.tstatsSearch)||(cov_1ks4ntaci2().b[243][1]++,this.pivotSearch),args,callback);}});/** + * PivotSpecification represents a pivot to be done on a particular data model object. + * The user creates a PivotSpecification on some data model object, adds filters, row splits, + * column splits, and cell values, then calls the pivot method to query splunkd and + * get a set of SPL queries corresponding to this specification. + * + * Call the `pivot` method to query Splunk for SPL queries corresponding to this pivot. + * + * This class supports a fluent API, each function except `init`, `toJsonObject` & `pivot` + * return the modified `splunkjs.Service.PivotSpecification` instance. + * + * @example + * service.dataModels().fetch(function(err, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpecification = searches.createPivotSpecification(); + * pivotSpecification + * .addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .pivot(function(err, pivot) { + * console.log("Got a Pivot object from the Splunk server!"); + * }); + * }); + * + * Has these properties: + * - `dataModelObject` (_splunkjs.Service.DataModelObject_): The `DataModelObject` from which + * this `PivotSpecification` was created. + * - `columns` (_array_): The column splits on this `PivotSpecification`. + * - `rows` (_array_): The row splits on this `PivotSpecification`. + * - `filters` (_array_): The filters on this `PivotSpecification`. + * - `cells` (_array_): The cell aggregations for this`PivotSpecification`. + * - `accelerationNamespace` (_string_|_null_): The name of the `DataModel` that owns the `DataModelObject` + * on which this `PivotSpecification` was created if the `DataModel` is accelerated. Alternatively, + * you can set this property manually to the sid of an acceleration job in the format `sid=`. + * + * Valid comparison types are: + * - `boolean` + * - `string` + * - `number` + * - `ipv4` + * + * Valid boolean comparisons are: + * - `=` + * - `is` + * - `isNull` + * - `isNotNull` + * + * Valid string comparisons are: + * - `=` + * - `is` + * - `isNull` + * - `isNotNull` + * - `contains` + * - `doesNotContain` + * - `startsWith` + * - `endsWith` + * - `regex` + * + * Valid number comparisons are: + * - `=` + * - `!=` + * - `<` + * - `>` + * - `<=` + * - `>=` + * - `is` + * - `isNull` + * - `isNotNull` + * + * Valid ipv4 comparisons are: + * - `is` + * - `isNull` + * - `isNotNull` + * - `contains` + * - `doesNotContain` + * - `startsWith` + * + * Valid binning values are: + * - `auto` + * - `year` + * - `month` + * - `day` + * - `hour` + * - `minute` + * - `second` + * + * Valid sort directions are: + * - `ASCENDING` + * - `DECENDING` + * - `DEFAULT` + * + * Valid stats functions are: + * - `list` + * - `values` + * - `first` + * - `last` + * - `count` + * - `dc` + * - `sum` + * - `average` + * - `max` + * - `min` + * - `stdev` + * - `duration` + * - `earliest` + * - `latest` + * + * @class splunkjs.Service.PivotSpecification + */cov_1ks4ntaci2().s[890]++;root.PivotSpecification=Class.extend({_comparisons:{boolean:["=","is","isNull","isNotNull"],string:["=","is","isNull","isNotNull","contains","doesNotContain","startsWith","endsWith","regex"],number:["=","!=","<",">","<=",">=","is","isNull","isNotNull"],ipv4:["is","isNull","isNotNull","contains","doesNotContain","startsWith"]},_binning:["auto","year","month","day","hour","minute","second"],_sortDirection:["ASCENDING","DESCENDING","DEFAULT"],_statsFunctions:["list","values","first","last","count","dc","sum","average","max","min","stdev","duration","earliest","latest"],/** + * Constructor for a pivot specification. + * + * @constructor + * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. + * + * @method splunkjs.Service.PivotSpecification + */init:function(dataModelObject){cov_1ks4ntaci2().f[281]++;cov_1ks4ntaci2().s[891]++;this.dataModelObject=dataModelObject;cov_1ks4ntaci2().s[892]++;this.columns=[];cov_1ks4ntaci2().s[893]++;this.rows=[];cov_1ks4ntaci2().s[894]++;this.filters=[];cov_1ks4ntaci2().s[895]++;this.cells=[];cov_1ks4ntaci2().s[896]++;this.accelerationNamespace=dataModelObject.dataModel.isAccelerated()?(cov_1ks4ntaci2().b[244][0]++,dataModelObject.dataModel.name):(cov_1ks4ntaci2().b[244][1]++,null);cov_1ks4ntaci2().s[897]++;this.run=utils.bind(this,this.run);cov_1ks4ntaci2().s[898]++;this.pivot=utils.bind(this,this.pivot);},/** + * Set the acceleration cache for this pivot specification to a job, + * usually generated by createLocalAccelerationJob on a DataModelObject + * instance, as the acceleration cache for this pivot specification. + * + * @param {String|splunkjs.Service.Job} sid The sid of an acceleration job, + * or, a `splunkjs.Service.Job` instance. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */setAccelerationJob:function(sid){cov_1ks4ntaci2().f[282]++;cov_1ks4ntaci2().s[899]++;// If a search object is passed in, get its sid +if((cov_1ks4ntaci2().b[246][0]++,sid)&&(cov_1ks4ntaci2().b[246][1]++,sid instanceof Service.Job)){cov_1ks4ntaci2().b[245][0]++;cov_1ks4ntaci2().s[900]++;sid=sid.sid;}else{cov_1ks4ntaci2().b[245][1]++;}cov_1ks4ntaci2().s[901]++;if(!sid){cov_1ks4ntaci2().b[247][0]++;cov_1ks4ntaci2().s[902]++;throw new Error("Sid to use for acceleration must not be null.");}else{cov_1ks4ntaci2().b[247][1]++;}cov_1ks4ntaci2().s[903]++;this.accelerationNamespace="sid="+sid;cov_1ks4ntaci2().s[904]++;return this;},/** + * Add a filter on a boolean valued field. The filter will be a constraint of the form + * `field `comparison` compareTo`, for example: `is_remote = false`. + * + * @param {String} fieldName The name of field to filter on + * @param {String} comparisonType The type of comparison, see class docs for valid types. + * @param {String} comparisonOp The comparison, see class docs for valid comparisons, based on type. + * @param {String} compareTo The value to compare the field to. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addFilter:function(fieldName,comparisonType,comparisonOp,compareTo){cov_1ks4ntaci2().f[283]++;cov_1ks4ntaci2().s[905]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[248][0]++;cov_1ks4ntaci2().s[906]++;throw new Error("Cannot add filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[248][1]++;}cov_1ks4ntaci2().s[907]++;if(comparisonType!==this.dataModelObject.fieldByName(fieldName).type){cov_1ks4ntaci2().b[249][0]++;cov_1ks4ntaci2().s[908]++;throw new Error("Cannot add "+comparisonType+" filter on "+fieldName+" because it is of type "+this.dataModelObject.fieldByName(fieldName).type);}else{cov_1ks4ntaci2().b[249][1]++;}cov_1ks4ntaci2().s[909]++;if(!utils.contains(this._comparisons[comparisonType],comparisonOp)){cov_1ks4ntaci2().b[250][0]++;cov_1ks4ntaci2().s[910]++;throw new Error("Cannot add "+comparisonType+" filter because "+comparisonOp+" is not a valid comparison operator");}else{cov_1ks4ntaci2().b[250][1]++;}var ret=(cov_1ks4ntaci2().s[911]++,{fieldName:fieldName,owner:this.dataModelObject.fieldByName(fieldName).lineage.join("."),type:comparisonType});// These fields are type dependent +cov_1ks4ntaci2().s[912]++;if(utils.contains(["boolean","string","ipv4","number"],ret.type)){cov_1ks4ntaci2().b[251][0]++;cov_1ks4ntaci2().s[913]++;ret.rule={comparator:comparisonOp,compareTo:compareTo};}else{cov_1ks4ntaci2().b[251][1]++;}cov_1ks4ntaci2().s[914]++;this.filters.push(ret);cov_1ks4ntaci2().s[915]++;return this;},/** + * Add a limit on the events shown in a pivot by sorting them according to some field, then taking + * the specified number from the beginning or end of the list. + * + * @param {String} fieldName The name of field to filter on. + * @param {String} sortAttribute The name of the field to use for sorting. + * @param {String} sortDirection The direction to sort events, see class docs for valid types. + * @param {String} limit The number of values from the sorted list to allow through this filter. + * @param {String} statsFunction The stats function to use for aggregation before sorting, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addLimitFilter:function(fieldName,sortAttribute,sortDirection,limit,statsFunction){cov_1ks4ntaci2().f[284]++;cov_1ks4ntaci2().s[916]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[252][0]++;cov_1ks4ntaci2().s[917]++;throw new Error("Cannot add limit filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[252][1]++;}var f=(cov_1ks4ntaci2().s[918]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[919]++;if(!utils.contains(["string","number","objectCount"],f.type)){cov_1ks4ntaci2().b[253][0]++;cov_1ks4ntaci2().s[920]++;throw new Error("Cannot add limit filter on "+fieldName+" because it is of type "+f.type);}else{cov_1ks4ntaci2().b[253][1]++;}cov_1ks4ntaci2().s[921]++;if((cov_1ks4ntaci2().b[255][0]++,"string"===f.type)&&(cov_1ks4ntaci2().b[255][1]++,!utils.contains(["count","dc"],statsFunction))){cov_1ks4ntaci2().b[254][0]++;cov_1ks4ntaci2().s[922]++;throw new Error("Stats function for fields of type string must be COUNT or DISTINCT_COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[254][1]++;}cov_1ks4ntaci2().s[923]++;if((cov_1ks4ntaci2().b[257][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[257][1]++,!utils.contains(["count","dc","average","sum"],statsFunction))){cov_1ks4ntaci2().b[256][0]++;cov_1ks4ntaci2().s[924]++;throw new Error("Stats function for fields of type number must be one of COUNT, DISTINCT_COUNT, SUM, or AVERAGE; found "+statsFunction);}else{cov_1ks4ntaci2().b[256][1]++;}cov_1ks4ntaci2().s[925]++;if((cov_1ks4ntaci2().b[259][0]++,"objectCount"===f.type)&&(cov_1ks4ntaci2().b[259][1]++,!utils.contains(["count"],statsFunction))){cov_1ks4ntaci2().b[258][0]++;cov_1ks4ntaci2().s[926]++;throw new Error("Stats function for fields of type object count must be COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[258][1]++;}var filter=(cov_1ks4ntaci2().s[927]++,{fieldName:fieldName,owner:f.lineage.join("."),type:f.type,attributeName:sortAttribute,attributeOwner:this.dataModelObject.fieldByName(sortAttribute).lineage.join("."),sortDirection:sortDirection,limitAmount:limit,statsFn:statsFunction});// Assumed "highest" is preferred for when sortDirection is "DEFAULT" +cov_1ks4ntaci2().s[928]++;filter.limitType="ASCENDING"===sortDirection?(cov_1ks4ntaci2().b[260][0]++,"lowest"):(cov_1ks4ntaci2().b[260][1]++,"highest");cov_1ks4ntaci2().s[929]++;this.filters.push(filter);cov_1ks4ntaci2().s[930]++;return this;},/** + * Add a row split on a numeric or string valued field, splitting on each distinct value of the field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRowSplit:function(fieldName,label){cov_1ks4ntaci2().f[285]++;cov_1ks4ntaci2().s[931]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[261][0]++;cov_1ks4ntaci2().s[932]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[261][1]++;}var f=(cov_1ks4ntaci2().s[933]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[934]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[262][0]++;cov_1ks4ntaci2().s[935]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[262][1]++;}var row=(cov_1ks4ntaci2().s[936]++,{fieldName:fieldName,owner:f.owner,type:f.type,label:label});cov_1ks4ntaci2().s[937]++;if("number"===f.type){cov_1ks4ntaci2().b[263][0]++;cov_1ks4ntaci2().s[938]++;row.display="all";}else{cov_1ks4ntaci2().b[263][1]++;}cov_1ks4ntaci2().s[939]++;this.rows.push(row);cov_1ks4ntaci2().s[940]++;return this;},/** + * Add a row split on a numeric field, splitting into numeric ranges. + * + * This split generates bins with edges equivalent to the + * classic loop 'for i in to by ' but with a maximum + * number of bins . This dispatches to the stats and xyseries search commands. + * See their documentation for more details. + * + * @param {String} fieldName The field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. + * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. + * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. + * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRangeRowSplit:function(field,label,ranges){cov_1ks4ntaci2().f[286]++;cov_1ks4ntaci2().s[941]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[264][0]++;cov_1ks4ntaci2().s[942]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[264][1]++;}var f=(cov_1ks4ntaci2().s[943]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[944]++;if("number"!==f.type){cov_1ks4ntaci2().b[265][0]++;cov_1ks4ntaci2().s[945]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[265][1]++;}var updateRanges=(cov_1ks4ntaci2().s[946]++,{});cov_1ks4ntaci2().s[947]++;if((cov_1ks4ntaci2().b[267][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[267][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[266][0]++;cov_1ks4ntaci2().s[948]++;updateRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[266][1]++;}cov_1ks4ntaci2().s[949]++;if((cov_1ks4ntaci2().b[269][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[269][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[268][0]++;cov_1ks4ntaci2().s[950]++;updateRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[268][1]++;}cov_1ks4ntaci2().s[951]++;if((cov_1ks4ntaci2().b[271][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[271][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[270][0]++;cov_1ks4ntaci2().s[952]++;updateRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[270][1]++;}cov_1ks4ntaci2().s[953]++;if((cov_1ks4ntaci2().b[273][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[273][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[272][0]++;cov_1ks4ntaci2().s[954]++;updateRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[272][1]++;}cov_1ks4ntaci2().s[955]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,display:"ranges",ranges:updateRanges});cov_1ks4ntaci2().s[956]++;return this;},/** + * Add a row split on a boolean valued field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {String} trueDisplayValue A string to display in the true valued row label. + * @param {String} falseDisplayValue A string to display in the false valued row label. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addBooleanRowSplit:function(field,label,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[287]++;cov_1ks4ntaci2().s[957]++;if(!this.dataModelObject.fieldByName(field)){cov_1ks4ntaci2().b[274][0]++;cov_1ks4ntaci2().s[958]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[274][1]++;}var f=(cov_1ks4ntaci2().s[959]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[960]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[275][0]++;cov_1ks4ntaci2().s[961]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[275][1]++;}cov_1ks4ntaci2().s[962]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[963]++;return this;},/** + * Add a row split on a timestamp valued field, binned by the specified bucket size. + * + * @param {String} fieldName The name of field to split on. + * @param {String} label A human readable name for this set of rows. + * @param {String} binning The size of bins to use, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addTimestampRowSplit:function(field,label,binning){cov_1ks4ntaci2().f[288]++;cov_1ks4ntaci2().s[964]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[276][0]++;cov_1ks4ntaci2().s[965]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[276][1]++;}var f=(cov_1ks4ntaci2().s[966]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[967]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[277][0]++;cov_1ks4ntaci2().s[968]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[277][1]++;}cov_1ks4ntaci2().s[969]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[278][0]++;cov_1ks4ntaci2().s[970]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[278][1]++;}cov_1ks4ntaci2().s[971]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,period:binning});cov_1ks4ntaci2().s[972]++;return this;},/** + * Add a column split on a string or number valued field, producing a column for + * each distinct value of the field. + * + * @param {String} fieldName The name of field to split on. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addColumnSplit:function(fieldName){cov_1ks4ntaci2().f[289]++;cov_1ks4ntaci2().s[973]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[279][0]++;cov_1ks4ntaci2().s[974]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[279][1]++;}var f=(cov_1ks4ntaci2().s[975]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[976]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[280][0]++;cov_1ks4ntaci2().s[977]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[280][1]++;}var col=(cov_1ks4ntaci2().s[978]++,{fieldName:fieldName,owner:f.owner,type:f.type});cov_1ks4ntaci2().s[979]++;if("number"===f.type){cov_1ks4ntaci2().b[281][0]++;cov_1ks4ntaci2().s[980]++;col.display="all";}else{cov_1ks4ntaci2().b[281][1]++;}cov_1ks4ntaci2().s[981]++;this.columns.push(col);cov_1ks4ntaci2().s[982]++;return this;},/** + * Add a column split on a numeric field, splitting the values into ranges. + * + * @param {String} fieldName The field to split on. + * @param {Object} options An optional dictionary of collection filtering and pagination options: + * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. + * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. + * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. + * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addRangeColumnSplit:function(fieldName,ranges){cov_1ks4ntaci2().f[290]++;cov_1ks4ntaci2().s[983]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[282][0]++;cov_1ks4ntaci2().s[984]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[282][1]++;}var f=(cov_1ks4ntaci2().s[985]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[986]++;if("number"!==f.type){cov_1ks4ntaci2().b[283][0]++;cov_1ks4ntaci2().s[987]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[283][1]++;}// In Splunk 6.0.1.1, data models incorrectly expect strings for these fields +// instead of numbers. In 6.1, this is fixed and both are accepted. +var updatedRanges=(cov_1ks4ntaci2().s[988]++,{});cov_1ks4ntaci2().s[989]++;if((cov_1ks4ntaci2().b[285][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[285][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[284][0]++;cov_1ks4ntaci2().s[990]++;updatedRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[284][1]++;}cov_1ks4ntaci2().s[991]++;if((cov_1ks4ntaci2().b[287][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[287][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[286][0]++;cov_1ks4ntaci2().s[992]++;updatedRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[286][1]++;}cov_1ks4ntaci2().s[993]++;if((cov_1ks4ntaci2().b[289][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[289][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[288][0]++;cov_1ks4ntaci2().s[994]++;updatedRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[288][1]++;}cov_1ks4ntaci2().s[995]++;if((cov_1ks4ntaci2().b[291][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[291][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[290][0]++;cov_1ks4ntaci2().s[996]++;updatedRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[290][1]++;}cov_1ks4ntaci2().s[997]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,display:"ranges",ranges:updatedRanges});cov_1ks4ntaci2().s[998]++;return this;},/** + * Add a column split on a boolean valued field. + * + * @param {String} fieldName The name of field to split on. + * @param {String} trueDisplayValue A string to display in the true valued column label. + * @param {String} falseDisplayValue A string to display in the false valued column label. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addBooleanColumnSplit:function(fieldName,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[291]++;cov_1ks4ntaci2().s[999]++;if(!this.dataModelObject.fieldByName(fieldName)){cov_1ks4ntaci2().b[292][0]++;cov_1ks4ntaci2().s[1000]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[292][1]++;}var f=(cov_1ks4ntaci2().s[1001]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1002]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[293][0]++;cov_1ks4ntaci2().s[1003]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[293][1]++;}cov_1ks4ntaci2().s[1004]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[1005]++;return this;},/** + * Add a column split on a timestamp valued field, binned by the specified bucket size. + * + * @param {String} fieldName The name of field to split on. + * @param {String} binning The size of bins to use, see class docs for valid types. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addTimestampColumnSplit:function(field,binning){cov_1ks4ntaci2().f[292]++;cov_1ks4ntaci2().s[1006]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[294][0]++;cov_1ks4ntaci2().s[1007]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[294][1]++;}var f=(cov_1ks4ntaci2().s[1008]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[1009]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[295][0]++;cov_1ks4ntaci2().s[1010]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[295][1]++;}cov_1ks4ntaci2().s[1011]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[296][0]++;cov_1ks4ntaci2().s[1012]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[296][1]++;}cov_1ks4ntaci2().s[1013]++;this.columns.push({fieldName:field,owner:f.owner,type:f.type,period:binning});cov_1ks4ntaci2().s[1014]++;return this;},/** + * Add an aggregate to each cell of the pivot. + * + * @param {String} fieldName The name of field to aggregate. + * @param {String} label a human readable name for this aggregate. + * @param {String} statsFunction The function to use for aggregation, see class docs for valid stats functions. + * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */addCellValue:function(fieldName,label,statsFunction){cov_1ks4ntaci2().f[293]++;cov_1ks4ntaci2().s[1015]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[297][0]++;cov_1ks4ntaci2().s[1016]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[297][1]++;}var f=(cov_1ks4ntaci2().s[1017]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1018]++;if((cov_1ks4ntaci2().b[299][0]++,utils.contains(["string","ipv4"],f.type))&&(cov_1ks4ntaci2().b[299][1]++,!utils.contains(["list","values","first","last","count","dc"],statsFunction))){cov_1ks4ntaci2().b[298][0]++;cov_1ks4ntaci2().s[1019]++;throw new Error("Stats function on string and IPv4 fields must be one of:"+" list, distinct_values, first, last, count, or distinct_count; found "+statsFunction);}else{cov_1ks4ntaci2().b[298][1]++;cov_1ks4ntaci2().s[1020]++;if((cov_1ks4ntaci2().b[301][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[301][1]++,!utils.contains(["sum","count","average","min","max","stdev","list","values"],statsFunction))){cov_1ks4ntaci2().b[300][0]++;cov_1ks4ntaci2().s[1021]++;throw new Error("Stats function on number field must be must be one of:"+" sum, count, average, max, min, stdev, list, or distinct_values; found "+statsFunction);}else{cov_1ks4ntaci2().b[300][1]++;cov_1ks4ntaci2().s[1022]++;if((cov_1ks4ntaci2().b[303][0]++,"timestamp"===f.type)&&(cov_1ks4ntaci2().b[303][1]++,!utils.contains(["duration","earliest","latest","list","values"],statsFunction))){cov_1ks4ntaci2().b[302][0]++;cov_1ks4ntaci2().s[1023]++;throw new Error("Stats function on timestamp field must be one of:"+" duration, earliest, latest, list, or distinct values; found "+statsFunction);}else{cov_1ks4ntaci2().b[302][1]++;cov_1ks4ntaci2().s[1024]++;if((cov_1ks4ntaci2().b[305][0]++,utils.contains(["objectCount","childCount"],f.type))&&(cov_1ks4ntaci2().b[305][1]++,"count"!==statsFunction)){cov_1ks4ntaci2().b[304][0]++;cov_1ks4ntaci2().s[1025]++;throw new Error("Stats function on childcount and objectcount fields must be count; "+"found "+statsFunction);}else{cov_1ks4ntaci2().b[304][1]++;cov_1ks4ntaci2().s[1026]++;if("boolean"===f.type){cov_1ks4ntaci2().b[306][0]++;cov_1ks4ntaci2().s[1027]++;throw new Error("Cannot use boolean valued fields as cell values.");}else{cov_1ks4ntaci2().b[306][1]++;}}}}}cov_1ks4ntaci2().s[1028]++;this.cells.push({fieldName:fieldName,owner:f.lineage.join("."),type:f.type,label:label,sparkline:false,// Not properly implemented in core yet. +value:statsFunction});cov_1ks4ntaci2().s[1029]++;return this;},/** + * Returns a JSON ready object representation of this pivot specification. + * + * @return {Object} The JSON ready object representation of this pivot specification. + * + * @method splunkjs.Service.PivotSpecification + */toJsonObject:function(){cov_1ks4ntaci2().f[294]++;cov_1ks4ntaci2().s[1030]++;return{dataModel:this.dataModelObject.dataModel.name,baseClass:this.dataModelObject.name,rows:this.rows,columns:this.columns,cells:this.cells,filters:this.filters};},/** + * Query Splunk for SPL queries corresponding to a pivot report + * for this data model, defined by this `PivotSpecification`. + * + * @example + * + * service.dataModels().fetch(function(err, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpec = searches.createPivotSpecification(); + * // Use of the fluent API + * pivotSpec.addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .pivot(function(pivotErr, pivot) { + * console.log("Pivot search is:", pivot.search); + * }); + * }); + * + * @param {Function} callback A function to call when done getting the pivot: `(err, pivot)`. + * + * @method splunkjs.Service.PivotSpecification + */pivot:function(callback){cov_1ks4ntaci2().f[295]++;var svc=(cov_1ks4ntaci2().s[1031]++,this.dataModelObject.dataModel.service);var args=(cov_1ks4ntaci2().s[1032]++,{pivot_json:JSON.stringify(this.toJsonObject())});cov_1ks4ntaci2().s[1033]++;if(!utils.isUndefined(this.accelerationNamespace)){cov_1ks4ntaci2().b[307][0]++;cov_1ks4ntaci2().s[1034]++;args.namespace=this.accelerationNamespace;}else{cov_1ks4ntaci2().b[307][1]++;}cov_1ks4ntaci2().s[1035]++;return svc.get(Paths.pivot+"/"+encodeURIComponent(this.dataModelObject.dataModel.name),args,function(err,response){cov_1ks4ntaci2().f[296]++;cov_1ks4ntaci2().s[1036]++;if(err){cov_1ks4ntaci2().b[308][0]++;cov_1ks4ntaci2().s[1037]++;callback(new Error(err.data.messages[0].text),response);cov_1ks4ntaci2().s[1038]++;return;}else{cov_1ks4ntaci2().b[308][1]++;}cov_1ks4ntaci2().s[1039]++;if((cov_1ks4ntaci2().b[310][0]++,response.data.entry)&&(cov_1ks4ntaci2().b[310][1]++,response.data.entry[0])){cov_1ks4ntaci2().b[309][0]++;cov_1ks4ntaci2().s[1040]++;callback(null,new root.Pivot(svc,response.data.entry[0].content));}else{cov_1ks4ntaci2().b[309][1]++;cov_1ks4ntaci2().s[1041]++;callback(new Error("Didn't get a Pivot report back from Splunk"),response);}});},/** + * Convenience method to wrap up the `PivotSpecification.pivot()` and + * `Pivot.run()` function calls. + * + * Query Splunk for SPL queries corresponding to a pivot report + * for this data model, defined by this `PivotSpecification`; then, + * starts a search job running this pivot, accelerated if possible. + * + * service.dataModels().fetch(function(fetchErr, dataModels) { + * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); + * var pivotSpec = searches.createPivotSpecification(); + * // Use of the fluent API + * pivotSpec.addRowSplit("user", "Executing user") + * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) + * .addCellValue("search", "Search Query", "values") + * .run(function(err, job, pivot) { + * console.log("Job SID is:", job.sid); + * console.log("Pivot search is:", pivot.search); + * }); + * }); + * @param {Object} args A dictionary of properties for the search job (optional). For a list of available parameters, see Search job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {Function} callback A function to call when done getting the pivot: `(err, job, pivot)`. + * + * @method splunkjs.Service.PivotSpecification + */run:function(args,callback){cov_1ks4ntaci2().f[297]++;cov_1ks4ntaci2().s[1042]++;if(!callback){cov_1ks4ntaci2().b[311][0]++;cov_1ks4ntaci2().s[1043]++;callback=args;cov_1ks4ntaci2().s[1044]++;args={};}else{cov_1ks4ntaci2().b[311][1]++;}cov_1ks4ntaci2().s[1045]++;args=(cov_1ks4ntaci2().b[312][0]++,args)||(cov_1ks4ntaci2().b[312][1]++,{});cov_1ks4ntaci2().s[1046]++;this.pivot(function(err,pivot){cov_1ks4ntaci2().f[298]++;cov_1ks4ntaci2().s[1047]++;if(err){cov_1ks4ntaci2().b[313][0]++;cov_1ks4ntaci2().s[1048]++;callback(err,null,null);}else{cov_1ks4ntaci2().b[313][1]++;cov_1ks4ntaci2().s[1049]++;pivot.run(args,Async.augment(callback,pivot));}});}});/** + * Represents one of the structured views in a `DataModel`. + * + * Has these properties: + * - `dataModel` (_splunkjs.Service.DataModel_): The `DataModel` to which this `DataModelObject` belongs. + * - `name` (_string_): The name of this `DataModelObject`. + * - `displayName` (_string_): The human readable name of this `DataModelObject`. + * - `parentName` (_string_): The name of the parent `DataModelObject` to this one. + * - `lineage` (_array_): An array of strings of the lineage of the data model + * on which this field is defined. + * - `fields` (_object_): A dictionary of `DataModelField` objects, accessible by name. + * - `constraints` (_array_): An array of `DataModelConstraint` objects. + * - `calculations` (_object_): A dictionary of `DataModelCalculation` objects, accessible by ID. + * + * BaseSearch has an additional property: + * - `baseSearch` (_string_): The search query wrapped by this data model object. + * + * BaseTransaction has additional properties: + * - `groupByFields` (_string_): The fields that will be used to group events into transactions. + * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned + * and split into transactions. + * - `maxSpan` (_string_): The maximum time span of a transaction. + * - `maxPause` (_string_): The maximum pause time of a transaction. + * + * @class splunkjs.Service.DataModelObject + */cov_1ks4ntaci2().s[1050]++;root.DataModelObject=Class.extend({/** + * Constructor for a data model object. + * SDK users are not expected to invoke this constructor directly. + * + * @constructor + * @param {Object} props A dictionary of properties to set: + * - `objectName` (_string_): The name for this data model object. + * - `displayName` (_string_): A human readable name for this data model object. + * - `parentName` (_string_): The name of the data model that owns this data model object. + * - `lineage` (_string_): The lineage of the data model that owns this data model object, + * items are delimited by a dot. This is converted into an array of + * strings upon construction. + * - `fields` (_array_): An array of data model fields. + * - `constraints` (_array_): An array of data model constraints. + * - `calculations` (_array_): An array of data model calculations. + * - `baseSearch` (_string_): The search query wrapped by this data model object; exclusive to BaseSearch (optional) + * - `groupByFields` (_array_): The fields that will be used to group events into transactions; exclusive to BaseTransaction (optional) + * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned + * and split into transactions; exclusive to BaseTransaction (optional) + * - `maxSpan` (_string_): The maximum time span of a transaction; exclusive to BaseTransaction (optional) + * - `maxPause` (_string_): The maximum pause time of a transaction; exclusive to BaseTransaction (optional) + * + * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. + * + * @method splunkjs.Service.DataModelObject + */init:function(props,parentDataModel){cov_1ks4ntaci2().f[299]++;cov_1ks4ntaci2().s[1051]++;props=(cov_1ks4ntaci2().b[314][0]++,props)||(cov_1ks4ntaci2().b[314][1]++,{});cov_1ks4ntaci2().s[1052]++;props.owner=(cov_1ks4ntaci2().b[315][0]++,props.owner)||(cov_1ks4ntaci2().b[315][1]++,"");cov_1ks4ntaci2().s[1053]++;this.dataModel=parentDataModel;cov_1ks4ntaci2().s[1054]++;this.name=props.objectName;cov_1ks4ntaci2().s[1055]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[1056]++;this.parentName=props.parentName;cov_1ks4ntaci2().s[1057]++;this.lineage=props.lineage.split(".");// Properties exclusive to BaseTransaction +cov_1ks4ntaci2().s[1058]++;if(props.hasOwnProperty("groupByFields")){cov_1ks4ntaci2().b[316][0]++;cov_1ks4ntaci2().s[1059]++;this.groupByFields=props.groupByFields;}else{cov_1ks4ntaci2().b[316][1]++;}cov_1ks4ntaci2().s[1060]++;if(props.hasOwnProperty("objectsToGroup")){cov_1ks4ntaci2().b[317][0]++;cov_1ks4ntaci2().s[1061]++;this.objectsToGroup=props.objectsToGroup;}else{cov_1ks4ntaci2().b[317][1]++;}cov_1ks4ntaci2().s[1062]++;if(props.hasOwnProperty("transactionMaxTimeSpan")){cov_1ks4ntaci2().b[318][0]++;cov_1ks4ntaci2().s[1063]++;this.maxSpan=props.transactionMaxTimeSpan;}else{cov_1ks4ntaci2().b[318][1]++;}cov_1ks4ntaci2().s[1064]++;if(props.hasOwnProperty("transactionMaxPause")){cov_1ks4ntaci2().b[319][0]++;cov_1ks4ntaci2().s[1065]++;this.maxPause=props.transactionMaxPause;}else{cov_1ks4ntaci2().b[319][1]++;}// Property exclusive to BaseSearch +cov_1ks4ntaci2().s[1066]++;if(props.hasOwnProperty("baseSearch")){cov_1ks4ntaci2().b[320][0]++;cov_1ks4ntaci2().s[1067]++;this.baseSearch=props.baseSearch;}else{cov_1ks4ntaci2().b[320][1]++;}// Parse fields +cov_1ks4ntaci2().s[1068]++;this.fields={};cov_1ks4ntaci2().s[1069]++;for(var i=(cov_1ks4ntaci2().s[1070]++,0);iSearch job parameters on Splunk Developer Portal. + * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. + * @param {String} querySuffix A search query, starting with a '|' that will be appended to the command to fetch the contents of this data model object (e.g., "| head 3"). + * @param {Function} callback A function to call with the search job: `(err, job)`. + * + * @method splunkjs.Service.DataModelObject + */startSearch:function(params,querySuffix,callback){cov_1ks4ntaci2().f[311]++;var query=(cov_1ks4ntaci2().s[1113]++,"| datamodel "+this.dataModel.name+" "+this.name+" search");// Prepend a space to the querySuffix, or set it to an empty string if null or undefined +cov_1ks4ntaci2().s[1114]++;querySuffix=querySuffix?(cov_1ks4ntaci2().b[327][0]++," "+querySuffix):(cov_1ks4ntaci2().b[327][1]++,"");cov_1ks4ntaci2().s[1115]++;this.dataModel.service.search(query+querySuffix,params,callback);},/** + * Returns the data model object this one inherits from if it is a user defined, + * otherwise return null. + * + * @return {splunkjs.Service.DataModelObject|null} This data model object's parent + * or null if this is not a user defined data model object. + * + * @method splunkjs.Service.DataModelObject + */parent:function(){cov_1ks4ntaci2().f[312]++;cov_1ks4ntaci2().s[1116]++;return this.dataModel.objectByName(this.parentName);},/** + * Returns a new Pivot Specification, accepts no parameters. + * + * @return {splunkjs.Service.PivotSpecification} A new pivot specification. + * + * @method splunkjs.Service.DataModelObject + */createPivotSpecification:function(){cov_1ks4ntaci2().f[313]++;cov_1ks4ntaci2().s[1117]++;// Pass in this DataModelObject to create a PivotSpecification +return new root.PivotSpecification(this);}});/** + * Represents a data model on the server. Data models + * contain `DataModelObject` instances, which specify structured + * views on Splunk data. + * + * @endpoint datamodel/model/{name} + * @class splunkjs.Service.DataModel + * @extends splunkjs.Service.Entity + */cov_1ks4ntaci2().s[1118]++;root.DataModel=Service.Entity.extend({/** + * Retrieves the REST endpoint path for this resource (with no namespace). + * + * @method splunkjs.Service.DataModel + */path:function(){cov_1ks4ntaci2().f[314]++;cov_1ks4ntaci2().s[1119]++;return Paths.dataModels+"/"+encodeURIComponent(this.name);},/** + * Constructor for `splunkjs.Service.DataModel`. + * + * @constructor + * @param {splunkjs.Service} service A `Service` instance. + * @param {String} name The name for the new data model. + * @param {Object} namespace (Optional) namespace information: + * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. + * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. + * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". + * @param {Object} props Properties of this data model: + * - `acceleration` (_string_): A JSON object with an `enabled` key, representing if acceleration is enabled or not. + * - `concise` (_string_): Indicates whether to list a concise JSON description of the data model, should always be "0". + * - `description` (_string_): The JSON describing the data model. + * - `displayName` (_string_): The name displayed for the data model in Splunk Web. + * + * @method splunkjs.Service.DataModel + */init:function(service,name,namespace,props){cov_1ks4ntaci2().f[315]++;cov_1ks4ntaci2().s[1120]++;// If not given a 4th arg, assume the namespace was omitted +if(!props){cov_1ks4ntaci2().b[328][0]++;cov_1ks4ntaci2().s[1121]++;props=namespace;cov_1ks4ntaci2().s[1122]++;namespace={};}else{cov_1ks4ntaci2().b[328][1]++;}cov_1ks4ntaci2().s[1123]++;this.name=name;cov_1ks4ntaci2().s[1124]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[1125]++;this.acceleration=(cov_1ks4ntaci2().b[329][0]++,JSON.parse(props.content.acceleration))||(cov_1ks4ntaci2().b[329][1]++,{});cov_1ks4ntaci2().s[1126]++;if(this.acceleration.hasOwnProperty("enabled")){cov_1ks4ntaci2().b[330][0]++;cov_1ks4ntaci2().s[1127]++;// convert the enabled property to a boolean +this.acceleration.enabled=!!this.acceleration.enabled;}else{cov_1ks4ntaci2().b[330][1]++;}// concise=0 (false) forces the server to return all details of the newly created data model. +// we do not want a summary of this data model +cov_1ks4ntaci2().s[1128]++;if((cov_1ks4ntaci2().b[332][0]++,!props.hasOwnProperty("concise"))||(cov_1ks4ntaci2().b[332][1]++,utils.isUndefined(props.concise))){cov_1ks4ntaci2().b[331][0]++;cov_1ks4ntaci2().s[1129]++;this.concise="0";}else{cov_1ks4ntaci2().b[331][1]++;}var dataModelDefinition=(cov_1ks4ntaci2().s[1130]++,JSON.parse(props.content.description));cov_1ks4ntaci2().s[1131]++;this.objectNames=dataModelDefinition.objectNameList;cov_1ks4ntaci2().s[1132]++;this.displayName=dataModelDefinition.displayName;cov_1ks4ntaci2().s[1133]++;this.description=dataModelDefinition.description;// Parse the objects for this data model +var objs=(cov_1ks4ntaci2().s[1134]++,dataModelDefinition.objects);cov_1ks4ntaci2().s[1135]++;this.objects=[];cov_1ks4ntaci2().s[1136]++;for(var i=(cov_1ks4ntaci2().s[1137]++,0);i0);}});}});})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UuanMiXSwibmFtZXMiOlsiQ29udGV4dCIsInJlcXVpcmUiLCJIdHRwIiwiQXN5bmMiLCJQYXRocyIsIkNsYXNzIiwidXRpbHMiLCJyb290IiwiZXhwb3J0cyIsIlNlcnZpY2UiLCJCYXNlU2VydmljZSIsImV4dGVuZCIsImluaXQiLCJfc3VwZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIm1vZHVsZSIsInNwZWNpYWxpemUiLCJiaW5kIiwiYXBwcyIsImNvbmZpZ3VyYXRpb25zIiwiaW5kZXhlcyIsInNhdmVkU2VhcmNoZXMiLCJqb2JzIiwidXNlcnMiLCJjdXJyZW50VXNlciIsInZpZXdzIiwiZmlyZWRBbGVydEdyb3VwcyIsImRhdGFNb2RlbHMiLCJvd25lciIsImFwcCIsImh0dHAiLCJzY2hlbWUiLCJob3N0IiwicG9ydCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzZXNzaW9uS2V5IiwidmVyc2lvbiIsIkFwcGxpY2F0aW9ucyIsIm5hbWVzcGFjZSIsIkNvbmZpZ3VyYXRpb25zIiwiSW5kZXhlcyIsIlNhdmVkU2VhcmNoZXMiLCJzdG9yYWdlUGFzc3dvcmRzIiwiU3RvcmFnZVBhc3N3b3JkcyIsIkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24iLCJKb2JzIiwiRGF0YU1vZGVscyIsIlVzZXJzIiwiVmlld3MiLCJzZWFyY2giLCJxdWVyeSIsInBhcmFtcyIsImNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsImdldEpvYiIsInNpZCIsImpvYiIsIkpvYiIsImZldGNoIiwib25lc2hvdFNlYXJjaCIsInRoYXQiLCJyZXEiLCJnZXQiLCJlcnIiLCJyZXNwb25zZSIsImRhdGEiLCJlbnRyeSIsImNvbnRlbnQiLCJ1c2VyIiwiVXNlciIsIndhc0Fib3J0ZWQiLCJzZXJ2ZXJJbmZvIiwiU2VydmVySW5mbyIsInBhcnNlIiwicSIsInBhcnNlciIsInR5cGVhaGVhZCIsInByZWZpeCIsImNvdW50IiwicmVzdWx0cyIsImxvZyIsImV2ZW50IiwiaXNPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwicGF0aCIsInBhdGhzIiwic3VibWl0RXZlbnQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsInBvc3QiLCJyZXF1ZXN0IiwiRW5kcG9pbnQiLCJzZXJ2aWNlIiwicXVhbGlmaWVkUGF0aCIsIkVycm9yIiwiZ2V0X3YyIiwiZGVsIiwicmVscGF0aCIsInVybCIsIlJlc291cmNlIiwiZnVsbHBhdGgiLCJfcHJvcGVydGllcyIsIl9zdGF0ZSIsIl9sb2FkIiwicHJvcGVydGllcyIsInN0YXRlIiwiRW50aXR5IiwiZmV0Y2hPblVwZGF0ZSIsInJlbW92ZSIsInVwZGF0ZSIsImZpZWxkcyIsImxpbmtzIiwiYWNsIiwiYXV0aG9yIiwidXBkYXRlZCIsInB1Ymxpc2hlZCIsImVuYWJsZSIsImRpc2FibGUiLCJyZWxvYWQiLCJfZmllbGRzIiwiX2FjbCIsIl9saW5rcyIsImlzQXJyYXkiLCJfYXV0aG9yIiwiX3VwZGF0ZWQiLCJfcHVibGlzaGVkIiwib3B0aW9ucyIsInByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJDb2xsZWN0aW9uIiwiZmV0Y2hPbkVudGl0eUNyZWF0aW9uIiwiY3JlYXRlIiwibGlzdCIsIml0ZW0iLCJpbnN0YW50aWF0ZUVudGl0eSIsIl9lbnRpdGllcyIsIl9lbnRpdGllc0J5TmFtZSIsIl9wYWdpbmciLCJlbnRpdGllcyIsImVudGl0aWVzQnlOYW1lIiwiZW50aXR5UHJvcGVydHlMaXN0IiwiaSIsImxlbmd0aCIsImVudGl0eSIsInB1c2giLCJuYW1lIiwicGFnaW5nIiwiZmV0Y2hfdjIiLCJpZCIsImlzRW1wdHkiLCJmdWxsUGF0aCIsImNsb25lIiwiU2F2ZWRTZWFyY2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJhY2tub3dsZWRnZSIsImRpc3BhdGNoIiwiaGlzdG9yeSIsInN1cHByZXNzSW5mbyIsImFsZXJ0Q291bnQiLCJwYXJzZUludCIsInRyaWdnZXJlZF9hbGVydF9jb3VudCIsImZpcmVkQWxlcnRHcm91cCIsIkZpcmVkQWxlcnRHcm91cCIsImpvYkRhdGEiLCJuYW1lc3BhY2VGcm9tUHJvcGVydGllcyIsImNhbGwiLCJlbnRpdHlOYW1lc3BhY2UiLCJTdG9yYWdlUGFzc3dvcmQiLCJGaXJlZEFsZXJ0IiwiZmlyZWRBbGVydHMiLCJhY3Rpb25zIiwiYWxlcnRUeXBlIiwiYWxlcnRfdHlwZSIsImlzRGlnZXN0TW9kZSIsImRpZ2VzdF9tb2RlIiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uX3RpbWVfcmVuZGVyZWQiLCJzYXZlZFNlYXJjaE5hbWUiLCJzYXZlZHNlYXJjaF9uYW1lIiwic2V2ZXJpdHkiLCJ0cmlnZ2VyVGltZSIsInRyaWdnZXJfdGltZSIsInRyaWdnZXJUaW1lUmVuZGVyZWQiLCJ0cmlnZ2VyX3RpbWVfcmVuZGVyZWQiLCJ0cmlnZ2VyZWRBbGVydENvdW50IiwidHJpZ2dlcmVkX2FsZXJ0cyIsImZpcmVkQWxlcnREYXRhIiwiZmlyZWRBbGVydCIsIkFwcGxpY2F0aW9uIiwic2V0dXBJbmZvIiwidXBkYXRlSW5mbyIsImluZm8iLCJWaWV3IiwiSW5kZXgiLCJyZXN1bHQiLCJ2ZXJzaW9uQ29tcGFyZSIsIkNvbmZpZ3VyYXRpb25TdGFuemEiLCJmaWxlIiwiQ29uZmlndXJhdGlvbkZpbGUiLCJnZXREZWZhdWx0U3RhbnphIiwic3RhbnphTmFtZSIsInZhbHVlcyIsImZpbGVuYW1lIiwiX19jb25mIiwiZG9lc0ZpbGVFeGlzdCIsImZpbGVzIiwiZmlsdGVyIiwiZiIsImNvZGUiLCJtZXNzYWdlIiwiY29uZmlndXJhdGlvbkZpbGUiLCJmZXRjaGVkRmlsZSIsImVycm9yIiwiZXJyb3JDb2RlIiwiZXJyb3JNZXNzYWdlIiwiZG9lc1N0YW56YUV4aXN0Iiwic3RhbnphIiwiZmV0Y2hlZFN0YW56YSIsImNyZWF0ZV92MiIsImNvbmZpZ3MiLCJzdmMiLCJrZXlWYWx1ZU1hcCIsImRvZXNGaWxlRXhpc3RSZXNwb25zZSIsImNvbmZpZ0ZpbGUiLCJjb25zb2xlIiwibmV3RmlsZSIsImRvZXNTdGFuemFFeGlzdFJlc3BvbnNlIiwiY29uZmlnU3RhbnphIiwibmV3U3RhbnphIiwidXBkYXRlZFN0YW56YSIsImNhbmNlbCIsImRpc2FibGVQcmV2aWV3IiwiZW5hYmxlUHJldmlldyIsImV2ZW50cyIsImZpbmFsaXplIiwicGF1c2UiLCJwcmV2aWV3Iiwic2VhcmNobG9nIiwic2V0UHJpb3JpdHkiLCJzZXRUVEwiLCJzdW1tYXJ5IiwidGltZWxpbmUiLCJ0b3VjaCIsInVucGF1c2UiLCJhY3Rpb24iLCJvdXRwdXRfbW9kZSIsIml0ZXJhdG9yIiwidHlwZSIsIlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IiLCJ2YWx1ZSIsInByaW9yaXR5IiwidHRsIiwidHJhY2siLCJjYWxsYmFja3MiLCJwZXJpb2QiLCJkb25lIiwibm9DYWxsYmFja3NBZnRlclJlYWR5IiwicHJvZ3Jlc3MiLCJmYWlsZWQiLCJyZWFkeSIsIl9wcmVyZWFkeSIsIl9zdG9wcGVkQWZ0ZXJSZWFkeSIsImVtaXR0ZWRSZWFkeSIsImRvbmVMb29waW5nIiwid2hpbHN0IiwibmV4dEl0ZXJhdGlvbiIsImRpc3BhdGNoU3RhdGUiLCJub3RSZWFkeSIsImlzRG9uZSIsImlzRmFpbGVkIiwic2xlZXAiLCJleGVjX21vZGUiLCJ0b0xvd2VyQ2FzZSIsIm91dHB1dE1vZGUiLCJEYXRhTW9kZWxGaWVsZCIsIl90eXBlcyIsImZpZWxkTmFtZSIsImRpc3BsYXlOYW1lIiwibXVsdGl2YWx1ZWQiLCJtdWx0aXZhbHVlIiwicmVxdWlyZWQiLCJoaWRkZW4iLCJlZGl0YWJsZSIsImNvbW1lbnQiLCJmaWVsZFNlYXJjaCIsImxpbmVhZ2UiLCJzcGxpdCIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1RpbWVzdGFtcCIsImlzT2JqZWN0Y291bnQiLCJpc0NoaWxkY291bnQiLCJpc0lQdjQiLCJpc0Jvb2xlYW4iLCJEYXRhTW9kZWxDb25zdHJhaW50IiwiRGF0YU1vZGVsQ2FsY3VsYXRpb24iLCJjYWxjdWxhdGlvbklEIiwiY2FsY3VsYXRpb25UeXBlIiwib3V0cHV0RmllbGRzIiwiZXhwcmVzc2lvbiIsImlucHV0RmllbGQiLCJsb29rdXBOYW1lIiwiaW5wdXRGaWVsZE1hcHBpbmdzIiwibG9va3VwSW5wdXRzIiwib3V0cHV0RmllbGROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpc0VkaXRhYmxlIiwiaXNMb29rdXAiLCJpc0V2YWwiLCJpc1JleCIsImlzR2VvSVAiLCJQaXZvdCIsImRyaWxsZG93blNlYXJjaCIsImRyaWxsZG93bl9zZWFyY2giLCJwcmV0dHlRdWVyeSIsIm9wZW5JblNlYXJjaCIsIm9wZW5faW5fc2VhcmNoIiwicGl2b3RTZWFyY2giLCJwaXZvdF9zZWFyY2giLCJ0c3RhdHNTZWFyY2giLCJ0c3RhdHNfc2VhcmNoIiwicnVuIiwiYXJncyIsImlzVW5kZWZpbmVkIiwiUGl2b3RTcGVjaWZpY2F0aW9uIiwiX2NvbXBhcmlzb25zIiwiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsImlwdjQiLCJfYmlubmluZyIsIl9zb3J0RGlyZWN0aW9uIiwiX3N0YXRzRnVuY3Rpb25zIiwiZGF0YU1vZGVsT2JqZWN0IiwiY29sdW1ucyIsInJvd3MiLCJmaWx0ZXJzIiwiY2VsbHMiLCJhY2NlbGVyYXRpb25OYW1lc3BhY2UiLCJkYXRhTW9kZWwiLCJpc0FjY2VsZXJhdGVkIiwicGl2b3QiLCJzZXRBY2NlbGVyYXRpb25Kb2IiLCJhZGRGaWx0ZXIiLCJjb21wYXJpc29uVHlwZSIsImNvbXBhcmlzb25PcCIsImNvbXBhcmVUbyIsImhhc0ZpZWxkIiwiZmllbGRCeU5hbWUiLCJjb250YWlucyIsInJldCIsImpvaW4iLCJydWxlIiwiY29tcGFyYXRvciIsImFkZExpbWl0RmlsdGVyIiwic29ydEF0dHJpYnV0ZSIsInNvcnREaXJlY3Rpb24iLCJsaW1pdCIsInN0YXRzRnVuY3Rpb24iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlT3duZXIiLCJsaW1pdEFtb3VudCIsInN0YXRzRm4iLCJsaW1pdFR5cGUiLCJhZGRSb3dTcGxpdCIsImxhYmVsIiwicm93IiwiZGlzcGxheSIsImFkZFJhbmdlUm93U3BsaXQiLCJmaWVsZCIsInJhbmdlcyIsInVwZGF0ZVJhbmdlcyIsInN0YXJ0IiwiZW5kIiwic3RlcCIsInNpemUiLCJtYXhOdW1iZXJPZiIsImFkZEJvb2xlYW5Sb3dTcGxpdCIsInRydWVEaXNwbGF5VmFsdWUiLCJmYWxzZURpc3BsYXlWYWx1ZSIsInRydWVMYWJlbCIsImZhbHNlTGFiZWwiLCJhZGRUaW1lc3RhbXBSb3dTcGxpdCIsImJpbm5pbmciLCJhZGRDb2x1bW5TcGxpdCIsImNvbCIsImFkZFJhbmdlQ29sdW1uU3BsaXQiLCJ1cGRhdGVkUmFuZ2VzIiwiYWRkQm9vbGVhbkNvbHVtblNwbGl0IiwiYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQiLCJhZGRDZWxsVmFsdWUiLCJzcGFya2xpbmUiLCJ0b0pzb25PYmplY3QiLCJiYXNlQ2xhc3MiLCJwaXZvdF9qc29uIiwibWVzc2FnZXMiLCJ0ZXh0IiwiYXVnbWVudCIsIkRhdGFNb2RlbE9iamVjdCIsInBhcmVudERhdGFNb2RlbCIsIm9iamVjdE5hbWUiLCJwYXJlbnROYW1lIiwiZ3JvdXBCeUZpZWxkcyIsIm9iamVjdHNUb0dyb3VwIiwibWF4U3BhbiIsInRyYW5zYWN0aW9uTWF4VGltZVNwYW4iLCJtYXhQYXVzZSIsInRyYW5zYWN0aW9uTWF4UGF1c2UiLCJiYXNlU2VhcmNoIiwiY29uc3RyYWludHMiLCJqIiwiY2FsY3VsYXRpb25zIiwiayIsImlzQmFzZVNlYXJjaCIsImlzQmFzZVRyYW5zYWN0aW9uIiwiZmllbGROYW1lcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJhbGxGaWVsZHMiLCJjb21iaW5lZEZpZWxkcyIsImNmIiwiYWxsRmllbGROYW1lcyIsImNhbGN1bGF0aW9uSURzIiwiY2FsY3VsYXRpb24iLCJjYWxjdWxhdGVkRmllbGROYW1lcyIsImNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iIiwiZWFybGllc3RUaW1lIiwidW5kZWZpbmVkIiwiZWFybGllc3RfdGltZSIsInN0YXJ0U2VhcmNoIiwicXVlcnlTdWZmaXgiLCJwYXJlbnQiLCJvYmplY3RCeU5hbWUiLCJjcmVhdGVQaXZvdFNwZWNpZmljYXRpb24iLCJEYXRhTW9kZWwiLCJhY2NlbGVyYXRpb24iLCJlbmFibGVkIiwiY29uY2lzZSIsImRhdGFNb2RlbERlZmluaXRpb24iLCJkZXNjcmlwdGlvbiIsIm9iamVjdE5hbWVzIiwib2JqZWN0TmFtZUxpc3QiLCJvYmpzIiwib2JqZWN0cyIsImhhc09iamVjdCIsInVwZGF0ZWRQcm9wcyIsImFjY2NlbGVyYXRpb24iLCJjcm9uX3NjaGVkdWxlIiwiY3JvblNjaGVkdWxlIiwiZGF0YU1vZGVsTmFtZXNwYWNlIiwicmVwbGFjZSIsImVuZHBvaW50IiwiX2VuZHBvaW50IiwiX3BhZ2VzaXplIiwicGFnZXNpemUiLCJfb2Zmc2V0IiwibmV4dCIsIm9mZnNldCIsIm51bVJlc3VsdHMiXSwibWFwcGluZ3MiOiJvc3ZOQWVZO21IQWZaLEssQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLENBQUMsVUFBVyxDQUNSLGFBRFEsd0JBR1IsR0FBSUEsQ0FBQUEsT0FBTywwQkFBT0MsT0FBTyxDQUFDLFdBQUQsQ0FBZCxDQUFYLENBQ0EsR0FBSUMsQ0FBQUEsSUFBSSwwQkFBVUQsT0FBTyxDQUFDLFFBQUQsQ0FBakIsQ0FBUixDQUNBLEdBQUlFLENBQUFBLEtBQUssMEJBQVNGLE9BQU8sQ0FBQyxTQUFELENBQWhCLENBQVQsQ0FDQSxHQUFJRyxDQUFBQSxLQUFLLDBCQUFTSCxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CRyxLQUE1QixDQUFULENBQ0EsR0FBSUMsQ0FBQUEsS0FBSywwQkFBU0osT0FBTyxDQUFDLGdCQUFELENBQVAsQ0FBMEJJLEtBQW5DLENBQVQsQ0FDQSxHQUFJQyxDQUFBQSxLQUFLLDBCQUFTTCxPQUFPLENBQUMsU0FBRCxDQUFoQixDQUFULENBRUEsR0FBSU0sQ0FBQUEsSUFBSSwwQkFBRyw0QkFBQUMsT0FBTywrQkFBSSxJQUFKLENBQVYsQ0FBUixDQUNBLEdB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MkJBRURwRixJQUFJLENBQUM2WSxPQUFMLEVBQWdCRyxVQUFoQixDQUZDLDJCQUlEeFosUUFBUSxDQUFDLElBQUQsQ0FBTzJCLE9BQVAsQ0FBZ0I2WCxVQUFVLENBQUcsQ0FBN0IsQ0FBUixDQUNILENBQ0osQ0FWTSxDQUFQLENBV0gsQ0E3QnlDLENBQWIsQ0FBakMsQ0ErQkgsQ0EzcExEIiwic291cmNlc0NvbnRlbnQiOlsiLyohKi9cbi8vIENvcHlyaWdodCAyMDE0IFNwbHVuaywgSW5jLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik6IHlvdSBtYXlcbi8vIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluXG4vLyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4vLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbi8vIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4vLyB1bmRlciB0aGUgTGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIFxuICAgIHZhciBDb250ZXh0ICAgICA9IHJlcXVpcmUoJy4vY29udGV4dCcpO1xuICAgIHZhciBIdHRwICAgICAgICA9IHJlcXVpcmUoJy4vaHR0cCcpO1xuICAgIHZhciBBc3luYyAgICAgICA9IHJlcXVpcmUoJy4vYXN5bmMnKTtcbiAgICB2YXIgUGF0aHMgICAgICAgPSByZXF1aXJlKCcuL3BhdGhzJykuUGF0aHM7XG4gICAgdmFyIENsYXNzICAgICAgID0gcmVxdWlyZSgnLi9qcXVlcnkuY2xhc3MnKS5DbGFzcztcbiAgICB2YXIgdXRpbHMgICAgICAgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG4gICAgXG4gICAgdmFyIHJvb3QgPSBleHBvcnRzIHx8IHRoaXM7XG4gICAgdmFyIFNlcnZpY2UgPSBudWxsO1xuICAgIFxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIFNwbHVuayBFbnRlcnByaXNlIGFuZCBTcGx1bmsgU3Rvcm0uXG4gICAgICogXG4gICAgICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlzIHRoZXJlZm9yZSBTREstcHJpdmF0ZS5cbiAgICAgKiBcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMucHJpdmF0ZS5CYXNlU2VydmljZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLkNvbnRleHRcbiAgICAgKi9cbiAgICB2YXIgQmFzZVNlcnZpY2UgPSBDb250ZXh0LmV4dGVuZCh7XG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSByb290IGFjY2VzcyBwb2ludCB0byBTcGx1bmsgZnVuY3Rpb25hbGl0eSB3aXRoIHR5cGVkIGFjY2VzcyB0byBcbiAgICAgKiBTcGx1bmsgcmVzb3VyY2VzIHN1Y2ggYXMgc2VhcmNoZXMsIGluZGV4ZXMsIGlucHV0cywgYW5kIG1vcmUuIFByb3ZpZGVzXG4gICAgICogbWV0aG9kcyB0byBhdXRoZW50aWNhdGUgYW5kIGNyZWF0ZSBzcGVjaWFsaXplZCBpbnN0YW5jZXMgb2YgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLnByaXZhdGUuQmFzZVNlcnZpY2VcbiAgICAgKi9cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJvb3QgPSBTZXJ2aWNlID0gQmFzZVNlcnZpY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLkh0dHB9IGh0dHAgQW4gaW5zdGFuY2Ugb2YgYSBgc3BsdW5ranMuSHR0cGAgY2xhc3MuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnM6IFxuICAgICAgICAgKiAgICAtIGBzY2hlbWVgIChfc3RyaW5nXyk6IFRoZSBzY2hlbWUgKFwiaHR0cFwiIG9yIFwiaHR0cHNcIikgZm9yIGFjY2Vzc2luZyBTcGx1bmsuXG4gICAgICAgICAqICAgIC0gYGhvc3RgIChfc3RyaW5nXyk6IFRoZSBob3N0IG5hbWUgKHRoZSBkZWZhdWx0IGlzIFwibG9jYWxob3N0XCIpLlxuICAgICAgICAgKiAgICAtIGBwb3J0YCAoX2ludGVnZXJfKTogVGhlIHBvcnQgbnVtYmVyICh0aGUgZGVmYXVsdCBpcyA4MDg5KS5cbiAgICAgICAgICogICAgLSBgdXNlcm5hbWVgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgYWNjb3VudCB1c2VybmFtZSwgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICogICAgLSBgcGFzc3dvcmRgIChfc3RyaW5nXyk6IFRoZSBwYXNzd29yZCwgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBvd25lciAodXNlcm5hbWUpIGNvbXBvbmVudCBvZiB0aGUgbmFtZXNwYWNlLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29tcG9uZW50IG9mIHRoZSBuYW1lc3BhY2UuXG4gICAgICAgICAqICAgIC0gYHNlc3Npb25LZXlgIChfc3RyaW5nXyk6IFRoZSBjdXJyZW50IHNlc3Npb24gdG9rZW4uXG4gICAgICAgICAqICAgIC0gYGF1dG9sb2dpbmAgKF9ib29sZWFuXyk6IGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IHRyeSB0byBsb2cgaW4gYWdhaW4gaWYgdGhlIHNlc3Npb24gdGVybWluYXRlcywgYGZhbHNlYCBpZiBub3QgKGB0cnVlYCBieSBkZWZhdWx0KS5cbiAgICAgICAgICogICAgLSBgdmVyc2lvbmAgKF9zdHJpbmdfKTogVGhlIHZlcnNpb24gc3RyaW5nIGZvciBTcGx1bmssIGZvciBleGFtcGxlIFwiNC4zLjJcIiAodGhlIGRlZmF1bHQgaXMgXCI1LjBcIikuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2V9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5zcGVjaWFsaXplICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3BlY2lhbGl6ZSk7XG4gICAgICAgICAgICB0aGlzLmFwcHMgICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hcHBzKTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlcyAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmluZGV4ZXMpO1xuICAgICAgICAgICAgdGhpcy5zYXZlZFNlYXJjaGVzICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2F2ZWRTZWFyY2hlcyk7XG4gICAgICAgICAgICB0aGlzLmpvYnMgICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5qb2JzKTtcbiAgICAgICAgICAgIHRoaXMudXNlcnMgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVzZXJzKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld3MgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnZpZXdzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZWRBbGVydEdyb3VwcyAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpcmVkQWxlcnRHcm91cHMpO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxzICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGF0YU1vZGVscyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgYFNlcnZpY2VgIGluc3RhbmNlIGZvclxuICAgICAgICAgKiBhIHNwZWNpZmljIG5hbWVzcGFjZSBjb250ZXh0LiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc3ZjID0gLi4uO1xuICAgICAgICAgKiAgICAgIHZhciBuZXdTZXJ2aWNlID0gc3ZjLnNwZWNpYWxpemUoXCJteXVzZXJcIiwgXCJ1bml4XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3duZXIgVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXBwIFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlfSBUaGUgc3BlY2lhbGl6ZWQgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHNwZWNpYWxpemU6IGZ1bmN0aW9uKG93bmVyLCBhcHApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZSh0aGlzLmh0dHAsIHtcbiAgICAgICAgICAgICAgICBzY2hlbWU6IHRoaXMuc2NoZW1lLFxuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMuaG9zdCwgICBcbiAgICAgICAgICAgICAgICBwb3J0OiB0aGlzLnBvcnQsICAgICAgIFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBvd25lcixcbiAgICAgICAgICAgICAgICBhcHA6IGFwcCwgXG4gICAgICAgICAgICAgICAgc2Vzc2lvbktleTogdGhpcy5zZXNzaW9uS2V5LFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYEFwcGxpY2F0aW9uc2AgY29sbGVjdGlvbiwgd2hpY2ggYWxsb3dzIHlvdSB0byBcbiAgICAgICAgICogbGlzdCBpbnN0YWxsZWQgYXBwcyBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBMaXN0IGluc3RhbGxlZCBhcHBzXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzdmMuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuZmV0Y2goZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUubG9nKGFwcHMubGlzdCgpKTsgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbn0gVGhlIGBBcHBsaWNhdGlvbnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBhcHBzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5BcHBsaWNhdGlvbnModGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYENvbmZpZ3VyYXRpb25zYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBcbiAgICAgICAgICogY3JlYXRlLCBsaXN0LCBhbmQgcmV0cmlldmUgY29uZmlndXJhdGlvbiAoLmNvbmYpIGZpbGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHByb3BlcnRpZXMgaW4gdGhlICdwcm9wcy5jb25mJyBmaWxlXG4gICAgICAgICAqICAgICAgdmFyIGZpbGVzID0gc3ZjLmNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgICAqICAgICAgZmlsZXMuaXRlbShcInByb3BzXCIsIGZ1bmN0aW9uKGVyciwgcHJvcHNGaWxlKSB7XG4gICAgICAgICAqICAgICAgICAgIHByb3BzRmlsZS5mZXRjaChmdW5jdGlvbihlcnIsIHByb3BzKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wcy5wcm9wZXJ0aWVzKCkpOyBcbiAgICAgICAgICogICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zfSBUaGUgYENvbmZpZ3VyYXRpb25zYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgY29uZmlnc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBjb25maWd1cmF0aW9uczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvbnModGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgSW5kZXhlc2AgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlLCBcbiAgICAgICAgICogbGlzdCwgYW5kIHVwZGF0ZSBpbmRleGVzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFuIF9pbnRlcm5hbCBpbmRleFxuICAgICAgICAgKiAgICAgIHZhciBpbmRleGVzID0gc3ZjLmluZGV4ZXMoKTtcbiAgICAgICAgICogICAgICBpbmRleGVzLmZldGNoKGZ1bmN0aW9uKGVyciwgaW5kZXhlcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzLml0ZW0oXCJfaW50ZXJuYWxcIik7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiV2FzIGluZGV4IGZvdW5kOiBcIiArICEhaW5kZXgpO1xuICAgICAgICAgKiAgICAgICAgICAvLyBgaW5kZXhgIGlzIGFuIEluZGV4IG9iamVjdC5cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXhlc30gVGhlIGBJbmRleGVzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi8gICAgICAgIFxuICAgICAgICBpbmRleGVzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHsgXG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSW5kZXhlcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBTYXZlZFNlYXJjaGVzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCB1cGRhdGUgc2F2ZWQgc2VhcmNoZXMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2Ygc2F2ZWQgc2VhcmNoZXNcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2hlcyA9IHN2Yy5zYXZlZFNlYXJjaGVzKCk7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2hlcy5mZXRjaChmdW5jdGlvbihlcnIsIHNhdmVkU2VhcmNoZXMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIE9mIFNhdmVkIFNlYXJjaGVzOiBcIiArIHNhdmVkU2VhcmNoZXMubGlzdCgpLmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXN9IFRoZSBgU2F2ZWRTZWFyY2hlc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgc2F2ZWRTZWFyY2hlczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU2F2ZWRTZWFyY2hlcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBTdG9yYWdlUGFzc3dvcmRzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCB1cGRhdGUgc3RvcmFnZSBwYXNzd29yZHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2Ygc3RvcmFnZSBwYXNzd29yZHNcbiAgICAgICAgICogICAgICB2YXIgc3RvcmFnZVBhc3N3b3JkcyA9IHN2Yy5zdG9yYWdlUGFzc3dvcmRzKCk7XG4gICAgICAgICAqICAgICAgc3RvcmFnZVBhc3N3b3Jkcy5mZXRjaChmdW5jdGlvbihlcnIsIHN0b3JhZ2VQYXNzd29yZHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIG9mIFN0b3JhZ2UgUGFzc3dvcmRzOiBcIiArIHN0b3JhZ2VQYXNzd29yZHMubGlzdCgpLmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHN9IFRoZSBgU3RvcmFnZVBhc3N3b3Jkc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgc3RvcmFnZVBhc3N3b3JkczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU3RvcmFnZVBhc3N3b3Jkcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3VcbiAgICAgICAgICogbGlzdCBhbGVydCBncm91cHMuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAgICAgIFxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2YgZmlyZWQgYWxlcnQgZ3JvdXBzXG4gICAgICAgICAqICAgICAgdmFyIGZpcmVkQWxlcnRHcm91cHMgPSBzdmMuZmlyZWRBbGVydEdyb3VwcygpO1xuICAgICAgICAgKiAgICAgIGZpcmVkQWxlcnRHcm91cHMuZmV0Y2goZnVuY3Rpb24oZXJyLCBmaXJlZEFsZXJ0R3JvdXBzKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiIyBvZiBhbGVydCBncm91cHM6IFwiICsgZmlyZWRBbGVydEdyb3Vwcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbn0gVGhlIGBGaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBmaXJlZEFsZXJ0R3JvdXBzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBKb2JzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIGxpc3QsXG4gICAgICAgICAqIGFuZCByZXRyaWV2ZSBzZWFyY2ggam9icy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgam9iIElEc1xuICAgICAgICAgKiAgICAgIHZhciBqb2JzID0gc3ZjLmpvYnMoKTtcbiAgICAgICAgICogICAgICBqb2JzLmZldGNoKGZ1bmN0aW9uKGVyciwgam9icykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IGpvYnMubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgXCIgKyAoaSsxKSArIFwiOiBcIiArIGxpc3RbaV0uc2lkKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2JzfSBUaGUgYEpvYnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGpvYnM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkpvYnModGhpcywgbmFtZXNwYWNlKTsgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBEYXRhTW9kZWxzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIGxpc3QsXG4gICAgICAgICAqIGFuZCByZXRyaWV2ZSBkYXRhIG1vZGVscy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGRhdGFNb2RlbHM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkRhdGFNb2RlbHModGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFVzZXJzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIFxuICAgICAgICAgKiBsaXN0LCBhbmQgcmV0cmlldmUgdXNlcnMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHVzZXJuYW1lc1xuICAgICAgICAgKiAgICAgIHZhciB1c2VycyA9IHN2Yy51c2VycygpO1xuICAgICAgICAgKiAgICAgIHVzZXJzLmZldGNoKGZ1bmN0aW9uKGVyciwgdXNlcnMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIGxpc3QgPSB1c2Vycy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVzZXIgXCIgKyAoaSsxKSArIFwiOiBcIiArIGxpc3RbaV0ucHJvcGVydGllcygpLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcnN9IFRoZSBgVXNlcnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhdXRob3JpemF0aW9uL3VzZXJzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Vc2Vycyh0aGlzKTsgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBWaWV3c2AgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlLFxuICAgICAgICAgKiBsaXN0LCBhbmQgcmV0cmlldmUgdmlld3MgKGN1c3RvbSBVSXMgYnVpbHQgaW4gU3BsdW5rJ3MgYXBwIGZyYW1ld29yaykuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHZpZXdzXG4gICAgICAgICAqICAgICAgdmFyIHZpZXdzID0gc3ZjLnZpZXdzKCk7XG4gICAgICAgICAqICAgICAgdmlld3MuZmV0Y2goZnVuY3Rpb24oZXJyLCB2aWV3cykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IHZpZXdzLmxpc3QoKTtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVmlldyBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5wcm9wZXJ0aWVzKCkubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld3N9IFRoZSBgVmlld3NgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL3VpL3ZpZXdzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuVmlld3NcbiAgICAgICAgICovXG4gICAgICAgIHZpZXdzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5WaWV3cyh0aGlzLCBuYW1lc3BhY2UpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNlYXJjaCBqb2Igd2l0aCBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycywgaW5jbHVkaW5nIGBleGVjX21vZGVgIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2Ygc2VhcmNoOlxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPW5vcm1hbGAgdG8gcmV0dXJuIGEgc2VhcmNoIGpvYiBJRCBpbW1lZGlhdGVseSAoZGVmYXVsdCkuXG4gICAgICAgICAqICAgICAgUG9sbCBmb3IgY29tcGxldGlvbiB0byBmaW5kIG91dCB3aGVuIHlvdSBjYW4gcmV0cmlldmUgc2VhcmNoIHJlc3VsdHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPWJsb2NraW5nYCB0byByZXR1cm4gdGhlIHNlYXJjaCBqb2IgSUQgd2hlbiB0aGUgc2VhcmNoIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRvIHJ1biBhIG9uZXNob3Qgc2VhcmNoLCB3aGljaCBkb2VzIG5vdCBjcmVhdGUgYSBqb2IgYnV0IHJhdGhlciByZXR1cm5zIHRoZSBzZWFyY2ggcmVzdWx0cywgdXNlIGBTZXJ2aWNlLm9uZXNob3RTZWFyY2hgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2Uuc2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgbmV3Sm9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiOiBuZXdKb2Iuc2lkKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiIGh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24obmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBqb2JzID0gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYnMuc2VhcmNoKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZ2V0IGEgYEpvYmAgYnkgaXRzIHNpZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNpZCBUaGUgc2VhcmNoIElEIGZvciBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgY3JlYXRlZCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0Sm9iOiBmdW5jdGlvbihzaWQsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhpcywgc2lkLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYi5mZXRjaCh7fSwgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBvbmVzaG90IHNlYXJjaCBmcm9tIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2Uub25lc2hvdFNlYXJjaChcInNlYXJjaCBFUlJPUlwiLCB7aWQ6IFwibXlqb2JfMTIzXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSRVNVTFQgRklFTERTXCI6IHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2g6XG4gICAgICAgICAqICAgIC0gYG91dHB1dF9tb2RlYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIHJlc3VsdHMgKFhNTCwgSlNPTiwgb3IgQ1NWKS5cbiAgICAgICAgICogICAgLSBgZWFybGllc3RfdGltZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGBsYXRlc3RfdGltZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBsYXRlc3QgdGltZSBpbiB0aGUgdGltZSByYW5nZSB0byBzZWFyY2guIFRoZSB0aW1lIHN0cmluZyBjYW4gYmUgYSBVVEMgdGltZSAod2l0aCBmcmFjdGlvbmFsIHNlY29uZHMpLCBhIHJlbGF0aXZlIHRpbWUgc3BlY2lmaWVyICh0byBub3cpLCBvciBhIGZvcm1hdHRlZCB0aW1lIHN0cmluZy5cbiAgICAgICAgICogICAgLSBgcmZgIChfc3RyaW5nXyk6IFNwZWNpZmllcyBvbmUgb3IgbW9yZSBmaWVsZHMgdG8gYWRkIHRvIHRoZSBzZWFyY2guXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgc2VhcmNoOiBgKGVyciwgcmVzdWx0cylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBvbmVzaG90U2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24obmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBqb2JzID0gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYnMub25lc2hvdFNlYXJjaChxdWVyeSwgcGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgdXNlciB0aGF0IGlzIGN1cnJlbnRseSBsb2dnZWQgaW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5jdXJyZW50VXNlcihmdW5jdGlvbihlcnIsIHVzZXIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSZWFsIG5hbWU6IFwiLCB1c2VyLnByb3BlcnRpZXMoKS5yZWFsbmFtZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSB1c2VyIGluc3RhbmNlOiBgKGVyciwgdXNlcilgLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLmN1cnJlbnRVc2VyfSBUaGUgYFVzZXJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgYXV0aG9yaXphdGlvbi9jdXJyZW50LWNvbnRleHRcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBjdXJyZW50VXNlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMuZ2V0KFBhdGhzLmN1cnJlbnRVc2VyLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdXNlcm5hbWUgPSByZXNwb25zZS5kYXRhLmVudHJ5WzBdLmNvbnRlbnQudXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VyID0gbmV3IHJvb3QuVXNlcih0aGF0LCB1c2VybmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5zZXJ2ZXJJbmZvKGZ1bmN0aW9uKGVyciwgaW5mbykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNwbHVuayBWZXJzaW9uOiBcIiwgaW5mby5wcm9wZXJ0aWVzKCkudmVyc2lvbik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZXJ2ZXIgaW5mbzogYChlcnIsIGluZm8pYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlcnZlci9pbmZvXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc2VydmVySW5mbzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHNlcnZlckluZm8gPSBuZXcgcm9vdC5TZXJ2ZXJJbmZvKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHNlcnZlckluZm8uZmV0Y2goY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhcnNlcyBhIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnBhcnNlKFwic2VhcmNoIGluZGV4PV9pbnRlcm5hbCB8IGhlYWQgMVwiLCBmdW5jdGlvbihlcnIsIHBhcnNlKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWFuZHM6IFwiLCBwYXJzZS5jb21tYW5kcyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5IHRvIHBhcnNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEFuIG9iamVjdCBvZiBvcHRpb25zIGZvciB0aGUgcGFyc2VyOlxuICAgICAgICAgKiAgICAtIGBlbmFibGVfbG9va3Vwc2AgKF9ib29sZWFuXyk6IElmIGB0cnVlYCwgcGVyZm9ybXMgcmV2ZXJzZSBsb29rdXBzIHRvIGV4cGFuZCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG4gICAgICAgICAqICAgIC0gYG91dHB1dF9tb2RlYCAoX3N0cmluZ18pOiBUaGUgb3V0cHV0IGZvcm1hdCAoWE1MIG9yIEpTT04pLlxuICAgICAgICAgKiAgICAtIGBwYXJzZV9vbmx5YCAoX2Jvb2xlYW5fKTogSWYgYHRydWVgLCBkaXNhYmxlcyB0aGUgZXhwYW5zaW9uIG9mIHNlYXJjaCBkdWUgdG8gZXZhbHVhdGlvbiBvZiBzdWJzZWFyY2hlcywgdGltZSB0ZXJtIGV4cGFuc2lvbiwgbG9va3VwcywgdGFncywgZXZlbnR0eXBlcywgYW5kIHNvdXJjZXR5cGUgYWxpYXMuXG4gICAgICAgICAqICAgIC0gYHJlbG9hZF9tYWNyb3NgIChfYm9vbGVhbl8pOiBJZiBgdHJ1ZWAsIHJlbG9hZHMgbWFjcm8gZGVmaW5pdGlvbnMgZnJvbSBtYWNyb3MuY29uZi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHBhcnNlIGluZm86IGAoZXJyLCBwYXJzZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL3BhcnNlclxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBwYXJhbXMucSA9IHF1ZXJ5O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoUGF0aHMucGFyc2VyLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm92aWRlcyBhdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggcXVlcmllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnR5cGVhaGVhZChcImluZGV4PVwiLCAxMCwgZnVuY3Rpb24oZXJyLCBvcHRpb25zKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXV0b2NvbXBsZXRpb24gb3B0aW9uczogXCIsIG9wdGlvbnMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IFRoZSBxdWVyeSBmcmFnbWVudCB0byBhdXRvY29tcGxldGUuXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBUaGUgbnVtYmVyIG9mIG9wdGlvbnMgdG8gcmV0dXJuIChvcHRpb25hbCkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBhdXRvY29tcGxldGlvbiBpbmZvOiBgKGVyciwgb3B0aW9ucylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL3R5cGVhaGVhZFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHR5cGVhaGVhZDogZnVuY3Rpb24ocHJlZml4LCBjb3VudCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihjb3VudCkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvdW50O1xuICAgICAgICAgICAgICAgIGNvdW50ID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgY291bnQ6IGNvdW50IHx8IDEwLFxuICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoUGF0aHMudHlwZWFoZWFkLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IChyZXNwb25zZS5kYXRhIHx8IHt9KS5yZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzIHx8IFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMb2dzIGFuIGV2ZW50IHRvIFNwbHVuay5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmxvZyhcIkEgbmV3IGV2ZW50XCIsIHtpbmRleDogXCJfaW50ZXJuYWxcIiwgc291cmNldHlwZTogXCJteXNvdXJjZXR5cGVcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3VibWl0dGVkIGV2ZW50OiBcIiwgcmVzdWx0KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBldmVudCBUaGUgdGV4dCBmb3IgdGhpcyBldmVudCwgb3IgYSBKU09OIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcGFyYW1ldGVycyBmb3IgaW5kZXhpbmc6IFxuICAgICAgICAgKiAgICAtIGBpbmRleGAgKF9zdHJpbmdfKTogVGhlIGluZGV4IHRvIHNlbmQgZXZlbnRzIGZyb20gdGhpcyBpbnB1dCB0by5cbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIHZhbHVlIHRvIHBvcHVsYXRlIGluIHRoZSBIb3N0IGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuIFxuICAgICAgICAgKiAgICAtIGBob3N0X3JlZ2V4YCAoX3N0cmluZ18pOiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGV4dHJhY3QgdGhlIGhvc3QgdmFsdWUgZnJvbSBlYWNoIGV2ZW50LiBcbiAgICAgICAgICogICAgLSBgc291cmNlYCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIFNvdXJjZSBmaWVsZCBmb3IgZXZlbnRzIGZyb20gdGhpcyBkYXRhIGlucHV0LlxuICAgICAgICAgKiAgICAtIGBzb3VyY2V0eXBlYCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIFNvdXJjZXR5cGUgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHN1Ym1pdHRlZDogYChlcnIsIHJlc3VsdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcmVjZWl2ZXJzL3NpbXBsZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGxvZzogZnVuY3Rpb24oZXZlbnQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGlzIGEgSlNPTiBvYmplY3QsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBwYXRoID0gdGhpcy5wYXRocy5zdWJtaXRFdmVudDtcbiAgICAgICAgICAgIHZhciBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0ge1wiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwifTtcbiAgICAgICAgICAgIHZhciBib2R5ID0gZXZlbnQ7XG4gICAgICAgICAgICB2YXIgZ2V0ID0gcGFyYW1zO1xuICAgICAgICAgICAgdmFyIHBvc3QgPSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucmVxdWVzdChcbiAgICAgICAgICAgICAgICBwYXRoLCBcbiAgICAgICAgICAgICAgICBtZXRob2QsIFxuICAgICAgICAgICAgICAgIGdldCwgXG4gICAgICAgICAgICAgICAgcG9zdCwgXG4gICAgICAgICAgICAgICAgYm9keSwgXG4gICAgICAgICAgICAgICAgaGVhZGVycywgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSBiYXNlIGRlZmluaXRpb24gZm9yIGEgU3BsdW5rIGVuZHBvaW50LCB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mXG4gICAgICogYSBzcGVjaWZpYyBzZXJ2aWNlIGFuZCBwYXRoLiBQcm92aWRlcyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBHRVQsIFBPU1QsIGFuZFxuICAgICAqIERFTEVURSBvcGVyYXRpb25zIHVzZWQgaW4gc3BsdW5ranMsIGF1dG9tYXRpY2FsbHkgcHJlcGFyaW5nIHRoZSBwYXRoIGNvcnJlY3RseVxuICAgICAqIGFuZCBhbGxvd2luZyBmb3IgcmVsYXRpdmUgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAqL1xuICAgIHJvb3QuRW5kcG9pbnQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1YWxpZmllZFBhdGggQSBmdWxseS1xdWFsaWZpZWQgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwiL3NlcnZpY2VzL3NlYXJjaC9qb2JzXCIpLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcXVhbGlmaWVkUGF0aCkge1xuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFzc2VkIGluIGEgbnVsbCBTZXJ2aWNlLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFxdWFsaWZpZWRQYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFzc2VkIGluIGFuIGVtcHR5IHBhdGguXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgdGhpcy5xdWFsaWZpZWRQYXRoID0gcXVhbGlmaWVkUGF0aDtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmdldCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5nZXQpO1xuICAgICAgICAgICAgdGhpcy5nZXRfdjIgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZ2V0X3YyKTtcbiAgICAgICAgICAgIHRoaXMucG9zdCAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBvc3QpO1xuICAgICAgICAgICAgdGhpcy5kZWwgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUGVyZm9ybXMgYSByZWxhdGl2ZSBHRVQgcmVxdWVzdCBvbiBhbiBlbmRwb2ludCdzIHBhdGgsXG4gICAgICAgICAqIGNvbWJpbmVkIHdpdGggdGhlIHBhcmFtZXRlcnMgYW5kIGEgcmVsYXRpdmUgcGF0aCBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gV2lsbCBtYWtlIGEgcmVxdWVzdCB0byB7c2VydmljZS5wcmVmaXh9L3NlYXJjaC9qb2JzLzEyMzQ1Ni9yZXN1bHRzP29mZnNldD0xXG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5nZXQoXCJyZXN1bHRzXCIsIHtvZmZzZXQ6IDF9LCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coXCJET05FXCIpKX0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVscGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBlbmRwb2ludCBwYXRoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgY29tcGxldGU6IGAoZXJyLCByZXNwb25zZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24ocmVscGF0aCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMucXVhbGlmaWVkUGF0aDtcblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIHdlIHdpbGwgYXBwZW5kIGl0IHdpdGggYSBwcmVjZWRpbmdcbiAgICAgICAgICAgIC8vIHNsYXNoLlxuICAgICAgICAgICAgaWYgKHJlbHBhdGgpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcIi9cIiArIHJlbHBhdGg7ICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldF92MjogZnVuY3Rpb24ocmVscGF0aCwgcGFyYW1zKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0X3YyKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIFBPU1QgcmVxdWVzdCBvbiBhbiBlbmRwb2ludCdzIHBhdGgsXG4gICAgICAgICAqIGNvbWJpbmVkIHdpdGggdGhlIHBhcmFtZXRlcnMgYW5kIGEgcmVsYXRpdmUgcGF0aCBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gV2lsbCBtYWtlIGEgcmVxdWVzdCB0byB7c2VydmljZS5wcmVmaXh9L3NlYXJjaC9qb2JzLzEyMzQ1Ni9jb250cm9sXG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImNhbmNlbFwifSwgZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKFwiQ0FOQ0VMTEVEXCIpKX0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVscGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBlbmRwb2ludCBwYXRoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIGJvZHkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBwb3N0OiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UucG9zdChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIERFTEVURSByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2XG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5kZWxldGUoXCJcIiwge30sIGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyhcIkRFTEVURURcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgcXVlcnkgc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgZGVsOiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZGVsKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIGJhc2UgZGVmaW5pdGlvbiBmb3IgYSBTcGx1bmsgcmVzb3VyY2UgKGZvciBleGFtcGxlLCBhbiBlbnRpdHkgXG4gICAgICogc3VjaCBhcyBhbiBpbmRleCBvciBzZWFyY2ggam9iLCBvciBhIGNvbGxlY3Rpb24gb2YgZW50aXRpZXMpLiBQcm92aWRlcyBcbiAgICAgKiBiYXNpYyBtZXRob2RzIGZvciBoYW5kbGluZyBTcGx1bmsgcmVzb3VyY2VzLCBzdWNoIGFzIHZhbGlkYXRpb24gYW5kIFxuICAgICAqIGFjY2Vzc2luZyBwcm9wZXJ0aWVzLiBcbiAgICAgKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5IGJlY2F1c2UgbW9zdCBtZXRob2RzIGFyZSBtZWFudCB0byBiZSBvdmVycmlkZGVuLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICovXG4gICAgcm9vdC5SZXNvdXJjZSA9IHJvb3QuRW5kcG9pbnQuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIEEgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwic2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB2YXIgZnVsbHBhdGggPSBzZXJ2aWNlLmZ1bGxwYXRoKHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIGZ1bGxwYXRoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLl9sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2ggICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgdGhpcy5wYXRoICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSByZXNvdXJjZSBhbmQgc3RvcmVzIHRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZyZXNoZXMgdGhlIHJlc291cmNlIGJ5IGZldGNoaW5nIHRoZSBvYmplY3QgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgICAqIGFuZCBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJldHJpZXZlZDogYChlcnIsIHJlc291cmNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1VU1QgQkUgT1ZFUlJJRERFTlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcHJvcGVydGllcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBmdWxsIHN0YXRlIChwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSkgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY3VycmVudCBmdWxsIHN0YXRlIG9mIHRoaXMgcmVzb3VyY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGEgU3BsdW5rIGVudGl0eSwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgY29uc3RydWN0XG4gICAgICogd2l0aCBjZXJ0YWluIG9wZXJhdGlvbnMgKHN1Y2ggYXMgXCJwcm9wZXJ0aWVzXCIsIFwidXBkYXRlXCIsIGFuZCBcImRlbGV0ZVwiKS4gXG4gICAgICogRW50aXRpZXMgaW5jbHVkZSBzZWFyY2ggam9icywgaW5kZXhlcywgaW5wdXRzLCBhcHBzLCBhbmQgbW9yZS4gXG4gICAgICpcbiAgICAgKiBQcm92aWRlcyBiYXNpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU3BsdW5rIGVudGl0aWVzLCBzdWNoIGFzIGZldGNoaW5nIGFuZFxuICAgICAqIHVwZGF0aW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICovXG4gICAgcm9vdC5FbnRpdHkgPSByb290LlJlc291cmNlLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHN0YXRpYyBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBcbiAgICAgICAgICogdXBkYXRlIHRvIGdldCB0aGUgdXBkYXRlZCBlbnRpdHkuIEJ5IGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IFxuICAgICAgICAgKiBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnMgKGVjaG9lcykgdGhlIHVwZGF0ZWQgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5fbG9hZCAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuX2xvYWQpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaCAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkcyAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5maWVsZHMpO1xuICAgICAgICAgICAgdGhpcy5saW5rcyAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlua3MpO1xuICAgICAgICAgICAgdGhpcy5hY2wgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuYWNsKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmF1dGhvcik7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWQgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGVkKTtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVkID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnB1Ymxpc2hlZCk7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZSAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5lbmFibGUpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGlzYWJsZSk7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZWxvYWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fZmllbGRzICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fYWNsICAgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSBlbnRpdHkgYW5kIHN0b3JlcyB0aGUgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gdXRpbHMuaXNBcnJheShwcm9wZXJ0aWVzKSA/IHByb3BlcnRpZXNbMF0gOiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwcm9wZXJ0aWVzIHRvXG4gICAgICAgICAgICAvLyBlbXB0eSB2YWx1ZXNcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB7fSxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgICAgIGFjbDoge30sXG4gICAgICAgICAgICAgICAgbGlua3M6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zdXBlcihwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGFrZSBvdXQgdGhlIGVudGl0eS1zcGVjaWZpYyBjb250ZW50XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcy5jb250ZW50ICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9maWVsZHMgICAgID0gcHJvcGVydGllcy5maWVsZHMgICAgfHwgdGhpcy5fZmllbGRzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fYWNsICAgICAgICA9IHByb3BlcnRpZXMuYWNsICAgICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICA9IHByb3BlcnRpZXMubGlua3MgICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fYXV0aG9yICAgICA9IHByb3BlcnRpZXMuYXV0aG9yICAgIHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkICAgID0gcHJvcGVydGllcy51cGRhdGVkICAgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlZCAgPSBwcm9wZXJ0aWVzLnB1Ymxpc2hlZCB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgZmllbGRzIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSwgaW5kaWNhdGluZyB3aGljaCBcbiAgICAgICAgICogZmllbGRzIGFyZSB3aWxkY2FyZHMsIHJlcXVpcmVkLCBhbmQgb3B0aW9uYWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGZpZWxkcyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSxcbiAgICAgICAgICogd2hpY2ggY29udGFpbnMgdGhlIHBlcm1pc3Npb25zIGZvciBhY2Nlc3NpbmcgdGhlIGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgQUNMLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBhY2w6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjbDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGxpbmtzIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSwgd2hpY2ggaXMgdGhlIFVSSSBvZlxuICAgICAgICAgKiB0aGUgZW50aXR5IHJlbGF0aXZlIHRvIHRoZSBtYW5hZ2VtZW50IHBvcnQgb2YgYSBTcGx1bmsgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGxpbmtzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBsaW5rczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlua3M7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBhdXRob3IgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBhdXRob3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGF1dGhvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgdXBkYXRlZCB0aW1lIGZvciB0aGlzIGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgdXBkYXRlZCB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVkO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgcHVibGlzaGVkIHRpbWUgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBwdWJsaXNoZWQgdGltZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGlzaGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wdWJsaXNoZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIHRoZSBlbnRpdHkgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIFxuICAgICAgICAgKiBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIGNvbGxlY3Rpb24gZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uIG9wdGlvbnM6XG4gICAgICAgICAqICAgIC0gYGNvdW50YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgb2Zmc2V0YCAoX2ludGVnZXJfKTogVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgaXRlbSB0byByZXR1cm4uXG4gICAgICAgICAqICAgIC0gYHNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSB0byBmaWx0ZXIgcmVzcG9uc2VzLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2RpcmAgKF9zdHJpbmdfKTogVGhlIGRpcmVjdGlvbiB0byBzb3J0IHJldHVybmVkIGl0ZW1zOiDigJxhc2PigJ0gb3Ig4oCcZGVzY+KAnS5cbiAgICAgICAgICogICAgLSBgc29ydF9rZXlgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIHNvcnRpbmcgKG9wdGlvbmFsKS5cbiAgICAgICAgICogICAgLSBgc29ydF9tb2RlYCAoX3N0cmluZ18pOiBUaGUgY29sbGF0aW5nIHNlcXVlbmNlIGZvciBzb3J0aW5nIHJldHVybmVkIGl0ZW1zOiDigJxhdXRv4oCdLCDigJxhbHBoYeKAnSwg4oCcYWxwaGFfY2FzZeKAnSwgb3Ig4oCcbnVt4oCdLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJldHJpZXZlZDogYChlcnIsIHJlc291cmNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcIlwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YSA/IHJlc3BvbnNlLmRhdGEuZW50cnkgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogRGVsZXRlcyB0aGUgZW50aXR5IGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBkZWxldGVkOiBgKGVycilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsKFwiXCIsIHt9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgZW50aXR5IG9uIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyB0byB1cGRhdGUgdGhlIG9iamVjdCB3aXRoLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHVwZGF0ZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb3BzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCAnbmFtZScgZmllbGQgaW4gJ3VwZGF0ZSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcHJvcHMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiAhdGhhdC5mZXRjaE9uVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlcnIgJiYgdGhhdC5mZXRjaE9uVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBkaXNhYmxlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMucG9zdChcImRpc2FibGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBlbmFibGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBvc3QoXCJlbmFibGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWxvYWRzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyByZWxvYWRlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbG9hZDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5wb3N0KFwiX3JlbG9hZFwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgYSBTcGx1bmsgY29sbGVjdGlvbiwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgY29uc3RydWN0XG4gICAgICogdGhhdCBwcm92aWRlcyBiYXNpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggY29sbGVjdGlvbnMgb2YgZW50aXRpZXMsIHN1Y2ggYXMgXG4gICAgICogY3JlYXRpbmcgYW5kIGxpc3RpbmcgZW50aXRpZXMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAqL1xuICAgIHJvb3QuQ29sbGVjdGlvbiA9IHJvb3QuUmVzb3VyY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgc3RhdGljIHByb3BlcnR5IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIFxuICAgICAgICAgKiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBcbiAgICAgICAgICogYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJucyAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cblxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIEEgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwic2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb259IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5fbG9hZCAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5fbG9hZCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZldGNoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3JlYXRlKTtcbiAgICAgICAgICAgIHRoaXMubGlzdCAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlzdCk7XG4gICAgICAgICAgICB0aGlzLml0ZW0gICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllcyAgICAgICA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZW50aXRpZXNCeU5hbWUgPSB7fTsgICAgXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcGFnaW5nICAgICAgICAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2xpbmtzICAgICAgICAgID0ge307IFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBlbnRpdHkuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSBjb2xsZWN0aW9uIGFuZCBwcm9wZXJ0aWVzLCBhbmQgY3JlYXRlcyBhIG1hcCBvZiBlbnRpdHlcbiAgICAgICAgICogbmFtZXMgdG8gZW50aXR5IElEcyAoZm9yIHJldHJpZXZhbCBwdXJwb3NlcykuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfbG9hZDogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIocHJvcGVydGllcyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGVudGl0aWVzQnlOYW1lID0ge307XG4gICAgICAgICAgICB2YXIgZW50aXR5UHJvcGVydHlMaXN0ID0gcHJvcGVydGllcy5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbnRpdHlQcm9wZXJ0eUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBlbnRpdHlQcm9wZXJ0eUxpc3RbaV07XG4gICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IHRoaXMuaW5zdGFudGlhdGVFbnRpdHkocHJvcHMpO1xuICAgICAgICAgICAgICAgIGVudGl0eS5fbG9hZChwcm9wcyk7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChlbnRpdHkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChlbnRpdGllc0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShlbnRpdHkubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNCeU5hbWVbZW50aXR5Lm5hbWVdLnB1c2goZW50aXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0aWVzQnlOYW1lW2VudGl0eS5uYW1lXSA9IFtlbnRpdHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzICAgICAgID0gZW50aXRpZXM7XG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllc0J5TmFtZSA9IGVudGl0aWVzQnlOYW1lO1xuICAgICAgICAgICAgdGhpcy5fcGFnaW5nICAgICAgICAgPSBwcm9wZXJ0aWVzLnBhZ2luZyAgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX2xpbmtzICAgICAgICAgID0gcHJvcGVydGllcy5saW5rcyAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkICAgICAgICA9IHByb3BlcnRpZXMudXBkYXRlZCAgIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBsaW5rcyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb2xsZWN0aW9uLCB3aGljaCBpcyB0aGUgVVJJIG9mXG4gICAgICAgICAqIHRoZSByZXNvdXJjZSByZWxhdGl2ZSB0byB0aGUgbWFuYWdlbWVudCBwb3J0IG9mIGEgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsaW5rcyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5rcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBhdXRob3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwYWdpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luZztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVwZGF0ZWQgdGltZSBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB1cGRhdGVkIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVkO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyB0aGUgcmVzb3VyY2UgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIFxuICAgICAgICAgKiBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgY291bnRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBvZmZzZXRgIChfaW50ZWdlcl8pOiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGZpbHRlciByZXNwb25zZXMuXG4gICAgICAgICAqICAgIC0gYHNvcnRfZGlyYCAoX3N0cmluZ18pOiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgcmV0dXJuZWQgaXRlbXM6IOKAnGFzY+KAnSBvciDigJxkZXNj4oCdLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2tleWAgKF9zdHJpbmdfKTogVGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZyAob3B0aW9uYWwpLlxuICAgICAgICAgKiAgICAtIGBzb3J0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBjb2xsYXRpbmcgc2VxdWVuY2UgZm9yIHNvcnRpbmcgcmV0dXJuZWQgaXRlbXM6IOKAnGF1dG/igJ0sIOKAnGFscGhh4oCdLCDigJxhbHBoYV9jYXNl4oCdLCBvciDigJxudW3igJ0uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoYXQuZ2V0KFwiXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9sb2FkKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICBmZXRjaF92MjogYXN5bmMgZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgdGhhdC5nZXRfdjIoXCJcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGF0Ll9sb2FkKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHNwZWNpZmljIGVudGl0eSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHBzID0gc2VydmljZS5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5mZXRjaChmdW5jdGlvbihlcnIsIGFwcHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIGFwcCA9IGFwcHMuaXRlbShcInNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTZWFyY2ggQXBwIEZvdW5kOiBcIiArICEhYXBwKTtcbiAgICAgICAgICogICAgICAgICAgLy8gYGFwcGAgaXMgYW4gQXBwbGljYXRpb24gb2JqZWN0LlxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0byByZXRyaWV2ZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSB3aWxkY2FyZCB2YWx1ZSBcIi1cIiwgaXMgbm90IGFjY2VwdGFibGUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eS5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSB3aWxkY2FyZCB2YWx1ZSBcIi1cIiBpcyB1bmFjY2VwdGFibGUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eS5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybnMge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBUaGUgZW50aXR5LCBvciBgbnVsbGAgaWYgb25lIGlzIG5vdCBmb3VuZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGl0ZW06IGZ1bmN0aW9uKGlkLCBuYW1lc3BhY2UpIHsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNFbXB0eShuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH0gICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHN1cGx5IGEgbm9uLWVtcHR5IG5hbWUuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmFtZXNwYWNlICYmIChuYW1lc3BhY2UuYXBwID09PSAnLScgfHwgbmFtZXNwYWNlLm93bmVyID09PSAnLScpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eSwgd2lsZGNhcmRzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgbmFtZXNwYWNlLiBQbGVhc2UgcmVmaW5lIHlvdXIgc2VhcmNoLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGZ1bGxQYXRoID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnRpdGllc0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXRpZXMgPSB0aGlzLl9lbnRpdGllc0J5TmFtZVtpZF07ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAxICYmICFuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW50aXR5IHdpdGggdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBuYW1lIGFuZCB0aGUgdXNlciBkaWQgbm90XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHRoZW4gd2UganVzdFxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gaXRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDEgJiYgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHNwZWNpZmllZCBhIG5hbWVzcGFjZSwgdGhlbiB3ZSBcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSByZXR1cm4gdGhlIGVudGl0eSBpZiBpdCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmdWxsIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZnVsbFBhdGggPSB0aGlzLnNlcnZpY2UuZnVsbHBhdGgoZW50aXRpZXNbMF0ucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXRpZXNbMF0ucXVhbGlmaWVkUGF0aCA9PT0gZnVsbFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdGllc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0aWVzLmxlbmd0aCA+IDEgJiYgIW5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGVudGl0eSBhbmQgd2UgZGlkbid0XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHRoZW4gd2UgcmV0dXJuIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHNheWluZyB0aGUgbWF0Y2ggaXMgYW1iaWd1b3VzXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFtYmlndW91cyBtYXRjaCBmb3IgbmFtZSAnXCIgKyBpZCArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZW50aXR5LCBhbmQgd2UgZG8gaGF2ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhIG5hbWVzcGFjZSwgc28gd2UgdHJ5IGFuZCBmaW5kIGl0XG4gICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhdGggPSB0aGlzLnNlcnZpY2UuZnVsbHBhdGgoZW50aXRpZXNbaV0ucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eS5xdWFsaWZpZWRQYXRoID09PSBmdWxsUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9ICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gZW50aXR5IG9uIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgY29sbGVjdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWRcbiAgICAgICAgICogcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHNlcnZpY2UuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuY3JlYXRlKHtuYW1lOiBcIk5ld1NlYXJjaEFwcFwifSwgZnVuY3Rpb24oZXJyLCBuZXdBcHApIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YCBvYmplY3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlc3BvbnNlLmRhdGEuZW50cnk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBwcm9wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IHRoYXQuaW5zdGFudGlhdGVFbnRpdHkocHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHkuX2xvYWQocHJvcHMpOyBcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZldGNoT25FbnRpdHlDcmVhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgZW50aXRpZXMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzZXJ2aWNlLmFwcHMoKTtcbiAgICAgICAgICogICAgICBhcHBzLmZldGNoKGZ1bmN0aW9uKGVyciwgYXBwcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgYXBwTGlzdCA9IGFwcHMubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhhcHBMaXN0Lmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBsaXN0IG9mIGVudGl0aWVzOiBgKGVyciwgbGlzdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbGlzdDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmNsb25lKHRoaXMuX2VudGl0aWVzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzYXZlZCBzZWFyY2gsIHdoaWNoIHlvdSBjYW4gdGhlbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlcy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TYXZlZFNlYXJjaCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnNhdmVkU2VhcmNoZXMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2h9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmFja25vd2xlZGdlICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hY2tub3dsZWRnZSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5oaXN0b3J5KTtcbiAgICAgICAgICAgIHRoaXMuc3VwcHJlc3NJbmZvID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnN1cHByZXNzSW5mbyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGNvdW50IG9mIHRyaWdnZXJlZCBhbGVydHMgZm9yIHRoaXMgc2F2ZWRTZWFyY2gsXG4gICAgICAgICAqIGRlZmF1bHRpbmcgdG8gMCB3aGVuIHVuZGVmaW5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICB2YXIgYWxlcnRDb3VudCA9IHNhdmVkU2VhcmNoLmFsZXJ0Q291bnQoKTtcbiAgICAgICAgICogXG4gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIGNvdW50IG9mIHRyaWdnZXJlZCBhbGVydHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgYWxlcnRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0X2NvdW50LCAxMCkgfHwgMDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWNrbm93bGVkZ2VzIHRoZSBzdXBwcmVzc2lvbiBvZiB0aGUgYWxlcnRzIGZyb20gYSBzYXZlZCBzZWFyY2ggYW5kXG4gICAgICAgICAqIHJlc3VtZXMgYWxlcnRpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guYWNrbm93bGVkZ2UoZnVuY3Rpb24oZXJyLCBzZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJBQ0tOT1dMRURHRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzYXZlZCBzZWFyY2ggaXMgYWNrbm93bGVkZ2VkOiBgKGVyciwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9hY2tub3dsZWRnZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGFja25vd2xlZGdlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiYWNrbm93bGVkZ2VcIiwge30sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNwYXRjaGVzIGEgc2F2ZWQgc2VhcmNoLCB3aGljaCBjcmVhdGVzIGEgc2VhcmNoIGpvYiBhbmQgcmV0dXJucyBhIFxuICAgICAgICAgKiBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlIGluIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5kaXNwYXRjaCh7Zm9yY2VfZGlzcGF0Y2g6IGZhbHNlfSwgZnVuY3Rpb24oZXJyLCBqb2IsIHNhdmVkU2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSm9iIFNJRDogXCIsIGpvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgZGlzcGF0Y2hpbmcgdGhpcyBzYXZlZCBzZWFyY2g6XG4gICAgICAgICAqICAgIC0gYGRpc3BhdGNoLm5vd2AgKF9zdHJpbmdfKTogVGhlIHRpbWUgdGhhdCBpcyB1c2VkIHRvIGRpc3BhdGNoIHRoZSBzZWFyY2ggYXMgdGhvdWdoIHRoZSBzcGVjaWZpZWQgdGltZSB3ZXJlIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAgICAqICAgIC0gYGRpc3BhdGNoLipgIChfc3RyaW5nXyk6IE92ZXJ3cml0ZXMgdGhlIHZhbHVlIG9mIHRoZSBzZWFyY2ggZmllbGQgc3BlY2lmaWVkIGluICouXG4gICAgICAgICAqICAgIC0gYHRyaWdnZXJfYWN0aW9uc2AgKF9ib29sZWFuXyk6IEluZGljYXRlcyB3aGV0aGVyIHRvIHRyaWdnZXIgYWxlcnQgYWN0aW9ucy5cbiAgICAgICAgICogICAgLSBgZm9yY2VfZGlzcGF0Y2hgIChfYm9vbGVhbl8pOiBJbmRpY2F0ZXMgd2hldGhlciB0byBzdGFydCBhIG5ldyBzZWFyY2ggaWYgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGlzIHNlYXJjaCBpcyBhbHJlYWR5IHJ1bm5pbmcuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzYXZlZCBzZWFyY2ggaXMgZGlzcGF0Y2hlZDogYChlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9kaXNwYXRjaFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJkaXNwYXRjaFwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBzaWQgPSByZXNwb25zZS5kYXRhLnNpZDtcbiAgICAgICAgICAgICAgICB2YXIgam9iID0gbmV3IHJvb3QuSm9iKHRoYXQuc2VydmljZSwgc2lkLCB0aGF0Lm5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgam9iLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKiBcbiAgICAgICAgICogR2V0cyB0aGUgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYCBmb3IgZmlyZWRBbGVydHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2F2ZWQgc2VhcmNoLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhbGVydHMgPSBzZXJ2aWNlLmZpcmVkQWxlcnRHcm91cHMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEFuIEFsZXJ0R3JvdXAgb2JqZWN0IHdpdGggdGhlXG4gICAgICAgICAqIHNhbWUgbmFtZSBhcyB0aGlzIFNhdmVkU2VhcmNoIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBmaXJlZEFsZXJ0R3JvdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cCh0aGlzLnNlcnZpY2UsIHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgam9iIGhpc3RvcnkgZm9yIGEgc2F2ZWQgc2VhcmNoLCB3aGljaCBpcyBhIGxpc3Qgb2YgXG4gICAgICAgICAqIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHNhdmVkU2VhcmNoLmhpc3Rvcnkoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgam9icywgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBqb2JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYlwiLCBpLCBcIjpcIiwgam9ic1tpXS5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZm9yIHJldHJpZXZpbmcgaGlzdG9yeS4gRm9yIGEgZnVsbCBsaXN0LCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay84LjAuMi9SRVNUUkVGL1JFU1Rwcm9sb2cjUGFnaW5hdGlvbl9hbmRfZmlsdGVyaW5nX3BhcmFtZXRlcnNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5QYWdpbmF0aW9uIGFuZCBGaWx0ZXJpbmcgb3B0aW9uczwvYT4gaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBoaXN0b3J5IGlzIHJldHJpZXZlZDogYChlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9oaXN0b3J5XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgaGlzdG9yeTogZnVuY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJoaXN0b3J5XCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGpvYnMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnkgfHwgW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYkRhdGEgPSByZXNwb25zZS5kYXRhLmVudHJ5W2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMoam9iRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhhdC5zZXJ2aWNlLCBqb2JEYXRhLm5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBqb2IuX2xvYWQoam9iRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBqb2JzLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgc3VwcHJlc3Npb24gc3RhdGUgb2YgYSBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guaGlzdG9yeShmdW5jdGlvbihlcnIsIHN1cHByZXNzaW9uU3RhdGUsIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNUQVRFOiBcIiwgc3VwcHJlc3Npb25TdGF0ZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzdXBwcmVzc2lvbiBzdGF0ZSBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBzdXBwcmVzc2lvblN0YXRlLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L3N1cHByZXNzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgc3VwcHJlc3NJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdXBwcmVzc1wiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIHNhdmVkIHNlYXJjaCBvbiB0aGUgc2VydmVyLiBcbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoZSBzZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQsIGV2ZW4gd2hlbiBpdCBpc24ndCBiZWluZyBtb2RpZmllZC5cbiAgICAgICAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgaXQsIHRoaXMgbWV0aG9kIHdpbGwgZmV0Y2ggdGhlIHNlYXJjaCBzdHJpbmcgZnJvbVxuICAgICAgICAgKiB0aGUgc2VydmVyIG9yIGZyb20gdGhlIGxvY2FsIGNhY2hlLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgc2VhcmNoIHdpdGguIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzYXZlZHNlYXJjaHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNhdmVkIHNlYXJjaCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyB1cGRhdGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSB0aGlzLl9zdXBlcjtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5mZXRjaChmdW5jdGlvbihlcnIsIHNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHNlYXJjaC5wcm9wZXJ0aWVzKCkuc2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLmNhbGwoc2VhcmNoLCBwYXJhbXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzYXZlZCBzZWFyY2hlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc2F2ZWQgXG4gICAgICogc2VhcmNoZXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc2F2ZWQgc2VhcmNoLlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovXG4gICAgcm9vdC5TYXZlZFNlYXJjaGVzID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc2F2ZWRTZWFyY2hlcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBzYXZlZCBzZWFyY2guIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzYXZlZHNlYXJjaHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNhdmVkIHNlYXJjaCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlNhdmVkU2VhcmNoKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc2AuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHN0b3JhZ2UgcGFzc3dvcmQsIHdoaWNoIHlvdSBjYW4gdGhlbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzdG9yYWdlL3Bhc3N3b3Jkcy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuU3RvcmFnZVBhc3N3b3JkID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5zdG9yYWdlUGFzc3dvcmRzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IHN0b3JhZ2UgcGFzc3dvcmQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzdG9yYWdlIHBhc3N3b3Jkcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc3RvcmFnZSBcbiAgICAgKiBwYXNzd29yZHMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzdG9yYWdlL3Bhc3N3b3Jkc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LlN0b3JhZ2VQYXNzd29yZHMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnN0b3JhZ2VQYXNzd29yZHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHN0b3JhZ2UgcGFzc3dvcmQuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsXG4gICAgICAgICAqIHNlZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUYWNjZXNzI1BPU1Rfc3RvcmFnZS4yRnBhc3N3b3Jkc1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgKiBQT1NUIHN0b3JhZ2UvcGFzc3dvcmRzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TdG9yYWdlUGFzc3dvcmQodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzYC4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZmlyZWQgYWxlcnQuIFxuICAgICAqIFlvdSBjYW4gcmV0cmlldmUgc2V2ZXJhbCBvZiB0aGUgZmlyZWQgYWxlcnQncyBwcm9wZXJ0aWVzIGJ5XG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gbmFtZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhbGVydHMvZmlyZWRfYWxlcnRzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuZmlyZWRBbGVydHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBhY3Rpb25zIChzdWNoIGFzIG5vdGlmeWluZyBieSBlbWFpbCwgcnVubmluZyBhIFxuICAgICAgICAgKiBzY3JpcHQsIGFkZGluZyB0byBSU1MsIHRyYWNraW5nIGluIEFsZXJ0IE1hbmFnZXIsIGFuZCBlbmFibGluZyBcbiAgICAgICAgICogc3VtbWFyeSBpbmRleGluZykuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgYWN0aW9ucywgYW4gZW1wdHkge0FycmF5fSBpZiBubyBhY3Rpb25zXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBhY3Rpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS5hY3Rpb25zIHx8IFtdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyB0eXBlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBhbGVydCdzIHR5cGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBhbGVydFR5cGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmFsZXJ0X3R5cGUgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBpcyBhIHNldCBvZiBldmVudHMgKGRpZ2VzdCkgb3IgYSBzaW5nbGVcbiAgICAgICAgICogZXZlbnQgKHBlciByZXN1bHQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlc3VsdCBpcyBhIGRpZ2VzdCwgZmFsc2UgaWYgcGVyIHJlc3VsdFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgaXNEaWdlc3RNb2RlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdGhpcyBwcm9wZXJ0eSB0byBhIEJvb2xlYW5cbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucHJvcGVydGllcygpLmRpZ2VzdF9tb2RlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSByZW5kZXJlZCBleHBpcmF0aW9uIHRpbWUgZm9yIHRoaXMgYWxlcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgZXhwaXJhdGlvblRpbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmV4cGlyYXRpb25fdGltZV9yZW5kZXJlZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBzYXZlZCBzZWFyY2ggZm9yIHRoaXMgYWxlcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHNhdmVkIHNlYXJjaCBuYW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNhdmVkU2VhcmNoTmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuc2F2ZWRzZWFyY2hfbmFtZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBzZXZlcml0eSBvbiBhIHNjYWxlIG9mIDEgdG8gMTAsIHdpdGggMSBiZWluZyB0aGVcbiAgICAgICAgICogaGlnaGVzdCBzZXZlcml0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSB0aGlzIGFsZXJ0J3Mgc2V2ZXJpdHksIC0xIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNldmVyaXR5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS5zZXZlcml0eSwgMTApIHx8IC0xO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBzZWFyY2ggSUQgKFNJRCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhpcyBhbGVydCdzIFNJRCwgb3Ige251bGx9IGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBzaWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnNpZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIHRoaXMgYWxlcnQgd2FzIHRyaWdnZXJlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSBUaGlzIGFsZXJ0J3MgdHJpZ2dlciB0aW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJUaW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyX3RpbWUgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGlzIGFsZXJ0J3MgcmVuZGVyZWQgdHJpZ2dlciB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhpcyBhbGVydCdzIHJlbmRlcmVkIHRyaWdnZXIgdGltZSwgb3Ige251bGx9IGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICB0cmlnZ2VyVGltZVJlbmRlcmVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyX3RpbWVfcmVuZGVyZWQgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIGluIFNwbHVuayA0LjMgYW5kIGxhdGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgdHJpZ2dlcmVkIGFsZXJ0cywgb3IgLTEgaWYgbm90IHNwZWNpZmllZC5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJlZEFsZXJ0Q291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJlZF9hbGVydHMsIDEwKSB8fCAtMTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBmb3IgdGhlIG5ldyBhbGVydCBncm91cC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBhbGVydCBncm91cCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHMve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkZpcmVkQWxlcnRHcm91cCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5maXJlZEFsZXJ0cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGB0cmlnZ2VyZWRfYWxlcnRfY291bnRgIHByb3BlcnR5LCB0aGUgY291bnRcbiAgICAgICAgICogb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0c1xuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBjb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0X2NvdW50LCAxMCkgfHwgMDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBmaXJlZCBpbnN0YW5jZXMgb2YgdGhpcyBhbGVydCwgd2hpY2ggaXNcbiAgICAgICAgICogYSBsaXN0IG9mIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRgIGluc3RhbmNlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYWxlcnRHcm91cCA9IHNlcnZpY2UuZmlyZWRBbGVydEdyb3VwcygpLml0ZW0oXCJNeUFsZXJ0XCIpO1xuICAgICAgICAgKiAgICAgIGFsZXJ0R3JvdXAubGlzdChmdW5jdGlvbihlcnIsIGZpcmVkQWxlcnRzLCBhbGVydCkge1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZmlyZWRBbGVydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmlyZWQgYWxlcnRcIiwgaSwgXCI6XCIsIGZpcmVkQWxlcnRzW2ldLnNpZCk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGZpcmVkIGFsZXJ0cyBhcmUgcmV0cmlldmVkOiBgKGVyciwgZmlyZWRBbGVydHMsIGFsZXJ0R3JvdXApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cFxuICAgICAgICAgKi9cbiAgICAgICAgbGlzdDogZnVuY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgZmlyZWRBbGVydHMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnkgfHwgW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0RGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhmaXJlZEFsZXJ0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0ID0gbmV3IHJvb3QuRmlyZWRBbGVydCh0aGF0LnNlcnZpY2UsIGZpcmVkQWxlcnREYXRhLm5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVkQWxlcnQuX2xvYWQoZmlyZWRBbGVydERhdGEpO1xuICAgICAgICAgICAgICAgICAgICBmaXJlZEFsZXJ0cy5wdXNoKGZpcmVkQWxlcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBmaXJlZEFsZXJ0cywgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlzdCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZpcmVkIGFsZXJ0cyBmb3IgYSBzYXZlZCBzZWFyY2guIFlvdSBjYW5cbiAgICAgKiBjcmVhdGUgYW5kIGxpc3Qgc2F2ZWQgc2VhcmNoZXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3JcbiAgICAgKiBnZXQgYSBzcGVjaWZpYyBhbGVydCBncm91cC4gXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhbGVydHMvZmlyZWRfYWxlcnRzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbiA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmZpcmVkQWxlcnRzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBhbGVydCBncm91cC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgYWxlcnQgZ3JvdXAuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cCh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHByZXNzIHJlbW92aW5nIGFsZXJ0cyB2aWEgdGhlIGZpcmVkIGFsZXJ0cyBlbmRwb2ludC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUbyByZW1vdmUgYW4gYWxlcnQsIHJlbW92ZSB0aGUgc2F2ZWQgc2VhcmNoIHdpdGggdGhlIHNhbWUgbmFtZS5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25gLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFudGlhdGVFbnRpdHkgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaW5zdGFudGlhdGVFbnRpdHkpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBTcGx1bmsgYXBwIHRoYXQgeW91IGNhbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkFwcGxpY2F0aW9uID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiB1cGRhdGUgdG8gZ2V0IHRoZSB1cGRhdGVkIFxuICAgICAgICAgKiBpdGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25VcGRhdGU6IHRydWUsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5hcHBzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgU3BsdW5rIGFwcC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZXR1cEluZm8gID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNldHVwSW5mbyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUluZm8gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXBkYXRlSW5mbyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBzZXR1cCBpbmZvcm1hdGlvbiBmb3IgYSBTcGx1bmsgYXBwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHAgPSBzZXJ2aWNlLmFwcHMoKS5pdGVtKFwiYXBwXCIpO1xuICAgICAgICAgKiAgICAgIGFwcC5zZXR1cChmdW5jdGlvbihlcnIsIGluZm8sIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNFVFVQIElORk86IFwiLCBpbmZvKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc2V0dXAgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkOiBgKGVyciwgaW5mbywgYXBwKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfS9zZXR1cFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldHVwSW5mbzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwic2V0dXBcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgYW55IGluZm9ybWF0aW9uIGZvciBhbiB1cGRhdGUgdG8gYSBsb2NhbGx5LWluc3RhbGxlZCBTcGx1bmsgYXBwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHAgPSBzZXJ2aWNlLmFwcHMoKS5pdGVtKFwiTXlBcHBcIik7XG4gICAgICAgICAqICAgICAgYXBwLnVwZGF0ZUluZm8oZnVuY3Rpb24oZXJyLCBpbmZvLCBhcHApIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJVUERBVEUgSU5GTzogXCIsIGluZm8pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB1cGRhdGUgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkOiBgKGVyciwgaW5mbywgYXBwKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfS91cGRhdGVcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJ1cGRhdGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIFNwbHVuayBhcHBzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBhcHBsaWNhdGlvbnMgXG4gICAgICogdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgYXBwLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWxcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuQXBwbGljYXRpb25zID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5hcHBzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBhcHAuIEZvciBkZXRhaWxzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RhcHBzI1BPU1RfYXBwcy4yRmxvY2FsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UE9TVCBhcHBzL2xvY2FsPC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5BcHBsaWNhdGlvbih0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZXJ2ZXIvaW5mb1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNlcnZlckluZm9cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuU2VydmVySW5mbyA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuaW5mbztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gXCJzZXJ2ZXItaW5mb1wiO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBTcGx1bmsgdXNlciwgd2hpY2ggeW91IGNhbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhdXRoZW50aWNhdGlvbi91c2Vycy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Vc2VyXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlVzZXIgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnVzZXJzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBTcGx1bmsgdXNlcm5hbWUuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2VyXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB1c2Vycy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgdXNlcnMgdXNpbmcgXG4gICAgICogdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgdXNlci5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhdXRoZW50aWNhdGlvbi91c2Vyc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LlVzZXJzID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudXNlcnM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgdXNlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIG5ldyB1c2VyLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjgjdXNlcmF1dGhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Vc2VyIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlVzZXJ9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlVzZXIodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzYC4gXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Vc2Vyc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdXNlci4gXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIGVuZHBvaW50IHJlcXVpcmVzIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUo4I3VzZXJhdXRocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VXNlciBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBlbnRpdHk6IGAoZXJyLCBjcmVhdGVkRW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbmRwb2ludCByZXF1aXJlcyB1cyB0byB1c2UgdGhlIHBhc3NlZC1pbiBuYW1lXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHtuYW1lOiBwYXJhbXMubmFtZX07XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhhdC5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBhYm9ydGVkLCBzbyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayB2aWV3LCB3aGljaCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3Mve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVmlld1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5WaWV3ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy52aWV3cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmlldy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB2aWV3cy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgdmlld3MgdXNpbmcgXG4gICAgICogdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgdmlldy5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL3VpL3ZpZXdzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVmlld3NcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuVmlld3MgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudmlld3M7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgdmlldy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHZpZXcuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNQT1NUX3NjaGVkdWxlZC4yRnZpZXdzLjJGLjdCbmFtZS43RFwiIHRhcmdldD1cIl9ibGFua1wiPlBPU1Qgc2NoZWR1bGVkL3ZpZXdzL3tuYW1lfTwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlZpZXcodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5WaWV3c2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3c2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBpbmRleCwgd2hpY2ggeW91IGNhbiB1cGRhdGUgYW5kIHN1Ym1pdCBldmVudHMgdG8uXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzL25hbWVcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5JbmRleFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5JbmRleCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmluZGV4ZXMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5JbmRleGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbmRleC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXh9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXZlbnQgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VibWl0RXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdHMgYW4gZXZlbnQgdG8gdGhpcyBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgaW5kZXggPSBzZXJ2aWNlLmluZGV4ZXMoKS5pdGVtKFwiX2ludGVybmFsXCIpO1xuICAgICAgICAgKiAgICAgIGluZGV4LnN1Ym1pdEV2ZW50KFwiQSBuZXcgZXZlbnRcIiwge3NvdXJjZXR5cGU6IFwibXlzb3VyY2V0eXBlXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdCwgaW5kZXgpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgZXZlbnQ6IFwiLCByZXN1bHQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgVGhlIHRleHQgZm9yIHRoaXMgZXZlbnQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHBhcmFtZXRlcnMgZm9yIGluZGV4aW5nOiBcbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIHZhbHVlIHRvIHBvcHVsYXRlIGluIHRoZSBob3N0IGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuIFxuICAgICAgICAgKiAgICAtIGBob3N0X3JlZ2V4YCAoX3N0cmluZ18pOiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGV4dHJhY3QgdGhlIGhvc3QgdmFsdWUgZnJvbSBlYWNoIGV2ZW50LiBcbiAgICAgICAgICogICAgLSBgc291cmNlYCAoX3N0cmluZ18pOiBUaGUgc291cmNlIHZhbHVlIHRvIGZpbGwgaW4gdGhlIG1ldGFkYXRhIGZvciB0aGlzIGlucHV0J3MgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBzb3VyY2V0eXBlYCAoX3N0cmluZ18pOiBUaGUgc291cmNldHlwZSB0byBhcHBseSB0byBldmVudHMgZnJvbSB0aGlzIGlucHV0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgc3VibWl0dGVkOiBgKGVyciwgcmVzdWx0LCBpbmRleClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcmVjZWl2ZXJzL3NpbXBsZT9pbmRleD17bmFtZX1cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICAgICAqL1xuICAgICAgICBzdWJtaXRFdmVudDogZnVuY3Rpb24oZXZlbnQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIHRoZSBpbmRleCBuYW1lXG4gICAgICAgICAgICBwYXJhbXNbXCJpbmRleFwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5sb2coZXZlbnQsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCwgdGhhdCk7IFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLnZlcnNpb25Db21wYXJlKFwiNS4wXCIpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluZGV4ZXMgY2Fubm90IGJlIHJlbW92ZWQgaW4gU3BsdW5rIDQueFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAgICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgaW5kZXhlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgaW5kZXhlcyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkluZGV4ZXMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5pbmRleGVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGluZGV4LiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjMjaW5kZXhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5JbmRleCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkluZGV4KHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgaW5kZXhlcyA9IHNlcnZpY2UuaW5kZXhlcygpO1xuICAgICAgICAgKiAgICAgIGluZGV4ZXMuY3JlYXRlKFwiTmV3SW5kZXhcIiwge2Fzc3VyZVVURjg6IHRydWV9LCBmdW5jdGlvbihlcnIsIG5ld0luZGV4KSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgQSBuYW1lIGZvciB0aGlzIGluZGV4LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjMjaW5kZXhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5JbmRleCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBpbmRleDogYChlcnIsIGNyZWF0ZWRJbmRleClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChuYW1lKSAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gbmFtZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW1zLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtc1tcIm5hbWVcIl0gPSBuYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgc3RhbnphLCB3aGljaCB5b3UgY2FuIHVwZGF0ZSBhbmQgcmVtb3ZlLCBmcm9tIGEgXG4gICAgICogY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX0ve25hbWV9YFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuQ29uZmlndXJhdGlvblN0YW56YSA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZSA9PT0gXCJkZWZhdWx0XCIgPyBcIl9uZXdcIiA6IHRoaXMubmFtZTtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5jb25maWd1cmF0aW9ucyArIFwiL2NvbmYtXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5maWxlKSArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG5ldyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIGZpbGUsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHN0YW56YXMgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgZmlsZS4gWW91IGNhblxuICAgICAqIGNyZWF0ZSBhbmQgbGlzdCBzdGFuemFzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIFxuICAgICAqIHN0YW56YS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBjb25maWdzL2NvbmYte2ZpbGV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuQ29uZmlndXJhdGlvbkZpbGUgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHsgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmNvbmZpZ3VyYXRpb25zICsgXCIvY29uZi1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgc3RhbnphIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBZb3UgY2Fubm90IGRpcmVjdGx5IHVwZGF0ZSB0aGUgYENvbmZpZ3VyYXRpb25TdGFuemFgIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB2aWV3aW5nIGBjb25maWdzL2NvbmYte2ZpbGV9L19uZXdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIGdldERlZmF1bHRTdGFuemE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkNvbmZpZ3VyYXRpb25TdGFuemEodGhpcy5zZXJ2aWNlLCB0aGlzLm5hbWUsIFwiZGVmYXVsdFwiLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIHN0YW56YSBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBrZXktdmFsdWUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBzdGFuemEuIFxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9uU3RhbnphKHRoaXMuc2VydmljZSwgdGhpcy5uYW1lLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHN0YW56YSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgZmlsZSA9IHNlcnZpY2UuY29uZmlndXJhdGlvbnMoKS5pdGVtKFwicHJvcHNcIik7XG4gICAgICAgICAqICAgICAgZmlsZS5jcmVhdGUoXCJteV9zdGFuemFcIiwgZnVuY3Rpb24oZXJyLCBuZXdTdGFuemEpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhbnphTmFtZSBBIG5hbWUgZm9yIHRoaXMgc3RhbnphLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEEgZGljdGlvbmFyeSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gcHV0IGluIHRoaXMgc3RhbnphLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgY3JlYXRlZCBzdGFuemE6IGAoZXJyLCBjcmVhdGVkU3RhbnphKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBjb25maWdzL2NvbmYte2ZpbGV9XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihzdGFuemFOYW1lLCB2YWx1ZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3Qoc3RhbnphTmFtZSkgJiYgdXRpbHMuaXNGdW5jdGlvbih2YWx1ZXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IHN0YW56YU5hbWU7XG4gICAgICAgICAgICAgICAgc3RhbnphTmFtZSA9IHZhbHVlcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbih2YWx1ZXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgICAgICAgICB2YWx1ZXNbXCJuYW1lXCJdID0gc3RhbnphTmFtZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKHZhbHVlcywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY29uZmlndXJhdGlvbiBmaWxlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgXG4gICAgICogY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBmaWxlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHByb3BlcnRpZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5Db25maWd1cmF0aW9ucyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBcbiAgICAgICAgICogZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zXG4gICAgICAgICAqIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnByb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvbkZpbGUodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlLm93bmVyID09PSBcIi1cIiB8fCBuYW1lc3BhY2UuYXBwID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb25zIHJlcXVpcmVzIGEgbm9uLXdpbGRjYXJkIG93bmVyL2FwcFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGNvbmZpZ3VyYXRpb25zID0gc2VydmljZS5jb25maWd1cmF0aW9ucygpO1xuICAgICAgICAgKiAgICAgIGNvbmZpZ3VyYXRpb25zLmNyZWF0ZShcIm15cHJvcHNcIiwgZnVuY3Rpb24oZXJyLCBuZXdGaWxlKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lIEEgbmFtZSBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlOiBgKGVyciwgY3JlYXRlZEZpbGUpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHByb3BlcnRpZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbXCJfX2NvbmZcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCB7X19jb25mOiBmaWxlbmFtZX0sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3IHJvb3QuQ29uZmlndXJhdGlvbkZpbGUodGhhdC5zZXJ2aWNlLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eS5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIGRvZXNGaWxlRXhpc3Q6IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgIC8vIDEuIEZldGNoIGZpbGVzIGxpc3RcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldF92MihcIlwiLCAge19fY29uZjogZmlsZW5hbWV9KTtcblxuICAgICAgICAgICAgICAgIC8vIDIuIEZpbHRlciB0aGUgZmlsZXNcbiAgICAgICAgICAgICAgICB2YXIgZmlsZXMgPSByZXNwb25zZT8uYm9keT8uZW50cnk/LmZpbHRlcihmID0+IGYubmFtZSA9PT0gZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIDIuIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNvZGU6XCJGSUxFX05PVF9GT1VORFwiLCBtZXNzYWdlOiBgRmlsZSB3aXRoIHRoZSBuYW1lICcke2ZpbGVuYW1lfScgZG9lcyBub3QgZXhpc3QuYH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gMy4gQ3JlYXRlIGEgbG9jYWwgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlndXJhdGlvbkZpbGUgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGF0LnNlcnZpY2UsIGZpbGVuYW1lKTtcblxuICAgICAgICAgICAgICAgIC8vIDQuIExvYWQgdGhlIGZpbGUgY29udGVudFxuICAgICAgICAgICAgICAgIHZhciBmZXRjaGVkRmlsZSA9IGF3YWl0IGNvbmZpZ3VyYXRpb25GaWxlLmZldGNoX3YyKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge2ZpbGU6IGZldGNoZWRGaWxlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3JDb2RlOlwiU1lTVEVNX0VSUk9SXCIsIGVycm9yTWVzc2FnZTogZXJyb3J9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRvZXNTdGFuemFFeGlzdDogYXN5bmMgZnVuY3Rpb24oZmlsZSwgc3RhbnphKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIDEuIGNoZWNrIGlmIHRoZSBzdGFuemEgZXhpc3RzXG4gICAgICAgICAgICAgICAgdmFyIGZldGNoZWRTdGFuemEgPSBmaWxlLml0ZW0oc3RhbnphKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZighZmV0Y2hlZFN0YW56YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjb2RlOlwiU1RBTlpBX05PVF9GT1VORFwiLCBtZXNzYWdlOiBgU3RhbnphIHdpdGggdGhlIG5hbWUgJyR7c3RhbnphfScgZG9lcyBub3QgZXhpc3QuYH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3N0YW56YTogZmV0Y2hlZFN0YW56YX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckNvZGU6XCJTWVNURU1fRVJST1JcIiwgZXJyb3JNZXNzYWdlOiBlcnJvcn07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlX3YyOiBhc3luYyBmdW5jdGlvbiAoY29uZmlncywgc3ZjLCBmaWxlbmFtZSwgc3RhbnphLCBrZXlWYWx1ZU1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgLy8gMS4gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzXG4gICAgICAgICAgICB2YXIgZG9lc0ZpbGVFeGlzdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb2VzRmlsZUV4aXN0KGZpbGVuYW1lKTtcbiAgICAgICAgICAgIHZhciBjb25maWdGaWxlID0gZG9lc0ZpbGVFeGlzdFJlc3BvbnNlLmZpbGU7XG5cbiAgICAgICAgICAgIC8vIDIuIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBmaWxlXG4gICAgICAgICAgICBpZighY29uZmlnRmlsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRvZXNGaWxlRXhpc3RSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDcmVhdGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuLi5cIik7XG5cbiAgICAgICAgICAgICAgICB0aGF0LmNyZWF0ZSggeyBfX2NvbmY6IGZpbGVuYW1lIH0sIFxuICAgICAgICAgICAgICAgICAgICAoZXJyLCBuZXdGaWxlKSA9PiBjb25zb2xlLmxvZyhgQ29uZmlndXJhdGlvbiBGaWxlIGNyZWF0ZWQ6ICR7ZmlsZW5hbWV9YCkgKTtcblxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSggdGhhdC5zZXJ2aWNlLCBmaWxlbmFtZSApO1xuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUgPSBhd2FpdCBjb25maWdGaWxlLmZldGNoX3YyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDIuIENoZWNrIGlmIHRoZSBzdGFuemEgZXhpc3RzXG4gICAgICAgICAgICB2YXIgZG9lc1N0YW56YUV4aXN0UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvZXNTdGFuemFFeGlzdChjb25maWdGaWxlLCBzdGFuemEpO1xuICAgICAgICAgICAgdmFyIGNvbmZpZ1N0YW56YSA9IGRvZXNTdGFuemFFeGlzdFJlc3BvbnNlLnN0YW56YTtcblxuICAgICAgICAgICAgLy8gMy4gSWYgdGhlIHN0YW56YSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgYSBuZXcgc3RhbnphIHdpdGggZ2l2ZW4ga2V5VmFsdWVNYXBcbiAgICAgICAgICAgIGlmKCFjb25maWdTdGFuemEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkb2VzU3RhbnphRXhpc3RSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDcmVhdGluZyBhIG5ldyBjb25maWd1cmF0aW9uIHN0YW56YS4uLlwiKTtcblxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUuY3JlYXRlKHN0YW56YSwga2V5VmFsdWVNYXAsIGZ1bmN0aW9uIChlcnIsIG5ld1N0YW56YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29uZmlndXJhdGlvbiBTdGFuemEgY3JlYXRlZDogJHtzdGFuemF9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA0LiBJZiB0aGUgc3RhbnphIGV4aXN0cywgdXBkYXRlIGl0IHdpdGggdGhlIGtleVZhbHVlTWFwXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWdTdGFuemEudXBkYXRlKGtleVZhbHVlTWFwLCAoZXJyLCB1cGRhdGVkU3RhbnphKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIFN0YW56YSB1cGRhdGVkOiAke3N0YW56YX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZWFyY2ggam9iLiBZb3UgY2FuIHBlcmZvcm0gZGlmZmVyZW50IG9wZXJhdGlvbnNcbiAgICAgKiBvbiB0aGlzIGpvYiwgc3VjaCBhcyByZWFkaW5nIGl0cyBzdGF0dXMsIGNhbmNlbGluZyBpdCwgYW5kIGdldHRpbmcgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5Kb2IgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuam9icyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzaWQgVGhlIHNlYXJjaCBJRCBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2J9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBzaWQsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gc2lkO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLnNpZCA9IHNpZDtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNhbmNlbCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQcmV2aWV3ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmRpc2FibGVQcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlUHJldmlldyAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZW5hYmxlUHJldmlldyk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cyAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmV2ZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpbmFsaXplKTtcbiAgICAgICAgICAgIHRoaXMucGF1c2UgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucGF1c2UpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVzdWx0cyk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaGxvZyAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNlYXJjaGxvZyk7XG4gICAgICAgICAgICB0aGlzLnNldFByaW9yaXR5ICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNldFByaW9yaXR5KTtcbiAgICAgICAgICAgIHRoaXMuc2V0VFRMICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0VFRMKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeSAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VtbWFyeSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnRpbWVsaW5lKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2ggICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudG91Y2gpO1xuICAgICAgICAgICAgdGhpcy51bnBhdXNlICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51bnBhdXNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FuY2VscyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IuY2FuY2VsKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNBTkNFTExFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNlYXJjaCBpcyBkb25lOiBgKGVycilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImNhbmNlbFwifSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyBwcmV2aWV3IGdlbmVyYXRpb24gZm9yIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5kaXNhYmxlUHJldmlldyhmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBSRVZJRVcgRElTQUJMRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoaXMgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBkaXNhYmxlUHJldmlldzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJkaXNhYmxlcHJldmlld1wifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHByZXZpZXcgZ2VuZXJhdGlvbiBmb3IgYSBzZWFyY2ggam9iLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5kaXNhYmxlUHJldmlldyhmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBSRVZJRVcgRU5BQkxFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhpcyBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGVuYWJsZVByZXZpZXc6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiZW5hYmxlcHJldmlld1wifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBldmVudHMgb2YgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5ldmVudHMoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgZXZlbnRzLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZHM6IFwiLCBldmVudHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBldmVudHMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRmV2ZW50c1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9ldmVudHM8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnRzIGFyZSByZXRyaWV2ZWQ6IGAoZXJyLCBldmVudHMsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vZXZlbnRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGV2ZW50czogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm91dHB1dF9tb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7IFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJldmVudHNcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmFsaXplcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IuZmluYWxpemUoZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgRklOQUxJWkVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGZpbmFsaXplOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImZpbmFsaXplXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoaXMgc2VhcmNoIGpvYidzIGV2ZW50cyBvciByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBPbmUgb2Yge1wiZXZlbnRzXCIsIFwicHJldmlld1wiLCBcInJlc3VsdHNcIn0uXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnM6XG4gICAgICAgICAqICAgIC0gYHBhZ2VzaXplYCAoX2ludGVnZXJfKTogVGhlIG51bWJlciBvZiBpdGVtcyB0byByZXR1cm4gb24gZWFjaCByZXF1ZXN0LiBEZWZhdWx0cyB0byBhcyBtYW55IGFzIHBvc3NpYmxlLlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhdG9yIG9iamVjdCB3aXRoIGEgYG5leHQoY2FsbGJhY2spYCBtZXRob2QsIHdoZXJlIGBjYWxsYmFja2AgaXMgb2YgdGhlIGZvcm0gYChlcnIsIHJlc3VsdHMsIGhhc01vcmVSZXN1bHRzKWAuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vcmVzdWx0c1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBpdGVyYXRvcjogZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuUGFnaW5hdGVkRW5kcG9pbnRJdGVyYXRvcih0aGlzW3R5cGVdLCBwYXJhbXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXVzZXMgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnBhdXNlKGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFBBVVNFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwYXVzZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJwYXVzZVwifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEdldHMgdGhlIHByZXZpZXcgcmVzdWx0cyBmb3IgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5wcmV2aWV3KHtjb3VudDogMTB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkczogXCIsIHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBwcmV2aWV3IHJlc3VsdHMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnJlc3VsdHNfcHJldmlld1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzX3ByZXZpZXc8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcHJldmlldyByZXN1bHRzIGFyZSByZXRyaWV2ZWQgOiBgKGVyciwgcmVzdWx0cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzX3ByZXZpZXdcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgcHJldmlldzogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm91dHB1dF9tb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7IFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJyZXN1bHRzX3ByZXZpZXdcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHJlc3VsdHMgZm9yIGEgc2VhcmNoIGpvYiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgY2FuIGdldCBgdW5kZWZpbmVkYCBmb3IgaXRzIGByZXN1bHRzYCBwYXJhbWV0ZXIgaWYgdGhlXG4gICAgICAgICAqIGpvYiBpcyBub3QgeWV0IGRvbmUuIFRvIGF2b2lkIHRoaXMsIHVzZSB0aGUgYEpvYi50cmFjaygpYCBtZXRob2QgdG9cbiAgICAgICAgICogd2FpdCB1bnRpbCB0aGUgam9iIGlzIGNvbXBsZXRlIHByaW9yIHRvIGZldGNoaW5nIHRoZSByZXN1bHRzIHdpdGhcbiAgICAgICAgICogdGhpcyBtZXRob2QuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnJlc3VsdHMoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGRzOiBcIiwgcmVzdWx0cy5yZXN1bHRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBzZWFyY2ggcmVzdWx0cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGcmVzdWx0c1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzPC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlc3VsdHMgYXJlIHJldHJpZXZlZDogYChlcnIsIHJlc3VsdHMsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vcmVzdWx0c1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICByZXN1bHRzOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwicmVzdWx0c1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgc2VhcmNoIGxvZyBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNlYXJjaGxvZyhmdW5jdGlvbihlcnIsIHNlYXJjaGxvZywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKHNlYXJjaGxvZyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggbG9nIGFuZCBqb2I6IGAoZXJyLCBzZWFyY2hsb2csIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc2VhcmNoLmxvZ1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2hsb2c6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInNlYXJjaC5sb2dcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcHJpb3JpdHkgZm9yIHRoaXMgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5zZXRQcmlvcml0eSg2LCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBQUklPUklUWSBTRVRcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgcHJpb3JpdHkgKGFuIGludGVnZXIgYmV0d2VlbiAxLTEwKS4gQSBoaWdoZXIgdmFsdWUgbWVhbnMgYSBoaWdoZXIgcHJpb3JpdHkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNldFByaW9yaXR5OiBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJzZXRwcmlvcml0eVwiLCBwcmlvcml0eTogdmFsdWV9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpbWUgdG8gbGl2ZSAoVFRMKSBmb3IgdGhlIHNlYXJjaCBqb2IsIHdoaWNoIGlzIHRoZSB0aW1lIGJlZm9yZVxuICAgICAgICAgKiB0aGUgc2VhcmNoIGpvYiBleHBpcmVzIGFmdGVyIGl0IGhhcyBiZWVuIGNvbXBsZXRlZCBhbmQgaXMgc3RpbGwgYXZhaWxhYmxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNldFRUTCgxMDAwLCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBUVEwgU0VUXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgVGhlIHRpbWUgdG8gbGl2ZSwgaW4gc2Vjb25kcy4gXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNldFRUTDogZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwic2V0dHRsXCIsIHR0bDogdmFsdWV9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHN1bW1hcnkgZm9yIHRoaXMgc2VhcmNoIGpvYiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnN1bW1hcnkoe3RvcF9jb3VudDogNX0sIGZ1bmN0aW9uKGVyciwgc3VtbWFyeSwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3VtbWFyeTogXCIsIHN1bW1hcnkpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBzdW1tYXJ5LiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZzdW1tYXJ5XCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3N1bW1hcnk8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc3VtbWFyeSBhbmQgc2VhcmNoIGpvYjogYChlcnIsIHN1bW1hcnksIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc3VtbW1hcnlcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc3VtbWFyeTogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdW1tYXJ5XCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSB0aW1lbGluZSBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnRpbWVsaW5lKHt0aW1lX2Zvcm1hdDogXCIlY1wifSwgZnVuY3Rpb24oZXJyLCBqb2IsIHRpbWVsaW5lKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGltZWxpbmU6IFwiLCB0aW1lbGluZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIHRpbWVsaW5lLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZ0aW1lbGluZVwiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS90aW1lbGluZSA8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgdGltZWxpbmUgYW5kIHNlYXJjaCBqb2I6IGAoZXJyLCB0aW1lbGluZSwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS90aW1lbGluZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICB0aW1lbGluZTogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJ0aW1lbGluZVwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVG91Y2hlcyBhIHNlYXJjaCBqb2IsIHdoaWNoIG1lYW5zIGV4dGVuZGluZyB0aGUgZXhwaXJhdGlvbiB0aW1lIG9mIFxuICAgICAgICAgKiB0aGUgc2VhcmNoIHRvIG5vdyBwbHVzIHRoZSB0aW1lIHRvIGxpdmUgKFRUTCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudG91Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFRPVUNIRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRvdWNoOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInRvdWNoXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU3RhcnRzIHBvbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIHNlYXJjaCBqb2IsIGFuZCBmaXJlcyBjYWxsYmFja3NcbiAgICAgICAgICogdXBvbiBlYWNoIHN0YXR1cyBjaGFuZ2UuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczpcbiAgICAgICAgICogICAgLSBgcGVyaW9kYCAoX2ludGVnZXJfKTogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGVhY2ggcG9sbC4gRGVmYXVsdHMgdG8gNTAwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gY2FsbGJhY2tzIEEgZGljdGlvbmFyeSBvZiBvcHRpb25hbCBjYWxsYmFja3M6XG4gICAgICAgICAqICAgIC0gYHJlYWR5YDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgd2hlbiB0aGUgam9iJ3MgcHJvcGVydGllcyBmaXJzdCBiZWNvbWUgYXZhaWxhYmxlLlxuICAgICAgICAgKiAgICAtIGBwcm9ncmVzc2A6IEEgZnVuY3Rpb24gYChqb2IpYCBpbnZva2VkIHdoZW5ldmVyIG5ldyBqb2IgcHJvcGVydGllcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgKiAgICAtIGBkb25lYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgaWYgdGhlIGpvYiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LiBObyBmdXJ0aGVyIHBvbGxpbmcgaXMgZG9uZS5cbiAgICAgICAgICogICAgLSBgZmFpbGVkYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgaWYgdGhlIGpvYiBmYWlscyBleGVjdXRpbmcgb24gdGhlIHNlcnZlci4gTm8gZnVydGhlciBwb2xsaW5nIGlzIGRvbmUuXG4gICAgICAgICAqICAgIC0gYGVycm9yYDogQSBmdW5jdGlvbiBgKGVycilgIGludm9rZWQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBvbGxpbmcuIE5vIGZ1cnRoZXIgcG9sbGluZyBpcyBkb25lLlxuICAgICAgICAgKiBPciwgaWYgYSBmdW5jdGlvbiBgKGpvYilgLCBlcXVpdmFsZW50IHRvIHBhc3NpbmcgaXQgYXMgYSBgZG9uZWAgY2FsbGJhY2suXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRyYWNrOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHZhciBwZXJpb2QgPSBvcHRpb25zLnBlcmlvZCB8fCA1MDA7IC8vIG1zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKGNhbGxiYWNrcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBub0NhbGxiYWNrc0FmdGVyUmVhZHkgPSAoXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5wcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgICFjYWxsYmFja3MuZG9uZSAmJlxuICAgICAgICAgICAgICAgICFjYWxsYmFja3MuZmFpbGVkICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5lcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlYWR5ID0gY2FsbGJhY2tzLnJlYWR5IHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MucHJvZ3Jlc3MgPSBjYWxsYmFja3MucHJvZ3Jlc3MgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5kb25lID0gY2FsbGJhY2tzLmRvbmUgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5mYWlsZWQgPSBjYWxsYmFja3MuZmFpbGVkIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MuZXJyb3IgPSBjYWxsYmFja3MuZXJyb3IgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9yIHVzZSBieSB0ZXN0cyBvbmx5XG4gICAgICAgICAgICBjYWxsYmFja3MuX3ByZXJlYWR5ID0gY2FsbGJhY2tzLl9wcmVyZWFkeSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeSA9IGNhbGxiYWNrcy5fc3RvcHBlZEFmdGVyUmVhZHkgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGVtaXR0ZWRSZWFkeSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGRvbmVMb29waW5nID0gZmFsc2U7XG4gICAgICAgICAgICBBc3luYy53aGlsc3QoXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiAhZG9uZUxvb3Bpbmc7IH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24obmV4dEl0ZXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmZldGNoKGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3BhdGNoU3RhdGUgPSBqb2IucHJvcGVydGllcygpLmRpc3BhdGNoU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90UmVhZHkgPSBkaXNwYXRjaFN0YXRlID09PSBcIlFVRVVFRFwiIHx8IGRpc3BhdGNoU3RhdGUgPT09IFwiUEFSU0lOR1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdFJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLl9wcmVyZWFkeShqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWl0dGVkUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWRSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IERvbid0IGtlZXAgcG9sbGluZyB0aGUgam9iIGlmIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZXIgb25seSBjYXJlcyBhYm91dCB0aGUgYHJlYWR5YCBldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vQ2FsbGJhY2tzQWZ0ZXJSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeShqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnByb2dyZXNzKGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gam9iLnByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2hTdGF0ZSA9PT0gXCJET05FXCIgJiYgcHJvcHMuaXNEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5kb25lKGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkaXNwYXRjaFN0YXRlID09PSBcIkZBSUxFRFwiICYmIHByb3BzLmlzRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5mYWlsZWQoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luYy5zbGVlcChwZXJpb2QsIG5leHRJdGVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlc3VtZXMgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnVucGF1c2UoZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFVOUEFVU0VEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICB1bnBhdXNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInVucGF1c2VcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2Ygc2VhcmNoIGpvYnMuIFlvdSBjYW4gY3JlYXRlIGFuZCBsaXN0IHNlYXJjaCBcbiAgICAgKiBqb2JzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIHNlYXJjaCBqb2IuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkpvYnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5qb2JzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIG5ldyBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIHNpZCA9IHByb3BzLmNvbnRlbnQuc2lkO1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Kb2IodGhpcy5zZXJ2aWNlLCBzaWQsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2JzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Kb2JzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZSAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3JlYXRlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNlYXJjaCBqb2Igd2l0aCBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycywgaW5jbHVkaW5nIGBleGVjX21vZGVgIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2Ygc2VhcmNoOlxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPW5vcm1hbGAgdG8gcmV0dXJuIGEgc2VhcmNoIGpvYiBJRCBpbW1lZGlhdGVseSAoZGVmYXVsdCkuXG4gICAgICAgICAqICAgICAgUG9sbCBmb3IgY29tcGxldGlvbiB0byBmaW5kIG91dCB3aGVuIHlvdSBjYW4gcmV0cmlldmUgc2VhcmNoIHJlc3VsdHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPWJsb2NraW5nYCB0byByZXR1cm4gdGhlIHNlYXJjaCBqb2IgSUQgd2hlbiB0aGUgc2VhcmNoIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRvIHJ1biBhIG9uZXNob3Qgc2VhcmNoLCB3aGljaCBkb2VzIG5vdCBjcmVhdGUgYSBqb2IgYnV0IHJhdGhlciByZXR1cm5zIHRoZSBzZWFyY2ggcmVzdWx0cywgdXNlIGBTZXJ2aWNlLkpvYnMub25lc2hvdFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QocXVlcnkpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHBhcmFtcy5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5zZWFyY2ggPSBxdWVyeTsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgocGFyYW1zLmV4ZWNfbW9kZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uZXNob3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB1c2Ugc3BsdW5ranMuU2VydmljZS5Kb2JzLm9uZXNob3RTZWFyY2ggZm9yIGV4ZWNfbW9kZT1vbmVzaG90XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5zZWFyY2gpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhcIk11c3QgcHJvdmlkZSBhIHF1ZXJ5IHRvIGNyZWF0ZSBhIHNlYXJjaCBqb2JcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGF0LnNlcnZpY2UsIHJlc3BvbnNlLmRhdGEuc2lkLCB0aGF0Lm5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGpvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2UuSm9icy5vbmVzaG90U2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9icyA9IHNlcnZpY2Uuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMuc2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgbmV3Sm9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiOiBuZXdKb2Iuc2lkKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2ggam9iLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgc2VhcmNoIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUocXVlcnksIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG9uZXNob3Qgc2VhcmNoIGZyb20gYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYnMgPSBzZXJ2aWNlLmpvYnMoKTtcbiAgICAgICAgICogICAgICBqb2JzLm9uZXNob3RTZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUkVTVUxUIEZJRUxEU1wiOiByZXN1bHRzLmZpZWxkcyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5LiBcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgcmVzdWx0cyAoWE1MLCBKU09OLCBvciBDU1YpLlxuICAgICAgICAgKiAgICAtIGBlYXJsaWVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGVhcmxpZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYGxhdGVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGxhdGVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGByZmAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpZWxkcyB0byBhZGQgdG8gdGhlIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIHNlYXJjaDogYChlcnIsIHJlc3VsdHMpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBvbmVzaG90U2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KHF1ZXJ5KSAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSBwYXJhbXMuc2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gcXVlcnk7IFxuICAgICAgICAgICAgcGFyYW1zLmV4ZWNfbW9kZSA9IFwib25lc2hvdFwiO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5zZWFyY2gpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhcIk11c3QgcHJvdmlkZSBhIHF1ZXJ5IHRvIGNyZWF0ZSBhIHNlYXJjaCBqb2JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvdXRwdXRNb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBwYXRoID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHZhciBwb3N0ID0gcGFyYW1zO1xuICAgICAgICAgICAgdmFyIGdldCA9IHtvdXRwdXRfbW9kZTogb3V0cHV0TW9kZX07XG4gICAgICAgICAgICB2YXIgYm9keSA9IG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnNlcnZpY2UucmVxdWVzdChcbiAgICAgICAgICAgICAgICBwYXRoLCBcbiAgICAgICAgICAgICAgICBtZXRob2QsIFxuICAgICAgICAgICAgICAgIGdldCwgXG4gICAgICAgICAgICAgICAgcG9zdCwgXG4gICAgICAgICAgICAgICAgYm9keSwgXG4gICAgICAgICAgICAgICAgaGVhZGVycywgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZmllbGQgb2YgYSBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGZvciBgRGF0YU1vZGVsQ2FsY3VsYXRpb25gXG4gICAgICogYW5kIGBEYXRhTW9kZWxPYmplY3RgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZmllbGROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiAgQSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgbXVsdGl2YWx1ZWRgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgbXVsdGl2YWx1ZWQuXG4gICAgICogICAgLSBgcmVxdWlyZWRgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQuXG4gICAgICogICAgLSBgaGlkZGVuYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkYXRhIG1vZGVsIFVJLlxuICAgICAqICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIGNhbiBiZSBlZGl0ZWQuXG4gICAgICogICAgLSBgY29tbWVudGAgKF9zdHJpbmdfKTogQSBjb21tZW50IGZvciB0aGlzIGZpZWxkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXNuJ3Qgb25lLlxuICAgICAqICAgIC0gYGZpZWxkU2VhcmNoYCAoX3N0cmluZ18pOiBBIHNlYXJjaCBxdWVyeSBmcmFnbWVudCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2YgdGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiAgICAgICAgICBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICpcbiAgICAgKiBQb3NzaWJsZSB0eXBlcyBmb3IgYSBkYXRhIG1vZGVsIGZpZWxkOlxuICAgICAqICAgIC0gYHN0cmluZ2BcbiAgICAgKiAgICAtIGBib29sZWFuYFxuICAgICAqICAgIC0gYG51bWJlcmBcbiAgICAgKiAgICAtIGB0aW1lc3RhbXBgXG4gICAgICogICAgLSBgb2JqZWN0Q291bnRgXG4gICAgICogICAgLSBgY2hpbGRDb3VudGBcbiAgICAgKiAgICAtIGBpcHY0YFxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbEZpZWxkID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgX3R5cGVzOiBbIFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwidGltZXN0YW1wXCIsIFwib2JqZWN0Q291bnRcIiwgXCJjaGlsZENvdW50XCIsIFwiaXB2NFwiLCBcImJvb2xlYW5cIl0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgZmllbGQuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgIC0gYGZpZWxkTmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZmllbGQuXG4gICAgICAgICAqICAgICAtIGB0eXBlYCAoX3N0cmluZ18pOiBUaGUgdHlwZSBvZiB0aGlzIGZpZWxkLCBzZWUgdmFsaWQgdHlwZXMgaW4gY2xhc3MgZG9jcy5cbiAgICAgICAgICogICAgIC0gYG11bHRpdmFsdWVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgbXVsdGl2YWx1ZWQuXG4gICAgICAgICAqICAgICAtIGByZXF1aXJlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyByZXF1aXJlZCBvbiBldmVudHMgaW4gdGhlIG9iamVjdFxuICAgICAgICAgKiAgICAgLSBgaGlkZGVuYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkYXRhIG1vZGVsIFVJLlxuICAgICAgICAgKiAgICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgY2FuIGJlIGVkaXRlZC5cbiAgICAgICAgICogICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nXyk6IEEgY29tbWVudCBmb3IgdGhpcyBmaWVsZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICAgICAgICogICAgIC0gYGZpZWxkU2VhcmNoYCAoX3N0cmluZ18pOiBBIHNlYXJjaCBxdWVyeSBmcmFnbWVudCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYGxpbmVhZ2VgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGZpZWxkXG4gICAgICAgICAqICAgICAgICAgIGlzIGRlZmluZWQsIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG8gYW4gYXJyYXkgb2ZcbiAgICAgICAgICogICAgICAgICAgc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICA9IHByb3BzLmZpZWxkTmFtZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgICAgPSBwcm9wcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHRoaXMudHlwZSAgICAgICAgICAgPSBwcm9wcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5tdWx0aXZhbHVlZCAgICA9IHByb3BzLm11bHRpdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkICAgICAgID0gcHJvcHMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbiAgICAgICAgID0gcHJvcHMuaGlkZGVuO1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZSAgICAgICA9IHByb3BzLmVkaXRhYmxlO1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ICAgICAgICA9IHByb3BzLmNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2ggICAgPSBwcm9wcy5maWVsZFNlYXJjaDtcbiAgICAgICAgICAgIHRoaXMubGluZWFnZSAgICAgICAgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgICAgICAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgc3RyaW5nP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIHN0cmluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBudW1iZXI/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgbnVtYmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzTnVtYmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIHRpbWVzdGFtcD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSB0aW1lc3RhbXAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNUaW1lc3RhbXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidGltZXN0YW1wXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgb2JqZWN0IGNvdW50P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIG9iamVjdCBjb3VudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc09iamVjdGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm9iamVjdENvdW50XCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgY2hpbGQgY291bnQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgY2hpbGQgY291bnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNDaGlsZGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNoaWxkQ291bnRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBpcHY0P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIGlwdjQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNJUHY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImlwdjRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBib29sZWFuP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIGJvb2xlYW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNCb29sZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImJvb2xlYW5cIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbnN0cmFpbnQgb24gYSBgRGF0YU1vZGVsT2JqZWN0YCBvciBhIGBEYXRhTW9kZWxGaWVsZGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBxdWVyeWAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSBkZWZpbmluZyB0aGlzIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IFRoZSBsaW5lYWdlIG9mIHRoaXMgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3QgdGhhdCBvd25zXG4gICAgICogICAgICAgICAgdGhpcyBkYXRhIG1vZGVsIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDb25zdHJhaW50XG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxDb25zdHJhaW50ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHNlYXJjaCBxdWVyeSB0aGlzIGNvbnN0cmFpbnQgc3BlY2lmaWVzLlxuICAgICAgICAgKiAgICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IG93bnMgdGhpc1xuICAgICAgICAgKiAgICAgICAgICBjb25zdHJhaW50LCBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvXG4gICAgICAgICAqICAgICAgICAgIGFuIGFycmF5IG9mIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDb25zdHJhaW50XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5xdWVyeSAgID0gcHJvcHMuc2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlID0gcHJvcHMub3duZXIuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgdGhpcy5vd25lciAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIHNwZWNpZnlpbmcgYSBjYWxjdWxhdGlvbiBvbiBhIGBEYXRhTW9kZWxPYmplY3RgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgaWRgIChfc3RyaW5nXyk6IFRoZSBJRCBmb3IgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAqICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbi5cbiAgICAgKiAgICAtIGBjb21tZW50YCAoX3N0cmluZ198X251bGxfKTogVGhlIGNvbW1lbnQgZm9yIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiwgb3IgYG51bGxgLlxuICAgICAqICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogVHJ1ZSBpZiB0aGlzIGNhbGN1bGF0aW9uIGNhbiBiZSBlZGl0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGNhbGN1bGF0aW9uXG4gICAgICogICAgICAgICAgaXMgZGVmaW5lZCBpbiBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgZGF0YSBtb2RlbCB0aGF0IHRoaXMgY2FsY3VsYXRpb24gYmVsb25ncyB0by5cbiAgICAgKiAgICAtIGBvdXRwdXRGaWVsZHNgIChfYXJyYXlfKTogVGhlIGZpZWxkcyBvdXRwdXQgYnkgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBSZXggYW5kIEV2YWwgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGV4cHJlc3Npb25gIChfc3RyaW5nXyk6IFRoZSBleHByZXNzaW9uIHRvIHVzZSBmb3IgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBSZXggYW5kIEdlb0lQIHR5cGVzIGhhdmUgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eTpcbiAgICAgKiAgICAtIGBpbnB1dEZpZWxkYCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBMb29rdXAgdHlwZSBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGxvb2t1cE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBsb29rdXAgdG8gcGVyZm9ybS5cbiAgICAgKiAgICAtIGBpbnB1dEZpZWxkTWFwcGluZ3NgIChfb2JqZWN0Xyk6IFRoZSBtYXBwaW5ncyBmcm9tIGZpZWxkcyBpbiB0aGUgZXZlbnRzIHRvIGZpZWxkcyBpbiB0aGUgbG9va3VwLlxuICAgICAqXG4gICAgICogVmFsaWQgdHlwZXMgb2YgY2FsY3VsYXRpb25zIGFyZTpcbiAgICAgKiAgICAtIGBMb29rdXBgXG4gICAgICogICAgLSBgRXZhbGBcbiAgICAgKiAgICAtIGBHZW9JUGBcbiAgICAgKiAgICAtIGBSZXhgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsQ2FsY3VsYXRpb24gPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBfdHlwZXM6IFtcIkxvb2t1cFwiLCBcIkV2YWxcIiwgXCJHZW9JUFwiLCBcIlJleFwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbi5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgY2FsY3VsYXRpb25JRGAgKF9zdHJpbmdfKTogVGhlIElEIG9mIHRoaXMgY2FsY3VsYXRpb24uXG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvblR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgY2FsY3VsYXRpb24sIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGNhbGN1bGF0aW9uIGNhbiBiZSBlZGl0ZWQuXG4gICAgICAgICAqICAgICAtIGBjb21tZW50YCAoX3N0cmluZ18pOiBBIGNvbW1lbnQgZm9yIHRoaXMgY2FsY3VsYXRpb24sIG9yIGBudWxsYCBpZiB0aGVyZSBpc24ndCBvbmUuXG4gICAgICAgICAqICAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgY2FsY3VsYXRpb25cbiAgICAgICAgICogICAgICAgICAgaXMgZGVmaW5lZCwgaXRlbXMgYXJlIGRlbGltaXRlZCBieSBhIGRvdC4gVGhpcyBpcyBjb252ZXJ0ZWQgaW50byBhbiBhcnJheSBvZlxuICAgICAgICAgKiAgICAgICAgICBzdHJpbmdzIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgICAgKiAgICAgLSBgb3V0cHV0RmllbGRzYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHRoZSBmaWVsZHMgdGhpcyBjYWxjdWxhdGlvbiBnZW5lcmF0ZXMuXG4gICAgICAgICAqICAgICAtIGBleHByZXNzaW9uYCAoX3N0cmluZ18pOiBUaGUgZXhwcmVzc2lvbiB0byB1c2UgZm9yIHRoaXMgY2FsY3VsYXRpb247IGV4Y2x1c2l2ZSB0byBgRXZhbGAgYW5kIGBSZXhgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBpbnB1dEZpZWxkYCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBjYWxjdWxhdGlvbjsgZXhjbHVzaXZlIHRvIGBHZW9JUGAgYW5kIGBSZXhgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBsb29rdXBOYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgbG9va3VwIHRvIHBlcmZvcm07IGV4Y2x1c2l2ZSB0byBgTG9va3VwYCBjYWxjdWxhdGlvbnMgKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgaW5wdXRGaWVsZE1hcHBpbmdzYCAoX2FycmF5Xyk6IE9uZSBlbGVtZW50IGFycmF5IGNvbnRhaW5pbmcgYW4gb2JqZWN0IHdpdGggdGhlIG1hcHBpbmdzIGZyb20gZmllbGRzIGluIHRoZSBldmVudHMgdG8gZmllbGRzXG4gICAgICAgICAqICAgICAgICAgaW4gdGhlIGxvb2t1cDsgZXhjbHVzaXZlIHRvIGBMb29rdXBgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgICAgICBwcm9wcy5vd25lciA9IHByb3BzLm93bmVyIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHRoaXMuaWQgICAgICAgICAgICAgPSBwcm9wcy5jYWxjdWxhdGlvbklEO1xuICAgICAgICAgICAgdGhpcy50eXBlICAgICAgICAgICA9IHByb3BzLmNhbGN1bGF0aW9uVHlwZTtcbiAgICAgICAgICAgIHRoaXMuY29tbWVudCAgICAgICAgPSBwcm9wcy5jb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlICAgICAgID0gcHJvcHMuZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgICAgICAgID0gcHJvcHMub3duZXIuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgdGhpcy5vd25lciAgICAgICAgICA9IHRoaXMubGluZWFnZVt0aGlzLmxpbmVhZ2UubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIHRoaXMub3V0cHV0RmllbGRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLm91dHB1dEZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0RmllbGRzW3Byb3BzLm91dHB1dEZpZWxkc1tpXS5maWVsZE5hbWVdID0gbmV3IHJvb3QuRGF0YU1vZGVsRmllbGQocHJvcHMub3V0cHV0RmllbGRzW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwiRXZhbFwiID09PSB0aGlzLnR5cGUgfHwgXCJSZXhcIiA9PT0gdGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gcHJvcHMuZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcIkdlb0lQXCIgPT09IHRoaXMudHlwZSB8fCBcIlJleFwiID09PSB0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RmllbGQgPSBwcm9wcy5pbnB1dEZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiTG9va3VwXCIgPT09IHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va3VwTmFtZSA9IHByb3BzLmxvb2t1cE5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZpZWxkTWFwcGluZ3MgPSBwcm9wcy5sb29rdXBJbnB1dHNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiBvdXRwdXQgZmllbGQgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIG9mIG91dHB1dCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBvdXRwdXRGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm91dHB1dEZpZWxkcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBlZGl0YWJsZT9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgZWRpdGFibGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXNFZGl0YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmVkaXRhYmxlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBsb29rdXA/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgbG9va3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzTG9va3VwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkxvb2t1cFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIGV2YWw/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgZXZhbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0V2YWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXZhbFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIG9mIHR5cGUgUmV4P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBvZiB0eXBlIFJleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc1JleDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJSZXhcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBHZW9JUD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBHZW9JUC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0dlb0lQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkdlb0lQXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFBpdm90IHJlcHJlc2VudHMgZGF0YSBhYm91dCBhIHBpdm90IHJlcG9ydCByZXR1cm5lZCBieSB0aGUgU3BsdW5rIFNlcnZlci5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYHNlcnZpY2VgIChfc3BsdW5ranMuU2VydmljZV8pOiBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggc3RyaW5nIGZvciBydW5uaW5nIHRoZSBwaXZvdCByZXBvcnQuXG4gICAgICogICAgLSBgZHJpbGxkb3duU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIGRyaWxsZG93bi5cbiAgICAgKiAgICAtIGBvcGVuSW5TZWFyY2hgIChfc3RyaW5nXyk6IEVxdWl2YWxlbnQgdG8gc2VhcmNoIHBhcmFtZXRlciwgYnV0IGxpc3RlZCBtb3JlIHNpbXBseS5cbiAgICAgKiAgICAtIGBwcmV0dHlRdWVyeWAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBgb3BlbkluU2VhcmNoYC5cbiAgICAgKiAgICAtIGBwaXZvdFNlYXJjaGAgKF9zdHJpbmdfKTogQSBwaXZvdCBzZWFyY2ggY29tbWFuZCBiYXNlZCBvbiB0aGUgbmFtZWQgZGF0YSBtb2RlbC5cbiAgICAgKiAgICAtIGB0c3RhdHNTZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgdHN0YXRzLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RcbiAgICAgKi9cbiAgICByb290LlBpdm90ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIHBpdm90LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHN0cmluZyBmb3IgcnVubmluZyB0aGUgcGl2b3QgcmVwb3J0LlxuICAgICAgICAgKiAgICAtIGBkcmlsbGRvd25fc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIGRyaWxsZG93bi5cbiAgICAgICAgICogICAgLSBgb3Blbl9pbl9zZWFyY2hgIChfc3RyaW5nXyk6IEVxdWl2YWxlbnQgdG8gc2VhcmNoIHBhcmFtZXRlciwgYnV0IGxpc3RlZCBtb3JlIHNpbXBseS5cbiAgICAgICAgICogICAgLSBgcGl2b3Rfc2VhcmNoYCAoX3N0cmluZ18pOiBBIHBpdm90IHNlYXJjaCBjb21tYW5kIGJhc2VkIG9uIHRoZSBuYW1lZCBkYXRhIG1vZGVsLlxuICAgICAgICAgKiAgICAtIGB0c3RhdHNfc2VhcmNoYCAoX3N0cmluZ198X251bGxfKTogVGhlIHNlYXJjaCBmb3IgcnVubmluZyB0aGlzIHBpdm90IHJlcG9ydCB1c2luZyB0c3RhdHMsIG51bGwgaWYgYWNjZWxlcmF0aW9uIGlzIGRpc2FibGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBwcm9wcy5zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLmRyaWxsZG93blNlYXJjaCA9IHByb3BzLmRyaWxsZG93bl9zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLnByZXR0eVF1ZXJ5ID0gdGhpcy5vcGVuSW5TZWFyY2ggPSBwcm9wcy5vcGVuX2luX3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMucGl2b3RTZWFyY2ggPSBwcm9wcy5waXZvdF9zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLnRzdGF0c1NlYXJjaCA9IHByb3BzLnRzdGF0c19zZWFyY2ggfHwgbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5ydW4gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucnVuKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3RhcnRzIGEgc2VhcmNoIGpvYiBydW5uaW5nIHRoaXMgcGl2b3QsIGFjY2VsZXJhdGVkIGlmIHBvc3NpYmxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IgKG9wdGlvbmFsKS4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkb25lIGNyZWF0aW5nIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAgICAgKi9cbiAgICAgICAgcnVuOiBmdW5jdGlvbihhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gYXJncztcbiAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFyZ3MgfHwgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0c3RhdHMgaXMgdW5kZWZpbmVkLCB1c2UgcGl2b3RTZWFyY2ggKHRyeSB0byBydW4gYW4gYWNjZWxlcmF0ZWQgc2VhcmNoIGlmIHBvc3NpYmxlKVxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnNlYXJjaCh0aGlzLnRzdGF0c1NlYXJjaCB8fCB0aGlzLnBpdm90U2VhcmNoLCBhcmdzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFBpdm90U3BlY2lmaWNhdGlvbiByZXByZXNlbnRzIGEgcGl2b3QgdG8gYmUgZG9uZSBvbiBhIHBhcnRpY3VsYXIgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICogVGhlIHVzZXIgY3JlYXRlcyBhIFBpdm90U3BlY2lmaWNhdGlvbiBvbiBzb21lIGRhdGEgbW9kZWwgb2JqZWN0LCBhZGRzIGZpbHRlcnMsIHJvdyBzcGxpdHMsXG4gICAgICogY29sdW1uIHNwbGl0cywgYW5kIGNlbGwgdmFsdWVzLCB0aGVuIGNhbGxzIHRoZSBwaXZvdCBtZXRob2QgdG8gcXVlcnkgc3BsdW5rZCBhbmRcbiAgICAgKiBnZXQgYSBzZXQgb2YgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBDYWxsIHRoZSBgcGl2b3RgIG1ldGhvZCB0byBxdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXZvdC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgYSBmbHVlbnQgQVBJLCBlYWNoIGZ1bmN0aW9uIGV4Y2VwdCBgaW5pdGAsIGB0b0pzb25PYmplY3RgICYgYHBpdm90YFxuICAgICAqIHJldHVybiB0aGUgbW9kaWZpZWQgYHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uYCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAqICAgICAgICAgdmFyIHNlYXJjaGVzID0gZGF0YU1vZGVscy5pdGVtKFwiaW50ZXJuYWxfYXVkaXRfbG9nc1wiKS5vYmplY3RCeU5hbWUoXCJzZWFyY2hlc1wiKTtcbiAgICAgKiAgICAgICAgIHZhciBwaXZvdFNwZWNpZmljYXRpb24gPSBzZWFyY2hlcy5jcmVhdGVQaXZvdFNwZWNpZmljYXRpb24oKTtcbiAgICAgKiAgICAgICAgIHBpdm90U3BlY2lmaWNhdGlvblxuICAgICAqICAgICAgICAgICAgIC5hZGRSb3dTcGxpdChcInVzZXJcIiwgXCJFeGVjdXRpbmcgdXNlclwiKVxuICAgICAqICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtsaW1pdDogNH0pXG4gICAgICogICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAqICAgICAgICAgICAgIC5waXZvdChmdW5jdGlvbihlcnIsIHBpdm90KSB7XG4gICAgICogICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR290IGEgUGl2b3Qgb2JqZWN0IGZyb20gdGhlIFNwbHVuayBzZXJ2ZXIhXCIpO1xuICAgICAqICAgICAgICAgICAgIH0pO1xuICAgICAqICAgICB9KTtcbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGRhdGFNb2RlbE9iamVjdGAgKF9zcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdF8pOiBUaGUgYERhdGFNb2RlbE9iamVjdGAgZnJvbSB3aGljaFxuICAgICAqICAgICAgICB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gIHdhcyBjcmVhdGVkLlxuICAgICAqICAgIC0gYGNvbHVtbnNgIChfYXJyYXlfKTogVGhlIGNvbHVtbiBzcGxpdHMgb24gdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYC5cbiAgICAgKiAgICAtIGByb3dzYCAoX2FycmF5Xyk6IFRoZSByb3cgc3BsaXRzIG9uIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgZmlsdGVyc2AgKF9hcnJheV8pOiBUaGUgZmlsdGVycyBvbiB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYGNlbGxzYCAoX2FycmF5Xyk6IFRoZSBjZWxsIGFnZ3JlZ2F0aW9ucyBmb3IgdGhpc2BQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYGFjY2VsZXJhdGlvbk5hbWVzcGFjZWAgKF9zdHJpbmdffF9udWxsXyk6IFRoZSBuYW1lIG9mIHRoZSBgRGF0YU1vZGVsYCB0aGF0IG93bnMgdGhlIGBEYXRhTW9kZWxPYmplY3RgXG4gICAgICogICAgICAgIG9uIHdoaWNoIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAgd2FzIGNyZWF0ZWQgaWYgdGhlIGBEYXRhTW9kZWxgIGlzIGFjY2VsZXJhdGVkLiBBbHRlcm5hdGl2ZWx5LFxuICAgICAqICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHByb3BlcnR5IG1hbnVhbGx5IHRvIHRoZSBzaWQgb2YgYW4gYWNjZWxlcmF0aW9uIGpvYiBpbiB0aGUgZm9ybWF0IGBzaWQ9PHNpZD5gLlxuICAgICAqXG4gICAgICogVmFsaWQgY29tcGFyaXNvbiB0eXBlcyBhcmU6XG4gICAgICogICAgLSBgYm9vbGVhbmBcbiAgICAgKiAgICAtIGBzdHJpbmdgXG4gICAgICogICAgLSBgbnVtYmVyYFxuICAgICAqICAgIC0gYGlwdjRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBib29sZWFuIGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGA9YFxuICAgICAqICAgIC0gYGlzYFxuICAgICAqICAgIC0gYGlzTnVsbGBcbiAgICAgKiAgICAtIGBpc05vdE51bGxgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzdHJpbmcgY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKiAgICAtIGBjb250YWluc2BcbiAgICAgKiAgICAtIGBkb2VzTm90Q29udGFpbmBcbiAgICAgKiAgICAtIGBzdGFydHNXaXRoYFxuICAgICAqICAgIC0gYGVuZHNXaXRoYFxuICAgICAqICAgIC0gYHJlZ2V4YFxuICAgICAqXG4gICAgICogVmFsaWQgbnVtYmVyIGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGA9YFxuICAgICAqICAgIC0gYCE9YFxuICAgICAqICAgIC0gYDxgXG4gICAgICogICAgLSBgPmBcbiAgICAgKiAgICAtIGA8PWBcbiAgICAgKiAgICAtIGA+PWBcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqXG4gICAgICogVmFsaWQgaXB2NCBjb21wYXJpc29ucyBhcmU6XG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKiAgICAtIGBjb250YWluc2BcbiAgICAgKiAgICAtIGBkb2VzTm90Q29udGFpbmBcbiAgICAgKiAgICAtIGBzdGFydHNXaXRoYFxuICAgICAqXG4gICAgICogVmFsaWQgYmlubmluZyB2YWx1ZXMgYXJlOlxuICAgICAqICAgIC0gYGF1dG9gXG4gICAgICogICAgLSBgeWVhcmBcbiAgICAgKiAgICAtIGBtb250aGBcbiAgICAgKiAgICAtIGBkYXlgXG4gICAgICogICAgLSBgaG91cmBcbiAgICAgKiAgICAtIGBtaW51dGVgXG4gICAgICogICAgLSBgc2Vjb25kYFxuICAgICAqXG4gICAgICogVmFsaWQgc29ydCBkaXJlY3Rpb25zIGFyZTpcbiAgICAgKiAgICAtIGBBU0NFTkRJTkdgXG4gICAgICogICAgLSBgREVDRU5ESU5HYFxuICAgICAqICAgIC0gYERFRkFVTFRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzdGF0cyBmdW5jdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYGxpc3RgXG4gICAgICogICAgLSBgdmFsdWVzYFxuICAgICAqICAgIC0gYGZpcnN0YFxuICAgICAqICAgIC0gYGxhc3RgXG4gICAgICogICAgLSBgY291bnRgXG4gICAgICogICAgLSBgZGNgXG4gICAgICogICAgLSBgc3VtYFxuICAgICAqICAgIC0gYGF2ZXJhZ2VgXG4gICAgICogICAgLSBgbWF4YFxuICAgICAqICAgIC0gYG1pbmBcbiAgICAgKiAgICAtIGBzdGRldmBcbiAgICAgKiAgICAtIGBkdXJhdGlvbmBcbiAgICAgKiAgICAtIGBlYXJsaWVzdGBcbiAgICAgKiAgICAtIGBsYXRlc3RgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgKi9cbiAgICByb290LlBpdm90U3BlY2lmaWNhdGlvbiA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIF9jb21wYXJpc29uczoge1xuICAgICAgICAgICAgYm9vbGVhbjogW1wiPVwiLCBcImlzXCIsIFwiaXNOdWxsXCIsIFwiaXNOb3ROdWxsXCJdLFxuICAgICAgICAgICAgc3RyaW5nOiBbXCI9XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIiwgXCJjb250YWluc1wiLCBcImRvZXNOb3RDb250YWluXCIsIFwic3RhcnRzV2l0aFwiLCBcImVuZHNXaXRoXCIsIFwicmVnZXhcIl0sXG4gICAgICAgICAgICBudW1iZXI6IFtcIj1cIiwgXCIhPVwiLCBcIjxcIiwgXCI+XCIsIFwiPD1cIiwgXCI+PVwiLCBcImlzXCIsIFwiaXNOdWxsXCIsIFwiaXNOb3ROdWxsXCJdLFxuICAgICAgICAgICAgaXB2NDogW1wiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIiwgXCJjb250YWluc1wiLCBcImRvZXNOb3RDb250YWluXCIsIFwic3RhcnRzV2l0aFwiXVxuICAgICAgICB9LFxuICAgICAgICBfYmlubmluZzogW1wiYXV0b1wiLCBcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIl0sXG4gICAgICAgIF9zb3J0RGlyZWN0aW9uOiBbXCJBU0NFTkRJTkdcIiwgXCJERVNDRU5ESU5HXCIsIFwiREVGQVVMVFwiXSxcbiAgICAgICAgX3N0YXRzRnVuY3Rpb25zOiBbXCJsaXN0XCIsIFwidmFsdWVzXCIsIFwiZmlyc3RcIiwgXCJsYXN0XCIsIFwiY291bnRcIiwgXCJkY1wiLCBcInN1bVwiLCBcImF2ZXJhZ2VcIiwgXCJtYXhcIiwgXCJtaW5cIiwgXCJzdGRldlwiLCBcImR1cmF0aW9uXCIsIFwiZWFybGllc3RcIiwgXCJsYXRlc3RcIl0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBwYXJlbnREYXRhTW9kZWwgVGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihkYXRhTW9kZWxPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsT2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jZWxscyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZSA9IGRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwuaXNBY2NlbGVyYXRlZCgpID8gXG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5uYW1lIDogbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5ydW4gICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5ydW4pO1xuICAgICAgICAgICAgdGhpcy5waXZvdCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5waXZvdCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRoZSBhY2NlbGVyYXRpb24gY2FjaGUgZm9yIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbiB0byBhIGpvYixcbiAgICAgICAgICogdXN1YWxseSBnZW5lcmF0ZWQgYnkgY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2Igb24gYSBEYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICogaW5zdGFuY2UsIGFzIHRoZSBhY2NlbGVyYXRpb24gY2FjaGUgZm9yIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8c3BsdW5ranMuU2VydmljZS5Kb2J9IHNpZCBUaGUgc2lkIG9mIGFuIGFjY2VsZXJhdGlvbiBqb2IsXG4gICAgICAgICAqICAgICBvciwgYSBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QWNjZWxlcmF0aW9uSm9iOiBmdW5jdGlvbihzaWQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgc2VhcmNoIG9iamVjdCBpcyBwYXNzZWQgaW4sIGdldCBpdHMgc2lkXG4gICAgICAgICAgICBpZiAoc2lkICYmIHNpZCBpbnN0YW5jZW9mIFNlcnZpY2UuSm9iKSB7XG4gICAgICAgICAgICAgICAgc2lkID0gc2lkLnNpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFzaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaWQgdG8gdXNlIGZvciBhY2NlbGVyYXRpb24gbXVzdCBub3QgYmUgbnVsbC5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlID0gXCJzaWQ9XCIgKyBzaWQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgZmlsdGVyIG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuIFRoZSBmaWx0ZXIgd2lsbCBiZSBhIGNvbnN0cmFpbnQgb2YgdGhlIGZvcm1cbiAgICAgICAgICogYGZpZWxkIGBjb21wYXJpc29uYCBjb21wYXJlVG9gLCBmb3IgZXhhbXBsZTogYGlzX3JlbW90ZSA9IGZhbHNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBmaWx0ZXIgb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbXBhcmlzb25UeXBlIFRoZSB0eXBlIG9mIGNvbXBhcmlzb24sIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbXBhcmlzb25PcCBUaGUgY29tcGFyaXNvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIGNvbXBhcmlzb25zLCBiYXNlZCBvbiB0eXBlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyZVRvIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRoZSBmaWVsZCB0by5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEZpbHRlcjogZnVuY3Rpb24oZmllbGROYW1lLCBjb21wYXJpc29uVHlwZSwgY29tcGFyaXNvbk9wLCBjb21wYXJlVG8pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgZmlsdGVyIG9uIGEgbm9uZXhpc3RlbnQgZmllbGQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25UeXBlICE9PSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGFkZCBcIiArIGNvbXBhcmlzb25UeXBlICsgIFxuICAgICAgICAgICAgICAgICAgICBcIiBmaWx0ZXIgb24gXCIgKyBmaWVsZE5hbWUgKyBcbiAgICAgICAgICAgICAgICAgICAgXCIgYmVjYXVzZSBpdCBpcyBvZiB0eXBlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKS50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fY29tcGFyaXNvbnNbY29tcGFyaXNvblR5cGVdLCBjb21wYXJpc29uT3ApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBhZGQgXCIgKyBjb21wYXJpc29uVHlwZSArIFxuICAgICAgICAgICAgICAgICAgICBcIiBmaWx0ZXIgYmVjYXVzZSBcIiArIGNvbXBhcmlzb25PcCArXG4gICAgICAgICAgICAgICAgICAgIFwiIGlzIG5vdCBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3JcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBjb21wYXJpc29uVHlwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFRoZXNlIGZpZWxkcyBhcmUgdHlwZSBkZXBlbmRlbnRcbiAgICAgICAgICAgIGlmICh1dGlscy5jb250YWlucyhbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwiaXB2NFwiLCBcIm51bWJlclwiXSwgcmV0LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0LnJ1bGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmlzb25PcCxcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVRvOiBjb21wYXJlVG9cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2gocmV0KTtcbiAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBsaW1pdCBvbiB0aGUgZXZlbnRzIHNob3duIGluIGEgcGl2b3QgYnkgc29ydGluZyB0aGVtIGFjY29yZGluZyB0byBzb21lIGZpZWxkLCB0aGVuIHRha2luZ1xuICAgICAgICAgKiB0aGUgc3BlY2lmaWVkIG51bWJlciBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGZpbHRlciBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvcnRBdHRyaWJ1dGUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvcnREaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0byBzb3J0IGV2ZW50cywgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGltaXQgVGhlIG51bWJlciBvZiB2YWx1ZXMgZnJvbSB0aGUgc29ydGVkIGxpc3QgdG8gYWxsb3cgdGhyb3VnaCB0aGlzIGZpbHRlci5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRzRnVuY3Rpb24gVGhlIHN0YXRzIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYWdncmVnYXRpb24gYmVmb3JlIHNvcnRpbmcsIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZExpbWl0RmlsdGVyOiBmdW5jdGlvbihmaWVsZE5hbWUsIHNvcnRBdHRyaWJ1dGUsIHNvcnREaXJlY3Rpb24sIGxpbWl0LCBzdGF0c0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIGxpbWl0IGZpbHRlciBvbiBhIG5vbmV4aXN0ZW50IGZpZWxkLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIXV0aWxzLmNvbnRhaW5zKFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcIm9iamVjdENvdW50XCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBsaW1pdCBmaWx0ZXIgb24gXCIgKyBmaWVsZE5hbWUgKyBcIiBiZWNhdXNlIGl0IGlzIG9mIHR5cGUgXCIgKyBmLnR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiLCBcImRjXCJdLCBzdGF0c0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIGZvciBmaWVsZHMgb2YgdHlwZSBzdHJpbmcgbXVzdCBiZSBDT1VOVCBvciBESVNUSU5DVF9DT1VOVDsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSAmJiAhdXRpbHMuY29udGFpbnMoW1wiY291bnRcIiwgXCJkY1wiLCBcImF2ZXJhZ2VcIiwgXCJzdW1cIl0sIHN0YXRzRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gZm9yIGZpZWxkcyBvZiB0eXBlIG51bWJlciBtdXN0IGJlIG9uZSBvZiBDT1VOVCwgRElTVElOQ1RfQ09VTlQsIFNVTSwgb3IgQVZFUkFHRTsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwib2JqZWN0Q291bnRcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiXSwgc3RhdHNGdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBmb3IgZmllbGRzIG9mIHR5cGUgb2JqZWN0IGNvdW50IG11c3QgYmUgQ09VTlQ7IGZvdW5kIFwiICsgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogc29ydEF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVPd25lcjogdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoc29ydEF0dHJpYnV0ZSkubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbWl0QW1vdW50OiBsaW1pdCxcbiAgICAgICAgICAgICAgICBzdGF0c0ZuOiBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQXNzdW1lZCBcImhpZ2hlc3RcIiBpcyBwcmVmZXJyZWQgZm9yIHdoZW4gc29ydERpcmVjdGlvbiBpcyBcIkRFRkFVTFRcIlxuICAgICAgICAgICAgZmlsdGVyLmxpbWl0VHlwZSA9IFwiQVNDRU5ESU5HXCIgPT09IHNvcnREaXJlY3Rpb24gPyBcImxvd2VzdFwiIDogXCJoaWdoZXN0XCI7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgbnVtZXJpYyBvciBzdHJpbmcgdmFsdWVkIGZpZWxkLCBzcGxpdHRpbmcgb24gZWFjaCBkaXN0aW5jdCB2YWx1ZSBvZiB0aGUgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRSb3dTcGxpdDogZnVuY3Rpb24oZmllbGROYW1lLCBsYWJlbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyIG9yIHN0cmluZy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByb3cgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHJvdy5kaXNwbGF5ID0gXCJhbGxcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dzLnB1c2gocm93KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIHJvdyBzcGxpdCBvbiBhIG51bWVyaWMgZmllbGQsIHNwbGl0dGluZyBpbnRvIG51bWVyaWMgcmFuZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHNwbGl0IGdlbmVyYXRlcyBiaW5zIHdpdGggZWRnZXMgZXF1aXZhbGVudCB0byB0aGVcbiAgICAgICAgICogY2xhc3NpYyBsb29wICdmb3IgaSBpbiA8c3RhcnQ+IHRvIDxlbmQ+IGJ5IDxzdGVwPicgYnV0IHdpdGggYSBtYXhpbXVtXG4gICAgICAgICAqIG51bWJlciBvZiBiaW5zIDxsaW1pdD4uIFRoaXMgZGlzcGF0Y2hlcyB0byB0aGUgc3RhdHMgYW5kIHh5c2VyaWVzIHNlYXJjaCBjb21tYW5kcy5cbiAgICAgICAgICogU2VlIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgc3RhcnRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgZW5kYCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIGZvciB0aGUgZW5kIG9mIHRoZSBsYXN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgc3RlcGAgKF9pbnRlZ2VyXyk6IFRoZSB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSwgb3IgbnVsbCB0byBoYXZlIFNwbHVuayBjYWxjdWxhdGUgaXQuXG4gICAgICAgICAqICAgIC0gYGxpbWl0YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJhbmdlcyB0byBzcGxpdCBpbnRvLCBvciBudWxsIGZvciBubyBsaW1pdC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJhbmdlUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpO1xuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIG51bWJlci5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdXBkYXRlUmFuZ2VzID0ge307XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGFydCkgJiYgcmFuZ2VzLnN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLnN0YXJ0ID0gcmFuZ2VzLnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuZW5kKSAmJiByYW5nZXMuZW5kICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLmVuZCA9IHJhbmdlcy5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGVwKSAmJiByYW5nZXMuc3RlcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlcy5zaXplID0gcmFuZ2VzLnN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5saW1pdCkgJiYgcmFuZ2VzLmxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLm1heE51bWJlck9mID0gcmFuZ2VzLmxpbWl0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwicmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgcmFuZ2VzOiB1cGRhdGVSYW5nZXNcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0cnVlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIHRydWUgdmFsdWVkIHJvdyBsYWJlbC5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZhbHNlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZhbHNlIHZhbHVlZCByb3cgbGFiZWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRCb29sZWFuUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgdHJ1ZURpc3BsYXlWYWx1ZSwgZmFsc2VEaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJib29sZWFuXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIGJvb2xlYW4uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHRydWVMYWJlbDogdHJ1ZURpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZUxhYmVsOiBmYWxzZURpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSB0aW1lc3RhbXAgdmFsdWVkIGZpZWxkLCBiaW5uZWQgYnkgdGhlIHNwZWNpZmllZCBidWNrZXQgc2l6ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJpbm5pbmcgVGhlIHNpemUgb2YgYmlucyB0byB1c2UsIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFRpbWVzdGFtcFJvd1NwbGl0OiBmdW5jdGlvbihmaWVsZCwgbGFiZWwsIGJpbm5pbmcpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJ0aW1lc3RhbXBcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgdGltZXN0YW1wLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fYmlubmluZywgYmlubmluZykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJpbm5pbmcgXCIgKyBiaW5uaW5nICsgXCIgZm91bmQuIFZhbGlkIHZhbHVlcyBhcmU6IFwiICsgdGhpcy5fYmlubmluZy5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHBlcmlvZDogYmlubmluZ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGNvbHVtbiBzcGxpdCBvbiBhIHN0cmluZyBvciBudW1iZXIgdmFsdWVkIGZpZWxkLCBwcm9kdWNpbmcgYSBjb2x1bW4gZm9yXG4gICAgICAgICAqIGVhY2ggZGlzdGluY3QgdmFsdWUgb2YgdGhlIGZpZWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyIG9yIHN0cmluZy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjb2wgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY29sLmRpc3BsYXkgPSBcImFsbFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgbnVtZXJpYyBmaWVsZCwgc3BsaXR0aW5nIHRoZSB2YWx1ZXMgaW50byByYW5nZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIGNvbGxlY3Rpb24gZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uIG9wdGlvbnM6XG4gICAgICAgICAqICAgIC0gYHN0YXJ0YCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcmFuZ2UsIG9yIG51bGwgdG8gdGFrZSB0aGUgbG93ZXN0IHZhbHVlIGluIHRoZSBldmVudHMuXG4gICAgICAgICAqICAgIC0gYGVuZGAgKF9pbnRlZ2VyXyk6IFRoZSB2YWx1ZSBmb3IgdGhlIGVuZCBvZiB0aGUgbGFzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBoaWdoZXN0IHZhbHVlIGluIHRoZSBldmVudHMuXG4gICAgICAgICAqICAgIC0gYHN0ZXBgIChfaW50ZWdlcl8pOiBUaGUgdGhlIHdpZHRoIG9mIGVhY2ggcmFuZ2UsIG9yIG51bGwgdG8gaGF2ZSBTcGx1bmsgY2FsY3VsYXRlIGl0LlxuICAgICAgICAgKiAgICAtIGBsaW1pdGAgKF9pbnRlZ2VyXyk6IFRoZSBtYXhpbXVtIG51bWJlciBvZiByYW5nZXMgdG8gc3BsaXQgaW50bywgb3IgbnVsbCBmb3Igbm8gbGltaXQuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRSYW5nZUNvbHVtblNwbGl0OiBmdW5jdGlvbihmaWVsZE5hbWUsIHJhbmdlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiICE9PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbiBTcGx1bmsgNi4wLjEuMSwgZGF0YSBtb2RlbHMgaW5jb3JyZWN0bHkgZXhwZWN0IHN0cmluZ3MgZm9yIHRoZXNlIGZpZWxkc1xuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBudW1iZXJzLiBJbiA2LjEsIHRoaXMgaXMgZml4ZWQgYW5kIGJvdGggYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRSYW5nZXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0YXJ0KSAmJiByYW5nZXMuc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLnN0YXJ0ID0gcmFuZ2VzLnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuZW5kKSAmJiByYW5nZXMuZW5kICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJhbmdlcy5lbmQgPSByYW5nZXMuZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuc3RlcCkgJiYgcmFuZ2VzLnN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLnNpemUgPSByYW5nZXMuc3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLmxpbWl0KSAmJiByYW5nZXMubGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLm1heE51bWJlck9mID0gcmFuZ2VzLmxpbWl0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwicmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgcmFuZ2VzOiB1cGRhdGVkUmFuZ2VzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0cnVlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIHRydWUgdmFsdWVkIGNvbHVtbiBsYWJlbC5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZhbHNlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZhbHNlIHZhbHVlZCBjb2x1bW4gbGFiZWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRCb29sZWFuQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgdHJ1ZURpc3BsYXlWYWx1ZSwgZmFsc2VEaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBpZiAoXCJib29sZWFuXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIGJvb2xlYW4uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIHRydWVMYWJlbDogdHJ1ZURpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZUxhYmVsOiBmYWxzZURpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGNvbHVtbiBzcGxpdCBvbiBhIHRpbWVzdGFtcCB2YWx1ZWQgZmllbGQsIGJpbm5lZCBieSB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBzaXplLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmlubmluZyBUaGUgc2l6ZSBvZiBiaW5zIHRvIHVzZSwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBiaW5uaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpO1xuICAgICAgICAgICAgaWYgKFwidGltZXN0YW1wXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIHRpbWVzdGFtcC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmNvbnRhaW5zKHRoaXMuX2Jpbm5pbmcsIGJpbm5pbmcpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiaW5uaW5nIFwiICsgYmlubmluZyArIFwiIGZvdW5kLiBWYWxpZCB2YWx1ZXMgYXJlOiBcIiArIHRoaXMuX2Jpbm5pbmcuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIHBlcmlvZDogYmlubmluZ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhbiBhZ2dyZWdhdGUgdG8gZWFjaCBjZWxsIG9mIHRoZSBwaXZvdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBhZ2dyZWdhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdHNGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gdXNlIGZvciBhZ2dyZWdhdGlvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHN0YXRzIGZ1bmN0aW9ucy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZENlbGxWYWx1ZTogZnVuY3Rpb24oZmllbGROYW1lLCBsYWJlbCwgc3RhdHNGdW5jdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcInN0cmluZ1wiLCBcImlwdjRcIl0sIGYudHlwZSkgJiZcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmaXJzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRjXCJdLCBzdGF0c0Z1bmN0aW9uKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIHN0cmluZyBhbmQgSVB2NCBmaWVsZHMgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBsaXN0LCBkaXN0aW5jdF92YWx1ZXMsIGZpcnN0LCBsYXN0LCBjb3VudCwgb3IgZGlzdGluY3RfY291bnQ7IGZvdW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIm51bWJlclwiID09PSBmLnR5cGUgJiYgXG4gICAgICAgICAgICAgICAgIXV0aWxzLmNvbnRhaW5zKFtcbiAgICAgICAgICAgICAgICAgICAgXCJzdW1cIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICBcImF2ZXJhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJtYXhcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGRldlwiLFxuICAgICAgICAgICAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBdLCBzdGF0c0Z1bmN0aW9uKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIG51bWJlciBmaWVsZCBtdXN0IGJlIG11c3QgYmUgb25lIG9mOlwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgc3VtLCBjb3VudCwgYXZlcmFnZSwgbWF4LCBtaW4sIHN0ZGV2LCBsaXN0LCBvciBkaXN0aW5jdF92YWx1ZXM7IGZvdW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoXCJ0aW1lc3RhbXBcIiA9PT0gZi50eXBlICYmXG4gICAgICAgICAgICAgICAgIXV0aWxzLmNvbnRhaW5zKFtcbiAgICAgICAgICAgICAgICAgICAgXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImVhcmxpZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgIF0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gdGltZXN0YW1wIGZpZWxkIG11c3QgYmUgb25lIG9mOlwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgZHVyYXRpb24sIGVhcmxpZXN0LCBsYXRlc3QsIGxpc3QsIG9yIGRpc3RpbmN0IHZhbHVlczsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1dGlscy5jb250YWlucyhbXCJvYmplY3RDb3VudFwiLCBcImNoaWxkQ291bnRcIl0sIGYudHlwZSkgJiZcbiAgICAgICAgICAgICAgICBcImNvdW50XCIgIT09IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBvbiBjaGlsZGNvdW50IGFuZCBvYmplY3Rjb3VudCBmaWVsZHMgbXVzdCBiZSBjb3VudDsgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImZvdW5kIFwiICsgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcImJvb2xlYW5cIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBib29sZWFuIHZhbHVlZCBmaWVsZHMgYXMgY2VsbCB2YWx1ZXMuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNlbGxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLmxpbmVhZ2Uuam9pbihcIi5cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgICAgICBzcGFya2xpbmU6IGZhbHNlLCAvLyBOb3QgcHJvcGVybHkgaW1wbGVtZW50ZWQgaW4gY29yZSB5ZXQuXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgSlNPTiByZWFkeSBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBKU09OIHJlYWR5IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHRvSnNvbk9iamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFNb2RlbDogdGhpcy5kYXRhTW9kZWxPYmplY3QuZGF0YU1vZGVsLm5hbWUsXG4gICAgICAgICAgICAgICAgYmFzZUNsYXNzOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY2VsbHM6IHRoaXMuY2VsbHMsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBRdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gYSBwaXZvdCByZXBvcnRcbiAgICAgICAgICogZm9yIHRoaXMgZGF0YSBtb2RlbCwgZGVmaW5lZCBieSB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICB2YXIgcGl2b3RTcGVjID0gc2VhcmNoZXMuY3JlYXRlUGl2b3RTcGVjaWZpY2F0aW9uKCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIFVzZSBvZiB0aGUgZmx1ZW50IEFQSVxuICAgICAgICAgKiAgICAgICAgICBwaXZvdFNwZWMuYWRkUm93U3BsaXQoXCJ1c2VyXCIsIFwiRXhlY3V0aW5nIHVzZXJcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtzdGFydDogMCwgZW5kOiAxMiwgc3RlcDogNSwgbGltaXQ6IDR9KVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLnBpdm90KGZ1bmN0aW9uKHBpdm90RXJyLCBwaXZvdCkge1xuICAgICAgICAgKiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGl2b3Qgc2VhcmNoIGlzOlwiLCBwaXZvdC5zZWFyY2gpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgZ2V0dGluZyB0aGUgcGl2b3Q6IGAoZXJyLCBwaXZvdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwaXZvdDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBzdmMgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwuc2VydmljZTtcblxuICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgcGl2b3RfanNvbjogSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb25PYmplY3QoKSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQodGhpcy5hY2NlbGVyYXRpb25OYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgYXJncy5uYW1lc3BhY2UgPSB0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHN2Yy5nZXQoUGF0aHMucGl2b3QgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwubmFtZSksIGFyZ3MsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnIuZGF0YS5tZXNzYWdlc1swXS50ZXh0KSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZW50cnkgJiYgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBuZXcgcm9vdC5QaXZvdChzdmMsIHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRGlkbid0IGdldCBhIFBpdm90IHJlcG9ydCBiYWNrIGZyb20gU3BsdW5rXCIpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byB3cmFwIHVwIHRoZSBgUGl2b3RTcGVjaWZpY2F0aW9uLnBpdm90KClgIGFuZFxuICAgICAgICAgKiBgUGl2b3QucnVuKClgIGZ1bmN0aW9uIGNhbGxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBRdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gYSBwaXZvdCByZXBvcnRcbiAgICAgICAgICogZm9yIHRoaXMgZGF0YSBtb2RlbCwgZGVmaW5lZCBieSB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gOyB0aGVuLFxuICAgICAgICAgKiBzdGFydHMgYSBzZWFyY2ggam9iIHJ1bm5pbmcgdGhpcyBwaXZvdCwgYWNjZWxlcmF0ZWQgaWYgcG9zc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZmV0Y2hFcnIsIGRhdGFNb2RlbHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIHNlYXJjaGVzID0gZGF0YU1vZGVscy5pdGVtKFwiaW50ZXJuYWxfYXVkaXRfbG9nc1wiKS5vYmplY3RCeU5hbWUoXCJzZWFyY2hlc1wiKTtcbiAgICAgICAgICogICAgICAgICAgdmFyIHBpdm90U3BlYyA9IHNlYXJjaGVzLmNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbigpO1xuICAgICAgICAgKiAgICAgICAgICAvLyBVc2Ugb2YgdGhlIGZsdWVudCBBUElcbiAgICAgICAgICogICAgICAgICAgcGl2b3RTcGVjLmFkZFJvd1NwbGl0KFwidXNlclwiLCBcIkV4ZWN1dGluZyB1c2VyXCIpXG4gICAgICAgICAqICAgICAgICAgICAgICAuYWRkUmFuZ2VDb2x1bW5TcGxpdChcImV4ZWNfdGltZVwiLCB7c3RhcnQ6IDAsIGVuZDogMTIsIHN0ZXA6IDUsIGxpbWl0OiA0fSlcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRDZWxsVmFsdWUoXCJzZWFyY2hcIiwgXCJTZWFyY2ggUXVlcnlcIiwgXCJ2YWx1ZXNcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5ydW4oZnVuY3Rpb24oZXJyLCBqb2IsIHBpdm90KSB7XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgU0lEIGlzOlwiLCBqb2Iuc2lkKTtcbiAgICAgICAgICogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlBpdm90IHNlYXJjaCBpczpcIiwgcGl2b3Quc2VhcmNoKTtcbiAgICAgICAgICogICAgICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IgKG9wdGlvbmFsKS4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkb25lIGdldHRpbmcgdGhlIHBpdm90OiBgKGVyciwgam9iLCBwaXZvdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBydW46IGZ1bmN0aW9uKGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xuXG4gICAgICAgICAgICB0aGlzLnBpdm90KGZ1bmN0aW9uKGVyciwgcGl2b3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwaXZvdC5ydW4oYXJncywgQXN5bmMuYXVnbWVudChjYWxsYmFjaywgcGl2b3QpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBvbmUgb2YgdGhlIHN0cnVjdHVyZWQgdmlld3MgaW4gYSBgRGF0YU1vZGVsYC5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGRhdGFNb2RlbGAgKF9zcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbF8pOiBUaGUgYERhdGFNb2RlbGAgdG8gd2hpY2ggdGhpcyBgRGF0YU1vZGVsT2JqZWN0YCBiZWxvbmdzLlxuICAgICAqICAgIC0gYG5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoaXMgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IFRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoaXMgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICogICAgLSBgcGFyZW50TmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBgRGF0YU1vZGVsT2JqZWN0YCB0byB0aGlzIG9uZS5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2YgdGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiAgICAgICAgICBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICogICAgLSBgZmllbGRzYCAoX29iamVjdF8pOiBBIGRpY3Rpb25hcnkgb2YgYERhdGFNb2RlbEZpZWxkYCBvYmplY3RzLCBhY2Nlc3NpYmxlIGJ5IG5hbWUuXG4gICAgICogICAgLSBgY29uc3RyYWludHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgYERhdGFNb2RlbENvbnN0cmFpbnRgIG9iamVjdHMuXG4gICAgICogICAgLSBgY2FsY3VsYXRpb25zYCAoX29iamVjdF8pOiBBIGRpY3Rpb25hcnkgb2YgYERhdGFNb2RlbENhbGN1bGF0aW9uYCBvYmplY3RzLCBhY2Nlc3NpYmxlIGJ5IElELlxuICAgICAqXG4gICAgICogQmFzZVNlYXJjaCBoYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eTpcbiAgICAgKiAgICAtIGBiYXNlU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHdyYXBwZWQgYnkgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEJhc2VUcmFuc2FjdGlvbiBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGdyb3VwQnlGaWVsZHNgIChfc3RyaW5nXyk6IFRoZSBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ3JvdXAgZXZlbnRzIGludG8gdHJhbnNhY3Rpb25zLlxuICAgICAqICAgIC0gYG9iamVjdHNUb0dyb3VwYCAoX2FycmF5Xyk6IE5hbWVzIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdW5pb25lZFxuICAgICAqICAgICAgICBhbmQgc3BsaXQgaW50byB0cmFuc2FjdGlvbnMuXG4gICAgICogICAgLSBgbWF4U3BhbmAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gdGltZSBzcGFuIG9mIGEgdHJhbnNhY3Rpb24uXG4gICAgICogICAgLSBgbWF4UGF1c2VgIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHBhdXNlIHRpbWUgb2YgYSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsT2JqZWN0ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBvYmplY3ROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBmb3IgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqICAgICAtIGBwYXJlbnROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCB0aGF0IG93bnMgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYGxpbmVhZ2VgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LFxuICAgICAgICAgKiAgICAgICAgICBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvIGFuIGFycmF5IG9mXG4gICAgICAgICAqICAgICAgICAgIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqICAgICAtIGBmaWVsZHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMuXG4gICAgICAgICAqICAgICAtIGBjb25zdHJhaW50c2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBkYXRhIG1vZGVsIGNvbnN0cmFpbnRzLlxuICAgICAgICAgKiAgICAgLSBgY2FsY3VsYXRpb25zYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIGRhdGEgbW9kZWwgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKiAgICAgLSBgYmFzZVNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSB3cmFwcGVkIGJ5IHRoaXMgZGF0YSBtb2RlbCBvYmplY3Q7IGV4Y2x1c2l2ZSB0byBCYXNlU2VhcmNoIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGdyb3VwQnlGaWVsZHNgIChfYXJyYXlfKTogVGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBncm91cCBldmVudHMgaW50byB0cmFuc2FjdGlvbnM7IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgb2JqZWN0c1RvR3JvdXBgIChfYXJyYXlfKTogTmFtZXMgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1bmlvbmVkXG4gICAgICAgICAqICAgICAgICAgYW5kIHNwbGl0IGludG8gdHJhbnNhY3Rpb25zOyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYG1heFNwYW5gIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHRpbWUgc3BhbiBvZiBhIHRyYW5zYWN0aW9uOyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYG1heFBhdXNlYCAoX3N0cmluZ18pOiBUaGUgbWF4aW11bSBwYXVzZSB0aW1lIG9mIGEgdHJhbnNhY3Rpb247IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBwYXJlbnREYXRhTW9kZWwgVGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcywgcGFyZW50RGF0YU1vZGVsKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbCAgICAgICAgICAgICAgPSBwYXJlbnREYXRhTW9kZWw7XG4gICAgICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICAgICAgICAgPSBwcm9wcy5vYmplY3ROYW1lO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSAgICAgICAgICAgID0gcHJvcHMuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0aGlzLnBhcmVudE5hbWUgICAgICAgICAgICAgPSBwcm9wcy5wYXJlbnROYW1lO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlICAgICAgICAgICAgICAgID0gcHJvcHMubGluZWFnZS5zcGxpdChcIi5cIik7XG5cbiAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvblxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwiZ3JvdXBCeUZpZWxkc1wiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBCeUZpZWxkcyA9IHByb3BzLmdyb3VwQnlGaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJvYmplY3RzVG9Hcm91cFwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0c1RvR3JvdXAgPSBwcm9wcy5vYmplY3RzVG9Hcm91cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcInRyYW5zYWN0aW9uTWF4VGltZVNwYW5cIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1heFNwYW4gPSBwcm9wcy50cmFuc2FjdGlvbk1heFRpbWVTcGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwidHJhbnNhY3Rpb25NYXhQYXVzZVwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4UGF1c2UgPSBwcm9wcy50cmFuc2FjdGlvbk1heFBhdXNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcm9wZXJ0eSBleGNsdXNpdmUgdG8gQmFzZVNlYXJjaFxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwiYmFzZVNlYXJjaFwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVNlYXJjaCA9IHByb3BzLmJhc2VTZWFyY2g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGZpZWxkc1xuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHNbcHJvcHMuZmllbGRzW2ldLmZpZWxkTmFtZV0gPSBuZXcgcm9vdC5EYXRhTW9kZWxGaWVsZChwcm9wcy5maWVsZHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQYXJzZSBjb25zdHJhaW50c1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5jb25zdHJhaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChuZXcgcm9vdC5EYXRhTW9kZWxDb25zdHJhaW50KHByb3BzLmNvbnN0cmFpbnRzW2pdKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGNhbGN1bGF0aW9uc1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcHJvcHMuY2FsY3VsYXRpb25zLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGlvbnNbcHJvcHMuY2FsY3VsYXRpb25zW2tdLmNhbGN1bGF0aW9uSURdID0gbmV3IHJvb3QuRGF0YU1vZGVsQ2FsY3VsYXRpb24ocHJvcHMuY2FsY3VsYXRpb25zW2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBhIEJhc2VTZWFyY2g/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBpcyB0aGUgcm9vdCB0eXBlLCBCYXNlU2VhcmNoLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpc0Jhc2VTZWFyY2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZCh0aGlzLmJhc2VTZWFyY2gpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGlzIGEgQmFzZVRyYW5zYWN0aW9uP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBXaGV0aGVyIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgaXMgdGhlIHJvb3QgdHlwZSwgQmFzZVRyYW5zYWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpc0Jhc2VUcmFuc2FjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHRoaXMubWF4U3Bhbik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgYXJyYXkgb2YgdGhlIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBkYXRhIG1vZGVsIGZpZWxkIGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBmaWVsZCBvbiB0aGlzXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0LiBcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZHxudWxsfSBUaGUgZGF0YSBtb2RlbCBmaWVsZFxuICAgICAgICAgKiBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG51bGwgaWYgaXQgdGhlIFxuICAgICAgICAgKiBmaWVsZCBieSB0aGF0IG5hbWUgZG9lc24ndCBleGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgZmllbGRCeU5hbWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKVtuYW1lXSB8fCB0aGlzLmZpZWxkc1tuYW1lXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLCBhbmQgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGBzcGx1bmsuU2VydmljZS5EYXRhTW9kZWxGaWVsZGAgb2JqZWN0c1xuICAgICAgICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgZmllbGRzLCBhbmQgdGhlIGZpZWxkcyBmcm9tXG4gICAgICAgICAqIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGFsbEZpZWxkczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBtZXJnZSBmaWVsZHMgYW5kIGNhbGN1bGF0ZWRGaWVsZHMoKVxuICAgICAgICAgICAgdmFyIGNvbWJpbmVkRmllbGRzID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGYgaW4gdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZHMuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRGaWVsZHNbZl0gPSB0aGlzLmZpZWxkc1tmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jYWxjdWxhdGVkRmllbGRzKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBjZiBpbiBjYWxjdWxhdGVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZWRGaWVsZHMuaGFzT3duUHJvcGVydHkoY2YpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkRmllbGRzW2NmXSA9IGNhbGN1bGF0ZWRGaWVsZHNbY2ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkRmllbGRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLCBhbmQgdGhlIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0J3MgY2FsY3VsYXRpb25zLCBhbmQgdGhlIG5hbWVzIG9mIGZpZWxkcyBvbiBcbiAgICAgICAgICogdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgYWxsRmllbGROYW1lczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hbGxGaWVsZHMoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVuay5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkYCBvYmplY3RzXG4gICAgICAgICAqIG9mIHRoZSBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjYWxjdWxhdGVkRmllbGRzOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjYWxjdWxhdGlvbnMsIGdldCB0aGVpciBmaWVsZHNcbiAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5jYWxjdWxhdGlvbklEcygpO1xuICAgICAgICAgICAgdmFyIGNhbGN1bGF0aW9ucyA9IHRoaXMuY2FsY3VsYXRpb25zO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhbGN1bGF0aW9uID0gY2FsY3VsYXRpb25zW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgY2FsY3VsYXRpb24ub3V0cHV0RmllbGROYW1lcygpLmxlbmd0aDsgZisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZE5hbWVzKClbZl1dID0gY2FsY3VsYXRpb24ub3V0cHV0RmllbGRzW2NhbGN1bGF0aW9uLm91dHB1dEZpZWxkTmFtZXMoKVtmXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzXG4gICAgICAgICAqIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0ZWRGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGNvbnRhaW5zIHRoZSBmaWVsZCB3aXRoIHRoZVxuICAgICAgICAgKiBuYW1lIHBhc3NlZCBpbiB0aGUgYGZpZWxkTmFtZWAgcGFyYW1ldGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBsb29rIGZvci5cbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY29udGFpbnMgdGhlIGZpZWxkIGJ5IG5hbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGhhc0ZpZWxkOiBmdW5jdGlvbihmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmFsbEZpZWxkTmFtZXMoKSwgZmllbGROYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgSURzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIElEcyBvZiB0aGlzIGRhdGEgbW9kZWxcbiAgICAgICAgICogb2JqZWN0J3MgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjYWxjdWxhdGlvbklEczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jYWxjdWxhdGlvbnMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMb2NhbCBhY2NlbGVyYXRpb24gaXMgdHNpZHggYWNjZWxlcmF0aW9uIG9mIGEgZGF0YSBtb2RlbCBvYmplY3QgdGhhdCBpcyBoYW5kbGVkXG4gICAgICAgICAqIG1hbnVhbGx5IGJ5IGEgdXNlci4gWW91IGNyZWF0ZSBhIGpvYiB3aGljaCBnZW5lcmF0ZXMgYW4gaW5kZXgsIGFuZCB0aGVuIHVzZSB0aGF0XG4gICAgICAgICAqIGluZGV4IGluIHlvdXIgcGl2b3RzIG9uIHRoZSBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIG5hbWVzcGFjZSBjcmVhdGVkIGJ5IHRoZSBqb2IgaXMgJ3NpZD17c2lkfScgd2hlcmUge3NpZH0gaXMgdGhlIGpvYidzIHNpZC4gWW91XG4gICAgICAgICAqIHdvdWxkIHVzZSBpdCBpbiBhbm90aGVyIGpvYiBieSBzdGFydGluZyB5b3VyIHNlYXJjaCBxdWVyeSB3aXRoIGB8IHRzdGF0cyAuLi4gZnJvbSBzaWQ9e3NpZH0gfCAuLi5gXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0c2lkeCBpbmRleCBjcmVhdGVkIGJ5IHRoaXMgam9iIGlzIGRlbGV0ZWQgd2hlbiB0aGUgam9iIGlzIGdhcmJhZ2UgY29sbGVjdGVkIGJ5IFNwbHVuay5cbiAgICAgICAgICpcbiAgICAgICAgICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBtYW5hZ2UgdGhpcyBqb2IsIGluY2x1ZGluZyBjYW5jZWxsaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgb2JqZWN0ID0gZGF0YU1vZGVscy5pdGVtKFwic29tZV9kYXRhX21vZGVsXCIpLm9iamVjdEJ5TmFtZShcInNvbWVfb2JqZWN0XCIpO1xuICAgICAgICAgKiAgICAgICAgICBvYmplY3QuY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2IoXCItMWRcIiwgZnVuY3Rpb24oZXJyLCBhY2NlbGVyYXRpb25Kb2IpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGpvYiBoYXMgbmFtZTpcIiwgYWNjZWxlcmF0aW9uSm9iLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVhcmxpZXN0VGltZSBBIHRpbWUgbW9kaWZpZXIgKGUuZy4sIFwiLTJ3XCIpIHNldHRpbmcgdGhlIGVhcmxpZXN0IHRpbWUgdG8gaW5kZXguXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgYWNjZWxlcmF0aW9uSm9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iOiBmdW5jdGlvbihlYXJsaWVzdFRpbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBlYXJsaWVzdFRpbWUgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gc2V0IGNhbGxiYWNrIHRvIGl0cyB2YWx1ZVxuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKGVhcmxpZXN0VGltZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVhcmxpZXN0VGltZTtcbiAgICAgICAgICAgICAgICBlYXJsaWVzdFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBxdWVyeSA9IFwifCBkYXRhbW9kZWwgXFxcIlwiICsgdGhpcy5kYXRhTW9kZWwubmFtZSArIFwiXFxcIiBcIiArIHRoaXMubmFtZSArIFwiIHNlYXJjaCB8IHRzY29sbGVjdFwiO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBlYXJsaWVzdFRpbWUgPyB7ZWFybGllc3RfdGltZTogZWFybGllc3RUaW1lfSA6IHt9O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5zZXJ2aWNlLnNlYXJjaChxdWVyeSwgYXJncywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydCBhIHNlYXJjaCBqb2IgdGhhdCBhcHBsaWVzIHF1ZXJ5U3VmZml4IHRvIGFsbCB0aGUgZXZlbnRzIGluIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBvYmplY3QgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICBvYmplY3Quc3RhcnRTZWFyY2goe30sIFwifCBoZWFkIDVcIiwgZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGpvYiBoYXMgbmFtZTpcIiwgam9iLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiAgICAgICAgKipOb3RlOioqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYGV4ZWNfbW9kZT1vbmVzaG90YCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIHdpdGggdGhlIHByb3BlcnRpZXMgZGljdGlvbmFyeS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5U3VmZml4IEEgc2VhcmNoIHF1ZXJ5LCBzdGFydGluZyB3aXRoIGEgJ3wnIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCB0byBmZXRjaCB0aGUgY29udGVudHMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCAoZS5nLiwgXCJ8IGhlYWQgM1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgc3RhcnRTZWFyY2g6IGZ1bmN0aW9uKHBhcmFtcywgcXVlcnlTdWZmaXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnkgPSBcInwgZGF0YW1vZGVsIFwiICsgdGhpcy5kYXRhTW9kZWwubmFtZSArIFwiIFwiICsgdGhpcy5uYW1lICsgXCIgc2VhcmNoXCI7XG4gICAgICAgICAgICAvLyBQcmVwZW5kIGEgc3BhY2UgdG8gdGhlIHF1ZXJ5U3VmZml4LCBvciBzZXQgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBxdWVyeVN1ZmZpeCA9IChxdWVyeVN1ZmZpeCkgPyAoXCIgXCIgKyBxdWVyeVN1ZmZpeCkgOiAoXCJcIik7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5zZXJ2aWNlLnNlYXJjaChxdWVyeSArIHF1ZXJ5U3VmZml4LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGlzIG9uZSBpbmhlcml0cyBmcm9tIGlmIGl0IGlzIGEgdXNlciBkZWZpbmVkLFxuICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0fG51bGx9IFRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBwYXJlbnRcbiAgICAgICAgICogICAgIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYSB1c2VyIGRlZmluZWQgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIHBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhTW9kZWwub2JqZWN0QnlOYW1lKHRoaXMucGFyZW50TmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIG5ldyBQaXZvdCBTcGVjaWZpY2F0aW9uLCBhY2NlcHRzIG5vIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBBIG5ldyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGVQaXZvdFNwZWNpZmljYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gUGFzcyBpbiB0aGlzIERhdGFNb2RlbE9iamVjdCB0byBjcmVhdGUgYSBQaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5QaXZvdFNwZWNpZmljYXRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZGF0YSBtb2RlbCBvbiB0aGUgc2VydmVyLiBEYXRhIG1vZGVsc1xuICAgICAqIGNvbnRhaW4gYERhdGFNb2RlbE9iamVjdGAgaW5zdGFuY2VzLCB3aGljaCBzcGVjaWZ5IHN0cnVjdHVyZWRcbiAgICAgKiB2aWV3cyBvbiBTcGx1bmsgZGF0YS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhbW9kZWwvbW9kZWwve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbCA9IFNlcnZpY2UuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5kYXRhTW9kZWxzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGRhdGEgbW9kZWwuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgKE9wdGlvbmFsKSBuYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIG9mIHRoaXMgZGF0YSBtb2RlbDpcbiAgICAgICAgICogICAgLSBgYWNjZWxlcmF0aW9uYCAoX3N0cmluZ18pOiBBIEpTT04gb2JqZWN0IHdpdGggYW4gYGVuYWJsZWRgIGtleSwgcmVwcmVzZW50aW5nIGlmIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICAgICAgICogICAgLSBgY29uY2lzZWAgKF9zdHJpbmdfKTogSW5kaWNhdGVzIHdoZXRoZXIgdG8gbGlzdCBhIGNvbmNpc2UgSlNPTiBkZXNjcmlwdGlvbiBvZiB0aGUgZGF0YSBtb2RlbCwgc2hvdWxkIGFsd2F5cyBiZSBcIjBcIi5cbiAgICAgICAgICogICAgLSBgZGVzY3JpcHRpb25gIChfc3RyaW5nXyk6IFRoZSBKU09OIGRlc2NyaWJpbmcgdGhlIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBkaXNwbGF5ZWQgZm9yIHRoZSBkYXRhIG1vZGVsIGluIFNwbHVuayBXZWIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSwgcHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIG5vdCBnaXZlbiBhIDR0aCBhcmcsIGFzc3VtZSB0aGUgbmFtZXNwYWNlIHdhcyBvbWl0dGVkXG4gICAgICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24gPSBKU09OLnBhcnNlKHByb3BzLmNvbnRlbnQuYWNjZWxlcmF0aW9uKSB8fCB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2VsZXJhdGlvbi5oYXNPd25Qcm9wZXJ0eShcImVuYWJsZWRcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBlbmFibGVkIHByb3BlcnR5IHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQgPSAhIXRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbmNpc2U9MCAoZmFsc2UpIGZvcmNlcyB0aGUgc2VydmVyIHRvIHJldHVybiBhbGwgZGV0YWlscyBvZiB0aGUgbmV3bHkgY3JlYXRlZCBkYXRhIG1vZGVsLlxuICAgICAgICAgICAgLy8gd2UgZG8gbm90IHdhbnQgYSBzdW1tYXJ5IG9mIHRoaXMgZGF0YSBtb2RlbFxuICAgICAgICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImNvbmNpc2VcIikgfHwgdXRpbHMuaXNVbmRlZmluZWQocHJvcHMuY29uY2lzZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmNpc2UgPSBcIjBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRhdGFNb2RlbERlZmluaXRpb24gPSBKU09OLnBhcnNlKHByb3BzLmNvbnRlbnQuZGVzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVzID0gZGF0YU1vZGVsRGVmaW5pdGlvbi5vYmplY3ROYW1lTGlzdDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkYXRhTW9kZWxEZWZpbml0aW9uLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGFNb2RlbERlZmluaXRpb24uZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBvYmplY3RzIGZvciB0aGlzIGRhdGEgbW9kZWwgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9ianMgPSBkYXRhTW9kZWxEZWZpbml0aW9uLm9iamVjdHM7XG4gICAgICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG5ldyByb290LkRhdGFNb2RlbE9iamVjdChvYmpzW2ldLCB0aGlzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGlzQWNjZWxlcmF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGRhdGEgbW9kZWwgb2JqZWN0IGZyb20gdGhpcyBkYXRhIG1vZGVsXG4gICAgICAgICAqIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGlmIGl0IGV4aXN0cywgbnVsbCBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdHxudWxsfSBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBvYmplY3RCeU5hbWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2JqZWN0c1tpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBib29sZWFuIG9mIHdoZXRoZXIgdGhpcyBleGlzdHMgaW4gdGhpcyBkYXRhIG1vZGVsIG9yIG5vdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBoYXMgb2JqZWN0IHdpdGggc3BlY2lmaWVkIG5hbWUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaGFzT2JqZWN0OiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5vYmplY3ROYW1lcywgbmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGRhdGEgbW9kZWwgb24gdGhlIHNlcnZlciwgdXNlZCB0byB1cGRhdGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gdXBkYXRlIHRoZSBvYmplY3Qgd2l0aDpcbiAgICAgICAgICogICAgIC0gYGFjY2VsZXJhdGlvbmAgKF9vYmplY3RfKTogVGhlIGFjY2VsZXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgICAgICAgVmFsaWQga2V5cyBhcmU6IGBlbmFibGVkYCwgYGVhcmxpZXN0VGltZWAsIGBjcm9uU2NoZWR1bGVgLlxuICAgICAgICAgKiAgICAgICAgIEFueSBrZXlzIG5vdCBzZXQgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzIGFscmVhZHlcbiAgICAgICAgICogICAgICAgICBzZXQgb24gdGhpcyBkYXRhIG1vZGVsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZGF0YSBtb2RlbCBpcyB1cGRhdGVkOiBgKGVyciwgZGF0YU1vZGVsKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9wcztcbiAgICAgICAgICAgICAgICBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuXG4gICAgICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiTXVzdCBzcGVjaWZ5IGEgcHJvcHMgYXJndW1lbnQgdG8gdXBkYXRlIGEgZGF0YSBtb2RlbC5cIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiBwcm9wcyBpc24ndCBzZXQsIHRvIGF2b2lkIGNhbGxpbmcgdGhlIGNhbGxiYWNrIHR3aWNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwibmFtZVwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgJ25hbWUnIGZpZWxkIGluICd1cGRhdGUnXCIpLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEV4aXQgaWYgdGhlIG5hbWUgaXMgc2V0LCB0byBhdm9pZCBjYWxsaW5nIHRoZSBjYWxsYmFjayB0d2ljZS5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBhY2NlbGVyYXRpb246IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogcHJvcHMuYWNjY2VsZXJhdGlvbiAmJiBwcm9wcy5hY2NlbGVyYXRpb24uZW5hYmxlZCB8fCB0aGlzLmFjY2VsZXJhdGlvbi5lbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICBlYXJsaWVzdF90aW1lOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5lYXJsaWVzdFRpbWUgfHwgdGhpcy5hY2NlbGVyYXRpb24uZWFybGllc3RUaW1lLFxuICAgICAgICAgICAgICAgICAgICBjcm9uX3NjaGVkdWxlOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5jcm9uU2NoZWR1bGUgfHwgdGhpcy5hY2NlbGVyYXRpb24uY3JvblNjaGVkdWxlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwgdXBkYXRlZFByb3BzLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFNb2RlbE5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHJlc3BvbnNlLmRhdGEuZW50cnlbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBuZXcgcm9vdC5EYXRhTW9kZWwodGhhdC5zZXJ2aWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdLm5hbWUsIGRhdGFNb2RlbE5hbWVzcGFjZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGF0YSBtb2RlbHMuIFlvdSBjYW4gY3JlYXRlIGFuZFxuICAgICAqIGxpc3QgZGF0YSBtb2RlbHMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3JcbiAgICAgKiBnZXQgYSBzcGVjaWZpYyBkYXRhIG1vZGVsLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbHMgPSBTZXJ2aWNlLkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5kYXRhTW9kZWxzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc2AuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIChPcHRpb25hbCkgbmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IGBEYXRhTW9kZWxgIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKiBJdCBpcyBwcmVmZXJyZWQgdGhhdCB5b3UgY3JlYXRlIGRhdGEgbW9kZWxzIHRocm91Z2ggdGhlIFNwbHVua1xuICAgICAgICAgKiBFbnRlcnByaXNlIHdpdGggYSBicm93c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCB0byBjcmVhdGUuIElmIGl0IGNvbnRhaW5zIHNwYWNlcyB0aGV5IHdpbGwgYmUgcmVwbGFjZWRcbiAgICAgICAgICogICAgIHdpdGggdW5kZXJzY29yZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgYERhdGFNb2RlbGAgb2JqZWN0OiBgKGVyciwgY3JlYXRlZERhdGFNb2RlbClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihuYW1lLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBnZXQgKG5hbWUsIGNhbGxiYWNrKSBpbnN0ZWFkIG9mIChuYW1lLCBwYXJhbXMsIGNhbGxiYWNrKVxuICAgICAgICAgICAgLy8gZG8gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZSBzd2FwXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCl7fTtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgXCJfXCIpO1xuXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0KFwiXCIsIHtuYW1lOiBuYW1lLCBkZXNjcmlwdGlvbjogSlNPTi5zdHJpbmdpZnkocGFyYW1zKX0sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU1vZGVsID0gbmV3IHJvb3QuRGF0YU1vZGVsKHRoYXQuc2VydmljZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5uYW1lLCB0aGF0Lm5hbWVzcGFjZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGFNb2RlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHVzZWQgdG8gY3JlYXRlIGEgXG4gICAgICAgICAqIGBEYXRhTW9kZWxgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbH0gQSBuZXcgYERhdGFNb2RlbGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRGF0YU1vZGVsKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlLCBwcm9wcyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qISovXG4gICAgLy8gSXRlcmF0ZXMgb3ZlciBhbiBlbmRwb2ludCdzIHJlc3VsdHMuXG4gICAgcm9vdC5QYWdpbmF0ZWRFbmRwb2ludEl0ZXJhdG9yID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oZW5kcG9pbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9lbmRwb2ludCA9IGVuZHBvaW50O1xuICAgICAgICAgICAgdGhpcy5fcGFnZXNpemUgPSBwYXJhbXMucGFnZXNpemUgfHwgMDtcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGZXRjaGVzIHRoZSBuZXh0IHBhZ2UgZnJvbSB0aGUgZW5kcG9pbnQuXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRoaXMuX3BhZ2VzaXplLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5fb2Zmc2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuZHBvaW50KHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtUmVzdWx0cyA9IChyZXN1bHRzLnJvd3MgPyByZXN1bHRzLnJvd3MubGVuZ3RoIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29mZnNldCArPSBudW1SZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0cywgbnVtUmVzdWx0cyA+IDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpOyJdfQ== \ No newline at end of file diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index b88cded10..cf10ea935 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -139,6 +139,68 @@ exports.setup = function (svc) { }); }); + it("Callback#create_v2", function (done) { + var that = this; + var namespace = { owner: "nobody", app: "system" }; + var filename = "jssdk_file_new_" + getNextId(); + var stanza = "jssdk_stanza" + var property1 = "foo1" + var value1 = "bar1"; + var property2 = "foo2" + var value2 = "bar2"; + + Async.chain([ + function (done) { + var configs = svc.configurations(namespace); + configs.fetch(done); + }, + async function (configs, done) { + var keyValueMap = {} + keyValueMap[property1] = value1; + keyValueMap[property2] = value2; + + configs.create_v2(configs, svc, filename, stanza, keyValueMap, done); + }, + async function (done) { + var configs = svc.configurations(namespace); + configs.fetch(); + + // a. File exists: Positive + var doesFileExistResponse1 = await configs.doesFileExist(filename); + var configFile = doesFileExistResponse1?.file; + assert.ok(configFile); + + // b. Stanza exists: Positive + configFile = await configFile.fetch_v2(); + var doesStanzaExistResponse1 = await configs.doesStanzaExist(configFile, stanza); + var configStanza = doesStanzaExistResponse1.stanza; + + assert.ok(configStanza); + assert.ok(configStanza._properties); + assert.strictEqual(configStanza._properties[property1], value1 ); + assert.strictEqual(configStanza._properties[property2], value2 ); + + // c. File exists: Negative + var doesFileExistResponse2 = await configs.doesFileExist("invalid_filename"); + var invalidConfigFile = doesFileExistResponse2?.file; + + assert.ok(!invalidConfigFile); + + // d. Stanza exists: Positive + var doesStanzaExistResponse2 = await configs.doesStanzaExist(configFile, "invalid_stanza_name"); + var invalidConfigStanza = doesStanzaExistResponse2.stanza; + + assert.ok(!invalidConfigStanza); + + done(); + }, + ], + function (err) { + assert.ok(!err); + done(); + }); + }); + it("Callback#can get default stanza", function (done) { var that = this; var namespace = { owner: "admin", app: "search" }; From fee7c72fb2b56608bca74b9345bf27912cc031fe Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 19 Nov 2021 16:57:15 +0530 Subject: [PATCH 38/50] remove .cache files --- lib/service.js | 6 +- ...40852eb3b30bc694a31ea4d853ea54b53a73249.js | 2876 ----------------- ...84d81786a58e3cde0369210c14b0a65c62d3b58.js | 2875 ---------------- 3 files changed, 3 insertions(+), 5754 deletions(-) delete mode 100644 node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js delete mode 100644 node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js diff --git a/lib/service.js b/lib/service.js index c6de116cf..98efcb767 100644 --- a/lib/service.js +++ b/lib/service.js @@ -3131,15 +3131,15 @@ // 2. Filter the files var files = response?.body?.entry?.filter(f => f.name === filename); - // 2. Check if the file exists + // 3. Check if the file exists if(files && files.length == 0) { return { code:"FILE_NOT_FOUND", message: `File with the name '${filename}' does not exist.`}; } - // 3. Create a local instance + // 4. Create a local instance var configurationFile = new root.ConfigurationFile(that.service, filename); - // 4. Load the file content + // 5. Load the file content var fetchedFile = await configurationFile.fetch_v2(); return {file: fetchedFile}; diff --git a/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js b/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js deleted file mode 100644 index e43a4157e..000000000 --- a/node_modules/.cache/nyc/service-c5a42beecb731026519e3377040852eb3b30bc694a31ea4d853ea54b53a73249.js +++ /dev/null @@ -1,2876 +0,0 @@ -function cov_1ks4ntaci2(){var path="/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js";var hash="b527bc3bbffe3a4fee511c63590269cdc3ea500f";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js",statementMap:{"0":{start:{line:16,column:0},end:{line:5803,column:5}},"1":{start:{line:19,column:22},end:{line:19,column:42}},"2":{start:{line:20,column:22},end:{line:20,column:39}},"3":{start:{line:21,column:22},end:{line:21,column:40}},"4":{start:{line:22,column:22},end:{line:22,column:46}},"5":{start:{line:23,column:22},end:{line:23,column:53}},"6":{start:{line:24,column:22},end:{line:24,column:40}},"7":{start:{line:26,column:15},end:{line:26,column:30}},"8":{start:{line:27,column:18},end:{line:27,column:22}},"9":{start:{line:37,column:22},end:{line:41,column:6}},"10":{start:{line:39,column:12},end:{line:39,column:47}},"11":{start:{line:51,column:4},end:{line:664,column:7}},"12":{start:{line:73,column:12},end:{line:73,column:47}},"13":{start:{line:77,column:12},end:{line:77,column:72}},"14":{start:{line:78,column:12},end:{line:78,column:66}},"15":{start:{line:79,column:12},end:{line:79,column:76}},"16":{start:{line:80,column:12},end:{line:80,column:69}},"17":{start:{line:81,column:12},end:{line:81,column:75}},"18":{start:{line:82,column:12},end:{line:82,column:66}},"19":{start:{line:83,column:12},end:{line:83,column:67}},"20":{start:{line:84,column:12},end:{line:84,column:73}},"21":{start:{line:85,column:12},end:{line:85,column:67}},"22":{start:{line:86,column:12},end:{line:86,column:78}},"23":{start:{line:87,column:12},end:{line:87,column:72}},"24":{start:{line:106,column:12},end:{line:116,column:15}},"25":{start:{line:136,column:12},end:{line:136,column:47}},"26":{start:{line:164,column:12},end:{line:164,column:60}},"27":{start:{line:192,column:12},end:{line:192,column:53}},"28":{start:{line:218,column:12},end:{line:218,column:59}},"29":{start:{line:244,column:12},end:{line:244,column:62}},"30":{start:{line:271,column:12},end:{line:271,column:71}},"31":{start:{line:300,column:12},end:{line:300,column:50}},"32":{start:{line:312,column:12},end:{line:312,column:56}},"33":{start:{line:337,column:12},end:{line:337,column:40}},"34":{start:{line:366,column:12},end:{line:366,column:51}},"35":{start:{line:397,column:12},end:{line:400,column:13}},"36":{start:{line:398,column:16},end:{line:398,column:37}},"37":{start:{line:399,column:16},end:{line:399,column:33}},"38":{start:{line:402,column:23},end:{line:402,column:53}},"39":{start:{line:403,column:12},end:{line:403,column:56}},"40":{start:{line:420,column:12},end:{line:423,column:13}},"41":{start:{line:421,column:16},end:{line:421,column:37}},"42":{start:{line:422,column:16},end:{line:422,column:33}},"43":{start:{line:424,column:22},end:{line:424,column:56}},"44":{start:{line:425,column:12},end:{line:425,column:43}},"45":{start:{line:453,column:12},end:{line:456,column:13}},"46":{start:{line:454,column:16},end:{line:454,column:37}},"47":{start:{line:455,column:16},end:{line:455,column:33}},"48":{start:{line:458,column:23},end:{line:458,column:53}},"49":{start:{line:459,column:12},end:{line:459,column:63}},"50":{start:{line:478,column:12},end:{line:478,column:49}},"51":{start:{line:480,column:23},end:{line:480,column:27}},"52":{start:{line:481,column:22},end:{line:497,column:14}},"53":{start:{line:482,column:16},end:{line:496,column:17}},"54":{start:{line:483,column:20},end:{line:483,column:34}},"55":{start:{line:486,column:35},end:{line:486,column:74}},"56":{start:{line:487,column:31},end:{line:487,column:60}},"57":{start:{line:488,column:20},end:{line:495,column:23}},"58":{start:{line:489,column:24},end:{line:494,column:25}},"59":{start:{line:490,column:28},end:{line:490,column:35}},"60":{start:{line:493,column:28},end:{line:493,column:60}},"61":{start:{line:499,column:12},end:{line:499,column:23}},"62":{start:{line:517,column:12},end:{line:517,column:49}},"63":{start:{line:519,column:29},end:{line:519,column:54}},"64":{start:{line:520,column:12},end:{line:520,column:46}},"65":{start:{line:544,column:12},end:{line:547,column:13}},"66":{start:{line:545,column:16},end:{line:545,column:34}},"67":{start:{line:546,column:16},end:{line:546,column:28}},"68":{start:{line:549,column:12},end:{line:549,column:49}},"69":{start:{line:550,column:12},end:{line:550,column:34}},"70":{start:{line:552,column:12},end:{line:552,column:29}},"71":{start:{line:554,column:12},end:{line:561,column:15}},"72":{start:{line:555,column:16},end:{line:560,column:17}},"73":{start:{line:556,column:20},end:{line:556,column:34}},"74":{start:{line:559,column:20},end:{line:559,column:50}},"75":{start:{line:581,column:12},end:{line:584,column:13}},"76":{start:{line:582,column:16},end:{line:582,column:33}},"77":{start:{line:583,column:16},end:{line:583,column:27}},"78":{start:{line:586,column:12},end:{line:586,column:49}},"79":{start:{line:587,column:25},end:{line:590,column:13}},"80":{start:{line:592,column:12},end:{line:600,column:15}},"81":{start:{line:593,column:16},end:{line:599,column:17}},"82":{start:{line:594,column:20},end:{line:594,column:34}},"83":{start:{line:597,column:34},end:{line:597,column:63}},"84":{start:{line:598,column:20},end:{line:598,column:50}},"85":{start:{line:625,column:12},end:{line:628,column:13}},"86":{start:{line:626,column:16},end:{line:626,column:34}},"87":{start:{line:627,column:16},end:{line:627,column:28}},"88":{start:{line:630,column:12},end:{line:630,column:49}},"89":{start:{line:631,column:12},end:{line:631,column:34}},"90":{start:{line:634,column:12},end:{line:636,column:13}},"91":{start:{line:635,column:16},end:{line:635,column:46}},"92":{start:{line:638,column:23},end:{line:638,column:45}},"93":{start:{line:639,column:25},end:{line:639,column:31}},"94":{start:{line:640,column:26},end:{line:640,column:56}},"95":{start:{line:641,column:23},end:{line:641,column:28}},"96":{start:{line:642,column:22},end:{line:642,column:28}},"97":{start:{line:643,column:23},end:{line:643,column:25}},"98":{start:{line:645,column:22},end:{line:660,column:13}},"99":{start:{line:653,column:20},end:{line:658,column:21}},"100":{start:{line:654,column:24},end:{line:654,column:38}},"101":{start:{line:657,column:24},end:{line:657,column:54}},"102":{start:{line:662,column:12},end:{line:662,column:23}},"103":{start:{line:674,column:4},end:{line:815,column:7}},"104":{start:{line:686,column:12},end:{line:688,column:13}},"105":{start:{line:687,column:16},end:{line:687,column:61}},"106":{start:{line:690,column:12},end:{line:692,column:13}},"107":{start:{line:691,column:16},end:{line:691,column:60}},"108":{start:{line:694,column:12},end:{line:694,column:35}},"109":{start:{line:695,column:12},end:{line:695,column:47}},"110":{start:{line:699,column:12},end:{line:699,column:53}},"111":{start:{line:701,column:12},end:{line:701,column:54}},"112":{start:{line:702,column:12},end:{line:702,column:53}},"113":{start:{line:722,column:22},end:{line:722,column:40}},"114":{start:{line:726,column:12},end:{line:728,column:13}},"115":{start:{line:727,column:16},end:{line:727,column:42}},"116":{start:{line:730,column:12},end:{line:734,column:14}},"117":{start:{line:738,column:22},end:{line:738,column:40}},"118":{start:{line:742,column:12},end:{line:744,column:13}},"119":{start:{line:743,column:16},end:{line:743,column:42}},"120":{start:{line:746,column:12},end:{line:749,column:14}},"121":{start:{line:769,column:22},end:{line:769,column:40}},"122":{start:{line:773,column:12},end:{line:775,column:13}},"123":{start:{line:774,column:16},end:{line:774,column:42}},"124":{start:{line:777,column:12},end:{line:781,column:14}},"125":{start:{line:801,column:22},end:{line:801,column:40}},"126":{start:{line:805,column:12},end:{line:807,column:13}},"127":{start:{line:806,column:16},end:{line:806,column:42}},"128":{start:{line:809,column:12},end:{line:813,column:14}},"129":{start:{line:828,column:4},end:{line:916,column:7}},"130":{start:{line:844,column:27},end:{line:844,column:60}},"131":{start:{line:846,column:12},end:{line:846,column:43}},"132":{start:{line:847,column:12},end:{line:847,column:39}},"133":{start:{line:848,column:12},end:{line:848,column:34}},"134":{start:{line:849,column:12},end:{line:849,column:29}},"135":{start:{line:853,column:12},end:{line:853,column:60}},"136":{start:{line:854,column:12},end:{line:854,column:60}},"137":{start:{line:855,column:12},end:{line:855,column:65}},"138":{start:{line:856,column:12},end:{line:856,column:60}},"139":{start:{line:857,column:12},end:{line:857,column:59}},"140":{start:{line:866,column:12},end:{line:866,column:50}},"141":{start:{line:878,column:12},end:{line:878,column:48}},"142":{start:{line:879,column:12},end:{line:879,column:43}},"143":{start:{line:892,column:12},end:{line:892,column:50}},"144":{start:{line:903,column:12},end:{line:903,column:36}},"145":{start:{line:914,column:12},end:{line:914,column:31}},"146":{start:{line:929,column:4},end:{line:1238,column:7}},"147":{start:{line:954,column:12},end:{line:954,column:50}},"148":{start:{line:958,column:12},end:{line:958,column:58}},"149":{start:{line:959,column:12},end:{line:959,column:58}},"150":{start:{line:960,column:12},end:{line:960,column:59}},"151":{start:{line:961,column:12},end:{line:961,column:59}},"152":{start:{line:962,column:12},end:{line:962,column:59}},"153":{start:{line:963,column:12},end:{line:963,column:58}},"154":{start:{line:964,column:12},end:{line:964,column:56}},"155":{start:{line:965,column:12},end:{line:965,column:59}},"156":{start:{line:966,column:12},end:{line:966,column:60}},"157":{start:{line:967,column:12},end:{line:967,column:62}},"158":{start:{line:968,column:12},end:{line:968,column:59}},"159":{start:{line:969,column:12},end:{line:969,column:60}},"160":{start:{line:970,column:12},end:{line:970,column:59}},"161":{start:{line:973,column:12},end:{line:973,column:34}},"162":{start:{line:974,column:12},end:{line:974,column:34}},"163":{start:{line:975,column:12},end:{line:975,column:34}},"164":{start:{line:976,column:12},end:{line:976,column:34}},"165":{start:{line:988,column:12},end:{line:988,column:80}},"166":{start:{line:992,column:12},end:{line:997,column:14}},"167":{start:{line:999,column:12},end:{line:999,column:36}},"168":{start:{line:1002,column:12},end:{line:1002,column:58}},"169":{start:{line:1003,column:12},end:{line:1003,column:74}},"170":{start:{line:1004,column:12},end:{line:1004,column:58}},"171":{start:{line:1005,column:12},end:{line:1005,column:58}},"172":{start:{line:1006,column:12},end:{line:1006,column:60}},"173":{start:{line:1007,column:12},end:{line:1007,column:60}},"174":{start:{line:1008,column:12},end:{line:1008,column:60}},"175":{start:{line:1020,column:12},end:{line:1020,column:32}},"176":{start:{line:1032,column:12},end:{line:1032,column:29}},"177":{start:{line:1044,column:12},end:{line:1044,column:31}},"178":{start:{line:1055,column:12},end:{line:1055,column:32}},"179":{start:{line:1066,column:12},end:{line:1066,column:33}},"180":{start:{line:1077,column:12},end:{line:1077,column:35}},"181":{start:{line:1096,column:12},end:{line:1099,column:13}},"182":{start:{line:1097,column:16},end:{line:1097,column:35}},"183":{start:{line:1098,column:16},end:{line:1098,column:29}},"184":{start:{line:1100,column:12},end:{line:1100,column:49}},"185":{start:{line:1102,column:12},end:{line:1102,column:36}},"186":{start:{line:1104,column:23},end:{line:1104,column:27}},"187":{start:{line:1105,column:12},end:{line:1113,column:15}},"188":{start:{line:1106,column:16},end:{line:1112,column:17}},"189":{start:{line:1107,column:20},end:{line:1107,column:34}},"190":{start:{line:1110,column:20},end:{line:1110,column:75}},"191":{start:{line:1111,column:20},end:{line:1111,column:41}},"192":{start:{line:1125,column:12},end:{line:1125,column:49}},"193":{start:{line:1127,column:23},end:{line:1127,column:27}},"194":{start:{line:1128,column:12},end:{line:1130,column:15}},"195":{start:{line:1129,column:16},end:{line:1129,column:30}},"196":{start:{line:1143,column:12},end:{line:1143,column:49}},"197":{start:{line:1145,column:12},end:{line:1147,column:13}},"198":{start:{line:1146,column:16},end:{line:1146,column:71}},"199":{start:{line:1149,column:23},end:{line:1149,column:27}},"200":{start:{line:1150,column:22},end:{line:1168,column:14}},"201":{start:{line:1151,column:16},end:{line:1167,column:17}},"202":{start:{line:1152,column:20},end:{line:1152,column:52}},"203":{start:{line:1153,column:20},end:{line:1153,column:40}},"204":{start:{line:1155,column:21},end:{line:1167,column:17}},"205":{start:{line:1156,column:20},end:{line:1163,column:23}},"206":{start:{line:1157,column:24},end:{line:1162,column:25}},"207":{start:{line:1158,column:28},end:{line:1158,column:35}},"208":{start:{line:1161,column:28},end:{line:1161,column:60}},"209":{start:{line:1166,column:20},end:{line:1166,column:40}},"210":{start:{line:1170,column:12},end:{line:1170,column:23}},"211":{start:{line:1182,column:12},end:{line:1182,column:49}},"212":{start:{line:1184,column:23},end:{line:1184,column:27}},"213":{start:{line:1185,column:12},end:{line:1192,column:15}},"214":{start:{line:1186,column:16},end:{line:1191,column:17}},"215":{start:{line:1187,column:20},end:{line:1187,column:34}},"216":{start:{line:1190,column:20},end:{line:1190,column:41}},"217":{start:{line:1204,column:12},end:{line:1204,column:49}},"218":{start:{line:1206,column:23},end:{line:1206,column:27}},"219":{start:{line:1207,column:12},end:{line:1214,column:15}},"220":{start:{line:1208,column:16},end:{line:1213,column:17}},"221":{start:{line:1209,column:20},end:{line:1209,column:34}},"222":{start:{line:1212,column:20},end:{line:1212,column:41}},"223":{start:{line:1226,column:12},end:{line:1226,column:49}},"224":{start:{line:1228,column:23},end:{line:1228,column:27}},"225":{start:{line:1229,column:12},end:{line:1236,column:15}},"226":{start:{line:1230,column:16},end:{line:1235,column:17}},"227":{start:{line:1231,column:20},end:{line:1231,column:34}},"228":{start:{line:1234,column:20},end:{line:1234,column:41}},"229":{start:{line:1248,column:4},end:{line:1579,column:7}},"230":{start:{line:1273,column:12},end:{line:1273,column:50}},"231":{start:{line:1277,column:12},end:{line:1277,column:66}},"232":{start:{line:1278,column:12},end:{line:1278,column:66}},"233":{start:{line:1279,column:12},end:{line:1279,column:67}},"234":{start:{line:1280,column:12},end:{line:1280,column:65}},"235":{start:{line:1281,column:12},end:{line:1281,column:65}},"236":{start:{line:1282,column:12},end:{line:1282,column:78}},"237":{start:{line:1285,column:12},end:{line:1285,column:38}},"238":{start:{line:1286,column:12},end:{line:1286,column:38}},"239":{start:{line:1287,column:12},end:{line:1287,column:38}},"240":{start:{line:1288,column:12},end:{line:1288,column:38}},"241":{start:{line:1289,column:12},end:{line:1289,column:38}},"242":{start:{line:1301,column:12},end:{line:1301,column:50}},"243":{start:{line:1314,column:12},end:{line:1314,column:36}},"244":{start:{line:1316,column:27},end:{line:1316,column:29}},"245":{start:{line:1317,column:33},end:{line:1317,column:35}},"246":{start:{line:1318,column:37},end:{line:1318,column:59}},"247":{start:{line:1319,column:12},end:{line:1331,column:13}},"248":{start:{line:1319,column:24},end:{line:1319,column:25}},"249":{start:{line:1320,column:28},end:{line:1320,column:49}},"250":{start:{line:1321,column:29},end:{line:1321,column:58}},"251":{start:{line:1322,column:16},end:{line:1322,column:36}},"252":{start:{line:1323,column:16},end:{line:1323,column:38}},"253":{start:{line:1325,column:16},end:{line:1330,column:17}},"254":{start:{line:1326,column:20},end:{line:1326,column:61}},"255":{start:{line:1329,column:20},end:{line:1329,column:59}},"256":{start:{line:1332,column:12},end:{line:1332,column:44}},"257":{start:{line:1333,column:12},end:{line:1333,column:50}},"258":{start:{line:1334,column:12},end:{line:1334,column:62}},"259":{start:{line:1335,column:12},end:{line:1335,column:62}},"260":{start:{line:1336,column:12},end:{line:1336,column:64}},"261":{start:{line:1348,column:12},end:{line:1348,column:31}},"262":{start:{line:1359,column:12},end:{line:1359,column:32}},"263":{start:{line:1370,column:12},end:{line:1370,column:33}},"264":{start:{line:1389,column:12},end:{line:1392,column:13}},"265":{start:{line:1390,column:16},end:{line:1390,column:35}},"266":{start:{line:1391,column:16},end:{line:1391,column:29}},"267":{start:{line:1393,column:12},end:{line:1393,column:49}},"268":{start:{line:1395,column:12},end:{line:1395,column:36}},"269":{start:{line:1396,column:12},end:{line:1398,column:13}},"270":{start:{line:1397,column:16},end:{line:1397,column:34}},"271":{start:{line:1400,column:23},end:{line:1400,column:27}},"272":{start:{line:1401,column:22},end:{line:1409,column:14}},"273":{start:{line:1402,column:16},end:{line:1408,column:17}},"274":{start:{line:1403,column:20},end:{line:1403,column:34}},"275":{start:{line:1406,column:20},end:{line:1406,column:46}},"276":{start:{line:1407,column:20},end:{line:1407,column:41}},"277":{start:{line:1411,column:12},end:{line:1411,column:23}},"278":{start:{line:1415,column:12},end:{line:1415,column:36}},"279":{start:{line:1416,column:12},end:{line:1418,column:13}},"280":{start:{line:1417,column:16},end:{line:1417,column:34}},"281":{start:{line:1420,column:23},end:{line:1420,column:27}},"282":{start:{line:1421,column:27},end:{line:1421,column:57}},"283":{start:{line:1423,column:12},end:{line:1423,column:38}},"284":{start:{line:1424,column:12},end:{line:1424,column:24}},"285":{start:{line:1449,column:12},end:{line:1451,column:13}},"286":{start:{line:1450,column:16},end:{line:1450,column:33}},"287":{start:{line:1453,column:12},end:{line:1455,column:13}},"288":{start:{line:1454,column:16},end:{line:1454,column:64}},"289":{start:{line:1457,column:12},end:{line:1459,column:13}},"290":{start:{line:1458,column:16},end:{line:1458,column:136}},"291":{start:{line:1461,column:27},end:{line:1461,column:31}},"292":{start:{line:1462,column:12},end:{line:1504,column:13}},"293":{start:{line:1463,column:31},end:{line:1463,column:55}},"294":{start:{line:1465,column:16},end:{line:1500,column:17}},"295":{start:{line:1470,column:20},end:{line:1470,column:39}},"296":{start:{line:1472,column:21},end:{line:1500,column:17}},"297":{start:{line:1476,column:20},end:{line:1476,column:84}},"298":{start:{line:1477,column:20},end:{line:1482,column:21}},"299":{start:{line:1478,column:24},end:{line:1478,column:43}},"300":{start:{line:1481,column:24},end:{line:1481,column:36}},"301":{start:{line:1484,column:21},end:{line:1500,column:17}},"302":{start:{line:1488,column:20},end:{line:1488,column:77}},"303":{start:{line:1493,column:20},end:{line:1499,column:21}},"304":{start:{line:1493,column:32},end:{line:1493,column:33}},"305":{start:{line:1494,column:37},end:{line:1494,column:48}},"306":{start:{line:1495,column:24},end:{line:1495,column:88}},"307":{start:{line:1496,column:24},end:{line:1498,column:25}},"308":{start:{line:1497,column:28},end:{line:1497,column:42}},"309":{start:{line:1503,column:16},end:{line:1503,column:28}},"310":{start:{line:1525,column:12},end:{line:1525,column:49}},"311":{start:{line:1526,column:23},end:{line:1526,column:27}},"312":{start:{line:1527,column:22},end:{line:1554,column:14}},"313":{start:{line:1528,column:16},end:{line:1553,column:17}},"314":{start:{line:1529,column:20},end:{line:1529,column:34}},"315":{start:{line:1532,column:32},end:{line:1532,column:51}},"316":{start:{line:1533,column:20},end:{line:1535,column:21}},"317":{start:{line:1534,column:24},end:{line:1534,column:41}},"318":{start:{line:1537,column:33},end:{line:1537,column:62}},"319":{start:{line:1538,column:20},end:{line:1538,column:40}},"320":{start:{line:1540,column:20},end:{line:1552,column:21}},"321":{start:{line:1541,column:24},end:{line:1548,column:27}},"322":{start:{line:1542,column:28},end:{line:1547,column:29}},"323":{start:{line:1543,column:32},end:{line:1543,column:39}},"324":{start:{line:1546,column:32},end:{line:1546,column:64}},"325":{start:{line:1551,column:24},end:{line:1551,column:47}},"326":{start:{line:1556,column:12},end:{line:1556,column:23}},"327":{start:{line:1575,column:12},end:{line:1575,column:49}},"328":{start:{line:1577,column:12},end:{line:1577,column:47}},"329":{start:{line:1589,column:4},end:{line:1843,column:7}},"330":{start:{line:1596,column:12},end:{line:1596,column:77}},"331":{start:{line:1614,column:12},end:{line:1614,column:29}},"332":{start:{line:1615,column:12},end:{line:1615,column:57}},"333":{start:{line:1617,column:12},end:{line:1617,column:67}},"334":{start:{line:1618,column:12},end:{line:1618,column:64}},"335":{start:{line:1619,column:12},end:{line:1619,column:63}},"336":{start:{line:1620,column:12},end:{line:1620,column:68}},"337":{start:{line:1637,column:12},end:{line:1637,column:78}},"338":{start:{line:1657,column:12},end:{line:1657,column:49}},"339":{start:{line:1659,column:23},end:{line:1659,column:27}},"340":{start:{line:1660,column:22},end:{line:1662,column:14}},"341":{start:{line:1661,column:16},end:{line:1661,column:36}},"342":{start:{line:1664,column:12},end:{line:1664,column:23}},"343":{start:{line:1689,column:12},end:{line:1692,column:13}},"344":{start:{line:1690,column:16},end:{line:1690,column:35}},"345":{start:{line:1691,column:16},end:{line:1691,column:29}},"346":{start:{line:1694,column:12},end:{line:1694,column:49}},"347":{start:{line:1695,column:12},end:{line:1695,column:36}},"348":{start:{line:1697,column:23},end:{line:1697,column:27}},"349":{start:{line:1698,column:22},end:{line:1708,column:14}},"350":{start:{line:1699,column:16},end:{line:1702,column:17}},"351":{start:{line:1700,column:20},end:{line:1700,column:34}},"352":{start:{line:1701,column:20},end:{line:1701,column:27}},"353":{start:{line:1704,column:26},end:{line:1704,column:43}},"354":{start:{line:1705,column:26},end:{line:1705,column:73}},"355":{start:{line:1707,column:16},end:{line:1707,column:42}},"356":{start:{line:1710,column:12},end:{line:1710,column:23}},"357":{start:{line:1726,column:12},end:{line:1726,column:69}},"358":{start:{line:1749,column:12},end:{line:1752,column:13}},"359":{start:{line:1750,column:16},end:{line:1750,column:35}},"360":{start:{line:1751,column:16},end:{line:1751,column:29}},"361":{start:{line:1754,column:12},end:{line:1754,column:49}},"362":{start:{line:1755,column:12},end:{line:1755,column:36}},"363":{start:{line:1757,column:23},end:{line:1757,column:27}},"364":{start:{line:1758,column:12},end:{line:1776,column:15}},"365":{start:{line:1759,column:16},end:{line:1762,column:17}},"366":{start:{line:1760,column:20},end:{line:1760,column:34}},"367":{start:{line:1761,column:20},end:{line:1761,column:27}},"368":{start:{line:1764,column:27},end:{line:1764,column:29}},"369":{start:{line:1765,column:27},end:{line:1765,column:52}},"370":{start:{line:1766,column:16},end:{line:1773,column:17}},"371":{start:{line:1766,column:28},end:{line:1766,column:29}},"372":{start:{line:1767,column:34},end:{line:1767,column:56}},"373":{start:{line:1768,column:36},end:{line:1768,column:74}},"374":{start:{line:1769,column:30},end:{line:1769,column:81}},"375":{start:{line:1771,column:20},end:{line:1771,column:39}},"376":{start:{line:1772,column:20},end:{line:1772,column:35}},"377":{start:{line:1775,column:16},end:{line:1775,column:43}},"378":{start:{line:1795,column:12},end:{line:1795,column:49}},"379":{start:{line:1797,column:23},end:{line:1797,column:27}},"380":{start:{line:1798,column:12},end:{line:1800,column:15}},"381":{start:{line:1799,column:16},end:{line:1799,column:65}},"382":{start:{line:1816,column:12},end:{line:1816,column:34}},"383":{start:{line:1818,column:12},end:{line:1841,column:13}},"384":{start:{line:1819,column:29},end:{line:1819,column:40}},"385":{start:{line:1820,column:26},end:{line:1835,column:18}},"386":{start:{line:1821,column:20},end:{line:1834,column:21}},"387":{start:{line:1822,column:24},end:{line:1822,column:38}},"388":{start:{line:1825,column:24},end:{line:1825,column:67}},"389":{start:{line:1826,column:24},end:{line:1833,column:27}},"390":{start:{line:1827,column:28},end:{line:1832,column:29}},"391":{start:{line:1828,column:32},end:{line:1828,column:39}},"392":{start:{line:1831,column:32},end:{line:1831,column:64}},"393":{start:{line:1837,column:16},end:{line:1837,column:27}},"394":{start:{line:1840,column:16},end:{line:1840,column:53}},"395":{start:{line:1854,column:4},end:{line:1893,column:7}},"396":{start:{line:1861,column:12},end:{line:1861,column:39}},"397":{start:{line:1873,column:34},end:{line:1873,column:70}},"398":{start:{line:1874,column:12},end:{line:1874,column:83}},"399":{start:{line:1891,column:12},end:{line:1891,column:57}},"400":{start:{line:1903,column:4},end:{line:1931,column:7}},"401":{start:{line:1910,column:12},end:{line:1910,column:80}},"402":{start:{line:1928,column:12},end:{line:1928,column:29}},"403":{start:{line:1929,column:12},end:{line:1929,column:57}},"404":{start:{line:1941,column:4},end:{line:1991,column:7}},"405":{start:{line:1957,column:12},end:{line:1957,column:42}},"406":{start:{line:1971,column:34},end:{line:1971,column:70}},"407":{start:{line:1972,column:12},end:{line:1972,column:87}},"408":{start:{line:1989,column:12},end:{line:1989,column:57}},"409":{start:{line:2002,column:4},end:{line:2143,column:7}},"410":{start:{line:2009,column:12},end:{line:2009,column:75}},"411":{start:{line:2021,column:12},end:{line:2021,column:51}},"412":{start:{line:2031,column:12},end:{line:2031,column:56}},"413":{start:{line:2045,column:12},end:{line:2045,column:51}},"414":{start:{line:2057,column:12},end:{line:2057,column:70}},"415":{start:{line:2067,column:12},end:{line:2067,column:62}},"416":{start:{line:2078,column:12},end:{line:2078,column:66}},"417":{start:{line:2088,column:12},end:{line:2088,column:49}},"418":{start:{line:2098,column:12},end:{line:2098,column:58}},"419":{start:{line:2110,column:12},end:{line:2110,column:67}},"420":{start:{line:2122,column:12},end:{line:2122,column:74}},"421":{start:{line:2140,column:12},end:{line:2140,column:29}},"422":{start:{line:2141,column:12},end:{line:2141,column:57}},"423":{start:{line:2154,column:4},end:{line:2243,column:7}},"424":{start:{line:2161,column:12},end:{line:2161,column:75}},"425":{start:{line:2173,column:12},end:{line:2173,column:78}},"426":{start:{line:2194,column:12},end:{line:2197,column:13}},"427":{start:{line:2195,column:16},end:{line:2195,column:35}},"428":{start:{line:2196,column:16},end:{line:2196,column:29}},"429":{start:{line:2199,column:12},end:{line:2199,column:49}},"430":{start:{line:2200,column:12},end:{line:2200,column:36}},"431":{start:{line:2202,column:23},end:{line:2202,column:27}},"432":{start:{line:2203,column:12},end:{line:2220,column:15}},"433":{start:{line:2204,column:16},end:{line:2207,column:17}},"434":{start:{line:2205,column:20},end:{line:2205,column:34}},"435":{start:{line:2206,column:20},end:{line:2206,column:27}},"436":{start:{line:2209,column:34},end:{line:2209,column:36}},"437":{start:{line:2210,column:27},end:{line:2210,column:52}},"438":{start:{line:2211,column:16},end:{line:2217,column:17}},"439":{start:{line:2211,column:29},end:{line:2211,column:30}},"440":{start:{line:2212,column:41},end:{line:2212,column:63}},"441":{start:{line:2213,column:36},end:{line:2213,column:81}},"442":{start:{line:2214,column:37},end:{line:2214,column:102}},"443":{start:{line:2215,column:20},end:{line:2215,column:53}},"444":{start:{line:2216,column:20},end:{line:2216,column:49}},"445":{start:{line:2219,column:16},end:{line:2219,column:50}},"446":{start:{line:2238,column:12},end:{line:2238,column:29}},"447":{start:{line:2239,column:12},end:{line:2239,column:57}},"448":{start:{line:2241,column:12},end:{line:2241,column:52}},"449":{start:{line:2255,column:4},end:{line:2306,column:7}},"450":{start:{line:2262,column:12},end:{line:2262,column:37}},"451":{start:{line:2274,column:34},end:{line:2274,column:70}},"452":{start:{line:2275,column:12},end:{line:2275,column:87}},"453":{start:{line:2284,column:12},end:{line:2284,column:95}},"454":{start:{line:2301,column:12},end:{line:2301,column:57}},"455":{start:{line:2303,column:12},end:{line:2303,column:78}},"456":{start:{line:2304,column:12},end:{line:2304,column:56}},"457":{start:{line:2316,column:4},end:{line:2409,column:7}},"458":{start:{line:2331,column:12},end:{line:2331,column:68}},"459":{start:{line:2345,column:12},end:{line:2345,column:29}},"460":{start:{line:2346,column:12},end:{line:2346,column:50}},"461":{start:{line:2348,column:12},end:{line:2348,column:63}},"462":{start:{line:2349,column:12},end:{line:2349,column:64}},"463":{start:{line:2368,column:12},end:{line:2368,column:49}},"464":{start:{line:2370,column:23},end:{line:2370,column:27}},"465":{start:{line:2371,column:12},end:{line:2378,column:15}},"466":{start:{line:2372,column:16},end:{line:2377,column:17}},"467":{start:{line:2373,column:20},end:{line:2373,column:34}},"468":{start:{line:2376,column:20},end:{line:2376,column:70}},"469":{start:{line:2397,column:12},end:{line:2397,column:49}},"470":{start:{line:2399,column:23},end:{line:2399,column:27}},"471":{start:{line:2400,column:12},end:{line:2407,column:15}},"472":{start:{line:2401,column:16},end:{line:2406,column:17}},"473":{start:{line:2402,column:20},end:{line:2402,column:34}},"474":{start:{line:2405,column:20},end:{line:2405,column:70}},"475":{start:{line:2419,column:4},end:{line:2462,column:7}},"476":{start:{line:2435,column:12},end:{line:2435,column:30}},"477":{start:{line:2447,column:12},end:{line:2447,column:70}},"478":{start:{line:2460,column:12},end:{line:2460,column:50}},"479":{start:{line:2471,column:4},end:{line:2494,column:7}},"480":{start:{line:2478,column:12},end:{line:2478,column:30}},"481":{start:{line:2491,column:12},end:{line:2491,column:38}},"482":{start:{line:2492,column:12},end:{line:2492,column:50}},"483":{start:{line:2504,column:4},end:{line:2528,column:7}},"484":{start:{line:2511,column:12},end:{line:2511,column:69}},"485":{start:{line:2525,column:12},end:{line:2525,column:29}},"486":{start:{line:2526,column:12},end:{line:2526,column:50}},"487":{start:{line:2538,column:4},end:{line:2618,column:7}},"488":{start:{line:2554,column:12},end:{line:2554,column:31}},"489":{start:{line:2566,column:12},end:{line:2566,column:63}},"490":{start:{line:2579,column:12},end:{line:2579,column:50}},"491":{start:{line:2593,column:12},end:{line:2593,column:49}},"492":{start:{line:2595,column:23},end:{line:2595,column:27}},"493":{start:{line:2596,column:22},end:{line:2614,column:14}},"494":{start:{line:2597,column:16},end:{line:2613,column:17}},"495":{start:{line:2598,column:20},end:{line:2598,column:34}},"496":{start:{line:2602,column:32},end:{line:2602,column:51}},"497":{start:{line:2604,column:33},end:{line:2604,column:62}},"498":{start:{line:2605,column:20},end:{line:2612,column:23}},"499":{start:{line:2606,column:24},end:{line:2611,column:25}},"500":{start:{line:2607,column:28},end:{line:2607,column:35}},"501":{start:{line:2610,column:28},end:{line:2610,column:60}},"502":{start:{line:2616,column:12},end:{line:2616,column:23}},"503":{start:{line:2628,column:4},end:{line:2656,column:7}},"504":{start:{line:2635,column:12},end:{line:2635,column:69}},"505":{start:{line:2653,column:12},end:{line:2653,column:29}},"506":{start:{line:2654,column:12},end:{line:2654,column:57}},"507":{start:{line:2666,column:4},end:{line:2705,column:7}},"508":{start:{line:2673,column:12},end:{line:2673,column:31}},"509":{start:{line:2685,column:34},end:{line:2685,column:70}},"510":{start:{line:2686,column:12},end:{line:2686,column:76}},"511":{start:{line:2703,column:12},end:{line:2703,column:57}},"512":{start:{line:2714,column:4},end:{line:2792,column:7}},"513":{start:{line:2721,column:12},end:{line:2721,column:71}},"514":{start:{line:2739,column:12},end:{line:2739,column:29}},"515":{start:{line:2740,column:12},end:{line:2740,column:57}},"516":{start:{line:2742,column:12},end:{line:2742,column:66}},"517":{start:{line:2767,column:12},end:{line:2770,column:13}},"518":{start:{line:2768,column:16},end:{line:2768,column:34}},"519":{start:{line:2769,column:16},end:{line:2769,column:28}},"520":{start:{line:2772,column:12},end:{line:2772,column:49}},"521":{start:{line:2773,column:12},end:{line:2773,column:34}},"522":{start:{line:2776,column:12},end:{line:2776,column:40}},"523":{start:{line:2778,column:23},end:{line:2778,column:27}},"524":{start:{line:2779,column:12},end:{line:2781,column:15}},"525":{start:{line:2780,column:16},end:{line:2780,column:44}},"526":{start:{line:2785,column:12},end:{line:2790,column:13}},"527":{start:{line:2786,column:16},end:{line:2786,column:75}},"528":{start:{line:2789,column:16},end:{line:2789,column:45}},"529":{start:{line:2802,column:4},end:{line:2873,column:7}},"530":{start:{line:2809,column:12},end:{line:2809,column:33}},"531":{start:{line:2821,column:34},end:{line:2821,column:70}},"532":{start:{line:2822,column:12},end:{line:2822,column:77}},"533":{start:{line:2839,column:12},end:{line:2839,column:57}},"534":{start:{line:2862,column:12},end:{line:2866,column:13}},"535":{start:{line:2863,column:16},end:{line:2863,column:34}},"536":{start:{line:2864,column:16},end:{line:2864,column:30}},"537":{start:{line:2865,column:16},end:{line:2865,column:35}},"538":{start:{line:2868,column:12},end:{line:2868,column:34}},"539":{start:{line:2869,column:12},end:{line:2869,column:34}},"540":{start:{line:2871,column:12},end:{line:2871,column:49}},"541":{start:{line:2883,column:4},end:{line:2914,column:7}},"542":{start:{line:2890,column:23},end:{line:2890,column:67}},"543":{start:{line:2891,column:12},end:{line:2891,column:116}},"544":{start:{line:2910,column:12},end:{line:2910,column:29}},"545":{start:{line:2911,column:12},end:{line:2911,column:29}},"546":{start:{line:2912,column:12},end:{line:2912,column:57}},"547":{start:{line:2925,column:4},end:{line:3017,column:7}},"548":{start:{line:2932,column:12},end:{line:2932,column:83}},"549":{start:{line:2946,column:12},end:{line:2946,column:100}},"550":{start:{line:2958,column:34},end:{line:2958,column:70}},"551":{start:{line:2959,column:12},end:{line:2959,column:102}},"552":{start:{line:2977,column:12},end:{line:2977,column:29}},"553":{start:{line:2978,column:12},end:{line:2978,column:57}},"554":{start:{line:3001,column:12},end:{line:3005,column:13}},"555":{start:{line:3002,column:16},end:{line:3002,column:34}},"556":{start:{line:3003,column:16},end:{line:3003,column:36}},"557":{start:{line:3004,column:16},end:{line:3004,column:41}},"558":{start:{line:3007,column:12},end:{line:3010,column:13}},"559":{start:{line:3008,column:16},end:{line:3008,column:34}},"560":{start:{line:3009,column:16},end:{line:3009,column:28}},"561":{start:{line:3012,column:12},end:{line:3012,column:34}},"562":{start:{line:3013,column:12},end:{line:3013,column:40}},"563":{start:{line:3015,column:12},end:{line:3015,column:49}},"564":{start:{line:3027,column:4},end:{line:3213,column:7}},"565":{start:{line:3043,column:12},end:{line:3043,column:36}},"566":{start:{line:3055,column:12},end:{line:3055,column:88}},"567":{start:{line:3072,column:12},end:{line:3074,column:13}},"568":{start:{line:3073,column:16},end:{line:3073,column:84}},"569":{start:{line:3076,column:12},end:{line:3076,column:57}},"570":{start:{line:3098,column:12},end:{line:3100,column:13}},"571":{start:{line:3099,column:16},end:{line:3099,column:46}},"572":{start:{line:3102,column:12},end:{line:3102,column:49}},"573":{start:{line:3104,column:23},end:{line:3104,column:27}},"574":{start:{line:3105,column:22},end:{line:3120,column:14}},"575":{start:{line:3106,column:16},end:{line:3119,column:17}},"576":{start:{line:3107,column:20},end:{line:3107,column:34}},"577":{start:{line:3110,column:33},end:{line:3110,column:83}},"578":{start:{line:3111,column:20},end:{line:3118,column:23}},"579":{start:{line:3112,column:24},end:{line:3117,column:25}},"580":{start:{line:3113,column:28},end:{line:3113,column:35}},"581":{start:{line:3116,column:28},end:{line:3116,column:60}},"582":{start:{line:3122,column:12},end:{line:3122,column:23}},"583":{start:{line:3126,column:12},end:{line:3150,column:13}},"584":{start:{line:3127,column:27},end:{line:3127,column:31}},"585":{start:{line:3130,column:31},end:{line:3130,column:73}},"586":{start:{line:3133,column:28},end:{line:3133,column:83}},"587":{start:{line:3133,column:63},end:{line:3133,column:82}},"588":{start:{line:3136,column:16},end:{line:3138,column:17}},"589":{start:{line:3137,column:20},end:{line:3137,column:113}},"590":{start:{line:3141,column:40},end:{line:3141,column:90}},"591":{start:{line:3144,column:34},end:{line:3144,column:68}},"592":{start:{line:3146,column:16},end:{line:3146,column:43}},"593":{start:{line:3149,column:16},end:{line:3149,column:72}},"594":{start:{line:3154,column:12},end:{line:3168,column:13}},"595":{start:{line:3157,column:36},end:{line:3157,column:53}},"596":{start:{line:3159,column:16},end:{line:3164,column:17}},"597":{start:{line:3160,column:20},end:{line:3160,column:115}},"598":{start:{line:3163,column:20},end:{line:3163,column:51}},"599":{start:{line:3167,column:16},end:{line:3167,column:72}},"600":{start:{line:3172,column:12},end:{line:3172,column:49}},"601":{start:{line:3173,column:23},end:{line:3173,column:27}},"602":{start:{line:3176,column:40},end:{line:3176,column:74}},"603":{start:{line:3177,column:29},end:{line:3177,column:55}},"604":{start:{line:3180,column:12},end:{line:3189,column:13}},"605":{start:{line:3181,column:16},end:{line:3181,column:51}},"606":{start:{line:3182,column:16},end:{line:3182,column:68}},"607":{start:{line:3184,column:16},end:{line:3185,column:95}},"608":{start:{line:3185,column:38},end:{line:3185,column:92}},"609":{start:{line:3187,column:16},end:{line:3187,column:82}},"610":{start:{line:3188,column:16},end:{line:3188,column:57}},"611":{start:{line:3192,column:42},end:{line:3192,column:88}},"612":{start:{line:3193,column:31},end:{line:3193,column:61}},"613":{start:{line:3196,column:12},end:{line:3211,column:13}},"614":{start:{line:3197,column:16},end:{line:3197,column:53}},"615":{start:{line:3198,column:16},end:{line:3198,column:70}},"616":{start:{line:3200,column:16},end:{line:3203,column:19}},"617":{start:{line:3201,column:20},end:{line:3201,column:75}},"618":{start:{line:3202,column:20},end:{line:3202,column:31}},"619":{start:{line:3207,column:16},end:{line:3210,column:19}},"620":{start:{line:3208,column:20},end:{line:3208,column:75}},"621":{start:{line:3209,column:20},end:{line:3209,column:31}},"622":{start:{line:3223,column:4},end:{line:3814,column:7}},"623":{start:{line:3230,column:12},end:{line:3230,column:68}},"624":{start:{line:3248,column:12},end:{line:3248,column:28}},"625":{start:{line:3249,column:12},end:{line:3249,column:57}},"626":{start:{line:3250,column:12},end:{line:3250,column:27}},"627":{start:{line:3254,column:12},end:{line:3254,column:64}},"628":{start:{line:3255,column:12},end:{line:3255,column:72}},"629":{start:{line:3256,column:12},end:{line:3256,column:71}},"630":{start:{line:3257,column:12},end:{line:3257,column:64}},"631":{start:{line:3258,column:12},end:{line:3258,column:66}},"632":{start:{line:3259,column:12},end:{line:3259,column:63}},"633":{start:{line:3260,column:12},end:{line:3260,column:65}},"634":{start:{line:3261,column:12},end:{line:3261,column:65}},"635":{start:{line:3262,column:12},end:{line:3262,column:67}},"636":{start:{line:3263,column:12},end:{line:3263,column:69}},"637":{start:{line:3264,column:12},end:{line:3264,column:64}},"638":{start:{line:3265,column:12},end:{line:3265,column:65}},"639":{start:{line:3266,column:12},end:{line:3266,column:66}},"640":{start:{line:3267,column:12},end:{line:3267,column:63}},"641":{start:{line:3268,column:12},end:{line:3268,column:65}},"642":{start:{line:3287,column:22},end:{line:3287,column:72}},"643":{start:{line:3289,column:12},end:{line:3289,column:23}},"644":{start:{line:3308,column:12},end:{line:3308,column:49}},"645":{start:{line:3310,column:23},end:{line:3310,column:27}},"646":{start:{line:3311,column:22},end:{line:3313,column:14}},"647":{start:{line:3312,column:16},end:{line:3312,column:36}},"648":{start:{line:3315,column:12},end:{line:3315,column:23}},"649":{start:{line:3334,column:12},end:{line:3334,column:49}},"650":{start:{line:3336,column:23},end:{line:3336,column:27}},"651":{start:{line:3337,column:22},end:{line:3339,column:14}},"652":{start:{line:3338,column:16},end:{line:3338,column:36}},"653":{start:{line:3341,column:12},end:{line:3341,column:23}},"654":{start:{line:3361,column:12},end:{line:3361,column:49}},"655":{start:{line:3362,column:12},end:{line:3362,column:34}},"656":{start:{line:3363,column:12},end:{line:3363,column:67}},"657":{start:{line:3365,column:23},end:{line:3365,column:27}},"658":{start:{line:3366,column:12},end:{line:3373,column:15}},"659":{start:{line:3367,column:16},end:{line:3372,column:17}},"660":{start:{line:3368,column:20},end:{line:3368,column:34}},"661":{start:{line:3371,column:20},end:{line:3371,column:56}},"662":{start:{line:3392,column:12},end:{line:3392,column:49}},"663":{start:{line:3394,column:23},end:{line:3394,column:27}},"664":{start:{line:3395,column:22},end:{line:3397,column:14}},"665":{start:{line:3396,column:16},end:{line:3396,column:36}},"666":{start:{line:3399,column:12},end:{line:3399,column:23}},"667":{start:{line:3414,column:12},end:{line:3414,column:74}},"668":{start:{line:3433,column:12},end:{line:3433,column:49}},"669":{start:{line:3435,column:23},end:{line:3435,column:27}},"670":{start:{line:3436,column:22},end:{line:3438,column:14}},"671":{start:{line:3437,column:16},end:{line:3437,column:36}},"672":{start:{line:3440,column:12},end:{line:3440,column:23}},"673":{start:{line:3460,column:12},end:{line:3460,column:49}},"674":{start:{line:3461,column:12},end:{line:3461,column:34}},"675":{start:{line:3462,column:12},end:{line:3462,column:67}},"676":{start:{line:3464,column:23},end:{line:3464,column:27}},"677":{start:{line:3465,column:12},end:{line:3472,column:15}},"678":{start:{line:3466,column:16},end:{line:3471,column:17}},"679":{start:{line:3467,column:20},end:{line:3467,column:34}},"680":{start:{line:3470,column:20},end:{line:3470,column:56}},"681":{start:{line:3497,column:12},end:{line:3497,column:49}},"682":{start:{line:3498,column:12},end:{line:3498,column:34}},"683":{start:{line:3499,column:12},end:{line:3499,column:67}},"684":{start:{line:3501,column:23},end:{line:3501,column:27}},"685":{start:{line:3502,column:12},end:{line:3509,column:15}},"686":{start:{line:3503,column:16},end:{line:3508,column:17}},"687":{start:{line:3504,column:20},end:{line:3504,column:34}},"688":{start:{line:3507,column:20},end:{line:3507,column:56}},"689":{start:{line:3528,column:12},end:{line:3528,column:49}},"690":{start:{line:3530,column:23},end:{line:3530,column:27}},"691":{start:{line:3531,column:12},end:{line:3538,column:15}},"692":{start:{line:3532,column:16},end:{line:3537,column:17}},"693":{start:{line:3533,column:20},end:{line:3533,column:34}},"694":{start:{line:3536,column:20},end:{line:3536,column:56}},"695":{start:{line:3558,column:12},end:{line:3558,column:49}},"696":{start:{line:3560,column:23},end:{line:3560,column:27}},"697":{start:{line:3561,column:22},end:{line:3563,column:14}},"698":{start:{line:3562,column:16},end:{line:3562,column:36}},"699":{start:{line:3565,column:12},end:{line:3565,column:23}},"700":{start:{line:3586,column:12},end:{line:3586,column:49}},"701":{start:{line:3588,column:23},end:{line:3588,column:27}},"702":{start:{line:3589,column:22},end:{line:3591,column:14}},"703":{start:{line:3590,column:16},end:{line:3590,column:36}},"704":{start:{line:3593,column:12},end:{line:3593,column:23}},"705":{start:{line:3613,column:12},end:{line:3613,column:49}},"706":{start:{line:3615,column:23},end:{line:3615,column:27}},"707":{start:{line:3616,column:12},end:{line:3623,column:15}},"708":{start:{line:3617,column:16},end:{line:3622,column:17}},"709":{start:{line:3618,column:20},end:{line:3618,column:34}},"710":{start:{line:3621,column:20},end:{line:3621,column:56}},"711":{start:{line:3643,column:12},end:{line:3643,column:49}},"712":{start:{line:3645,column:23},end:{line:3645,column:27}},"713":{start:{line:3646,column:12},end:{line:3653,column:15}},"714":{start:{line:3647,column:16},end:{line:3652,column:17}},"715":{start:{line:3648,column:20},end:{line:3648,column:34}},"716":{start:{line:3651,column:20},end:{line:3651,column:56}},"717":{start:{line:3673,column:12},end:{line:3673,column:49}},"718":{start:{line:3675,column:23},end:{line:3675,column:27}},"719":{start:{line:3676,column:22},end:{line:3678,column:14}},"720":{start:{line:3677,column:16},end:{line:3677,column:36}},"721":{start:{line:3680,column:12},end:{line:3680,column:23}},"722":{start:{line:3700,column:25},end:{line:3700,column:46}},"723":{start:{line:3702,column:12},end:{line:3706,column:13}},"724":{start:{line:3703,column:16},end:{line:3705,column:18}},"725":{start:{line:3709,column:16},end:{line:3712,column:32}},"726":{start:{line:3715,column:12},end:{line:3715,column:63}},"727":{start:{line:3716,column:12},end:{line:3716,column:69}},"728":{start:{line:3717,column:12},end:{line:3717,column:61}},"729":{start:{line:3718,column:12},end:{line:3718,column:65}},"730":{start:{line:3719,column:12},end:{line:3719,column:63}},"731":{start:{line:3722,column:12},end:{line:3722,column:71}},"732":{start:{line:3723,column:12},end:{line:3723,column:89}},"733":{start:{line:3725,column:23},end:{line:3725,column:27}},"734":{start:{line:3726,column:31},end:{line:3726,column:36}},"735":{start:{line:3727,column:30},end:{line:3727,column:35}},"736":{start:{line:3728,column:12},end:{line:3786,column:14}},"737":{start:{line:3729,column:29},end:{line:3729,column:49}},"738":{start:{line:3731,column:20},end:{line:3779,column:23}},"739":{start:{line:3732,column:24},end:{line:3735,column:25}},"740":{start:{line:3733,column:28},end:{line:3733,column:47}},"741":{start:{line:3734,column:28},end:{line:3734,column:35}},"742":{start:{line:3737,column:44},end:{line:3737,column:74}},"743":{start:{line:3738,column:39},end:{line:3738,column:96}},"744":{start:{line:3739,column:24},end:{line:3776,column:25}},"745":{start:{line:3740,column:28},end:{line:3740,column:53}},"746":{start:{line:3743,column:28},end:{line:3756,column:29}},"747":{start:{line:3744,column:32},end:{line:3744,column:53}},"748":{start:{line:3745,column:32},end:{line:3745,column:52}},"749":{start:{line:3749,column:32},end:{line:3755,column:33}},"750":{start:{line:3750,column:36},end:{line:3750,column:70}},"751":{start:{line:3752,column:36},end:{line:3752,column:55}},"752":{start:{line:3753,column:36},end:{line:3753,column:52}},"753":{start:{line:3754,column:36},end:{line:3754,column:43}},"754":{start:{line:3758,column:28},end:{line:3758,column:52}},"755":{start:{line:3760,column:40},end:{line:3760,column:56}},"756":{start:{line:3762,column:28},end:{line:3775,column:29}},"757":{start:{line:3763,column:32},end:{line:3763,column:52}},"758":{start:{line:3765,column:32},end:{line:3765,column:51}},"759":{start:{line:3766,column:32},end:{line:3766,column:48}},"760":{start:{line:3767,column:32},end:{line:3767,column:39}},"761":{start:{line:3769,column:33},end:{line:3775,column:29}},"762":{start:{line:3770,column:32},end:{line:3770,column:54}},"763":{start:{line:3772,column:32},end:{line:3772,column:51}},"764":{start:{line:3773,column:32},end:{line:3773,column:48}},"765":{start:{line:3774,column:32},end:{line:3774,column:39}},"766":{start:{line:3778,column:24},end:{line:3778,column:59}},"767":{start:{line:3782,column:20},end:{line:3784,column:21}},"768":{start:{line:3783,column:24},end:{line:3783,column:45}},"769":{start:{line:3805,column:12},end:{line:3805,column:49}},"770":{start:{line:3807,column:23},end:{line:3807,column:27}},"771":{start:{line:3808,column:22},end:{line:3810,column:14}},"772":{start:{line:3809,column:16},end:{line:3809,column:36}},"773":{start:{line:3812,column:12},end:{line:3812,column:23}},"774":{start:{line:3824,column:4},end:{line:4015,column:7}},"775":{start:{line:3831,column:12},end:{line:3831,column:30}},"776":{start:{line:3843,column:22},end:{line:3843,column:39}},"777":{start:{line:3844,column:34},end:{line:3844,column:70}},"778":{start:{line:3845,column:12},end:{line:3845,column:68}},"779":{start:{line:3862,column:12},end:{line:3862,column:57}},"780":{start:{line:3866,column:12},end:{line:3866,column:60}},"781":{start:{line:3889,column:12},end:{line:3893,column:13}},"782":{start:{line:3890,column:16},end:{line:3890,column:34}},"783":{start:{line:3891,column:16},end:{line:3891,column:31}},"784":{start:{line:3892,column:16},end:{line:3892,column:38}},"785":{start:{line:3895,column:12},end:{line:3895,column:49}},"786":{start:{line:3896,column:12},end:{line:3896,column:34}},"787":{start:{line:3897,column:12},end:{line:3897,column:34}},"788":{start:{line:3899,column:12},end:{line:3901,column:13}},"789":{start:{line:3900,column:16},end:{line:3900,column:104}},"790":{start:{line:3903,column:12},end:{line:3906,column:13}},"791":{start:{line:3904,column:16},end:{line:3904,column:72}},"792":{start:{line:3905,column:16},end:{line:3905,column:23}},"793":{start:{line:3907,column:23},end:{line:3907,column:27}},"794":{start:{line:3908,column:12},end:{line:3916,column:15}},"795":{start:{line:3909,column:16},end:{line:3915,column:17}},"796":{start:{line:3910,column:20},end:{line:3910,column:34}},"797":{start:{line:3913,column:30},end:{line:3913,column:91}},"798":{start:{line:3914,column:20},end:{line:3914,column:40}},"799":{start:{line:3945,column:12},end:{line:3945,column:56}},"800":{start:{line:3972,column:12},end:{line:3976,column:13}},"801":{start:{line:3973,column:16},end:{line:3973,column:34}},"802":{start:{line:3974,column:16},end:{line:3974,column:31}},"803":{start:{line:3975,column:16},end:{line:3975,column:38}},"804":{start:{line:3978,column:12},end:{line:3978,column:49}},"805":{start:{line:3979,column:12},end:{line:3979,column:34}},"806":{start:{line:3980,column:12},end:{line:3980,column:34}},"807":{start:{line:3981,column:12},end:{line:3981,column:41}},"808":{start:{line:3983,column:12},end:{line:3985,column:13}},"809":{start:{line:3984,column:16},end:{line:3984,column:72}},"810":{start:{line:3987,column:29},end:{line:3987,column:62}},"811":{start:{line:3989,column:23},end:{line:3989,column:41}},"812":{start:{line:3990,column:25},end:{line:3990,column:31}},"813":{start:{line:3991,column:26},end:{line:3991,column:28}},"814":{start:{line:3992,column:23},end:{line:3992,column:29}},"815":{start:{line:3993,column:22},end:{line:3993,column:47}},"816":{start:{line:3994,column:23},end:{line:3994,column:27}},"817":{start:{line:3996,column:22},end:{line:4011,column:13}},"818":{start:{line:4004,column:20},end:{line:4009,column:21}},"819":{start:{line:4005,column:24},end:{line:4005,column:38}},"820":{start:{line:4008,column:24},end:{line:4008,column:54}},"821":{start:{line:4013,column:12},end:{line:4013,column:23}},"822":{start:{line:4047,column:4},end:{line:4164,column:7}},"823":{start:{line:4072,column:12},end:{line:4072,column:32}},"824":{start:{line:4073,column:12},end:{line:4073,column:44}},"825":{start:{line:4075,column:12},end:{line:4075,column:50}},"826":{start:{line:4076,column:12},end:{line:4076,column:52}},"827":{start:{line:4077,column:12},end:{line:4077,column:45}},"828":{start:{line:4078,column:12},end:{line:4078,column:51}},"829":{start:{line:4079,column:12},end:{line:4079,column:49}},"830":{start:{line:4080,column:12},end:{line:4080,column:47}},"831":{start:{line:4081,column:12},end:{line:4081,column:49}},"832":{start:{line:4082,column:12},end:{line:4082,column:56}},"833":{start:{line:4083,column:12},end:{line:4083,column:52}},"834":{start:{line:4084,column:12},end:{line:4084,column:57}},"835":{start:{line:4085,column:12},end:{line:4085,column:72}},"836":{start:{line:4096,column:12},end:{line:4096,column:42}},"837":{start:{line:4107,column:12},end:{line:4107,column:42}},"838":{start:{line:4118,column:12},end:{line:4118,column:45}},"839":{start:{line:4129,column:12},end:{line:4129,column:47}},"840":{start:{line:4140,column:12},end:{line:4140,column:46}},"841":{start:{line:4151,column:12},end:{line:4151,column:40}},"842":{start:{line:4162,column:12},end:{line:4162,column:43}},"843":{start:{line:4177,column:4},end:{line:4199,column:7}},"844":{start:{line:4192,column:12},end:{line:4192,column:32}},"845":{start:{line:4193,column:12},end:{line:4193,column:44}},"846":{start:{line:4195,column:12},end:{line:4195,column:40}},"847":{start:{line:4196,column:12},end:{line:4196,column:50}},"848":{start:{line:4197,column:12},end:{line:4197,column:65}},"849":{start:{line:4232,column:4},end:{line:4350,column:7}},"850":{start:{line:4258,column:12},end:{line:4258,column:32}},"851":{start:{line:4259,column:12},end:{line:4259,column:44}},"852":{start:{line:4261,column:12},end:{line:4261,column:54}},"853":{start:{line:4262,column:12},end:{line:4262,column:56}},"854":{start:{line:4263,column:12},end:{line:4263,column:56}},"855":{start:{line:4264,column:12},end:{line:4264,column:49}},"856":{start:{line:4265,column:12},end:{line:4265,column:57}},"857":{start:{line:4266,column:12},end:{line:4266,column:72}},"858":{start:{line:4268,column:12},end:{line:4268,column:35}},"859":{start:{line:4269,column:12},end:{line:4271,column:13}},"860":{start:{line:4269,column:25},end:{line:4269,column:26}},"861":{start:{line:4270,column:16},end:{line:4270,column:116}},"862":{start:{line:4273,column:12},end:{line:4275,column:13}},"863":{start:{line:4274,column:16},end:{line:4274,column:51}},"864":{start:{line:4276,column:12},end:{line:4278,column:13}},"865":{start:{line:4277,column:16},end:{line:4277,column:51}},"866":{start:{line:4279,column:12},end:{line:4282,column:13}},"867":{start:{line:4280,column:16},end:{line:4280,column:51}},"868":{start:{line:4281,column:16},end:{line:4281,column:64}},"869":{start:{line:4293,column:12},end:{line:4293,column:50}},"870":{start:{line:4304,column:12},end:{line:4304,column:35}},"871":{start:{line:4315,column:12},end:{line:4315,column:42}},"872":{start:{line:4326,column:12},end:{line:4326,column:40}},"873":{start:{line:4337,column:12},end:{line:4337,column:39}},"874":{start:{line:4348,column:12},end:{line:4348,column:41}},"875":{start:{line:4366,column:4},end:{line:4413,column:7}},"876":{start:{line:4383,column:12},end:{line:4383,column:35}},"877":{start:{line:4384,column:12},end:{line:4384,column:39}},"878":{start:{line:4385,column:12},end:{line:4385,column:58}},"879":{start:{line:4386,column:12},end:{line:4386,column:72}},"880":{start:{line:4387,column:12},end:{line:4387,column:50}},"881":{start:{line:4388,column:12},end:{line:4388,column:60}},"882":{start:{line:4390,column:12},end:{line:4390,column:50}},"883":{start:{line:4402,column:12},end:{line:4405,column:13}},"884":{start:{line:4403,column:16},end:{line:4403,column:32}},"885":{start:{line:4404,column:16},end:{line:4404,column:26}},"886":{start:{line:4406,column:12},end:{line:4408,column:13}},"887":{start:{line:4407,column:16},end:{line:4407,column:26}},"888":{start:{line:4411,column:12},end:{line:4411,column:87}},"889":{start:{line:4524,column:4},end:{line:5169,column:7}},"890":{start:{line:4544,column:12},end:{line:4544,column:51}},"891":{start:{line:4545,column:12},end:{line:4545,column:30}},"892":{start:{line:4546,column:12},end:{line:4546,column:27}},"893":{start:{line:4547,column:12},end:{line:4547,column:30}},"894":{start:{line:4548,column:12},end:{line:4548,column:28}},"895":{start:{line:4550,column:12},end:{line:4551,column:54}},"896":{start:{line:4553,column:12},end:{line:4553,column:52}},"897":{start:{line:4554,column:12},end:{line:4554,column:54}},"898":{start:{line:4570,column:12},end:{line:4572,column:13}},"899":{start:{line:4571,column:16},end:{line:4571,column:30}},"900":{start:{line:4574,column:12},end:{line:4576,column:13}},"901":{start:{line:4575,column:16},end:{line:4575,column:81}},"902":{start:{line:4578,column:12},end:{line:4578,column:54}},"903":{start:{line:4579,column:12},end:{line:4579,column:24}},"904":{start:{line:4595,column:12},end:{line:4597,column:13}},"905":{start:{line:4596,column:16},end:{line:4596,column:77}},"906":{start:{line:4598,column:12},end:{line:4604,column:13}},"907":{start:{line:4599,column:16},end:{line:4603,column:70}},"908":{start:{line:4605,column:12},end:{line:4610,column:13}},"909":{start:{line:4606,column:16},end:{line:4609,column:59}},"910":{start:{line:4612,column:22},end:{line:4616,column:13}},"911":{start:{line:4618,column:12},end:{line:4623,column:13}},"912":{start:{line:4619,column:16},end:{line:4622,column:18}},"913":{start:{line:4624,column:12},end:{line:4624,column:35}},"914":{start:{line:4626,column:12},end:{line:4626,column:24}},"915":{start:{line:4643,column:12},end:{line:4645,column:13}},"916":{start:{line:4644,column:16},end:{line:4644,column:83}},"917":{start:{line:4647,column:20},end:{line:4647,column:63}},"918":{start:{line:4649,column:12},end:{line:4651,column:13}},"919":{start:{line:4650,column:16},end:{line:4650,column:112}},"920":{start:{line:4653,column:12},end:{line:4656,column:13}},"921":{start:{line:4654,column:16},end:{line:4655,column:35}},"922":{start:{line:4658,column:12},end:{line:4661,column:13}},"923":{start:{line:4659,column:16},end:{line:4660,column:35}},"924":{start:{line:4663,column:12},end:{line:4665,column:13}},"925":{start:{line:4664,column:16},end:{line:4664,column:120}},"926":{start:{line:4667,column:25},end:{line:4676,column:13}},"927":{start:{line:4678,column:12},end:{line:4678,column:84}},"928":{start:{line:4679,column:12},end:{line:4679,column:38}},"929":{start:{line:4681,column:12},end:{line:4681,column:24}},"930":{start:{line:4694,column:12},end:{line:4696,column:13}},"931":{start:{line:4695,column:16},end:{line:4695,column:67}},"932":{start:{line:4697,column:20},end:{line:4697,column:63}},"933":{start:{line:4698,column:12},end:{line:4700,column:13}},"934":{start:{line:4699,column:16},end:{line:4699,column:96}},"935":{start:{line:4702,column:22},end:{line:4707,column:13}},"936":{start:{line:4709,column:12},end:{line:4711,column:13}},"937":{start:{line:4710,column:16},end:{line:4710,column:36}},"938":{start:{line:4713,column:12},end:{line:4713,column:32}},"939":{start:{line:4715,column:12},end:{line:4715,column:24}},"940":{start:{line:4738,column:12},end:{line:4740,column:13}},"941":{start:{line:4739,column:16},end:{line:4739,column:63}},"942":{start:{line:4741,column:20},end:{line:4741,column:59}},"943":{start:{line:4742,column:12},end:{line:4744,column:13}},"944":{start:{line:4743,column:16},end:{line:4743,column:86}},"945":{start:{line:4745,column:31},end:{line:4745,column:33}},"946":{start:{line:4746,column:12},end:{line:4748,column:13}},"947":{start:{line:4747,column:16},end:{line:4747,column:50}},"948":{start:{line:4749,column:12},end:{line:4751,column:13}},"949":{start:{line:4750,column:16},end:{line:4750,column:46}},"950":{start:{line:4752,column:12},end:{line:4754,column:13}},"951":{start:{line:4753,column:16},end:{line:4753,column:48}},"952":{start:{line:4755,column:12},end:{line:4757,column:13}},"953":{start:{line:4756,column:16},end:{line:4756,column:56}},"954":{start:{line:4759,column:12},end:{line:4766,column:15}},"955":{start:{line:4768,column:12},end:{line:4768,column:24}},"956":{start:{line:4783,column:12},end:{line:4785,column:13}},"957":{start:{line:4784,column:16},end:{line:4784,column:63}},"958":{start:{line:4786,column:20},end:{line:4786,column:59}},"959":{start:{line:4787,column:12},end:{line:4789,column:13}},"960":{start:{line:4788,column:16},end:{line:4788,column:87}},"961":{start:{line:4791,column:12},end:{line:4798,column:15}},"962":{start:{line:4800,column:12},end:{line:4800,column:24}},"963":{start:{line:4814,column:12},end:{line:4816,column:13}},"964":{start:{line:4815,column:16},end:{line:4815,column:63}},"965":{start:{line:4817,column:20},end:{line:4817,column:59}},"966":{start:{line:4818,column:12},end:{line:4820,column:13}},"967":{start:{line:4819,column:16},end:{line:4819,column:89}},"968":{start:{line:4821,column:12},end:{line:4823,column:13}},"969":{start:{line:4822,column:16},end:{line:4822,column:120}},"970":{start:{line:4825,column:12},end:{line:4831,column:15}},"971":{start:{line:4833,column:12},end:{line:4833,column:24}},"972":{start:{line:4846,column:12},end:{line:4848,column:13}},"973":{start:{line:4847,column:16},end:{line:4847,column:67}},"974":{start:{line:4849,column:20},end:{line:4849,column:63}},"975":{start:{line:4850,column:12},end:{line:4852,column:13}},"976":{start:{line:4851,column:16},end:{line:4851,column:96}},"977":{start:{line:4854,column:22},end:{line:4858,column:13}},"978":{start:{line:4860,column:12},end:{line:4862,column:13}},"979":{start:{line:4861,column:16},end:{line:4861,column:36}},"980":{start:{line:4864,column:12},end:{line:4864,column:35}},"981":{start:{line:4866,column:12},end:{line:4866,column:24}},"982":{start:{line:4883,column:12},end:{line:4885,column:13}},"983":{start:{line:4884,column:16},end:{line:4884,column:67}},"984":{start:{line:4886,column:20},end:{line:4886,column:63}},"985":{start:{line:4887,column:12},end:{line:4889,column:13}},"986":{start:{line:4888,column:16},end:{line:4888,column:86}},"987":{start:{line:4893,column:32},end:{line:4893,column:34}},"988":{start:{line:4894,column:12},end:{line:4896,column:13}},"989":{start:{line:4895,column:16},end:{line:4895,column:51}},"990":{start:{line:4897,column:12},end:{line:4899,column:13}},"991":{start:{line:4898,column:16},end:{line:4898,column:47}},"992":{start:{line:4900,column:12},end:{line:4902,column:13}},"993":{start:{line:4901,column:16},end:{line:4901,column:49}},"994":{start:{line:4903,column:12},end:{line:4905,column:13}},"995":{start:{line:4904,column:16},end:{line:4904,column:57}},"996":{start:{line:4907,column:12},end:{line:4913,column:15}},"997":{start:{line:4915,column:12},end:{line:4915,column:24}},"998":{start:{line:4929,column:12},end:{line:4931,column:13}},"999":{start:{line:4930,column:16},end:{line:4930,column:67}},"1000":{start:{line:4932,column:20},end:{line:4932,column:63}},"1001":{start:{line:4933,column:12},end:{line:4935,column:13}},"1002":{start:{line:4934,column:16},end:{line:4934,column:87}},"1003":{start:{line:4937,column:12},end:{line:4943,column:15}},"1004":{start:{line:4945,column:12},end:{line:4945,column:24}},"1005":{start:{line:4958,column:12},end:{line:4960,column:13}},"1006":{start:{line:4959,column:16},end:{line:4959,column:63}},"1007":{start:{line:4961,column:20},end:{line:4961,column:59}},"1008":{start:{line:4962,column:12},end:{line:4964,column:13}},"1009":{start:{line:4963,column:16},end:{line:4963,column:89}},"1010":{start:{line:4965,column:12},end:{line:4967,column:13}},"1011":{start:{line:4966,column:16},end:{line:4966,column:120}},"1012":{start:{line:4969,column:12},end:{line:4974,column:15}},"1013":{start:{line:4976,column:12},end:{line:4976,column:24}},"1014":{start:{line:4990,column:12},end:{line:4992,column:13}},"1015":{start:{line:4991,column:16},end:{line:4991,column:67}},"1016":{start:{line:4994,column:20},end:{line:4994,column:63}},"1017":{start:{line:4995,column:12},end:{line:5047,column:13}},"1018":{start:{line:5004,column:16},end:{line:5006,column:35}},"1019":{start:{line:5008,column:17},end:{line:5047,column:13}},"1020":{start:{line:5020,column:16},end:{line:5023,column:22}},"1021":{start:{line:5025,column:17},end:{line:5047,column:13}},"1022":{start:{line:5034,column:16},end:{line:5037,column:22}},"1023":{start:{line:5039,column:17},end:{line:5047,column:13}},"1024":{start:{line:5042,column:16},end:{line:5043,column:46}},"1025":{start:{line:5045,column:17},end:{line:5047,column:13}},"1026":{start:{line:5046,column:16},end:{line:5046,column:84}},"1027":{start:{line:5049,column:12},end:{line:5056,column:15}},"1028":{start:{line:5058,column:12},end:{line:5058,column:24}},"1029":{start:{line:5069,column:12},end:{line:5076,column:14}},"1030":{start:{line:5102,column:22},end:{line:5102,column:60}},"1031":{start:{line:5104,column:23},end:{line:5106,column:13}},"1032":{start:{line:5108,column:12},end:{line:5110,column:13}},"1033":{start:{line:5109,column:16},end:{line:5109,column:60}},"1034":{start:{line:5112,column:12},end:{line:5124,column:15}},"1035":{start:{line:5113,column:16},end:{line:5116,column:17}},"1036":{start:{line:5114,column:20},end:{line:5114,column:77}},"1037":{start:{line:5115,column:20},end:{line:5115,column:27}},"1038":{start:{line:5118,column:16},end:{line:5123,column:17}},"1039":{start:{line:5119,column:20},end:{line:5119,column:88}},"1040":{start:{line:5122,column:20},end:{line:5122,column:96}},"1041":{start:{line:5154,column:12},end:{line:5157,column:13}},"1042":{start:{line:5155,column:16},end:{line:5155,column:32}},"1043":{start:{line:5156,column:16},end:{line:5156,column:26}},"1044":{start:{line:5158,column:12},end:{line:5158,column:30}},"1045":{start:{line:5160,column:12},end:{line:5167,column:15}},"1046":{start:{line:5161,column:16},end:{line:5166,column:17}},"1047":{start:{line:5162,column:20},end:{line:5162,column:46}},"1048":{start:{line:5165,column:20},end:{line:5165,column:68}},"1049":{start:{line:5197,column:4},end:{line:5515,column:7}},"1050":{start:{line:5225,column:12},end:{line:5225,column:32}},"1051":{start:{line:5226,column:12},end:{line:5226,column:44}},"1052":{start:{line:5228,column:12},end:{line:5228,column:58}},"1053":{start:{line:5229,column:12},end:{line:5229,column:59}},"1054":{start:{line:5230,column:12},end:{line:5230,column:60}},"1055":{start:{line:5231,column:12},end:{line:5231,column:59}},"1056":{start:{line:5232,column:12},end:{line:5232,column:67}},"1057":{start:{line:5235,column:12},end:{line:5237,column:13}},"1058":{start:{line:5236,column:16},end:{line:5236,column:57}},"1059":{start:{line:5238,column:12},end:{line:5240,column:13}},"1060":{start:{line:5239,column:16},end:{line:5239,column:59}},"1061":{start:{line:5241,column:12},end:{line:5243,column:13}},"1062":{start:{line:5242,column:16},end:{line:5242,column:60}},"1063":{start:{line:5244,column:12},end:{line:5246,column:13}},"1064":{start:{line:5245,column:16},end:{line:5245,column:58}},"1065":{start:{line:5249,column:12},end:{line:5251,column:13}},"1066":{start:{line:5250,column:16},end:{line:5250,column:51}},"1067":{start:{line:5254,column:12},end:{line:5254,column:29}},"1068":{start:{line:5255,column:12},end:{line:5257,column:13}},"1069":{start:{line:5255,column:25},end:{line:5255,column:26}},"1070":{start:{line:5256,column:16},end:{line:5256,column:98}},"1071":{start:{line:5260,column:12},end:{line:5260,column:34}},"1072":{start:{line:5261,column:12},end:{line:5263,column:13}},"1073":{start:{line:5261,column:25},end:{line:5261,column:26}},"1074":{start:{line:5262,column:16},end:{line:5262,column:90}},"1075":{start:{line:5266,column:12},end:{line:5266,column:35}},"1076":{start:{line:5267,column:12},end:{line:5269,column:13}},"1077":{start:{line:5267,column:25},end:{line:5267,column:26}},"1078":{start:{line:5268,column:16},end:{line:5268,column:126}},"1079":{start:{line:5280,column:12},end:{line:5280,column:55}},"1080":{start:{line:5291,column:12},end:{line:5291,column:52}},"1081":{start:{line:5303,column:12},end:{line:5303,column:44}},"1082":{start:{line:5317,column:12},end:{line:5317,column:78}},"1083":{start:{line:5332,column:33},end:{line:5332,column:35}},"1084":{start:{line:5334,column:12},end:{line:5338,column:13}},"1085":{start:{line:5335,column:16},end:{line:5337,column:17}},"1086":{start:{line:5336,column:20},end:{line:5336,column:55}},"1087":{start:{line:5340,column:35},end:{line:5340,column:58}},"1088":{start:{line:5341,column:12},end:{line:5345,column:13}},"1089":{start:{line:5342,column:16},end:{line:5344,column:17}},"1090":{start:{line:5343,column:20},end:{line:5343,column:62}},"1091":{start:{line:5347,column:12},end:{line:5347,column:34}},"1092":{start:{line:5361,column:12},end:{line:5361,column:49}},"1093":{start:{line:5374,column:25},end:{line:5374,column:27}},"1094":{start:{line:5376,column:23},end:{line:5376,column:44}},"1095":{start:{line:5377,column:31},end:{line:5377,column:48}},"1096":{start:{line:5378,column:12},end:{line:5383,column:13}},"1097":{start:{line:5378,column:25},end:{line:5378,column:26}},"1098":{start:{line:5379,column:34},end:{line:5379,column:55}},"1099":{start:{line:5380,column:16},end:{line:5382,column:17}},"1100":{start:{line:5380,column:29},end:{line:5380,column:30}},"1101":{start:{line:5381,column:20},end:{line:5381,column:124}},"1102":{start:{line:5384,column:12},end:{line:5384,column:26}},"1103":{start:{line:5397,column:12},end:{line:5397,column:56}},"1104":{start:{line:5410,column:12},end:{line:5410,column:67}},"1105":{start:{line:5423,column:12},end:{line:5423,column:50}},"1106":{start:{line:5454,column:12},end:{line:5457,column:13}},"1107":{start:{line:5455,column:16},end:{line:5455,column:40}},"1108":{start:{line:5456,column:16},end:{line:5456,column:41}},"1109":{start:{line:5459,column:24},end:{line:5459,column:106}},"1110":{start:{line:5460,column:23},end:{line:5460,column:72}},"1111":{start:{line:5462,column:12},end:{line:5462,column:65}},"1112":{start:{line:5485,column:24},end:{line:5485,column:90}},"1113":{start:{line:5487,column:12},end:{line:5487,column:69}},"1114":{start:{line:5488,column:12},end:{line:5488,column:81}},"1115":{start:{line:5501,column:12},end:{line:5501,column:64}},"1116":{start:{line:5513,column:12},end:{line:5513,column:53}},"1117":{start:{line:5526,column:4},end:{line:5679,column:7}},"1118":{start:{line:5533,column:12},end:{line:5533,column:74}},"1119":{start:{line:5556,column:12},end:{line:5559,column:13}},"1120":{start:{line:5557,column:16},end:{line:5557,column:34}},"1121":{start:{line:5558,column:16},end:{line:5558,column:31}},"1122":{start:{line:5561,column:12},end:{line:5561,column:29}},"1123":{start:{line:5562,column:12},end:{line:5562,column:57}},"1124":{start:{line:5564,column:12},end:{line:5564,column:77}},"1125":{start:{line:5565,column:12},end:{line:5568,column:13}},"1126":{start:{line:5567,column:16},end:{line:5567,column:72}},"1127":{start:{line:5572,column:12},end:{line:5574,column:13}},"1128":{start:{line:5573,column:16},end:{line:5573,column:35}},"1129":{start:{line:5576,column:38},end:{line:5576,column:75}},"1130":{start:{line:5578,column:12},end:{line:5578,column:66}},"1131":{start:{line:5579,column:12},end:{line:5579,column:63}},"1132":{start:{line:5580,column:12},end:{line:5580,column:63}},"1133":{start:{line:5583,column:23},end:{line:5583,column:50}},"1134":{start:{line:5584,column:12},end:{line:5584,column:30}},"1135":{start:{line:5585,column:12},end:{line:5587,column:13}},"1136":{start:{line:5585,column:25},end:{line:5585,column:26}},"1137":{start:{line:5586,column:16},end:{line:5586,column:75}},"1138":{start:{line:5589,column:12},end:{line:5589,column:56}},"1139":{start:{line:5590,column:12},end:{line:5590,column:56}},"1140":{start:{line:5601,column:12},end:{line:5601,column:47}},"1141":{start:{line:5613,column:12},end:{line:5617,column:13}},"1142":{start:{line:5613,column:25},end:{line:5613,column:26}},"1143":{start:{line:5614,column:16},end:{line:5616,column:17}},"1144":{start:{line:5615,column:20},end:{line:5615,column:43}},"1145":{start:{line:5618,column:12},end:{line:5618,column:24}},"1146":{start:{line:5629,column:12},end:{line:5629,column:58}},"1147":{start:{line:5645,column:12},end:{line:5648,column:13}},"1148":{start:{line:5646,column:16},end:{line:5646,column:33}},"1149":{start:{line:5647,column:16},end:{line:5647,column:27}},"1150":{start:{line:5649,column:12},end:{line:5649,column:49}},"1151":{start:{line:5651,column:12},end:{line:5654,column:13}},"1152":{start:{line:5652,column:16},end:{line:5652,column:93}},"1153":{start:{line:5653,column:16},end:{line:5653,column:23}},"1154":{start:{line:5655,column:12},end:{line:5658,column:13}},"1155":{start:{line:5656,column:16},end:{line:5656,column:81}},"1156":{start:{line:5657,column:16},end:{line:5657,column:23}},"1157":{start:{line:5660,column:31},end:{line:5666,column:13}},"1158":{start:{line:5668,column:23},end:{line:5668,column:27}},"1159":{start:{line:5669,column:12},end:{line:5677,column:15}},"1160":{start:{line:5670,column:16},end:{line:5676,column:17}},"1161":{start:{line:5671,column:20},end:{line:5671,column:40}},"1162":{start:{line:5674,column:45},end:{line:5674,column:98}},"1163":{start:{line:5675,column:20},end:{line:5675,column:142}},"1164":{start:{line:5690,column:4},end:{line:5768,column:7}},"1165":{start:{line:5697,column:12},end:{line:5697,column:36}},"1166":{start:{line:5713,column:12},end:{line:5713,column:40}},"1167":{start:{line:5714,column:12},end:{line:5714,column:57}},"1168":{start:{line:5715,column:12},end:{line:5715,column:56}},"1169":{start:{line:5733,column:12},end:{line:5736,column:13}},"1170":{start:{line:5734,column:16},end:{line:5734,column:34}},"1171":{start:{line:5735,column:16},end:{line:5735,column:28}},"1172":{start:{line:5738,column:12},end:{line:5738,column:34}},"1173":{start:{line:5739,column:12},end:{line:5739,column:48}},"1174":{start:{line:5740,column:12},end:{line:5740,column:43}},"1175":{start:{line:5742,column:23},end:{line:5742,column:27}},"1176":{start:{line:5743,column:12},end:{line:5751,column:15}},"1177":{start:{line:5744,column:16},end:{line:5750,column:17}},"1178":{start:{line:5745,column:20},end:{line:5745,column:34}},"1179":{start:{line:5748,column:36},end:{line:5748,column:137}},"1180":{start:{line:5749,column:20},end:{line:5749,column:46}},"1181":{start:{line:5765,column:34},end:{line:5765,column:70}},"1182":{start:{line:5766,column:12},end:{line:5766,column:88}},"1183":{start:{line:5772,column:4},end:{line:5802,column:7}},"1184":{start:{line:5774,column:12},end:{line:5774,column:34}},"1185":{start:{line:5776,column:12},end:{line:5776,column:38}},"1186":{start:{line:5777,column:12},end:{line:5777,column:50}},"1187":{start:{line:5778,column:12},end:{line:5778,column:29}},"1188":{start:{line:5783,column:12},end:{line:5783,column:49}},"1189":{start:{line:5785,column:23},end:{line:5785,column:27}},"1190":{start:{line:5786,column:25},end:{line:5789,column:13}},"1191":{start:{line:5790,column:12},end:{line:5800,column:15}},"1192":{start:{line:5791,column:16},end:{line:5799,column:17}},"1193":{start:{line:5792,column:20},end:{line:5792,column:34}},"1194":{start:{line:5795,column:38},end:{line:5795,column:76}},"1195":{start:{line:5796,column:20},end:{line:5796,column:47}},"1196":{start:{line:5798,column:20},end:{line:5798,column:60}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:16,column:1},end:{line:16,column:2}},loc:{start:{line:16,column:12},end:{line:5803,column:1}},line:16},"1":{name:"(anonymous_1)",decl:{start:{line:38,column:14},end:{line:38,column:15}},loc:{start:{line:38,column:25},end:{line:40,column:9}},line:38},"2":{name:"(anonymous_2)",decl:{start:{line:72,column:14},end:{line:72,column:15}},loc:{start:{line:72,column:25},end:{line:88,column:9}},line:72},"3":{name:"(anonymous_3)",decl:{start:{line:105,column:20},end:{line:105,column:21}},loc:{start:{line:105,column:41},end:{line:117,column:9}},line:105},"4":{name:"(anonymous_4)",decl:{start:{line:135,column:14},end:{line:135,column:15}},loc:{start:{line:135,column:25},end:{line:137,column:9}},line:135},"5":{name:"(anonymous_5)",decl:{start:{line:163,column:24},end:{line:163,column:25}},loc:{start:{line:163,column:44},end:{line:165,column:9}},line:163},"6":{name:"(anonymous_6)",decl:{start:{line:191,column:17},end:{line:191,column:18}},loc:{start:{line:191,column:37},end:{line:193,column:9}},line:191},"7":{name:"(anonymous_7)",decl:{start:{line:217,column:23},end:{line:217,column:24}},loc:{start:{line:217,column:43},end:{line:219,column:9}},line:217},"8":{name:"(anonymous_8)",decl:{start:{line:243,column:26},end:{line:243,column:27}},loc:{start:{line:243,column:46},end:{line:245,column:9}},line:243},"9":{name:"(anonymous_9)",decl:{start:{line:270,column:26},end:{line:270,column:27}},loc:{start:{line:270,column:46},end:{line:272,column:9}},line:270},"10":{name:"(anonymous_10)",decl:{start:{line:299,column:14},end:{line:299,column:15}},loc:{start:{line:299,column:34},end:{line:301,column:9}},line:299},"11":{name:"(anonymous_11)",decl:{start:{line:311,column:20},end:{line:311,column:21}},loc:{start:{line:311,column:40},end:{line:313,column:9}},line:311},"12":{name:"(anonymous_12)",decl:{start:{line:336,column:15},end:{line:336,column:16}},loc:{start:{line:336,column:26},end:{line:338,column:9}},line:336},"13":{name:"(anonymous_13)",decl:{start:{line:365,column:15},end:{line:365,column:16}},loc:{start:{line:365,column:35},end:{line:367,column:9}},line:365},"14":{name:"(anonymous_14)",decl:{start:{line:396,column:16},end:{line:396,column:17}},loc:{start:{line:396,column:61},end:{line:404,column:9}},line:396},"15":{name:"(anonymous_15)",decl:{start:{line:419,column:16},end:{line:419,column:17}},loc:{start:{line:419,column:51},end:{line:426,column:9}},line:419},"16":{name:"(anonymous_16)",decl:{start:{line:452,column:23},end:{line:452,column:24}},loc:{start:{line:452,column:68},end:{line:460,column:9}},line:452},"17":{name:"(anonymous_17)",decl:{start:{line:477,column:21},end:{line:477,column:22}},loc:{start:{line:477,column:40},end:{line:500,column:9}},line:477},"18":{name:"(anonymous_18)",decl:{start:{line:478,column:35},end:{line:478,column:36}},loc:{start:{line:478,column:46},end:{line:478,column:48}},line:478},"19":{name:"(anonymous_19)",decl:{start:{line:481,column:54},end:{line:481,column:55}},loc:{start:{line:481,column:78},end:{line:497,column:13}},line:481},"20":{name:"(anonymous_20)",decl:{start:{line:488,column:31},end:{line:488,column:32}},loc:{start:{line:488,column:42},end:{line:495,column:21}},line:488},"21":{name:"(anonymous_21)",decl:{start:{line:516,column:20},end:{line:516,column:21}},loc:{start:{line:516,column:39},end:{line:521,column:9}},line:516},"22":{name:"(anonymous_22)",decl:{start:{line:517,column:35},end:{line:517,column:36}},loc:{start:{line:517,column:46},end:{line:517,column:48}},line:517},"23":{name:"(anonymous_23)",decl:{start:{line:543,column:15},end:{line:543,column:16}},loc:{start:{line:543,column:49},end:{line:562,column:9}},line:543},"24":{name:"(anonymous_24)",decl:{start:{line:549,column:35},end:{line:549,column:36}},loc:{start:{line:549,column:46},end:{line:549,column:48}},line:549},"25":{name:"(anonymous_25)",decl:{start:{line:554,column:50},end:{line:554,column:51}},loc:{start:{line:554,column:74},end:{line:561,column:13}},line:554},"26":{name:"(anonymous_26)",decl:{start:{line:580,column:19},end:{line:580,column:20}},loc:{start:{line:580,column:53},end:{line:601,column:9}},line:580},"27":{name:"(anonymous_27)",decl:{start:{line:586,column:35},end:{line:586,column:36}},loc:{start:{line:586,column:46},end:{line:586,column:48}},line:586},"28":{name:"(anonymous_28)",decl:{start:{line:592,column:53},end:{line:592,column:54}},loc:{start:{line:592,column:77},end:{line:600,column:13}},line:592},"29":{name:"(anonymous_29)",decl:{start:{line:624,column:13},end:{line:624,column:14}},loc:{start:{line:624,column:47},end:{line:663,column:9}},line:624},"30":{name:"(anonymous_30)",decl:{start:{line:630,column:35},end:{line:630,column:36}},loc:{start:{line:630,column:46},end:{line:630,column:48}},line:630},"31":{name:"(anonymous_31)",decl:{start:{line:652,column:16},end:{line:652,column:17}},loc:{start:{line:652,column:40},end:{line:659,column:17}},line:652},"32":{name:"(anonymous_32)",decl:{start:{line:685,column:14},end:{line:685,column:15}},loc:{start:{line:685,column:47},end:{line:703,column:9}},line:685},"33":{name:"(anonymous_33)",decl:{start:{line:721,column:13},end:{line:721,column:14}},loc:{start:{line:721,column:49},end:{line:735,column:9}},line:721},"34":{name:"(anonymous_34)",decl:{start:{line:737,column:16},end:{line:737,column:17}},loc:{start:{line:737,column:42},end:{line:750,column:9}},line:737},"35":{name:"(anonymous_35)",decl:{start:{line:768,column:14},end:{line:768,column:15}},loc:{start:{line:768,column:50},end:{line:782,column:9}},line:768},"36":{name:"(anonymous_36)",decl:{start:{line:800,column:13},end:{line:800,column:14}},loc:{start:{line:800,column:49},end:{line:814,column:9}},line:800},"37":{name:"(anonymous_37)",decl:{start:{line:843,column:14},end:{line:843,column:15}},loc:{start:{line:843,column:49},end:{line:858,column:9}},line:843},"38":{name:"(anonymous_38)",decl:{start:{line:865,column:14},end:{line:865,column:15}},loc:{start:{line:865,column:25},end:{line:867,column:9}},line:865},"39":{name:"(anonymous_39)",decl:{start:{line:877,column:15},end:{line:877,column:16}},loc:{start:{line:877,column:36},end:{line:880,column:9}},line:877},"40":{name:"(anonymous_40)",decl:{start:{line:891,column:15},end:{line:891,column:16}},loc:{start:{line:891,column:34},end:{line:893,column:9}},line:891},"41":{name:"(anonymous_41)",decl:{start:{line:902,column:20},end:{line:902,column:21}},loc:{start:{line:902,column:31},end:{line:904,column:9}},line:902},"42":{name:"(anonymous_42)",decl:{start:{line:913,column:15},end:{line:913,column:16}},loc:{start:{line:913,column:26},end:{line:915,column:9}},line:913},"43":{name:"(anonymous_43)",decl:{start:{line:953,column:14},end:{line:953,column:15}},loc:{start:{line:953,column:49},end:{line:977,column:9}},line:953},"44":{name:"(anonymous_44)",decl:{start:{line:987,column:15},end:{line:987,column:16}},loc:{start:{line:987,column:36},end:{line:1009,column:9}},line:987},"45":{name:"(anonymous_45)",decl:{start:{line:1019,column:16},end:{line:1019,column:17}},loc:{start:{line:1019,column:27},end:{line:1021,column:9}},line:1019},"46":{name:"(anonymous_46)",decl:{start:{line:1031,column:13},end:{line:1031,column:14}},loc:{start:{line:1031,column:24},end:{line:1033,column:9}},line:1031},"47":{name:"(anonymous_47)",decl:{start:{line:1043,column:15},end:{line:1043,column:16}},loc:{start:{line:1043,column:26},end:{line:1045,column:9}},line:1043},"48":{name:"(anonymous_48)",decl:{start:{line:1054,column:16},end:{line:1054,column:17}},loc:{start:{line:1054,column:27},end:{line:1056,column:9}},line:1054},"49":{name:"(anonymous_49)",decl:{start:{line:1065,column:17},end:{line:1065,column:18}},loc:{start:{line:1065,column:28},end:{line:1067,column:9}},line:1065},"50":{name:"(anonymous_50)",decl:{start:{line:1076,column:19},end:{line:1076,column:20}},loc:{start:{line:1076,column:30},end:{line:1078,column:9}},line:1076},"51":{name:"(anonymous_51)",decl:{start:{line:1095,column:15},end:{line:1095,column:16}},loc:{start:{line:1095,column:43},end:{line:1114,column:9}},line:1095},"52":{name:"(anonymous_52)",decl:{start:{line:1100,column:35},end:{line:1100,column:36}},loc:{start:{line:1100,column:46},end:{line:1100,column:48}},line:1100},"53":{name:"(anonymous_53)",decl:{start:{line:1105,column:41},end:{line:1105,column:42}},loc:{start:{line:1105,column:65},end:{line:1113,column:13}},line:1105},"54":{name:"(anonymous_54)",decl:{start:{line:1124,column:16},end:{line:1124,column:17}},loc:{start:{line:1124,column:35},end:{line:1131,column:9}},line:1124},"55":{name:"(anonymous_55)",decl:{start:{line:1125,column:35},end:{line:1125,column:36}},loc:{start:{line:1125,column:46},end:{line:1125,column:48}},line:1125},"56":{name:"(anonymous_56)",decl:{start:{line:1128,column:36},end:{line:1128,column:37}},loc:{start:{line:1128,column:50},end:{line:1130,column:13}},line:1128},"57":{name:"(anonymous_57)",decl:{start:{line:1142,column:16},end:{line:1142,column:17}},loc:{start:{line:1142,column:42},end:{line:1171,column:9}},line:1142},"58":{name:"(anonymous_58)",decl:{start:{line:1143,column:35},end:{line:1143,column:36}},loc:{start:{line:1143,column:46},end:{line:1143,column:48}},line:1143},"59":{name:"(anonymous_59)",decl:{start:{line:1150,column:43},end:{line:1150,column:44}},loc:{start:{line:1150,column:67},end:{line:1168,column:13}},line:1150},"60":{name:"(anonymous_60)",decl:{start:{line:1156,column:31},end:{line:1156,column:32}},loc:{start:{line:1156,column:42},end:{line:1163,column:21}},line:1156},"61":{name:"(anonymous_61)",decl:{start:{line:1181,column:17},end:{line:1181,column:18}},loc:{start:{line:1181,column:36},end:{line:1193,column:9}},line:1181},"62":{name:"(anonymous_62)",decl:{start:{line:1182,column:35},end:{line:1182,column:36}},loc:{start:{line:1182,column:46},end:{line:1182,column:48}},line:1182},"63":{name:"(anonymous_63)",decl:{start:{line:1185,column:37},end:{line:1185,column:38}},loc:{start:{line:1185,column:61},end:{line:1192,column:13}},line:1185},"64":{name:"(anonymous_64)",decl:{start:{line:1203,column:16},end:{line:1203,column:17}},loc:{start:{line:1203,column:35},end:{line:1215,column:9}},line:1203},"65":{name:"(anonymous_65)",decl:{start:{line:1204,column:35},end:{line:1204,column:36}},loc:{start:{line:1204,column:46},end:{line:1204,column:48}},line:1204},"66":{name:"(anonymous_66)",decl:{start:{line:1207,column:36},end:{line:1207,column:37}},loc:{start:{line:1207,column:60},end:{line:1214,column:13}},line:1207},"67":{name:"(anonymous_67)",decl:{start:{line:1225,column:16},end:{line:1225,column:17}},loc:{start:{line:1225,column:35},end:{line:1237,column:9}},line:1225},"68":{name:"(anonymous_68)",decl:{start:{line:1226,column:35},end:{line:1226,column:36}},loc:{start:{line:1226,column:46},end:{line:1226,column:48}},line:1226},"69":{name:"(anonymous_69)",decl:{start:{line:1229,column:37},end:{line:1229,column:38}},loc:{start:{line:1229,column:61},end:{line:1236,column:13}},line:1229},"70":{name:"(anonymous_70)",decl:{start:{line:1272,column:14},end:{line:1272,column:15}},loc:{start:{line:1272,column:49},end:{line:1290,column:9}},line:1272},"71":{name:"(anonymous_71)",decl:{start:{line:1300,column:27},end:{line:1300,column:28}},loc:{start:{line:1300,column:43},end:{line:1302,column:9}},line:1300},"72":{name:"(anonymous_72)",decl:{start:{line:1313,column:15},end:{line:1313,column:16}},loc:{start:{line:1313,column:36},end:{line:1337,column:9}},line:1313},"73":{name:"(anonymous_73)",decl:{start:{line:1347,column:15},end:{line:1347,column:16}},loc:{start:{line:1347,column:26},end:{line:1349,column:9}},line:1347},"74":{name:"(anonymous_74)",decl:{start:{line:1358,column:16},end:{line:1358,column:17}},loc:{start:{line:1358,column:27},end:{line:1360,column:9}},line:1358},"75":{name:"(anonymous_75)",decl:{start:{line:1369,column:17},end:{line:1369,column:18}},loc:{start:{line:1369,column:28},end:{line:1371,column:9}},line:1369},"76":{name:"(anonymous_76)",decl:{start:{line:1388,column:15},end:{line:1388,column:16}},loc:{start:{line:1388,column:43},end:{line:1412,column:9}},line:1388},"77":{name:"(anonymous_77)",decl:{start:{line:1393,column:35},end:{line:1393,column:36}},loc:{start:{line:1393,column:46},end:{line:1393,column:48}},line:1393},"78":{name:"(anonymous_78)",decl:{start:{line:1401,column:44},end:{line:1401,column:45}},loc:{start:{line:1401,column:68},end:{line:1409,column:13}},line:1401},"79":{name:"(anonymous_79)",decl:{start:{line:1414,column:18},end:{line:1414,column:19}},loc:{start:{line:1414,column:42},end:{line:1425,column:9}},line:1414},"80":{name:"(anonymous_80)",decl:{start:{line:1448,column:14},end:{line:1448,column:15}},loc:{start:{line:1448,column:38},end:{line:1505,column:9}},line:1448},"81":{name:"(anonymous_81)",decl:{start:{line:1524,column:16},end:{line:1524,column:17}},loc:{start:{line:1524,column:43},end:{line:1557,column:9}},line:1524},"82":{name:"(anonymous_82)",decl:{start:{line:1525,column:35},end:{line:1525,column:36}},loc:{start:{line:1525,column:46},end:{line:1525,column:48}},line:1525},"83":{name:"(anonymous_83)",decl:{start:{line:1527,column:44},end:{line:1527,column:45}},loc:{start:{line:1527,column:68},end:{line:1554,column:13}},line:1527},"84":{name:"(anonymous_84)",decl:{start:{line:1541,column:37},end:{line:1541,column:38}},loc:{start:{line:1541,column:48},end:{line:1548,column:25}},line:1541},"85":{name:"(anonymous_85)",decl:{start:{line:1574,column:14},end:{line:1574,column:15}},loc:{start:{line:1574,column:33},end:{line:1578,column:9}},line:1574},"86":{name:"(anonymous_86)",decl:{start:{line:1575,column:35},end:{line:1575,column:36}},loc:{start:{line:1575,column:46},end:{line:1575,column:48}},line:1575},"87":{name:"(anonymous_87)",decl:{start:{line:1595,column:14},end:{line:1595,column:15}},loc:{start:{line:1595,column:25},end:{line:1597,column:9}},line:1595},"88":{name:"(anonymous_88)",decl:{start:{line:1613,column:14},end:{line:1613,column:15}},loc:{start:{line:1613,column:49},end:{line:1621,column:9}},line:1613},"89":{name:"(anonymous_89)",decl:{start:{line:1636,column:20},end:{line:1636,column:21}},loc:{start:{line:1636,column:31},end:{line:1638,column:9}},line:1636},"90":{name:"(anonymous_90)",decl:{start:{line:1656,column:21},end:{line:1656,column:22}},loc:{start:{line:1656,column:40},end:{line:1665,column:9}},line:1656},"91":{name:"(anonymous_91)",decl:{start:{line:1657,column:35},end:{line:1657,column:36}},loc:{start:{line:1657,column:46},end:{line:1657,column:48}},line:1657},"92":{name:"(anonymous_92)",decl:{start:{line:1660,column:51},end:{line:1660,column:52}},loc:{start:{line:1660,column:65},end:{line:1662,column:13}},line:1660},"93":{name:"(anonymous_93)",decl:{start:{line:1688,column:18},end:{line:1688,column:19}},loc:{start:{line:1688,column:46},end:{line:1711,column:9}},line:1688},"94":{name:"(anonymous_94)",decl:{start:{line:1694,column:35},end:{line:1694,column:36}},loc:{start:{line:1694,column:46},end:{line:1694,column:48}},line:1694},"95":{name:"(anonymous_95)",decl:{start:{line:1698,column:53},end:{line:1698,column:54}},loc:{start:{line:1698,column:77},end:{line:1708,column:13}},line:1698},"96":{name:"(anonymous_96)",decl:{start:{line:1725,column:25},end:{line:1725,column:26}},loc:{start:{line:1725,column:36},end:{line:1727,column:9}},line:1725},"97":{name:"(anonymous_97)",decl:{start:{line:1748,column:17},end:{line:1748,column:18}},loc:{start:{line:1748,column:45},end:{line:1777,column:9}},line:1748},"98":{name:"(anonymous_98)",decl:{start:{line:1754,column:35},end:{line:1754,column:36}},loc:{start:{line:1754,column:46},end:{line:1754,column:48}},line:1754},"99":{name:"(anonymous_99)",decl:{start:{line:1758,column:48},end:{line:1758,column:49}},loc:{start:{line:1758,column:72},end:{line:1776,column:13}},line:1758},"100":{name:"(anonymous_100)",decl:{start:{line:1794,column:22},end:{line:1794,column:23}},loc:{start:{line:1794,column:41},end:{line:1801,column:9}},line:1794},"101":{name:"(anonymous_101)",decl:{start:{line:1795,column:35},end:{line:1795,column:36}},loc:{start:{line:1795,column:46},end:{line:1795,column:48}},line:1795},"102":{name:"(anonymous_102)",decl:{start:{line:1798,column:44},end:{line:1798,column:45}},loc:{start:{line:1798,column:68},end:{line:1800,column:13}},line:1798},"103":{name:"(anonymous_103)",decl:{start:{line:1815,column:16},end:{line:1815,column:17}},loc:{start:{line:1815,column:43},end:{line:1842,column:9}},line:1815},"104":{name:"(anonymous_104)",decl:{start:{line:1820,column:37},end:{line:1820,column:38}},loc:{start:{line:1820,column:59},end:{line:1835,column:17}},line:1820},"105":{name:"(anonymous_105)",decl:{start:{line:1826,column:52},end:{line:1826,column:53}},loc:{start:{line:1826,column:63},end:{line:1833,column:25}},line:1826},"106":{name:"(anonymous_106)",decl:{start:{line:1860,column:14},end:{line:1860,column:15}},loc:{start:{line:1860,column:25},end:{line:1862,column:9}},line:1860},"107":{name:"(anonymous_107)",decl:{start:{line:1872,column:27},end:{line:1872,column:28}},loc:{start:{line:1872,column:43},end:{line:1875,column:9}},line:1872},"108":{name:"(anonymous_108)",decl:{start:{line:1890,column:14},end:{line:1890,column:15}},loc:{start:{line:1890,column:43},end:{line:1892,column:9}},line:1890},"109":{name:"(anonymous_109)",decl:{start:{line:1909,column:14},end:{line:1909,column:15}},loc:{start:{line:1909,column:26},end:{line:1911,column:9}},line:1909},"110":{name:"(anonymous_110)",decl:{start:{line:1927,column:14},end:{line:1927,column:15}},loc:{start:{line:1927,column:50},end:{line:1930,column:9}},line:1927},"111":{name:"(anonymous_111)",decl:{start:{line:1956,column:14},end:{line:1956,column:15}},loc:{start:{line:1956,column:25},end:{line:1958,column:9}},line:1956},"112":{name:"(anonymous_112)",decl:{start:{line:1970,column:27},end:{line:1970,column:28}},loc:{start:{line:1970,column:43},end:{line:1973,column:9}},line:1970},"113":{name:"(anonymous_113)",decl:{start:{line:1988,column:14},end:{line:1988,column:15}},loc:{start:{line:1988,column:43},end:{line:1990,column:9}},line:1988},"114":{name:"(anonymous_114)",decl:{start:{line:2008,column:14},end:{line:2008,column:15}},loc:{start:{line:2008,column:25},end:{line:2010,column:9}},line:2008},"115":{name:"(anonymous_115)",decl:{start:{line:2020,column:17},end:{line:2020,column:18}},loc:{start:{line:2020,column:28},end:{line:2022,column:9}},line:2020},"116":{name:"(anonymous_116)",decl:{start:{line:2030,column:19},end:{line:2030,column:20}},loc:{start:{line:2030,column:30},end:{line:2032,column:9}},line:2030},"117":{name:"(anonymous_117)",decl:{start:{line:2043,column:22},end:{line:2043,column:23}},loc:{start:{line:2043,column:33},end:{line:2046,column:9}},line:2043},"118":{name:"(anonymous_118)",decl:{start:{line:2056,column:24},end:{line:2056,column:25}},loc:{start:{line:2056,column:35},end:{line:2058,column:9}},line:2056},"119":{name:"(anonymous_119)",decl:{start:{line:2066,column:25},end:{line:2066,column:26}},loc:{start:{line:2066,column:36},end:{line:2068,column:9}},line:2066},"120":{name:"(anonymous_120)",decl:{start:{line:2077,column:18},end:{line:2077,column:19}},loc:{start:{line:2077,column:29},end:{line:2079,column:9}},line:2077},"121":{name:"(anonymous_121)",decl:{start:{line:2087,column:13},end:{line:2087,column:14}},loc:{start:{line:2087,column:24},end:{line:2089,column:9}},line:2087},"122":{name:"(anonymous_122)",decl:{start:{line:2097,column:21},end:{line:2097,column:22}},loc:{start:{line:2097,column:32},end:{line:2099,column:9}},line:2097},"123":{name:"(anonymous_123)",decl:{start:{line:2109,column:29},end:{line:2109,column:30}},loc:{start:{line:2109,column:40},end:{line:2111,column:9}},line:2109},"124":{name:"(anonymous_124)",decl:{start:{line:2121,column:29},end:{line:2121,column:30}},loc:{start:{line:2121,column:40},end:{line:2123,column:9}},line:2121},"125":{name:"(anonymous_125)",decl:{start:{line:2139,column:14},end:{line:2139,column:15}},loc:{start:{line:2139,column:49},end:{line:2142,column:9}},line:2139},"126":{name:"(anonymous_126)",decl:{start:{line:2160,column:14},end:{line:2160,column:15}},loc:{start:{line:2160,column:25},end:{line:2162,column:9}},line:2160},"127":{name:"(anonymous_127)",decl:{start:{line:2172,column:15},end:{line:2172,column:16}},loc:{start:{line:2172,column:26},end:{line:2174,column:9}},line:2172},"128":{name:"(anonymous_128)",decl:{start:{line:2193,column:14},end:{line:2193,column:15}},loc:{start:{line:2193,column:42},end:{line:2221,column:9}},line:2193},"129":{name:"(anonymous_129)",decl:{start:{line:2199,column:35},end:{line:2199,column:36}},loc:{start:{line:2199,column:46},end:{line:2199,column:48}},line:2199},"130":{name:"(anonymous_130)",decl:{start:{line:2203,column:41},end:{line:2203,column:42}},loc:{start:{line:2203,column:65},end:{line:2220,column:13}},line:2203},"131":{name:"(anonymous_131)",decl:{start:{line:2237,column:14},end:{line:2237,column:15}},loc:{start:{line:2237,column:49},end:{line:2242,column:9}},line:2237},"132":{name:"(anonymous_132)",decl:{start:{line:2261,column:14},end:{line:2261,column:15}},loc:{start:{line:2261,column:25},end:{line:2263,column:9}},line:2261},"133":{name:"(anonymous_133)",decl:{start:{line:2273,column:27},end:{line:2273,column:28}},loc:{start:{line:2273,column:43},end:{line:2276,column:9}},line:2273},"134":{name:"(anonymous_134)",decl:{start:{line:2283,column:16},end:{line:2283,column:17}},loc:{start:{line:2283,column:27},end:{line:2285,column:9}},line:2283},"135":{name:"(anonymous_135)",decl:{start:{line:2300,column:14},end:{line:2300,column:15}},loc:{start:{line:2300,column:43},end:{line:2305,column:9}},line:2300},"136":{name:"(anonymous_136)",decl:{start:{line:2330,column:14},end:{line:2330,column:15}},loc:{start:{line:2330,column:25},end:{line:2332,column:9}},line:2330},"137":{name:"(anonymous_137)",decl:{start:{line:2344,column:14},end:{line:2344,column:15}},loc:{start:{line:2344,column:38},end:{line:2350,column:9}},line:2344},"138":{name:"(anonymous_138)",decl:{start:{line:2367,column:19},end:{line:2367,column:20}},loc:{start:{line:2367,column:38},end:{line:2379,column:9}},line:2367},"139":{name:"(anonymous_139)",decl:{start:{line:2368,column:35},end:{line:2368,column:36}},loc:{start:{line:2368,column:46},end:{line:2368,column:48}},line:2368},"140":{name:"(anonymous_140)",decl:{start:{line:2371,column:41},end:{line:2371,column:42}},loc:{start:{line:2371,column:65},end:{line:2378,column:13}},line:2371},"141":{name:"(anonymous_141)",decl:{start:{line:2396,column:20},end:{line:2396,column:21}},loc:{start:{line:2396,column:39},end:{line:2408,column:9}},line:2396},"142":{name:"(anonymous_142)",decl:{start:{line:2397,column:35},end:{line:2397,column:36}},loc:{start:{line:2397,column:46},end:{line:2397,column:48}},line:2397},"143":{name:"(anonymous_143)",decl:{start:{line:2400,column:42},end:{line:2400,column:43}},loc:{start:{line:2400,column:66},end:{line:2407,column:13}},line:2400},"144":{name:"(anonymous_144)",decl:{start:{line:2434,column:14},end:{line:2434,column:15}},loc:{start:{line:2434,column:25},end:{line:2436,column:9}},line:2434},"145":{name:"(anonymous_145)",decl:{start:{line:2446,column:27},end:{line:2446,column:28}},loc:{start:{line:2446,column:43},end:{line:2448,column:9}},line:2446},"146":{name:"(anonymous_146)",decl:{start:{line:2459,column:14},end:{line:2459,column:15}},loc:{start:{line:2459,column:32},end:{line:2461,column:9}},line:2459},"147":{name:"(anonymous_147)",decl:{start:{line:2477,column:14},end:{line:2477,column:15}},loc:{start:{line:2477,column:25},end:{line:2479,column:9}},line:2477},"148":{name:"(anonymous_148)",decl:{start:{line:2490,column:14},end:{line:2490,column:15}},loc:{start:{line:2490,column:32},end:{line:2493,column:9}},line:2490},"149":{name:"(anonymous_149)",decl:{start:{line:2510,column:14},end:{line:2510,column:15}},loc:{start:{line:2510,column:25},end:{line:2512,column:9}},line:2510},"150":{name:"(anonymous_150)",decl:{start:{line:2524,column:14},end:{line:2524,column:15}},loc:{start:{line:2524,column:38},end:{line:2527,column:9}},line:2524},"151":{name:"(anonymous_151)",decl:{start:{line:2553,column:14},end:{line:2553,column:15}},loc:{start:{line:2553,column:25},end:{line:2555,column:9}},line:2553},"152":{name:"(anonymous_152)",decl:{start:{line:2565,column:27},end:{line:2565,column:28}},loc:{start:{line:2565,column:43},end:{line:2567,column:9}},line:2565},"153":{name:"(anonymous_153)",decl:{start:{line:2578,column:14},end:{line:2578,column:15}},loc:{start:{line:2578,column:32},end:{line:2580,column:9}},line:2578},"154":{name:"(anonymous_154)",decl:{start:{line:2592,column:16},end:{line:2592,column:17}},loc:{start:{line:2592,column:43},end:{line:2617,column:9}},line:2592},"155":{name:"(anonymous_155)",decl:{start:{line:2593,column:35},end:{line:2593,column:36}},loc:{start:{line:2593,column:46},end:{line:2593,column:48}},line:2593},"156":{name:"(anonymous_156)",decl:{start:{line:2596,column:44},end:{line:2596,column:45}},loc:{start:{line:2596,column:68},end:{line:2614,column:13}},line:2596},"157":{name:"(anonymous_157)",decl:{start:{line:2605,column:33},end:{line:2605,column:34}},loc:{start:{line:2605,column:44},end:{line:2612,column:21}},line:2605},"158":{name:"(anonymous_158)",decl:{start:{line:2634,column:14},end:{line:2634,column:15}},loc:{start:{line:2634,column:25},end:{line:2636,column:9}},line:2634},"159":{name:"(anonymous_159)",decl:{start:{line:2652,column:14},end:{line:2652,column:15}},loc:{start:{line:2652,column:49},end:{line:2655,column:9}},line:2652},"160":{name:"(anonymous_160)",decl:{start:{line:2672,column:14},end:{line:2672,column:15}},loc:{start:{line:2672,column:25},end:{line:2674,column:9}},line:2672},"161":{name:"(anonymous_161)",decl:{start:{line:2684,column:27},end:{line:2684,column:28}},loc:{start:{line:2684,column:43},end:{line:2687,column:9}},line:2684},"162":{name:"(anonymous_162)",decl:{start:{line:2702,column:14},end:{line:2702,column:15}},loc:{start:{line:2702,column:43},end:{line:2704,column:9}},line:2702},"163":{name:"(anonymous_163)",decl:{start:{line:2720,column:14},end:{line:2720,column:15}},loc:{start:{line:2720,column:25},end:{line:2722,column:9}},line:2720},"164":{name:"(anonymous_164)",decl:{start:{line:2738,column:14},end:{line:2738,column:15}},loc:{start:{line:2738,column:49},end:{line:2743,column:9}},line:2738},"165":{name:"(anonymous_165)",decl:{start:{line:2766,column:21},end:{line:2766,column:22}},loc:{start:{line:2766,column:55},end:{line:2782,column:9}},line:2766},"166":{name:"(anonymous_166)",decl:{start:{line:2772,column:35},end:{line:2772,column:36}},loc:{start:{line:2772,column:46},end:{line:2772,column:48}},line:2772},"167":{name:"(anonymous_167)",decl:{start:{line:2779,column:51},end:{line:2779,column:52}},loc:{start:{line:2779,column:73},end:{line:2781,column:13}},line:2779},"168":{name:"(anonymous_168)",decl:{start:{line:2784,column:16},end:{line:2784,column:17}},loc:{start:{line:2784,column:35},end:{line:2791,column:9}},line:2784},"169":{name:"(anonymous_169)",decl:{start:{line:2808,column:14},end:{line:2808,column:15}},loc:{start:{line:2808,column:25},end:{line:2810,column:9}},line:2808},"170":{name:"(anonymous_170)",decl:{start:{line:2820,column:27},end:{line:2820,column:28}},loc:{start:{line:2820,column:43},end:{line:2823,column:9}},line:2820},"171":{name:"(anonymous_171)",decl:{start:{line:2838,column:14},end:{line:2838,column:15}},loc:{start:{line:2838,column:43},end:{line:2840,column:9}},line:2838},"172":{name:"(anonymous_172)",decl:{start:{line:2859,column:16},end:{line:2859,column:17}},loc:{start:{line:2859,column:49},end:{line:2872,column:9}},line:2859},"173":{name:"(anonymous_173)",decl:{start:{line:2889,column:14},end:{line:2889,column:15}},loc:{start:{line:2889,column:25},end:{line:2892,column:9}},line:2889},"174":{name:"(anonymous_174)",decl:{start:{line:2909,column:14},end:{line:2909,column:15}},loc:{start:{line:2909,column:55},end:{line:2913,column:9}},line:2909},"175":{name:"(anonymous_175)",decl:{start:{line:2931,column:14},end:{line:2931,column:15}},loc:{start:{line:2931,column:25},end:{line:2933,column:9}},line:2931},"176":{name:"(anonymous_176)",decl:{start:{line:2945,column:26},end:{line:2945,column:27}},loc:{start:{line:2945,column:37},end:{line:2947,column:9}},line:2945},"177":{name:"(anonymous_177)",decl:{start:{line:2957,column:27},end:{line:2957,column:28}},loc:{start:{line:2957,column:43},end:{line:2960,column:9}},line:2957},"178":{name:"(anonymous_178)",decl:{start:{line:2976,column:14},end:{line:2976,column:15}},loc:{start:{line:2976,column:49},end:{line:2979,column:9}},line:2976},"179":{name:"(anonymous_179)",decl:{start:{line:2998,column:16},end:{line:2998,column:17}},loc:{start:{line:2998,column:55},end:{line:3016,column:9}},line:2998},"180":{name:"(anonymous_180)",decl:{start:{line:3042,column:14},end:{line:3042,column:15}},loc:{start:{line:3042,column:25},end:{line:3044,column:9}},line:3042},"181":{name:"(anonymous_181)",decl:{start:{line:3054,column:27},end:{line:3054,column:28}},loc:{start:{line:3054,column:43},end:{line:3056,column:9}},line:3054},"182":{name:"(anonymous_182)",decl:{start:{line:3071,column:14},end:{line:3071,column:15}},loc:{start:{line:3071,column:43},end:{line:3077,column:9}},line:3071},"183":{name:"(anonymous_183)",decl:{start:{line:3095,column:16},end:{line:3095,column:17}},loc:{start:{line:3095,column:45},end:{line:3123,column:9}},line:3095},"184":{name:"(anonymous_184)",decl:{start:{line:3102,column:35},end:{line:3102,column:36}},loc:{start:{line:3102,column:46},end:{line:3102,column:48}},line:3102},"185":{name:"(anonymous_185)",decl:{start:{line:3105,column:56},end:{line:3105,column:57}},loc:{start:{line:3105,column:80},end:{line:3120,column:13}},line:3105},"186":{name:"(anonymous_186)",decl:{start:{line:3111,column:33},end:{line:3111,column:34}},loc:{start:{line:3111,column:44},end:{line:3118,column:21}},line:3111},"187":{name:"(anonymous_187)",decl:{start:{line:3125,column:23},end:{line:3125,column:24}},loc:{start:{line:3125,column:48},end:{line:3151,column:9}},line:3125},"188":{name:"(anonymous_188)",decl:{start:{line:3133,column:58},end:{line:3133,column:59}},loc:{start:{line:3133,column:63},end:{line:3133,column:82}},line:3133},"189":{name:"(anonymous_189)",decl:{start:{line:3153,column:25},end:{line:3153,column:26}},loc:{start:{line:3153,column:54},end:{line:3169,column:9}},line:3153},"190":{name:"(anonymous_190)",decl:{start:{line:3171,column:19},end:{line:3171,column:20}},loc:{start:{line:3171,column:90},end:{line:3212,column:9}},line:3171},"191":{name:"(anonymous_191)",decl:{start:{line:3172,column:35},end:{line:3172,column:36}},loc:{start:{line:3172,column:46},end:{line:3172,column:48}},line:3172},"192":{name:"(anonymous_192)",decl:{start:{line:3185,column:20},end:{line:3185,column:21}},loc:{start:{line:3185,column:38},end:{line:3185,column:92}},line:3185},"193":{name:"(anonymous_193)",decl:{start:{line:3200,column:55},end:{line:3200,column:56}},loc:{start:{line:3200,column:81},end:{line:3203,column:17}},line:3200},"194":{name:"(anonymous_194)",decl:{start:{line:3207,column:49},end:{line:3207,column:50}},loc:{start:{line:3207,column:73},end:{line:3210,column:17}},line:3207},"195":{name:"(anonymous_195)",decl:{start:{line:3229,column:14},end:{line:3229,column:15}},loc:{start:{line:3229,column:25},end:{line:3231,column:9}},line:3229},"196":{name:"(anonymous_196)",decl:{start:{line:3247,column:14},end:{line:3247,column:15}},loc:{start:{line:3247,column:48},end:{line:3269,column:9}},line:3247},"197":{name:"(anonymous_197)",decl:{start:{line:3286,column:16},end:{line:3286,column:17}},loc:{start:{line:3286,column:35},end:{line:3290,column:9}},line:3286},"198":{name:"(anonymous_198)",decl:{start:{line:3307,column:24},end:{line:3307,column:25}},loc:{start:{line:3307,column:43},end:{line:3316,column:9}},line:3307},"199":{name:"(anonymous_199)",decl:{start:{line:3308,column:35},end:{line:3308,column:36}},loc:{start:{line:3308,column:46},end:{line:3308,column:48}},line:3308},"200":{name:"(anonymous_200)",decl:{start:{line:3311,column:71},end:{line:3311,column:72}},loc:{start:{line:3311,column:85},end:{line:3313,column:13}},line:3311},"201":{name:"(anonymous_201)",decl:{start:{line:3333,column:23},end:{line:3333,column:24}},loc:{start:{line:3333,column:42},end:{line:3342,column:9}},line:3333},"202":{name:"(anonymous_202)",decl:{start:{line:3334,column:35},end:{line:3334,column:36}},loc:{start:{line:3334,column:46},end:{line:3334,column:48}},line:3334},"203":{name:"(anonymous_203)",decl:{start:{line:3337,column:70},end:{line:3337,column:71}},loc:{start:{line:3337,column:84},end:{line:3339,column:13}},line:3337},"204":{name:"(anonymous_204)",decl:{start:{line:3360,column:16},end:{line:3360,column:17}},loc:{start:{line:3360,column:43},end:{line:3374,column:9}},line:3360},"205":{name:"(anonymous_205)",decl:{start:{line:3361,column:35},end:{line:3361,column:36}},loc:{start:{line:3361,column:46},end:{line:3361,column:48}},line:3361},"206":{name:"(anonymous_206)",decl:{start:{line:3366,column:46},end:{line:3366,column:47}},loc:{start:{line:3366,column:70},end:{line:3373,column:13}},line:3366},"207":{name:"(anonymous_207)",decl:{start:{line:3391,column:18},end:{line:3391,column:19}},loc:{start:{line:3391,column:37},end:{line:3400,column:9}},line:3391},"208":{name:"(anonymous_208)",decl:{start:{line:3392,column:35},end:{line:3392,column:36}},loc:{start:{line:3392,column:46},end:{line:3392,column:48}},line:3392},"209":{name:"(anonymous_209)",decl:{start:{line:3395,column:65},end:{line:3395,column:66}},loc:{start:{line:3395,column:79},end:{line:3397,column:13}},line:3395},"210":{name:"(anonymous_210)",decl:{start:{line:3413,column:18},end:{line:3413,column:19}},loc:{start:{line:3413,column:41},end:{line:3415,column:9}},line:3413},"211":{name:"(anonymous_211)",decl:{start:{line:3432,column:15},end:{line:3432,column:16}},loc:{start:{line:3432,column:34},end:{line:3441,column:9}},line:3432},"212":{name:"(anonymous_212)",decl:{start:{line:3433,column:35},end:{line:3433,column:36}},loc:{start:{line:3433,column:46},end:{line:3433,column:48}},line:3433},"213":{name:"(anonymous_213)",decl:{start:{line:3436,column:62},end:{line:3436,column:63}},loc:{start:{line:3436,column:76},end:{line:3438,column:13}},line:3436},"214":{name:"(anonymous_214)",decl:{start:{line:3459,column:17},end:{line:3459,column:18}},loc:{start:{line:3459,column:44},end:{line:3473,column:9}},line:3459},"215":{name:"(anonymous_215)",decl:{start:{line:3460,column:35},end:{line:3460,column:36}},loc:{start:{line:3460,column:46},end:{line:3460,column:48}},line:3460},"216":{name:"(anonymous_216)",decl:{start:{line:3465,column:55},end:{line:3465,column:56}},loc:{start:{line:3465,column:79},end:{line:3472,column:13}},line:3465},"217":{name:"(anonymous_217)",decl:{start:{line:3496,column:17},end:{line:3496,column:18}},loc:{start:{line:3496,column:44},end:{line:3510,column:9}},line:3496},"218":{name:"(anonymous_218)",decl:{start:{line:3497,column:35},end:{line:3497,column:36}},loc:{start:{line:3497,column:46},end:{line:3497,column:48}},line:3497},"219":{name:"(anonymous_219)",decl:{start:{line:3502,column:47},end:{line:3502,column:48}},loc:{start:{line:3502,column:71},end:{line:3509,column:13}},line:3502},"220":{name:"(anonymous_220)",decl:{start:{line:3527,column:19},end:{line:3527,column:20}},loc:{start:{line:3527,column:38},end:{line:3539,column:9}},line:3527},"221":{name:"(anonymous_221)",decl:{start:{line:3528,column:35},end:{line:3528,column:36}},loc:{start:{line:3528,column:46},end:{line:3528,column:48}},line:3528},"222":{name:"(anonymous_222)",decl:{start:{line:3531,column:46},end:{line:3531,column:47}},loc:{start:{line:3531,column:70},end:{line:3538,column:13}},line:3531},"223":{name:"(anonymous_223)",decl:{start:{line:3557,column:21},end:{line:3557,column:22}},loc:{start:{line:3557,column:47},end:{line:3566,column:9}},line:3557},"224":{name:"(anonymous_224)",decl:{start:{line:3558,column:35},end:{line:3558,column:36}},loc:{start:{line:3558,column:46},end:{line:3558,column:48}},line:3558},"225":{name:"(anonymous_225)",decl:{start:{line:3561,column:85},end:{line:3561,column:86}},loc:{start:{line:3561,column:99},end:{line:3563,column:13}},line:3561},"226":{name:"(anonymous_226)",decl:{start:{line:3585,column:16},end:{line:3585,column:17}},loc:{start:{line:3585,column:42},end:{line:3594,column:9}},line:3585},"227":{name:"(anonymous_227)",decl:{start:{line:3586,column:35},end:{line:3586,column:36}},loc:{start:{line:3586,column:46},end:{line:3586,column:48}},line:3586},"228":{name:"(anonymous_228)",decl:{start:{line:3589,column:75},end:{line:3589,column:76}},loc:{start:{line:3589,column:89},end:{line:3591,column:13}},line:3589},"229":{name:"(anonymous_229)",decl:{start:{line:3612,column:17},end:{line:3612,column:18}},loc:{start:{line:3612,column:44},end:{line:3624,column:9}},line:3612},"230":{name:"(anonymous_230)",decl:{start:{line:3613,column:35},end:{line:3613,column:36}},loc:{start:{line:3613,column:46},end:{line:3613,column:48}},line:3613},"231":{name:"(anonymous_231)",decl:{start:{line:3616,column:47},end:{line:3616,column:48}},loc:{start:{line:3616,column:71},end:{line:3623,column:13}},line:3616},"232":{name:"(anonymous_232)",decl:{start:{line:3642,column:18},end:{line:3642,column:19}},loc:{start:{line:3642,column:45},end:{line:3654,column:9}},line:3642},"233":{name:"(anonymous_233)",decl:{start:{line:3643,column:35},end:{line:3643,column:36}},loc:{start:{line:3643,column:46},end:{line:3643,column:48}},line:3643},"234":{name:"(anonymous_234)",decl:{start:{line:3646,column:48},end:{line:3646,column:49}},loc:{start:{line:3646,column:72},end:{line:3653,column:13}},line:3646},"235":{name:"(anonymous_235)",decl:{start:{line:3672,column:15},end:{line:3672,column:16}},loc:{start:{line:3672,column:34},end:{line:3681,column:9}},line:3672},"236":{name:"(anonymous_236)",decl:{start:{line:3673,column:35},end:{line:3673,column:36}},loc:{start:{line:3673,column:46},end:{line:3673,column:48}},line:3673},"237":{name:"(anonymous_237)",decl:{start:{line:3676,column:62},end:{line:3676,column:63}},loc:{start:{line:3676,column:76},end:{line:3678,column:13}},line:3676},"238":{name:"(anonymous_238)",decl:{start:{line:3699,column:15},end:{line:3699,column:16}},loc:{start:{line:3699,column:44},end:{line:3787,column:9}},line:3699},"239":{name:"(anonymous_239)",decl:{start:{line:3715,column:49},end:{line:3715,column:50}},loc:{start:{line:3715,column:60},end:{line:3715,column:62}},line:3715},"240":{name:"(anonymous_240)",decl:{start:{line:3716,column:55},end:{line:3716,column:56}},loc:{start:{line:3716,column:66},end:{line:3716,column:68}},line:3716},"241":{name:"(anonymous_241)",decl:{start:{line:3717,column:47},end:{line:3717,column:48}},loc:{start:{line:3717,column:58},end:{line:3717,column:60}},line:3717},"242":{name:"(anonymous_242)",decl:{start:{line:3718,column:51},end:{line:3718,column:52}},loc:{start:{line:3718,column:62},end:{line:3718,column:64}},line:3718},"243":{name:"(anonymous_243)",decl:{start:{line:3719,column:49},end:{line:3719,column:50}},loc:{start:{line:3719,column:60},end:{line:3719,column:62}},line:3719},"244":{name:"(anonymous_244)",decl:{start:{line:3722,column:57},end:{line:3722,column:58}},loc:{start:{line:3722,column:68},end:{line:3722,column:70}},line:3722},"245":{name:"(anonymous_245)",decl:{start:{line:3723,column:75},end:{line:3723,column:76}},loc:{start:{line:3723,column:86},end:{line:3723,column:88}},line:3723},"246":{name:"(anonymous_246)",decl:{start:{line:3729,column:16},end:{line:3729,column:17}},loc:{start:{line:3729,column:27},end:{line:3729,column:51}},line:3729},"247":{name:"(anonymous_247)",decl:{start:{line:3730,column:16},end:{line:3730,column:17}},loc:{start:{line:3730,column:40},end:{line:3780,column:17}},line:3730},"248":{name:"(anonymous_248)",decl:{start:{line:3731,column:31},end:{line:3731,column:32}},loc:{start:{line:3731,column:50},end:{line:3779,column:21}},line:3731},"249":{name:"(anonymous_249)",decl:{start:{line:3781,column:16},end:{line:3781,column:17}},loc:{start:{line:3781,column:30},end:{line:3785,column:17}},line:3781},"250":{name:"(anonymous_250)",decl:{start:{line:3804,column:17},end:{line:3804,column:18}},loc:{start:{line:3804,column:36},end:{line:3813,column:9}},line:3804},"251":{name:"(anonymous_251)",decl:{start:{line:3805,column:35},end:{line:3805,column:36}},loc:{start:{line:3805,column:46},end:{line:3805,column:48}},line:3805},"252":{name:"(anonymous_252)",decl:{start:{line:3808,column:64},end:{line:3808,column:65}},loc:{start:{line:3808,column:78},end:{line:3810,column:13}},line:3808},"253":{name:"(anonymous_253)",decl:{start:{line:3830,column:14},end:{line:3830,column:15}},loc:{start:{line:3830,column:25},end:{line:3832,column:9}},line:3830},"254":{name:"(anonymous_254)",decl:{start:{line:3842,column:27},end:{line:3842,column:28}},loc:{start:{line:3842,column:43},end:{line:3846,column:9}},line:3842},"255":{name:"(anonymous_255)",decl:{start:{line:3861,column:14},end:{line:3861,column:15}},loc:{start:{line:3861,column:43},end:{line:3867,column:9}},line:3861},"256":{name:"(anonymous_256)",decl:{start:{line:3886,column:16},end:{line:3886,column:17}},loc:{start:{line:3886,column:50},end:{line:3917,column:9}},line:3886},"257":{name:"(anonymous_257)",decl:{start:{line:3895,column:35},end:{line:3895,column:36}},loc:{start:{line:3895,column:46},end:{line:3895,column:48}},line:3895},"258":{name:"(anonymous_258)",decl:{start:{line:3908,column:41},end:{line:3908,column:42}},loc:{start:{line:3908,column:65},end:{line:3916,column:13}},line:3908},"259":{name:"(anonymous_259)",decl:{start:{line:3944,column:16},end:{line:3944,column:17}},loc:{start:{line:3944,column:50},end:{line:3946,column:9}},line:3944},"260":{name:"(anonymous_260)",decl:{start:{line:3969,column:23},end:{line:3969,column:24}},loc:{start:{line:3969,column:57},end:{line:4014,column:9}},line:3969},"261":{name:"(anonymous_261)",decl:{start:{line:3978,column:35},end:{line:3978,column:36}},loc:{start:{line:3978,column:46},end:{line:3978,column:48}},line:3978},"262":{name:"(anonymous_262)",decl:{start:{line:4003,column:16},end:{line:4003,column:17}},loc:{start:{line:4003,column:40},end:{line:4010,column:17}},line:4003},"263":{name:"(anonymous_263)",decl:{start:{line:4071,column:14},end:{line:4071,column:15}},loc:{start:{line:4071,column:30},end:{line:4086,column:9}},line:4071},"264":{name:"(anonymous_264)",decl:{start:{line:4095,column:18},end:{line:4095,column:19}},loc:{start:{line:4095,column:29},end:{line:4097,column:9}},line:4095},"265":{name:"(anonymous_265)",decl:{start:{line:4106,column:18},end:{line:4106,column:19}},loc:{start:{line:4106,column:29},end:{line:4108,column:9}},line:4106},"266":{name:"(anonymous_266)",decl:{start:{line:4117,column:21},end:{line:4117,column:22}},loc:{start:{line:4117,column:32},end:{line:4119,column:9}},line:4117},"267":{name:"(anonymous_267)",decl:{start:{line:4128,column:23},end:{line:4128,column:24}},loc:{start:{line:4128,column:34},end:{line:4130,column:9}},line:4128},"268":{name:"(anonymous_268)",decl:{start:{line:4139,column:22},end:{line:4139,column:23}},loc:{start:{line:4139,column:33},end:{line:4141,column:9}},line:4139},"269":{name:"(anonymous_269)",decl:{start:{line:4150,column:16},end:{line:4150,column:17}},loc:{start:{line:4150,column:27},end:{line:4152,column:9}},line:4150},"270":{name:"(anonymous_270)",decl:{start:{line:4161,column:19},end:{line:4161,column:20}},loc:{start:{line:4161,column:30},end:{line:4163,column:9}},line:4161},"271":{name:"(anonymous_271)",decl:{start:{line:4191,column:14},end:{line:4191,column:15}},loc:{start:{line:4191,column:30},end:{line:4198,column:9}},line:4191},"272":{name:"(anonymous_272)",decl:{start:{line:4257,column:14},end:{line:4257,column:15}},loc:{start:{line:4257,column:30},end:{line:4283,column:9}},line:4257},"273":{name:"(anonymous_273)",decl:{start:{line:4292,column:26},end:{line:4292,column:27}},loc:{start:{line:4292,column:37},end:{line:4294,column:9}},line:4292},"274":{name:"(anonymous_274)",decl:{start:{line:4303,column:20},end:{line:4303,column:21}},loc:{start:{line:4303,column:31},end:{line:4305,column:9}},line:4303},"275":{name:"(anonymous_275)",decl:{start:{line:4314,column:18},end:{line:4314,column:19}},loc:{start:{line:4314,column:29},end:{line:4316,column:9}},line:4314},"276":{name:"(anonymous_276)",decl:{start:{line:4325,column:16},end:{line:4325,column:17}},loc:{start:{line:4325,column:27},end:{line:4327,column:9}},line:4325},"277":{name:"(anonymous_277)",decl:{start:{line:4336,column:15},end:{line:4336,column:16}},loc:{start:{line:4336,column:26},end:{line:4338,column:9}},line:4336},"278":{name:"(anonymous_278)",decl:{start:{line:4347,column:17},end:{line:4347,column:18}},loc:{start:{line:4347,column:28},end:{line:4349,column:9}},line:4347},"279":{name:"(anonymous_279)",decl:{start:{line:4382,column:14},end:{line:4382,column:15}},loc:{start:{line:4382,column:39},end:{line:4391,column:9}},line:4382},"280":{name:"(anonymous_280)",decl:{start:{line:4401,column:13},end:{line:4401,column:14}},loc:{start:{line:4401,column:38},end:{line:4412,column:9}},line:4401},"281":{name:"(anonymous_281)",decl:{start:{line:4543,column:14},end:{line:4543,column:15}},loc:{start:{line:4543,column:40},end:{line:4555,column:9}},line:4543},"282":{name:"(anonymous_282)",decl:{start:{line:4568,column:28},end:{line:4568,column:29}},loc:{start:{line:4568,column:42},end:{line:4580,column:9}},line:4568},"283":{name:"(anonymous_283)",decl:{start:{line:4594,column:19},end:{line:4594,column:20}},loc:{start:{line:4594,column:80},end:{line:4627,column:9}},line:4594},"284":{name:"(anonymous_284)",decl:{start:{line:4642,column:24},end:{line:4642,column:25}},loc:{start:{line:4642,column:96},end:{line:4682,column:9}},line:4642},"285":{name:"(anonymous_285)",decl:{start:{line:4693,column:21},end:{line:4693,column:22}},loc:{start:{line:4693,column:48},end:{line:4716,column:9}},line:4693},"286":{name:"(anonymous_286)",decl:{start:{line:4737,column:26},end:{line:4737,column:27}},loc:{start:{line:4737,column:57},end:{line:4769,column:9}},line:4737},"287":{name:"(anonymous_287)",decl:{start:{line:4782,column:28},end:{line:4782,column:29}},loc:{start:{line:4782,column:88},end:{line:4801,column:9}},line:4782},"288":{name:"(anonymous_288)",decl:{start:{line:4813,column:30},end:{line:4813,column:31}},loc:{start:{line:4813,column:62},end:{line:4834,column:9}},line:4813},"289":{name:"(anonymous_289)",decl:{start:{line:4845,column:24},end:{line:4845,column:25}},loc:{start:{line:4845,column:44},end:{line:4867,column:9}},line:4845},"290":{name:"(anonymous_290)",decl:{start:{line:4882,column:29},end:{line:4882,column:30}},loc:{start:{line:4882,column:57},end:{line:4916,column:9}},line:4882},"291":{name:"(anonymous_291)",decl:{start:{line:4928,column:31},end:{line:4928,column:32}},loc:{start:{line:4928,column:88},end:{line:4946,column:9}},line:4928},"292":{name:"(anonymous_292)",decl:{start:{line:4957,column:33},end:{line:4957,column:34}},loc:{start:{line:4957,column:58},end:{line:4977,column:9}},line:4957},"293":{name:"(anonymous_293)",decl:{start:{line:4989,column:22},end:{line:4989,column:23}},loc:{start:{line:4989,column:64},end:{line:5059,column:9}},line:4989},"294":{name:"(anonymous_294)",decl:{start:{line:5068,column:22},end:{line:5068,column:23}},loc:{start:{line:5068,column:33},end:{line:5077,column:9}},line:5068},"295":{name:"(anonymous_295)",decl:{start:{line:5101,column:15},end:{line:5101,column:16}},loc:{start:{line:5101,column:34},end:{line:5125,column:9}},line:5101},"296":{name:"(anonymous_296)",decl:{start:{line:5112,column:110},end:{line:5112,column:111}},loc:{start:{line:5112,column:134},end:{line:5124,column:13}},line:5112},"297":{name:"(anonymous_297)",decl:{start:{line:5153,column:13},end:{line:5153,column:14}},loc:{start:{line:5153,column:38},end:{line:5168,column:9}},line:5153},"298":{name:"(anonymous_298)",decl:{start:{line:5160,column:23},end:{line:5160,column:24}},loc:{start:{line:5160,column:44},end:{line:5167,column:13}},line:5160},"299":{name:"(anonymous_299)",decl:{start:{line:5224,column:14},end:{line:5224,column:15}},loc:{start:{line:5224,column:47},end:{line:5270,column:9}},line:5224},"300":{name:"(anonymous_300)",decl:{start:{line:5279,column:22},end:{line:5279,column:23}},loc:{start:{line:5279,column:33},end:{line:5281,column:9}},line:5279},"301":{name:"(anonymous_301)",decl:{start:{line:5290,column:27},end:{line:5290,column:28}},loc:{start:{line:5290,column:38},end:{line:5292,column:9}},line:5290},"302":{name:"(anonymous_302)",decl:{start:{line:5302,column:20},end:{line:5302,column:21}},loc:{start:{line:5302,column:31},end:{line:5304,column:9}},line:5302},"303":{name:"(anonymous_303)",decl:{start:{line:5316,column:21},end:{line:5316,column:22}},loc:{start:{line:5316,column:36},end:{line:5318,column:9}},line:5316},"304":{name:"(anonymous_304)",decl:{start:{line:5330,column:19},end:{line:5330,column:20}},loc:{start:{line:5330,column:30},end:{line:5348,column:9}},line:5330},"305":{name:"(anonymous_305)",decl:{start:{line:5360,column:23},end:{line:5360,column:24}},loc:{start:{line:5360,column:34},end:{line:5362,column:9}},line:5360},"306":{name:"(anonymous_306)",decl:{start:{line:5373,column:26},end:{line:5373,column:27}},loc:{start:{line:5373,column:36},end:{line:5385,column:9}},line:5373},"307":{name:"(anonymous_307)",decl:{start:{line:5396,column:30},end:{line:5396,column:31}},loc:{start:{line:5396,column:41},end:{line:5398,column:9}},line:5396},"308":{name:"(anonymous_308)",decl:{start:{line:5409,column:18},end:{line:5409,column:19}},loc:{start:{line:5409,column:38},end:{line:5411,column:9}},line:5409},"309":{name:"(anonymous_309)",decl:{start:{line:5422,column:24},end:{line:5422,column:25}},loc:{start:{line:5422,column:35},end:{line:5424,column:9}},line:5422},"310":{name:"(anonymous_310)",decl:{start:{line:5452,column:36},end:{line:5452,column:37}},loc:{start:{line:5452,column:69},end:{line:5463,column:9}},line:5452},"311":{name:"(anonymous_311)",decl:{start:{line:5484,column:21},end:{line:5484,column:22}},loc:{start:{line:5484,column:61},end:{line:5489,column:9}},line:5484},"312":{name:"(anonymous_312)",decl:{start:{line:5500,column:16},end:{line:5500,column:17}},loc:{start:{line:5500,column:27},end:{line:5502,column:9}},line:5500},"313":{name:"(anonymous_313)",decl:{start:{line:5511,column:34},end:{line:5511,column:35}},loc:{start:{line:5511,column:45},end:{line:5514,column:9}},line:5511},"314":{name:"(anonymous_314)",decl:{start:{line:5532,column:14},end:{line:5532,column:15}},loc:{start:{line:5532,column:25},end:{line:5534,column:9}},line:5532},"315":{name:"(anonymous_315)",decl:{start:{line:5554,column:14},end:{line:5554,column:15}},loc:{start:{line:5554,column:56},end:{line:5591,column:9}},line:5554},"316":{name:"(anonymous_316)",decl:{start:{line:5600,column:23},end:{line:5600,column:24}},loc:{start:{line:5600,column:34},end:{line:5602,column:9}},line:5600},"317":{name:"(anonymous_317)",decl:{start:{line:5612,column:22},end:{line:5612,column:23}},loc:{start:{line:5612,column:37},end:{line:5619,column:9}},line:5612},"318":{name:"(anonymous_318)",decl:{start:{line:5628,column:19},end:{line:5628,column:20}},loc:{start:{line:5628,column:34},end:{line:5630,column:9}},line:5628},"319":{name:"(anonymous_319)",decl:{start:{line:5644,column:16},end:{line:5644,column:17}},loc:{start:{line:5644,column:42},end:{line:5678,column:9}},line:5644},"320":{name:"(anonymous_320)",decl:{start:{line:5649,column:35},end:{line:5649,column:36}},loc:{start:{line:5649,column:46},end:{line:5649,column:48}},line:5649},"321":{name:"(anonymous_321)",decl:{start:{line:5669,column:47},end:{line:5669,column:48}},loc:{start:{line:5669,column:71},end:{line:5677,column:13}},line:5669},"322":{name:"(anonymous_322)",decl:{start:{line:5696,column:14},end:{line:5696,column:15}},loc:{start:{line:5696,column:25},end:{line:5698,column:9}},line:5696},"323":{name:"(anonymous_323)",decl:{start:{line:5712,column:14},end:{line:5712,column:15}},loc:{start:{line:5712,column:43},end:{line:5716,column:9}},line:5712},"324":{name:"(anonymous_324)",decl:{start:{line:5730,column:16},end:{line:5730,column:17}},loc:{start:{line:5730,column:49},end:{line:5752,column:9}},line:5730},"325":{name:"(anonymous_325)",decl:{start:{line:5739,column:35},end:{line:5739,column:36}},loc:{start:{line:5739,column:45},end:{line:5739,column:47}},line:5739},"326":{name:"(anonymous_326)",decl:{start:{line:5743,column:84},end:{line:5743,column:85}},loc:{start:{line:5743,column:108},end:{line:5751,column:13}},line:5743},"327":{name:"(anonymous_327)",decl:{start:{line:5764,column:27},end:{line:5764,column:28}},loc:{start:{line:5764,column:43},end:{line:5767,column:9}},line:5764},"328":{name:"(anonymous_328)",decl:{start:{line:5773,column:14},end:{line:5773,column:15}},loc:{start:{line:5773,column:41},end:{line:5779,column:9}},line:5773},"329":{name:"(anonymous_329)",decl:{start:{line:5782,column:14},end:{line:5782,column:15}},loc:{start:{line:5782,column:33},end:{line:5801,column:9}},line:5782},"330":{name:"(anonymous_330)",decl:{start:{line:5783,column:35},end:{line:5783,column:36}},loc:{start:{line:5783,column:46},end:{line:5783,column:48}},line:5783},"331":{name:"(anonymous_331)",decl:{start:{line:5790,column:42},end:{line:5790,column:43}},loc:{start:{line:5790,column:65},end:{line:5800,column:13}},line:5790}},branchMap:{"0":{loc:{start:{line:26,column:15},end:{line:26,column:30}},type:"binary-expr",locations:[{start:{line:26,column:15},end:{line:26,column:22}},{start:{line:26,column:26},end:{line:26,column:30}}],line:26},"1":{loc:{start:{line:397,column:12},end:{line:400,column:13}},type:"if",locations:[{start:{line:397,column:12},end:{line:400,column:13}},{start:{line:397,column:12},end:{line:400,column:13}}],line:397},"2":{loc:{start:{line:397,column:16},end:{line:397,column:56}},type:"binary-expr",locations:[{start:{line:397,column:16},end:{line:397,column:25}},{start:{line:397,column:29},end:{line:397,column:56}}],line:397},"3":{loc:{start:{line:420,column:12},end:{line:423,column:13}},type:"if",locations:[{start:{line:420,column:12},end:{line:423,column:13}},{start:{line:420,column:12},end:{line:423,column:13}}],line:420},"4":{loc:{start:{line:420,column:16},end:{line:420,column:56}},type:"binary-expr",locations:[{start:{line:420,column:16},end:{line:420,column:25}},{start:{line:420,column:29},end:{line:420,column:56}}],line:420},"5":{loc:{start:{line:453,column:12},end:{line:456,column:13}},type:"if",locations:[{start:{line:453,column:12},end:{line:456,column:13}},{start:{line:453,column:12},end:{line:456,column:13}}],line:453},"6":{loc:{start:{line:453,column:16},end:{line:453,column:56}},type:"binary-expr",locations:[{start:{line:453,column:16},end:{line:453,column:25}},{start:{line:453,column:29},end:{line:453,column:56}}],line:453},"7":{loc:{start:{line:478,column:23},end:{line:478,column:48}},type:"binary-expr",locations:[{start:{line:478,column:23},end:{line:478,column:31}},{start:{line:478,column:35},end:{line:478,column:48}}],line:478},"8":{loc:{start:{line:482,column:16},end:{line:496,column:17}},type:"if",locations:[{start:{line:482,column:16},end:{line:496,column:17}},{start:{line:482,column:16},end:{line:496,column:17}}],line:482},"9":{loc:{start:{line:489,column:24},end:{line:494,column:25}},type:"if",locations:[{start:{line:489,column:24},end:{line:494,column:25}},{start:{line:489,column:24},end:{line:494,column:25}}],line:489},"10":{loc:{start:{line:517,column:23},end:{line:517,column:48}},type:"binary-expr",locations:[{start:{line:517,column:23},end:{line:517,column:31}},{start:{line:517,column:35},end:{line:517,column:48}}],line:517},"11":{loc:{start:{line:544,column:12},end:{line:547,column:13}},type:"if",locations:[{start:{line:544,column:12},end:{line:547,column:13}},{start:{line:544,column:12},end:{line:547,column:13}}],line:544},"12":{loc:{start:{line:544,column:16},end:{line:544,column:53}},type:"binary-expr",locations:[{start:{line:544,column:16},end:{line:544,column:25}},{start:{line:544,column:29},end:{line:544,column:53}}],line:544},"13":{loc:{start:{line:549,column:23},end:{line:549,column:48}},type:"binary-expr",locations:[{start:{line:549,column:23},end:{line:549,column:31}},{start:{line:549,column:35},end:{line:549,column:48}}],line:549},"14":{loc:{start:{line:550,column:21},end:{line:550,column:33}},type:"binary-expr",locations:[{start:{line:550,column:21},end:{line:550,column:27}},{start:{line:550,column:31},end:{line:550,column:33}}],line:550},"15":{loc:{start:{line:555,column:16},end:{line:560,column:17}},type:"if",locations:[{start:{line:555,column:16},end:{line:560,column:17}},{start:{line:555,column:16},end:{line:560,column:17}}],line:555},"16":{loc:{start:{line:581,column:12},end:{line:584,column:13}},type:"if",locations:[{start:{line:581,column:12},end:{line:584,column:13}},{start:{line:581,column:12},end:{line:584,column:13}}],line:581},"17":{loc:{start:{line:581,column:16},end:{line:581,column:52}},type:"binary-expr",locations:[{start:{line:581,column:16},end:{line:581,column:25}},{start:{line:581,column:29},end:{line:581,column:52}}],line:581},"18":{loc:{start:{line:586,column:23},end:{line:586,column:48}},type:"binary-expr",locations:[{start:{line:586,column:23},end:{line:586,column:31}},{start:{line:586,column:35},end:{line:586,column:48}}],line:586},"19":{loc:{start:{line:588,column:23},end:{line:588,column:34}},type:"binary-expr",locations:[{start:{line:588,column:23},end:{line:588,column:28}},{start:{line:588,column:32},end:{line:588,column:34}}],line:588},"20":{loc:{start:{line:593,column:16},end:{line:599,column:17}},type:"if",locations:[{start:{line:593,column:16},end:{line:599,column:17}},{start:{line:593,column:16},end:{line:599,column:17}}],line:593},"21":{loc:{start:{line:597,column:35},end:{line:597,column:54}},type:"binary-expr",locations:[{start:{line:597,column:35},end:{line:597,column:48}},{start:{line:597,column:52},end:{line:597,column:54}}],line:597},"22":{loc:{start:{line:598,column:35},end:{line:598,column:48}},type:"binary-expr",locations:[{start:{line:598,column:35},end:{line:598,column:42}},{start:{line:598,column:46},end:{line:598,column:48}}],line:598},"23":{loc:{start:{line:625,column:12},end:{line:628,column:13}},type:"if",locations:[{start:{line:625,column:12},end:{line:628,column:13}},{start:{line:625,column:12},end:{line:628,column:13}}],line:625},"24":{loc:{start:{line:625,column:16},end:{line:625,column:53}},type:"binary-expr",locations:[{start:{line:625,column:16},end:{line:625,column:25}},{start:{line:625,column:29},end:{line:625,column:53}}],line:625},"25":{loc:{start:{line:630,column:23},end:{line:630,column:48}},type:"binary-expr",locations:[{start:{line:630,column:23},end:{line:630,column:31}},{start:{line:630,column:35},end:{line:630,column:48}}],line:630},"26":{loc:{start:{line:631,column:21},end:{line:631,column:33}},type:"binary-expr",locations:[{start:{line:631,column:21},end:{line:631,column:27}},{start:{line:631,column:31},end:{line:631,column:33}}],line:631},"27":{loc:{start:{line:634,column:12},end:{line:636,column:13}},type:"if",locations:[{start:{line:634,column:12},end:{line:636,column:13}},{start:{line:634,column:12},end:{line:636,column:13}}],line:634},"28":{loc:{start:{line:653,column:20},end:{line:658,column:21}},type:"if",locations:[{start:{line:653,column:20},end:{line:658,column:21}},{start:{line:653,column:20},end:{line:658,column:21}}],line:653},"29":{loc:{start:{line:686,column:12},end:{line:688,column:13}},type:"if",locations:[{start:{line:686,column:12},end:{line:688,column:13}},{start:{line:686,column:12},end:{line:688,column:13}}],line:686},"30":{loc:{start:{line:690,column:12},end:{line:692,column:13}},type:"if",locations:[{start:{line:690,column:12},end:{line:692,column:13}},{start:{line:690,column:12},end:{line:692,column:13}}],line:690},"31":{loc:{start:{line:726,column:12},end:{line:728,column:13}},type:"if",locations:[{start:{line:726,column:12},end:{line:728,column:13}},{start:{line:726,column:12},end:{line:728,column:13}}],line:726},"32":{loc:{start:{line:742,column:12},end:{line:744,column:13}},type:"if",locations:[{start:{line:742,column:12},end:{line:744,column:13}},{start:{line:742,column:12},end:{line:744,column:13}}],line:742},"33":{loc:{start:{line:773,column:12},end:{line:775,column:13}},type:"if",locations:[{start:{line:773,column:12},end:{line:775,column:13}},{start:{line:773,column:12},end:{line:775,column:13}}],line:773},"34":{loc:{start:{line:805,column:12},end:{line:807,column:13}},type:"if",locations:[{start:{line:805,column:12},end:{line:807,column:13}},{start:{line:805,column:12},end:{line:807,column:13}}],line:805},"35":{loc:{start:{line:878,column:31},end:{line:878,column:47}},type:"binary-expr",locations:[{start:{line:878,column:31},end:{line:878,column:41}},{start:{line:878,column:45},end:{line:878,column:47}}],line:878},"36":{loc:{start:{line:879,column:26},end:{line:879,column:42}},type:"binary-expr",locations:[{start:{line:879,column:26},end:{line:879,column:36}},{start:{line:879,column:40},end:{line:879,column:42}}],line:879},"37":{loc:{start:{line:988,column:25},end:{line:988,column:79}},type:"cond-expr",locations:[{start:{line:988,column:53},end:{line:988,column:66}},{start:{line:988,column:69},end:{line:988,column:79}}],line:988},"38":{loc:{start:{line:992,column:25},end:{line:997,column:13}},type:"binary-expr",locations:[{start:{line:992,column:25},end:{line:992,column:35}},{start:{line:992,column:39},end:{line:997,column:13}}],line:992},"39":{loc:{start:{line:1002,column:31},end:{line:1002,column:57}},type:"binary-expr",locations:[{start:{line:1002,column:31},end:{line:1002,column:49}},{start:{line:1002,column:55},end:{line:1002,column:57}}],line:1002},"40":{loc:{start:{line:1003,column:31},end:{line:1003,column:73}},type:"binary-expr",locations:[{start:{line:1003,column:31},end:{line:1003,column:48}},{start:{line:1003,column:55},end:{line:1003,column:67}},{start:{line:1003,column:71},end:{line:1003,column:73}}],line:1003},"41":{loc:{start:{line:1004,column:31},end:{line:1004,column:57}},type:"binary-expr",locations:[{start:{line:1004,column:31},end:{line:1004,column:45}},{start:{line:1004,column:55},end:{line:1004,column:57}}],line:1004},"42":{loc:{start:{line:1005,column:31},end:{line:1005,column:57}},type:"binary-expr",locations:[{start:{line:1005,column:31},end:{line:1005,column:47}},{start:{line:1005,column:55},end:{line:1005,column:57}}],line:1005},"43":{loc:{start:{line:1006,column:31},end:{line:1006,column:59}},type:"binary-expr",locations:[{start:{line:1006,column:31},end:{line:1006,column:48}},{start:{line:1006,column:55},end:{line:1006,column:59}}],line:1006},"44":{loc:{start:{line:1007,column:31},end:{line:1007,column:59}},type:"binary-expr",locations:[{start:{line:1007,column:31},end:{line:1007,column:49}},{start:{line:1007,column:55},end:{line:1007,column:59}}],line:1007},"45":{loc:{start:{line:1008,column:31},end:{line:1008,column:59}},type:"binary-expr",locations:[{start:{line:1008,column:31},end:{line:1008,column:51}},{start:{line:1008,column:55},end:{line:1008,column:59}}],line:1008},"46":{loc:{start:{line:1096,column:12},end:{line:1099,column:13}},type:"if",locations:[{start:{line:1096,column:12},end:{line:1099,column:13}},{start:{line:1096,column:12},end:{line:1099,column:13}}],line:1096},"47":{loc:{start:{line:1096,column:16},end:{line:1096,column:54}},type:"binary-expr",locations:[{start:{line:1096,column:16},end:{line:1096,column:25}},{start:{line:1096,column:29},end:{line:1096,column:54}}],line:1096},"48":{loc:{start:{line:1100,column:23},end:{line:1100,column:48}},type:"binary-expr",locations:[{start:{line:1100,column:23},end:{line:1100,column:31}},{start:{line:1100,column:35},end:{line:1100,column:48}}],line:1100},"49":{loc:{start:{line:1102,column:22},end:{line:1102,column:35}},type:"binary-expr",locations:[{start:{line:1102,column:22},end:{line:1102,column:29}},{start:{line:1102,column:33},end:{line:1102,column:35}}],line:1102},"50":{loc:{start:{line:1106,column:16},end:{line:1112,column:17}},type:"if",locations:[{start:{line:1106,column:16},end:{line:1112,column:17}},{start:{line:1106,column:16},end:{line:1112,column:17}}],line:1106},"51":{loc:{start:{line:1110,column:31},end:{line:1110,column:73}},type:"cond-expr",locations:[{start:{line:1110,column:47},end:{line:1110,column:66}},{start:{line:1110,column:69},end:{line:1110,column:73}}],line:1110},"52":{loc:{start:{line:1125,column:23},end:{line:1125,column:48}},type:"binary-expr",locations:[{start:{line:1125,column:23},end:{line:1125,column:31}},{start:{line:1125,column:35},end:{line:1125,column:48}}],line:1125},"53":{loc:{start:{line:1143,column:23},end:{line:1143,column:48}},type:"binary-expr",locations:[{start:{line:1143,column:23},end:{line:1143,column:31}},{start:{line:1143,column:35},end:{line:1143,column:48}}],line:1143},"54":{loc:{start:{line:1145,column:12},end:{line:1147,column:13}},type:"if",locations:[{start:{line:1145,column:12},end:{line:1147,column:13}},{start:{line:1145,column:12},end:{line:1147,column:13}}],line:1145},"55":{loc:{start:{line:1151,column:16},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1151,column:16},end:{line:1167,column:17}},{start:{line:1151,column:16},end:{line:1167,column:17}}],line:1151},"56":{loc:{start:{line:1151,column:20},end:{line:1151,column:47}},type:"binary-expr",locations:[{start:{line:1151,column:20},end:{line:1151,column:24}},{start:{line:1151,column:28},end:{line:1151,column:47}}],line:1151},"57":{loc:{start:{line:1155,column:21},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1155,column:21},end:{line:1167,column:17}},{start:{line:1155,column:21},end:{line:1167,column:17}}],line:1155},"58":{loc:{start:{line:1155,column:25},end:{line:1155,column:51}},type:"binary-expr",locations:[{start:{line:1155,column:25},end:{line:1155,column:29}},{start:{line:1155,column:33},end:{line:1155,column:51}}],line:1155},"59":{loc:{start:{line:1157,column:24},end:{line:1162,column:25}},type:"if",locations:[{start:{line:1157,column:24},end:{line:1162,column:25}},{start:{line:1157,column:24},end:{line:1162,column:25}}],line:1157},"60":{loc:{start:{line:1182,column:23},end:{line:1182,column:48}},type:"binary-expr",locations:[{start:{line:1182,column:23},end:{line:1182,column:31}},{start:{line:1182,column:35},end:{line:1182,column:48}}],line:1182},"61":{loc:{start:{line:1186,column:16},end:{line:1191,column:17}},type:"if",locations:[{start:{line:1186,column:16},end:{line:1191,column:17}},{start:{line:1186,column:16},end:{line:1191,column:17}}],line:1186},"62":{loc:{start:{line:1204,column:23},end:{line:1204,column:48}},type:"binary-expr",locations:[{start:{line:1204,column:23},end:{line:1204,column:31}},{start:{line:1204,column:35},end:{line:1204,column:48}}],line:1204},"63":{loc:{start:{line:1208,column:16},end:{line:1213,column:17}},type:"if",locations:[{start:{line:1208,column:16},end:{line:1213,column:17}},{start:{line:1208,column:16},end:{line:1213,column:17}}],line:1208},"64":{loc:{start:{line:1226,column:23},end:{line:1226,column:48}},type:"binary-expr",locations:[{start:{line:1226,column:23},end:{line:1226,column:31}},{start:{line:1226,column:35},end:{line:1226,column:48}}],line:1226},"65":{loc:{start:{line:1230,column:16},end:{line:1235,column:17}},type:"if",locations:[{start:{line:1230,column:16},end:{line:1235,column:17}},{start:{line:1230,column:16},end:{line:1235,column:17}}],line:1230},"66":{loc:{start:{line:1318,column:37},end:{line:1318,column:59}},type:"binary-expr",locations:[{start:{line:1318,column:37},end:{line:1318,column:53}},{start:{line:1318,column:57},end:{line:1318,column:59}}],line:1318},"67":{loc:{start:{line:1325,column:16},end:{line:1330,column:17}},type:"if",locations:[{start:{line:1325,column:16},end:{line:1330,column:17}},{start:{line:1325,column:16},end:{line:1330,column:17}}],line:1325},"68":{loc:{start:{line:1334,column:35},end:{line:1334,column:61}},type:"binary-expr",locations:[{start:{line:1334,column:35},end:{line:1334,column:52}},{start:{line:1334,column:59},end:{line:1334,column:61}}],line:1334},"69":{loc:{start:{line:1335,column:35},end:{line:1335,column:61}},type:"binary-expr",locations:[{start:{line:1335,column:35},end:{line:1335,column:51}},{start:{line:1335,column:59},end:{line:1335,column:61}}],line:1335},"70":{loc:{start:{line:1336,column:35},end:{line:1336,column:63}},type:"binary-expr",locations:[{start:{line:1336,column:35},end:{line:1336,column:53}},{start:{line:1336,column:59},end:{line:1336,column:63}}],line:1336},"71":{loc:{start:{line:1389,column:12},end:{line:1392,column:13}},type:"if",locations:[{start:{line:1389,column:12},end:{line:1392,column:13}},{start:{line:1389,column:12},end:{line:1392,column:13}}],line:1389},"72":{loc:{start:{line:1389,column:16},end:{line:1389,column:54}},type:"binary-expr",locations:[{start:{line:1389,column:16},end:{line:1389,column:25}},{start:{line:1389,column:29},end:{line:1389,column:54}}],line:1389},"73":{loc:{start:{line:1393,column:23},end:{line:1393,column:48}},type:"binary-expr",locations:[{start:{line:1393,column:23},end:{line:1393,column:31}},{start:{line:1393,column:35},end:{line:1393,column:48}}],line:1393},"74":{loc:{start:{line:1395,column:22},end:{line:1395,column:35}},type:"binary-expr",locations:[{start:{line:1395,column:22},end:{line:1395,column:29}},{start:{line:1395,column:33},end:{line:1395,column:35}}],line:1395},"75":{loc:{start:{line:1396,column:12},end:{line:1398,column:13}},type:"if",locations:[{start:{line:1396,column:12},end:{line:1398,column:13}},{start:{line:1396,column:12},end:{line:1398,column:13}}],line:1396},"76":{loc:{start:{line:1402,column:16},end:{line:1408,column:17}},type:"if",locations:[{start:{line:1402,column:16},end:{line:1408,column:17}},{start:{line:1402,column:16},end:{line:1408,column:17}}],line:1402},"77":{loc:{start:{line:1415,column:22},end:{line:1415,column:35}},type:"binary-expr",locations:[{start:{line:1415,column:22},end:{line:1415,column:29}},{start:{line:1415,column:33},end:{line:1415,column:35}}],line:1415},"78":{loc:{start:{line:1416,column:12},end:{line:1418,column:13}},type:"if",locations:[{start:{line:1416,column:12},end:{line:1418,column:13}},{start:{line:1416,column:12},end:{line:1418,column:13}}],line:1416},"79":{loc:{start:{line:1449,column:12},end:{line:1451,column:13}},type:"if",locations:[{start:{line:1449,column:12},end:{line:1451,column:13}},{start:{line:1449,column:12},end:{line:1451,column:13}}],line:1449},"80":{loc:{start:{line:1453,column:12},end:{line:1455,column:13}},type:"if",locations:[{start:{line:1453,column:12},end:{line:1455,column:13}},{start:{line:1453,column:12},end:{line:1455,column:13}}],line:1453},"81":{loc:{start:{line:1457,column:12},end:{line:1459,column:13}},type:"if",locations:[{start:{line:1457,column:12},end:{line:1459,column:13}},{start:{line:1457,column:12},end:{line:1459,column:13}}],line:1457},"82":{loc:{start:{line:1457,column:16},end:{line:1457,column:79}},type:"binary-expr",locations:[{start:{line:1457,column:16},end:{line:1457,column:25}},{start:{line:1457,column:30},end:{line:1457,column:51}},{start:{line:1457,column:55},end:{line:1457,column:78}}],line:1457},"83":{loc:{start:{line:1462,column:12},end:{line:1504,column:13}},type:"if",locations:[{start:{line:1462,column:12},end:{line:1504,column:13}},{start:{line:1462,column:12},end:{line:1504,column:13}}],line:1462},"84":{loc:{start:{line:1465,column:16},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1465,column:16},end:{line:1500,column:17}},{start:{line:1465,column:16},end:{line:1500,column:17}}],line:1465},"85":{loc:{start:{line:1465,column:20},end:{line:1465,column:55}},type:"binary-expr",locations:[{start:{line:1465,column:20},end:{line:1465,column:41}},{start:{line:1465,column:45},end:{line:1465,column:55}}],line:1465},"86":{loc:{start:{line:1472,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1472,column:21},end:{line:1500,column:17}},{start:{line:1472,column:21},end:{line:1500,column:17}}],line:1472},"87":{loc:{start:{line:1472,column:25},end:{line:1472,column:59}},type:"binary-expr",locations:[{start:{line:1472,column:25},end:{line:1472,column:46}},{start:{line:1472,column:50},end:{line:1472,column:59}}],line:1472},"88":{loc:{start:{line:1477,column:20},end:{line:1482,column:21}},type:"if",locations:[{start:{line:1477,column:20},end:{line:1482,column:21}},{start:{line:1477,column:20},end:{line:1482,column:21}}],line:1477},"89":{loc:{start:{line:1484,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1484,column:21},end:{line:1500,column:17}},{start:{line:1484,column:21},end:{line:1500,column:17}}],line:1484},"90":{loc:{start:{line:1484,column:25},end:{line:1484,column:58}},type:"binary-expr",locations:[{start:{line:1484,column:25},end:{line:1484,column:44}},{start:{line:1484,column:48},end:{line:1484,column:58}}],line:1484},"91":{loc:{start:{line:1496,column:24},end:{line:1498,column:25}},type:"if",locations:[{start:{line:1496,column:24},end:{line:1498,column:25}},{start:{line:1496,column:24},end:{line:1498,column:25}}],line:1496},"92":{loc:{start:{line:1525,column:23},end:{line:1525,column:48}},type:"binary-expr",locations:[{start:{line:1525,column:23},end:{line:1525,column:31}},{start:{line:1525,column:35},end:{line:1525,column:48}}],line:1525},"93":{loc:{start:{line:1528,column:16},end:{line:1553,column:17}},type:"if",locations:[{start:{line:1528,column:16},end:{line:1553,column:17}},{start:{line:1528,column:16},end:{line:1553,column:17}}],line:1528},"94":{loc:{start:{line:1533,column:20},end:{line:1535,column:21}},type:"if",locations:[{start:{line:1533,column:20},end:{line:1535,column:21}},{start:{line:1533,column:20},end:{line:1535,column:21}}],line:1533},"95":{loc:{start:{line:1540,column:20},end:{line:1552,column:21}},type:"if",locations:[{start:{line:1540,column:20},end:{line:1552,column:21}},{start:{line:1540,column:20},end:{line:1552,column:21}}],line:1540},"96":{loc:{start:{line:1542,column:28},end:{line:1547,column:29}},type:"if",locations:[{start:{line:1542,column:28},end:{line:1547,column:29}},{start:{line:1542,column:28},end:{line:1547,column:29}}],line:1542},"97":{loc:{start:{line:1575,column:23},end:{line:1575,column:48}},type:"binary-expr",locations:[{start:{line:1575,column:23},end:{line:1575,column:31}},{start:{line:1575,column:35},end:{line:1575,column:48}}],line:1575},"98":{loc:{start:{line:1637,column:19},end:{line:1637,column:77}},type:"binary-expr",locations:[{start:{line:1637,column:19},end:{line:1637,column:72}},{start:{line:1637,column:76},end:{line:1637,column:77}}],line:1637},"99":{loc:{start:{line:1657,column:23},end:{line:1657,column:48}},type:"binary-expr",locations:[{start:{line:1657,column:23},end:{line:1657,column:31}},{start:{line:1657,column:35},end:{line:1657,column:48}}],line:1657},"100":{loc:{start:{line:1689,column:12},end:{line:1692,column:13}},type:"if",locations:[{start:{line:1689,column:12},end:{line:1692,column:13}},{start:{line:1689,column:12},end:{line:1692,column:13}}],line:1689},"101":{loc:{start:{line:1689,column:16},end:{line:1689,column:54}},type:"binary-expr",locations:[{start:{line:1689,column:16},end:{line:1689,column:25}},{start:{line:1689,column:29},end:{line:1689,column:54}}],line:1689},"102":{loc:{start:{line:1694,column:23},end:{line:1694,column:48}},type:"binary-expr",locations:[{start:{line:1694,column:23},end:{line:1694,column:31}},{start:{line:1694,column:35},end:{line:1694,column:48}}],line:1694},"103":{loc:{start:{line:1695,column:22},end:{line:1695,column:35}},type:"binary-expr",locations:[{start:{line:1695,column:22},end:{line:1695,column:29}},{start:{line:1695,column:33},end:{line:1695,column:35}}],line:1695},"104":{loc:{start:{line:1699,column:16},end:{line:1702,column:17}},type:"if",locations:[{start:{line:1699,column:16},end:{line:1702,column:17}},{start:{line:1699,column:16},end:{line:1702,column:17}}],line:1699},"105":{loc:{start:{line:1749,column:12},end:{line:1752,column:13}},type:"if",locations:[{start:{line:1749,column:12},end:{line:1752,column:13}},{start:{line:1749,column:12},end:{line:1752,column:13}}],line:1749},"106":{loc:{start:{line:1749,column:16},end:{line:1749,column:54}},type:"binary-expr",locations:[{start:{line:1749,column:16},end:{line:1749,column:25}},{start:{line:1749,column:29},end:{line:1749,column:54}}],line:1749},"107":{loc:{start:{line:1754,column:23},end:{line:1754,column:48}},type:"binary-expr",locations:[{start:{line:1754,column:23},end:{line:1754,column:31}},{start:{line:1754,column:35},end:{line:1754,column:48}}],line:1754},"108":{loc:{start:{line:1755,column:22},end:{line:1755,column:35}},type:"binary-expr",locations:[{start:{line:1755,column:22},end:{line:1755,column:29}},{start:{line:1755,column:33},end:{line:1755,column:35}}],line:1755},"109":{loc:{start:{line:1759,column:16},end:{line:1762,column:17}},type:"if",locations:[{start:{line:1759,column:16},end:{line:1762,column:17}},{start:{line:1759,column:16},end:{line:1762,column:17}}],line:1759},"110":{loc:{start:{line:1765,column:27},end:{line:1765,column:52}},type:"binary-expr",locations:[{start:{line:1765,column:27},end:{line:1765,column:46}},{start:{line:1765,column:50},end:{line:1765,column:52}}],line:1765},"111":{loc:{start:{line:1795,column:23},end:{line:1795,column:48}},type:"binary-expr",locations:[{start:{line:1795,column:23},end:{line:1795,column:31}},{start:{line:1795,column:35},end:{line:1795,column:48}}],line:1795},"112":{loc:{start:{line:1816,column:21},end:{line:1816,column:33}},type:"binary-expr",locations:[{start:{line:1816,column:21},end:{line:1816,column:27}},{start:{line:1816,column:31},end:{line:1816,column:33}}],line:1816},"113":{loc:{start:{line:1818,column:12},end:{line:1841,column:13}},type:"if",locations:[{start:{line:1818,column:12},end:{line:1841,column:13}},{start:{line:1818,column:12},end:{line:1841,column:13}}],line:1818},"114":{loc:{start:{line:1821,column:20},end:{line:1834,column:21}},type:"if",locations:[{start:{line:1821,column:20},end:{line:1834,column:21}},{start:{line:1821,column:20},end:{line:1834,column:21}}],line:1821},"115":{loc:{start:{line:1827,column:28},end:{line:1832,column:29}},type:"if",locations:[{start:{line:1827,column:28},end:{line:1832,column:29}},{start:{line:1827,column:28},end:{line:1832,column:29}}],line:1827},"116":{loc:{start:{line:2021,column:19},end:{line:2021,column:50}},type:"binary-expr",locations:[{start:{line:2021,column:19},end:{line:2021,column:44}},{start:{line:2021,column:48},end:{line:2021,column:50}}],line:2021},"117":{loc:{start:{line:2031,column:19},end:{line:2031,column:55}},type:"binary-expr",locations:[{start:{line:2031,column:19},end:{line:2031,column:47}},{start:{line:2031,column:51},end:{line:2031,column:55}}],line:2031},"118":{loc:{start:{line:2057,column:19},end:{line:2057,column:69}},type:"binary-expr",locations:[{start:{line:2057,column:19},end:{line:2057,column:61}},{start:{line:2057,column:65},end:{line:2057,column:69}}],line:2057},"119":{loc:{start:{line:2067,column:19},end:{line:2067,column:61}},type:"binary-expr",locations:[{start:{line:2067,column:19},end:{line:2067,column:53}},{start:{line:2067,column:57},end:{line:2067,column:61}}],line:2067},"120":{loc:{start:{line:2078,column:19},end:{line:2078,column:65}},type:"binary-expr",locations:[{start:{line:2078,column:19},end:{line:2078,column:59}},{start:{line:2078,column:63},end:{line:2078,column:65}}],line:2078},"121":{loc:{start:{line:2088,column:19},end:{line:2088,column:48}},type:"binary-expr",locations:[{start:{line:2088,column:19},end:{line:2088,column:40}},{start:{line:2088,column:44},end:{line:2088,column:48}}],line:2088},"122":{loc:{start:{line:2098,column:19},end:{line:2098,column:57}},type:"binary-expr",locations:[{start:{line:2098,column:19},end:{line:2098,column:49}},{start:{line:2098,column:53},end:{line:2098,column:57}}],line:2098},"123":{loc:{start:{line:2110,column:19},end:{line:2110,column:66}},type:"binary-expr",locations:[{start:{line:2110,column:19},end:{line:2110,column:58}},{start:{line:2110,column:62},end:{line:2110,column:66}}],line:2110},"124":{loc:{start:{line:2122,column:19},end:{line:2122,column:73}},type:"binary-expr",locations:[{start:{line:2122,column:19},end:{line:2122,column:67}},{start:{line:2122,column:71},end:{line:2122,column:73}}],line:2122},"125":{loc:{start:{line:2173,column:19},end:{line:2173,column:77}},type:"binary-expr",locations:[{start:{line:2173,column:19},end:{line:2173,column:72}},{start:{line:2173,column:76},end:{line:2173,column:77}}],line:2173},"126":{loc:{start:{line:2194,column:12},end:{line:2197,column:13}},type:"if",locations:[{start:{line:2194,column:12},end:{line:2197,column:13}},{start:{line:2194,column:12},end:{line:2197,column:13}}],line:2194},"127":{loc:{start:{line:2194,column:16},end:{line:2194,column:54}},type:"binary-expr",locations:[{start:{line:2194,column:16},end:{line:2194,column:25}},{start:{line:2194,column:29},end:{line:2194,column:54}}],line:2194},"128":{loc:{start:{line:2199,column:23},end:{line:2199,column:48}},type:"binary-expr",locations:[{start:{line:2199,column:23},end:{line:2199,column:31}},{start:{line:2199,column:35},end:{line:2199,column:48}}],line:2199},"129":{loc:{start:{line:2200,column:22},end:{line:2200,column:35}},type:"binary-expr",locations:[{start:{line:2200,column:22},end:{line:2200,column:29}},{start:{line:2200,column:33},end:{line:2200,column:35}}],line:2200},"130":{loc:{start:{line:2204,column:16},end:{line:2207,column:17}},type:"if",locations:[{start:{line:2204,column:16},end:{line:2207,column:17}},{start:{line:2204,column:16},end:{line:2207,column:17}}],line:2204},"131":{loc:{start:{line:2210,column:27},end:{line:2210,column:52}},type:"binary-expr",locations:[{start:{line:2210,column:27},end:{line:2210,column:46}},{start:{line:2210,column:50},end:{line:2210,column:52}}],line:2210},"132":{loc:{start:{line:2368,column:23},end:{line:2368,column:48}},type:"binary-expr",locations:[{start:{line:2368,column:23},end:{line:2368,column:31}},{start:{line:2368,column:35},end:{line:2368,column:48}}],line:2368},"133":{loc:{start:{line:2372,column:16},end:{line:2377,column:17}},type:"if",locations:[{start:{line:2372,column:16},end:{line:2377,column:17}},{start:{line:2372,column:16},end:{line:2377,column:17}}],line:2372},"134":{loc:{start:{line:2397,column:23},end:{line:2397,column:48}},type:"binary-expr",locations:[{start:{line:2397,column:23},end:{line:2397,column:31}},{start:{line:2397,column:35},end:{line:2397,column:48}}],line:2397},"135":{loc:{start:{line:2401,column:16},end:{line:2406,column:17}},type:"if",locations:[{start:{line:2401,column:16},end:{line:2406,column:17}},{start:{line:2401,column:16},end:{line:2406,column:17}}],line:2401},"136":{loc:{start:{line:2593,column:23},end:{line:2593,column:48}},type:"binary-expr",locations:[{start:{line:2593,column:23},end:{line:2593,column:31}},{start:{line:2593,column:35},end:{line:2593,column:48}}],line:2593},"137":{loc:{start:{line:2597,column:16},end:{line:2613,column:17}},type:"if",locations:[{start:{line:2597,column:16},end:{line:2613,column:17}},{start:{line:2597,column:16},end:{line:2613,column:17}}],line:2597},"138":{loc:{start:{line:2606,column:24},end:{line:2611,column:25}},type:"if",locations:[{start:{line:2606,column:24},end:{line:2611,column:25}},{start:{line:2606,column:24},end:{line:2611,column:25}}],line:2606},"139":{loc:{start:{line:2767,column:12},end:{line:2770,column:13}},type:"if",locations:[{start:{line:2767,column:12},end:{line:2770,column:13}},{start:{line:2767,column:12},end:{line:2770,column:13}}],line:2767},"140":{loc:{start:{line:2767,column:16},end:{line:2767,column:53}},type:"binary-expr",locations:[{start:{line:2767,column:16},end:{line:2767,column:25}},{start:{line:2767,column:29},end:{line:2767,column:53}}],line:2767},"141":{loc:{start:{line:2772,column:23},end:{line:2772,column:48}},type:"binary-expr",locations:[{start:{line:2772,column:23},end:{line:2772,column:31}},{start:{line:2772,column:35},end:{line:2772,column:48}}],line:2772},"142":{loc:{start:{line:2773,column:21},end:{line:2773,column:33}},type:"binary-expr",locations:[{start:{line:2773,column:21},end:{line:2773,column:27}},{start:{line:2773,column:31},end:{line:2773,column:33}}],line:2773},"143":{loc:{start:{line:2785,column:12},end:{line:2790,column:13}},type:"if",locations:[{start:{line:2785,column:12},end:{line:2790,column:13}},{start:{line:2785,column:12},end:{line:2790,column:13}}],line:2785},"144":{loc:{start:{line:2862,column:12},end:{line:2866,column:13}},type:"if",locations:[{start:{line:2862,column:12},end:{line:2866,column:13}},{start:{line:2862,column:12},end:{line:2866,column:13}}],line:2862},"145":{loc:{start:{line:2862,column:16},end:{line:2862,column:77}},type:"binary-expr",locations:[{start:{line:2862,column:16},end:{line:2862,column:36}},{start:{line:2862,column:40},end:{line:2862,column:64}},{start:{line:2862,column:68},end:{line:2862,column:77}}],line:2862},"146":{loc:{start:{line:2868,column:21},end:{line:2868,column:33}},type:"binary-expr",locations:[{start:{line:2868,column:21},end:{line:2868,column:27}},{start:{line:2868,column:31},end:{line:2868,column:33}}],line:2868},"147":{loc:{start:{line:2890,column:23},end:{line:2890,column:67}},type:"cond-expr",locations:[{start:{line:2890,column:49},end:{line:2890,column:55}},{start:{line:2890,column:58},end:{line:2890,column:67}}],line:2890},"148":{loc:{start:{line:3001,column:12},end:{line:3005,column:13}},type:"if",locations:[{start:{line:3001,column:12},end:{line:3005,column:13}},{start:{line:3001,column:12},end:{line:3005,column:13}}],line:3001},"149":{loc:{start:{line:3001,column:16},end:{line:3001,column:83}},type:"binary-expr",locations:[{start:{line:3001,column:16},end:{line:3001,column:42}},{start:{line:3001,column:46},end:{line:3001,column:70}},{start:{line:3001,column:74},end:{line:3001,column:83}}],line:3001},"150":{loc:{start:{line:3007,column:12},end:{line:3010,column:13}},type:"if",locations:[{start:{line:3007,column:12},end:{line:3010,column:13}},{start:{line:3007,column:12},end:{line:3010,column:13}}],line:3007},"151":{loc:{start:{line:3007,column:16},end:{line:3007,column:53}},type:"binary-expr",locations:[{start:{line:3007,column:16},end:{line:3007,column:40}},{start:{line:3007,column:44},end:{line:3007,column:53}}],line:3007},"152":{loc:{start:{line:3012,column:21},end:{line:3012,column:33}},type:"binary-expr",locations:[{start:{line:3012,column:21},end:{line:3012,column:27}},{start:{line:3012,column:31},end:{line:3012,column:33}}],line:3012},"153":{loc:{start:{line:3072,column:12},end:{line:3074,column:13}},type:"if",locations:[{start:{line:3072,column:12},end:{line:3074,column:13}},{start:{line:3072,column:12},end:{line:3074,column:13}}],line:3072},"154":{loc:{start:{line:3072,column:16},end:{line:3072,column:78}},type:"binary-expr",locations:[{start:{line:3072,column:16},end:{line:3072,column:26}},{start:{line:3072,column:30},end:{line:3072,column:53}},{start:{line:3072,column:57},end:{line:3072,column:78}}],line:3072},"155":{loc:{start:{line:3098,column:12},end:{line:3100,column:13}},type:"if",locations:[{start:{line:3098,column:12},end:{line:3100,column:13}},{start:{line:3098,column:12},end:{line:3100,column:13}}],line:3098},"156":{loc:{start:{line:3102,column:23},end:{line:3102,column:48}},type:"binary-expr",locations:[{start:{line:3102,column:23},end:{line:3102,column:31}},{start:{line:3102,column:35},end:{line:3102,column:48}}],line:3102},"157":{loc:{start:{line:3106,column:16},end:{line:3119,column:17}},type:"if",locations:[{start:{line:3106,column:16},end:{line:3119,column:17}},{start:{line:3106,column:16},end:{line:3119,column:17}}],line:3106},"158":{loc:{start:{line:3112,column:24},end:{line:3117,column:25}},type:"if",locations:[{start:{line:3112,column:24},end:{line:3117,column:25}},{start:{line:3112,column:24},end:{line:3117,column:25}}],line:3112},"159":{loc:{start:{line:3136,column:16},end:{line:3138,column:17}},type:"if",locations:[{start:{line:3136,column:16},end:{line:3138,column:17}},{start:{line:3136,column:16},end:{line:3138,column:17}}],line:3136},"160":{loc:{start:{line:3136,column:19},end:{line:3136,column:45}},type:"binary-expr",locations:[{start:{line:3136,column:19},end:{line:3136,column:24}},{start:{line:3136,column:28},end:{line:3136,column:45}}],line:3136},"161":{loc:{start:{line:3159,column:16},end:{line:3164,column:17}},type:"if",locations:[{start:{line:3159,column:16},end:{line:3164,column:17}},{start:{line:3159,column:16},end:{line:3164,column:17}}],line:3159},"162":{loc:{start:{line:3172,column:23},end:{line:3172,column:48}},type:"binary-expr",locations:[{start:{line:3172,column:23},end:{line:3172,column:31}},{start:{line:3172,column:35},end:{line:3172,column:48}}],line:3172},"163":{loc:{start:{line:3180,column:12},end:{line:3189,column:13}},type:"if",locations:[{start:{line:3180,column:12},end:{line:3189,column:13}},{start:{line:3180,column:12},end:{line:3189,column:13}}],line:3180},"164":{loc:{start:{line:3196,column:12},end:{line:3211,column:13}},type:"if",locations:[{start:{line:3196,column:12},end:{line:3211,column:13}},{start:{line:3196,column:12},end:{line:3211,column:13}}],line:3196},"165":{loc:{start:{line:3308,column:23},end:{line:3308,column:48}},type:"binary-expr",locations:[{start:{line:3308,column:23},end:{line:3308,column:31}},{start:{line:3308,column:35},end:{line:3308,column:48}}],line:3308},"166":{loc:{start:{line:3334,column:23},end:{line:3334,column:48}},type:"binary-expr",locations:[{start:{line:3334,column:23},end:{line:3334,column:31}},{start:{line:3334,column:35},end:{line:3334,column:48}}],line:3334},"167":{loc:{start:{line:3361,column:23},end:{line:3361,column:48}},type:"binary-expr",locations:[{start:{line:3361,column:23},end:{line:3361,column:31}},{start:{line:3361,column:35},end:{line:3361,column:48}}],line:3361},"168":{loc:{start:{line:3362,column:21},end:{line:3362,column:33}},type:"binary-expr",locations:[{start:{line:3362,column:21},end:{line:3362,column:27}},{start:{line:3362,column:31},end:{line:3362,column:33}}],line:3362},"169":{loc:{start:{line:3363,column:33},end:{line:3363,column:66}},type:"binary-expr",locations:[{start:{line:3363,column:33},end:{line:3363,column:51}},{start:{line:3363,column:55},end:{line:3363,column:66}}],line:3363},"170":{loc:{start:{line:3367,column:16},end:{line:3372,column:17}},type:"if",locations:[{start:{line:3367,column:16},end:{line:3372,column:17}},{start:{line:3367,column:16},end:{line:3372,column:17}}],line:3367},"171":{loc:{start:{line:3392,column:23},end:{line:3392,column:48}},type:"binary-expr",locations:[{start:{line:3392,column:23},end:{line:3392,column:31}},{start:{line:3392,column:35},end:{line:3392,column:48}}],line:3392},"172":{loc:{start:{line:3433,column:23},end:{line:3433,column:48}},type:"binary-expr",locations:[{start:{line:3433,column:23},end:{line:3433,column:31}},{start:{line:3433,column:35},end:{line:3433,column:48}}],line:3433},"173":{loc:{start:{line:3460,column:23},end:{line:3460,column:48}},type:"binary-expr",locations:[{start:{line:3460,column:23},end:{line:3460,column:31}},{start:{line:3460,column:35},end:{line:3460,column:48}}],line:3460},"174":{loc:{start:{line:3461,column:21},end:{line:3461,column:33}},type:"binary-expr",locations:[{start:{line:3461,column:21},end:{line:3461,column:27}},{start:{line:3461,column:31},end:{line:3461,column:33}}],line:3461},"175":{loc:{start:{line:3462,column:33},end:{line:3462,column:66}},type:"binary-expr",locations:[{start:{line:3462,column:33},end:{line:3462,column:51}},{start:{line:3462,column:55},end:{line:3462,column:66}}],line:3462},"176":{loc:{start:{line:3466,column:16},end:{line:3471,column:17}},type:"if",locations:[{start:{line:3466,column:16},end:{line:3471,column:17}},{start:{line:3466,column:16},end:{line:3471,column:17}}],line:3466},"177":{loc:{start:{line:3497,column:23},end:{line:3497,column:48}},type:"binary-expr",locations:[{start:{line:3497,column:23},end:{line:3497,column:31}},{start:{line:3497,column:35},end:{line:3497,column:48}}],line:3497},"178":{loc:{start:{line:3498,column:21},end:{line:3498,column:33}},type:"binary-expr",locations:[{start:{line:3498,column:21},end:{line:3498,column:27}},{start:{line:3498,column:31},end:{line:3498,column:33}}],line:3498},"179":{loc:{start:{line:3499,column:33},end:{line:3499,column:66}},type:"binary-expr",locations:[{start:{line:3499,column:33},end:{line:3499,column:51}},{start:{line:3499,column:55},end:{line:3499,column:66}}],line:3499},"180":{loc:{start:{line:3503,column:16},end:{line:3508,column:17}},type:"if",locations:[{start:{line:3503,column:16},end:{line:3508,column:17}},{start:{line:3503,column:16},end:{line:3508,column:17}}],line:3503},"181":{loc:{start:{line:3528,column:23},end:{line:3528,column:48}},type:"binary-expr",locations:[{start:{line:3528,column:23},end:{line:3528,column:31}},{start:{line:3528,column:35},end:{line:3528,column:48}}],line:3528},"182":{loc:{start:{line:3532,column:16},end:{line:3537,column:17}},type:"if",locations:[{start:{line:3532,column:16},end:{line:3537,column:17}},{start:{line:3532,column:16},end:{line:3537,column:17}}],line:3532},"183":{loc:{start:{line:3558,column:23},end:{line:3558,column:48}},type:"binary-expr",locations:[{start:{line:3558,column:23},end:{line:3558,column:31}},{start:{line:3558,column:35},end:{line:3558,column:48}}],line:3558},"184":{loc:{start:{line:3586,column:23},end:{line:3586,column:48}},type:"binary-expr",locations:[{start:{line:3586,column:23},end:{line:3586,column:31}},{start:{line:3586,column:35},end:{line:3586,column:48}}],line:3586},"185":{loc:{start:{line:3613,column:23},end:{line:3613,column:48}},type:"binary-expr",locations:[{start:{line:3613,column:23},end:{line:3613,column:31}},{start:{line:3613,column:35},end:{line:3613,column:48}}],line:3613},"186":{loc:{start:{line:3617,column:16},end:{line:3622,column:17}},type:"if",locations:[{start:{line:3617,column:16},end:{line:3622,column:17}},{start:{line:3617,column:16},end:{line:3622,column:17}}],line:3617},"187":{loc:{start:{line:3643,column:23},end:{line:3643,column:48}},type:"binary-expr",locations:[{start:{line:3643,column:23},end:{line:3643,column:31}},{start:{line:3643,column:35},end:{line:3643,column:48}}],line:3643},"188":{loc:{start:{line:3647,column:16},end:{line:3652,column:17}},type:"if",locations:[{start:{line:3647,column:16},end:{line:3652,column:17}},{start:{line:3647,column:16},end:{line:3652,column:17}}],line:3647},"189":{loc:{start:{line:3673,column:23},end:{line:3673,column:48}},type:"binary-expr",locations:[{start:{line:3673,column:23},end:{line:3673,column:31}},{start:{line:3673,column:35},end:{line:3673,column:48}}],line:3673},"190":{loc:{start:{line:3700,column:25},end:{line:3700,column:46}},type:"binary-expr",locations:[{start:{line:3700,column:25},end:{line:3700,column:39}},{start:{line:3700,column:43},end:{line:3700,column:46}}],line:3700},"191":{loc:{start:{line:3702,column:12},end:{line:3706,column:13}},type:"if",locations:[{start:{line:3702,column:12},end:{line:3706,column:13}},{start:{line:3702,column:12},end:{line:3706,column:13}}],line:3702},"192":{loc:{start:{line:3709,column:16},end:{line:3712,column:32}},type:"binary-expr",locations:[{start:{line:3709,column:16},end:{line:3709,column:35}},{start:{line:3710,column:16},end:{line:3710,column:31}},{start:{line:3711,column:16},end:{line:3711,column:33}},{start:{line:3712,column:16},end:{line:3712,column:32}}],line:3709},"193":{loc:{start:{line:3715,column:30},end:{line:3715,column:62}},type:"binary-expr",locations:[{start:{line:3715,column:30},end:{line:3715,column:45}},{start:{line:3715,column:49},end:{line:3715,column:62}}],line:3715},"194":{loc:{start:{line:3716,column:33},end:{line:3716,column:68}},type:"binary-expr",locations:[{start:{line:3716,column:33},end:{line:3716,column:51}},{start:{line:3716,column:55},end:{line:3716,column:68}}],line:3716},"195":{loc:{start:{line:3717,column:29},end:{line:3717,column:60}},type:"binary-expr",locations:[{start:{line:3717,column:29},end:{line:3717,column:43}},{start:{line:3717,column:47},end:{line:3717,column:60}}],line:3717},"196":{loc:{start:{line:3718,column:31},end:{line:3718,column:64}},type:"binary-expr",locations:[{start:{line:3718,column:31},end:{line:3718,column:47}},{start:{line:3718,column:51},end:{line:3718,column:64}}],line:3718},"197":{loc:{start:{line:3719,column:30},end:{line:3719,column:62}},type:"binary-expr",locations:[{start:{line:3719,column:30},end:{line:3719,column:45}},{start:{line:3719,column:49},end:{line:3719,column:62}}],line:3719},"198":{loc:{start:{line:3722,column:34},end:{line:3722,column:70}},type:"binary-expr",locations:[{start:{line:3722,column:34},end:{line:3722,column:53}},{start:{line:3722,column:57},end:{line:3722,column:70}}],line:3722},"199":{loc:{start:{line:3723,column:43},end:{line:3723,column:88}},type:"binary-expr",locations:[{start:{line:3723,column:43},end:{line:3723,column:71}},{start:{line:3723,column:75},end:{line:3723,column:88}}],line:3723},"200":{loc:{start:{line:3732,column:24},end:{line:3735,column:25}},type:"if",locations:[{start:{line:3732,column:24},end:{line:3735,column:25}},{start:{line:3732,column:24},end:{line:3735,column:25}}],line:3732},"201":{loc:{start:{line:3738,column:39},end:{line:3738,column:96}},type:"binary-expr",locations:[{start:{line:3738,column:39},end:{line:3738,column:65}},{start:{line:3738,column:69},end:{line:3738,column:96}}],line:3738},"202":{loc:{start:{line:3739,column:24},end:{line:3776,column:25}},type:"if",locations:[{start:{line:3739,column:24},end:{line:3776,column:25}},{start:{line:3739,column:24},end:{line:3776,column:25}}],line:3739},"203":{loc:{start:{line:3743,column:28},end:{line:3756,column:29}},type:"if",locations:[{start:{line:3743,column:28},end:{line:3756,column:29}},{start:{line:3743,column:28},end:{line:3756,column:29}}],line:3743},"204":{loc:{start:{line:3749,column:32},end:{line:3755,column:33}},type:"if",locations:[{start:{line:3749,column:32},end:{line:3755,column:33}},{start:{line:3749,column:32},end:{line:3755,column:33}}],line:3749},"205":{loc:{start:{line:3762,column:28},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3762,column:28},end:{line:3775,column:29}},{start:{line:3762,column:28},end:{line:3775,column:29}}],line:3762},"206":{loc:{start:{line:3762,column:32},end:{line:3762,column:72}},type:"binary-expr",locations:[{start:{line:3762,column:32},end:{line:3762,column:56}},{start:{line:3762,column:60},end:{line:3762,column:72}}],line:3762},"207":{loc:{start:{line:3769,column:33},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3769,column:33},end:{line:3775,column:29}},{start:{line:3769,column:33},end:{line:3775,column:29}}],line:3769},"208":{loc:{start:{line:3769,column:37},end:{line:3769,column:81}},type:"binary-expr",locations:[{start:{line:3769,column:37},end:{line:3769,column:63}},{start:{line:3769,column:67},end:{line:3769,column:81}}],line:3769},"209":{loc:{start:{line:3782,column:20},end:{line:3784,column:21}},type:"if",locations:[{start:{line:3782,column:20},end:{line:3784,column:21}},{start:{line:3782,column:20},end:{line:3784,column:21}}],line:3782},"210":{loc:{start:{line:3805,column:23},end:{line:3805,column:48}},type:"binary-expr",locations:[{start:{line:3805,column:23},end:{line:3805,column:31}},{start:{line:3805,column:35},end:{line:3805,column:48}}],line:3805},"211":{loc:{start:{line:3889,column:12},end:{line:3893,column:13}},type:"if",locations:[{start:{line:3889,column:12},end:{line:3893,column:13}},{start:{line:3889,column:12},end:{line:3893,column:13}}],line:3889},"212":{loc:{start:{line:3889,column:16},end:{line:3889,column:78}},type:"binary-expr",locations:[{start:{line:3889,column:16},end:{line:3889,column:37}},{start:{line:3889,column:41},end:{line:3889,column:65}},{start:{line:3889,column:69},end:{line:3889,column:78}}],line:3889},"213":{loc:{start:{line:3895,column:23},end:{line:3895,column:48}},type:"binary-expr",locations:[{start:{line:3895,column:23},end:{line:3895,column:31}},{start:{line:3895,column:35},end:{line:3895,column:48}}],line:3895},"214":{loc:{start:{line:3896,column:21},end:{line:3896,column:33}},type:"binary-expr",locations:[{start:{line:3896,column:21},end:{line:3896,column:27}},{start:{line:3896,column:31},end:{line:3896,column:33}}],line:3896},"215":{loc:{start:{line:3899,column:12},end:{line:3901,column:13}},type:"if",locations:[{start:{line:3899,column:12},end:{line:3901,column:13}},{start:{line:3899,column:12},end:{line:3901,column:13}}],line:3899},"216":{loc:{start:{line:3899,column:17},end:{line:3899,column:39}},type:"binary-expr",locations:[{start:{line:3899,column:17},end:{line:3899,column:33}},{start:{line:3899,column:37},end:{line:3899,column:39}}],line:3899},"217":{loc:{start:{line:3903,column:12},end:{line:3906,column:13}},type:"if",locations:[{start:{line:3903,column:12},end:{line:3906,column:13}},{start:{line:3903,column:12},end:{line:3906,column:13}}],line:3903},"218":{loc:{start:{line:3909,column:16},end:{line:3915,column:17}},type:"if",locations:[{start:{line:3909,column:16},end:{line:3915,column:17}},{start:{line:3909,column:16},end:{line:3915,column:17}}],line:3909},"219":{loc:{start:{line:3972,column:12},end:{line:3976,column:13}},type:"if",locations:[{start:{line:3972,column:12},end:{line:3976,column:13}},{start:{line:3972,column:12},end:{line:3976,column:13}}],line:3972},"220":{loc:{start:{line:3972,column:16},end:{line:3972,column:78}},type:"binary-expr",locations:[{start:{line:3972,column:16},end:{line:3972,column:37}},{start:{line:3972,column:41},end:{line:3972,column:65}},{start:{line:3972,column:69},end:{line:3972,column:78}}],line:3972},"221":{loc:{start:{line:3978,column:23},end:{line:3978,column:48}},type:"binary-expr",locations:[{start:{line:3978,column:23},end:{line:3978,column:31}},{start:{line:3978,column:35},end:{line:3978,column:48}}],line:3978},"222":{loc:{start:{line:3979,column:21},end:{line:3979,column:33}},type:"binary-expr",locations:[{start:{line:3979,column:21},end:{line:3979,column:27}},{start:{line:3979,column:31},end:{line:3979,column:33}}],line:3979},"223":{loc:{start:{line:3983,column:12},end:{line:3985,column:13}},type:"if",locations:[{start:{line:3983,column:12},end:{line:3985,column:13}},{start:{line:3983,column:12},end:{line:3985,column:13}}],line:3983},"224":{loc:{start:{line:3987,column:29},end:{line:3987,column:62}},type:"binary-expr",locations:[{start:{line:3987,column:29},end:{line:3987,column:47}},{start:{line:3987,column:51},end:{line:3987,column:62}}],line:3987},"225":{loc:{start:{line:4004,column:20},end:{line:4009,column:21}},type:"if",locations:[{start:{line:4004,column:20},end:{line:4009,column:21}},{start:{line:4004,column:20},end:{line:4009,column:21}}],line:4004},"226":{loc:{start:{line:4072,column:20},end:{line:4072,column:31}},type:"binary-expr",locations:[{start:{line:4072,column:20},end:{line:4072,column:25}},{start:{line:4072,column:29},end:{line:4072,column:31}}],line:4072},"227":{loc:{start:{line:4073,column:26},end:{line:4073,column:43}},type:"binary-expr",locations:[{start:{line:4073,column:26},end:{line:4073,column:37}},{start:{line:4073,column:41},end:{line:4073,column:43}}],line:4073},"228":{loc:{start:{line:4082,column:34},end:{line:4082,column:55}},type:"binary-expr",locations:[{start:{line:4082,column:34},end:{line:4082,column:47}},{start:{line:4082,column:51},end:{line:4082,column:55}}],line:4082},"229":{loc:{start:{line:4192,column:20},end:{line:4192,column:31}},type:"binary-expr",locations:[{start:{line:4192,column:20},end:{line:4192,column:25}},{start:{line:4192,column:29},end:{line:4192,column:31}}],line:4192},"230":{loc:{start:{line:4193,column:26},end:{line:4193,column:43}},type:"binary-expr",locations:[{start:{line:4193,column:26},end:{line:4193,column:37}},{start:{line:4193,column:41},end:{line:4193,column:43}}],line:4193},"231":{loc:{start:{line:4258,column:20},end:{line:4258,column:31}},type:"binary-expr",locations:[{start:{line:4258,column:20},end:{line:4258,column:25}},{start:{line:4258,column:29},end:{line:4258,column:31}}],line:4258},"232":{loc:{start:{line:4259,column:26},end:{line:4259,column:43}},type:"binary-expr",locations:[{start:{line:4259,column:26},end:{line:4259,column:37}},{start:{line:4259,column:41},end:{line:4259,column:43}}],line:4259},"233":{loc:{start:{line:4263,column:34},end:{line:4263,column:55}},type:"binary-expr",locations:[{start:{line:4263,column:34},end:{line:4263,column:47}},{start:{line:4263,column:51},end:{line:4263,column:55}}],line:4263},"234":{loc:{start:{line:4273,column:12},end:{line:4275,column:13}},type:"if",locations:[{start:{line:4273,column:12},end:{line:4275,column:13}},{start:{line:4273,column:12},end:{line:4275,column:13}}],line:4273},"235":{loc:{start:{line:4273,column:16},end:{line:4273,column:59}},type:"binary-expr",locations:[{start:{line:4273,column:16},end:{line:4273,column:36}},{start:{line:4273,column:40},end:{line:4273,column:59}}],line:4273},"236":{loc:{start:{line:4276,column:12},end:{line:4278,column:13}},type:"if",locations:[{start:{line:4276,column:12},end:{line:4278,column:13}},{start:{line:4276,column:12},end:{line:4278,column:13}}],line:4276},"237":{loc:{start:{line:4276,column:16},end:{line:4276,column:60}},type:"binary-expr",locations:[{start:{line:4276,column:16},end:{line:4276,column:37}},{start:{line:4276,column:41},end:{line:4276,column:60}}],line:4276},"238":{loc:{start:{line:4279,column:12},end:{line:4282,column:13}},type:"if",locations:[{start:{line:4279,column:12},end:{line:4282,column:13}},{start:{line:4279,column:12},end:{line:4282,column:13}}],line:4279},"239":{loc:{start:{line:4388,column:32},end:{line:4388,column:59}},type:"binary-expr",locations:[{start:{line:4388,column:32},end:{line:4388,column:51}},{start:{line:4388,column:55},end:{line:4388,column:59}}],line:4388},"240":{loc:{start:{line:4402,column:12},end:{line:4405,column:13}},type:"if",locations:[{start:{line:4402,column:12},end:{line:4405,column:13}},{start:{line:4402,column:12},end:{line:4405,column:13}}],line:4402},"241":{loc:{start:{line:4406,column:12},end:{line:4408,column:13}},type:"if",locations:[{start:{line:4406,column:12},end:{line:4408,column:13}},{start:{line:4406,column:12},end:{line:4408,column:13}}],line:4406},"242":{loc:{start:{line:4406,column:16},end:{line:4406,column:55}},type:"binary-expr",locations:[{start:{line:4406,column:16},end:{line:4406,column:21}},{start:{line:4406,column:25},end:{line:4406,column:55}}],line:4406},"243":{loc:{start:{line:4411,column:32},end:{line:4411,column:69}},type:"binary-expr",locations:[{start:{line:4411,column:32},end:{line:4411,column:49}},{start:{line:4411,column:53},end:{line:4411,column:69}}],line:4411},"244":{loc:{start:{line:4550,column:41},end:{line:4551,column:53}},type:"cond-expr",locations:[{start:{line:4551,column:16},end:{line:4551,column:46}},{start:{line:4551,column:49},end:{line:4551,column:53}}],line:4550},"245":{loc:{start:{line:4570,column:12},end:{line:4572,column:13}},type:"if",locations:[{start:{line:4570,column:12},end:{line:4572,column:13}},{start:{line:4570,column:12},end:{line:4572,column:13}}],line:4570},"246":{loc:{start:{line:4570,column:16},end:{line:4570,column:49}},type:"binary-expr",locations:[{start:{line:4570,column:16},end:{line:4570,column:19}},{start:{line:4570,column:23},end:{line:4570,column:49}}],line:4570},"247":{loc:{start:{line:4574,column:12},end:{line:4576,column:13}},type:"if",locations:[{start:{line:4574,column:12},end:{line:4576,column:13}},{start:{line:4574,column:12},end:{line:4576,column:13}}],line:4574},"248":{loc:{start:{line:4595,column:12},end:{line:4597,column:13}},type:"if",locations:[{start:{line:4595,column:12},end:{line:4597,column:13}},{start:{line:4595,column:12},end:{line:4597,column:13}}],line:4595},"249":{loc:{start:{line:4598,column:12},end:{line:4604,column:13}},type:"if",locations:[{start:{line:4598,column:12},end:{line:4604,column:13}},{start:{line:4598,column:12},end:{line:4604,column:13}}],line:4598},"250":{loc:{start:{line:4605,column:12},end:{line:4610,column:13}},type:"if",locations:[{start:{line:4605,column:12},end:{line:4610,column:13}},{start:{line:4605,column:12},end:{line:4610,column:13}}],line:4605},"251":{loc:{start:{line:4618,column:12},end:{line:4623,column:13}},type:"if",locations:[{start:{line:4618,column:12},end:{line:4623,column:13}},{start:{line:4618,column:12},end:{line:4623,column:13}}],line:4618},"252":{loc:{start:{line:4643,column:12},end:{line:4645,column:13}},type:"if",locations:[{start:{line:4643,column:12},end:{line:4645,column:13}},{start:{line:4643,column:12},end:{line:4645,column:13}}],line:4643},"253":{loc:{start:{line:4649,column:12},end:{line:4651,column:13}},type:"if",locations:[{start:{line:4649,column:12},end:{line:4651,column:13}},{start:{line:4649,column:12},end:{line:4651,column:13}}],line:4649},"254":{loc:{start:{line:4653,column:12},end:{line:4656,column:13}},type:"if",locations:[{start:{line:4653,column:12},end:{line:4656,column:13}},{start:{line:4653,column:12},end:{line:4656,column:13}}],line:4653},"255":{loc:{start:{line:4653,column:16},end:{line:4653,column:86}},type:"binary-expr",locations:[{start:{line:4653,column:16},end:{line:4653,column:35}},{start:{line:4653,column:39},end:{line:4653,column:86}}],line:4653},"256":{loc:{start:{line:4658,column:12},end:{line:4661,column:13}},type:"if",locations:[{start:{line:4658,column:12},end:{line:4661,column:13}},{start:{line:4658,column:12},end:{line:4661,column:13}}],line:4658},"257":{loc:{start:{line:4658,column:16},end:{line:4658,column:104}},type:"binary-expr",locations:[{start:{line:4658,column:16},end:{line:4658,column:35}},{start:{line:4658,column:39},end:{line:4658,column:104}}],line:4658},"258":{loc:{start:{line:4663,column:12},end:{line:4665,column:13}},type:"if",locations:[{start:{line:4663,column:12},end:{line:4665,column:13}},{start:{line:4663,column:12},end:{line:4665,column:13}}],line:4663},"259":{loc:{start:{line:4663,column:16},end:{line:4663,column:85}},type:"binary-expr",locations:[{start:{line:4663,column:16},end:{line:4663,column:40}},{start:{line:4663,column:44},end:{line:4663,column:85}}],line:4663},"260":{loc:{start:{line:4678,column:31},end:{line:4678,column:83}},type:"cond-expr",locations:[{start:{line:4678,column:63},end:{line:4678,column:71}},{start:{line:4678,column:74},end:{line:4678,column:83}}],line:4678},"261":{loc:{start:{line:4694,column:12},end:{line:4696,column:13}},type:"if",locations:[{start:{line:4694,column:12},end:{line:4696,column:13}},{start:{line:4694,column:12},end:{line:4696,column:13}}],line:4694},"262":{loc:{start:{line:4698,column:12},end:{line:4700,column:13}},type:"if",locations:[{start:{line:4698,column:12},end:{line:4700,column:13}},{start:{line:4698,column:12},end:{line:4700,column:13}}],line:4698},"263":{loc:{start:{line:4709,column:12},end:{line:4711,column:13}},type:"if",locations:[{start:{line:4709,column:12},end:{line:4711,column:13}},{start:{line:4709,column:12},end:{line:4711,column:13}}],line:4709},"264":{loc:{start:{line:4738,column:12},end:{line:4740,column:13}},type:"if",locations:[{start:{line:4738,column:12},end:{line:4740,column:13}},{start:{line:4738,column:12},end:{line:4740,column:13}}],line:4738},"265":{loc:{start:{line:4742,column:12},end:{line:4744,column:13}},type:"if",locations:[{start:{line:4742,column:12},end:{line:4744,column:13}},{start:{line:4742,column:12},end:{line:4744,column:13}}],line:4742},"266":{loc:{start:{line:4746,column:12},end:{line:4748,column:13}},type:"if",locations:[{start:{line:4746,column:12},end:{line:4748,column:13}},{start:{line:4746,column:12},end:{line:4748,column:13}}],line:4746},"267":{loc:{start:{line:4746,column:16},end:{line:4746,column:73}},type:"binary-expr",locations:[{start:{line:4746,column:16},end:{line:4746,column:48}},{start:{line:4746,column:52},end:{line:4746,column:73}}],line:4746},"268":{loc:{start:{line:4749,column:12},end:{line:4751,column:13}},type:"if",locations:[{start:{line:4749,column:12},end:{line:4751,column:13}},{start:{line:4749,column:12},end:{line:4751,column:13}}],line:4749},"269":{loc:{start:{line:4749,column:16},end:{line:4749,column:69}},type:"binary-expr",locations:[{start:{line:4749,column:16},end:{line:4749,column:46}},{start:{line:4749,column:50},end:{line:4749,column:69}}],line:4749},"270":{loc:{start:{line:4752,column:12},end:{line:4754,column:13}},type:"if",locations:[{start:{line:4752,column:12},end:{line:4754,column:13}},{start:{line:4752,column:12},end:{line:4754,column:13}}],line:4752},"271":{loc:{start:{line:4752,column:16},end:{line:4752,column:71}},type:"binary-expr",locations:[{start:{line:4752,column:16},end:{line:4752,column:47}},{start:{line:4752,column:51},end:{line:4752,column:71}}],line:4752},"272":{loc:{start:{line:4755,column:12},end:{line:4757,column:13}},type:"if",locations:[{start:{line:4755,column:12},end:{line:4757,column:13}},{start:{line:4755,column:12},end:{line:4757,column:13}}],line:4755},"273":{loc:{start:{line:4755,column:16},end:{line:4755,column:73}},type:"binary-expr",locations:[{start:{line:4755,column:16},end:{line:4755,column:48}},{start:{line:4755,column:52},end:{line:4755,column:73}}],line:4755},"274":{loc:{start:{line:4783,column:12},end:{line:4785,column:13}},type:"if",locations:[{start:{line:4783,column:12},end:{line:4785,column:13}},{start:{line:4783,column:12},end:{line:4785,column:13}}],line:4783},"275":{loc:{start:{line:4787,column:12},end:{line:4789,column:13}},type:"if",locations:[{start:{line:4787,column:12},end:{line:4789,column:13}},{start:{line:4787,column:12},end:{line:4789,column:13}}],line:4787},"276":{loc:{start:{line:4814,column:12},end:{line:4816,column:13}},type:"if",locations:[{start:{line:4814,column:12},end:{line:4816,column:13}},{start:{line:4814,column:12},end:{line:4816,column:13}}],line:4814},"277":{loc:{start:{line:4818,column:12},end:{line:4820,column:13}},type:"if",locations:[{start:{line:4818,column:12},end:{line:4820,column:13}},{start:{line:4818,column:12},end:{line:4820,column:13}}],line:4818},"278":{loc:{start:{line:4821,column:12},end:{line:4823,column:13}},type:"if",locations:[{start:{line:4821,column:12},end:{line:4823,column:13}},{start:{line:4821,column:12},end:{line:4823,column:13}}],line:4821},"279":{loc:{start:{line:4846,column:12},end:{line:4848,column:13}},type:"if",locations:[{start:{line:4846,column:12},end:{line:4848,column:13}},{start:{line:4846,column:12},end:{line:4848,column:13}}],line:4846},"280":{loc:{start:{line:4850,column:12},end:{line:4852,column:13}},type:"if",locations:[{start:{line:4850,column:12},end:{line:4852,column:13}},{start:{line:4850,column:12},end:{line:4852,column:13}}],line:4850},"281":{loc:{start:{line:4860,column:12},end:{line:4862,column:13}},type:"if",locations:[{start:{line:4860,column:12},end:{line:4862,column:13}},{start:{line:4860,column:12},end:{line:4862,column:13}}],line:4860},"282":{loc:{start:{line:4883,column:12},end:{line:4885,column:13}},type:"if",locations:[{start:{line:4883,column:12},end:{line:4885,column:13}},{start:{line:4883,column:12},end:{line:4885,column:13}}],line:4883},"283":{loc:{start:{line:4887,column:12},end:{line:4889,column:13}},type:"if",locations:[{start:{line:4887,column:12},end:{line:4889,column:13}},{start:{line:4887,column:12},end:{line:4889,column:13}}],line:4887},"284":{loc:{start:{line:4894,column:12},end:{line:4896,column:13}},type:"if",locations:[{start:{line:4894,column:12},end:{line:4896,column:13}},{start:{line:4894,column:12},end:{line:4896,column:13}}],line:4894},"285":{loc:{start:{line:4894,column:16},end:{line:4894,column:73}},type:"binary-expr",locations:[{start:{line:4894,column:16},end:{line:4894,column:48}},{start:{line:4894,column:52},end:{line:4894,column:73}}],line:4894},"286":{loc:{start:{line:4897,column:12},end:{line:4899,column:13}},type:"if",locations:[{start:{line:4897,column:12},end:{line:4899,column:13}},{start:{line:4897,column:12},end:{line:4899,column:13}}],line:4897},"287":{loc:{start:{line:4897,column:16},end:{line:4897,column:69}},type:"binary-expr",locations:[{start:{line:4897,column:16},end:{line:4897,column:46}},{start:{line:4897,column:50},end:{line:4897,column:69}}],line:4897},"288":{loc:{start:{line:4900,column:12},end:{line:4902,column:13}},type:"if",locations:[{start:{line:4900,column:12},end:{line:4902,column:13}},{start:{line:4900,column:12},end:{line:4902,column:13}}],line:4900},"289":{loc:{start:{line:4900,column:16},end:{line:4900,column:71}},type:"binary-expr",locations:[{start:{line:4900,column:16},end:{line:4900,column:47}},{start:{line:4900,column:51},end:{line:4900,column:71}}],line:4900},"290":{loc:{start:{line:4903,column:12},end:{line:4905,column:13}},type:"if",locations:[{start:{line:4903,column:12},end:{line:4905,column:13}},{start:{line:4903,column:12},end:{line:4905,column:13}}],line:4903},"291":{loc:{start:{line:4903,column:16},end:{line:4903,column:73}},type:"binary-expr",locations:[{start:{line:4903,column:16},end:{line:4903,column:48}},{start:{line:4903,column:52},end:{line:4903,column:73}}],line:4903},"292":{loc:{start:{line:4929,column:12},end:{line:4931,column:13}},type:"if",locations:[{start:{line:4929,column:12},end:{line:4931,column:13}},{start:{line:4929,column:12},end:{line:4931,column:13}}],line:4929},"293":{loc:{start:{line:4933,column:12},end:{line:4935,column:13}},type:"if",locations:[{start:{line:4933,column:12},end:{line:4935,column:13}},{start:{line:4933,column:12},end:{line:4935,column:13}}],line:4933},"294":{loc:{start:{line:4958,column:12},end:{line:4960,column:13}},type:"if",locations:[{start:{line:4958,column:12},end:{line:4960,column:13}},{start:{line:4958,column:12},end:{line:4960,column:13}}],line:4958},"295":{loc:{start:{line:4962,column:12},end:{line:4964,column:13}},type:"if",locations:[{start:{line:4962,column:12},end:{line:4964,column:13}},{start:{line:4962,column:12},end:{line:4964,column:13}}],line:4962},"296":{loc:{start:{line:4965,column:12},end:{line:4967,column:13}},type:"if",locations:[{start:{line:4965,column:12},end:{line:4967,column:13}},{start:{line:4965,column:12},end:{line:4967,column:13}}],line:4965},"297":{loc:{start:{line:4990,column:12},end:{line:4992,column:13}},type:"if",locations:[{start:{line:4990,column:12},end:{line:4992,column:13}},{start:{line:4990,column:12},end:{line:4992,column:13}}],line:4990},"298":{loc:{start:{line:4995,column:12},end:{line:5047,column:13}},type:"if",locations:[{start:{line:4995,column:12},end:{line:5047,column:13}},{start:{line:4995,column:12},end:{line:5047,column:13}}],line:4995},"299":{loc:{start:{line:4995,column:16},end:{line:5002,column:41}},type:"binary-expr",locations:[{start:{line:4995,column:16},end:{line:4995,column:58}},{start:{line:4996,column:16},end:{line:5002,column:41}}],line:4995},"300":{loc:{start:{line:5008,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5008,column:17},end:{line:5047,column:13}},{start:{line:5008,column:17},end:{line:5047,column:13}}],line:5008},"301":{loc:{start:{line:5008,column:21},end:{line:5018,column:37}},type:"binary-expr",locations:[{start:{line:5008,column:21},end:{line:5008,column:40}},{start:{line:5009,column:16},end:{line:5018,column:37}}],line:5008},"302":{loc:{start:{line:5025,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5025,column:17},end:{line:5047,column:13}},{start:{line:5025,column:17},end:{line:5047,column:13}}],line:5025},"303":{loc:{start:{line:5025,column:21},end:{line:5032,column:37}},type:"binary-expr",locations:[{start:{line:5025,column:21},end:{line:5025,column:43}},{start:{line:5026,column:16},end:{line:5032,column:37}}],line:5025},"304":{loc:{start:{line:5039,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5039,column:17},end:{line:5047,column:13}},{start:{line:5039,column:17},end:{line:5047,column:13}}],line:5039},"305":{loc:{start:{line:5039,column:21},end:{line:5040,column:41}},type:"binary-expr",locations:[{start:{line:5039,column:21},end:{line:5039,column:74}},{start:{line:5040,column:16},end:{line:5040,column:41}}],line:5039},"306":{loc:{start:{line:5045,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5045,column:17},end:{line:5047,column:13}},{start:{line:5045,column:17},end:{line:5047,column:13}}],line:5045},"307":{loc:{start:{line:5108,column:12},end:{line:5110,column:13}},type:"if",locations:[{start:{line:5108,column:12},end:{line:5110,column:13}},{start:{line:5108,column:12},end:{line:5110,column:13}}],line:5108},"308":{loc:{start:{line:5113,column:16},end:{line:5116,column:17}},type:"if",locations:[{start:{line:5113,column:16},end:{line:5116,column:17}},{start:{line:5113,column:16},end:{line:5116,column:17}}],line:5113},"309":{loc:{start:{line:5118,column:16},end:{line:5123,column:17}},type:"if",locations:[{start:{line:5118,column:16},end:{line:5123,column:17}},{start:{line:5118,column:16},end:{line:5123,column:17}}],line:5118},"310":{loc:{start:{line:5118,column:20},end:{line:5118,column:65}},type:"binary-expr",locations:[{start:{line:5118,column:20},end:{line:5118,column:39}},{start:{line:5118,column:43},end:{line:5118,column:65}}],line:5118},"311":{loc:{start:{line:5154,column:12},end:{line:5157,column:13}},type:"if",locations:[{start:{line:5154,column:12},end:{line:5157,column:13}},{start:{line:5154,column:12},end:{line:5157,column:13}}],line:5154},"312":{loc:{start:{line:5158,column:19},end:{line:5158,column:29}},type:"binary-expr",locations:[{start:{line:5158,column:19},end:{line:5158,column:23}},{start:{line:5158,column:27},end:{line:5158,column:29}}],line:5158},"313":{loc:{start:{line:5161,column:16},end:{line:5166,column:17}},type:"if",locations:[{start:{line:5161,column:16},end:{line:5166,column:17}},{start:{line:5161,column:16},end:{line:5166,column:17}}],line:5161},"314":{loc:{start:{line:5225,column:20},end:{line:5225,column:31}},type:"binary-expr",locations:[{start:{line:5225,column:20},end:{line:5225,column:25}},{start:{line:5225,column:29},end:{line:5225,column:31}}],line:5225},"315":{loc:{start:{line:5226,column:26},end:{line:5226,column:43}},type:"binary-expr",locations:[{start:{line:5226,column:26},end:{line:5226,column:37}},{start:{line:5226,column:41},end:{line:5226,column:43}}],line:5226},"316":{loc:{start:{line:5235,column:12},end:{line:5237,column:13}},type:"if",locations:[{start:{line:5235,column:12},end:{line:5237,column:13}},{start:{line:5235,column:12},end:{line:5237,column:13}}],line:5235},"317":{loc:{start:{line:5238,column:12},end:{line:5240,column:13}},type:"if",locations:[{start:{line:5238,column:12},end:{line:5240,column:13}},{start:{line:5238,column:12},end:{line:5240,column:13}}],line:5238},"318":{loc:{start:{line:5241,column:12},end:{line:5243,column:13}},type:"if",locations:[{start:{line:5241,column:12},end:{line:5243,column:13}},{start:{line:5241,column:12},end:{line:5243,column:13}}],line:5241},"319":{loc:{start:{line:5244,column:12},end:{line:5246,column:13}},type:"if",locations:[{start:{line:5244,column:12},end:{line:5246,column:13}},{start:{line:5244,column:12},end:{line:5246,column:13}}],line:5244},"320":{loc:{start:{line:5249,column:12},end:{line:5251,column:13}},type:"if",locations:[{start:{line:5249,column:12},end:{line:5251,column:13}},{start:{line:5249,column:12},end:{line:5251,column:13}}],line:5249},"321":{loc:{start:{line:5317,column:19},end:{line:5317,column:77}},type:"binary-expr",locations:[{start:{line:5317,column:19},end:{line:5317,column:48}},{start:{line:5317,column:52},end:{line:5317,column:69}},{start:{line:5317,column:73},end:{line:5317,column:77}}],line:5317},"322":{loc:{start:{line:5335,column:16},end:{line:5337,column:17}},type:"if",locations:[{start:{line:5335,column:16},end:{line:5337,column:17}},{start:{line:5335,column:16},end:{line:5337,column:17}}],line:5335},"323":{loc:{start:{line:5342,column:16},end:{line:5344,column:17}},type:"if",locations:[{start:{line:5342,column:16},end:{line:5344,column:17}},{start:{line:5342,column:16},end:{line:5344,column:17}}],line:5342},"324":{loc:{start:{line:5454,column:12},end:{line:5457,column:13}},type:"if",locations:[{start:{line:5454,column:12},end:{line:5457,column:13}},{start:{line:5454,column:12},end:{line:5457,column:13}}],line:5454},"325":{loc:{start:{line:5454,column:16},end:{line:5454,column:59}},type:"binary-expr",locations:[{start:{line:5454,column:16},end:{line:5454,column:25}},{start:{line:5454,column:29},end:{line:5454,column:59}}],line:5454},"326":{loc:{start:{line:5460,column:23},end:{line:5460,column:72}},type:"cond-expr",locations:[{start:{line:5460,column:38},end:{line:5460,column:67}},{start:{line:5460,column:70},end:{line:5460,column:72}}],line:5460},"327":{loc:{start:{line:5487,column:26},end:{line:5487,column:68}},type:"cond-expr",locations:[{start:{line:5487,column:43},end:{line:5487,column:60}},{start:{line:5487,column:65},end:{line:5487,column:67}}],line:5487},"328":{loc:{start:{line:5556,column:12},end:{line:5559,column:13}},type:"if",locations:[{start:{line:5556,column:12},end:{line:5559,column:13}},{start:{line:5556,column:12},end:{line:5559,column:13}}],line:5556},"329":{loc:{start:{line:5564,column:32},end:{line:5564,column:76}},type:"binary-expr",locations:[{start:{line:5564,column:32},end:{line:5564,column:70}},{start:{line:5564,column:74},end:{line:5564,column:76}}],line:5564},"330":{loc:{start:{line:5565,column:12},end:{line:5568,column:13}},type:"if",locations:[{start:{line:5565,column:12},end:{line:5568,column:13}},{start:{line:5565,column:12},end:{line:5568,column:13}}],line:5565},"331":{loc:{start:{line:5572,column:12},end:{line:5574,column:13}},type:"if",locations:[{start:{line:5572,column:12},end:{line:5574,column:13}},{start:{line:5572,column:12},end:{line:5574,column:13}}],line:5572},"332":{loc:{start:{line:5572,column:16},end:{line:5572,column:84}},type:"binary-expr",locations:[{start:{line:5572,column:16},end:{line:5572,column:48}},{start:{line:5572,column:52},end:{line:5572,column:84}}],line:5572},"333":{loc:{start:{line:5614,column:16},end:{line:5616,column:17}},type:"if",locations:[{start:{line:5614,column:16},end:{line:5616,column:17}},{start:{line:5614,column:16},end:{line:5616,column:17}}],line:5614},"334":{loc:{start:{line:5645,column:12},end:{line:5648,column:13}},type:"if",locations:[{start:{line:5645,column:12},end:{line:5648,column:13}},{start:{line:5645,column:12},end:{line:5648,column:13}}],line:5645},"335":{loc:{start:{line:5649,column:23},end:{line:5649,column:48}},type:"binary-expr",locations:[{start:{line:5649,column:23},end:{line:5649,column:31}},{start:{line:5649,column:35},end:{line:5649,column:48}}],line:5649},"336":{loc:{start:{line:5651,column:12},end:{line:5654,column:13}},type:"if",locations:[{start:{line:5651,column:12},end:{line:5654,column:13}},{start:{line:5651,column:12},end:{line:5654,column:13}}],line:5651},"337":{loc:{start:{line:5655,column:12},end:{line:5658,column:13}},type:"if",locations:[{start:{line:5655,column:12},end:{line:5658,column:13}},{start:{line:5655,column:12},end:{line:5658,column:13}}],line:5655},"338":{loc:{start:{line:5662,column:29},end:{line:5662,column:107}},type:"binary-expr",locations:[{start:{line:5662,column:29},end:{line:5662,column:48}},{start:{line:5662,column:52},end:{line:5662,column:78}},{start:{line:5662,column:82},end:{line:5662,column:107}}],line:5662},"339":{loc:{start:{line:5663,column:35},end:{line:5663,column:123}},type:"binary-expr",locations:[{start:{line:5663,column:35},end:{line:5663,column:54}},{start:{line:5663,column:58},end:{line:5663,column:89}},{start:{line:5663,column:93},end:{line:5663,column:123}}],line:5663},"340":{loc:{start:{line:5664,column:35},end:{line:5664,column:123}},type:"binary-expr",locations:[{start:{line:5664,column:35},end:{line:5664,column:54}},{start:{line:5664,column:58},end:{line:5664,column:89}},{start:{line:5664,column:93},end:{line:5664,column:123}}],line:5664},"341":{loc:{start:{line:5670,column:16},end:{line:5676,column:17}},type:"if",locations:[{start:{line:5670,column:16},end:{line:5676,column:17}},{start:{line:5670,column:16},end:{line:5676,column:17}}],line:5670},"342":{loc:{start:{line:5713,column:24},end:{line:5713,column:39}},type:"binary-expr",locations:[{start:{line:5713,column:24},end:{line:5713,column:33}},{start:{line:5713,column:37},end:{line:5713,column:39}}],line:5713},"343":{loc:{start:{line:5733,column:12},end:{line:5736,column:13}},type:"if",locations:[{start:{line:5733,column:12},end:{line:5736,column:13}},{start:{line:5733,column:12},end:{line:5736,column:13}}],line:5733},"344":{loc:{start:{line:5733,column:16},end:{line:5733,column:53}},type:"binary-expr",locations:[{start:{line:5733,column:16},end:{line:5733,column:40}},{start:{line:5733,column:44},end:{line:5733,column:53}}],line:5733},"345":{loc:{start:{line:5738,column:21},end:{line:5738,column:33}},type:"binary-expr",locations:[{start:{line:5738,column:21},end:{line:5738,column:27}},{start:{line:5738,column:31},end:{line:5738,column:33}}],line:5738},"346":{loc:{start:{line:5739,column:23},end:{line:5739,column:47}},type:"binary-expr",locations:[{start:{line:5739,column:23},end:{line:5739,column:31}},{start:{line:5739,column:35},end:{line:5739,column:47}}],line:5739},"347":{loc:{start:{line:5744,column:16},end:{line:5750,column:17}},type:"if",locations:[{start:{line:5744,column:16},end:{line:5750,column:17}},{start:{line:5744,column:16},end:{line:5750,column:17}}],line:5744},"348":{loc:{start:{line:5774,column:21},end:{line:5774,column:33}},type:"binary-expr",locations:[{start:{line:5774,column:21},end:{line:5774,column:27}},{start:{line:5774,column:31},end:{line:5774,column:33}}],line:5774},"349":{loc:{start:{line:5777,column:29},end:{line:5777,column:49}},type:"binary-expr",locations:[{start:{line:5777,column:29},end:{line:5777,column:44}},{start:{line:5777,column:48},end:{line:5777,column:49}}],line:5777},"350":{loc:{start:{line:5783,column:23},end:{line:5783,column:48}},type:"binary-expr",locations:[{start:{line:5783,column:23},end:{line:5783,column:31}},{start:{line:5783,column:35},end:{line:5783,column:48}}],line:5783},"351":{loc:{start:{line:5791,column:16},end:{line:5799,column:17}},type:"if",locations:[{start:{line:5791,column:16},end:{line:5799,column:17}},{start:{line:5791,column:16},end:{line:5799,column:17}}],line:5791},"352":{loc:{start:{line:5795,column:38},end:{line:5795,column:76}},type:"cond-expr",locations:[{start:{line:5795,column:53},end:{line:5795,column:72}},{start:{line:5795,column:75},end:{line:5795,column:76}}],line:5795}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0,0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0,0],"322":[0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0,0],"339":[0,0,0],"340":[0,0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"b527bc3bbffe3a4fee511c63590269cdc3ea500f"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore -cov_1ks4ntaci2=function(){return actualCoverage;};}return actualCoverage;}cov_1ks4ntaci2();cov_1ks4ntaci2().s[0]++;/*!*/ // Copyright 2014 Splunk, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -(function(){"use strict";cov_1ks4ntaci2().f[0]++;var Context=(cov_1ks4ntaci2().s[1]++,require('./context'));var Http=(cov_1ks4ntaci2().s[2]++,require('./http'));var Async=(cov_1ks4ntaci2().s[3]++,require('./async'));var Paths=(cov_1ks4ntaci2().s[4]++,require('./paths').Paths);var Class=(cov_1ks4ntaci2().s[5]++,require('./jquery.class').Class);var utils=(cov_1ks4ntaci2().s[6]++,require('./utils'));var root=(cov_1ks4ntaci2().s[7]++,(cov_1ks4ntaci2().b[0][0]++,exports)||(cov_1ks4ntaci2().b[0][1]++,this));var Service=(cov_1ks4ntaci2().s[8]++,null);/** - * Contains functionality common to Splunk Enterprise and Splunk Storm. - * - * This class is an implementation detail and is therefore SDK-private. - * - * @class splunkjs.private.BaseService - * @extends splunkjs.Context - */var BaseService=(cov_1ks4ntaci2().s[9]++,Context.extend({init:function(){cov_1ks4ntaci2().f[1]++;cov_1ks4ntaci2().s[10]++;this._super.apply(this,arguments);}}));/** - * Provides a root access point to Splunk functionality with typed access to - * Splunk resources such as searches, indexes, inputs, and more. Provides - * methods to authenticate and create specialized instances of the service. - * - * @class splunkjs.Service - * @extends splunkjs.private.BaseService - */cov_1ks4ntaci2().s[11]++;module.exports=root=Service=BaseService.extend({/** - * Constructor for `splunkjs.Service`. - * - * @constructor - * @param {splunkjs.Http} http An instance of a `splunkjs.Http` class. - * @param {Object} params A dictionary of optional parameters: - * - `scheme` (_string_): The scheme ("http" or "https") for accessing Splunk. - * - `host` (_string_): The host name (the default is "localhost"). - * - `port` (_integer_): The port number (the default is 8089). - * - `username` (_string_): The Splunk account username, which is used to authenticate the Splunk instance. - * - `password` (_string_): The password, which is used to authenticate the Splunk instance. - * - `owner` (_string_): The owner (username) component of the namespace. - * - `app` (_string_): The app component of the namespace. - * - `sessionKey` (_string_): The current session token. - * - `autologin` (_boolean_): `true` to automatically try to log in again if the session terminates, `false` if not (`true` by default). - * - `version` (_string_): The version string for Splunk, for example "4.3.2" (the default is "5.0"). - * @return {splunkjs.Service} A new `splunkjs.Service` instance. - * - * @method splunkjs.Service - */init:function(){cov_1ks4ntaci2().f[2]++;cov_1ks4ntaci2().s[12]++;this._super.apply(this,arguments);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[13]++;this.specialize=utils.bind(this,this.specialize);cov_1ks4ntaci2().s[14]++;this.apps=utils.bind(this,this.apps);cov_1ks4ntaci2().s[15]++;this.configurations=utils.bind(this,this.configurations);cov_1ks4ntaci2().s[16]++;this.indexes=utils.bind(this,this.indexes);cov_1ks4ntaci2().s[17]++;this.savedSearches=utils.bind(this,this.savedSearches);cov_1ks4ntaci2().s[18]++;this.jobs=utils.bind(this,this.jobs);cov_1ks4ntaci2().s[19]++;this.users=utils.bind(this,this.users);cov_1ks4ntaci2().s[20]++;this.currentUser=utils.bind(this,this.currentUser);cov_1ks4ntaci2().s[21]++;this.views=utils.bind(this,this.views);cov_1ks4ntaci2().s[22]++;this.firedAlertGroups=utils.bind(this,this.firedAlertGroups);cov_1ks4ntaci2().s[23]++;this.dataModels=utils.bind(this,this.dataModels);},/** - * Creates a specialized version of the current `Service` instance for - * a specific namespace context. - * - * @example - * - * var svc = ...; - * var newService = svc.specialize("myuser", "unix"); - * - * @param {String} owner The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * @param {String} app The app context for this resource (such as "search"). The "-" wildcard means all apps. - * @return {splunkjs.Service} The specialized `Service` instance. - * - * @method splunkjs.Service - */specialize:function(owner,app){cov_1ks4ntaci2().f[3]++;cov_1ks4ntaci2().s[24]++;return new Service(this.http,{scheme:this.scheme,host:this.host,port:this.port,username:this.username,password:this.password,owner:owner,app:app,sessionKey:this.sessionKey,version:this.version});},/** - * Gets the `Applications` collection, which allows you to - * list installed apps and retrieve information about them. - * - * @example - * - * // List installed apps - * var apps = svc.apps(); - * apps.fetch(function(err) { console.log(apps.list()); }); - * - * @return {splunkjs.Service.Collection} The `Applications` collection. - * - * @endpoint apps/local - * @method splunkjs.Service - * @see splunkjs.Service.Applications - */apps:function(){cov_1ks4ntaci2().f[4]++;cov_1ks4ntaci2().s[25]++;return new root.Applications(this);},/** - * Gets the `Configurations` collection, which lets you - * create, list, and retrieve configuration (.conf) files. - * - * @example - * - * // List all properties in the 'props.conf' file - * var files = svc.configurations(); - * files.item("props", function(err, propsFile) { - * propsFile.fetch(function(err, props) { - * console.log(props.properties()); - * }); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Configurations} The `Configurations` collection. - * - * @endpoint configs - * @method splunkjs.Service - * @see splunkjs.Service.Configurations - */configurations:function(namespace){cov_1ks4ntaci2().f[5]++;cov_1ks4ntaci2().s[26]++;return new root.Configurations(this,namespace);},/** - * Gets the `Indexes` collection, which lets you create, - * list, and update indexes. - * - * @example - * - * // Check if we have an _internal index - * var indexes = svc.indexes(); - * indexes.fetch(function(err, indexes) { - * var index = indexes.item("_internal"); - * console.log("Was index found: " + !!index); - * // `index` is an Index object. - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Indexes} The `Indexes` collection. - * - * @endpoint data/indexes - * @method splunkjs.Service - * @see splunkjs.Service.Indexes - */indexes:function(namespace){cov_1ks4ntaci2().f[6]++;cov_1ks4ntaci2().s[27]++;return new root.Indexes(this,namespace);},/** - * Gets the `SavedSearches` collection, which lets you - * create, list, and update saved searches. - * - * @example - * - * // List all # of saved searches - * var savedSearches = svc.savedSearches(); - * savedSearches.fetch(function(err, savedSearches) { - * console.log("# Of Saved Searches: " + savedSearches.list().length); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.SavedSearches} The `SavedSearches` collection. - * - * @endpoint saved/searches - * @method splunkjs.Service - * @see splunkjs.Service.SavedSearches - */savedSearches:function(namespace){cov_1ks4ntaci2().f[7]++;cov_1ks4ntaci2().s[28]++;return new root.SavedSearches(this,namespace);},/** - * Gets the `StoragePasswords` collection, which lets you - * create, list, and update storage passwords. - * - * @example - * - * // List all # of storage passwords - * var storagePasswords = svc.storagePasswords(); - * storagePasswords.fetch(function(err, storagePasswords) { - * console.log("# of Storage Passwords: " + storagePasswords.list().length); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePasswords} The `StoragePasswords` collection. - * - * @endpoint storage/passwords - * @method splunkjs.Service - * @see splunkjs.Service.StoragePasswords - */storagePasswords:function(namespace){cov_1ks4ntaci2().f[8]++;cov_1ks4ntaci2().s[29]++;return new root.StoragePasswords(this,namespace);},/** - * Gets the `FiredAlertGroupCollection` collection, which lets you - * list alert groups. - * - * @example - * - * // List all # of fired alert groups - * var firedAlertGroups = svc.firedAlertGroups(); - * firedAlertGroups.fetch(function(err, firedAlertGroups) { - * console.log("# of alert groups: " + firedAlertGroups.list().length); - * }); - * - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.FiredAlertGroupCollection} The `FiredAlertGroupCollection` collection. - * - * @endpoint saved/searches - * @method splunkjs.Service - * @see splunkjs.Service.FiredAlertGroupCollection - */firedAlertGroups:function(namespace){cov_1ks4ntaci2().f[9]++;cov_1ks4ntaci2().s[30]++;return new root.FiredAlertGroupCollection(this,namespace);},/** - * Gets the `Jobs` collection, which lets you create, list, - * and retrieve search jobs. - * - * @example - * - * // List all job IDs - * var jobs = svc.jobs(); - * jobs.fetch(function(err, jobs) { - * var list = jobs.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("Job " + (i+1) + ": " + list[i].sid); - * } - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Jobs} The `Jobs` collection. - * - * @endpoint search/jobs - * @method splunkjs.Service - * @see splunkjs.Service.Jobs - */jobs:function(namespace){cov_1ks4ntaci2().f[10]++;cov_1ks4ntaci2().s[31]++;return new root.Jobs(this,namespace);},/** - * Gets the `DataModels` collection, which lets you create, list, - * and retrieve data models. - * - * @endpoint datamodel/model - * @method splunkjs.Service - * @see splunkjs.Service.DataModels - */dataModels:function(namespace){cov_1ks4ntaci2().f[11]++;cov_1ks4ntaci2().s[32]++;return new root.DataModels(this,namespace);},/** - * Gets the `Users` collection, which lets you create, - * list, and retrieve users. - * - * @example - * - * // List all usernames - * var users = svc.users(); - * users.fetch(function(err, users) { - * var list = users.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("User " + (i+1) + ": " + list[i].properties().name); - * } - * }); - * - * @return {splunkjs.Service.Users} The `Users` collection. - * - * @endpoint authorization/users - * @method splunkjs.Service - * @see splunkjs.Service.Users - */users:function(){cov_1ks4ntaci2().f[12]++;cov_1ks4ntaci2().s[33]++;return new root.Users(this);},/** - * Gets the `Views` collection, which lets you create, - * list, and retrieve views (custom UIs built in Splunk's app framework). - * - * @example - * - * // List all views - * var views = svc.views(); - * views.fetch(function(err, views) { - * var list = views.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("View " + (i+1) + ": " + list[i].properties().name); - * } - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Views} The `Views` collection. - * - * @endpoint data/ui/views - * @method splunkjs.Service - * @see splunkjs.Service.Views - */views:function(namespace){cov_1ks4ntaci2().f[13]++;cov_1ks4ntaci2().s[34]++;return new root.Views(this,namespace);},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.oneshotSearch`. - * - * @example - * - * service.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { - * console.log("CREATED": newJob.sid); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the created job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */search:function(query,params,namespace,callback){cov_1ks4ntaci2().f[14]++;cov_1ks4ntaci2().s[35]++;if((cov_1ks4ntaci2().b[2][0]++,!callback)&&(cov_1ks4ntaci2().b[2][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[1][0]++;cov_1ks4ntaci2().s[36]++;callback=namespace;cov_1ks4ntaci2().s[37]++;namespace=null;}else{cov_1ks4ntaci2().b[1][1]++;}var jobs=(cov_1ks4ntaci2().s[38]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[39]++;return jobs.search(query,params,callback);},/** - * A convenience method to get a `Job` by its sid. - * - * @param {String} sid The search ID for a search job. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the created job: `(err, job)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */getJob:function(sid,namespace,callback){cov_1ks4ntaci2().f[15]++;cov_1ks4ntaci2().s[40]++;if((cov_1ks4ntaci2().b[4][0]++,!callback)&&(cov_1ks4ntaci2().b[4][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[3][0]++;cov_1ks4ntaci2().s[41]++;callback=namespace;cov_1ks4ntaci2().s[42]++;namespace=null;}else{cov_1ks4ntaci2().b[3][1]++;}var job=(cov_1ks4ntaci2().s[43]++,new root.Job(this,sid,namespace));cov_1ks4ntaci2().s[44]++;return job.fetch({},callback);},/** - * Creates a oneshot search from a given search query and optional parameters. - * - * @example - * - * service.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { - * console.log("RESULT FIELDS": results.fields); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search: - * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). - * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `rf` (_string_): Specifies one or more fields to add to the search. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the results of the search: `(err, results)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */oneshotSearch:function(query,params,namespace,callback){cov_1ks4ntaci2().f[16]++;cov_1ks4ntaci2().s[45]++;if((cov_1ks4ntaci2().b[6][0]++,!callback)&&(cov_1ks4ntaci2().b[6][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[5][0]++;cov_1ks4ntaci2().s[46]++;callback=namespace;cov_1ks4ntaci2().s[47]++;namespace=null;}else{cov_1ks4ntaci2().b[5][1]++;}var jobs=(cov_1ks4ntaci2().s[48]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[49]++;return jobs.oneshotSearch(query,params,callback);},/** - * Gets the user that is currently logged in. - * - * @example - * - * service.currentUser(function(err, user) { - * console.log("Real name: ", user.properties().realname); - * }); - * - * @param {Function} callback A function to call with the user instance: `(err, user)`. - * @return {splunkjs.Service.currentUser} The `User`. - * - * @endpoint authorization/current-context - * @method splunkjs.Service - */currentUser:function(callback){cov_1ks4ntaci2().f[17]++;cov_1ks4ntaci2().s[50]++;callback=(cov_1ks4ntaci2().b[7][0]++,callback)||(cov_1ks4ntaci2().b[7][1]++,function(){cov_1ks4ntaci2().f[18]++;});var that=(cov_1ks4ntaci2().s[51]++,this);var req=(cov_1ks4ntaci2().s[52]++,this.get(Paths.currentUser,{},function(err,response){cov_1ks4ntaci2().f[19]++;cov_1ks4ntaci2().s[53]++;if(err){cov_1ks4ntaci2().b[8][0]++;cov_1ks4ntaci2().s[54]++;callback(err);}else{cov_1ks4ntaci2().b[8][1]++;var username=(cov_1ks4ntaci2().s[55]++,response.data.entry[0].content.username);var user=(cov_1ks4ntaci2().s[56]++,new root.User(that,username));cov_1ks4ntaci2().s[57]++;user.fetch(function(){cov_1ks4ntaci2().f[20]++;cov_1ks4ntaci2().s[58]++;if(req.wasAborted){cov_1ks4ntaci2().b[9][0]++;cov_1ks4ntaci2().s[59]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[9][1]++;cov_1ks4ntaci2().s[60]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[61]++;return req;},/** - * Gets configuration information about the server. - * - * @example - * - * service.serverInfo(function(err, info) { - * console.log("Splunk Version: ", info.properties().version); - * }); - * - * @param {Function} callback A function to call with the server info: `(err, info)`. - * - * @endpoint server/info - * @method splunkjs.Service - */serverInfo:function(callback){cov_1ks4ntaci2().f[21]++;cov_1ks4ntaci2().s[62]++;callback=(cov_1ks4ntaci2().b[10][0]++,callback)||(cov_1ks4ntaci2().b[10][1]++,function(){cov_1ks4ntaci2().f[22]++;});var serverInfo=(cov_1ks4ntaci2().s[63]++,new root.ServerInfo(this));cov_1ks4ntaci2().s[64]++;return serverInfo.fetch(callback);},/** - * Parses a search query. - * - * @example - * - * service.parse("search index=_internal | head 1", function(err, parse) { - * console.log("Commands: ", parse.commands); - * }); - * - * @param {String} query The search query to parse. - * @param {Object} params An object of options for the parser: - * - `enable_lookups` (_boolean_): If `true`, performs reverse lookups to expand the search expression. - * - `output_mode` (_string_): The output format (XML or JSON). - * - `parse_only` (_boolean_): If `true`, disables the expansion of search due to evaluation of subsearches, time term expansion, lookups, tags, eventtypes, and sourcetype alias. - * - `reload_macros` (_boolean_): If `true`, reloads macro definitions from macros.conf. - * @param {Function} callback A function to call with the parse info: `(err, parse)`. - * - * @endpoint search/parser - * @method splunkjs.Service - */parse:function(query,params,callback){cov_1ks4ntaci2().f[23]++;cov_1ks4ntaci2().s[65]++;if((cov_1ks4ntaci2().b[12][0]++,!callback)&&(cov_1ks4ntaci2().b[12][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[11][0]++;cov_1ks4ntaci2().s[66]++;callback=params;cov_1ks4ntaci2().s[67]++;params={};}else{cov_1ks4ntaci2().b[11][1]++;}cov_1ks4ntaci2().s[68]++;callback=(cov_1ks4ntaci2().b[13][0]++,callback)||(cov_1ks4ntaci2().b[13][1]++,function(){cov_1ks4ntaci2().f[24]++;});cov_1ks4ntaci2().s[69]++;params=(cov_1ks4ntaci2().b[14][0]++,params)||(cov_1ks4ntaci2().b[14][1]++,{});cov_1ks4ntaci2().s[70]++;params.q=query;cov_1ks4ntaci2().s[71]++;return this.get(Paths.parser,params,function(err,response){cov_1ks4ntaci2().f[25]++;cov_1ks4ntaci2().s[72]++;if(err){cov_1ks4ntaci2().b[15][0]++;cov_1ks4ntaci2().s[73]++;callback(err);}else{cov_1ks4ntaci2().b[15][1]++;cov_1ks4ntaci2().s[74]++;callback(null,response.data);}});},/** - * Provides auto-complete suggestions for search queries. - * - * @example - * - * service.typeahead("index=", 10, function(err, options) { - * console.log("Autocompletion options: ", options); - * }); - * - * @param {String} prefix The query fragment to autocomplete. - * @param {Number} count The number of options to return (optional). - * @param {Function} callback A function to call with the autocompletion info: `(err, options)`. - * - * @endpoint search/typeahead - * @method splunkjs.Service - */typeahead:function(prefix,count,callback){cov_1ks4ntaci2().f[26]++;cov_1ks4ntaci2().s[75]++;if((cov_1ks4ntaci2().b[17][0]++,!callback)&&(cov_1ks4ntaci2().b[17][1]++,utils.isFunction(count))){cov_1ks4ntaci2().b[16][0]++;cov_1ks4ntaci2().s[76]++;callback=count;cov_1ks4ntaci2().s[77]++;count=10;}else{cov_1ks4ntaci2().b[16][1]++;}cov_1ks4ntaci2().s[78]++;callback=(cov_1ks4ntaci2().b[18][0]++,callback)||(cov_1ks4ntaci2().b[18][1]++,function(){cov_1ks4ntaci2().f[27]++;});var params=(cov_1ks4ntaci2().s[79]++,{count:(cov_1ks4ntaci2().b[19][0]++,count)||(cov_1ks4ntaci2().b[19][1]++,10),prefix:prefix});cov_1ks4ntaci2().s[80]++;return this.get(Paths.typeahead,params,function(err,response){cov_1ks4ntaci2().f[28]++;cov_1ks4ntaci2().s[81]++;if(err){cov_1ks4ntaci2().b[20][0]++;cov_1ks4ntaci2().s[82]++;callback(err);}else{cov_1ks4ntaci2().b[20][1]++;var results=(cov_1ks4ntaci2().s[83]++,((cov_1ks4ntaci2().b[21][0]++,response.data)||(cov_1ks4ntaci2().b[21][1]++,{})).results);cov_1ks4ntaci2().s[84]++;callback(null,(cov_1ks4ntaci2().b[22][0]++,results)||(cov_1ks4ntaci2().b[22][1]++,[]));}});},/** - * Logs an event to Splunk. - * - * @example - * - * service.log("A new event", {index: "_internal", sourcetype: "mysourcetype"}, function(err, result) { - * console.log("Submitted event: ", result); - * }); - * - * @param {String|Object} event The text for this event, or a JSON object. - * @param {Object} params A dictionary of parameters for indexing: - * - `index` (_string_): The index to send events from this input to. - * - `host` (_string_): The value to populate in the Host field for events from this data input. - * - `host_regex` (_string_): A regular expression used to extract the host value from each event. - * - `source` (_string_): The value to populate in the Source field for events from this data input. - * - `sourcetype` (_string_): The value to populate in the Sourcetype field for events from this data input. - * @param {Function} callback A function to call when the event is submitted: `(err, result)`. - * - * @endpoint receivers/simple - * @method splunkjs.Service - */log:function(event,params,callback){cov_1ks4ntaci2().f[29]++;cov_1ks4ntaci2().s[85]++;if((cov_1ks4ntaci2().b[24][0]++,!callback)&&(cov_1ks4ntaci2().b[24][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[23][0]++;cov_1ks4ntaci2().s[86]++;callback=params;cov_1ks4ntaci2().s[87]++;params={};}else{cov_1ks4ntaci2().b[23][1]++;}cov_1ks4ntaci2().s[88]++;callback=(cov_1ks4ntaci2().b[25][0]++,callback)||(cov_1ks4ntaci2().b[25][1]++,function(){cov_1ks4ntaci2().f[30]++;});cov_1ks4ntaci2().s[89]++;params=(cov_1ks4ntaci2().b[26][0]++,params)||(cov_1ks4ntaci2().b[26][1]++,{});// If the event is a JSON object, convert it to a string. -cov_1ks4ntaci2().s[90]++;if(utils.isObject(event)){cov_1ks4ntaci2().b[27][0]++;cov_1ks4ntaci2().s[91]++;event=JSON.stringify(event);}else{cov_1ks4ntaci2().b[27][1]++;}var path=(cov_1ks4ntaci2().s[92]++,this.paths.submitEvent);var method=(cov_1ks4ntaci2().s[93]++,"POST");var headers=(cov_1ks4ntaci2().s[94]++,{"Content-Type":"text/plain"});var body=(cov_1ks4ntaci2().s[95]++,event);var get=(cov_1ks4ntaci2().s[96]++,params);var post=(cov_1ks4ntaci2().s[97]++,{});var req=(cov_1ks4ntaci2().s[98]++,this.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[31]++;cov_1ks4ntaci2().s[99]++;if(err){cov_1ks4ntaci2().b[28][0]++;cov_1ks4ntaci2().s[100]++;callback(err);}else{cov_1ks4ntaci2().b[28][1]++;cov_1ks4ntaci2().s[101]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[102]++;return req;}});/** - * Provides a base definition for a Splunk endpoint, which is a combination of - * a specific service and path. Provides convenience methods for GET, POST, and - * DELETE operations used in splunkjs, automatically preparing the path correctly - * and allowing for relative calls. - * - * @class splunkjs.Service.Endpoint - */cov_1ks4ntaci2().s[103]++;root.Endpoint=Class.extend({/** - * Constructor for `splunkjs.Service.Endpoint`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} qualifiedPath A fully-qualified relative endpoint path (for example, "/services/search/jobs"). - * @return {splunkjs.Service.Endpoint} A new `splunkjs.Service.Endpoint` instance. - * - * @method splunkjs.Service.Endpoint - */init:function(service,qualifiedPath){cov_1ks4ntaci2().f[32]++;cov_1ks4ntaci2().s[104]++;if(!service){cov_1ks4ntaci2().b[29][0]++;cov_1ks4ntaci2().s[105]++;throw new Error("Passed in a null Service.");}else{cov_1ks4ntaci2().b[29][1]++;}cov_1ks4ntaci2().s[106]++;if(!qualifiedPath){cov_1ks4ntaci2().b[30][0]++;cov_1ks4ntaci2().s[107]++;throw new Error("Passed in an empty path.");}else{cov_1ks4ntaci2().b[30][1]++;}cov_1ks4ntaci2().s[108]++;this.service=service;cov_1ks4ntaci2().s[109]++;this.qualifiedPath=qualifiedPath;// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[110]++;this.get=utils.bind(this,this.get);// this.get_v2 = utils.bind(this, this.get_v2); -cov_1ks4ntaci2().s[111]++;this.post=utils.bind(this,this.post);cov_1ks4ntaci2().s[112]++;this.del=utils.bind(this,this.del);},/** - * Performs a relative GET request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456/results?offset=1 - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.get("results", {offset: 1}, function() { console.log("DONE"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the query string. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */get:function(relpath,params,callback){cov_1ks4ntaci2().f[33]++;var url=(cov_1ks4ntaci2().s[113]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[114]++;if(relpath){cov_1ks4ntaci2().b[31][0]++;cov_1ks4ntaci2().s[115]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[31][1]++;}cov_1ks4ntaci2().s[116]++;return this.service.get(url,params,callback);},get_v2:function(relpath,params){cov_1ks4ntaci2().f[34]++;var url=(cov_1ks4ntaci2().s[117]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[118]++;if(relpath){cov_1ks4ntaci2().b[32][0]++;cov_1ks4ntaci2().s[119]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[32][1]++;}cov_1ks4ntaci2().s[120]++;return this.service.get_v2(url,params);},/** - * Performs a relative POST request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456/control - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.post("control", {action: "cancel"}, function() { console.log("CANCELLED"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the body. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */post:function(relpath,params,callback){cov_1ks4ntaci2().f[35]++;var url=(cov_1ks4ntaci2().s[121]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[122]++;if(relpath){cov_1ks4ntaci2().b[33][0]++;cov_1ks4ntaci2().s[123]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[33][1]++;}cov_1ks4ntaci2().s[124]++;return this.service.post(url,params,callback);},/** - * Performs a relative DELETE request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456 - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.delete("", {}, function() { console.log("DELETED"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the query string. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */del:function(relpath,params,callback){cov_1ks4ntaci2().f[36]++;var url=(cov_1ks4ntaci2().s[125]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[126]++;if(relpath){cov_1ks4ntaci2().b[34][0]++;cov_1ks4ntaci2().s[127]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[34][1]++;}cov_1ks4ntaci2().s[128]++;return this.service.del(url,params,callback);}});/** - * Provides a base definition for a Splunk resource (for example, an entity - * such as an index or search job, or a collection of entities). Provides - * basic methods for handling Splunk resources, such as validation and - * accessing properties. - * - * This class should not be used directly because most methods are meant to be overridden. - * - * @class splunkjs.Service.Resource - * @extends splunkjs.Service.Endpoint - */cov_1ks4ntaci2().s[129]++;root.Resource=root.Endpoint.extend({/** - * Constructor for `splunkjs.Service.Resource`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Resource} A new `splunkjs.Service.Resource` instance. - * - * @method splunkjs.Service.Resource - */init:function(service,path,namespace){cov_1ks4ntaci2().f[37]++;var fullpath=(cov_1ks4ntaci2().s[130]++,service.fullpath(path,namespace));cov_1ks4ntaci2().s[131]++;this._super(service,fullpath);cov_1ks4ntaci2().s[132]++;this.namespace=namespace;cov_1ks4ntaci2().s[133]++;this._properties={};cov_1ks4ntaci2().s[134]++;this._state={};// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[135]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[136]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[137]++;this.properties=utils.bind(this,this.properties);cov_1ks4ntaci2().s[138]++;this.state=utils.bind(this,this.state);cov_1ks4ntaci2().s[139]++;this.path=utils.bind(this,this.path);},/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Resource - */path:function(){cov_1ks4ntaci2().f[38]++;cov_1ks4ntaci2().s[140]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Loads the resource and stores the properties. - * - * @param {Object} properties The properties for this resource. - * - * @method splunkjs.Service.Resource - * @protected - */_load:function(properties){cov_1ks4ntaci2().f[39]++;cov_1ks4ntaci2().s[141]++;this._properties=(cov_1ks4ntaci2().b[35][0]++,properties)||(cov_1ks4ntaci2().b[35][1]++,{});cov_1ks4ntaci2().s[142]++;this._state=(cov_1ks4ntaci2().b[36][0]++,properties)||(cov_1ks4ntaci2().b[36][1]++,{});},/** - * Refreshes the resource by fetching the object from the server - * and loading it. - * - * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. - * - * @method splunkjs.Service.Resource - * @protected - */fetch:function(callback){cov_1ks4ntaci2().f[40]++;cov_1ks4ntaci2().s[143]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Retrieves the current properties for this resource. - * - * @return {Object} The properties. - * - * @method splunkjs.Service.Resource - */properties:function(){cov_1ks4ntaci2().f[41]++;cov_1ks4ntaci2().s[144]++;return this._properties;},/** - * Retrieves the current full state (properties and metadata) of this resource. - * - * @return {Object} The current full state of this resource. - * - * @method splunkjs.Service.Resource - */state:function(){cov_1ks4ntaci2().f[42]++;cov_1ks4ntaci2().s[145]++;return this._state;}});/** - * Defines a base class for a Splunk entity, which is a well-defined construct - * with certain operations (such as "properties", "update", and "delete"). - * Entities include search jobs, indexes, inputs, apps, and more. - * - * Provides basic methods for working with Splunk entities, such as fetching and - * updating them. - * - * @class splunkjs.Service.Entity - * @extends splunkjs.Service.Resource - */cov_1ks4ntaci2().s[146]++;root.Entity=root.Resource.extend({/** - * A static property that indicates whether to call `fetch` after an - * update to get the updated entity. By default, the entity is not - * fetched because the endpoint returns (echoes) the updated entity. - * - * @method splunkjs.Service.Entity - */fetchOnUpdate:false,/** - * Constructor for `splunkjs.Service.Entity`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. - * - * @method splunkjs.Service.Entity - */init:function(service,path,namespace){cov_1ks4ntaci2().f[43]++;cov_1ks4ntaci2().s[147]++;this._super(service,path,namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[148]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[149]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[150]++;this.remove=utils.bind(this,this.remove);cov_1ks4ntaci2().s[151]++;this.update=utils.bind(this,this.update);cov_1ks4ntaci2().s[152]++;this.fields=utils.bind(this,this.fields);cov_1ks4ntaci2().s[153]++;this.links=utils.bind(this,this.links);cov_1ks4ntaci2().s[154]++;this.acl=utils.bind(this,this.acl);cov_1ks4ntaci2().s[155]++;this.author=utils.bind(this,this.author);cov_1ks4ntaci2().s[156]++;this.updated=utils.bind(this,this.updated);cov_1ks4ntaci2().s[157]++;this.published=utils.bind(this,this.published);cov_1ks4ntaci2().s[158]++;this.enable=utils.bind(this,this.enable);cov_1ks4ntaci2().s[159]++;this.disable=utils.bind(this,this.disable);cov_1ks4ntaci2().s[160]++;this.reload=utils.bind(this,this.reload);// Initial values -cov_1ks4ntaci2().s[161]++;this._properties={};cov_1ks4ntaci2().s[162]++;this._fields={};cov_1ks4ntaci2().s[163]++;this._acl={};cov_1ks4ntaci2().s[164]++;this._links={};},/** - * Loads the entity and stores the properties. - * - * @param {Object} properties The properties for this entity. - * - * @method splunkjs.Service.Entity - * @protected - */_load:function(properties){cov_1ks4ntaci2().f[44]++;cov_1ks4ntaci2().s[165]++;properties=utils.isArray(properties)?(cov_1ks4ntaci2().b[37][0]++,properties[0]):(cov_1ks4ntaci2().b[37][1]++,properties);// Initialize the properties to -// empty values -cov_1ks4ntaci2().s[166]++;properties=(cov_1ks4ntaci2().b[38][0]++,properties)||(cov_1ks4ntaci2().b[38][1]++,{content:{},fields:{},acl:{},links:{}});cov_1ks4ntaci2().s[167]++;this._super(properties);// Take out the entity-specific content -cov_1ks4ntaci2().s[168]++;this._properties=(cov_1ks4ntaci2().b[39][0]++,properties.content)||(cov_1ks4ntaci2().b[39][1]++,{});cov_1ks4ntaci2().s[169]++;this._fields=(cov_1ks4ntaci2().b[40][0]++,properties.fields)||(cov_1ks4ntaci2().b[40][1]++,this._fields)||(cov_1ks4ntaci2().b[40][2]++,{});cov_1ks4ntaci2().s[170]++;this._acl=(cov_1ks4ntaci2().b[41][0]++,properties.acl)||(cov_1ks4ntaci2().b[41][1]++,{});cov_1ks4ntaci2().s[171]++;this._links=(cov_1ks4ntaci2().b[42][0]++,properties.links)||(cov_1ks4ntaci2().b[42][1]++,{});cov_1ks4ntaci2().s[172]++;this._author=(cov_1ks4ntaci2().b[43][0]++,properties.author)||(cov_1ks4ntaci2().b[43][1]++,null);cov_1ks4ntaci2().s[173]++;this._updated=(cov_1ks4ntaci2().b[44][0]++,properties.updated)||(cov_1ks4ntaci2().b[44][1]++,null);cov_1ks4ntaci2().s[174]++;this._published=(cov_1ks4ntaci2().b[45][0]++,properties.published)||(cov_1ks4ntaci2().b[45][1]++,null);},/** - * Retrieves the fields information for this entity, indicating which - * fields are wildcards, required, and optional. - * - * @return {Object} The fields information. - * - * @method splunkjs.Service.Entity - */fields:function(){cov_1ks4ntaci2().f[45]++;cov_1ks4ntaci2().s[175]++;return this._fields;},/** - * Retrieves the access control list (ACL) information for this entity, - * which contains the permissions for accessing the entity. - * - * @return {Object} The ACL. - * - * @method splunkjs.Service.Entity - */acl:function(){cov_1ks4ntaci2().f[46]++;cov_1ks4ntaci2().s[176]++;return this._acl;},/** - * Retrieves the links information for this entity, which is the URI of - * the entity relative to the management port of a Splunk instance. - * - * @return {Object} The links information. - * - * @method splunkjs.Service.Entity - */links:function(){cov_1ks4ntaci2().f[47]++;cov_1ks4ntaci2().s[177]++;return this._links;},/** - * Retrieves the author information for this entity. - * - * @return {String} The author. - * - * @method splunkjs.Service.Entity - */author:function(){cov_1ks4ntaci2().f[48]++;cov_1ks4ntaci2().s[178]++;return this._author;},/** - * Retrieves the updated time for this entity. - * - * @return {String} The updated time. - * - * @method splunkjs.Service.Entity - */updated:function(){cov_1ks4ntaci2().f[49]++;cov_1ks4ntaci2().s[179]++;return this._updated;},/** - * Retrieves the published time for this entity. - * - * @return {String} The published time. - * - * @method splunkjs.Service.Entity - */published:function(){cov_1ks4ntaci2().f[50]++;cov_1ks4ntaci2().s[180]++;return this._published;},/** - * Refreshes the entity by fetching the object from the server and - * loading it. - * - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `count` (_integer_): The maximum number of items to return. - * - `offset` (_integer_): The offset of the first item to return. - * - `search` (_string_): The search query to filter responses. - * - `sort_dir` (_string_): The direction to sort returned items: “asc” or “desc”. - * - `sort_key` (_string_): The field to use for sorting (optional). - * - `sort_mode` (_string_): The collating sequence for sorting returned items: “auto”, “alpha”, “alpha_case”, or “num”. - * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. - * - * @method splunkjs.Service.Entity - */fetch:function(options,callback){cov_1ks4ntaci2().f[51]++;cov_1ks4ntaci2().s[181]++;if((cov_1ks4ntaci2().b[47][0]++,!callback)&&(cov_1ks4ntaci2().b[47][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[46][0]++;cov_1ks4ntaci2().s[182]++;callback=options;cov_1ks4ntaci2().s[183]++;options={};}else{cov_1ks4ntaci2().b[46][1]++;}cov_1ks4ntaci2().s[184]++;callback=(cov_1ks4ntaci2().b[48][0]++,callback)||(cov_1ks4ntaci2().b[48][1]++,function(){cov_1ks4ntaci2().f[52]++;});cov_1ks4ntaci2().s[185]++;options=(cov_1ks4ntaci2().b[49][0]++,options)||(cov_1ks4ntaci2().b[49][1]++,{});var that=(cov_1ks4ntaci2().s[186]++,this);cov_1ks4ntaci2().s[187]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[53]++;cov_1ks4ntaci2().s[188]++;if(err){cov_1ks4ntaci2().b[50][0]++;cov_1ks4ntaci2().s[189]++;callback(err);}else{cov_1ks4ntaci2().b[50][1]++;cov_1ks4ntaci2().s[190]++;that._load(response.data?(cov_1ks4ntaci2().b[51][0]++,response.data.entry):(cov_1ks4ntaci2().b[51][1]++,null));cov_1ks4ntaci2().s[191]++;callback(null,that);}});},/** - * Deletes the entity from the server. - * - * @param {Function} callback A function to call when the object is deleted: `(err)`. - * - * @method splunkjs.Service.Entity - * @protected - */remove:function(callback){cov_1ks4ntaci2().f[54]++;cov_1ks4ntaci2().s[192]++;callback=(cov_1ks4ntaci2().b[52][0]++,callback)||(cov_1ks4ntaci2().b[52][1]++,function(){cov_1ks4ntaci2().f[55]++;});var that=(cov_1ks4ntaci2().s[193]++,this);cov_1ks4ntaci2().s[194]++;return this.del("",{},function(err){cov_1ks4ntaci2().f[56]++;cov_1ks4ntaci2().s[195]++;callback(err);});},/** - * Updates the entity on the server. - * - * @param {Object} props The properties to update the object with. - * @param {Function} callback A function to call when the object is updated: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */update:function(props,callback){cov_1ks4ntaci2().f[57]++;cov_1ks4ntaci2().s[196]++;callback=(cov_1ks4ntaci2().b[53][0]++,callback)||(cov_1ks4ntaci2().b[53][1]++,function(){cov_1ks4ntaci2().f[58]++;});cov_1ks4ntaci2().s[197]++;if(props.hasOwnProperty("name")){cov_1ks4ntaci2().b[54][0]++;cov_1ks4ntaci2().s[198]++;throw new Error("Cannot set 'name' field in 'update'");}else{cov_1ks4ntaci2().b[54][1]++;}var that=(cov_1ks4ntaci2().s[199]++,this);var req=(cov_1ks4ntaci2().s[200]++,this.post("",props,function(err,response){cov_1ks4ntaci2().f[59]++;cov_1ks4ntaci2().s[201]++;if((cov_1ks4ntaci2().b[56][0]++,!err)&&(cov_1ks4ntaci2().b[56][1]++,!that.fetchOnUpdate)){cov_1ks4ntaci2().b[55][0]++;cov_1ks4ntaci2().s[202]++;that._load(response.data.entry);cov_1ks4ntaci2().s[203]++;callback(err,that);}else{cov_1ks4ntaci2().b[55][1]++;cov_1ks4ntaci2().s[204]++;if((cov_1ks4ntaci2().b[58][0]++,!err)&&(cov_1ks4ntaci2().b[58][1]++,that.fetchOnUpdate)){cov_1ks4ntaci2().b[57][0]++;cov_1ks4ntaci2().s[205]++;that.fetch(function(){cov_1ks4ntaci2().f[60]++;cov_1ks4ntaci2().s[206]++;if(req.wasAborted){cov_1ks4ntaci2().b[59][0]++;cov_1ks4ntaci2().s[207]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[59][1]++;cov_1ks4ntaci2().s[208]++;callback.apply(null,arguments);}});}else{cov_1ks4ntaci2().b[57][1]++;cov_1ks4ntaci2().s[209]++;callback(err,that);}}}));cov_1ks4ntaci2().s[210]++;return req;},/** - * Disables the entity on the server. - * - * @param {Function} callback A function to call when the object is disabled: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */disable:function(callback){cov_1ks4ntaci2().f[61]++;cov_1ks4ntaci2().s[211]++;callback=(cov_1ks4ntaci2().b[60][0]++,callback)||(cov_1ks4ntaci2().b[60][1]++,function(){cov_1ks4ntaci2().f[62]++;});var that=(cov_1ks4ntaci2().s[212]++,this);cov_1ks4ntaci2().s[213]++;this.post("disable",{},function(err,response){cov_1ks4ntaci2().f[63]++;cov_1ks4ntaci2().s[214]++;if(err){cov_1ks4ntaci2().b[61][0]++;cov_1ks4ntaci2().s[215]++;callback(err);}else{cov_1ks4ntaci2().b[61][1]++;cov_1ks4ntaci2().s[216]++;callback(null,that);}});},/** - * Enables the entity on the server. - * - * @param {Function} callback A function to call when the object is enabled: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */enable:function(callback){cov_1ks4ntaci2().f[64]++;cov_1ks4ntaci2().s[217]++;callback=(cov_1ks4ntaci2().b[62][0]++,callback)||(cov_1ks4ntaci2().b[62][1]++,function(){cov_1ks4ntaci2().f[65]++;});var that=(cov_1ks4ntaci2().s[218]++,this);cov_1ks4ntaci2().s[219]++;this.post("enable",{},function(err,response){cov_1ks4ntaci2().f[66]++;cov_1ks4ntaci2().s[220]++;if(err){cov_1ks4ntaci2().b[63][0]++;cov_1ks4ntaci2().s[221]++;callback(err);}else{cov_1ks4ntaci2().b[63][1]++;cov_1ks4ntaci2().s[222]++;callback(null,that);}});},/** - * Reloads the entity on the server. - * - * @param {Function} callback A function to call when the object is reloaded: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */reload:function(callback){cov_1ks4ntaci2().f[67]++;cov_1ks4ntaci2().s[223]++;callback=(cov_1ks4ntaci2().b[64][0]++,callback)||(cov_1ks4ntaci2().b[64][1]++,function(){cov_1ks4ntaci2().f[68]++;});var that=(cov_1ks4ntaci2().s[224]++,this);cov_1ks4ntaci2().s[225]++;this.post("_reload",{},function(err,response){cov_1ks4ntaci2().f[69]++;cov_1ks4ntaci2().s[226]++;if(err){cov_1ks4ntaci2().b[65][0]++;cov_1ks4ntaci2().s[227]++;callback(err);}else{cov_1ks4ntaci2().b[65][1]++;cov_1ks4ntaci2().s[228]++;callback(null,that);}});}});/** - * Defines a base class for a Splunk collection, which is a well-defined construct - * that provides basic methods for working with collections of entities, such as - * creating and listing entities. - * - * @class splunkjs.Service.Collection - * @extends splunkjs.Service.Resource - */cov_1ks4ntaci2().s[229]++;root.Collection=root.Resource.extend({/** - * A static property that indicates whether to call `fetch` after an - * entity has been created. By default, the entity is not fetched - * because the endpoint returns (echoes) the new entity. - - * @method splunkjs.Service.Collection - */fetchOnEntityCreation:false,/** - * Constructor for `splunkjs.Service.Collection`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Collection} A new `splunkjs.Service.Collection` instance. - * - * @method splunkjs.Service.Collection - */init:function(service,path,namespace){cov_1ks4ntaci2().f[70]++;cov_1ks4ntaci2().s[230]++;this._super(service,path,namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[231]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[232]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[233]++;this.create=utils.bind(this,this.create);cov_1ks4ntaci2().s[234]++;this.list=utils.bind(this,this.list);cov_1ks4ntaci2().s[235]++;this.item=utils.bind(this,this.item);cov_1ks4ntaci2().s[236]++;this.instantiateEntity=utils.bind(this,this.instantiateEntity);// Initial values -cov_1ks4ntaci2().s[237]++;this._entities=[];cov_1ks4ntaci2().s[238]++;this._entitiesByName={};cov_1ks4ntaci2().s[239]++;this._properties={};cov_1ks4ntaci2().s[240]++;this._paging={};cov_1ks4ntaci2().s[241]++;this._links={};},/** - * Creates a local instance of an entity. - * - * @param {Object} props The properties for this entity. - * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. - * - * @method splunkjs.Service.Collection - */instantiateEntity:function(props){cov_1ks4ntaci2().f[71]++;cov_1ks4ntaci2().s[242]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Loads the collection and properties, and creates a map of entity - * names to entity IDs (for retrieval purposes). - * - * @param {Object} properties The properties for this collection. - * - * @method splunkjs.Service.Collection - * @private - */_load:function(properties){cov_1ks4ntaci2().f[72]++;cov_1ks4ntaci2().s[243]++;this._super(properties);var entities=(cov_1ks4ntaci2().s[244]++,[]);var entitiesByName=(cov_1ks4ntaci2().s[245]++,{});var entityPropertyList=(cov_1ks4ntaci2().s[246]++,(cov_1ks4ntaci2().b[66][0]++,properties.entry)||(cov_1ks4ntaci2().b[66][1]++,[]));cov_1ks4ntaci2().s[247]++;for(var i=(cov_1ks4ntaci2().s[248]++,0);i1)&&(cov_1ks4ntaci2().b[90][1]++,!namespace)){cov_1ks4ntaci2().b[89][0]++;cov_1ks4ntaci2().s[302]++;// If there is more than one entity and we didn't -// specify a namespace, then we return an error -// saying the match is ambiguous -throw new Error("Ambiguous match for name '"+id+"'");}else{cov_1ks4ntaci2().b[89][1]++;cov_1ks4ntaci2().s[303]++;// There is more than one entity, and we do have -// a namespace, so we try and find it -for(var i=(cov_1ks4ntaci2().s[304]++,0);iPagination and Filtering options in the REST API documentation. - * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. - * - * @endpoint saved/searches/{name}/history - * @method splunkjs.Service.SavedSearch - */history:function(options,callback){cov_1ks4ntaci2().f[97]++;cov_1ks4ntaci2().s[358]++;if((cov_1ks4ntaci2().b[106][0]++,!callback)&&(cov_1ks4ntaci2().b[106][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[105][0]++;cov_1ks4ntaci2().s[359]++;callback=options;cov_1ks4ntaci2().s[360]++;options={};}else{cov_1ks4ntaci2().b[105][1]++;}cov_1ks4ntaci2().s[361]++;callback=(cov_1ks4ntaci2().b[107][0]++,callback)||(cov_1ks4ntaci2().b[107][1]++,function(){cov_1ks4ntaci2().f[98]++;});cov_1ks4ntaci2().s[362]++;options=(cov_1ks4ntaci2().b[108][0]++,options)||(cov_1ks4ntaci2().b[108][1]++,{});var that=(cov_1ks4ntaci2().s[363]++,this);cov_1ks4ntaci2().s[364]++;return this.get("history",options,function(err,response){cov_1ks4ntaci2().f[99]++;cov_1ks4ntaci2().s[365]++;if(err){cov_1ks4ntaci2().b[109][0]++;cov_1ks4ntaci2().s[366]++;callback(err);cov_1ks4ntaci2().s[367]++;return;}else{cov_1ks4ntaci2().b[109][1]++;}var jobs=(cov_1ks4ntaci2().s[368]++,[]);var data=(cov_1ks4ntaci2().s[369]++,(cov_1ks4ntaci2().b[110][0]++,response.data.entry)||(cov_1ks4ntaci2().b[110][1]++,[]));cov_1ks4ntaci2().s[370]++;for(var i=(cov_1ks4ntaci2().s[371]++,0);iSaved search parameters on Splunk Developer Portal. - * @param {Function} callback A function to call when the object is updated: `(err, entity)`. - * - * @method splunkjs.Service.SavedSearch - */update:function(params,callback){cov_1ks4ntaci2().f[103]++;cov_1ks4ntaci2().s[382]++;params=(cov_1ks4ntaci2().b[112][0]++,params)||(cov_1ks4ntaci2().b[112][1]++,{});cov_1ks4ntaci2().s[383]++;if(!params.search){cov_1ks4ntaci2().b[113][0]++;var update=(cov_1ks4ntaci2().s[384]++,this._super);var req=(cov_1ks4ntaci2().s[385]++,this.fetch(function(err,search){cov_1ks4ntaci2().f[104]++;cov_1ks4ntaci2().s[386]++;if(err){cov_1ks4ntaci2().b[114][0]++;cov_1ks4ntaci2().s[387]++;callback(err);}else{cov_1ks4ntaci2().b[114][1]++;cov_1ks4ntaci2().s[388]++;params.search=search.properties().search;cov_1ks4ntaci2().s[389]++;update.call(search,params,function(){cov_1ks4ntaci2().f[105]++;cov_1ks4ntaci2().s[390]++;if(req.wasAborted){cov_1ks4ntaci2().b[115][0]++;cov_1ks4ntaci2().s[391]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[115][1]++;cov_1ks4ntaci2().s[392]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[393]++;return req;}else{cov_1ks4ntaci2().b[113][1]++;cov_1ks4ntaci2().s[394]++;return this._super(params,callback);}}});/** - * Represents a collection of saved searches. You can create and list saved - * searches using this collection container, or get a specific saved search. - * - * - * @endpoint saved/searches - * @class splunkjs.Service.SavedSearches - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[395]++;root.SavedSearches=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.SavedSearches - */path:function(){cov_1ks4ntaci2().f[106]++;cov_1ks4ntaci2().s[396]++;return Paths.savedSearches;},/** - * Creates a local instance of a saved search. - * - * @param {Object} props The properties for the new saved search. For a list of available parameters, see Saved search parameters on Splunk Developer Portal. - * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.SavedSearch` instance. - * - * @method splunkjs.Service.SavedSearches - */instantiateEntity:function(props){cov_1ks4ntaci2().f[107]++;var entityNamespace=(cov_1ks4ntaci2().s[397]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[398]++;return new root.SavedSearch(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.SavedSearches`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.SavedSearches} A new `splunkjs.Service.SavedSearches` instance. - * - * @method splunkjs.Service.SavedSearches - */init:function(service,namespace){cov_1ks4ntaci2().f[108]++;cov_1ks4ntaci2().s[399]++;this._super(service,this.path(),namespace);}});/** - * Represents a specific storage password, which you can then view, modify, and - * remove. - * - * @endpoint storage/passwords/{name} - * @class splunkjs.Service.StoragePassword - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[400]++;root.StoragePassword=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.StoragePassword - */path:function(){cov_1ks4ntaci2().f[109]++;cov_1ks4ntaci2().s[401]++;return Paths.storagePasswords+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.StoragePassword`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new storage password. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePassword} A new `splunkjs.Service.StoragePassword` instance. - * - * @method splunkjs.Service.StoragePassword - */init:function(service,name,namespace){cov_1ks4ntaci2().f[110]++;cov_1ks4ntaci2().s[402]++;this.name=name;cov_1ks4ntaci2().s[403]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of storage passwords. You can create and list storage - * passwords using this collection container, or get a specific storage password. - * - * @endpoint storage/passwords - * @class splunkjs.Service.StoragePasswords - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[404]++;root.StoragePasswords=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.StoragePasswords - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.StoragePasswords - */path:function(){cov_1ks4ntaci2().f[111]++;cov_1ks4ntaci2().s[405]++;return Paths.storagePasswords;},/** - * Creates a local instance of a storage password. - * - * @param {Object} props The properties for the new storage password. For a list of available parameters, - * see - * POST storage/passwords on Splunk Developer Portal. - * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.StoragePassword` instance. - * - * @method splunkjs.Service.StoragePasswords - */instantiateEntity:function(props){cov_1ks4ntaci2().f[112]++;var entityNamespace=(cov_1ks4ntaci2().s[406]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[407]++;return new root.StoragePassword(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.StoragePasswords`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePasswords} A new `splunkjs.Service.StoragePasswords` instance. - * - * @method splunkjs.Service.StoragePasswords - */init:function(service,namespace){cov_1ks4ntaci2().f[113]++;cov_1ks4ntaci2().s[408]++;this._super(service,this.path(),namespace);}});/** - * Represents a fired alert. - * You can retrieve several of the fired alert's properties by - * the corresponding function name. - * - * @endpoint alerts/fired_alerts/{name} - * @class splunkjs.Service.FiredAlert - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[409]++;root.FiredAlert=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.FiredAlert - */path:function(){cov_1ks4ntaci2().f[114]++;cov_1ks4ntaci2().s[410]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** - * Returns this alert's actions (such as notifying by email, running a - * script, adding to RSS, tracking in Alert Manager, and enabling - * summary indexing). - * - * @return {Array} of actions, an empty {Array} if no actions - * @method splunkjs.Service.FiredAlert - */actions:function(){cov_1ks4ntaci2().f[115]++;cov_1ks4ntaci2().s[411]++;return(cov_1ks4ntaci2().b[116][0]++,this.properties().actions)||(cov_1ks4ntaci2().b[116][1]++,[]);},/** - * Returns this alert's type. - * - * @return {String} the alert's type. - * @method splunkjs.Service.FiredAlert - */alertType:function(){cov_1ks4ntaci2().f[116]++;cov_1ks4ntaci2().s[412]++;return(cov_1ks4ntaci2().b[117][0]++,this.properties().alert_type)||(cov_1ks4ntaci2().b[117][1]++,null);},/** - * Indicates whether the result is a set of events (digest) or a single - * event (per result). - * - * This method is available in Splunk 4.3 and later. - * - * @return {Boolean} true if the result is a digest, false if per result - * @method splunkjs.Service.FiredAlert - */isDigestMode:function(){cov_1ks4ntaci2().f[117]++;cov_1ks4ntaci2().s[413]++;// Convert this property to a Boolean -return!!this.properties().digest_mode;},/** - * Returns the rendered expiration time for this alert. - * - * This method is available in Splunk 4.3 and later. - * - * @return {String} - * @method splunkjs.Service.FiredAlert - */expirationTime:function(){cov_1ks4ntaci2().f[118]++;cov_1ks4ntaci2().s[414]++;return(cov_1ks4ntaci2().b[118][0]++,this.properties().expiration_time_rendered)||(cov_1ks4ntaci2().b[118][1]++,null);},/** - * Returns the saved search for this alert. - * - * @return {String} The saved search name, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */savedSearchName:function(){cov_1ks4ntaci2().f[119]++;cov_1ks4ntaci2().s[415]++;return(cov_1ks4ntaci2().b[119][0]++,this.properties().savedsearch_name)||(cov_1ks4ntaci2().b[119][1]++,null);},/** - * Returns this alert's severity on a scale of 1 to 10, with 1 being the - * highest severity. - * - * @return {Number} this alert's severity, -1 if not specified - * @method splunkjs.Service.FiredAlert - */severity:function(){cov_1ks4ntaci2().f[120]++;cov_1ks4ntaci2().s[416]++;return(cov_1ks4ntaci2().b[120][0]++,parseInt(this.properties().severity,10))||(cov_1ks4ntaci2().b[120][1]++,-1);},/** - * Returns this alert's search ID (SID). - * - * @return {String} This alert's SID, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */sid:function(){cov_1ks4ntaci2().f[121]++;cov_1ks4ntaci2().s[417]++;return(cov_1ks4ntaci2().b[121][0]++,this.properties().sid)||(cov_1ks4ntaci2().b[121][1]++,null);},/** - * Returns the time this alert was triggered. - * - * @return {Number} This alert's trigger time, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */triggerTime:function(){cov_1ks4ntaci2().f[122]++;cov_1ks4ntaci2().s[418]++;return(cov_1ks4ntaci2().b[122][0]++,this.properties().trigger_time)||(cov_1ks4ntaci2().b[122][1]++,null);},/** - * Returns this alert's rendered trigger time. - * - * This method is available in Splunk 4.3 and later. - * - * @return {String} This alert's rendered trigger time, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */triggerTimeRendered:function(){cov_1ks4ntaci2().f[123]++;cov_1ks4ntaci2().s[419]++;return(cov_1ks4ntaci2().b[123][0]++,this.properties().trigger_time_rendered)||(cov_1ks4ntaci2().b[123][1]++,null);},/** - * Returns the count of triggered alerts. - * - * This method is available in Splunk 4.3 and later. - * - * @return {Number} The number of triggered alerts, or -1 if not specified. - * @method splunkjs.Service.FiredAlert - */triggeredAlertCount:function(){cov_1ks4ntaci2().f[124]++;cov_1ks4ntaci2().s[420]++;return(cov_1ks4ntaci2().b[124][0]++,parseInt(this.properties().triggered_alerts,10))||(cov_1ks4ntaci2().b[124][1]++,-1);},/** - * Constructor for `splunkjs.Service.FiredAlert`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new alert group. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.FiredAlert} A new `splunkjs.Service.FiredAlert` instance. - * - * @method splunkjs.Service.FiredAlert - */init:function(service,name,namespace){cov_1ks4ntaci2().f[125]++;cov_1ks4ntaci2().s[421]++;this.name=name;cov_1ks4ntaci2().s[422]++;this._super(service,this.path(),namespace);}});/** - * Represents a specific alert group, which you can then view and - * remove. - * - * @endpoint alerts/fired_alerts/{name} - * @class splunkjs.Service.FiredAlertGroup - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[423]++;root.FiredAlertGroup=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.FiredAlertGroup - */path:function(){cov_1ks4ntaci2().f[126]++;cov_1ks4ntaci2().s[424]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** - * Returns the `triggered_alert_count` property, the count - * of triggered alerts. - * - * @return {Number} the count of triggered alerts - * - * @method splunkjs.Service.FiredAlertGroup - */count:function(){cov_1ks4ntaci2().f[127]++;cov_1ks4ntaci2().s[425]++;return(cov_1ks4ntaci2().b[125][0]++,parseInt(this.properties().triggered_alert_count,10))||(cov_1ks4ntaci2().b[125][1]++,0);},/** - * Returns fired instances of this alert, which is - * a list of `splunkjs.Service.FiredAlert` instances. - * - * @example - * - * var alertGroup = service.firedAlertGroups().item("MyAlert"); - * alertGroup.list(function(err, firedAlerts, alert) { - * for(var i = 0; i < firedAlerts.length; i++) { - * console.log("Fired alert", i, ":", firedAlerts[i].sid); - * } - * }); - * - * @param {Function} callback A function to call when the fired alerts are retrieved: `(err, firedAlerts, alertGroup)`. - * - * @method splunkjs.Service.FiredAlertGroup - */list:function(options,callback){cov_1ks4ntaci2().f[128]++;cov_1ks4ntaci2().s[426]++;if((cov_1ks4ntaci2().b[127][0]++,!callback)&&(cov_1ks4ntaci2().b[127][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[126][0]++;cov_1ks4ntaci2().s[427]++;callback=options;cov_1ks4ntaci2().s[428]++;options={};}else{cov_1ks4ntaci2().b[126][1]++;}cov_1ks4ntaci2().s[429]++;callback=(cov_1ks4ntaci2().b[128][0]++,callback)||(cov_1ks4ntaci2().b[128][1]++,function(){cov_1ks4ntaci2().f[129]++;});cov_1ks4ntaci2().s[430]++;options=(cov_1ks4ntaci2().b[129][0]++,options)||(cov_1ks4ntaci2().b[129][1]++,{});var that=(cov_1ks4ntaci2().s[431]++,this);cov_1ks4ntaci2().s[432]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[130]++;cov_1ks4ntaci2().s[433]++;if(err){cov_1ks4ntaci2().b[130][0]++;cov_1ks4ntaci2().s[434]++;callback(err);cov_1ks4ntaci2().s[435]++;return;}else{cov_1ks4ntaci2().b[130][1]++;}var firedAlerts=(cov_1ks4ntaci2().s[436]++,[]);var data=(cov_1ks4ntaci2().s[437]++,(cov_1ks4ntaci2().b[131][0]++,response.data.entry)||(cov_1ks4ntaci2().b[131][1]++,[]));cov_1ks4ntaci2().s[438]++;for(var i=(cov_1ks4ntaci2().s[439]++,0);iPOST apps/local endpoint in the REST API documentation. - * @return {splunkjs.Service.Application} A new `splunkjs.Service.Application` instance. - * - * @method splunkjs.Service.Applications - */instantiateEntity:function(props){cov_1ks4ntaci2().f[145]++;cov_1ks4ntaci2().s[477]++;return new root.Application(this.service,props.name,{});},/** - * Constructor for `splunkjs.Service.Applications`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.Applications} A new `splunkjs.Service.Applications` instance. - * - * @method splunkjs.Service.Applications - */init:function(service){cov_1ks4ntaci2().f[146]++;cov_1ks4ntaci2().s[478]++;this._super(service,this.path(),{});}});/** - * Provides access to configuration information about the server. - * - * @endpoint server/info - * @class splunkjs.Service.ServerInfo - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[479]++;root.ServerInfo=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ServerInfo - */path:function(){cov_1ks4ntaci2().f[147]++;cov_1ks4ntaci2().s[480]++;return Paths.info;},/** - * Constructor for `splunkjs.Service.ServerInfo`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.ServerInfo} A new `splunkjs.Service.ServerInfo` instance. - * - * @method splunkjs.Service.ServerInfo - */init:function(service){cov_1ks4ntaci2().f[148]++;cov_1ks4ntaci2().s[481]++;this.name="server-info";cov_1ks4ntaci2().s[482]++;this._super(service,this.path(),{});}});/** - * Represents a specific Splunk user, which you can view, modify, and - * remove. - * - * @endpoint authentication/users/{name} - * @class splunkjs.Service.User - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[483]++;root.User=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.User - */path:function(){cov_1ks4ntaci2().f[149]++;cov_1ks4ntaci2().s[484]++;return Paths.users+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.User`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The Splunk username. - * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. - * - * @method splunkjs.Service.User - */init:function(service,name){cov_1ks4ntaci2().f[150]++;cov_1ks4ntaci2().s[485]++;this.name=name;cov_1ks4ntaci2().s[486]++;this._super(service,this.path(),{});}});/** - * Represents a collection of users. You can create and list users using - * this collection container, or get a specific user. - * - * @endpoint authentication/users - * @class splunkjs.Service.Users - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[487]++;root.Users=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.Users - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Users - */path:function(){cov_1ks4ntaci2().f[151]++;cov_1ks4ntaci2().s[488]++;return Paths.users;},/** - * Creates a local instance of a user. - * - * @param {Object} props The properties for this new user. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. - * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. - * - * @method splunkjs.Service.Users - */instantiateEntity:function(props){cov_1ks4ntaci2().f[152]++;cov_1ks4ntaci2().s[489]++;return new root.User(this.service,props.name,{});},/** - * Constructor for `splunkjs.Service.Users`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.Users} A new `splunkjs.Service.Users` instance. - * - * @method splunkjs.Service.Users - */init:function(service){cov_1ks4ntaci2().f[153]++;cov_1ks4ntaci2().s[490]++;this._super(service,this.path(),{});},/** - * Creates a new user. - * - * **Note:** This endpoint requires a special implementation. - * - * @param {Object} params A dictionary of properties. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the new entity: `(err, createdEntity)`. - * - * @method splunkjs.Service.Users - */create:function(params,callback){cov_1ks4ntaci2().f[154]++;cov_1ks4ntaci2().s[491]++;callback=(cov_1ks4ntaci2().b[136][0]++,callback)||(cov_1ks4ntaci2().b[136][1]++,function(){cov_1ks4ntaci2().f[155]++;});var that=(cov_1ks4ntaci2().s[492]++,this);var req=(cov_1ks4ntaci2().s[493]++,this.post("",params,function(err,response){cov_1ks4ntaci2().f[156]++;cov_1ks4ntaci2().s[494]++;if(err){cov_1ks4ntaci2().b[137][0]++;cov_1ks4ntaci2().s[495]++;callback(err);}else{cov_1ks4ntaci2().b[137][1]++;// This endpoint requires us to use the passed-in name -var props=(cov_1ks4ntaci2().s[496]++,{name:params.name});var entity=(cov_1ks4ntaci2().s[497]++,that.instantiateEntity(props));cov_1ks4ntaci2().s[498]++;entity.fetch(function(){cov_1ks4ntaci2().f[157]++;cov_1ks4ntaci2().s[499]++;if(req.wasAborted){cov_1ks4ntaci2().b[138][0]++;cov_1ks4ntaci2().s[500]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[138][1]++;cov_1ks4ntaci2().s[501]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[502]++;return req;}});/** - * Represents a specific Splunk view, which you can view, modify, and - * remove. - * - * @endpoint data/ui/views/{name} - * @class splunkjs.Service.View - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[503]++;root.View=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.View - */path:function(){cov_1ks4ntaci2().f[158]++;cov_1ks4ntaci2().s[504]++;return Paths.views+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.View`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the view. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. - * - * @method splunkjs.Service.View - */init:function(service,name,namespace){cov_1ks4ntaci2().f[159]++;cov_1ks4ntaci2().s[505]++;this.name=name;cov_1ks4ntaci2().s[506]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of views. You can create and list views using - * this collection container, or get a specific view. - * - * @endpoint data/ui/views - * @class splunkjs.Service.Views - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[507]++;root.Views=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Views - */path:function(){cov_1ks4ntaci2().f[160]++;cov_1ks4ntaci2().s[508]++;return Paths.views;},/** - * Creates a local instance of a view. - * - * @param {Object} props The properties for the new view. For a list of available parameters, see the POST scheduled/views/{name} endpoint in the REST API documentation. - * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. - * - * @method splunkjs.Service.Views - */instantiateEntity:function(props){cov_1ks4ntaci2().f[161]++;var entityNamespace=(cov_1ks4ntaci2().s[509]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[510]++;return new root.View(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.Views`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Views} A new `splunkjs.Service.Views` instance. - * - * @method splunkjs.Service.Views - */init:function(service,namespace){cov_1ks4ntaci2().f[162]++;cov_1ks4ntaci2().s[511]++;this._super(service,this.path(),namespace);}});/** - * Represents an index, which you can update and submit events to. - * - * @endpoint data/indexes/name - * @class splunkjs.Service.Index - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[512]++;root.Index=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Index - */path:function(){cov_1ks4ntaci2().f[163]++;cov_1ks4ntaci2().s[513]++;return Paths.indexes+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.Index`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the index. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. - * - * @method splunkjs.Service.Index - */init:function(service,name,namespace){cov_1ks4ntaci2().f[164]++;cov_1ks4ntaci2().s[514]++;this.name=name;cov_1ks4ntaci2().s[515]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[516]++;this.submitEvent=utils.bind(this,this.submitEvent);},/** - * Submits an event to this index. - * - * @example - * - * var index = service.indexes().item("_internal"); - * index.submitEvent("A new event", {sourcetype: "mysourcetype"}, function(err, result, index) { - * console.log("Submitted event: ", result); - * }); - * - * @param {String} event The text for this event. - * @param {Object} params A dictionary of parameters for indexing: - * - `host` (_string_): The value to populate in the host field for events from this data input. - * - `host_regex` (_string_): A regular expression used to extract the host value from each event. - * - `source` (_string_): The source value to fill in the metadata for this input's events. - * - `sourcetype` (_string_): The sourcetype to apply to events from this input. - * @param {Function} callback A function to call when the event is submitted: `(err, result, index)`. - * - * @endpoint receivers/simple?index={name} - * @method splunkjs.Service.Index - */submitEvent:function(event,params,callback){cov_1ks4ntaci2().f[165]++;cov_1ks4ntaci2().s[517]++;if((cov_1ks4ntaci2().b[140][0]++,!callback)&&(cov_1ks4ntaci2().b[140][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[139][0]++;cov_1ks4ntaci2().s[518]++;callback=params;cov_1ks4ntaci2().s[519]++;params={};}else{cov_1ks4ntaci2().b[139][1]++;}cov_1ks4ntaci2().s[520]++;callback=(cov_1ks4ntaci2().b[141][0]++,callback)||(cov_1ks4ntaci2().b[141][1]++,function(){cov_1ks4ntaci2().f[166]++;});cov_1ks4ntaci2().s[521]++;params=(cov_1ks4ntaci2().b[142][0]++,params)||(cov_1ks4ntaci2().b[142][1]++,{});// Add the index name -cov_1ks4ntaci2().s[522]++;params["index"]=this.name;var that=(cov_1ks4ntaci2().s[523]++,this);cov_1ks4ntaci2().s[524]++;return this.service.log(event,params,function(err,result){cov_1ks4ntaci2().f[167]++;cov_1ks4ntaci2().s[525]++;callback(err,result,that);});},remove:function(callback){cov_1ks4ntaci2().f[168]++;cov_1ks4ntaci2().s[526]++;if(this.service.versionCompare("5.0")<0){cov_1ks4ntaci2().b[143][0]++;cov_1ks4ntaci2().s[527]++;throw new Error("Indexes cannot be removed in Splunk 4.x");}else{cov_1ks4ntaci2().b[143][1]++;cov_1ks4ntaci2().s[528]++;return this._super(callback);}}});/** - * Represents a collection of indexes. You can create and list indexes using - * this collection container, or get a specific index. - * - * @endpoint data/indexes - * @class splunkjs.Service.Indexes - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[529]++;root.Indexes=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Indexes - */path:function(){cov_1ks4ntaci2().f[169]++;cov_1ks4ntaci2().s[530]++;return Paths.indexes;},/** - * Creates a local instance of an index. - * - * @param {Object} props The properties for the new index. For a list of available parameters, see Index parameters on Splunk Developer Portal. - * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. - * - * @method splunkjs.Service.Indexes - */instantiateEntity:function(props){cov_1ks4ntaci2().f[170]++;var entityNamespace=(cov_1ks4ntaci2().s[531]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[532]++;return new root.Index(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.Indexes`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Indexes} A new `splunkjs.Service.Indexes` instance. - * - * @method splunkjs.Service.Indexes - */init:function(service,namespace){cov_1ks4ntaci2().f[171]++;cov_1ks4ntaci2().s[533]++;this._super(service,this.path(),namespace);},/** - * Creates an index with the given name and parameters. - * - * @example - * - * var indexes = service.indexes(); - * indexes.create("NewIndex", {assureUTF8: true}, function(err, newIndex) { - * console.log("CREATED"); - * }); - * - * @param {String} name A name for this index. - * @param {Object} params A dictionary of properties. For a list of available parameters, see Index parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the new index: `(err, createdIndex)`. - * - * @endpoint data/indexes - * @method splunkjs.Service.Indexes - */create:function(name,params,callback){cov_1ks4ntaci2().f[172]++;cov_1ks4ntaci2().s[534]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[145][0]++,utils.isObject(name))&&(cov_1ks4ntaci2().b[145][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[145][2]++,!callback)){cov_1ks4ntaci2().b[144][0]++;cov_1ks4ntaci2().s[535]++;callback=params;cov_1ks4ntaci2().s[536]++;params=name;cov_1ks4ntaci2().s[537]++;name=params.name;}else{cov_1ks4ntaci2().b[144][1]++;}cov_1ks4ntaci2().s[538]++;params=(cov_1ks4ntaci2().b[146][0]++,params)||(cov_1ks4ntaci2().b[146][1]++,{});cov_1ks4ntaci2().s[539]++;params["name"]=name;cov_1ks4ntaci2().s[540]++;return this._super(params,callback);}});/** - * Represents a specific stanza, which you can update and remove, from a - * configuration file. - * - * @endpoint configs/conf-{file}/{name}` - * @class splunkjs.Service.ConfigurationStanza - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[541]++;root.ConfigurationStanza=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ConfigurationStanza - */path:function(){cov_1ks4ntaci2().f[173]++;var name=(cov_1ks4ntaci2().s[542]++,this.name==="default"?(cov_1ks4ntaci2().b[147][0]++,"_new"):(cov_1ks4ntaci2().b[147][1]++,this.name));cov_1ks4ntaci2().s[543]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.file)+"/"+encodeURIComponent(name);},/** - * Constructor for `splunkjs.Service.ConfigurationStanza`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} file The name of the configuration file. - * @param {String} name The name of the new stanza. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationStanza - */init:function(service,file,name,namespace){cov_1ks4ntaci2().f[174]++;cov_1ks4ntaci2().s[544]++;this.name=name;cov_1ks4ntaci2().s[545]++;this.file=file;cov_1ks4ntaci2().s[546]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of stanzas for a specific property file. You can - * create and list stanzas using this collection container, or get a specific - * stanza. - * - * @endpoint configs/conf-{file} - * @class splunkjs.Service.ConfigurationFile - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[547]++;root.ConfigurationFile=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ConfigurationFile - */path:function(){cov_1ks4ntaci2().f[175]++;cov_1ks4ntaci2().s[548]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.name);},/** - * Creates a local instance of the default stanza in a configuration file. - * You cannot directly update the `ConfigurationStanza` returned by this function. - * - * This is equivalent to viewing `configs/conf-{file}/_new`. - * - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationFile - */getDefaultStanza:function(){cov_1ks4ntaci2().f[176]++;cov_1ks4ntaci2().s[549]++;return new root.ConfigurationStanza(this.service,this.name,"default",this.namespace);},/** - * Creates a local instance of a stanza in a configuration file. - * - * @param {Object} props The key-value properties for the new stanza. - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationFile - */instantiateEntity:function(props){cov_1ks4ntaci2().f[177]++;var entityNamespace=(cov_1ks4ntaci2().s[550]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[551]++;return new root.ConfigurationStanza(this.service,this.name,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.ConfigurationFile`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the configuration file. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. - * - * @method splunkjs.Service.ConfigurationFile - */init:function(service,name,namespace){cov_1ks4ntaci2().f[178]++;cov_1ks4ntaci2().s[552]++;this.name=name;cov_1ks4ntaci2().s[553]++;this._super(service,this.path(),namespace);},/** - * Creates a stanza in this configuration file. - * - * @example - * - * var file = service.configurations().item("props"); - * file.create("my_stanza", function(err, newStanza) { - * console.log("CREATED"); - * }); - * - * @param {String} stanzaName A name for this stanza. - * @param {Object} values A dictionary of key-value pairs to put in this stanza. - * @param {Function} callback A function to call with the created stanza: `(err, createdStanza)`. - * - * @endpoint configs/conf-{file} - * @method splunkjs.Service.ConfigurationFile - */create:function(stanzaName,values,callback){cov_1ks4ntaci2().f[179]++;cov_1ks4ntaci2().s[554]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[149][0]++,utils.isObject(stanzaName))&&(cov_1ks4ntaci2().b[149][1]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[149][2]++,!callback)){cov_1ks4ntaci2().b[148][0]++;cov_1ks4ntaci2().s[555]++;callback=values;cov_1ks4ntaci2().s[556]++;values=stanzaName;cov_1ks4ntaci2().s[557]++;stanzaName=values.name;}else{cov_1ks4ntaci2().b[148][1]++;}cov_1ks4ntaci2().s[558]++;if((cov_1ks4ntaci2().b[151][0]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[151][1]++,!callback)){cov_1ks4ntaci2().b[150][0]++;cov_1ks4ntaci2().s[559]++;callback=values;cov_1ks4ntaci2().s[560]++;values={};}else{cov_1ks4ntaci2().b[150][1]++;}cov_1ks4ntaci2().s[561]++;values=(cov_1ks4ntaci2().b[152][0]++,values)||(cov_1ks4ntaci2().b[152][1]++,{});cov_1ks4ntaci2().s[562]++;values["name"]=stanzaName;cov_1ks4ntaci2().s[563]++;return this._super(values,callback);}});/** - * Represents a collection of configuration files. You can create and list - * configuration files using this collection container, or get a specific file. - * - * @endpoint properties - * @class splunkjs.Service.Configurations - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[564]++;root.Configurations=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.Configurations - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Configurations - */path:function(){cov_1ks4ntaci2().f[180]++;cov_1ks4ntaci2().s[565]++;return Paths.properties;},/** - * Creates a local instance of a configuration file. - * - * @param {Object} props The properties for this configuration file. - * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. - * - * @method splunkjs.Service.Configurations - */instantiateEntity:function(props){cov_1ks4ntaci2().f[181]++;cov_1ks4ntaci2().s[566]++;return new root.ConfigurationFile(this.service,props.name,this.namespace);},/** - * Constructor for `splunkjs.Service.Configurations`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Configurations} A new `splunkjs.Service.Configurations` instance. - * - * @method splunkjs.Service.Configurations - */init:function(service,namespace){cov_1ks4ntaci2().f[182]++;cov_1ks4ntaci2().s[567]++;if((cov_1ks4ntaci2().b[154][0]++,!namespace)||(cov_1ks4ntaci2().b[154][1]++,namespace.owner==="-")||(cov_1ks4ntaci2().b[154][2]++,namespace.app==="-")){cov_1ks4ntaci2().b[153][0]++;cov_1ks4ntaci2().s[568]++;throw new Error("Configurations requires a non-wildcard owner/app");}else{cov_1ks4ntaci2().b[153][1]++;}cov_1ks4ntaci2().s[569]++;this._super(service,this.path(),namespace);},/** - * Creates a configuration file. - * - * @example - * - * var configurations = service.configurations(); - * configurations.create("myprops", function(err, newFile) { - * console.log("CREATED"); - * }); - * - * @param {String} filename A name for this configuration file. - * @param {Function} callback A function to call with the new configuration file: `(err, createdFile)`. - * - * @endpoint properties - * @method splunkjs.Service.Configurations - */create:function(filename,callback){cov_1ks4ntaci2().f[183]++;cov_1ks4ntaci2().s[570]++;// If someone called us with the default style of (params, callback), -// lets make it work -if(utils.isObject(filename)){cov_1ks4ntaci2().b[155][0]++;cov_1ks4ntaci2().s[571]++;filename=filename["__conf"];}else{cov_1ks4ntaci2().b[155][1]++;}cov_1ks4ntaci2().s[572]++;callback=(cov_1ks4ntaci2().b[156][0]++,callback)||(cov_1ks4ntaci2().b[156][1]++,function(){cov_1ks4ntaci2().f[184]++;});var that=(cov_1ks4ntaci2().s[573]++,this);var req=(cov_1ks4ntaci2().s[574]++,this.post("",{__conf:filename},function(err,response){cov_1ks4ntaci2().f[185]++;cov_1ks4ntaci2().s[575]++;if(err){cov_1ks4ntaci2().b[157][0]++;cov_1ks4ntaci2().s[576]++;callback(err);}else{cov_1ks4ntaci2().b[157][1]++;var entity=(cov_1ks4ntaci2().s[577]++,new root.ConfigurationFile(that.service,filename));cov_1ks4ntaci2().s[578]++;entity.fetch(function(){cov_1ks4ntaci2().f[186]++;cov_1ks4ntaci2().s[579]++;if(req.wasAborted){cov_1ks4ntaci2().b[158][0]++;cov_1ks4ntaci2().s[580]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[158][1]++;cov_1ks4ntaci2().s[581]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[582]++;return req;},doesFileExist:async function(filename){cov_1ks4ntaci2().f[187]++;cov_1ks4ntaci2().s[583]++;try{var that=(cov_1ks4ntaci2().s[584]++,this);// 1. Fetch files list -var response=(cov_1ks4ntaci2().s[585]++,await this.get_v2("",{__conf:filename}));// 2. Filter the files -var files=(cov_1ks4ntaci2().s[586]++,response?.body?.entry?.filter(f=>{cov_1ks4ntaci2().f[188]++;cov_1ks4ntaci2().s[587]++;return f.name===filename;}));// 2. Check if the file exists -cov_1ks4ntaci2().s[588]++;if((cov_1ks4ntaci2().b[160][0]++,files)&&(cov_1ks4ntaci2().b[160][1]++,files.length==0)){cov_1ks4ntaci2().b[159][0]++;cov_1ks4ntaci2().s[589]++;return{code:"FILE_NOT_FOUND",message:`File with the name '${filename}' does not exist.`};}else{cov_1ks4ntaci2().b[159][1]++;}// 3. Create a local instance -var configurationFile=(cov_1ks4ntaci2().s[590]++,new root.ConfigurationFile(that.service,filename));// 4. Load the file content -var fetchedFile=(cov_1ks4ntaci2().s[591]++,await configurationFile.fetch_v2());cov_1ks4ntaci2().s[592]++;return{file:fetchedFile};}catch(error){cov_1ks4ntaci2().s[593]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},doesStanzaExist:async function(file,stanza){cov_1ks4ntaci2().f[189]++;cov_1ks4ntaci2().s[594]++;try{// 1. check if the stanza exists -var fetchedStanza=(cov_1ks4ntaci2().s[595]++,file.item(stanza));cov_1ks4ntaci2().s[596]++;if(!fetchedStanza){cov_1ks4ntaci2().b[161][0]++;cov_1ks4ntaci2().s[597]++;return{code:"STANZA_NOT_FOUND",message:`Stanza with the name '${stanza}' does not exist.`};}else{cov_1ks4ntaci2().b[161][1]++;cov_1ks4ntaci2().s[598]++;return{stanza:fetchedStanza};}}catch(error){cov_1ks4ntaci2().s[599]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},create_v2:async function(configs,svc,filename,stanza,keyValueMap,callback){cov_1ks4ntaci2().f[190]++;cov_1ks4ntaci2().s[600]++;callback=(cov_1ks4ntaci2().b[162][0]++,callback)||(cov_1ks4ntaci2().b[162][1]++,function(){cov_1ks4ntaci2().f[191]++;});var that=(cov_1ks4ntaci2().s[601]++,this);// 1. Check if the file exists -var doesFileExistResponse=(cov_1ks4ntaci2().s[602]++,await this.doesFileExist(filename));var configFile=(cov_1ks4ntaci2().s[603]++,doesFileExistResponse.file);// 2. If the file doesn't exist, create a new file -cov_1ks4ntaci2().s[604]++;if(!configFile){cov_1ks4ntaci2().b[163][0]++;cov_1ks4ntaci2().s[605]++;console.log(doesFileExistResponse);cov_1ks4ntaci2().s[606]++;console.log("Creating a new configuration file...");cov_1ks4ntaci2().s[607]++;that.create({__conf:filename},(err,newFile)=>{cov_1ks4ntaci2().f[192]++;cov_1ks4ntaci2().s[608]++;return console.log(`Configuration File created: ${filename}`);});cov_1ks4ntaci2().s[609]++;configFile=new root.ConfigurationFile(that.service,filename);cov_1ks4ntaci2().s[610]++;configFile=await configFile.fetch_v2();}else{cov_1ks4ntaci2().b[163][1]++;}// 2. Check if the stanza exists -var doesStanzaExistResponse=(cov_1ks4ntaci2().s[611]++,await this.doesStanzaExist(configFile,stanza));var configStanza=(cov_1ks4ntaci2().s[612]++,doesStanzaExistResponse.stanza);// 3. If the stanza doesn't exist, create a new stanza with given keyValueMap -cov_1ks4ntaci2().s[613]++;if(!configStanza){cov_1ks4ntaci2().b[164][0]++;cov_1ks4ntaci2().s[614]++;console.log(doesStanzaExistResponse);cov_1ks4ntaci2().s[615]++;console.log("Creating a new configuration stanza...");cov_1ks4ntaci2().s[616]++;configFile.create(stanza,keyValueMap,function(err,newStanza){cov_1ks4ntaci2().f[193]++;cov_1ks4ntaci2().s[617]++;console.log(`Configuration Stanza created: ${stanza}`);cov_1ks4ntaci2().s[618]++;callback();});}// 4. If the stanza exists, update it with the keyValueMap -else{cov_1ks4ntaci2().b[164][1]++;cov_1ks4ntaci2().s[619]++;configStanza.update(keyValueMap,(err,updatedStanza)=>{cov_1ks4ntaci2().f[194]++;cov_1ks4ntaci2().s[620]++;console.log(`Configuration Stanza updated: ${stanza}`);cov_1ks4ntaci2().s[621]++;callback();});}}});/** - * Represents a specific search job. You can perform different operations - * on this job, such as reading its status, canceling it, and getting results. - * - * @endpoint search/jobs/{search_id} - * @class splunkjs.Service.Job - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[622]++;root.Job=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Job - */path:function(){cov_1ks4ntaci2().f[195]++;cov_1ks4ntaci2().s[623]++;return Paths.jobs+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.Job`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} sid The search ID for this search job. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. - * - * @method splunkjs.Service.Job - */init:function(service,sid,namespace){cov_1ks4ntaci2().f[196]++;cov_1ks4ntaci2().s[624]++;this.name=sid;cov_1ks4ntaci2().s[625]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[626]++;this.sid=sid;// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[627]++;this.cancel=utils.bind(this,this.cancel);cov_1ks4ntaci2().s[628]++;this.disablePreview=utils.bind(this,this.disablePreview);cov_1ks4ntaci2().s[629]++;this.enablePreview=utils.bind(this,this.enablePreview);cov_1ks4ntaci2().s[630]++;this.events=utils.bind(this,this.events);cov_1ks4ntaci2().s[631]++;this.finalize=utils.bind(this,this.finalize);cov_1ks4ntaci2().s[632]++;this.pause=utils.bind(this,this.pause);cov_1ks4ntaci2().s[633]++;this.preview=utils.bind(this,this.preview);cov_1ks4ntaci2().s[634]++;this.results=utils.bind(this,this.results);cov_1ks4ntaci2().s[635]++;this.searchlog=utils.bind(this,this.searchlog);cov_1ks4ntaci2().s[636]++;this.setPriority=utils.bind(this,this.setPriority);cov_1ks4ntaci2().s[637]++;this.setTTL=utils.bind(this,this.setTTL);cov_1ks4ntaci2().s[638]++;this.summary=utils.bind(this,this.summary);cov_1ks4ntaci2().s[639]++;this.timeline=utils.bind(this,this.timeline);cov_1ks4ntaci2().s[640]++;this.touch=utils.bind(this,this.touch);cov_1ks4ntaci2().s[641]++;this.unpause=utils.bind(this,this.unpause);},/** - * Cancels a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.cancel(function(err) { - * console.log("CANCELLED"); - * }); - * - * @param {Function} callback A function to call when the search is done: `(err)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */cancel:function(callback){cov_1ks4ntaci2().f[197]++;var req=(cov_1ks4ntaci2().s[642]++,this.post("control",{action:"cancel"},callback));cov_1ks4ntaci2().s[643]++;return req;},/** - * Disables preview generation for a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.disablePreview(function(err, job) { - * console.log("PREVIEW DISABLED"); - * }); - * - * @param {Function} callback A function to call with this search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */disablePreview:function(callback){cov_1ks4ntaci2().f[198]++;cov_1ks4ntaci2().s[644]++;callback=(cov_1ks4ntaci2().b[165][0]++,callback)||(cov_1ks4ntaci2().b[165][1]++,function(){cov_1ks4ntaci2().f[199]++;});var that=(cov_1ks4ntaci2().s[645]++,this);var req=(cov_1ks4ntaci2().s[646]++,this.post("control",{action:"disablepreview"},function(err){cov_1ks4ntaci2().f[200]++;cov_1ks4ntaci2().s[647]++;callback(err,that);}));cov_1ks4ntaci2().s[648]++;return req;},/** - * Enables preview generation for a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.disablePreview(function(err, job) { - * console.log("PREVIEW ENABLED"); - * }); - * - * @param {Function} callback A function to call with this search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */enablePreview:function(callback){cov_1ks4ntaci2().f[201]++;cov_1ks4ntaci2().s[649]++;callback=(cov_1ks4ntaci2().b[166][0]++,callback)||(cov_1ks4ntaci2().b[166][1]++,function(){cov_1ks4ntaci2().f[202]++;});var that=(cov_1ks4ntaci2().s[650]++,this);var req=(cov_1ks4ntaci2().s[651]++,this.post("control",{action:"enablepreview"},function(err){cov_1ks4ntaci2().f[203]++;cov_1ks4ntaci2().s[652]++;callback(err,that);}));cov_1ks4ntaci2().s[653]++;return req;},/** - * Returns the events of a search job with given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.events({count: 10}, function(err, events, job) { - * console.log("Fields: ", events.fields); - * }); - * - * @param {Object} params The parameters for retrieving events. For a list of available parameters, see the GET search/jobs/{search_id}/events endpoint in the REST API documentation. - * @param {Function} callback A function to call when the events are retrieved: `(err, events, job)`. - * - * @endpoint search/jobs/{search_id}/events - * @method splunkjs.Service.Job - */events:function(params,callback){cov_1ks4ntaci2().f[204]++;cov_1ks4ntaci2().s[654]++;callback=(cov_1ks4ntaci2().b[167][0]++,callback)||(cov_1ks4ntaci2().b[167][1]++,function(){cov_1ks4ntaci2().f[205]++;});cov_1ks4ntaci2().s[655]++;params=(cov_1ks4ntaci2().b[168][0]++,params)||(cov_1ks4ntaci2().b[168][1]++,{});cov_1ks4ntaci2().s[656]++;params.output_mode=(cov_1ks4ntaci2().b[169][0]++,params.output_mode)||(cov_1ks4ntaci2().b[169][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[657]++,this);cov_1ks4ntaci2().s[658]++;return this.get("events",params,function(err,response){cov_1ks4ntaci2().f[206]++;cov_1ks4ntaci2().s[659]++;if(err){cov_1ks4ntaci2().b[170][0]++;cov_1ks4ntaci2().s[660]++;callback(err);}else{cov_1ks4ntaci2().b[170][1]++;cov_1ks4ntaci2().s[661]++;callback(null,response.data,that);}});},/** - * Finalizes a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.finalize(function(err, job) { - * console.log("JOB FINALIZED"); - * }); - * - * @param {Function} callback A function to call with the job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */finalize:function(callback){cov_1ks4ntaci2().f[207]++;cov_1ks4ntaci2().s[662]++;callback=(cov_1ks4ntaci2().b[171][0]++,callback)||(cov_1ks4ntaci2().b[171][1]++,function(){cov_1ks4ntaci2().f[208]++;});var that=(cov_1ks4ntaci2().s[663]++,this);var req=(cov_1ks4ntaci2().s[664]++,this.post("control",{action:"finalize"},function(err){cov_1ks4ntaci2().f[209]++;cov_1ks4ntaci2().s[665]++;callback(err,that);}));cov_1ks4ntaci2().s[666]++;return req;},/** - * Returns an iterator over this search job's events or results. - * - * @param {String} type One of {"events", "preview", "results"}. - * @param {Object} params A dictionary of optional parameters: - * - `pagesize` (_integer_): The number of items to return on each request. Defaults to as many as possible. - * @return {Object} An iterator object with a `next(callback)` method, where `callback` is of the form `(err, results, hasMoreResults)`. - * - * @endpoint search/jobs/{search_id}/results - * @method splunkjs.Service.Job - */iterator:function(type,params){cov_1ks4ntaci2().f[210]++;cov_1ks4ntaci2().s[667]++;return new root.PaginatedEndpointIterator(this[type],params);},/** - * Pauses a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.pause(function(err, job) { - * console.log("JOB PAUSED"); - * }); - * - * @param {Function} callback A function to call with the job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */pause:function(callback){cov_1ks4ntaci2().f[211]++;cov_1ks4ntaci2().s[668]++;callback=(cov_1ks4ntaci2().b[172][0]++,callback)||(cov_1ks4ntaci2().b[172][1]++,function(){cov_1ks4ntaci2().f[212]++;});var that=(cov_1ks4ntaci2().s[669]++,this);var req=(cov_1ks4ntaci2().s[670]++,this.post("control",{action:"pause"},function(err){cov_1ks4ntaci2().f[213]++;cov_1ks4ntaci2().s[671]++;callback(err,that);}));cov_1ks4ntaci2().s[672]++;return req;},/* - * Gets the preview results for a search job with given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.preview({count: 10}, function(err, results, job) { - * console.log("Fields: ", results.fields); - * }); - * - * @param {Object} params The parameters for retrieving preview results. For a list of available parameters, see the GET search/jobs/{search_id}/results_preview endpoint in the REST API documentation. - * @param {Function} callback A function to call when the preview results are retrieved : `(err, results, job)`. - * - * @endpoint search/jobs/{search_id}/results_preview - * @method splunkjs.Service.Job - */preview:function(params,callback){cov_1ks4ntaci2().f[214]++;cov_1ks4ntaci2().s[673]++;callback=(cov_1ks4ntaci2().b[173][0]++,callback)||(cov_1ks4ntaci2().b[173][1]++,function(){cov_1ks4ntaci2().f[215]++;});cov_1ks4ntaci2().s[674]++;params=(cov_1ks4ntaci2().b[174][0]++,params)||(cov_1ks4ntaci2().b[174][1]++,{});cov_1ks4ntaci2().s[675]++;params.output_mode=(cov_1ks4ntaci2().b[175][0]++,params.output_mode)||(cov_1ks4ntaci2().b[175][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[676]++,this);cov_1ks4ntaci2().s[677]++;return this.get("results_preview",params,function(err,response){cov_1ks4ntaci2().f[216]++;cov_1ks4ntaci2().s[678]++;if(err){cov_1ks4ntaci2().b[176][0]++;cov_1ks4ntaci2().s[679]++;callback(err);}else{cov_1ks4ntaci2().b[176][1]++;cov_1ks4ntaci2().s[680]++;callback(null,response.data,that);}});},/** - * Gets the results for a search job with given parameters. - * - * The callback can get `undefined` for its `results` parameter if the - * job is not yet done. To avoid this, use the `Job.track()` method to - * wait until the job is complete prior to fetching the results with - * this method. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.results({count: 10}, function(err, results, job) { - * console.log("Fields: ", results.results); - * }); - * - * @param {Object} params The parameters for retrieving search results. For a list of available parameters, see the GET search/jobs/{search_id}/results endpoint in the REST API documentation. - * @param {Function} callback A function to call when the results are retrieved: `(err, results, job)`. - * - * @endpoint search/jobs/{search_id}/results - * @method splunkjs.Service.Job - */results:function(params,callback){cov_1ks4ntaci2().f[217]++;cov_1ks4ntaci2().s[681]++;callback=(cov_1ks4ntaci2().b[177][0]++,callback)||(cov_1ks4ntaci2().b[177][1]++,function(){cov_1ks4ntaci2().f[218]++;});cov_1ks4ntaci2().s[682]++;params=(cov_1ks4ntaci2().b[178][0]++,params)||(cov_1ks4ntaci2().b[178][1]++,{});cov_1ks4ntaci2().s[683]++;params.output_mode=(cov_1ks4ntaci2().b[179][0]++,params.output_mode)||(cov_1ks4ntaci2().b[179][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[684]++,this);cov_1ks4ntaci2().s[685]++;return this.get("results",params,function(err,response){cov_1ks4ntaci2().f[219]++;cov_1ks4ntaci2().s[686]++;if(err){cov_1ks4ntaci2().b[180][0]++;cov_1ks4ntaci2().s[687]++;callback(err);}else{cov_1ks4ntaci2().b[180][1]++;cov_1ks4ntaci2().s[688]++;callback(null,response.data,that);}});},/** - * Gets the search log for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.searchlog(function(err, searchlog, job) { - * console.log(searchlog); - * }); - * - * @param {Function} callback A function to call with the search log and job: `(err, searchlog, job)`. - * - * @endpoint search/jobs/{search_id}/search.log - * @method splunkjs.Service.Job - */searchlog:function(callback){cov_1ks4ntaci2().f[220]++;cov_1ks4ntaci2().s[689]++;callback=(cov_1ks4ntaci2().b[181][0]++,callback)||(cov_1ks4ntaci2().b[181][1]++,function(){cov_1ks4ntaci2().f[221]++;});var that=(cov_1ks4ntaci2().s[690]++,this);cov_1ks4ntaci2().s[691]++;return this.get("search.log",{},function(err,response){cov_1ks4ntaci2().f[222]++;cov_1ks4ntaci2().s[692]++;if(err){cov_1ks4ntaci2().b[182][0]++;cov_1ks4ntaci2().s[693]++;callback(err);}else{cov_1ks4ntaci2().b[182][1]++;cov_1ks4ntaci2().s[694]++;callback(null,response.data,that);}});},/** - * Sets the priority for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.setPriority(6, function(err, job) { - * console.log("JOB PRIORITY SET"); - * }); - * - * @param {Number} value The priority (an integer between 1-10). A higher value means a higher priority. - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */setPriority:function(value,callback){cov_1ks4ntaci2().f[223]++;cov_1ks4ntaci2().s[695]++;callback=(cov_1ks4ntaci2().b[183][0]++,callback)||(cov_1ks4ntaci2().b[183][1]++,function(){cov_1ks4ntaci2().f[224]++;});var that=(cov_1ks4ntaci2().s[696]++,this);var req=(cov_1ks4ntaci2().s[697]++,this.post("control",{action:"setpriority",priority:value},function(err){cov_1ks4ntaci2().f[225]++;cov_1ks4ntaci2().s[698]++;callback(err,that);}));cov_1ks4ntaci2().s[699]++;return req;},/** - * Sets the time to live (TTL) for the search job, which is the time before - * the search job expires after it has been completed and is still available. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.setTTL(1000, function(err, job) { - * console.log("JOB TTL SET"); - * }); - * - * @param {Number} value The time to live, in seconds. - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */setTTL:function(value,callback){cov_1ks4ntaci2().f[226]++;cov_1ks4ntaci2().s[700]++;callback=(cov_1ks4ntaci2().b[184][0]++,callback)||(cov_1ks4ntaci2().b[184][1]++,function(){cov_1ks4ntaci2().f[227]++;});var that=(cov_1ks4ntaci2().s[701]++,this);var req=(cov_1ks4ntaci2().s[702]++,this.post("control",{action:"setttl",ttl:value},function(err){cov_1ks4ntaci2().f[228]++;cov_1ks4ntaci2().s[703]++;callback(err,that);}));cov_1ks4ntaci2().s[704]++;return req;},/** - * Gets the summary for this search job with the given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.summary({top_count: 5}, function(err, summary, job) { - * console.log("Summary: ", summary); - * }); - * - * @param {Object} params The parameters for retrieving the summary. For a list of available parameters, see the GET search/jobs/{search_id}/summary endpoint in the REST API documentation. - * @param {Function} callback A function to call with the summary and search job: `(err, summary, job)`. - * - * @endpoint search/jobs/{search_id}/summmary - * @method splunkjs.Service.Job - */summary:function(params,callback){cov_1ks4ntaci2().f[229]++;cov_1ks4ntaci2().s[705]++;callback=(cov_1ks4ntaci2().b[185][0]++,callback)||(cov_1ks4ntaci2().b[185][1]++,function(){cov_1ks4ntaci2().f[230]++;});var that=(cov_1ks4ntaci2().s[706]++,this);cov_1ks4ntaci2().s[707]++;return this.get("summary",params,function(err,response){cov_1ks4ntaci2().f[231]++;cov_1ks4ntaci2().s[708]++;if(err){cov_1ks4ntaci2().b[186][0]++;cov_1ks4ntaci2().s[709]++;callback(err);}else{cov_1ks4ntaci2().b[186][1]++;cov_1ks4ntaci2().s[710]++;callback(null,response.data,that);}});},/** - * Gets the timeline for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.timeline({time_format: "%c"}, function(err, job, timeline) { - * console.log("Timeline: ", timeline); - * }); - * - * @param {Object} params The parameters for retrieving the timeline. For a list of available parameters, see the GET search/jobs/{search_id}/timeline endpoint in the REST API documentation. - * @param {Function} callback A function to call with the timeline and search job: `(err, timeline, job)`. - * - * @endpoint search/jobs/{search_id}/timeline - * @method splunkjs.Service.Job - */timeline:function(params,callback){cov_1ks4ntaci2().f[232]++;cov_1ks4ntaci2().s[711]++;callback=(cov_1ks4ntaci2().b[187][0]++,callback)||(cov_1ks4ntaci2().b[187][1]++,function(){cov_1ks4ntaci2().f[233]++;});var that=(cov_1ks4ntaci2().s[712]++,this);cov_1ks4ntaci2().s[713]++;return this.get("timeline",params,function(err,response){cov_1ks4ntaci2().f[234]++;cov_1ks4ntaci2().s[714]++;if(err){cov_1ks4ntaci2().b[188][0]++;cov_1ks4ntaci2().s[715]++;callback(err);}else{cov_1ks4ntaci2().b[188][1]++;cov_1ks4ntaci2().s[716]++;callback(null,response.data,that);}});},/** - * Touches a search job, which means extending the expiration time of - * the search to now plus the time to live (TTL). - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.touch(function(err) { - * console.log("JOB TOUCHED"); - * }); - * - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */touch:function(callback){cov_1ks4ntaci2().f[235]++;cov_1ks4ntaci2().s[717]++;callback=(cov_1ks4ntaci2().b[189][0]++,callback)||(cov_1ks4ntaci2().b[189][1]++,function(){cov_1ks4ntaci2().f[236]++;});var that=(cov_1ks4ntaci2().s[718]++,this);var req=(cov_1ks4ntaci2().s[719]++,this.post("control",{action:"touch"},function(err){cov_1ks4ntaci2().f[237]++;cov_1ks4ntaci2().s[720]++;callback(err,that);}));cov_1ks4ntaci2().s[721]++;return req;},/** - * Starts polling the status of this search job, and fires callbacks - * upon each status change. - * - * @param {Object} options A dictionary of optional parameters: - * - `period` (_integer_): The number of milliseconds to wait between each poll. Defaults to 500. - * @param {Object|Function} callbacks A dictionary of optional callbacks: - * - `ready`: A function `(job)` invoked when the job's properties first become available. - * - `progress`: A function `(job)` invoked whenever new job properties are available. - * - `done`: A function `(job)` invoked if the job completes successfully. No further polling is done. - * - `failed`: A function `(job)` invoked if the job fails executing on the server. No further polling is done. - * - `error`: A function `(err)` invoked if an error occurs while polling. No further polling is done. - * Or, if a function `(job)`, equivalent to passing it as a `done` callback. - * - * @method splunkjs.Service.Job - */track:function(options,callbacks){cov_1ks4ntaci2().f[238]++;var period=(cov_1ks4ntaci2().s[722]++,(cov_1ks4ntaci2().b[190][0]++,options.period)||(cov_1ks4ntaci2().b[190][1]++,500));// ms -cov_1ks4ntaci2().s[723]++;if(utils.isFunction(callbacks)){cov_1ks4ntaci2().b[191][0]++;cov_1ks4ntaci2().s[724]++;callbacks={done:callbacks};}else{cov_1ks4ntaci2().b[191][1]++;}var noCallbacksAfterReady=(cov_1ks4ntaci2().s[725]++,(cov_1ks4ntaci2().b[192][0]++,!callbacks.progress)&&(cov_1ks4ntaci2().b[192][1]++,!callbacks.done)&&(cov_1ks4ntaci2().b[192][2]++,!callbacks.failed)&&(cov_1ks4ntaci2().b[192][3]++,!callbacks.error));cov_1ks4ntaci2().s[726]++;callbacks.ready=(cov_1ks4ntaci2().b[193][0]++,callbacks.ready)||(cov_1ks4ntaci2().b[193][1]++,function(){cov_1ks4ntaci2().f[239]++;});cov_1ks4ntaci2().s[727]++;callbacks.progress=(cov_1ks4ntaci2().b[194][0]++,callbacks.progress)||(cov_1ks4ntaci2().b[194][1]++,function(){cov_1ks4ntaci2().f[240]++;});cov_1ks4ntaci2().s[728]++;callbacks.done=(cov_1ks4ntaci2().b[195][0]++,callbacks.done)||(cov_1ks4ntaci2().b[195][1]++,function(){cov_1ks4ntaci2().f[241]++;});cov_1ks4ntaci2().s[729]++;callbacks.failed=(cov_1ks4ntaci2().b[196][0]++,callbacks.failed)||(cov_1ks4ntaci2().b[196][1]++,function(){cov_1ks4ntaci2().f[242]++;});cov_1ks4ntaci2().s[730]++;callbacks.error=(cov_1ks4ntaci2().b[197][0]++,callbacks.error)||(cov_1ks4ntaci2().b[197][1]++,function(){cov_1ks4ntaci2().f[243]++;});// For use by tests only -cov_1ks4ntaci2().s[731]++;callbacks._preready=(cov_1ks4ntaci2().b[198][0]++,callbacks._preready)||(cov_1ks4ntaci2().b[198][1]++,function(){cov_1ks4ntaci2().f[244]++;});cov_1ks4ntaci2().s[732]++;callbacks._stoppedAfterReady=(cov_1ks4ntaci2().b[199][0]++,callbacks._stoppedAfterReady)||(cov_1ks4ntaci2().b[199][1]++,function(){cov_1ks4ntaci2().f[245]++;});var that=(cov_1ks4ntaci2().s[733]++,this);var emittedReady=(cov_1ks4ntaci2().s[734]++,false);var doneLooping=(cov_1ks4ntaci2().s[735]++,false);cov_1ks4ntaci2().s[736]++;Async.whilst(function(){cov_1ks4ntaci2().f[246]++;cov_1ks4ntaci2().s[737]++;return!doneLooping;},function(nextIteration){cov_1ks4ntaci2().f[247]++;cov_1ks4ntaci2().s[738]++;that.fetch(function(err,job){cov_1ks4ntaci2().f[248]++;cov_1ks4ntaci2().s[739]++;if(err){cov_1ks4ntaci2().b[200][0]++;cov_1ks4ntaci2().s[740]++;nextIteration(err);cov_1ks4ntaci2().s[741]++;return;}else{cov_1ks4ntaci2().b[200][1]++;}var dispatchState=(cov_1ks4ntaci2().s[742]++,job.properties().dispatchState);var notReady=(cov_1ks4ntaci2().s[743]++,(cov_1ks4ntaci2().b[201][0]++,dispatchState==="QUEUED")||(cov_1ks4ntaci2().b[201][1]++,dispatchState==="PARSING"));cov_1ks4ntaci2().s[744]++;if(notReady){cov_1ks4ntaci2().b[202][0]++;cov_1ks4ntaci2().s[745]++;callbacks._preready(job);}else{cov_1ks4ntaci2().b[202][1]++;cov_1ks4ntaci2().s[746]++;if(!emittedReady){cov_1ks4ntaci2().b[203][0]++;cov_1ks4ntaci2().s[747]++;callbacks.ready(job);cov_1ks4ntaci2().s[748]++;emittedReady=true;// Optimization: Don't keep polling the job if the -// caller only cares about the `ready` event. -cov_1ks4ntaci2().s[749]++;if(noCallbacksAfterReady){cov_1ks4ntaci2().b[204][0]++;cov_1ks4ntaci2().s[750]++;callbacks._stoppedAfterReady(job);cov_1ks4ntaci2().s[751]++;doneLooping=true;cov_1ks4ntaci2().s[752]++;nextIteration();cov_1ks4ntaci2().s[753]++;return;}else{cov_1ks4ntaci2().b[204][1]++;}}else{cov_1ks4ntaci2().b[203][1]++;}cov_1ks4ntaci2().s[754]++;callbacks.progress(job);var props=(cov_1ks4ntaci2().s[755]++,job.properties());cov_1ks4ntaci2().s[756]++;if((cov_1ks4ntaci2().b[206][0]++,dispatchState==="DONE")&&(cov_1ks4ntaci2().b[206][1]++,props.isDone)){cov_1ks4ntaci2().b[205][0]++;cov_1ks4ntaci2().s[757]++;callbacks.done(job);cov_1ks4ntaci2().s[758]++;doneLooping=true;cov_1ks4ntaci2().s[759]++;nextIteration();cov_1ks4ntaci2().s[760]++;return;}else{cov_1ks4ntaci2().b[205][1]++;cov_1ks4ntaci2().s[761]++;if((cov_1ks4ntaci2().b[208][0]++,dispatchState==="FAILED")&&(cov_1ks4ntaci2().b[208][1]++,props.isFailed)){cov_1ks4ntaci2().b[207][0]++;cov_1ks4ntaci2().s[762]++;callbacks.failed(job);cov_1ks4ntaci2().s[763]++;doneLooping=true;cov_1ks4ntaci2().s[764]++;nextIteration();cov_1ks4ntaci2().s[765]++;return;}else{cov_1ks4ntaci2().b[207][1]++;}}}cov_1ks4ntaci2().s[766]++;Async.sleep(period,nextIteration);});},function(err){cov_1ks4ntaci2().f[249]++;cov_1ks4ntaci2().s[767]++;if(err){cov_1ks4ntaci2().b[209][0]++;cov_1ks4ntaci2().s[768]++;callbacks.error(err);}else{cov_1ks4ntaci2().b[209][1]++;}});},/** - * Resumes a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.unpause(function(err) { - * console.log("JOB UNPAUSED"); - * }); - * - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */unpause:function(callback){cov_1ks4ntaci2().f[250]++;cov_1ks4ntaci2().s[769]++;callback=(cov_1ks4ntaci2().b[210][0]++,callback)||(cov_1ks4ntaci2().b[210][1]++,function(){cov_1ks4ntaci2().f[251]++;});var that=(cov_1ks4ntaci2().s[770]++,this);var req=(cov_1ks4ntaci2().s[771]++,this.post("control",{action:"unpause"},function(err){cov_1ks4ntaci2().f[252]++;cov_1ks4ntaci2().s[772]++;callback(err,that);}));cov_1ks4ntaci2().s[773]++;return req;}});/** - * Represents a collection of search jobs. You can create and list search - * jobs using this collection container, or get a specific search job. - * - * @endpoint search/jobs - * @class splunkjs.Service.Jobs - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[774]++;root.Jobs=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Jobs - */path:function(){cov_1ks4ntaci2().f[253]++;cov_1ks4ntaci2().s[775]++;return Paths.jobs;},/** - * Creates a local instance of a job. - * - * @param {Object} props The properties for this new job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. - * - * @method splunkjs.Service.Jobs - */instantiateEntity:function(props){cov_1ks4ntaci2().f[254]++;var sid=(cov_1ks4ntaci2().s[776]++,props.content.sid);var entityNamespace=(cov_1ks4ntaci2().s[777]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[778]++;return new root.Job(this.service,sid,entityNamespace);},/** - * Constructor for `splunkjs.Service.Jobs`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Jobs} A new `splunkjs.Service.Jobs` instance. - * - * @method splunkjs.Service.Jobs - */init:function(service,namespace){cov_1ks4ntaci2().f[255]++;cov_1ks4ntaci2().s[779]++;this._super(service,this.path(),namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[780]++;this.create=utils.bind(this,this.create);},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the created job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */create:function(query,params,callback){cov_1ks4ntaci2().f[256]++;cov_1ks4ntaci2().s[781]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[212][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[212][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[212][2]++,!callback)){cov_1ks4ntaci2().b[211][0]++;cov_1ks4ntaci2().s[782]++;callback=params;cov_1ks4ntaci2().s[783]++;params=query;cov_1ks4ntaci2().s[784]++;query=params.search;}else{cov_1ks4ntaci2().b[211][1]++;}cov_1ks4ntaci2().s[785]++;callback=(cov_1ks4ntaci2().b[213][0]++,callback)||(cov_1ks4ntaci2().b[213][1]++,function(){cov_1ks4ntaci2().f[257]++;});cov_1ks4ntaci2().s[786]++;params=(cov_1ks4ntaci2().b[214][0]++,params)||(cov_1ks4ntaci2().b[214][1]++,{});cov_1ks4ntaci2().s[787]++;params.search=query;cov_1ks4ntaci2().s[788]++;if(((cov_1ks4ntaci2().b[216][0]++,params.exec_mode)||(cov_1ks4ntaci2().b[216][1]++,"")).toLowerCase()==="oneshot"){cov_1ks4ntaci2().b[215][0]++;cov_1ks4ntaci2().s[789]++;throw new Error("Please use splunkjs.Service.Jobs.oneshotSearch for exec_mode=oneshot");}else{cov_1ks4ntaci2().b[215][1]++;}cov_1ks4ntaci2().s[790]++;if(!params.search){cov_1ks4ntaci2().b[217][0]++;cov_1ks4ntaci2().s[791]++;callback("Must provide a query to create a search job");cov_1ks4ntaci2().s[792]++;return;}else{cov_1ks4ntaci2().b[217][1]++;}var that=(cov_1ks4ntaci2().s[793]++,this);cov_1ks4ntaci2().s[794]++;return this.post("",params,function(err,response){cov_1ks4ntaci2().f[258]++;cov_1ks4ntaci2().s[795]++;if(err){cov_1ks4ntaci2().b[218][0]++;cov_1ks4ntaci2().s[796]++;callback(err);}else{cov_1ks4ntaci2().b[218][1]++;var job=(cov_1ks4ntaci2().s[797]++,new root.Job(that.service,response.data.sid,that.namespace));cov_1ks4ntaci2().s[798]++;callback(null,job);}});},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. - * - * @example - * - * var jobs = service.jobs(); - * jobs.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { - * console.log("CREATED": newJob.sid); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call with the new search job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */search:function(query,params,callback){cov_1ks4ntaci2().f[259]++;cov_1ks4ntaci2().s[799]++;return this.create(query,params,callback);},/** - * Creates a oneshot search from a given search query and parameters. - * - * @example - * - * var jobs = service.jobs(); - * jobs.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { - * console.log("RESULT FIELDS": results.fields); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search: - * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). - * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `rf` (_string_): Specifies one or more fields to add to the search. - * @param {Function} callback A function to call with the results of the search: `(err, results)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */oneshotSearch:function(query,params,callback){cov_1ks4ntaci2().f[260]++;cov_1ks4ntaci2().s[800]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[220][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[220][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[220][2]++,!callback)){cov_1ks4ntaci2().b[219][0]++;cov_1ks4ntaci2().s[801]++;callback=params;cov_1ks4ntaci2().s[802]++;params=query;cov_1ks4ntaci2().s[803]++;query=params.search;}else{cov_1ks4ntaci2().b[219][1]++;}cov_1ks4ntaci2().s[804]++;callback=(cov_1ks4ntaci2().b[221][0]++,callback)||(cov_1ks4ntaci2().b[221][1]++,function(){cov_1ks4ntaci2().f[261]++;});cov_1ks4ntaci2().s[805]++;params=(cov_1ks4ntaci2().b[222][0]++,params)||(cov_1ks4ntaci2().b[222][1]++,{});cov_1ks4ntaci2().s[806]++;params.search=query;cov_1ks4ntaci2().s[807]++;params.exec_mode="oneshot";cov_1ks4ntaci2().s[808]++;if(!params.search){cov_1ks4ntaci2().b[223][0]++;cov_1ks4ntaci2().s[809]++;callback("Must provide a query to create a search job");}else{cov_1ks4ntaci2().b[223][1]++;}var outputMode=(cov_1ks4ntaci2().s[810]++,(cov_1ks4ntaci2().b[224][0]++,params.output_mode)||(cov_1ks4ntaci2().b[224][1]++,"json_rows"));var path=(cov_1ks4ntaci2().s[811]++,this.qualifiedPath);var method=(cov_1ks4ntaci2().s[812]++,"POST");var headers=(cov_1ks4ntaci2().s[813]++,{});var post=(cov_1ks4ntaci2().s[814]++,params);var get=(cov_1ks4ntaci2().s[815]++,{output_mode:outputMode});var body=(cov_1ks4ntaci2().s[816]++,null);var req=(cov_1ks4ntaci2().s[817]++,this.service.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[262]++;cov_1ks4ntaci2().s[818]++;if(err){cov_1ks4ntaci2().b[225][0]++;cov_1ks4ntaci2().s[819]++;callback(err);}else{cov_1ks4ntaci2().b[225][1]++;cov_1ks4ntaci2().s[820]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[821]++;return req;}});/** - * Represents a field of a data model object. - * This is a helper class for `DataModelCalculation` - * and `DataModelObject`. - * - * Has these properties: - * - `fieldName` (_string_): The name of this field. - * - `displayName` (_string_): A human readable name for this field. - * - `type` (_string_): The type of this field. - * - `multivalued` (_boolean_): Whether this field is multivalued. - * - `required` (_boolean_): Whether this field is required. - * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. - * - `editable` (_boolean_): Whether this field can be edited. - * - `comment` (_string_): A comment for this field, or `null` if there isn't one. - * - `fieldSearch` (_string_): A search query fragment for this field. - * - `lineage` (_array_): An array of strings of the lineage of the data model - * on which this field is defined. - * - `owner` (_string_): The name of the data model object on which this field is defined. - * - * Possible types for a data model field: - * - `string` - * - `boolean` - * - `number` - * - `timestamp` - * - `objectCount` - * - `childCount` - * - `ipv4` - * - * @class splunkjs.Service.DataModelField - */cov_1ks4ntaci2().s[822]++;root.DataModelField=Class.extend({_types:["string","number","timestamp","objectCount","childCount","ipv4","boolean"],/** - * Constructor for a data model field. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `fieldName` (_string_): The name of this field. - * - `displayName` (_string_): A human readable name for this field. - * - `type` (_string_): The type of this field, see valid types in class docs. - * - `multivalue` (_boolean_): Whether this field is multivalued. - * - `required` (_boolean_): Whether this field is required on events in the object - * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. - * - `editable` (_boolean_): Whether this field can be edited. - * - `comment` (_string_): A comment for this field, or `null` if there isn't one. - * - `fieldSearch` (_string_): A search query fragment for this field. - * - `lineage` (_string_): The lineage of the data model object on which this field - * is defined, items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - * @method splunkjs.Service.DataModelField - */init:function(props){cov_1ks4ntaci2().f[263]++;cov_1ks4ntaci2().s[823]++;props=(cov_1ks4ntaci2().b[226][0]++,props)||(cov_1ks4ntaci2().b[226][1]++,{});cov_1ks4ntaci2().s[824]++;props.owner=(cov_1ks4ntaci2().b[227][0]++,props.owner)||(cov_1ks4ntaci2().b[227][1]++,"");cov_1ks4ntaci2().s[825]++;this.name=props.fieldName;cov_1ks4ntaci2().s[826]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[827]++;this.type=props.type;cov_1ks4ntaci2().s[828]++;this.multivalued=props.multivalue;cov_1ks4ntaci2().s[829]++;this.required=props.required;cov_1ks4ntaci2().s[830]++;this.hidden=props.hidden;cov_1ks4ntaci2().s[831]++;this.editable=props.editable;cov_1ks4ntaci2().s[832]++;this.comment=(cov_1ks4ntaci2().b[228][0]++,props.comment)||(cov_1ks4ntaci2().b[228][1]++,null);cov_1ks4ntaci2().s[833]++;this.fieldSearch=props.fieldSearch;cov_1ks4ntaci2().s[834]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[835]++;this.owner=this.lineage[this.lineage.length-1];},/** - * Is this data model field of type string? - * - * @return {Boolean} True if this data model field is of type string. - * - * @method splunkjs.Service.DataModelField - */isString:function(){cov_1ks4ntaci2().f[264]++;cov_1ks4ntaci2().s[836]++;return"string"===this.type;},/** - * Is this data model field of type number? - * - * @return {Boolean} True if this data model field is of type number. - * - * @method splunkjs.Service.DataModelField - */isNumber:function(){cov_1ks4ntaci2().f[265]++;cov_1ks4ntaci2().s[837]++;return"number"===this.type;},/** - * Is this data model field of type timestamp? - * - * @return {Boolean} True if this data model field is of type timestamp. - * - * @method splunkjs.Service.DataModelField - */isTimestamp:function(){cov_1ks4ntaci2().f[266]++;cov_1ks4ntaci2().s[838]++;return"timestamp"===this.type;},/** - * Is this data model field of type object count? - * - * @return {Boolean} True if this data model field is of type object count. - * - * @method splunkjs.Service.DataModelField - */isObjectcount:function(){cov_1ks4ntaci2().f[267]++;cov_1ks4ntaci2().s[839]++;return"objectCount"===this.type;},/** - * Is this data model field of type child count? - * - * @return {Boolean} True if this data model field is of type child count. - * - * @method splunkjs.Service.DataModelField - */isChildcount:function(){cov_1ks4ntaci2().f[268]++;cov_1ks4ntaci2().s[840]++;return"childCount"===this.type;},/** - * Is this data model field of type ipv4? - * - * @return {Boolean} True if this data model field is of type ipv4. - * - * @method splunkjs.Service.DataModelField - */isIPv4:function(){cov_1ks4ntaci2().f[269]++;cov_1ks4ntaci2().s[841]++;return"ipv4"===this.type;},/** - * Is this data model field of type boolean? - * - * @return {Boolean} True if this data model field is of type boolean. - * - * @method splunkjs.Service.DataModelField - */isBoolean:function(){cov_1ks4ntaci2().f[270]++;cov_1ks4ntaci2().s[842]++;return"boolean"===this.type;}});/** - * Represents a constraint on a `DataModelObject` or a `DataModelField`. - * - * Has these properties: - * - `query` (_string_): The search query defining this data model constraint. - * - `lineage` (_array_): The lineage of this data model constraint. - * - `owner` (_string_): The name of the data model object that owns - * this data model constraint. - * - * @class splunkjs.Service.DataModelConstraint - */cov_1ks4ntaci2().s[843]++;root.DataModelConstraint=Class.extend({/** - * Constructor for a data model constraint. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `search` (_string_): The Splunk search query this constraint specifies. - * - `owner` (_string_): The lineage of the data model object that owns this - * constraint, items are delimited by a dot. This is converted into - * an array of strings upon construction. - * - * @method splunkjs.Service.DataModelConstraint - */init:function(props){cov_1ks4ntaci2().f[271]++;cov_1ks4ntaci2().s[844]++;props=(cov_1ks4ntaci2().b[229][0]++,props)||(cov_1ks4ntaci2().b[229][1]++,{});cov_1ks4ntaci2().s[845]++;props.owner=(cov_1ks4ntaci2().b[230][0]++,props.owner)||(cov_1ks4ntaci2().b[230][1]++,"");cov_1ks4ntaci2().s[846]++;this.query=props.search;cov_1ks4ntaci2().s[847]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[848]++;this.owner=this.lineage[this.lineage.length-1];}});/** - * Used for specifying a calculation on a `DataModelObject`. - * - * Has these properties: - * - `id` (_string_): The ID for this data model calculation. - * - `type` (_string_): The type of this data model calculation. - * - `comment` (_string_|_null_): The comment for this data model calculation, or `null`. - * - `editable` (_boolean_): True if this calculation can be edited, false otherwise. - * - `lineage` (_array_): The lineage of the data model object on which this calculation - * is defined in an array of strings. - * - `owner` (_string_): The data model that this calculation belongs to. - * - `outputFields` (_array_): The fields output by this calculation. - * - * The Rex and Eval types have an additional property: - * - `expression` (_string_): The expression to use for this calculation. - * - * The Rex and GeoIP types have an additional property: - * - `inputField` (_string_): The field to use for calculation. - * - * The Lookup type has additional properties: - * - `lookupName` (_string_): The name of the lookup to perform. - * - `inputFieldMappings` (_object_): The mappings from fields in the events to fields in the lookup. - * - * Valid types of calculations are: - * - `Lookup` - * - `Eval` - * - `GeoIP` - * - `Rex` - * - * @class splunkjs.Service.DataModelCalculation - */cov_1ks4ntaci2().s[849]++;root.DataModelCalculation=Class.extend({_types:["Lookup","Eval","GeoIP","Rex"],/** - * Constructor for a data model calculation. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `calculationID` (_string_): The ID of this calculation. - * - `calculationType` (_string_): The type of this calculation, see class docs for valid types. - * - `editable` (_boolean_): Whether this calculation can be edited. - * - `comment` (_string_): A comment for this calculation, or `null` if there isn't one. - * - `owner` (_string_): The lineage of the data model object on which this calculation - * is defined, items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - `outputFields` (_array_): An array of the fields this calculation generates. - * - `expression` (_string_): The expression to use for this calculation; exclusive to `Eval` and `Rex` calculations (optional) - * - `inputField` (_string_): The field to use for calculation; exclusive to `GeoIP` and `Rex` calculations (optional) - * - `lookupName` (_string_): The name of the lookup to perform; exclusive to `Lookup` calculations (optional) - * - `inputFieldMappings` (_array_): One element array containing an object with the mappings from fields in the events to fields - * in the lookup; exclusive to `Lookup` calculations (optional) - * - * @method splunkjs.Service.DataModelCalculation - */init:function(props){cov_1ks4ntaci2().f[272]++;cov_1ks4ntaci2().s[850]++;props=(cov_1ks4ntaci2().b[231][0]++,props)||(cov_1ks4ntaci2().b[231][1]++,{});cov_1ks4ntaci2().s[851]++;props.owner=(cov_1ks4ntaci2().b[232][0]++,props.owner)||(cov_1ks4ntaci2().b[232][1]++,"");cov_1ks4ntaci2().s[852]++;this.id=props.calculationID;cov_1ks4ntaci2().s[853]++;this.type=props.calculationType;cov_1ks4ntaci2().s[854]++;this.comment=(cov_1ks4ntaci2().b[233][0]++,props.comment)||(cov_1ks4ntaci2().b[233][1]++,null);cov_1ks4ntaci2().s[855]++;this.editable=props.editable;cov_1ks4ntaci2().s[856]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[857]++;this.owner=this.lineage[this.lineage.length-1];cov_1ks4ntaci2().s[858]++;this.outputFields=[];cov_1ks4ntaci2().s[859]++;for(var i=(cov_1ks4ntaci2().s[860]++,0);iSearch job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call when done creating the search job: `(err, job)`. - * @method splunkjs.Service.Pivot - */run:function(args,callback){cov_1ks4ntaci2().f[280]++;cov_1ks4ntaci2().s[883]++;if(utils.isUndefined(callback)){cov_1ks4ntaci2().b[240][0]++;cov_1ks4ntaci2().s[884]++;callback=args;cov_1ks4ntaci2().s[885]++;args={};}else{cov_1ks4ntaci2().b[240][1]++;}cov_1ks4ntaci2().s[886]++;if((cov_1ks4ntaci2().b[242][0]++,!args)||(cov_1ks4ntaci2().b[242][1]++,Object.keys(args).length===0)){cov_1ks4ntaci2().b[241][0]++;cov_1ks4ntaci2().s[887]++;args={};}else{cov_1ks4ntaci2().b[241][1]++;}// If tstats is undefined, use pivotSearch (try to run an accelerated search if possible) -cov_1ks4ntaci2().s[888]++;this.service.search((cov_1ks4ntaci2().b[243][0]++,this.tstatsSearch)||(cov_1ks4ntaci2().b[243][1]++,this.pivotSearch),args,callback);}});/** - * PivotSpecification represents a pivot to be done on a particular data model object. - * The user creates a PivotSpecification on some data model object, adds filters, row splits, - * column splits, and cell values, then calls the pivot method to query splunkd and - * get a set of SPL queries corresponding to this specification. - * - * Call the `pivot` method to query Splunk for SPL queries corresponding to this pivot. - * - * This class supports a fluent API, each function except `init`, `toJsonObject` & `pivot` - * return the modified `splunkjs.Service.PivotSpecification` instance. - * - * @example - * service.dataModels().fetch(function(err, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpecification = searches.createPivotSpecification(); - * pivotSpecification - * .addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .pivot(function(err, pivot) { - * console.log("Got a Pivot object from the Splunk server!"); - * }); - * }); - * - * Has these properties: - * - `dataModelObject` (_splunkjs.Service.DataModelObject_): The `DataModelObject` from which - * this `PivotSpecification` was created. - * - `columns` (_array_): The column splits on this `PivotSpecification`. - * - `rows` (_array_): The row splits on this `PivotSpecification`. - * - `filters` (_array_): The filters on this `PivotSpecification`. - * - `cells` (_array_): The cell aggregations for this`PivotSpecification`. - * - `accelerationNamespace` (_string_|_null_): The name of the `DataModel` that owns the `DataModelObject` - * on which this `PivotSpecification` was created if the `DataModel` is accelerated. Alternatively, - * you can set this property manually to the sid of an acceleration job in the format `sid=`. - * - * Valid comparison types are: - * - `boolean` - * - `string` - * - `number` - * - `ipv4` - * - * Valid boolean comparisons are: - * - `=` - * - `is` - * - `isNull` - * - `isNotNull` - * - * Valid string comparisons are: - * - `=` - * - `is` - * - `isNull` - * - `isNotNull` - * - `contains` - * - `doesNotContain` - * - `startsWith` - * - `endsWith` - * - `regex` - * - * Valid number comparisons are: - * - `=` - * - `!=` - * - `<` - * - `>` - * - `<=` - * - `>=` - * - `is` - * - `isNull` - * - `isNotNull` - * - * Valid ipv4 comparisons are: - * - `is` - * - `isNull` - * - `isNotNull` - * - `contains` - * - `doesNotContain` - * - `startsWith` - * - * Valid binning values are: - * - `auto` - * - `year` - * - `month` - * - `day` - * - `hour` - * - `minute` - * - `second` - * - * Valid sort directions are: - * - `ASCENDING` - * - `DECENDING` - * - `DEFAULT` - * - * Valid stats functions are: - * - `list` - * - `values` - * - `first` - * - `last` - * - `count` - * - `dc` - * - `sum` - * - `average` - * - `max` - * - `min` - * - `stdev` - * - `duration` - * - `earliest` - * - `latest` - * - * @class splunkjs.Service.PivotSpecification - */cov_1ks4ntaci2().s[889]++;root.PivotSpecification=Class.extend({_comparisons:{boolean:["=","is","isNull","isNotNull"],string:["=","is","isNull","isNotNull","contains","doesNotContain","startsWith","endsWith","regex"],number:["=","!=","<",">","<=",">=","is","isNull","isNotNull"],ipv4:["is","isNull","isNotNull","contains","doesNotContain","startsWith"]},_binning:["auto","year","month","day","hour","minute","second"],_sortDirection:["ASCENDING","DESCENDING","DEFAULT"],_statsFunctions:["list","values","first","last","count","dc","sum","average","max","min","stdev","duration","earliest","latest"],/** - * Constructor for a pivot specification. - * - * @constructor - * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. - * - * @method splunkjs.Service.PivotSpecification - */init:function(dataModelObject){cov_1ks4ntaci2().f[281]++;cov_1ks4ntaci2().s[890]++;this.dataModelObject=dataModelObject;cov_1ks4ntaci2().s[891]++;this.columns=[];cov_1ks4ntaci2().s[892]++;this.rows=[];cov_1ks4ntaci2().s[893]++;this.filters=[];cov_1ks4ntaci2().s[894]++;this.cells=[];cov_1ks4ntaci2().s[895]++;this.accelerationNamespace=dataModelObject.dataModel.isAccelerated()?(cov_1ks4ntaci2().b[244][0]++,dataModelObject.dataModel.name):(cov_1ks4ntaci2().b[244][1]++,null);cov_1ks4ntaci2().s[896]++;this.run=utils.bind(this,this.run);cov_1ks4ntaci2().s[897]++;this.pivot=utils.bind(this,this.pivot);},/** - * Set the acceleration cache for this pivot specification to a job, - * usually generated by createLocalAccelerationJob on a DataModelObject - * instance, as the acceleration cache for this pivot specification. - * - * @param {String|splunkjs.Service.Job} sid The sid of an acceleration job, - * or, a `splunkjs.Service.Job` instance. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */setAccelerationJob:function(sid){cov_1ks4ntaci2().f[282]++;cov_1ks4ntaci2().s[898]++;// If a search object is passed in, get its sid -if((cov_1ks4ntaci2().b[246][0]++,sid)&&(cov_1ks4ntaci2().b[246][1]++,sid instanceof Service.Job)){cov_1ks4ntaci2().b[245][0]++;cov_1ks4ntaci2().s[899]++;sid=sid.sid;}else{cov_1ks4ntaci2().b[245][1]++;}cov_1ks4ntaci2().s[900]++;if(!sid){cov_1ks4ntaci2().b[247][0]++;cov_1ks4ntaci2().s[901]++;throw new Error("Sid to use for acceleration must not be null.");}else{cov_1ks4ntaci2().b[247][1]++;}cov_1ks4ntaci2().s[902]++;this.accelerationNamespace="sid="+sid;cov_1ks4ntaci2().s[903]++;return this;},/** - * Add a filter on a boolean valued field. The filter will be a constraint of the form - * `field `comparison` compareTo`, for example: `is_remote = false`. - * - * @param {String} fieldName The name of field to filter on - * @param {String} comparisonType The type of comparison, see class docs for valid types. - * @param {String} comparisonOp The comparison, see class docs for valid comparisons, based on type. - * @param {String} compareTo The value to compare the field to. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addFilter:function(fieldName,comparisonType,comparisonOp,compareTo){cov_1ks4ntaci2().f[283]++;cov_1ks4ntaci2().s[904]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[248][0]++;cov_1ks4ntaci2().s[905]++;throw new Error("Cannot add filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[248][1]++;}cov_1ks4ntaci2().s[906]++;if(comparisonType!==this.dataModelObject.fieldByName(fieldName).type){cov_1ks4ntaci2().b[249][0]++;cov_1ks4ntaci2().s[907]++;throw new Error("Cannot add "+comparisonType+" filter on "+fieldName+" because it is of type "+this.dataModelObject.fieldByName(fieldName).type);}else{cov_1ks4ntaci2().b[249][1]++;}cov_1ks4ntaci2().s[908]++;if(!utils.contains(this._comparisons[comparisonType],comparisonOp)){cov_1ks4ntaci2().b[250][0]++;cov_1ks4ntaci2().s[909]++;throw new Error("Cannot add "+comparisonType+" filter because "+comparisonOp+" is not a valid comparison operator");}else{cov_1ks4ntaci2().b[250][1]++;}var ret=(cov_1ks4ntaci2().s[910]++,{fieldName:fieldName,owner:this.dataModelObject.fieldByName(fieldName).lineage.join("."),type:comparisonType});// These fields are type dependent -cov_1ks4ntaci2().s[911]++;if(utils.contains(["boolean","string","ipv4","number"],ret.type)){cov_1ks4ntaci2().b[251][0]++;cov_1ks4ntaci2().s[912]++;ret.rule={comparator:comparisonOp,compareTo:compareTo};}else{cov_1ks4ntaci2().b[251][1]++;}cov_1ks4ntaci2().s[913]++;this.filters.push(ret);cov_1ks4ntaci2().s[914]++;return this;},/** - * Add a limit on the events shown in a pivot by sorting them according to some field, then taking - * the specified number from the beginning or end of the list. - * - * @param {String} fieldName The name of field to filter on. - * @param {String} sortAttribute The name of the field to use for sorting. - * @param {String} sortDirection The direction to sort events, see class docs for valid types. - * @param {String} limit The number of values from the sorted list to allow through this filter. - * @param {String} statsFunction The stats function to use for aggregation before sorting, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addLimitFilter:function(fieldName,sortAttribute,sortDirection,limit,statsFunction){cov_1ks4ntaci2().f[284]++;cov_1ks4ntaci2().s[915]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[252][0]++;cov_1ks4ntaci2().s[916]++;throw new Error("Cannot add limit filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[252][1]++;}var f=(cov_1ks4ntaci2().s[917]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[918]++;if(!utils.contains(["string","number","objectCount"],f.type)){cov_1ks4ntaci2().b[253][0]++;cov_1ks4ntaci2().s[919]++;throw new Error("Cannot add limit filter on "+fieldName+" because it is of type "+f.type);}else{cov_1ks4ntaci2().b[253][1]++;}cov_1ks4ntaci2().s[920]++;if((cov_1ks4ntaci2().b[255][0]++,"string"===f.type)&&(cov_1ks4ntaci2().b[255][1]++,!utils.contains(["count","dc"],statsFunction))){cov_1ks4ntaci2().b[254][0]++;cov_1ks4ntaci2().s[921]++;throw new Error("Stats function for fields of type string must be COUNT or DISTINCT_COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[254][1]++;}cov_1ks4ntaci2().s[922]++;if((cov_1ks4ntaci2().b[257][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[257][1]++,!utils.contains(["count","dc","average","sum"],statsFunction))){cov_1ks4ntaci2().b[256][0]++;cov_1ks4ntaci2().s[923]++;throw new Error("Stats function for fields of type number must be one of COUNT, DISTINCT_COUNT, SUM, or AVERAGE; found "+statsFunction);}else{cov_1ks4ntaci2().b[256][1]++;}cov_1ks4ntaci2().s[924]++;if((cov_1ks4ntaci2().b[259][0]++,"objectCount"===f.type)&&(cov_1ks4ntaci2().b[259][1]++,!utils.contains(["count"],statsFunction))){cov_1ks4ntaci2().b[258][0]++;cov_1ks4ntaci2().s[925]++;throw new Error("Stats function for fields of type object count must be COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[258][1]++;}var filter=(cov_1ks4ntaci2().s[926]++,{fieldName:fieldName,owner:f.lineage.join("."),type:f.type,attributeName:sortAttribute,attributeOwner:this.dataModelObject.fieldByName(sortAttribute).lineage.join("."),sortDirection:sortDirection,limitAmount:limit,statsFn:statsFunction});// Assumed "highest" is preferred for when sortDirection is "DEFAULT" -cov_1ks4ntaci2().s[927]++;filter.limitType="ASCENDING"===sortDirection?(cov_1ks4ntaci2().b[260][0]++,"lowest"):(cov_1ks4ntaci2().b[260][1]++,"highest");cov_1ks4ntaci2().s[928]++;this.filters.push(filter);cov_1ks4ntaci2().s[929]++;return this;},/** - * Add a row split on a numeric or string valued field, splitting on each distinct value of the field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRowSplit:function(fieldName,label){cov_1ks4ntaci2().f[285]++;cov_1ks4ntaci2().s[930]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[261][0]++;cov_1ks4ntaci2().s[931]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[261][1]++;}var f=(cov_1ks4ntaci2().s[932]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[933]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[262][0]++;cov_1ks4ntaci2().s[934]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[262][1]++;}var row=(cov_1ks4ntaci2().s[935]++,{fieldName:fieldName,owner:f.owner,type:f.type,label:label});cov_1ks4ntaci2().s[936]++;if("number"===f.type){cov_1ks4ntaci2().b[263][0]++;cov_1ks4ntaci2().s[937]++;row.display="all";}else{cov_1ks4ntaci2().b[263][1]++;}cov_1ks4ntaci2().s[938]++;this.rows.push(row);cov_1ks4ntaci2().s[939]++;return this;},/** - * Add a row split on a numeric field, splitting into numeric ranges. - * - * This split generates bins with edges equivalent to the - * classic loop 'for i in to by ' but with a maximum - * number of bins . This dispatches to the stats and xyseries search commands. - * See their documentation for more details. - * - * @param {String} fieldName The field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. - * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. - * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. - * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRangeRowSplit:function(field,label,ranges){cov_1ks4ntaci2().f[286]++;cov_1ks4ntaci2().s[940]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[264][0]++;cov_1ks4ntaci2().s[941]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[264][1]++;}var f=(cov_1ks4ntaci2().s[942]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[943]++;if("number"!==f.type){cov_1ks4ntaci2().b[265][0]++;cov_1ks4ntaci2().s[944]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[265][1]++;}var updateRanges=(cov_1ks4ntaci2().s[945]++,{});cov_1ks4ntaci2().s[946]++;if((cov_1ks4ntaci2().b[267][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[267][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[266][0]++;cov_1ks4ntaci2().s[947]++;updateRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[266][1]++;}cov_1ks4ntaci2().s[948]++;if((cov_1ks4ntaci2().b[269][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[269][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[268][0]++;cov_1ks4ntaci2().s[949]++;updateRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[268][1]++;}cov_1ks4ntaci2().s[950]++;if((cov_1ks4ntaci2().b[271][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[271][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[270][0]++;cov_1ks4ntaci2().s[951]++;updateRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[270][1]++;}cov_1ks4ntaci2().s[952]++;if((cov_1ks4ntaci2().b[273][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[273][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[272][0]++;cov_1ks4ntaci2().s[953]++;updateRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[272][1]++;}cov_1ks4ntaci2().s[954]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,display:"ranges",ranges:updateRanges});cov_1ks4ntaci2().s[955]++;return this;},/** - * Add a row split on a boolean valued field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {String} trueDisplayValue A string to display in the true valued row label. - * @param {String} falseDisplayValue A string to display in the false valued row label. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addBooleanRowSplit:function(field,label,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[287]++;cov_1ks4ntaci2().s[956]++;if(!this.dataModelObject.fieldByName(field)){cov_1ks4ntaci2().b[274][0]++;cov_1ks4ntaci2().s[957]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[274][1]++;}var f=(cov_1ks4ntaci2().s[958]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[959]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[275][0]++;cov_1ks4ntaci2().s[960]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[275][1]++;}cov_1ks4ntaci2().s[961]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[962]++;return this;},/** - * Add a row split on a timestamp valued field, binned by the specified bucket size. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {String} binning The size of bins to use, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addTimestampRowSplit:function(field,label,binning){cov_1ks4ntaci2().f[288]++;cov_1ks4ntaci2().s[963]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[276][0]++;cov_1ks4ntaci2().s[964]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[276][1]++;}var f=(cov_1ks4ntaci2().s[965]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[966]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[277][0]++;cov_1ks4ntaci2().s[967]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[277][1]++;}cov_1ks4ntaci2().s[968]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[278][0]++;cov_1ks4ntaci2().s[969]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[278][1]++;}cov_1ks4ntaci2().s[970]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,period:binning});cov_1ks4ntaci2().s[971]++;return this;},/** - * Add a column split on a string or number valued field, producing a column for - * each distinct value of the field. - * - * @param {String} fieldName The name of field to split on. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addColumnSplit:function(fieldName){cov_1ks4ntaci2().f[289]++;cov_1ks4ntaci2().s[972]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[279][0]++;cov_1ks4ntaci2().s[973]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[279][1]++;}var f=(cov_1ks4ntaci2().s[974]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[975]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[280][0]++;cov_1ks4ntaci2().s[976]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[280][1]++;}var col=(cov_1ks4ntaci2().s[977]++,{fieldName:fieldName,owner:f.owner,type:f.type});cov_1ks4ntaci2().s[978]++;if("number"===f.type){cov_1ks4ntaci2().b[281][0]++;cov_1ks4ntaci2().s[979]++;col.display="all";}else{cov_1ks4ntaci2().b[281][1]++;}cov_1ks4ntaci2().s[980]++;this.columns.push(col);cov_1ks4ntaci2().s[981]++;return this;},/** - * Add a column split on a numeric field, splitting the values into ranges. - * - * @param {String} fieldName The field to split on. - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. - * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. - * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. - * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRangeColumnSplit:function(fieldName,ranges){cov_1ks4ntaci2().f[290]++;cov_1ks4ntaci2().s[982]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[282][0]++;cov_1ks4ntaci2().s[983]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[282][1]++;}var f=(cov_1ks4ntaci2().s[984]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[985]++;if("number"!==f.type){cov_1ks4ntaci2().b[283][0]++;cov_1ks4ntaci2().s[986]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[283][1]++;}// In Splunk 6.0.1.1, data models incorrectly expect strings for these fields -// instead of numbers. In 6.1, this is fixed and both are accepted. -var updatedRanges=(cov_1ks4ntaci2().s[987]++,{});cov_1ks4ntaci2().s[988]++;if((cov_1ks4ntaci2().b[285][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[285][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[284][0]++;cov_1ks4ntaci2().s[989]++;updatedRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[284][1]++;}cov_1ks4ntaci2().s[990]++;if((cov_1ks4ntaci2().b[287][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[287][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[286][0]++;cov_1ks4ntaci2().s[991]++;updatedRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[286][1]++;}cov_1ks4ntaci2().s[992]++;if((cov_1ks4ntaci2().b[289][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[289][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[288][0]++;cov_1ks4ntaci2().s[993]++;updatedRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[288][1]++;}cov_1ks4ntaci2().s[994]++;if((cov_1ks4ntaci2().b[291][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[291][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[290][0]++;cov_1ks4ntaci2().s[995]++;updatedRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[290][1]++;}cov_1ks4ntaci2().s[996]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,display:"ranges",ranges:updatedRanges});cov_1ks4ntaci2().s[997]++;return this;},/** - * Add a column split on a boolean valued field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} trueDisplayValue A string to display in the true valued column label. - * @param {String} falseDisplayValue A string to display in the false valued column label. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addBooleanColumnSplit:function(fieldName,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[291]++;cov_1ks4ntaci2().s[998]++;if(!this.dataModelObject.fieldByName(fieldName)){cov_1ks4ntaci2().b[292][0]++;cov_1ks4ntaci2().s[999]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[292][1]++;}var f=(cov_1ks4ntaci2().s[1000]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1001]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[293][0]++;cov_1ks4ntaci2().s[1002]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[293][1]++;}cov_1ks4ntaci2().s[1003]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[1004]++;return this;},/** - * Add a column split on a timestamp valued field, binned by the specified bucket size. - * - * @param {String} fieldName The name of field to split on. - * @param {String} binning The size of bins to use, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addTimestampColumnSplit:function(field,binning){cov_1ks4ntaci2().f[292]++;cov_1ks4ntaci2().s[1005]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[294][0]++;cov_1ks4ntaci2().s[1006]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[294][1]++;}var f=(cov_1ks4ntaci2().s[1007]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[1008]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[295][0]++;cov_1ks4ntaci2().s[1009]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[295][1]++;}cov_1ks4ntaci2().s[1010]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[296][0]++;cov_1ks4ntaci2().s[1011]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[296][1]++;}cov_1ks4ntaci2().s[1012]++;this.columns.push({fieldName:field,owner:f.owner,type:f.type,period:binning});cov_1ks4ntaci2().s[1013]++;return this;},/** - * Add an aggregate to each cell of the pivot. - * - * @param {String} fieldName The name of field to aggregate. - * @param {String} label a human readable name for this aggregate. - * @param {String} statsFunction The function to use for aggregation, see class docs for valid stats functions. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addCellValue:function(fieldName,label,statsFunction){cov_1ks4ntaci2().f[293]++;cov_1ks4ntaci2().s[1014]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[297][0]++;cov_1ks4ntaci2().s[1015]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[297][1]++;}var f=(cov_1ks4ntaci2().s[1016]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1017]++;if((cov_1ks4ntaci2().b[299][0]++,utils.contains(["string","ipv4"],f.type))&&(cov_1ks4ntaci2().b[299][1]++,!utils.contains(["list","values","first","last","count","dc"],statsFunction))){cov_1ks4ntaci2().b[298][0]++;cov_1ks4ntaci2().s[1018]++;throw new Error("Stats function on string and IPv4 fields must be one of:"+" list, distinct_values, first, last, count, or distinct_count; found "+statsFunction);}else{cov_1ks4ntaci2().b[298][1]++;cov_1ks4ntaci2().s[1019]++;if((cov_1ks4ntaci2().b[301][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[301][1]++,!utils.contains(["sum","count","average","min","max","stdev","list","values"],statsFunction))){cov_1ks4ntaci2().b[300][0]++;cov_1ks4ntaci2().s[1020]++;throw new Error("Stats function on number field must be must be one of:"+" sum, count, average, max, min, stdev, list, or distinct_values; found "+statsFunction);}else{cov_1ks4ntaci2().b[300][1]++;cov_1ks4ntaci2().s[1021]++;if((cov_1ks4ntaci2().b[303][0]++,"timestamp"===f.type)&&(cov_1ks4ntaci2().b[303][1]++,!utils.contains(["duration","earliest","latest","list","values"],statsFunction))){cov_1ks4ntaci2().b[302][0]++;cov_1ks4ntaci2().s[1022]++;throw new Error("Stats function on timestamp field must be one of:"+" duration, earliest, latest, list, or distinct values; found "+statsFunction);}else{cov_1ks4ntaci2().b[302][1]++;cov_1ks4ntaci2().s[1023]++;if((cov_1ks4ntaci2().b[305][0]++,utils.contains(["objectCount","childCount"],f.type))&&(cov_1ks4ntaci2().b[305][1]++,"count"!==statsFunction)){cov_1ks4ntaci2().b[304][0]++;cov_1ks4ntaci2().s[1024]++;throw new Error("Stats function on childcount and objectcount fields must be count; "+"found "+statsFunction);}else{cov_1ks4ntaci2().b[304][1]++;cov_1ks4ntaci2().s[1025]++;if("boolean"===f.type){cov_1ks4ntaci2().b[306][0]++;cov_1ks4ntaci2().s[1026]++;throw new Error("Cannot use boolean valued fields as cell values.");}else{cov_1ks4ntaci2().b[306][1]++;}}}}}cov_1ks4ntaci2().s[1027]++;this.cells.push({fieldName:fieldName,owner:f.lineage.join("."),type:f.type,label:label,sparkline:false,// Not properly implemented in core yet. -value:statsFunction});cov_1ks4ntaci2().s[1028]++;return this;},/** - * Returns a JSON ready object representation of this pivot specification. - * - * @return {Object} The JSON ready object representation of this pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */toJsonObject:function(){cov_1ks4ntaci2().f[294]++;cov_1ks4ntaci2().s[1029]++;return{dataModel:this.dataModelObject.dataModel.name,baseClass:this.dataModelObject.name,rows:this.rows,columns:this.columns,cells:this.cells,filters:this.filters};},/** - * Query Splunk for SPL queries corresponding to a pivot report - * for this data model, defined by this `PivotSpecification`. - * - * @example - * - * service.dataModels().fetch(function(err, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpec = searches.createPivotSpecification(); - * // Use of the fluent API - * pivotSpec.addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .pivot(function(pivotErr, pivot) { - * console.log("Pivot search is:", pivot.search); - * }); - * }); - * - * @param {Function} callback A function to call when done getting the pivot: `(err, pivot)`. - * - * @method splunkjs.Service.PivotSpecification - */pivot:function(callback){cov_1ks4ntaci2().f[295]++;var svc=(cov_1ks4ntaci2().s[1030]++,this.dataModelObject.dataModel.service);var args=(cov_1ks4ntaci2().s[1031]++,{pivot_json:JSON.stringify(this.toJsonObject())});cov_1ks4ntaci2().s[1032]++;if(!utils.isUndefined(this.accelerationNamespace)){cov_1ks4ntaci2().b[307][0]++;cov_1ks4ntaci2().s[1033]++;args.namespace=this.accelerationNamespace;}else{cov_1ks4ntaci2().b[307][1]++;}cov_1ks4ntaci2().s[1034]++;return svc.get(Paths.pivot+"/"+encodeURIComponent(this.dataModelObject.dataModel.name),args,function(err,response){cov_1ks4ntaci2().f[296]++;cov_1ks4ntaci2().s[1035]++;if(err){cov_1ks4ntaci2().b[308][0]++;cov_1ks4ntaci2().s[1036]++;callback(new Error(err.data.messages[0].text),response);cov_1ks4ntaci2().s[1037]++;return;}else{cov_1ks4ntaci2().b[308][1]++;}cov_1ks4ntaci2().s[1038]++;if((cov_1ks4ntaci2().b[310][0]++,response.data.entry)&&(cov_1ks4ntaci2().b[310][1]++,response.data.entry[0])){cov_1ks4ntaci2().b[309][0]++;cov_1ks4ntaci2().s[1039]++;callback(null,new root.Pivot(svc,response.data.entry[0].content));}else{cov_1ks4ntaci2().b[309][1]++;cov_1ks4ntaci2().s[1040]++;callback(new Error("Didn't get a Pivot report back from Splunk"),response);}});},/** - * Convenience method to wrap up the `PivotSpecification.pivot()` and - * `Pivot.run()` function calls. - * - * Query Splunk for SPL queries corresponding to a pivot report - * for this data model, defined by this `PivotSpecification`; then, - * starts a search job running this pivot, accelerated if possible. - * - * service.dataModels().fetch(function(fetchErr, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpec = searches.createPivotSpecification(); - * // Use of the fluent API - * pivotSpec.addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .run(function(err, job, pivot) { - * console.log("Job SID is:", job.sid); - * console.log("Pivot search is:", pivot.search); - * }); - * }); - * @param {Object} args A dictionary of properties for the search job (optional). For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call when done getting the pivot: `(err, job, pivot)`. - * - * @method splunkjs.Service.PivotSpecification - */run:function(args,callback){cov_1ks4ntaci2().f[297]++;cov_1ks4ntaci2().s[1041]++;if(!callback){cov_1ks4ntaci2().b[311][0]++;cov_1ks4ntaci2().s[1042]++;callback=args;cov_1ks4ntaci2().s[1043]++;args={};}else{cov_1ks4ntaci2().b[311][1]++;}cov_1ks4ntaci2().s[1044]++;args=(cov_1ks4ntaci2().b[312][0]++,args)||(cov_1ks4ntaci2().b[312][1]++,{});cov_1ks4ntaci2().s[1045]++;this.pivot(function(err,pivot){cov_1ks4ntaci2().f[298]++;cov_1ks4ntaci2().s[1046]++;if(err){cov_1ks4ntaci2().b[313][0]++;cov_1ks4ntaci2().s[1047]++;callback(err,null,null);}else{cov_1ks4ntaci2().b[313][1]++;cov_1ks4ntaci2().s[1048]++;pivot.run(args,Async.augment(callback,pivot));}});}});/** - * Represents one of the structured views in a `DataModel`. - * - * Has these properties: - * - `dataModel` (_splunkjs.Service.DataModel_): The `DataModel` to which this `DataModelObject` belongs. - * - `name` (_string_): The name of this `DataModelObject`. - * - `displayName` (_string_): The human readable name of this `DataModelObject`. - * - `parentName` (_string_): The name of the parent `DataModelObject` to this one. - * - `lineage` (_array_): An array of strings of the lineage of the data model - * on which this field is defined. - * - `fields` (_object_): A dictionary of `DataModelField` objects, accessible by name. - * - `constraints` (_array_): An array of `DataModelConstraint` objects. - * - `calculations` (_object_): A dictionary of `DataModelCalculation` objects, accessible by ID. - * - * BaseSearch has an additional property: - * - `baseSearch` (_string_): The search query wrapped by this data model object. - * - * BaseTransaction has additional properties: - * - `groupByFields` (_string_): The fields that will be used to group events into transactions. - * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned - * and split into transactions. - * - `maxSpan` (_string_): The maximum time span of a transaction. - * - `maxPause` (_string_): The maximum pause time of a transaction. - * - * @class splunkjs.Service.DataModelObject - */cov_1ks4ntaci2().s[1049]++;root.DataModelObject=Class.extend({/** - * Constructor for a data model object. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `objectName` (_string_): The name for this data model object. - * - `displayName` (_string_): A human readable name for this data model object. - * - `parentName` (_string_): The name of the data model that owns this data model object. - * - `lineage` (_string_): The lineage of the data model that owns this data model object, - * items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - `fields` (_array_): An array of data model fields. - * - `constraints` (_array_): An array of data model constraints. - * - `calculations` (_array_): An array of data model calculations. - * - `baseSearch` (_string_): The search query wrapped by this data model object; exclusive to BaseSearch (optional) - * - `groupByFields` (_array_): The fields that will be used to group events into transactions; exclusive to BaseTransaction (optional) - * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned - * and split into transactions; exclusive to BaseTransaction (optional) - * - `maxSpan` (_string_): The maximum time span of a transaction; exclusive to BaseTransaction (optional) - * - `maxPause` (_string_): The maximum pause time of a transaction; exclusive to BaseTransaction (optional) - * - * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. - * - * @method splunkjs.Service.DataModelObject - */init:function(props,parentDataModel){cov_1ks4ntaci2().f[299]++;cov_1ks4ntaci2().s[1050]++;props=(cov_1ks4ntaci2().b[314][0]++,props)||(cov_1ks4ntaci2().b[314][1]++,{});cov_1ks4ntaci2().s[1051]++;props.owner=(cov_1ks4ntaci2().b[315][0]++,props.owner)||(cov_1ks4ntaci2().b[315][1]++,"");cov_1ks4ntaci2().s[1052]++;this.dataModel=parentDataModel;cov_1ks4ntaci2().s[1053]++;this.name=props.objectName;cov_1ks4ntaci2().s[1054]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[1055]++;this.parentName=props.parentName;cov_1ks4ntaci2().s[1056]++;this.lineage=props.lineage.split(".");// Properties exclusive to BaseTransaction -cov_1ks4ntaci2().s[1057]++;if(props.hasOwnProperty("groupByFields")){cov_1ks4ntaci2().b[316][0]++;cov_1ks4ntaci2().s[1058]++;this.groupByFields=props.groupByFields;}else{cov_1ks4ntaci2().b[316][1]++;}cov_1ks4ntaci2().s[1059]++;if(props.hasOwnProperty("objectsToGroup")){cov_1ks4ntaci2().b[317][0]++;cov_1ks4ntaci2().s[1060]++;this.objectsToGroup=props.objectsToGroup;}else{cov_1ks4ntaci2().b[317][1]++;}cov_1ks4ntaci2().s[1061]++;if(props.hasOwnProperty("transactionMaxTimeSpan")){cov_1ks4ntaci2().b[318][0]++;cov_1ks4ntaci2().s[1062]++;this.maxSpan=props.transactionMaxTimeSpan;}else{cov_1ks4ntaci2().b[318][1]++;}cov_1ks4ntaci2().s[1063]++;if(props.hasOwnProperty("transactionMaxPause")){cov_1ks4ntaci2().b[319][0]++;cov_1ks4ntaci2().s[1064]++;this.maxPause=props.transactionMaxPause;}else{cov_1ks4ntaci2().b[319][1]++;}// Property exclusive to BaseSearch -cov_1ks4ntaci2().s[1065]++;if(props.hasOwnProperty("baseSearch")){cov_1ks4ntaci2().b[320][0]++;cov_1ks4ntaci2().s[1066]++;this.baseSearch=props.baseSearch;}else{cov_1ks4ntaci2().b[320][1]++;}// Parse fields -cov_1ks4ntaci2().s[1067]++;this.fields={};cov_1ks4ntaci2().s[1068]++;for(var i=(cov_1ks4ntaci2().s[1069]++,0);iSearch job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {String} querySuffix A search query, starting with a '|' that will be appended to the command to fetch the contents of this data model object (e.g., "| head 3"). - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @method splunkjs.Service.DataModelObject - */startSearch:function(params,querySuffix,callback){cov_1ks4ntaci2().f[311]++;var query=(cov_1ks4ntaci2().s[1112]++,"| datamodel "+this.dataModel.name+" "+this.name+" search");// Prepend a space to the querySuffix, or set it to an empty string if null or undefined -cov_1ks4ntaci2().s[1113]++;querySuffix=querySuffix?(cov_1ks4ntaci2().b[327][0]++," "+querySuffix):(cov_1ks4ntaci2().b[327][1]++,"");cov_1ks4ntaci2().s[1114]++;this.dataModel.service.search(query+querySuffix,params,callback);},/** - * Returns the data model object this one inherits from if it is a user defined, - * otherwise return null. - * - * @return {splunkjs.Service.DataModelObject|null} This data model object's parent - * or null if this is not a user defined data model object. - * - * @method splunkjs.Service.DataModelObject - */parent:function(){cov_1ks4ntaci2().f[312]++;cov_1ks4ntaci2().s[1115]++;return this.dataModel.objectByName(this.parentName);},/** - * Returns a new Pivot Specification, accepts no parameters. - * - * @return {splunkjs.Service.PivotSpecification} A new pivot specification. - * - * @method splunkjs.Service.DataModelObject - */createPivotSpecification:function(){cov_1ks4ntaci2().f[313]++;cov_1ks4ntaci2().s[1116]++;// Pass in this DataModelObject to create a PivotSpecification -return new root.PivotSpecification(this);}});/** - * Represents a data model on the server. Data models - * contain `DataModelObject` instances, which specify structured - * views on Splunk data. - * - * @endpoint datamodel/model/{name} - * @class splunkjs.Service.DataModel - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[1117]++;root.DataModel=Service.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.DataModel - */path:function(){cov_1ks4ntaci2().f[314]++;cov_1ks4ntaci2().s[1118]++;return Paths.dataModels+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.DataModel`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new data model. - * @param {Object} namespace (Optional) namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Object} props Properties of this data model: - * - `acceleration` (_string_): A JSON object with an `enabled` key, representing if acceleration is enabled or not. - * - `concise` (_string_): Indicates whether to list a concise JSON description of the data model, should always be "0". - * - `description` (_string_): The JSON describing the data model. - * - `displayName` (_string_): The name displayed for the data model in Splunk Web. - * - * @method splunkjs.Service.DataModel - */init:function(service,name,namespace,props){cov_1ks4ntaci2().f[315]++;cov_1ks4ntaci2().s[1119]++;// If not given a 4th arg, assume the namespace was omitted -if(!props){cov_1ks4ntaci2().b[328][0]++;cov_1ks4ntaci2().s[1120]++;props=namespace;cov_1ks4ntaci2().s[1121]++;namespace={};}else{cov_1ks4ntaci2().b[328][1]++;}cov_1ks4ntaci2().s[1122]++;this.name=name;cov_1ks4ntaci2().s[1123]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[1124]++;this.acceleration=(cov_1ks4ntaci2().b[329][0]++,JSON.parse(props.content.acceleration))||(cov_1ks4ntaci2().b[329][1]++,{});cov_1ks4ntaci2().s[1125]++;if(this.acceleration.hasOwnProperty("enabled")){cov_1ks4ntaci2().b[330][0]++;cov_1ks4ntaci2().s[1126]++;// convert the enabled property to a boolean -this.acceleration.enabled=!!this.acceleration.enabled;}else{cov_1ks4ntaci2().b[330][1]++;}// concise=0 (false) forces the server to return all details of the newly created data model. -// we do not want a summary of this data model -cov_1ks4ntaci2().s[1127]++;if((cov_1ks4ntaci2().b[332][0]++,!props.hasOwnProperty("concise"))||(cov_1ks4ntaci2().b[332][1]++,utils.isUndefined(props.concise))){cov_1ks4ntaci2().b[331][0]++;cov_1ks4ntaci2().s[1128]++;this.concise="0";}else{cov_1ks4ntaci2().b[331][1]++;}var dataModelDefinition=(cov_1ks4ntaci2().s[1129]++,JSON.parse(props.content.description));cov_1ks4ntaci2().s[1130]++;this.objectNames=dataModelDefinition.objectNameList;cov_1ks4ntaci2().s[1131]++;this.displayName=dataModelDefinition.displayName;cov_1ks4ntaci2().s[1132]++;this.description=dataModelDefinition.description;// Parse the objects for this data model -var objs=(cov_1ks4ntaci2().s[1133]++,dataModelDefinition.objects);cov_1ks4ntaci2().s[1134]++;this.objects=[];cov_1ks4ntaci2().s[1135]++;for(var i=(cov_1ks4ntaci2().s[1136]++,0);i0);}});}});})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UuanMiXSwibmFtZXMiOlsiQ29udGV4dCIsInJlcXVpcmUiLCJIdHRwIiwiQXN5bmMiLCJQYXRocyIsIkNsYXNzIiwidXRpbHMiLCJyb290IiwiZXhwb3J0cyIsIlNlcnZpY2UiLCJCYXNlU2VydmljZSIsImV4dGVuZCIsImluaXQiLCJfc3VwZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIm1vZHVsZSIsInNwZWNpYWxpemUiLCJiaW5kIiwiYXBwcyIsImNvbmZpZ3VyYXRpb25zIiwiaW5kZXhlcyIsInNhdmVkU2VhcmNoZXMiLCJqb2JzIiwidXNlcnMiLCJjdXJyZW50VXNlciIsInZpZXdzIiwiZmlyZWRBbGVydEdyb3VwcyIsImRhdGFNb2RlbHMiLCJvd25lciIsImFwcCIsImh0dHAiLCJzY2hlbWUiLCJob3N0IiwicG9ydCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzZXNzaW9uS2V5IiwidmVyc2lvbiIsIkFwcGxpY2F0aW9ucyIsIm5hbWVzcGFjZSIsIkNvbmZpZ3VyYXRpb25zIiwiSW5kZXhlcyIsIlNhdmVkU2VhcmNoZXMiLCJzdG9yYWdlUGFzc3dvcmRzIiwiU3RvcmFnZVBhc3N3b3JkcyIsIkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24iLCJKb2JzIiwiRGF0YU1vZGVscyIsIlVzZXJzIiwiVmlld3MiLCJzZWFyY2giLCJxdWVyeSIsInBhcmFtcyIsImNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsImdldEpvYiIsInNpZCIsImpvYiIsIkpvYiIsImZldGNoIiwib25lc2hvdFNlYXJjaCIsInRoYXQiLCJyZXEiLCJnZXQiLCJlcnIiLCJyZXNwb25zZSIsImRhdGEiLCJlbnRyeSIsImNvbnRlbnQiLCJ1c2VyIiwiVXNlciIsIndhc0Fib3J0ZWQiLCJzZXJ2ZXJJbmZvIiwiU2VydmVySW5mbyIsInBhcnNlIiwicSIsInBhcnNlciIsInR5cGVhaGVhZCIsInByZWZpeCIsImNvdW50IiwicmVzdWx0cyIsImxvZyIsImV2ZW50IiwiaXNPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwicGF0aCIsInBhdGhzIiwic3VibWl0RXZlbnQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsInBvc3QiLCJyZXF1ZXN0IiwiRW5kcG9pbnQiLCJzZXJ2aWNlIiwicXVhbGlmaWVkUGF0aCIsIkVycm9yIiwiZGVsIiwicmVscGF0aCIsInVybCIsImdldF92MiIsIlJlc291cmNlIiwiZnVsbHBhdGgiLCJfcHJvcGVydGllcyIsIl9zdGF0ZSIsIl9sb2FkIiwicHJvcGVydGllcyIsInN0YXRlIiwiRW50aXR5IiwiZmV0Y2hPblVwZGF0ZSIsInJlbW92ZSIsInVwZGF0ZSIsImZpZWxkcyIsImxpbmtzIiwiYWNsIiwiYXV0aG9yIiwidXBkYXRlZCIsInB1Ymxpc2hlZCIsImVuYWJsZSIsImRpc2FibGUiLCJyZWxvYWQiLCJfZmllbGRzIiwiX2FjbCIsIl9saW5rcyIsImlzQXJyYXkiLCJfYXV0aG9yIiwiX3VwZGF0ZWQiLCJfcHVibGlzaGVkIiwib3B0aW9ucyIsInByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJDb2xsZWN0aW9uIiwiZmV0Y2hPbkVudGl0eUNyZWF0aW9uIiwiY3JlYXRlIiwibGlzdCIsIml0ZW0iLCJpbnN0YW50aWF0ZUVudGl0eSIsIl9lbnRpdGllcyIsIl9lbnRpdGllc0J5TmFtZSIsIl9wYWdpbmciLCJlbnRpdGllcyIsImVudGl0aWVzQnlOYW1lIiwiZW50aXR5UHJvcGVydHlMaXN0IiwiaSIsImxlbmd0aCIsImVudGl0eSIsInB1c2giLCJuYW1lIiwicGFnaW5nIiwiZmV0Y2hfdjIiLCJpZCIsImlzRW1wdHkiLCJmdWxsUGF0aCIsImNsb25lIiwiU2F2ZWRTZWFyY2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJhY2tub3dsZWRnZSIsImRpc3BhdGNoIiwiaGlzdG9yeSIsInN1cHByZXNzSW5mbyIsImFsZXJ0Q291bnQiLCJwYXJzZUludCIsInRyaWdnZXJlZF9hbGVydF9jb3VudCIsImZpcmVkQWxlcnRHcm91cCIsIkZpcmVkQWxlcnRHcm91cCIsImpvYkRhdGEiLCJuYW1lc3BhY2VGcm9tUHJvcGVydGllcyIsImNhbGwiLCJlbnRpdHlOYW1lc3BhY2UiLCJTdG9yYWdlUGFzc3dvcmQiLCJGaXJlZEFsZXJ0IiwiZmlyZWRBbGVydHMiLCJhY3Rpb25zIiwiYWxlcnRUeXBlIiwiYWxlcnRfdHlwZSIsImlzRGlnZXN0TW9kZSIsImRpZ2VzdF9tb2RlIiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uX3RpbWVfcmVuZGVyZWQiLCJzYXZlZFNlYXJjaE5hbWUiLCJzYXZlZHNlYXJjaF9uYW1lIiwic2V2ZXJpdHkiLCJ0cmlnZ2VyVGltZSIsInRyaWdnZXJfdGltZSIsInRyaWdnZXJUaW1lUmVuZGVyZWQiLCJ0cmlnZ2VyX3RpbWVfcmVuZGVyZWQiLCJ0cmlnZ2VyZWRBbGVydENvdW50IiwidHJpZ2dlcmVkX2FsZXJ0cyIsImZpcmVkQWxlcnREYXRhIiwiZmlyZWRBbGVydCIsIkFwcGxpY2F0aW9uIiwic2V0dXBJbmZvIiwidXBkYXRlSW5mbyIsImluZm8iLCJWaWV3IiwiSW5kZXgiLCJyZXN1bHQiLCJ2ZXJzaW9uQ29tcGFyZSIsIkNvbmZpZ3VyYXRpb25TdGFuemEiLCJmaWxlIiwiQ29uZmlndXJhdGlvbkZpbGUiLCJnZXREZWZhdWx0U3RhbnphIiwic3RhbnphTmFtZSIsInZhbHVlcyIsImZpbGVuYW1lIiwiX19jb25mIiwiZG9lc0ZpbGVFeGlzdCIsImZpbGVzIiwiZmlsdGVyIiwiZiIsImNvZGUiLCJtZXNzYWdlIiwiY29uZmlndXJhdGlvbkZpbGUiLCJmZXRjaGVkRmlsZSIsImVycm9yIiwiZXJyb3JDb2RlIiwiZXJyb3JNZXNzYWdlIiwiZG9lc1N0YW56YUV4aXN0Iiwic3RhbnphIiwiZmV0Y2hlZFN0YW56YSIsImNyZWF0ZV92MiIsImNvbmZpZ3MiLCJzdmMiLCJrZXlWYWx1ZU1hcCIsImRvZXNGaWxlRXhpc3RSZXNwb25zZSIsImNvbmZpZ0ZpbGUiLCJjb25zb2xlIiwibmV3RmlsZSIsImRvZXNTdGFuemFFeGlzdFJlc3BvbnNlIiwiY29uZmlnU3RhbnphIiwibmV3U3RhbnphIiwidXBkYXRlZFN0YW56YSIsImNhbmNlbCIsImRpc2FibGVQcmV2aWV3IiwiZW5hYmxlUHJldmlldyIsImV2ZW50cyIsImZpbmFsaXplIiwicGF1c2UiLCJwcmV2aWV3Iiwic2VhcmNobG9nIiwic2V0UHJpb3JpdHkiLCJzZXRUVEwiLCJzdW1tYXJ5IiwidGltZWxpbmUiLCJ0b3VjaCIsInVucGF1c2UiLCJhY3Rpb24iLCJvdXRwdXRfbW9kZSIsIml0ZXJhdG9yIiwidHlwZSIsIlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IiLCJ2YWx1ZSIsInByaW9yaXR5IiwidHRsIiwidHJhY2siLCJjYWxsYmFja3MiLCJwZXJpb2QiLCJkb25lIiwibm9DYWxsYmFja3NBZnRlclJlYWR5IiwicHJvZ3Jlc3MiLCJmYWlsZWQiLCJyZWFkeSIsIl9wcmVyZWFkeSIsIl9zdG9wcGVkQWZ0ZXJSZWFkeSIsImVtaXR0ZWRSZWFkeSIsImRvbmVMb29waW5nIiwid2hpbHN0IiwibmV4dEl0ZXJhdGlvbiIsImRpc3BhdGNoU3RhdGUiLCJub3RSZWFkeSIsImlzRG9uZSIsImlzRmFpbGVkIiwic2xlZXAiLCJleGVjX21vZGUiLCJ0b0xvd2VyQ2FzZSIsIm91dHB1dE1vZGUiLCJEYXRhTW9kZWxGaWVsZCIsIl90eXBlcyIsImZpZWxkTmFtZSIsImRpc3BsYXlOYW1lIiwibXVsdGl2YWx1ZWQiLCJtdWx0aXZhbHVlIiwicmVxdWlyZWQiLCJoaWRkZW4iLCJlZGl0YWJsZSIsImNvbW1lbnQiLCJmaWVsZFNlYXJjaCIsImxpbmVhZ2UiLCJzcGxpdCIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1RpbWVzdGFtcCIsImlzT2JqZWN0Y291bnQiLCJpc0NoaWxkY291bnQiLCJpc0lQdjQiLCJpc0Jvb2xlYW4iLCJEYXRhTW9kZWxDb25zdHJhaW50IiwiRGF0YU1vZGVsQ2FsY3VsYXRpb24iLCJjYWxjdWxhdGlvbklEIiwiY2FsY3VsYXRpb25UeXBlIiwib3V0cHV0RmllbGRzIiwiZXhwcmVzc2lvbiIsImlucHV0RmllbGQiLCJsb29rdXBOYW1lIiwiaW5wdXRGaWVsZE1hcHBpbmdzIiwibG9va3VwSW5wdXRzIiwib3V0cHV0RmllbGROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpc0VkaXRhYmxlIiwiaXNMb29rdXAiLCJpc0V2YWwiLCJpc1JleCIsImlzR2VvSVAiLCJQaXZvdCIsImRyaWxsZG93blNlYXJjaCIsImRyaWxsZG93bl9zZWFyY2giLCJwcmV0dHlRdWVyeSIsIm9wZW5JblNlYXJjaCIsIm9wZW5faW5fc2VhcmNoIiwicGl2b3RTZWFyY2giLCJwaXZvdF9zZWFyY2giLCJ0c3RhdHNTZWFyY2giLCJ0c3RhdHNfc2VhcmNoIiwicnVuIiwiYXJncyIsImlzVW5kZWZpbmVkIiwiUGl2b3RTcGVjaWZpY2F0aW9uIiwiX2NvbXBhcmlzb25zIiwiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsImlwdjQiLCJfYmlubmluZyIsIl9zb3J0RGlyZWN0aW9uIiwiX3N0YXRzRnVuY3Rpb25zIiwiZGF0YU1vZGVsT2JqZWN0IiwiY29sdW1ucyIsInJvd3MiLCJmaWx0ZXJzIiwiY2VsbHMiLCJhY2NlbGVyYXRpb25OYW1lc3BhY2UiLCJkYXRhTW9kZWwiLCJpc0FjY2VsZXJhdGVkIiwicGl2b3QiLCJzZXRBY2NlbGVyYXRpb25Kb2IiLCJhZGRGaWx0ZXIiLCJjb21wYXJpc29uVHlwZSIsImNvbXBhcmlzb25PcCIsImNvbXBhcmVUbyIsImhhc0ZpZWxkIiwiZmllbGRCeU5hbWUiLCJjb250YWlucyIsInJldCIsImpvaW4iLCJydWxlIiwiY29tcGFyYXRvciIsImFkZExpbWl0RmlsdGVyIiwic29ydEF0dHJpYnV0ZSIsInNvcnREaXJlY3Rpb24iLCJsaW1pdCIsInN0YXRzRnVuY3Rpb24iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlT3duZXIiLCJsaW1pdEFtb3VudCIsInN0YXRzRm4iLCJsaW1pdFR5cGUiLCJhZGRSb3dTcGxpdCIsImxhYmVsIiwicm93IiwiZGlzcGxheSIsImFkZFJhbmdlUm93U3BsaXQiLCJmaWVsZCIsInJhbmdlcyIsInVwZGF0ZVJhbmdlcyIsInN0YXJ0IiwiZW5kIiwic3RlcCIsInNpemUiLCJtYXhOdW1iZXJPZiIsImFkZEJvb2xlYW5Sb3dTcGxpdCIsInRydWVEaXNwbGF5VmFsdWUiLCJmYWxzZURpc3BsYXlWYWx1ZSIsInRydWVMYWJlbCIsImZhbHNlTGFiZWwiLCJhZGRUaW1lc3RhbXBSb3dTcGxpdCIsImJpbm5pbmciLCJhZGRDb2x1bW5TcGxpdCIsImNvbCIsImFkZFJhbmdlQ29sdW1uU3BsaXQiLCJ1cGRhdGVkUmFuZ2VzIiwiYWRkQm9vbGVhbkNvbHVtblNwbGl0IiwiYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQiLCJhZGRDZWxsVmFsdWUiLCJzcGFya2xpbmUiLCJ0b0pzb25PYmplY3QiLCJiYXNlQ2xhc3MiLCJwaXZvdF9qc29uIiwibWVzc2FnZXMiLCJ0ZXh0IiwiYXVnbWVudCIsIkRhdGFNb2RlbE9iamVjdCIsInBhcmVudERhdGFNb2RlbCIsIm9iamVjdE5hbWUiLCJwYXJlbnROYW1lIiwiZ3JvdXBCeUZpZWxkcyIsIm9iamVjdHNUb0dyb3VwIiwibWF4U3BhbiIsInRyYW5zYWN0aW9uTWF4VGltZVNwYW4iLCJtYXhQYXVzZSIsInRyYW5zYWN0aW9uTWF4UGF1c2UiLCJiYXNlU2VhcmNoIiwiY29uc3RyYWludHMiLCJqIiwiY2FsY3VsYXRpb25zIiwiayIsImlzQmFzZVNlYXJjaCIsImlzQmFzZVRyYW5zYWN0aW9uIiwiZmllbGROYW1lcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJhbGxGaWVsZHMiLCJjb21iaW5lZEZpZWxkcyIsImNmIiwiYWxsRmllbGROYW1lcyIsImNhbGN1bGF0aW9uSURzIiwiY2FsY3VsYXRpb24iLCJjYWxjdWxhdGVkRmllbGROYW1lcyIsImNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iIiwiZWFybGllc3RUaW1lIiwidW5kZWZpbmVkIiwiZWFybGllc3RfdGltZSIsInN0YXJ0U2VhcmNoIiwicXVlcnlTdWZmaXgiLCJwYXJlbnQiLCJvYmplY3RCeU5hbWUiLCJjcmVhdGVQaXZvdFNwZWNpZmljYXRpb24iLCJEYXRhTW9kZWwiLCJhY2NlbGVyYXRpb24iLCJlbmFibGVkIiwiY29uY2lzZSIsImRhdGFNb2RlbERlZmluaXRpb24iLCJkZXNjcmlwdGlvbiIsIm9iamVjdE5hbWVzIiwib2JqZWN0TmFtZUxpc3QiLCJvYmpzIiwib2JqZWN0cyIsImhhc09iamVjdCIsInVwZGF0ZWRQcm9wcyIsImFjY2NlbGVyYXRpb24iLCJjcm9uX3NjaGVkdWxlIiwiY3JvblNjaGVkdWxlIiwiZGF0YU1vZGVsTmFtZXNwYWNlIiwicmVwbGFjZSIsImVuZHBvaW50IiwiX2VuZHBvaW50IiwiX3BhZ2VzaXplIiwicGFnZXNpemUiLCJfb2Zmc2V0IiwibmV4dCIsIm9mZnNldCIsIm51bVJlc3VsdHMiXSwibWFwcGluZ3MiOiI4bnZOQWVZO21IQWZaLEssQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLENBQUMsVUFBVyxDQUNSLGFBRFEsd0JBR1IsR0FBSUEsQ0FBQUEsT0FBTywwQkFBT0MsT0FBTyxDQUFDLFdBQUQsQ0FBZCxDQUFYLENBQ0EsR0FBSUMsQ0FBQUEsSUFBSSwwQkFBVUQsT0FBTyxDQUFDLFFBQUQsQ0FBakIsQ0FBUixDQUNBLEdBQUlFLENBQUFBLEtBQUssMEJBQVNGLE9BQU8sQ0FBQyxTQUFELENBQWhCLENBQVQsQ0FDQSxHQUFJRyxDQUFBQSxLQUFLLDBCQUFTSCxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CRyxLQUE1QixDQUFULENBQ0EsR0FBSUMsQ0FBQUEsS0FBSywwQkFBU0osT0FBTyxDQUFDLGdCQUFELENBQVAsQ0FBMEJJLEtBQW5DLENBQVQsQ0FDQSxHQUFJQyxDQUFBQSxLQUFLLDBCQUFTTCxPQUFPLENBQUMsU0FBRCxDQUFoQixDQUFULENBRUEsR0FBSU0sQ0FBQUEsSUFBSSwwQkFBRyw0QkFBQUMsT0FBTywrQkFBSSxJQUFKLENBQVYsQ0FBUixDQUNBLEdB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UCxDQUFnQjZYLFVBQVUsQ0FBRyxDQUE3QixDQUFSLENBQ0gsQ0FDSixDQVZNLENBQVAsQ0FXSCxDQTdCeUMsQ0FBYixDQUFqQyxDQStCSCxDQTNwTEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEqL1xuLy8gQ29weXJpZ2h0IDIwMTQgU3BsdW5rLCBJbmMuXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTogeW91IG1heVxuLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW5cbi8vIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuLy9cbi8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVRcbi8vIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZVxuLy8gTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbi8vIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgXG4gICAgdmFyIENvbnRleHQgICAgID0gcmVxdWlyZSgnLi9jb250ZXh0Jyk7XG4gICAgdmFyIEh0dHAgICAgICAgID0gcmVxdWlyZSgnLi9odHRwJyk7XG4gICAgdmFyIEFzeW5jICAgICAgID0gcmVxdWlyZSgnLi9hc3luYycpO1xuICAgIHZhciBQYXRocyAgICAgICA9IHJlcXVpcmUoJy4vcGF0aHMnKS5QYXRocztcbiAgICB2YXIgQ2xhc3MgICAgICAgPSByZXF1aXJlKCcuL2pxdWVyeS5jbGFzcycpLkNsYXNzO1xuICAgIHZhciB1dGlscyAgICAgICA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbiAgICBcbiAgICB2YXIgcm9vdCA9IGV4cG9ydHMgfHwgdGhpcztcbiAgICB2YXIgU2VydmljZSA9IG51bGw7XG4gICAgXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gU3BsdW5rIEVudGVycHJpc2UgYW5kIFNwbHVuayBTdG9ybS5cbiAgICAgKiBcbiAgICAgKiBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgaXMgdGhlcmVmb3JlIFNESy1wcml2YXRlLlxuICAgICAqIFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5wcml2YXRlLkJhc2VTZXJ2aWNlXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuQ29udGV4dFxuICAgICAqL1xuICAgIHZhciBCYXNlU2VydmljZSA9IENvbnRleHQuZXh0ZW5kKHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIHJvb3QgYWNjZXNzIHBvaW50IHRvIFNwbHVuayBmdW5jdGlvbmFsaXR5IHdpdGggdHlwZWQgYWNjZXNzIHRvIFxuICAgICAqIFNwbHVuayByZXNvdXJjZXMgc3VjaCBhcyBzZWFyY2hlcywgaW5kZXhlcywgaW5wdXRzLCBhbmQgbW9yZS4gUHJvdmlkZXNcbiAgICAgKiBtZXRob2RzIHRvIGF1dGhlbnRpY2F0ZSBhbmQgY3JlYXRlIHNwZWNpYWxpemVkIGluc3RhbmNlcyBvZiB0aGUgc2VydmljZS5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMucHJpdmF0ZS5CYXNlU2VydmljZVxuICAgICAqL1xuICAgIG1vZHVsZS5leHBvcnRzID0gcm9vdCA9IFNlcnZpY2UgPSBCYXNlU2VydmljZS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuSHR0cH0gaHR0cCBBbiBpbnN0YW5jZSBvZiBhIGBzcGx1bmtqcy5IdHRwYCBjbGFzcy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczogXG4gICAgICAgICAqICAgIC0gYHNjaGVtZWAgKF9zdHJpbmdfKTogVGhlIHNjaGVtZSAoXCJodHRwXCIgb3IgXCJodHRwc1wiKSBmb3IgYWNjZXNzaW5nIFNwbHVuay5cbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIGhvc3QgbmFtZSAodGhlIGRlZmF1bHQgaXMgXCJsb2NhbGhvc3RcIikuXG4gICAgICAgICAqICAgIC0gYHBvcnRgIChfaW50ZWdlcl8pOiBUaGUgcG9ydCBudW1iZXIgKHRoZSBkZWZhdWx0IGlzIDgwODkpLlxuICAgICAgICAgKiAgICAtIGB1c2VybmFtZWAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayBhY2NvdW50IHVzZXJuYW1lLCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKiAgICAtIGBwYXNzd29yZGAgKF9zdHJpbmdfKTogVGhlIHBhc3N3b3JkLCB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIG93bmVyICh1c2VybmFtZSkgY29tcG9uZW50IG9mIHRoZSBuYW1lc3BhY2UuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb21wb25lbnQgb2YgdGhlIG5hbWVzcGFjZS5cbiAgICAgICAgICogICAgLSBgc2Vzc2lvbktleWAgKF9zdHJpbmdfKTogVGhlIGN1cnJlbnQgc2Vzc2lvbiB0b2tlbi5cbiAgICAgICAgICogICAgLSBgYXV0b2xvZ2luYCAoX2Jvb2xlYW5fKTogYHRydWVgIHRvIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIGxvZyBpbiBhZ2FpbiBpZiB0aGUgc2Vzc2lvbiB0ZXJtaW5hdGVzLCBgZmFsc2VgIGlmIG5vdCAoYHRydWVgIGJ5IGRlZmF1bHQpLlxuICAgICAgICAgKiAgICAtIGB2ZXJzaW9uYCAoX3N0cmluZ18pOiBUaGUgdmVyc2lvbiBzdHJpbmcgZm9yIFNwbHVuaywgZm9yIGV4YW1wbGUgXCI0LjMuMlwiICh0aGUgZGVmYXVsdCBpcyBcIjUuMFwiKS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLnNwZWNpYWxpemUgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zcGVjaWFsaXplKTtcbiAgICAgICAgICAgIHRoaXMuYXBwcyAgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmFwcHMpO1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleGVzICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaW5kZXhlcyk7XG4gICAgICAgICAgICB0aGlzLnNhdmVkU2VhcmNoZXMgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zYXZlZFNlYXJjaGVzKTtcbiAgICAgICAgICAgIHRoaXMuam9icyAgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmpvYnMpO1xuICAgICAgICAgICAgdGhpcy51c2VycyAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXNlcnMpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3VycmVudFVzZXIpO1xuICAgICAgICAgICAgdGhpcy52aWV3cyAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudmlld3MpO1xuICAgICAgICAgICAgdGhpcy5maXJlZEFsZXJ0R3JvdXBzICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmlyZWRBbGVydEdyb3Vwcyk7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbHMgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kYXRhTW9kZWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBgU2VydmljZWAgaW5zdGFuY2UgZm9yXG4gICAgICAgICAqIGEgc3BlY2lmaWMgbmFtZXNwYWNlIGNvbnRleHQuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzdmMgPSAuLi47XG4gICAgICAgICAqICAgICAgdmFyIG5ld1NlcnZpY2UgPSBzdmMuc3BlY2lhbGl6ZShcIm15dXNlclwiLCBcInVuaXhcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvd25lciBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhcHAgVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2V9IFRoZSBzcGVjaWFsaXplZCBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc3BlY2lhbGl6ZTogZnVuY3Rpb24ob3duZXIsIGFwcCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlKHRoaXMuaHR0cCwge1xuICAgICAgICAgICAgICAgIHNjaGVtZTogdGhpcy5zY2hlbWUsXG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5ob3N0LCAgIFxuICAgICAgICAgICAgICAgIHBvcnQ6IHRoaXMucG9ydCwgICAgICAgXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgb3duZXI6IG93bmVyLFxuICAgICAgICAgICAgICAgIGFwcDogYXBwLCBcbiAgICAgICAgICAgICAgICBzZXNzaW9uS2V5OiB0aGlzLnNlc3Npb25LZXksXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgQXBwbGljYXRpb25zYCBjb2xsZWN0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIFxuICAgICAgICAgKiBsaXN0IGluc3RhbGxlZCBhcHBzIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgaW5zdGFsbGVkIGFwcHNcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHN2Yy5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5mZXRjaChmdW5jdGlvbihlcnIpIHsgY29uc29sZS5sb2coYXBwcy5saXN0KCkpOyB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9ufSBUaGUgYEFwcGxpY2F0aW9uc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWxcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGFwcHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkFwcGxpY2F0aW9ucyh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgQ29uZmlndXJhdGlvbnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IFxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCByZXRyaWV2ZSBjb25maWd1cmF0aW9uICguY29uZikgZmlsZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgcHJvcGVydGllcyBpbiB0aGUgJ3Byb3BzLmNvbmYnIGZpbGVcbiAgICAgICAgICogICAgICB2YXIgZmlsZXMgPSBzdmMuY29uZmlndXJhdGlvbnMoKTtcbiAgICAgICAgICogICAgICBmaWxlcy5pdGVtKFwicHJvcHNcIiwgZnVuY3Rpb24oZXJyLCBwcm9wc0ZpbGUpIHtcbiAgICAgICAgICogICAgICAgICAgcHJvcHNGaWxlLmZldGNoKGZ1bmN0aW9uKGVyciwgcHJvcHMpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BzLnByb3BlcnRpZXMoKSk7IFxuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnN9IFRoZSBgQ29uZmlndXJhdGlvbnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBjb25maWdzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGNvbmZpZ3VyYXRpb25zOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9ucyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBJbmRleGVzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIFxuICAgICAgICAgKiBsaXN0LCBhbmQgdXBkYXRlIGluZGV4ZXMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW4gX2ludGVybmFsIGluZGV4XG4gICAgICAgICAqICAgICAgdmFyIGluZGV4ZXMgPSBzdmMuaW5kZXhlcygpO1xuICAgICAgICAgKiAgICAgIGluZGV4ZXMuZmV0Y2goZnVuY3Rpb24oZXJyLCBpbmRleGVzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXMuaXRlbShcIl9pbnRlcm5hbFwiKTtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJXYXMgaW5kZXggZm91bmQ6IFwiICsgISFpbmRleCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIGBpbmRleGAgaXMgYW4gSW5kZXggb2JqZWN0LlxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleGVzfSBUaGUgYEluZGV4ZXNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqLyAgICAgICAgXG4gICAgICAgIGluZGV4ZXM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkgeyBcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5JbmRleGVzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFNhdmVkU2VhcmNoZXNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91XG4gICAgICAgICAqIGNyZWF0ZSwgbGlzdCwgYW5kIHVwZGF0ZSBzYXZlZCBzZWFyY2hlcy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBzYXZlZCBzZWFyY2hlc1xuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaGVzID0gc3ZjLnNhdmVkU2VhcmNoZXMoKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaGVzLmZldGNoKGZ1bmN0aW9uKGVyciwgc2F2ZWRTZWFyY2hlcykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIiMgT2YgU2F2ZWQgU2VhcmNoZXM6IFwiICsgc2F2ZWRTZWFyY2hlcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc30gVGhlIGBTYXZlZFNlYXJjaGVzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBzYXZlZFNlYXJjaGVzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TYXZlZFNlYXJjaGVzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFN0b3JhZ2VQYXNzd29yZHNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91XG4gICAgICAgICAqIGNyZWF0ZSwgbGlzdCwgYW5kIHVwZGF0ZSBzdG9yYWdlIHBhc3N3b3Jkcy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBzdG9yYWdlIHBhc3N3b3Jkc1xuICAgICAgICAgKiAgICAgIHZhciBzdG9yYWdlUGFzc3dvcmRzID0gc3ZjLnN0b3JhZ2VQYXNzd29yZHMoKTtcbiAgICAgICAgICogICAgICBzdG9yYWdlUGFzc3dvcmRzLmZldGNoKGZ1bmN0aW9uKGVyciwgc3RvcmFnZVBhc3N3b3Jkcykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIiMgb2YgU3RvcmFnZSBQYXNzd29yZHM6IFwiICsgc3RvcmFnZVBhc3N3b3Jkcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc30gVGhlIGBTdG9yYWdlUGFzc3dvcmRzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc3RvcmFnZS9wYXNzd29yZHNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzXG4gICAgICAgICAqL1xuICAgICAgICBzdG9yYWdlUGFzc3dvcmRzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TdG9yYWdlUGFzc3dvcmRzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBGaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBsaXN0IGFsZXJ0IGdyb3Vwcy5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqICAgICAgXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgIyBvZiBmaXJlZCBhbGVydCBncm91cHNcbiAgICAgICAgICogICAgICB2YXIgZmlyZWRBbGVydEdyb3VwcyA9IHN2Yy5maXJlZEFsZXJ0R3JvdXBzKCk7XG4gICAgICAgICAqICAgICAgZmlyZWRBbGVydEdyb3Vwcy5mZXRjaChmdW5jdGlvbihlcnIsIGZpcmVkQWxlcnRHcm91cHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIG9mIGFsZXJ0IGdyb3VwczogXCIgKyBmaXJlZEFsZXJ0R3JvdXBzLmxpc3QoKS5sZW5ndGgpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9ufSBUaGUgYEZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25gIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGZpcmVkQWxlcnRHcm91cHM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24odGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYEpvYnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgbGlzdCxcbiAgICAgICAgICogYW5kIHJldHJpZXZlIHNlYXJjaCBqb2JzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBMaXN0IGFsbCBqb2IgSURzXG4gICAgICAgICAqICAgICAgdmFyIGpvYnMgPSBzdmMuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMuZmV0Y2goZnVuY3Rpb24oZXJyLCBqb2JzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBsaXN0ID0gam9icy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYiBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYnN9IFRoZSBgSm9ic2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi9cbiAgICAgICAgam9iczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYERhdGFNb2RlbHNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgbGlzdCxcbiAgICAgICAgICogYW5kIHJldHJpZXZlIGRhdGEgbW9kZWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YW1vZGVsL21vZGVsXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgZGF0YU1vZGVsczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRGF0YU1vZGVscyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgVXNlcnNgIGNvbGxlY3Rpb24sIHdoaWNoIGxldHMgeW91IGNyZWF0ZSwgXG4gICAgICAgICAqIGxpc3QsIGFuZCByZXRyaWV2ZSB1c2Vycy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgdXNlcm5hbWVzXG4gICAgICAgICAqICAgICAgdmFyIHVzZXJzID0gc3ZjLnVzZXJzKCk7XG4gICAgICAgICAqICAgICAgdXNlcnMuZmV0Y2goZnVuY3Rpb24oZXJyLCB1c2Vycykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IHVzZXJzLmxpc3QoKTtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNlciBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5wcm9wZXJ0aWVzKCkubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Vc2Vyc30gVGhlIGBVc2Vyc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGF1dGhvcml6YXRpb24vdXNlcnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlVzZXJzKHRoaXMpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFZpZXdzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsXG4gICAgICAgICAqIGxpc3QsIGFuZCByZXRyaWV2ZSB2aWV3cyAoY3VzdG9tIFVJcyBidWlsdCBpbiBTcGx1bmsncyBhcHAgZnJhbWV3b3JrKS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgdmlld3NcbiAgICAgICAgICogICAgICB2YXIgdmlld3MgPSBzdmMudmlld3MoKTtcbiAgICAgICAgICogICAgICB2aWV3cy5mZXRjaChmdW5jdGlvbihlcnIsIHZpZXdzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBsaXN0ID0gdmlld3MubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJWaWV3IFwiICsgKGkrMSkgKyBcIjogXCIgKyBsaXN0W2ldLnByb3BlcnRpZXMoKS5uYW1lKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3c30gVGhlIGBWaWV3c2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3NcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgdmlld3M6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlZpZXdzKHRoaXMsIG5hbWVzcGFjZSk7ICBcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2Uub25lc2hvdFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5zZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCBuZXdKb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCI6IG5ld0pvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCIgaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGNyZWF0ZWQgam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGpvYnMgPSBuZXcgcm9vdC5Kb2JzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9icy5zZWFyY2gocXVlcnksIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBnZXQgYSBgSm9iYCBieSBpdHMgc2lkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2lkIFRoZSBzZWFyY2ggSUQgZm9yIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBnZXRKb2I6IGZ1bmN0aW9uKHNpZCwgbmFtZXNwYWNlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGlzLCBzaWQsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9iLmZldGNoKHt9LCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG9uZXNob3Qgc2VhcmNoIGZyb20gYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5vbmVzaG90U2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFU1VMVCBGSUVMRFNcIjogcmVzdWx0cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgcmVzdWx0cyAoWE1MLCBKU09OLCBvciBDU1YpLlxuICAgICAgICAgKiAgICAtIGBlYXJsaWVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGVhcmxpZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYGxhdGVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGxhdGVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGByZmAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpZWxkcyB0byBhZGQgdG8gdGhlIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2g6IGAoZXJyLCByZXN1bHRzKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIG9uZXNob3RTZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGpvYnMgPSBuZXcgcm9vdC5Kb2JzKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICByZXR1cm4gam9icy5vbmVzaG90U2VhcmNoKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGxvZ2dlZCBpbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmN1cnJlbnRVc2VyKGZ1bmN0aW9uKGVyciwgdXNlcikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlYWwgbmFtZTogXCIsIHVzZXIucHJvcGVydGllcygpLnJlYWxuYW1lKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHVzZXIgaW5zdGFuY2U6IGAoZXJyLCB1c2VyKWAuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuY3VycmVudFVzZXJ9IFRoZSBgVXNlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhdXRob3JpemF0aW9uL2N1cnJlbnQtY29udGV4dFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGN1cnJlbnRVc2VyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5nZXQoUGF0aHMuY3VycmVudFVzZXIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VybmFtZSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudC51c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIgPSBuZXcgcm9vdC5Vc2VyKHRoYXQsIHVzZXJuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnNlcnZlckluZm8oZnVuY3Rpb24oZXJyLCBpbmZvKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3BsdW5rIFZlcnNpb246IFwiLCBpbmZvLnByb3BlcnRpZXMoKS52ZXJzaW9uKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlcnZlciBpbmZvOiBgKGVyciwgaW5mbylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VydmVyL2luZm9cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBzZXJ2ZXJJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2VydmVySW5mbyA9IG5ldyByb290LlNlcnZlckluZm8odGhpcyk7XG4gICAgICAgICAgICByZXR1cm4gc2VydmVySW5mby5mZXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUGFyc2VzIGEgc2VhcmNoIHF1ZXJ5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UucGFyc2UoXCJzZWFyY2ggaW5kZXg9X2ludGVybmFsIHwgaGVhZCAxXCIsIGZ1bmN0aW9uKGVyciwgcGFyc2UpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDb21tYW5kczogXCIsIHBhcnNlLmNvbW1hbmRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkgdG8gcGFyc2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQW4gb2JqZWN0IG9mIG9wdGlvbnMgZm9yIHRoZSBwYXJzZXI6XG4gICAgICAgICAqICAgIC0gYGVuYWJsZV9sb29rdXBzYCAoX2Jvb2xlYW5fKTogSWYgYHRydWVgLCBwZXJmb3JtcyByZXZlcnNlIGxvb2t1cHMgdG8gZXhwYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBvdXRwdXQgZm9ybWF0IChYTUwgb3IgSlNPTikuXG4gICAgICAgICAqICAgIC0gYHBhcnNlX29ubHlgIChfYm9vbGVhbl8pOiBJZiBgdHJ1ZWAsIGRpc2FibGVzIHRoZSBleHBhbnNpb24gb2Ygc2VhcmNoIGR1ZSB0byBldmFsdWF0aW9uIG9mIHN1YnNlYXJjaGVzLCB0aW1lIHRlcm0gZXhwYW5zaW9uLCBsb29rdXBzLCB0YWdzLCBldmVudHR5cGVzLCBhbmQgc291cmNldHlwZSBhbGlhcy5cbiAgICAgICAgICogICAgLSBgcmVsb2FkX21hY3Jvc2AgKF9ib29sZWFuXyk6IElmIGB0cnVlYCwgcmVsb2FkcyBtYWNybyBkZWZpbml0aW9ucyBmcm9tIG1hY3Jvcy5jb25mLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcGFyc2UgaW5mbzogYChlcnIsIHBhcnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvcGFyc2VyXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmFtcy5xID0gcXVlcnk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChQYXRocy5wYXJzZXIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb3ZpZGVzIGF1dG8tY29tcGxldGUgc3VnZ2VzdGlvbnMgZm9yIHNlYXJjaCBxdWVyaWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UudHlwZWFoZWFkKFwiaW5kZXg9XCIsIDEwLCBmdW5jdGlvbihlcnIsIG9wdGlvbnMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJBdXRvY29tcGxldGlvbiBvcHRpb25zOiBcIiwgb3B0aW9ucyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggVGhlIHF1ZXJ5IGZyYWdtZW50IHRvIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IFRoZSBudW1iZXIgb2Ygb3B0aW9ucyB0byByZXR1cm4gKG9wdGlvbmFsKS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGF1dG9jb21wbGV0aW9uIGluZm86IGAoZXJyLCBvcHRpb25zKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvdHlwZWFoZWFkXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgdHlwZWFoZWFkOiBmdW5jdGlvbihwcmVmaXgsIGNvdW50LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKGNvdW50KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY291bnQ7XG4gICAgICAgICAgICAgICAgY291bnQgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBjb3VudDogY291bnQgfHwgMTAsXG4gICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChQYXRocy50eXBlYWhlYWQsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gKHJlc3BvbnNlLmRhdGEgfHwge30pLnJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMgfHwgW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvZ3MgYW4gZXZlbnQgdG8gU3BsdW5rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UubG9nKFwiQSBuZXcgZXZlbnRcIiwge2luZGV4OiBcIl9pbnRlcm5hbFwiLCBzb3VyY2V0eXBlOiBcIm15c291cmNldHlwZVwifSwgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgZXZlbnQ6IFwiLCByZXN1bHQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGV2ZW50IFRoZSB0ZXh0IGZvciB0aGlzIGV2ZW50LCBvciBhIEpTT04gb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwYXJhbWV0ZXJzIGZvciBpbmRleGluZzogXG4gICAgICAgICAqICAgIC0gYGluZGV4YCAoX3N0cmluZ18pOiBUaGUgaW5kZXggdG8gc2VuZCBldmVudHMgZnJvbSB0aGlzIGlucHV0IHRvLlxuICAgICAgICAgKiAgICAtIGBob3N0YCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIEhvc3QgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC4gXG4gICAgICAgICAqICAgIC0gYGhvc3RfcmVnZXhgIChfc3RyaW5nXyk6IEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZXh0cmFjdCB0aGUgaG9zdCB2YWx1ZSBmcm9tIGVhY2ggZXZlbnQuIFxuICAgICAgICAgKiAgICAtIGBzb3VyY2VgIChfc3RyaW5nXyk6IFRoZSB2YWx1ZSB0byBwb3B1bGF0ZSBpbiB0aGUgU291cmNlIGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuXG4gICAgICAgICAqICAgIC0gYHNvdXJjZXR5cGVgIChfc3RyaW5nXyk6IFRoZSB2YWx1ZSB0byBwb3B1bGF0ZSBpbiB0aGUgU291cmNldHlwZSBmaWVsZCBmb3IgZXZlbnRzIGZyb20gdGhpcyBkYXRhIGlucHV0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgc3VibWl0dGVkOiBgKGVyciwgcmVzdWx0KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCByZWNlaXZlcnMvc2ltcGxlXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgbG9nOiBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgYSBKU09OIG9iamVjdCwgY29udmVydCBpdCB0byBhIHN0cmluZy5cbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLnBhdGhzLnN1Ym1pdEV2ZW50O1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7XCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L3BsYWluXCJ9O1xuICAgICAgICAgICAgdmFyIGJvZHkgPSBldmVudDtcbiAgICAgICAgICAgIHZhciBnZXQgPSBwYXJhbXM7XG4gICAgICAgICAgICB2YXIgcG9zdCA9IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5yZXF1ZXN0KFxuICAgICAgICAgICAgICAgIHBhdGgsIFxuICAgICAgICAgICAgICAgIG1ldGhvZCwgXG4gICAgICAgICAgICAgICAgZ2V0LCBcbiAgICAgICAgICAgICAgICBwb3N0LCBcbiAgICAgICAgICAgICAgICBib2R5LCBcbiAgICAgICAgICAgICAgICBoZWFkZXJzLCBcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIGJhc2UgZGVmaW5pdGlvbiBmb3IgYSBTcGx1bmsgZW5kcG9pbnQsIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2ZcbiAgICAgKiBhIHNwZWNpZmljIHNlcnZpY2UgYW5kIHBhdGguIFByb3ZpZGVzIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIEdFVCwgUE9TVCwgYW5kXG4gICAgICogREVMRVRFIG9wZXJhdGlvbnMgdXNlZCBpbiBzcGx1bmtqcywgYXV0b21hdGljYWxseSBwcmVwYXJpbmcgdGhlIHBhdGggY29ycmVjdGx5XG4gICAgICogYW5kIGFsbG93aW5nIGZvciByZWxhdGl2ZSBjYWxscy5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICovXG4gICAgcm9vdC5FbmRwb2ludCA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVhbGlmaWVkUGF0aCBBIGZ1bGx5LXF1YWxpZmllZCByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCIvc2VydmljZXMvc2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnR9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBxdWFsaWZpZWRQYXRoKSB7XG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXNzZWQgaW4gYSBudWxsIFNlcnZpY2UuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXF1YWxpZmllZFBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXNzZWQgaW4gYW4gZW1wdHkgcGF0aC5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB0aGlzLnF1YWxpZmllZFBhdGggPSBxdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuZ2V0ICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmdldCk7XG4gICAgICAgICAgICAvLyB0aGlzLmdldF92MiA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5nZXRfdjIpO1xuICAgICAgICAgICAgdGhpcy5wb3N0ICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucG9zdCk7XG4gICAgICAgICAgICB0aGlzLmRlbCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kZWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIEdFVCByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2L3Jlc3VsdHM/b2Zmc2V0PTFcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LmdldChcInJlc3VsdHNcIiwge29mZnNldDogMX0sIGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyhcIkRPTkVcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgcXVlcnkgc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0X3YyOiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRfdjIoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcmZvcm1zIGEgcmVsYXRpdmUgUE9TVCByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2L2NvbnRyb2xcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiY2FuY2VsXCJ9LCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coXCJDQU5DRUxMRURcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgYm9keS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgY29tcGxldGU6IGAoZXJyLCByZXNwb25zZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIHBvc3Q6IGZ1bmN0aW9uKHJlbHBhdGgsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5wb3N0KFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBlcmZvcm1zIGEgcmVsYXRpdmUgREVMRVRFIHJlcXVlc3Qgb24gYW4gZW5kcG9pbnQncyBwYXRoLFxuICAgICAgICAgKiBjb21iaW5lZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGFuZCBhIHJlbGF0aXZlIHBhdGggaWYgc3BlY2lmaWVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIFdpbGwgbWFrZSBhIHJlcXVlc3QgdG8ge3NlcnZpY2UucHJlZml4fS9zZWFyY2gvam9icy8xMjM0NTZcbiAgICAgICAgICogICAgICB2YXIgZW5kcG9pbnQgPSBuZXcgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludChzZXJ2aWNlLCBcInNlYXJjaC9qb2JzLzEyMzQ1XCIpO1xuICAgICAgICAgKiAgICAgIGVuZHBvaW50LmRlbGV0ZShcIlwiLCB7fSwgZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKFwiREVMRVRFRFwiKSl9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHJlbHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgZW5kcG9pbnQgcGF0aC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgZW50aXR5LXNwZWNpZmljIHBhcmFtZXRlcnMgdG8gYWRkIHRvIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBkZWw6IGZ1bmN0aW9uKHJlbHBhdGgsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnF1YWxpZmllZFBhdGg7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLCB3ZSB3aWxsIGFwcGVuZCBpdCB3aXRoIGEgcHJlY2VkaW5nXG4gICAgICAgICAgICAvLyBzbGFzaC5cbiAgICAgICAgICAgIGlmIChyZWxwYXRoKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXCIvXCIgKyByZWxwYXRoOyAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kZWwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgYmFzZSBkZWZpbml0aW9uIGZvciBhIFNwbHVuayByZXNvdXJjZSAoZm9yIGV4YW1wbGUsIGFuIGVudGl0eSBcbiAgICAgKiBzdWNoIGFzIGFuIGluZGV4IG9yIHNlYXJjaCBqb2IsIG9yIGEgY29sbGVjdGlvbiBvZiBlbnRpdGllcykuIFByb3ZpZGVzIFxuICAgICAqIGJhc2ljIG1ldGhvZHMgZm9yIGhhbmRsaW5nIFNwbHVuayByZXNvdXJjZXMsIHN1Y2ggYXMgdmFsaWRhdGlvbiBhbmQgXG4gICAgICogYWNjZXNzaW5nIHByb3BlcnRpZXMuIFxuICAgICAqXG4gICAgICogVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkgYmVjYXVzZSBtb3N0IG1ldGhvZHMgYXJlIG1lYW50IHRvIGJlIG92ZXJyaWRkZW4uXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgKi9cbiAgICByb290LlJlc291cmNlID0gcm9vdC5FbmRwb2ludC5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2V9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHZhciBmdWxscGF0aCA9IHNlcnZpY2UuZnVsbHBhdGgocGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgZnVsbHBhdGgpO1xuICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuX2xvYWQgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuX2xvYWQpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaCAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5mZXRjaCk7XG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGggICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNVVNUIEJFIE9WRVJSSURERU5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIHJlc291cmNlIGFuZCBzdG9yZXMgdGhlIHByb3BlcnRpZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgX2xvYWQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyB0aGUgcmVzb3VyY2UgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAgICAgICogYW5kIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwcm9wZXJ0aWVzIGZvciB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICovXG4gICAgICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGZ1bGwgc3RhdGUgKHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhKSBvZiB0aGlzIHJlc291cmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBjdXJyZW50IGZ1bGwgc3RhdGUgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgYSBTcGx1bmsgZW50aXR5LCB3aGljaCBpcyBhIHdlbGwtZGVmaW5lZCBjb25zdHJ1Y3RcbiAgICAgKiB3aXRoIGNlcnRhaW4gb3BlcmF0aW9ucyAoc3VjaCBhcyBcInByb3BlcnRpZXNcIiwgXCJ1cGRhdGVcIiwgYW5kIFwiZGVsZXRlXCIpLiBcbiAgICAgKiBFbnRpdGllcyBpbmNsdWRlIHNlYXJjaCBqb2JzLCBpbmRleGVzLCBpbnB1dHMsIGFwcHMsIGFuZCBtb3JlLiBcbiAgICAgKlxuICAgICAqIFByb3ZpZGVzIGJhc2ljIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTcGx1bmsgZW50aXRpZXMsIHN1Y2ggYXMgZmV0Y2hpbmcgYW5kXG4gICAgICogdXBkYXRpbmcgdGhlbS5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgKi9cbiAgICByb290LkVudGl0eSA9IHJvb3QuUmVzb3VyY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgc3RhdGljIHByb3BlcnR5IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIFxuICAgICAgICAgKiB1cGRhdGUgdG8gZ2V0IHRoZSB1cGRhdGVkIGVudGl0eS4gQnkgZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgXG4gICAgICAgICAqIGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJucyAoZWNob2VzKSB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25VcGRhdGU6IGZhbHNlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBBIHJlbGF0aXZlIGVuZHBvaW50IHBhdGggKGZvciBleGFtcGxlLCBcInNlYXJjaC9qb2JzXCIpLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5FbnRpdHl9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5fbG9hZCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5mZXRjaCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZW1vdmUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpZWxkcyk7XG4gICAgICAgICAgICB0aGlzLmxpbmtzICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saW5rcyk7XG4gICAgICAgICAgICB0aGlzLmFjbCAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hY2wpO1xuICAgICAgICAgICAgdGhpcy5hdXRob3IgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuYXV0aG9yKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZCAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZWQpO1xuICAgICAgICAgICAgdGhpcy5wdWJsaXNoZWQgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucHVibGlzaGVkKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmVuYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGUgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kaXNhYmxlKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJlbG9hZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICB0aGlzLl9maWVsZHMgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9hY2wgICAgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9saW5rcyAgICAgID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIGVudGl0eSBhbmQgc3RvcmVzIHRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgX2xvYWQ6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB1dGlscy5pc0FycmF5KHByb3BlcnRpZXMpID8gcHJvcGVydGllc1swXSA6IHByb3BlcnRpZXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHByb3BlcnRpZXMgdG9cbiAgICAgICAgICAgIC8vIGVtcHR5IHZhbHVlc1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHt9LFxuICAgICAgICAgICAgICAgIGZpZWxkczoge30sXG4gICAgICAgICAgICAgICAgYWNsOiB7fSxcbiAgICAgICAgICAgICAgICBsaW5rczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUYWtlIG91dCB0aGUgZW50aXR5LXNwZWNpZmljIGNvbnRlbnRcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmNvbnRlbnQgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyAgICAgPSBwcm9wZXJ0aWVzLmZpZWxkcyAgICB8fCB0aGlzLl9maWVsZHMgfHwge307XG4gICAgICAgICAgICB0aGlzLl9hY2wgICAgICAgID0gcHJvcGVydGllcy5hY2wgICAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9saW5rcyAgICAgID0gcHJvcGVydGllcy5saW5rcyAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9hdXRob3IgICAgID0gcHJvcGVydGllcy5hdXRob3IgICAgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWQgICAgPSBwcm9wZXJ0aWVzLnVwZGF0ZWQgICB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVkICA9IHByb3BlcnRpZXMucHVibGlzaGVkIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBmaWVsZHMgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LCBpbmRpY2F0aW5nIHdoaWNoIFxuICAgICAgICAgKiBmaWVsZHMgYXJlIHdpbGRjYXJkcywgcmVxdWlyZWQsIGFuZCBvcHRpb25hbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmllbGRzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LFxuICAgICAgICAgKiB3aGljaCBjb250YWlucyB0aGUgcGVybWlzc2lvbnMgZm9yIGFjY2Vzc2luZyB0aGUgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBBQ0wuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGFjbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWNsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgbGlua3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LCB3aGljaCBpcyB0aGUgVVJJIG9mXG4gICAgICAgICAqIHRoZSBlbnRpdHkgcmVsYXRpdmUgdG8gdGhlIG1hbmFnZW1lbnQgcG9ydCBvZiBhIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbGlua3MgaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5rcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGF1dGhvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aG9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdXRob3I7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSB1cGRhdGVkIHRpbWUgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB1cGRhdGVkIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBwdWJsaXNoZWQgdGltZSBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHB1Ymxpc2hlZCB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaXNoZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlZDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZyZXNoZXMgdGhlIGVudGl0eSBieSBmZXRjaGluZyB0aGUgb2JqZWN0IGZyb20gdGhlIHNlcnZlciBhbmQgXG4gICAgICAgICAqIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgY291bnRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBvZmZzZXRgIChfaW50ZWdlcl8pOiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGZpbHRlciByZXNwb25zZXMuXG4gICAgICAgICAqICAgIC0gYHNvcnRfZGlyYCAoX3N0cmluZ18pOiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgcmV0dXJuZWQgaXRlbXM6IOKAnGFzY+KAnSBvciDigJxkZXNj4oCdLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2tleWAgKF9zdHJpbmdfKTogVGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZyAob3B0aW9uYWwpLlxuICAgICAgICAgKiAgICAtIGBzb3J0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBjb2xsYXRpbmcgc2VxdWVuY2UgZm9yIHNvcnRpbmcgcmV0dXJuZWQgaXRlbXM6IOKAnGF1dG/igJ0sIOKAnGFscGhh4oCdLCDigJxhbHBoYV9jYXNl4oCdLCBvciDigJxudW3igJ0uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwiXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fbG9hZChyZXNwb25zZS5kYXRhID8gcmVzcG9uc2UuZGF0YS5lbnRyeSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWxldGVzIHRoZSBlbnRpdHkgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGRlbGV0ZWQ6IGAoZXJyKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWwoXCJcIiwge30sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB0aGUgb2JqZWN0IHdpdGguXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgdXBkYXRlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0ICduYW1lJyBmaWVsZCBpbiAndXBkYXRlJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCBwcm9wcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmICghZXJyICYmICF0aGF0LmZldGNoT25VcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fbG9hZChyZXNwb25zZS5kYXRhLmVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVyciAmJiB0aGF0LmZldGNoT25VcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsZXMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGRpc2FibGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5wb3N0KFwiZGlzYWJsZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIGVuYWJsZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICBlbmFibGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMucG9zdChcImVuYWJsZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbG9hZHMgdGhlIGVudGl0eSBvbiB0aGUgc2VydmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJlbG9hZGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgcmVsb2FkOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBvc3QoXCJfcmVsb2FkXCIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBiYXNlIGNsYXNzIGZvciBhIFNwbHVuayBjb2xsZWN0aW9uLCB3aGljaCBpcyBhIHdlbGwtZGVmaW5lZCBjb25zdHJ1Y3RcbiAgICAgKiB0aGF0IHByb3ZpZGVzIGJhc2ljIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBjb2xsZWN0aW9ucyBvZiBlbnRpdGllcywgc3VjaCBhcyBcbiAgICAgKiBjcmVhdGluZyBhbmQgbGlzdGluZyBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICovXG4gICAgcm9vdC5Db2xsZWN0aW9uID0gcm9vdC5SZXNvdXJjZS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBzdGF0aWMgcHJvcGVydHkgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gXG4gICAgICAgICAqIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIFxuICAgICAgICAgKiBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uRW50aXR5Q3JlYXRpb246IGZhbHNlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLl9sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2ggICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGUgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICAgICAgdGhpcy5saXN0ICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saXN0KTtcbiAgICAgICAgICAgIHRoaXMuaXRlbSAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbnRpYXRlRW50aXR5ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmluc3RhbnRpYXRlRW50aXR5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzICAgICAgID0gW107XG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllc0J5TmFtZSA9IHt9OyAgICBcbiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLl9wYWdpbmcgICAgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICAgICAgPSB7fTsgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGVudGl0eS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBlbnRpdHkuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNVVNUIEJFIE9WRVJSSURERU5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogTG9hZHMgdGhlIGNvbGxlY3Rpb24gYW5kIHByb3BlcnRpZXMsIGFuZCBjcmVhdGVzIGEgbWFwIG9mIGVudGl0eVxuICAgICAgICAgKiBuYW1lcyB0byBlbnRpdHkgSURzIChmb3IgcmV0cmlldmFsIHB1cnBvc2VzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0aWVzID0gW107XG4gICAgICAgICAgICB2YXIgZW50aXRpZXNCeU5hbWUgPSB7fTtcbiAgICAgICAgICAgIHZhciBlbnRpdHlQcm9wZXJ0eUxpc3QgPSBwcm9wZXJ0aWVzLmVudHJ5IHx8IFtdO1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVudGl0eVByb3BlcnR5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IGVudGl0eVByb3BlcnR5TGlzdFtpXTtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhpcy5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7XG4gICAgICAgICAgICAgICAgZW50aXR5Ll9sb2FkKHByb3BzKTtcbiAgICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0aWVzQnlOYW1lLmhhc093blByb3BlcnR5KGVudGl0eS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdGllc0J5TmFtZVtlbnRpdHkubmFtZV0ucHVzaChlbnRpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNCeU5hbWVbZW50aXR5Lm5hbWVdID0gW2VudGl0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZW50aXRpZXMgICAgICAgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzQnlOYW1lID0gZW50aXRpZXNCeU5hbWU7XG4gICAgICAgICAgICB0aGlzLl9wYWdpbmcgICAgICAgICA9IHByb3BlcnRpZXMucGFnaW5nICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICAgICAgPSBwcm9wZXJ0aWVzLmxpbmtzICAgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWQgICAgICAgID0gcHJvcGVydGllcy51cGRhdGVkICAgfHwgbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGxpbmtzIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbGxlY3Rpb24sIHdoaWNoIGlzIHRoZSBVUkkgb2ZcbiAgICAgICAgICogdGhlIHJlc291cmNlIHJlbGF0aXZlIHRvIHRoZSBtYW5hZ2VtZW50IHBvcnQgb2YgYSBTcGx1bmsgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGxpbmtzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbGlua3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmtzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgYXV0aG9yIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGF1dGhvci5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhZ2luZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5nO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgdXBkYXRlZCB0aW1lIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHVwZGF0ZWQgdGltZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIHRoZSByZXNvdXJjZSBieSBmZXRjaGluZyB0aGUgb2JqZWN0IGZyb20gdGhlIHNlcnZlciBhbmQgXG4gICAgICAgICAqIGxvYWRpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSBvZiBjb2xsZWN0aW9uIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbiBvcHRpb25zOlxuICAgICAgICAgKiAgICAtIGBjb3VudGAgKF9pbnRlZ2VyXyk6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byByZXR1cm4uXG4gICAgICAgICAqICAgIC0gYG9mZnNldGAgKF9pbnRlZ2VyXyk6IFRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGl0ZW0gdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggcXVlcnkgdG8gZmlsdGVyIHJlc3BvbnNlcy5cbiAgICAgICAgICogICAgLSBgc29ydF9kaXJgIChfc3RyaW5nXyk6IFRoZSBkaXJlY3Rpb24gdG8gc29ydCByZXR1cm5lZCBpdGVtczog4oCcYXNj4oCdIG9yIOKAnGRlc2PigJ0uXG4gICAgICAgICAqICAgIC0gYHNvcnRfa2V5YCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBzb3J0aW5nIChvcHRpb25hbCkuXG4gICAgICAgICAqICAgIC0gYHNvcnRfbW9kZWAgKF9zdHJpbmdfKTogVGhlIGNvbGxhdGluZyBzZXF1ZW5jZSBmb3Igc29ydGluZyByZXR1cm5lZCBpdGVtczog4oCcYXV0b+KAnSwg4oCcYWxwaGHigJ0sIOKAnGFscGhhX2Nhc2XigJ0sIG9yIOKAnG51beKAnS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyByZXRyaWV2ZWQ6IGAoZXJyLCByZXNvdXJjZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb3VudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhhdC5nZXQoXCJcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZldGNoX3YyOiBhc3luYyBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb3VudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY291bnQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCB0aGF0LmdldF92MihcIlwiLCBvcHRpb25zKTtcbiAgICAgICAgICAgIC8vIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3BlY2lmaWMgZW50aXR5IGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzZXJ2aWNlLmFwcHMoKTtcbiAgICAgICAgICogICAgICBhcHBzLmZldGNoKGZ1bmN0aW9uKGVyciwgYXBwcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgYXBwID0gYXBwcy5pdGVtKFwic2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNlYXJjaCBBcHAgRm91bmQ6IFwiICsgISFhcHApO1xuICAgICAgICAgKiAgICAgICAgICAvLyBgYXBwYCBpcyBhbiBBcHBsaWNhdGlvbiBvYmplY3QuXG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHRvIHJldHJpZXZlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIHdpbGRjYXJkIHZhbHVlIFwiLVwiLCBpcyBub3QgYWNjZXB0YWJsZSB3aGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIHdpbGRjYXJkIHZhbHVlIFwiLVwiIGlzIHVuYWNjZXB0YWJsZSB3aGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJucyB7c3BsdW5ranMuU2VydmljZS5FbnRpdHl9IFRoZSBlbnRpdHksIG9yIGBudWxsYCBpZiBvbmUgaXMgbm90IGZvdW5kLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXRlbTogZnVuY3Rpb24oaWQsIG5hbWVzcGFjZSkgeyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0VtcHR5KG5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11c3Qgc3VwbHkgYSBub24tZW1wdHkgbmFtZS5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgJiYgKG5hbWVzcGFjZS5hcHAgPT09ICctJyB8fCBuYW1lc3BhY2Uub3duZXIgPT09ICctJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXaGVuIHNlYXJjaGluZyBmb3IgYW4gZW50aXR5LCB3aWxkY2FyZHMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBuYW1lc3BhY2UuIFBsZWFzZSByZWZpbmUgeW91ciBzZWFyY2guXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgZnVsbFBhdGggPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudGl0aWVzQnlOYW1lLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzQnlOYW1lW2lkXTsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDEgJiYgIW5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbnRpdHkgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkIG5hbWUgYW5kIHRoZSB1c2VyIGRpZCBub3RcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBhIG5hbWVzcGFjZSwgdGhlbiB3ZSBqdXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpdFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50aXRpZXNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMSAmJiBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3BlY2lmaWVkIGEgbmFtZXNwYWNlLCB0aGVuIHdlIFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHJldHVybiB0aGUgZW50aXR5IGlmIGl0IG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZ1bGwgcGF0aFxuICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCA9IHRoaXMuc2VydmljZS5mdWxscGF0aChlbnRpdGllc1swXS5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdGllc1swXS5xdWFsaWZpZWRQYXRoID09PSBmdWxsUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZW50aXRpZXMubGVuZ3RoID4gMSAmJiAhbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZW50aXR5IGFuZCB3ZSBkaWRuJ3RcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBhIG5hbWVzcGFjZSwgdGhlbiB3ZSByZXR1cm4gYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gc2F5aW5nIHRoZSBtYXRjaCBpcyBhbWJpZ3VvdXNcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW1iaWd1b3VzIG1hdGNoIGZvciBuYW1lICdcIiArIGlkICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBlbnRpdHksIGFuZCB3ZSBkbyBoYXZlXG4gICAgICAgICAgICAgICAgICAgIC8vIGEgbmFtZXNwYWNlLCBzbyB3ZSB0cnkgYW5kIGZpbmQgaXRcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVudGl0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gZW50aXRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGF0aCA9IHRoaXMuc2VydmljZS5mdWxscGF0aChlbnRpdGllc1tpXS5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5LnF1YWxpZmllZFBhdGggPT09IGZ1bGxQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBlbnRpdHkgb24gdGhlIHNlcnZlciBmb3IgdGhpcyBjb2xsZWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZFxuICAgICAgICAgKiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHBzID0gc2VydmljZS5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5jcmVhdGUoe25hbWU6IFwiTmV3U2VhcmNoQXBwXCJ9LCBmdW5jdGlvbihlcnIsIG5ld0FwcCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIG9iamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gcmVzcG9uc2UuZGF0YS5lbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhhdC5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eS5fbG9hZChwcm9wcyk7IFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuZmV0Y2hPbkVudGl0eUNyZWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCBlbnRpdGllcyBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHNlcnZpY2UuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuZmV0Y2goZnVuY3Rpb24oZXJyLCBhcHBzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBhcHBMaXN0ID0gYXBwcy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKGFwcExpc3QubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGxpc3Qgb2YgZW50aXRpZXM6IGAoZXJyLCBsaXN0KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuY2xvbmUodGhpcy5fZW50aXRpZXMpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHNhdmVkIHNlYXJjaCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlNhdmVkU2VhcmNoID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc2F2ZWRTZWFyY2hlcyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgc2F2ZWQgc2VhcmNoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYWNrbm93bGVkZ2UgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmFja25vd2xlZGdlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2ggICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmRpc3BhdGNoKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmhpc3RvcnkpO1xuICAgICAgICAgICAgdGhpcy5zdXBwcmVzc0luZm8gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VwcHJlc3NJbmZvKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cyBmb3IgdGhpcyBzYXZlZFNlYXJjaCxcbiAgICAgICAgICogZGVmYXVsdGluZyB0byAwIHdoZW4gdW5kZWZpbmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHZhciBhbGVydENvdW50ID0gc2F2ZWRTZWFyY2guYWxlcnRDb3VudCgpO1xuICAgICAgICAgKiBcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSBUaGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBhbGVydENvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyZWRfYWxlcnRfY291bnQsIDEwKSB8fCAwO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBY2tub3dsZWRnZXMgdGhlIHN1cHByZXNzaW9uIG9mIHRoZSBhbGVydHMgZnJvbSBhIHNhdmVkIHNlYXJjaCBhbmRcbiAgICAgICAgICogcmVzdW1lcyBhbGVydGluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5hY2tub3dsZWRnZShmdW5jdGlvbihlcnIsIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFDS05PV0xFREdFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNhdmVkIHNlYXJjaCBpcyBhY2tub3dsZWRnZWQ6IGAoZXJyLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2Fja25vd2xlZGdlXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgYWNrbm93bGVkZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJhY2tub3dsZWRnZVwiLCB7fSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc3BhdGNoZXMgYSBzYXZlZCBzZWFyY2gsIHdoaWNoIGNyZWF0ZXMgYSBzZWFyY2ggam9iIGFuZCByZXR1cm5zIGEgXG4gICAgICAgICAqIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHNhdmVkU2VhcmNoLmRpc3BhdGNoKHtmb3JjZV9kaXNwYXRjaDogZmFsc2V9LCBmdW5jdGlvbihlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgU0lEOiBcIiwgam9iLnNpZCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBkaXNwYXRjaGluZyB0aGlzIHNhdmVkIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgZGlzcGF0Y2gubm93YCAoX3N0cmluZ18pOiBUaGUgdGltZSB0aGF0IGlzIHVzZWQgdG8gZGlzcGF0Y2ggdGhlIHNlYXJjaCBhcyB0aG91Z2ggdGhlIHNwZWNpZmllZCB0aW1lIHdlcmUgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgICAgICogICAgLSBgZGlzcGF0Y2guKmAgKF9zdHJpbmdfKTogT3ZlcndyaXRlcyB0aGUgdmFsdWUgb2YgdGhlIHNlYXJjaCBmaWVsZCBzcGVjaWZpZWQgaW4gKi5cbiAgICAgICAgICogICAgLSBgdHJpZ2dlcl9hY3Rpb25zYCAoX2Jvb2xlYW5fKTogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdHJpZ2dlciBhbGVydCBhY3Rpb25zLlxuICAgICAgICAgKiAgICAtIGBmb3JjZV9kaXNwYXRjaGAgKF9ib29sZWFuXyk6IEluZGljYXRlcyB3aGV0aGVyIHRvIHN0YXJ0IGEgbmV3IHNlYXJjaCBpZiBhbm90aGVyIGluc3RhbmNlIG9mIHRoaXMgc2VhcmNoIGlzIGFscmVhZHkgcnVubmluZy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNhdmVkIHNlYXJjaCBpcyBkaXNwYXRjaGVkOiBgKGVyciwgam9iLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2Rpc3BhdGNoXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImRpc3BhdGNoXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIHNpZCA9IHJlc3BvbnNlLmRhdGEuc2lkO1xuICAgICAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhhdC5zZXJ2aWNlLCBzaWQsIHRoYXQubmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBqb2IsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqIFxuICAgICAgICAgKiBHZXRzIHRoZSBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBgIGZvciBmaXJlZEFsZXJ0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFsZXJ0cyA9IHNlcnZpY2UuZmlyZWRBbGVydEdyb3VwcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cH0gQW4gQWxlcnRHcm91cCBvYmplY3Qgd2l0aCB0aGVcbiAgICAgICAgICogc2FtZSBuYW1lIGFzIHRoaXMgU2F2ZWRTZWFyY2ggb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGZpcmVkQWxlcnRHcm91cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRmlyZWRBbGVydEdyb3VwKHRoaXMuc2VydmljZSwgdGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBqb2IgaGlzdG9yeSBmb3IgYSBzYXZlZCBzZWFyY2gsIHdoaWNoIGlzIGEgbGlzdCBvZiBcbiAgICAgICAgICogYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guaGlzdG9yeSh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCBqb2JzLCBzZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGpvYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSm9iXCIsIGksIFwiOlwiLCBqb2JzW2ldLnNpZCk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgcmV0cmlldmluZyBoaXN0b3J5LiBGb3IgYSBmdWxsIGxpc3QsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rLzguMC4yL1JFU1RSRUYvUkVTVHByb2xvZyNQYWdpbmF0aW9uX2FuZF9maWx0ZXJpbmdfcGFyYW1ldGVyc1wiIHRhcmdldD1cIl9ibGFua1wiPlBhZ2luYXRpb24gYW5kIEZpbHRlcmluZyBvcHRpb25zPC9hPiBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGhpc3RvcnkgaXMgcmV0cmlldmVkOiBgKGVyciwgam9iLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L2hpc3RvcnlcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBoaXN0b3J5OiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcImhpc3RvcnlcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgam9icyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgam9iRGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhqb2JEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGF0LnNlcnZpY2UsIGpvYkRhdGEubmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGpvYi5fbG9hZChqb2JEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgam9icy5wdXNoKGpvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGpvYnMsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBzdXBwcmVzc2lvbiBzdGF0ZSBvZiBhIHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5oaXN0b3J5KGZ1bmN0aW9uKGVyciwgc3VwcHJlc3Npb25TdGF0ZSwgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU1RBVEU6IFwiLCBzdXBwcmVzc2lvblN0YXRlKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHN1cHByZXNzaW9uIHN0YXRlIGlzIHJldHJpZXZlZDogYChlcnIsIHN1cHByZXNzaW9uU3RhdGUsIHNhdmVkU2VhcmNoKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlcy97bmFtZX0vc3VwcHJlc3NcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBzdXBwcmVzc0luZm86IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInN1cHByZXNzXCIsIHt9LCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgc2F2ZWQgc2VhcmNoIG9uIHRoZSBzZXJ2ZXIuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAqKk5vdGU6KiogVGhlIHNlYXJjaCBxdWVyeSBpcyByZXF1aXJlZCwgZXZlbiB3aGVuIGl0IGlzbid0IGJlaW5nIG1vZGlmaWVkLlxuICAgICAgICAgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBpdCwgdGhpcyBtZXRob2Qgd2lsbCBmZXRjaCB0aGUgc2VhcmNoIHN0cmluZyBmcm9tXG4gICAgICAgICAqIHRoZSBzZXJ2ZXIgb3IgZnJvbSB0aGUgbG9jYWwgY2FjaGUuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgdG8gdXBkYXRlIHRoZSBzYXZlZCBzZWFyY2ggd2l0aC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NhdmVkc2VhcmNocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2F2ZWQgc2VhcmNoIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHVwZGF0ZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3N1cGVyO1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLmZldGNoKGZ1bmN0aW9uKGVyciwgc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gc2VhcmNoLnByb3BlcnRpZXMoKS5zZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUuY2FsbChzZWFyY2gsIHBhcmFtcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHNhdmVkIHNlYXJjaGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBzYXZlZCBcbiAgICAgKiBzZWFyY2hlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBzYXZlZCBzZWFyY2guXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LlNhdmVkU2VhcmNoZXMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5zYXZlZFNlYXJjaGVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHNhdmVkIHNlYXJjaC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NhdmVkc2VhcmNocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2F2ZWQgc2VhcmNoIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNofSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU2F2ZWRTZWFyY2godGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzYC4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgc3RvcmFnZSBwYXNzd29yZCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TdG9yYWdlUGFzc3dvcmQgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnN0b3JhZ2VQYXNzd29yZHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbiAoc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHN0b3JhZ2UgcGFzc3dvcmRzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBzdG9yYWdlIFxuICAgICAqIHBhc3N3b3JkcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBzdG9yYWdlIHBhc3N3b3JkLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuU3RvcmFnZVBhc3N3b3JkcyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBcbiAgICAgICAgICogZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zXG4gICAgICAgICAqIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc3RvcmFnZVBhc3N3b3JkcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBzdG9yYWdlIHBhc3N3b3JkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgc3RvcmFnZSBwYXNzd29yZC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycyxcbiAgICAgICAgICogc2VlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RhY2Nlc3MjUE9TVF9zdG9yYWdlLjJGcGFzc3dvcmRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAqIFBPU1Qgc3RvcmFnZS9wYXNzd29yZHM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNofSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlN0b3JhZ2VQYXNzd29yZCh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNgLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBmaXJlZCBhbGVydC4gXG4gICAgICogWW91IGNhbiByZXRyaWV2ZSBzZXZlcmFsIG9mIHRoZSBmaXJlZCBhbGVydCdzIHByb3BlcnRpZXMgYnlcbiAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBuYW1lLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHMve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5GaXJlZEFsZXJ0ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5maXJlZEFsZXJ0cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIGFjdGlvbnMgKHN1Y2ggYXMgbm90aWZ5aW5nIGJ5IGVtYWlsLCBydW5uaW5nIGEgXG4gICAgICAgICAqIHNjcmlwdCwgYWRkaW5nIHRvIFJTUywgdHJhY2tpbmcgaW4gQWxlcnQgTWFuYWdlciwgYW5kIGVuYWJsaW5nIFxuICAgICAgICAgKiBzdW1tYXJ5IGluZGV4aW5nKS4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBhY3Rpb25zLCBhbiBlbXB0eSB7QXJyYXl9IGlmIG5vIGFjdGlvbnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIGFjdGlvbnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmFjdGlvbnMgfHwgW107XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHR5cGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGFsZXJ0J3MgdHlwZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIGFsZXJ0VHlwZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuYWxlcnRfdHlwZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzdWx0IGlzIGEgc2V0IG9mIGV2ZW50cyAoZGlnZXN0KSBvciBhIHNpbmdsZVxuICAgICAgICAgKiBldmVudCAocGVyIHJlc3VsdCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIGEgZGlnZXN0LCBmYWxzZSBpZiBwZXIgcmVzdWx0XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBpc0RpZ2VzdE1vZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gQ29udmVydCB0aGlzIHByb3BlcnR5IHRvIGEgQm9vbGVhblxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5wcm9wZXJ0aWVzKCkuZGlnZXN0X21vZGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHJlbmRlcmVkIGV4cGlyYXRpb24gdGltZSBmb3IgdGhpcyBhbGVydC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIGluIFNwbHVuayA0LjMgYW5kIGxhdGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBleHBpcmF0aW9uVGltZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuZXhwaXJhdGlvbl90aW1lX3JlbmRlcmVkIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHNhdmVkIHNlYXJjaCBmb3IgdGhpcyBhbGVydC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgc2F2ZWQgc2VhcmNoIG5hbWUsIG9yIHtudWxsfSBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgc2F2ZWRTZWFyY2hOYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS5zYXZlZHNlYXJjaF9uYW1lIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHNldmVyaXR5IG9uIGEgc2NhbGUgb2YgMSB0byAxMCwgd2l0aCAxIGJlaW5nIHRoZVxuICAgICAgICAgKiBoaWdoZXN0IHNldmVyaXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoaXMgYWxlcnQncyBzZXZlcml0eSwgLTEgaWYgbm90IHNwZWNpZmllZFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgc2V2ZXJpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllcygpLnNldmVyaXR5LCAxMCkgfHwgLTE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhpcyBhbGVydCdzIHNlYXJjaCBJRCAoU0lEKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGlzIGFsZXJ0J3MgU0lELCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNpZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuc2lkIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIHRpbWUgdGhpcyBhbGVydCB3YXMgdHJpZ2dlcmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoaXMgYWxlcnQncyB0cmlnZ2VyIHRpbWUsIG9yIHtudWxsfSBpZiBub3QgYXZhaWxhYmxlLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlclRpbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJfdGltZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyByZW5kZXJlZCB0cmlnZ2VyIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGlzIGFsZXJ0J3MgcmVuZGVyZWQgdHJpZ2dlciB0aW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJUaW1lUmVuZGVyZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJfdGltZV9yZW5kZXJlZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiB0cmlnZ2VyZWQgYWxlcnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiB0cmlnZ2VyZWQgYWxlcnRzLCBvciAtMSBpZiBub3Qgc3BlY2lmaWVkLlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgdHJpZ2dlcmVkQWxlcnRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0cywgMTApIHx8IC0xO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIGFsZXJ0IGdyb3VwLCB3aGljaCB5b3UgY2FuIHRoZW4gdmlldyBhbmRcbiAgICAgKiByZW1vdmUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgYWxlcnRzL2ZpcmVkX2FsZXJ0cy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydEdyb3VwID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmZpcmVkQWxlcnRzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgYHRyaWdnZXJlZF9hbGVydF9jb3VudGAgcHJvcGVydHksIHRoZSBjb3VudFxuICAgICAgICAgKiBvZiB0cmlnZ2VyZWQgYWxlcnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjb3VudCBvZiB0cmlnZ2VyZWQgYWxlcnRzXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyZWRfYWxlcnRfY291bnQsIDEwKSB8fCAwO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGZpcmVkIGluc3RhbmNlcyBvZiB0aGlzIGFsZXJ0LCB3aGljaCBpc1xuICAgICAgICAgKiBhIGxpc3Qgb2YgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAgaW5zdGFuY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhbGVydEdyb3VwID0gc2VydmljZS5maXJlZEFsZXJ0R3JvdXBzKCkuaXRlbShcIk15QWxlcnRcIik7XG4gICAgICAgICAqICAgICAgYWxlcnRHcm91cC5saXN0KGZ1bmN0aW9uKGVyciwgZmlyZWRBbGVydHMsIGFsZXJ0KSB7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmaXJlZEFsZXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGaXJlZCBhbGVydFwiLCBpLCBcIjpcIiwgZmlyZWRBbGVydHNbaV0uc2lkKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZmlyZWQgYWxlcnRzIGFyZSByZXRyaWV2ZWQ6IGAoZXJyLCBmaXJlZEFsZXJ0cywgYWxlcnRHcm91cClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBsaXN0OiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcIlwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0cyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcmVkQWxlcnREYXRhID0gcmVzcG9uc2UuZGF0YS5lbnRyeVtpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKGZpcmVkQWxlcnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcmVkQWxlcnQgPSBuZXcgcm9vdC5GaXJlZEFsZXJ0KHRoYXQuc2VydmljZSwgZmlyZWRBbGVydERhdGEubmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgZmlyZWRBbGVydC5fbG9hZChmaXJlZEFsZXJ0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVkQWxlcnRzLnB1c2goZmlyZWRBbGVydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGZpcmVkQWxlcnRzLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgYWxlcnQgZ3JvdXAuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMubGlzdCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5saXN0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZmlyZWQgYWxlcnRzIGZvciBhIHNhdmVkIHNlYXJjaC4gWW91IGNhblxuICAgICAqIGNyZWF0ZSBhbmQgbGlzdCBzYXZlZCBzZWFyY2hlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvclxuICAgICAqIGdldCBhIHNwZWNpZmljIGFsZXJ0IGdyb3VwLiBcbiAgICAgKlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovXG4gICAgcm9vdC5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuZmlyZWRBbGVydHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBhbGVydCBncm91cC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRmlyZWRBbGVydEdyb3VwKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3VwcHJlc3MgcmVtb3ZpbmcgYWxlcnRzIHZpYSB0aGUgZmlyZWQgYWxlcnRzIGVuZHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHJlbW92ZSBhbiBhbGVydCwgcmVtb3ZlIHRoZSBzYXZlZCBzZWFyY2ggd2l0aCB0aGUgc2FtZSBuYW1lLlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZW1vdmUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayBhcHAgdGhhdCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuQXBwbGljYXRpb24gPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIHVwZGF0ZSB0byBnZXQgdGhlIHVwZGF0ZWQgXG4gICAgICAgICAqIGl0ZW0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPblVwZGF0ZTogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmFwcHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBTcGx1bmsgYXBwLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNldHVwSW5mbyAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0dXBJbmZvKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5mbyA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGVJbmZvKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHNldHVwIGluZm9ybWF0aW9uIGZvciBhIFNwbHVuayBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcCA9IHNlcnZpY2UuYXBwcygpLml0ZW0oXCJhcHBcIik7XG4gICAgICAgICAqICAgICAgYXBwLnNldHVwKGZ1bmN0aW9uKGVyciwgaW5mbywgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU0VUVVAgSU5GTzogXCIsIGluZm8pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzZXR1cCBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBpbmZvLCBhcHApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9L3NldHVwXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgc2V0dXBJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzZXR1cFwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyBhbnkgaW5mb3JtYXRpb24gZm9yIGFuIHVwZGF0ZSB0byBhIGxvY2FsbHktaW5zdGFsbGVkIFNwbHVuayBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcCA9IHNlcnZpY2UuYXBwcygpLml0ZW0oXCJNeUFwcFwiKTtcbiAgICAgICAgICogICAgICBhcHAudXBkYXRlSW5mbyhmdW5jdGlvbihlcnIsIGluZm8sIGFwcCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlVQREFURSBJTkZPOiBcIiwgaW5mbyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHVwZGF0ZSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBpbmZvLCBhcHApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWwve25hbWV9L3VwZGF0ZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZUluZm86IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInVwZGF0ZVwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLmVudHJ5LmNvbnRlbnQsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgU3BsdW5rIGFwcHMuIFlvdSBjYW4gY3JlYXRlIGFuZCBsaXN0IGFwcGxpY2F0aW9ucyBcbiAgICAgKiB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBhcHAuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgYXBwcy9sb2NhbFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5BcHBsaWNhdGlvbnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmFwcHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGFwcC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGFwcC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVGFwcHMjUE9TVF9hcHBzLjJGbG9jYWxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5QT1NUIGFwcHMvbG9jYWw8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9ufSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkFwcGxpY2F0aW9uKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwge30pO1xuICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNlcnZlci9pbmZvXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TZXJ2ZXJJbmZvID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5pbmZvO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNlcnZlckluZm9cbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBcInNlcnZlci1pbmZvXCI7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayB1c2VyLCB3aGljaCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGF1dGhlbnRpY2F0aW9uL3VzZXJzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuVXNlciA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuVXNlclxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudXNlcnMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Vc2VyYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIFNwbHVuayB1c2VybmFtZS5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Vc2VyfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Vc2VyYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHVzZXJzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCB1c2VycyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyB1c2VyLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGF1dGhlbnRpY2F0aW9uL3VzZXJzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuVXNlcnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uRW50aXR5Q3JlYXRpb246IHRydWUsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy51c2VycztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgbmV3IHVzZXIuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKOCN1c2VyYXV0aHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlVzZXIgYXV0aGVudGljYXRpb24gcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuVXNlcih0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVXNlcnNgLiBcbiAgICAgICAgICogXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyB1c2VyLiBcbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoaXMgZW5kcG9pbnQgcmVxdWlyZXMgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjgjdXNlcmF1dGhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Vc2VyIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgbmV3IGVudGl0eTogYChlcnIsIGNyZWF0ZWRFbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuZHBvaW50IHJlcXVpcmVzIHVzIHRvIHVzZSB0aGUgcGFzc2VkLWluIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0ge25hbWU6IHBhcmFtcy5uYW1lfTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRpdHkgPSB0aGF0Lmluc3RhbnRpYXRlRW50aXR5KHByb3BzKTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBlbnRpdHkuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgU3BsdW5rIHZpZXcsIHdoaWNoIHlvdSBjYW4gdmlldywgbW9kaWZ5LCBhbmRcbiAgICAgKiByZW1vdmUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YS91aS92aWV3cy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlZpZXcgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnZpZXdzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2aWV3LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHZpZXdzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCB2aWV3cyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyB2aWV3LlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3NcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5WaWV3cyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy52aWV3cztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSB2aWV3LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgdmlldy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI1BPU1Rfc2NoZWR1bGVkLjJGdmlld3MuMkYuN0JuYW1lLjdEXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UE9TVCBzY2hlZHVsZWQvdmlld3Mve25hbWV9PC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5WaWV3fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuVmlldyh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld3N9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGFuIGluZGV4LCB3aGljaCB5b3UgY2FuIHVwZGF0ZSBhbmQgc3VibWl0IGV2ZW50cyB0by5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXMvbmFtZVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkluZGV4ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuaW5kZXhlcyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRFdmVudCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdWJtaXRFdmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU3VibWl0cyBhbiBldmVudCB0byB0aGlzIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBpbmRleCA9IHNlcnZpY2UuaW5kZXhlcygpLml0ZW0oXCJfaW50ZXJuYWxcIik7XG4gICAgICAgICAqICAgICAgaW5kZXguc3VibWl0RXZlbnQoXCJBIG5ldyBldmVudFwiLCB7c291cmNldHlwZTogXCJteXNvdXJjZXR5cGVcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0LCBpbmRleCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlN1Ym1pdHRlZCBldmVudDogXCIsIHJlc3VsdCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgdGV4dCBmb3IgdGhpcyBldmVudC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcGFyYW1ldGVycyBmb3IgaW5kZXhpbmc6IFxuICAgICAgICAgKiAgICAtIGBob3N0YCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIGhvc3QgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC4gXG4gICAgICAgICAqICAgIC0gYGhvc3RfcmVnZXhgIChfc3RyaW5nXyk6IEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gZXh0cmFjdCB0aGUgaG9zdCB2YWx1ZSBmcm9tIGVhY2ggZXZlbnQuIFxuICAgICAgICAgKiAgICAtIGBzb3VyY2VgIChfc3RyaW5nXyk6IFRoZSBzb3VyY2UgdmFsdWUgdG8gZmlsbCBpbiB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgaW5wdXQncyBldmVudHMuXG4gICAgICAgICAqICAgIC0gYHNvdXJjZXR5cGVgIChfc3RyaW5nXyk6IFRoZSBzb3VyY2V0eXBlIHRvIGFwcGx5IHRvIGV2ZW50cyBmcm9tIHRoaXMgaW5wdXQuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudCBpcyBzdWJtaXR0ZWQ6IGAoZXJyLCByZXN1bHQsIGluZGV4KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCByZWNlaXZlcnMvc2ltcGxlP2luZGV4PXtuYW1lfVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHN1Ym1pdEV2ZW50OiBmdW5jdGlvbihldmVudCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgdGhlIGluZGV4IG5hbWVcbiAgICAgICAgICAgIHBhcmFtc1tcImluZGV4XCJdID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmxvZyhldmVudCwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0LCB0aGF0KTsgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2UudmVyc2lvbkNvbXBhcmUoXCI1LjBcIikgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5kZXhlcyBjYW5ub3QgYmUgcmVtb3ZlZCBpbiBTcGx1bmsgNC54XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgICAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBpbmRleGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBpbmRleGVzIHVzaW5nIFxuICAgICAqIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvaW5kZXhlc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuSW5kZXhlcyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmluZGV4ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGFuIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgaW5kZXguIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKMyNpbmRleHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPkluZGV4IHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkluZGV4fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5JbmRleGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSW5kZXgodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5JbmRleGVzYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXhlc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhbiBpbmRleCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBpbmRleGVzID0gc2VydmljZS5pbmRleGVzKCk7XG4gICAgICAgICAqICAgICAgaW5kZXhlcy5jcmVhdGUoXCJOZXdJbmRleFwiLCB7YXNzdXJlVVRGODogdHJ1ZX0sIGZ1bmN0aW9uKGVyciwgbmV3SW5kZXgpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBBIG5hbWUgZm9yIHRoaXMgaW5kZXguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVKMyNpbmRleHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPkluZGV4IHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgbmV3IGluZGV4OiBgKGVyciwgY3JlYXRlZEluZGV4KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24obmFtZSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KG5hbWUpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBuYW1lO1xuICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbXMubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zW1wibmFtZVwiXSA9IG5hbWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzdGFuemEsIHdoaWNoIHlvdSBjYW4gdXBkYXRlIGFuZCByZW1vdmUsIGZyb20gYSBcbiAgICAgKiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgY29uZmlncy9jb25mLXtmaWxlfS97bmFtZX1gXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5Db25maWd1cmF0aW9uU3RhbnphID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lID09PSBcImRlZmF1bHRcIiA/IFwiX25ld1wiIDogdGhpcy5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmNvbmZpZ3VyYXRpb25zICsgXCIvY29uZi1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmZpbGUpICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZSBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbmV3IHN0YW56YS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgZmlsZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2Ygc3RhbnphcyBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBmaWxlLiBZb3UgY2FuXG4gICAgICogY3JlYXRlIGFuZCBsaXN0IHN0YW56YXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgXG4gICAgICogc3RhbnphLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5Db25maWd1cmF0aW9uRmlsZSA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoeyBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuY29uZmlndXJhdGlvbnMgKyBcIi9jb25mLVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBzdGFuemEgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIFlvdSBjYW5ub3QgZGlyZWN0bHkgdXBkYXRlIHRoZSBgQ29uZmlndXJhdGlvblN0YW56YWAgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHZpZXdpbmcgYGNvbmZpZ3MvY29uZi17ZmlsZX0vX25ld2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0RGVmYXVsdFN0YW56YTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvblN0YW56YSh0aGlzLnNlcnZpY2UsIHRoaXMubmFtZSwgXCJkZWZhdWx0XCIsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgc3RhbnphIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIGtleS12YWx1ZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHN0YW56YS4gXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkNvbmZpZ3VyYXRpb25TdGFuemEodGhpcy5zZXJ2aWNlLCB0aGlzLm5hbWUsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGV9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc3RhbnphIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBmaWxlID0gc2VydmljZS5jb25maWd1cmF0aW9ucygpLml0ZW0oXCJwcm9wc1wiKTtcbiAgICAgICAgICogICAgICBmaWxlLmNyZWF0ZShcIm15X3N0YW56YVwiLCBmdW5jdGlvbihlcnIsIG5ld1N0YW56YSkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFURURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGFuemFOYW1lIEEgbmFtZSBmb3IgdGhpcyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgQSBkaWN0aW9uYXJ5IG9mIGtleS12YWx1ZSBwYWlycyB0byBwdXQgaW4gdGhpcyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIHN0YW56YTogYChlcnIsIGNyZWF0ZWRTdGFuemEpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX1cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHN0YW56YU5hbWUsIHZhbHVlcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChzdGFuemFOYW1lKSAmJiB1dGlscy5pc0Z1bmN0aW9uKHZhbHVlcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0gc3RhbnphTmFtZTtcbiAgICAgICAgICAgICAgICBzdGFuemFOYW1lID0gdmFsdWVzLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHZhbHVlcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlc1tcIm5hbWVcIl0gPSBzdGFuemFOYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIodmFsdWVzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBjb25maWd1cmF0aW9uIGZpbGVzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBcbiAgICAgKiBjb25maWd1cmF0aW9uIGZpbGVzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIGZpbGUuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgcHJvcGVydGllc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkNvbmZpZ3VyYXRpb25zID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMucHJvcGVydGllcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGV9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBpZiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2Uub3duZXIgPT09IFwiLVwiIHx8IG5hbWVzcGFjZS5hcHAgPT09IFwiLVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbnMgcmVxdWlyZXMgYSBub24td2lsZGNhcmQgb3duZXIvYXBwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgY29uZmlndXJhdGlvbnMgPSBzZXJ2aWNlLmNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgICAqICAgICAgY29uZmlndXJhdGlvbnMuY3JlYXRlKFwibXlwcm9wc1wiLCBmdW5jdGlvbihlcnIsIG5ld0ZpbGUpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWUgQSBuYW1lIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBjb25maWd1cmF0aW9uIGZpbGU6IGAoZXJyLCBjcmVhdGVkRmlsZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcHJvcGVydGllc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24oZmlsZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVtcIl9fY29uZlwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiXCIsIHtfX2NvbmY6IGZpbGVuYW1lfSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRpdHkgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGF0LnNlcnZpY2UsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBhYm9ydGVkLCBzbyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgZG9lc0ZpbGVFeGlzdDogYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgLy8gMS4gRmV0Y2ggZmlsZXMgbGlzdFxuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0X3YyKFwiXCIsICB7X19jb25mOiBmaWxlbmFtZX0pO1xuXG4gICAgICAgICAgICAgICAgLy8gMi4gRmlsdGVyIHRoZSBmaWxlc1xuICAgICAgICAgICAgICAgIHZhciBmaWxlcyA9IHJlc3BvbnNlPy5ib2R5Py5lbnRyeT8uZmlsdGVyKGYgPT4gZi5uYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzXG4gICAgICAgICAgICAgICAgaWYoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgY29kZTpcIkZJTEVfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBGaWxlIHdpdGggdGhlIG5hbWUgJyR7ZmlsZW5hbWV9JyBkb2VzIG5vdCBleGlzdC5gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyAzLiBDcmVhdGUgYSBsb2NhbCBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmF0aW9uRmlsZSA9IG5ldyByb290LkNvbmZpZ3VyYXRpb25GaWxlKHRoYXQuc2VydmljZSwgZmlsZW5hbWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gNC4gTG9hZCB0aGUgZmlsZSBjb250ZW50XG4gICAgICAgICAgICAgICAgdmFyIGZldGNoZWRGaWxlID0gYXdhaXQgY29uZmlndXJhdGlvbkZpbGUuZmV0Y2hfdjIoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7ZmlsZTogZmV0Y2hlZEZpbGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckNvZGU6XCJTWVNURU1fRVJST1JcIiwgZXJyb3JNZXNzYWdlOiBlcnJvcn07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZG9lc1N0YW56YUV4aXN0OiBhc3luYyBmdW5jdGlvbihmaWxlLCBzdGFuemEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gMS4gY2hlY2sgaWYgdGhlIHN0YW56YSBleGlzdHNcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hlZFN0YW56YSA9IGZpbGUuaXRlbShzdGFuemEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKCFmZXRjaGVkU3RhbnphKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNvZGU6XCJTVEFOWkFfTk9UX0ZPVU5EXCIsIG1lc3NhZ2U6IGBTdGFuemEgd2l0aCB0aGUgbmFtZSAnJHtzdGFuemF9JyBkb2VzIG5vdCBleGlzdC5gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7c3RhbnphOiBmZXRjaGVkU3RhbnphfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yQ29kZTpcIlNZU1RFTV9FUlJPUlwiLCBlcnJvck1lc3NhZ2U6IGVycm9yfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVfdjI6IGFzeW5jIGZ1bmN0aW9uIChjb25maWdzLCBzdmMsIGZpbGVuYW1lLCBzdGFuemEsIGtleVZhbHVlTWFwLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyAxLiBDaGVjayBpZiB0aGUgZmlsZSBleGlzdHNcbiAgICAgICAgICAgIHZhciBkb2VzRmlsZUV4aXN0UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvZXNGaWxlRXhpc3QoZmlsZW5hbWUpO1xuICAgICAgICAgICAgdmFyIGNvbmZpZ0ZpbGUgPSBkb2VzRmlsZUV4aXN0UmVzcG9uc2UuZmlsZTtcblxuICAgICAgICAgICAgLy8gMi4gSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgY3JlYXRlIGEgbmV3IGZpbGVcbiAgICAgICAgICAgIGlmKCFjb25maWdGaWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZG9lc0ZpbGVFeGlzdFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZS4uLlwiKTtcblxuICAgICAgICAgICAgICAgIHRoYXQuY3JlYXRlKCB7IF9fY29uZjogZmlsZW5hbWUgfSwgXG4gICAgICAgICAgICAgICAgICAgIChlcnIsIG5ld0ZpbGUpID0+IGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIEZpbGUgY3JlYXRlZDogJHtmaWxlbmFtZX1gKSApO1xuXG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZSA9IG5ldyByb290LkNvbmZpZ3VyYXRpb25GaWxlKCB0aGF0LnNlcnZpY2UsIGZpbGVuYW1lICk7XG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZSA9IGF3YWl0IGNvbmZpZ0ZpbGUuZmV0Y2hfdjIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIHN0YW56YSBleGlzdHNcbiAgICAgICAgICAgIHZhciBkb2VzU3RhbnphRXhpc3RSZXNwb25zZSA9IGF3YWl0IHRoaXMuZG9lc1N0YW56YUV4aXN0KGNvbmZpZ0ZpbGUsIHN0YW56YSk7XG4gICAgICAgICAgICB2YXIgY29uZmlnU3RhbnphID0gZG9lc1N0YW56YUV4aXN0UmVzcG9uc2Uuc3RhbnphO1xuXG4gICAgICAgICAgICAvLyAzLiBJZiB0aGUgc3RhbnphIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBzdGFuemEgd2l0aCBnaXZlbiBrZXlWYWx1ZU1hcFxuICAgICAgICAgICAgaWYoIWNvbmZpZ1N0YW56YSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRvZXNTdGFuemFFeGlzdFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gc3RhbnphLi4uXCIpO1xuXG4gICAgICAgICAgICAgICAgY29uZmlnRmlsZS5jcmVhdGUoc3RhbnphLCBrZXlWYWx1ZU1hcCwgZnVuY3Rpb24gKGVyciwgbmV3U3RhbnphKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIFN0YW56YSBjcmVhdGVkOiAke3N0YW56YX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDQuIElmIHRoZSBzdGFuemEgZXhpc3RzLCB1cGRhdGUgaXQgd2l0aCB0aGUga2V5VmFsdWVNYXBcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZpZ1N0YW56YS51cGRhdGUoa2V5VmFsdWVNYXAsIChlcnIsIHVwZGF0ZWRTdGFuemEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvbmZpZ3VyYXRpb24gU3RhbnphIHVwZGF0ZWQ6ICR7c3RhbnphfWApO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHNlYXJjaCBqb2IuIFlvdSBjYW4gcGVyZm9ybSBkaWZmZXJlbnQgb3BlcmF0aW9uc1xuICAgICAqIG9uIHRoaXMgam9iLCBzdWNoIGFzIHJlYWRpbmcgaXRzIHN0YXR1cywgY2FuY2VsaW5nIGl0LCBhbmQgZ2V0dGluZyByZXN1bHRzLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkpvYiA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5qb2JzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSm9iYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNpZCBUaGUgc2VhcmNoIElEIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHNpZCwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBzaWQ7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHRoaXMuc2lkID0gc2lkO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuY2FuY2VsICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY2FuY2VsKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVByZXZpZXcgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGlzYWJsZVByZXZpZXcpO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVQcmV2aWV3ICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5lbmFibGVQcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRzICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZXZlbnRzKTtcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmluYWxpemUpO1xuICAgICAgICAgICAgdGhpcy5wYXVzZSAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wYXVzZSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnByZXZpZXcpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZXN1bHRzKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNobG9nICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2VhcmNobG9nKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJpb3JpdHkgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0UHJpb3JpdHkpO1xuICAgICAgICAgICAgdGhpcy5zZXRUVEwgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zZXRUVEwpO1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5ICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5zdW1tYXJ5KTtcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudGltZWxpbmUpO1xuICAgICAgICAgICAgdGhpcy50b3VjaCAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy50b3VjaCk7XG4gICAgICAgICAgICB0aGlzLnVucGF1c2UgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVucGF1c2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW5jZWxzIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5jYW5jZWwoZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0FOQ0VMTEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgc2VhcmNoIGlzIGRvbmU6IGAoZXJyKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGNhbmNlbDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiY2FuY2VsXCJ9LCBjYWxsYmFjayk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGVzIHByZXZpZXcgZ2VuZXJhdGlvbiBmb3IgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmRpc2FibGVQcmV2aWV3KGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFVklFVyBESVNBQkxFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhpcyBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGRpc2FibGVQcmV2aWV3OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImRpc2FibGVwcmV2aWV3XCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgcHJldmlldyBnZW5lcmF0aW9uIGZvciBhIHNlYXJjaCBqb2IuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmRpc2FibGVQcmV2aWV3KGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFVklFVyBFTkFCTEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGlzIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlUHJldmlldzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJlbmFibGVwcmV2aWV3XCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGV2ZW50cyBvZiBhIHNlYXJjaCBqb2Igd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLmV2ZW50cyh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCBldmVudHMsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkczogXCIsIGV2ZW50cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIGV2ZW50cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGZXZlbnRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2V2ZW50czwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBldmVudHMgYXJlIHJldHJpZXZlZDogYChlcnIsIGV2ZW50cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9ldmVudHNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZXZlbnRzOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcImV2ZW50c1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluYWxpemVzIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5maW5hbGl6ZShmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBGSU5BTElaRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiZmluYWxpemVcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhpcyBzZWFyY2ggam9iJ3MgZXZlbnRzIG9yIHJlc3VsdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIE9uZSBvZiB7XCJldmVudHNcIiwgXCJwcmV2aWV3XCIsIFwicmVzdWx0c1wifS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczpcbiAgICAgICAgICogICAgLSBgcGFnZXNpemVgIChfaW50ZWdlcl8pOiBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiBvbiBlYWNoIHJlcXVlc3QuIERlZmF1bHRzIHRvIGFzIG1hbnkgYXMgcG9zc2libGUuXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmF0b3Igb2JqZWN0IHdpdGggYSBgbmV4dChjYWxsYmFjaylgIG1ldGhvZCwgd2hlcmUgYGNhbGxiYWNrYCBpcyBvZiB0aGUgZm9ybSBgKGVyciwgcmVzdWx0cywgaGFzTW9yZVJlc3VsdHMpYC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGl0ZXJhdG9yOiBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5QYWdpbmF0ZWRFbmRwb2ludEl0ZXJhdG9yKHRoaXNbdHlwZV0sIHBhcmFtcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhdXNlcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IucGF1c2UoZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgUEFVU0VEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHBhdXNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInBhdXNlXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLypcbiAgICAgICAgICogR2V0cyB0aGUgcHJldmlldyByZXN1bHRzIGZvciBhIHNlYXJjaCBqb2Igd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnByZXZpZXcoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGRzOiBcIiwgcmVzdWx0cy5maWVsZHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHByZXZpZXcgcmVzdWx0cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGcmVzdWx0c19wcmV2aWV3XCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHNfcHJldmlldzwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwcmV2aWV3IHJlc3VsdHMgYXJlIHJldHJpZXZlZCA6IGAoZXJyLCByZXN1bHRzLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHNfcHJldmlld1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwcmV2aWV3OiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInJlc3VsdHNfcHJldmlld1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgcmVzdWx0cyBmb3IgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRoZSBjYWxsYmFjayBjYW4gZ2V0IGB1bmRlZmluZWRgIGZvciBpdHMgYHJlc3VsdHNgIHBhcmFtZXRlciBpZiB0aGVcbiAgICAgICAgICogam9iIGlzIG5vdCB5ZXQgZG9uZS4gVG8gYXZvaWQgdGhpcywgdXNlIHRoZSBgSm9iLnRyYWNrKClgIG1ldGhvZCB0b1xuICAgICAgICAgKiB3YWl0IHVudGlsIHRoZSBqb2IgaXMgY29tcGxldGUgcHJpb3IgdG8gZmV0Y2hpbmcgdGhlIHJlc3VsdHMgd2l0aFxuICAgICAgICAgKiB0aGlzIG1ldGhvZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IucmVzdWx0cyh7Y291bnQ6IDEwfSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZHM6IFwiLCByZXN1bHRzLnJlc3VsdHMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHNlYXJjaCByZXN1bHRzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZyZXN1bHRzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3Jlc3VsdHM8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVzdWx0cyBhcmUgcmV0cmlldmVkOiBgKGVyciwgcmVzdWx0cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHJlc3VsdHM6IGZ1bmN0aW9uKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5vdXRwdXRfbW9kZSA9IHBhcmFtcy5vdXRwdXRfbW9kZSB8fCBcImpzb25fcm93c1wiO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJyZXN1bHRzXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBzZWFyY2ggbG9nIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc2VhcmNobG9nKGZ1bmN0aW9uKGVyciwgc2VhcmNobG9nLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coc2VhcmNobG9nKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBsb2cgYW5kIGpvYjogYChlcnIsIHNlYXJjaGxvZywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9zZWFyY2gubG9nXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNlYXJjaGxvZzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwic2VhcmNoLmxvZ1wiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBwcmlvcml0eSBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNldFByaW9yaXR5KDYsIGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFBSSU9SSVRZIFNFVFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBwcmlvcml0eSAoYW4gaW50ZWdlciBiZXR3ZWVuIDEtMTApLiBBIGhpZ2hlciB2YWx1ZSBtZWFucyBhIGhpZ2hlciBwcmlvcml0eS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0UHJpb3JpdHk6IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInNldHByaW9yaXR5XCIsIHByaW9yaXR5OiB2YWx1ZX0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGltZSB0byBsaXZlIChUVEwpIGZvciB0aGUgc2VhcmNoIGpvYiwgd2hpY2ggaXMgdGhlIHRpbWUgYmVmb3JlXG4gICAgICAgICAqIHRoZSBzZWFyY2ggam9iIGV4cGlyZXMgYWZ0ZXIgaXQgaGFzIGJlZW4gY29tcGxldGVkIGFuZCBpcyBzdGlsbCBhdmFpbGFibGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc2V0VFRMKDEwMDAsIGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFRUTCBTRVRcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgdGltZSB0byBsaXZlLCBpbiBzZWNvbmRzLiBcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0VFRMOiBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJzZXR0dGxcIiwgdHRsOiB2YWx1ZX0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgc3VtbWFyeSBmb3IgdGhpcyBzZWFyY2ggam9iIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2Iuc3VtbWFyeSh7dG9wX2NvdW50OiA1fSwgZnVuY3Rpb24oZXJyLCBzdW1tYXJ5LCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdW1tYXJ5OiBcIiwgc3VtbWFyeSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIHN1bW1hcnkuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnN1bW1hcnlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5HRVQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc3VtbWFyeTwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzdW1tYXJ5IGFuZCBzZWFyY2ggam9iOiBgKGVyciwgc3VtbWFyeSwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9zdW1tbWFyeVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBzdW1tYXJ5OiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInN1bW1hcnlcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHRpbWVsaW5lIGZvciB0aGlzIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudGltZWxpbmUoe3RpbWVfZm9ybWF0OiBcIiVjXCJ9LCBmdW5jdGlvbihlcnIsIGpvYiwgdGltZWxpbmUpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJUaW1lbGluZTogXCIsIHRpbWVsaW5lKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgdGltZWxpbmUuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnRpbWVsaW5lXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3RpbWVsaW5lIDwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSB0aW1lbGluZSBhbmQgc2VhcmNoIGpvYjogYChlcnIsIHRpbWVsaW5lLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3RpbWVsaW5lXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRpbWVsaW5lOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInRpbWVsaW5lXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUb3VjaGVzIGEgc2VhcmNoIGpvYiwgd2hpY2ggbWVhbnMgZXh0ZW5kaW5nIHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgXG4gICAgICAgICAqIHRoZSBzZWFyY2ggdG8gbm93IHBsdXMgdGhlIHRpbWUgdG8gbGl2ZSAoVFRMKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi50b3VjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgVE9VQ0hFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L2NvbnRyb2xcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgdG91Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwidG91Y2hcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydHMgcG9sbGluZyB0aGUgc3RhdHVzIG9mIHRoaXMgc2VhcmNoIGpvYiwgYW5kIGZpcmVzIGNhbGxiYWNrc1xuICAgICAgICAgKiB1cG9uIGVhY2ggc3RhdHVzIGNoYW5nZS5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzOlxuICAgICAgICAgKiAgICAtIGBwZXJpb2RgIChfaW50ZWdlcl8pOiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZWFjaCBwb2xsLiBEZWZhdWx0cyB0byA1MDAuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBjYWxsYmFja3MgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIGNhbGxiYWNrczpcbiAgICAgICAgICogICAgLSBgcmVhZHlgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCB3aGVuIHRoZSBqb2IncyBwcm9wZXJ0aWVzIGZpcnN0IGJlY29tZSBhdmFpbGFibGUuXG4gICAgICAgICAqICAgIC0gYHByb2dyZXNzYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgd2hlbmV2ZXIgbmV3IGpvYiBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgICAqICAgIC0gYGRvbmVgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCBpZiB0aGUgam9iIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuIE5vIGZ1cnRoZXIgcG9sbGluZyBpcyBkb25lLlxuICAgICAgICAgKiAgICAtIGBmYWlsZWRgOiBBIGZ1bmN0aW9uIGAoam9iKWAgaW52b2tlZCBpZiB0aGUgam9iIGZhaWxzIGV4ZWN1dGluZyBvbiB0aGUgc2VydmVyLiBObyBmdXJ0aGVyIHBvbGxpbmcgaXMgZG9uZS5cbiAgICAgICAgICogICAgLSBgZXJyb3JgOiBBIGZ1bmN0aW9uIGAoZXJyKWAgaW52b2tlZCBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcG9sbGluZy4gTm8gZnVydGhlciBwb2xsaW5nIGlzIGRvbmUuXG4gICAgICAgICAqIE9yLCBpZiBhIGZ1bmN0aW9uIGAoam9iKWAsIGVxdWl2YWxlbnQgdG8gcGFzc2luZyBpdCBhcyBhIGBkb25lYCBjYWxsYmFjay5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgdHJhY2s6IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgdmFyIHBlcmlvZCA9IG9wdGlvbnMucGVyaW9kIHx8IDUwMDsgLy8gbXNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oY2FsbGJhY2tzKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogY2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG5vQ2FsbGJhY2tzQWZ0ZXJSZWFkeSA9IChcbiAgICAgICAgICAgICAgICAhY2FsbGJhY2tzLnByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5kb25lICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5mYWlsZWQgJiZcbiAgICAgICAgICAgICAgICAhY2FsbGJhY2tzLmVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFja3MucmVhZHkgPSBjYWxsYmFja3MucmVhZHkgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5wcm9ncmVzcyA9IGNhbGxiYWNrcy5wcm9ncmVzcyB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLmRvbmUgPSBjYWxsYmFja3MuZG9uZSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLmZhaWxlZCA9IGNhbGxiYWNrcy5mYWlsZWQgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5lcnJvciA9IGNhbGxiYWNrcy5lcnJvciB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb3IgdXNlIGJ5IHRlc3RzIG9ubHlcbiAgICAgICAgICAgIGNhbGxiYWNrcy5fcHJlcmVhZHkgPSBjYWxsYmFja3MuX3ByZXJlYWR5IHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MuX3N0b3BwZWRBZnRlclJlYWR5ID0gY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZW1pdHRlZFJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgZG9uZUxvb3BpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIEFzeW5jLndoaWxzdChcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuICFkb25lTG9vcGluZzsgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihuZXh0SXRlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZmV0Y2goZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcGF0Y2hTdGF0ZSA9IGpvYi5wcm9wZXJ0aWVzKCkuZGlzcGF0Y2hTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RSZWFkeSA9IGRpc3BhdGNoU3RhdGUgPT09IFwiUVVFVUVEXCIgfHwgZGlzcGF0Y2hTdGF0ZSA9PT0gXCJQQVJTSU5HXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90UmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuX3ByZXJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVtaXR0ZWRSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucmVhZHkoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogRG9uJ3Qga2VlcCBwb2xsaW5nIHRoZSBqb2IgaWYgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBgcmVhZHlgIGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9DYWxsYmFja3NBZnRlclJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuX3N0b3BwZWRBZnRlclJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHJvZ3Jlc3Moam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBqb2IucHJvcGVydGllcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwYXRjaFN0YXRlID09PSBcIkRPTkVcIiAmJiBwcm9wcy5pc0RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLmRvbmUoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpc3BhdGNoU3RhdGUgPT09IFwiRkFJTEVEXCIgJiYgcHJvcHMuaXNGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLmZhaWxlZChqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZUxvb3BpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jLnNsZWVwKHBlcmlvZCwgbmV4dEl0ZXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmVzdW1lcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudW5wYXVzZShmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgVU5QQVVTRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHVucGF1c2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwidW5wYXVzZVwifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzZWFyY2ggam9icy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc2VhcmNoIFxuICAgICAqIGpvYnMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc2VhcmNoIGpvYi5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuSm9icyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmpvYnM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgbmV3IGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSm9ifSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgc2lkID0gcHJvcHMuY29udGVudC5zaWQ7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkpvYih0aGlzLnNlcnZpY2UsIHNpZCwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSm9ic2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9ic1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIHRoZSBiaW5kaW5ncyBzbyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHdvcmtzIFxuICAgICAgICAgICAgLy8gcHJvcGVybHkgd2hlbiBpdCBpcyBwYXNzZWQgYXMgYSBjYWxsYmFjay5cbiAgICAgICAgICAgIHRoaXMuY3JlYXRlICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2UuSm9icy5vbmVzaG90U2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2ggam9iLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGNyZWF0ZWQgam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZTogZnVuY3Rpb24ocXVlcnksIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChxdWVyeSkgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcGFyYW1zLnNlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHF1ZXJ5OyBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKChwYXJhbXMuZXhlY19tb2RlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwib25lc2hvdFwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHVzZSBzcGx1bmtqcy5TZXJ2aWNlLkpvYnMub25lc2hvdFNlYXJjaCBmb3IgZXhlY19tb2RlPW9uZXNob3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFwiTXVzdCBwcm92aWRlIGEgcXVlcnkgdG8gY3JlYXRlIGEgc2VhcmNoIGpvYlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdChcIlwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgam9iID0gbmV3IHJvb3QuSm9iKHRoYXQuc2VydmljZSwgcmVzcG9uc2UuZGF0YS5zaWQsIHRoYXQubmFtZXNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgam9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBzZWFyY2ggam9iIHdpdGggYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBgZXhlY19tb2RlYCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHNlYXJjaDpcbiAgICAgICAgICpcbiAgICAgICAgICogICAgLSBVc2UgYGV4ZWNfbW9kZT1ub3JtYWxgIHRvIHJldHVybiBhIHNlYXJjaCBqb2IgSUQgaW1tZWRpYXRlbHkgKGRlZmF1bHQpLlxuICAgICAgICAgKiAgICAgIFBvbGwgZm9yIGNvbXBsZXRpb24gdG8gZmluZCBvdXQgd2hlbiB5b3UgY2FuIHJldHJpZXZlIHNlYXJjaCByZXN1bHRzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogICAgLSBVc2UgYGV4ZWNfbW9kZT1ibG9ja2luZ2AgdG8gcmV0dXJuIHRoZSBzZWFyY2ggam9iIElEIHdoZW4gdGhlIHNlYXJjaCBoYXMgZmluaXNoZWQuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBUbyBydW4gYSBvbmVzaG90IHNlYXJjaCwgd2hpY2ggZG9lcyBub3QgY3JlYXRlIGEgam9iIGJ1dCByYXRoZXIgcmV0dXJucyB0aGUgc2VhcmNoIHJlc3VsdHMsIHVzZSBgU2VydmljZS5Kb2JzLm9uZXNob3RTZWFyY2hgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2JzID0gc2VydmljZS5qb2JzKCk7XG4gICAgICAgICAqICAgICAgam9icy5zZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCBuZXdKb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCI6IG5ld0pvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiAgICAgICAgKipOb3RlOioqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYGV4ZWNfbW9kZT1vbmVzaG90YCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIHdpdGggdGhlIHByb3BlcnRpZXMgZGljdGlvbmFyeS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBzZWFyY2ggam9iOiBgKGVyciwgY3JlYXRlZEpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIHNlYXJjaDogZnVuY3Rpb24ocXVlcnksIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShxdWVyeSwgcGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgb25lc2hvdCBzZWFyY2ggZnJvbSBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9icyA9IHNlcnZpY2Uuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMub25lc2hvdFNlYXJjaChcInNlYXJjaCBFUlJPUlwiLCB7aWQ6IFwibXlqb2JfMTIzXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSRVNVTFQgRklFTERTXCI6IHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuIFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoOlxuICAgICAgICAgKiAgICAtIGBvdXRwdXRfbW9kZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSByZXN1bHRzIChYTUwsIEpTT04sIG9yIENTVikuXG4gICAgICAgICAqICAgIC0gYGVhcmxpZXN0X3RpbWVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgZWFybGllc3QgdGltZSBpbiB0aGUgdGltZSByYW5nZSB0byBzZWFyY2guIFRoZSB0aW1lIHN0cmluZyBjYW4gYmUgYSBVVEMgdGltZSAod2l0aCBmcmFjdGlvbmFsIHNlY29uZHMpLCBhIHJlbGF0aXZlIHRpbWUgc3BlY2lmaWVyICh0byBub3cpLCBvciBhIGZvcm1hdHRlZCB0aW1lIHN0cmluZy5cbiAgICAgICAgICogICAgLSBgbGF0ZXN0X3RpbWVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgbGF0ZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYHJmYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgb25lIG9yIG1vcmUgZmllbGRzIHRvIGFkZCB0byB0aGUgc2VhcmNoLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgc2VhcmNoOiBgKGVyciwgcmVzdWx0cylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIG9uZXNob3RTZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QocXVlcnkpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHBhcmFtcy5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5zZWFyY2ggPSBxdWVyeTsgXG4gICAgICAgICAgICBwYXJhbXMuZXhlY19tb2RlID0gXCJvbmVzaG90XCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFwiTXVzdCBwcm92aWRlIGEgcXVlcnkgdG8gY3JlYXRlIGEgc2VhcmNoIGpvYlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG91dHB1dE1vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLnF1YWxpZmllZFBhdGg7XG4gICAgICAgICAgICB2YXIgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgICAgICAgICB2YXIgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgdmFyIHBvc3QgPSBwYXJhbXM7XG4gICAgICAgICAgICB2YXIgZ2V0ID0ge291dHB1dF9tb2RlOiBvdXRwdXRNb2RlfTtcbiAgICAgICAgICAgIHZhciBib2R5ID0gbnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMuc2VydmljZS5yZXF1ZXN0KFxuICAgICAgICAgICAgICAgIHBhdGgsIFxuICAgICAgICAgICAgICAgIG1ldGhvZCwgXG4gICAgICAgICAgICAgICAgZ2V0LCBcbiAgICAgICAgICAgICAgICBwb3N0LCBcbiAgICAgICAgICAgICAgICBib2R5LCBcbiAgICAgICAgICAgICAgICBoZWFkZXJzLCBcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBmaWVsZCBvZiBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAqIFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgZm9yIGBEYXRhTW9kZWxDYWxjdWxhdGlvbmBcbiAgICAgKiBhbmQgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBmaWVsZE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6ICBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgdHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBmaWVsZC5cbiAgICAgKiAgICAtIGBtdWx0aXZhbHVlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyBtdWx0aXZhbHVlZC5cbiAgICAgKiAgICAtIGByZXF1aXJlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cbiAgICAgKiAgICAtIGBoaWRkZW5gIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRhdGEgbW9kZWwgVUkuXG4gICAgICogICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgY2FuIGJlIGVkaXRlZC5cbiAgICAgKiAgICAtIGBjb21tZW50YCAoX3N0cmluZ18pOiBBIGNvbW1lbnQgZm9yIHRoaXMgZmllbGQsIG9yIGBudWxsYCBpZiB0aGVyZSBpc24ndCBvbmUuXG4gICAgICogICAgLSBgZmllbGRTZWFyY2hgIChfc3RyaW5nXyk6IEEgc2VhcmNoIHF1ZXJ5IGZyYWdtZW50IGZvciB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqICAgICAgICAgIG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKlxuICAgICAqIFBvc3NpYmxlIHR5cGVzIGZvciBhIGRhdGEgbW9kZWwgZmllbGQ6XG4gICAgICogICAgLSBgc3RyaW5nYFxuICAgICAqICAgIC0gYGJvb2xlYW5gXG4gICAgICogICAgLSBgbnVtYmVyYFxuICAgICAqICAgIC0gYHRpbWVzdGFtcGBcbiAgICAgKiAgICAtIGBvYmplY3RDb3VudGBcbiAgICAgKiAgICAtIGBjaGlsZENvdW50YFxuICAgICAqICAgIC0gYGlwdjRgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsRmllbGQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBfdHlwZXM6IFsgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJ0aW1lc3RhbXBcIiwgXCJvYmplY3RDb3VudFwiLCBcImNoaWxkQ291bnRcIiwgXCJpcHY0XCIsIFwiYm9vbGVhblwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBmaWVsZC5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgZmllbGROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGlzIGZpZWxkLlxuICAgICAgICAgKiAgICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZmllbGQsIHNlZSB2YWxpZCB0eXBlcyBpbiBjbGFzcyBkb2NzLlxuICAgICAgICAgKiAgICAgLSBgbXVsdGl2YWx1ZWAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyBtdWx0aXZhbHVlZC5cbiAgICAgICAgICogICAgIC0gYHJlcXVpcmVkYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIG9uIGV2ZW50cyBpbiB0aGUgb2JqZWN0XG4gICAgICAgICAqICAgICAtIGBoaWRkZW5gIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRhdGEgbW9kZWwgVUkuXG4gICAgICAgICAqICAgICAtIGBlZGl0YWJsZWAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBjYW4gYmUgZWRpdGVkLlxuICAgICAgICAgKiAgICAgLSBgY29tbWVudGAgKF9zdHJpbmdfKTogQSBjb21tZW50IGZvciB0aGlzIGZpZWxkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXNuJ3Qgb25lLlxuICAgICAgICAgKiAgICAgLSBgZmllbGRTZWFyY2hgIChfc3RyaW5nXyk6IEEgc2VhcmNoIHF1ZXJ5IGZyYWdtZW50IGZvciB0aGlzIGZpZWxkLlxuICAgICAgICAgKiAgICAgLSBgbGluZWFnZWAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgZmllbGRcbiAgICAgICAgICogICAgICAgICAgaXMgZGVmaW5lZCwgaXRlbXMgYXJlIGRlbGltaXRlZCBieSBhIGRvdC4gVGhpcyBpcyBjb252ZXJ0ZWQgaW50byBhbiBhcnJheSBvZlxuICAgICAgICAgKiAgICAgICAgICBzdHJpbmdzIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgID0gcHJvcHMuZmllbGROYW1lO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSAgICA9IHByb3BzLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdGhpcy50eXBlICAgICAgICAgICA9IHByb3BzLnR5cGU7XG4gICAgICAgICAgICB0aGlzLm11bHRpdmFsdWVkICAgID0gcHJvcHMubXVsdGl2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWQgICAgICAgPSBwcm9wcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuICAgICAgICAgPSBwcm9wcy5oaWRkZW47XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlICAgICAgID0gcHJvcHMuZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgICAgICAgID0gcHJvcHMuY29tbWVudCB8fCBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaCAgICA9IHByb3BzLmZpZWxkU2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlICAgICAgICA9IHByb3BzLm93bmVyLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIHRoaXMub3duZXIgICAgICAgICAgPSB0aGlzLmxpbmVhZ2VbdGhpcy5saW5lYWdlLmxlbmd0aCAtIDFdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBzdHJpbmc/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgc3RyaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIG51bWJlcj9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSBudW1iZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgdGltZXN0YW1wP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIHRpbWVzdGFtcC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc1RpbWVzdGFtcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0aW1lc3RhbXBcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBvYmplY3QgY291bnQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGNvdW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzT2JqZWN0Y291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0Q291bnRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBjaGlsZCBjb3VudD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSBjaGlsZCBjb3VudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0NoaWxkY291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiY2hpbGRDb3VudFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIGlwdjQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgaXB2NC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0lQdjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiaXB2NFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIGJvb2xlYW4/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgYm9vbGVhbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc0Jvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29uc3RyYWludCBvbiBhIGBEYXRhTW9kZWxPYmplY3RgIG9yIGEgYERhdGFNb2RlbEZpZWxkYC5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYHF1ZXJ5YCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IGRlZmluaW5nIHRoaXMgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogVGhlIGxpbmVhZ2Ugb2YgdGhpcyBkYXRhIG1vZGVsIGNvbnN0cmFpbnQuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IG93bnNcbiAgICAgKiAgICAgICAgICB0aGlzIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENvbnN0cmFpbnRcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbENvbnN0cmFpbnQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgc2VhcmNoIHF1ZXJ5IHRoaXMgY29uc3RyYWludCBzcGVjaWZpZXMuXG4gICAgICAgICAqICAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHRoYXQgb3ducyB0aGlzXG4gICAgICAgICAqICAgICAgICAgIGNvbnN0cmFpbnQsIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG9cbiAgICAgICAgICogICAgICAgICAgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENvbnN0cmFpbnRcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5ICAgPSBwcm9wcy5zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgPSB0aGlzLmxpbmVhZ2VbdGhpcy5saW5lYWdlLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3Igc3BlY2lmeWluZyBhIGNhbGN1bGF0aW9uIG9uIGEgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBpZGAgKF9zdHJpbmdfKTogVGhlIElEIGZvciB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24uXG4gICAgICogICAgLSBgdHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAqICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nX3xfbnVsbF8pOiBUaGUgY29tbWVudCBmb3IgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLCBvciBgbnVsbGAuXG4gICAgICogICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBUcnVlIGlmIHRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIGVkaXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgY2FsY3VsYXRpb25cbiAgICAgKiAgICAgICAgICBpcyBkZWZpbmVkIGluIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBkYXRhIG1vZGVsIHRoYXQgdGhpcyBjYWxjdWxhdGlvbiBiZWxvbmdzIHRvLlxuICAgICAqICAgIC0gYG91dHB1dEZpZWxkc2AgKF9hcnJheV8pOiBUaGUgZmllbGRzIG91dHB1dCBieSB0aGlzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIFJleCBhbmQgRXZhbCB0eXBlcyBoYXZlIGFuIGFkZGl0aW9uYWwgcHJvcGVydHk6XG4gICAgICogICAgLSBgZXhwcmVzc2lvbmAgKF9zdHJpbmdfKTogVGhlIGV4cHJlc3Npb24gdG8gdXNlIGZvciB0aGlzIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIFJleCBhbmQgR2VvSVAgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGlucHV0RmllbGRgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIGNhbGN1bGF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIExvb2t1cCB0eXBlIGhhcyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgbG9va3VwTmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIGxvb2t1cCB0byBwZXJmb3JtLlxuICAgICAqICAgIC0gYGlucHV0RmllbGRNYXBwaW5nc2AgKF9vYmplY3RfKTogVGhlIG1hcHBpbmdzIGZyb20gZmllbGRzIGluIHRoZSBldmVudHMgdG8gZmllbGRzIGluIHRoZSBsb29rdXAuXG4gICAgICpcbiAgICAgKiBWYWxpZCB0eXBlcyBvZiBjYWxjdWxhdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYExvb2t1cGBcbiAgICAgKiAgICAtIGBFdmFsYFxuICAgICAqICAgIC0gYEdlb0lQYFxuICAgICAqICAgIC0gYFJleGBcbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxDYWxjdWxhdGlvbiA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIF90eXBlczogW1wiTG9va3VwXCIsIFwiRXZhbFwiLCBcIkdlb0lQXCIsIFwiUmV4XCJdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYSBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvbklEYCAoX3N0cmluZ18pOiBUaGUgSUQgb2YgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgICAgICogICAgIC0gYGNhbGN1bGF0aW9uVHlwZWAgKF9zdHJpbmdfKTogVGhlIHR5cGUgb2YgdGhpcyBjYWxjdWxhdGlvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiAgICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIGVkaXRlZC5cbiAgICAgICAgICogICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nXyk6IEEgY29tbWVudCBmb3IgdGhpcyBjYWxjdWxhdGlvbiwgb3IgYG51bGxgIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICAgICAgICogICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3Qgb24gd2hpY2ggdGhpcyBjYWxjdWxhdGlvblxuICAgICAgICAgKiAgICAgICAgICBpcyBkZWZpbmVkLCBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvIGFuIGFycmF5IG9mXG4gICAgICAgICAqICAgICAgICAgIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqICAgICAtIGBvdXRwdXRGaWVsZHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgdGhlIGZpZWxkcyB0aGlzIGNhbGN1bGF0aW9uIGdlbmVyYXRlcy5cbiAgICAgICAgICogICAgIC0gYGV4cHJlc3Npb25gIChfc3RyaW5nXyk6IFRoZSBleHByZXNzaW9uIHRvIHVzZSBmb3IgdGhpcyBjYWxjdWxhdGlvbjsgZXhjbHVzaXZlIHRvIGBFdmFsYCBhbmQgYFJleGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGlucHV0RmllbGRgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIGNhbGN1bGF0aW9uOyBleGNsdXNpdmUgdG8gYEdlb0lQYCBhbmQgYFJleGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGxvb2t1cE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBsb29rdXAgdG8gcGVyZm9ybTsgZXhjbHVzaXZlIHRvIGBMb29rdXBgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBpbnB1dEZpZWxkTWFwcGluZ3NgIChfYXJyYXlfKTogT25lIGVsZW1lbnQgYXJyYXkgY29udGFpbmluZyBhbiBvYmplY3Qgd2l0aCB0aGUgbWFwcGluZ3MgZnJvbSBmaWVsZHMgaW4gdGhlIGV2ZW50cyB0byBmaWVsZHNcbiAgICAgICAgICogICAgICAgICBpbiB0aGUgbG9va3VwOyBleGNsdXNpdmUgdG8gYExvb2t1cGAgY2FsY3VsYXRpb25zIChvcHRpb25hbClcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5pZCAgICAgICAgICAgICA9IHByb3BzLmNhbGN1bGF0aW9uSUQ7XG4gICAgICAgICAgICB0aGlzLnR5cGUgICAgICAgICAgID0gcHJvcHMuY2FsY3VsYXRpb25UeXBlO1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ICAgICAgICA9IHByb3BzLmNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZWRpdGFibGUgICAgICAgPSBwcm9wcy5lZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMubGluZWFnZSAgICAgICAgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgICAgICAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgdGhpcy5vdXRwdXRGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMub3V0cHV0RmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRGaWVsZHNbcHJvcHMub3V0cHV0RmllbGRzW2ldLmZpZWxkTmFtZV0gPSBuZXcgcm9vdC5EYXRhTW9kZWxGaWVsZChwcm9wcy5vdXRwdXRGaWVsZHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJFdmFsXCIgPT09IHRoaXMudHlwZSB8fCBcIlJleFwiID09PSB0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBwcm9wcy5leHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiR2VvSVBcIiA9PT0gdGhpcy50eXBlIHx8IFwiUmV4XCIgPT09IHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHByb3BzLmlucHV0RmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJMb29rdXBcIiA9PT0gdGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb29rdXBOYW1lID0gcHJvcHMubG9va3VwTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RmllbGRNYXBwaW5ncyA9IHByb3BzLmxvb2t1cElucHV0c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIG9mIG91dHB1dCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2Ygb3V0cHV0IGZpZWxkIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIG91dHB1dEZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub3V0cHV0RmllbGRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGVkaXRhYmxlP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBlZGl0YWJsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0VkaXRhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZWRpdGFibGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIGxvb2t1cD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBsb29rdXAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXNMb29rdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiTG9va3VwXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIG9mIHR5cGUgZXZhbD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBldmFsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzRXZhbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFdmFsXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBSZXg/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgUmV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzUmV4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlJleFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIEdlb0lQP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBvZiB0eXBlIEdlb0lQLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzR2VvSVA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiR2VvSVBcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUGl2b3QgcmVwcmVzZW50cyBkYXRhIGFib3V0IGEgcGl2b3QgcmVwb3J0IHJldHVybmVkIGJ5IHRoZSBTcGx1bmsgU2VydmVyLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgc2VydmljZWAgKF9zcGx1bmtqcy5TZXJ2aWNlXyk6IEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAqICAgIC0gYHNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBzdHJpbmcgZm9yIHJ1bm5pbmcgdGhlIHBpdm90IHJlcG9ydC5cbiAgICAgKiAgICAtIGBkcmlsbGRvd25TZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgZHJpbGxkb3duLlxuICAgICAqICAgIC0gYG9wZW5JblNlYXJjaGAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBzZWFyY2ggcGFyYW1ldGVyLCBidXQgbGlzdGVkIG1vcmUgc2ltcGx5LlxuICAgICAqICAgIC0gYHByZXR0eVF1ZXJ5YCAoX3N0cmluZ18pOiBFcXVpdmFsZW50IHRvIGBvcGVuSW5TZWFyY2hgLlxuICAgICAqICAgIC0gYHBpdm90U2VhcmNoYCAoX3N0cmluZ18pOiBBIHBpdm90IHNlYXJjaCBjb21tYW5kIGJhc2VkIG9uIHRoZSBuYW1lZCBkYXRhIG1vZGVsLlxuICAgICAqICAgIC0gYHRzdGF0c1NlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBmb3IgcnVubmluZyB0aGlzIHBpdm90IHJlcG9ydCB1c2luZyB0c3RhdHMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAqL1xuICAgIHJvb3QuUGl2b3QgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgcGl2b3QuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggc3RyaW5nIGZvciBydW5uaW5nIHRoZSBwaXZvdCByZXBvcnQuXG4gICAgICAgICAqICAgIC0gYGRyaWxsZG93bl9zZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgZHJpbGxkb3duLlxuICAgICAgICAgKiAgICAtIGBvcGVuX2luX3NlYXJjaGAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBzZWFyY2ggcGFyYW1ldGVyLCBidXQgbGlzdGVkIG1vcmUgc2ltcGx5LlxuICAgICAgICAgKiAgICAtIGBwaXZvdF9zZWFyY2hgIChfc3RyaW5nXyk6IEEgcGl2b3Qgc2VhcmNoIGNvbW1hbmQgYmFzZWQgb24gdGhlIG5hbWVkIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgIC0gYHRzdGF0c19zZWFyY2hgIChfc3RyaW5nX3xfbnVsbF8pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIHRzdGF0cywgbnVsbCBpZiBhY2NlbGVyYXRpb24gaXMgZGlzYWJsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IHByb3BzLnNlYXJjaDtcbiAgICAgICAgICAgIHRoaXMuZHJpbGxkb3duU2VhcmNoID0gcHJvcHMuZHJpbGxkb3duX3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMucHJldHR5UXVlcnkgPSB0aGlzLm9wZW5JblNlYXJjaCA9IHByb3BzLm9wZW5faW5fc2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5waXZvdFNlYXJjaCA9IHByb3BzLnBpdm90X3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMudHN0YXRzU2VhcmNoID0gcHJvcHMudHN0YXRzX3NlYXJjaCB8fCBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnJ1biA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5ydW4pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydHMgYSBzZWFyY2ggam9iIHJ1bm5pbmcgdGhpcyBwaXZvdCwgYWNjZWxlcmF0ZWQgaWYgcG9zc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYiAob3B0aW9uYWwpLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgY3JlYXRpbmcgdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90XG4gICAgICAgICAqL1xuICAgICAgICBydW46IGZ1bmN0aW9uKGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYXJncyB8fCBPYmplY3Qua2V5cyhhcmdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRzdGF0cyBpcyB1bmRlZmluZWQsIHVzZSBwaXZvdFNlYXJjaCAodHJ5IHRvIHJ1biBhbiBhY2NlbGVyYXRlZCBzZWFyY2ggaWYgcG9zc2libGUpXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc2VhcmNoKHRoaXMudHN0YXRzU2VhcmNoIHx8IHRoaXMucGl2b3RTZWFyY2gsIGFyZ3MsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUGl2b3RTcGVjaWZpY2F0aW9uIHJlcHJlc2VudHMgYSBwaXZvdCB0byBiZSBkb25lIG9uIGEgcGFydGljdWxhciBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKiBUaGUgdXNlciBjcmVhdGVzIGEgUGl2b3RTcGVjaWZpY2F0aW9uIG9uIHNvbWUgZGF0YSBtb2RlbCBvYmplY3QsIGFkZHMgZmlsdGVycywgcm93IHNwbGl0cyxcbiAgICAgKiBjb2x1bW4gc3BsaXRzLCBhbmQgY2VsbCB2YWx1ZXMsIHRoZW4gY2FsbHMgdGhlIHBpdm90IG1ldGhvZCB0byBxdWVyeSBzcGx1bmtkIGFuZFxuICAgICAqIGdldCBhIHNldCBvZiBTUEwgcXVlcmllcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgICAgKlxuICAgICAqIENhbGwgdGhlIGBwaXZvdGAgbWV0aG9kIHRvIHF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIHBpdm90LlxuICAgICAqXG4gICAgICogVGhpcyBjbGFzcyBzdXBwb3J0cyBhIGZsdWVudCBBUEksIGVhY2ggZnVuY3Rpb24gZXhjZXB0IGBpbml0YCwgYHRvSnNvbk9iamVjdGAgJiBgcGl2b3RgXG4gICAgICogcmV0dXJuIHRoZSBtb2RpZmllZCBgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25gIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICogICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAqICAgICAgICAgdmFyIHBpdm90U3BlY2lmaWNhdGlvbiA9IHNlYXJjaGVzLmNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbigpO1xuICAgICAqICAgICAgICAgcGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICogICAgICAgICAgICAgLmFkZFJvd1NwbGl0KFwidXNlclwiLCBcIkV4ZWN1dGluZyB1c2VyXCIpXG4gICAgICogICAgICAgICAgICAgLmFkZFJhbmdlQ29sdW1uU3BsaXQoXCJleGVjX3RpbWVcIiwge2xpbWl0OiA0fSlcbiAgICAgKiAgICAgICAgICAgICAuYWRkQ2VsbFZhbHVlKFwic2VhcmNoXCIsIFwiU2VhcmNoIFF1ZXJ5XCIsIFwidmFsdWVzXCIpXG4gICAgICogICAgICAgICAgICAgLnBpdm90KGZ1bmN0aW9uKGVyciwgcGl2b3QpIHtcbiAgICAgKiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHb3QgYSBQaXZvdCBvYmplY3QgZnJvbSB0aGUgU3BsdW5rIHNlcnZlciFcIik7XG4gICAgICogICAgICAgICAgICAgfSk7XG4gICAgICogICAgIH0pO1xuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZGF0YU1vZGVsT2JqZWN0YCAoX3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0Xyk6IFRoZSBgRGF0YU1vZGVsT2JqZWN0YCBmcm9tIHdoaWNoXG4gICAgICogICAgICAgIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAgd2FzIGNyZWF0ZWQuXG4gICAgICogICAgLSBgY29sdW1uc2AgKF9hcnJheV8pOiBUaGUgY29sdW1uIHNwbGl0cyBvbiB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYHJvd3NgIChfYXJyYXlfKTogVGhlIHJvdyBzcGxpdHMgb24gdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYC5cbiAgICAgKiAgICAtIGBmaWx0ZXJzYCAoX2FycmF5Xyk6IFRoZSBmaWx0ZXJzIG9uIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgY2VsbHNgIChfYXJyYXlfKTogVGhlIGNlbGwgYWdncmVnYXRpb25zIGZvciB0aGlzYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgYWNjZWxlcmF0aW9uTmFtZXNwYWNlYCAoX3N0cmluZ198X251bGxfKTogVGhlIG5hbWUgb2YgdGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGUgYERhdGFNb2RlbE9iamVjdGBcbiAgICAgKiAgICAgICAgb24gd2hpY2ggdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYCB3YXMgY3JlYXRlZCBpZiB0aGUgYERhdGFNb2RlbGAgaXMgYWNjZWxlcmF0ZWQuIEFsdGVybmF0aXZlbHksXG4gICAgICogICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgbWFudWFsbHkgdG8gdGhlIHNpZCBvZiBhbiBhY2NlbGVyYXRpb24gam9iIGluIHRoZSBmb3JtYXQgYHNpZD08c2lkPmAuXG4gICAgICpcbiAgICAgKiBWYWxpZCBjb21wYXJpc29uIHR5cGVzIGFyZTpcbiAgICAgKiAgICAtIGBib29sZWFuYFxuICAgICAqICAgIC0gYHN0cmluZ2BcbiAgICAgKiAgICAtIGBudW1iZXJgXG4gICAgICogICAgLSBgaXB2NGBcbiAgICAgKlxuICAgICAqIFZhbGlkIGJvb2xlYW4gY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKlxuICAgICAqIFZhbGlkIHN0cmluZyBjb21wYXJpc29ucyBhcmU6XG4gICAgICogICAgLSBgPWBcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqICAgIC0gYGNvbnRhaW5zYFxuICAgICAqICAgIC0gYGRvZXNOb3RDb250YWluYFxuICAgICAqICAgIC0gYHN0YXJ0c1dpdGhgXG4gICAgICogICAgLSBgZW5kc1dpdGhgXG4gICAgICogICAgLSBgcmVnZXhgXG4gICAgICpcbiAgICAgKiBWYWxpZCBudW1iZXIgY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgIT1gXG4gICAgICogICAgLSBgPGBcbiAgICAgKiAgICAtIGA+YFxuICAgICAqICAgIC0gYDw9YFxuICAgICAqICAgIC0gYD49YFxuICAgICAqICAgIC0gYGlzYFxuICAgICAqICAgIC0gYGlzTnVsbGBcbiAgICAgKiAgICAtIGBpc05vdE51bGxgXG4gICAgICpcbiAgICAgKiBWYWxpZCBpcHY0IGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqICAgIC0gYGNvbnRhaW5zYFxuICAgICAqICAgIC0gYGRvZXNOb3RDb250YWluYFxuICAgICAqICAgIC0gYHN0YXJ0c1dpdGhgXG4gICAgICpcbiAgICAgKiBWYWxpZCBiaW5uaW5nIHZhbHVlcyBhcmU6XG4gICAgICogICAgLSBgYXV0b2BcbiAgICAgKiAgICAtIGB5ZWFyYFxuICAgICAqICAgIC0gYG1vbnRoYFxuICAgICAqICAgIC0gYGRheWBcbiAgICAgKiAgICAtIGBob3VyYFxuICAgICAqICAgIC0gYG1pbnV0ZWBcbiAgICAgKiAgICAtIGBzZWNvbmRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzb3J0IGRpcmVjdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYEFTQ0VORElOR2BcbiAgICAgKiAgICAtIGBERUNFTkRJTkdgXG4gICAgICogICAgLSBgREVGQVVMVGBcbiAgICAgKlxuICAgICAqIFZhbGlkIHN0YXRzIGZ1bmN0aW9ucyBhcmU6XG4gICAgICogICAgLSBgbGlzdGBcbiAgICAgKiAgICAtIGB2YWx1ZXNgXG4gICAgICogICAgLSBgZmlyc3RgXG4gICAgICogICAgLSBgbGFzdGBcbiAgICAgKiAgICAtIGBjb3VudGBcbiAgICAgKiAgICAtIGBkY2BcbiAgICAgKiAgICAtIGBzdW1gXG4gICAgICogICAgLSBgYXZlcmFnZWBcbiAgICAgKiAgICAtIGBtYXhgXG4gICAgICogICAgLSBgbWluYFxuICAgICAqICAgIC0gYHN0ZGV2YFxuICAgICAqICAgIC0gYGR1cmF0aW9uYFxuICAgICAqICAgIC0gYGVhcmxpZXN0YFxuICAgICAqICAgIC0gYGxhdGVzdGBcbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAqL1xuICAgIHJvb3QuUGl2b3RTcGVjaWZpY2F0aW9uID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgX2NvbXBhcmlzb25zOiB7XG4gICAgICAgICAgICBib29sZWFuOiBbXCI9XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIl0sXG4gICAgICAgICAgICBzdHJpbmc6IFtcIj1cIiwgXCJpc1wiLCBcImlzTnVsbFwiLCBcImlzTm90TnVsbFwiLCBcImNvbnRhaW5zXCIsIFwiZG9lc05vdENvbnRhaW5cIiwgXCJzdGFydHNXaXRoXCIsIFwiZW5kc1dpdGhcIiwgXCJyZWdleFwiXSxcbiAgICAgICAgICAgIG51bWJlcjogW1wiPVwiLCBcIiE9XCIsIFwiPFwiLCBcIj5cIiwgXCI8PVwiLCBcIj49XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIl0sXG4gICAgICAgICAgICBpcHY0OiBbXCJpc1wiLCBcImlzTnVsbFwiLCBcImlzTm90TnVsbFwiLCBcImNvbnRhaW5zXCIsIFwiZG9lc05vdENvbnRhaW5cIiwgXCJzdGFydHNXaXRoXCJdXG4gICAgICAgIH0sXG4gICAgICAgIF9iaW5uaW5nOiBbXCJhdXRvXCIsIFwieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiXSxcbiAgICAgICAgX3NvcnREaXJlY3Rpb246IFtcIkFTQ0VORElOR1wiLCBcIkRFU0NFTkRJTkdcIiwgXCJERUZBVUxUXCJdLFxuICAgICAgICBfc3RhdHNGdW5jdGlvbnM6IFtcImxpc3RcIiwgXCJ2YWx1ZXNcIiwgXCJmaXJzdFwiLCBcImxhc3RcIiwgXCJjb3VudFwiLCBcImRjXCIsIFwic3VtXCIsIFwiYXZlcmFnZVwiLCBcIm1heFwiLCBcIm1pblwiLCBcInN0ZGV2XCIsIFwiZHVyYXRpb25cIiwgXCJlYXJsaWVzdFwiLCBcImxhdGVzdFwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWx9IHBhcmVudERhdGFNb2RlbCBUaGUgYERhdGFNb2RlbGAgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKGRhdGFNb2RlbE9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxPYmplY3QgPSBkYXRhTW9kZWxPYmplY3Q7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLmNlbGxzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlID0gZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5pc0FjY2VsZXJhdGVkKCkgPyBcbiAgICAgICAgICAgICAgICBkYXRhTW9kZWxPYmplY3QuZGF0YU1vZGVsLm5hbWUgOiBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnJ1biAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJ1bik7XG4gICAgICAgICAgICB0aGlzLnBpdm90ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBpdm90KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhlIGFjY2VsZXJhdGlvbiBjYWNoZSBmb3IgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uIHRvIGEgam9iLFxuICAgICAgICAgKiB1c3VhbGx5IGdlbmVyYXRlZCBieSBjcmVhdGVMb2NhbEFjY2VsZXJhdGlvbkpvYiBvbiBhIERhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKiBpbnN0YW5jZSwgYXMgdGhlIGFjY2VsZXJhdGlvbiBjYWNoZSBmb3IgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gc2lkIFRoZSBzaWQgb2YgYW4gYWNjZWxlcmF0aW9uIGpvYixcbiAgICAgICAgICogICAgIG9yLCBhIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY2NlbGVyYXRpb25Kb2I6IGZ1bmN0aW9uKHNpZCkge1xuICAgICAgICAgICAgLy8gSWYgYSBzZWFyY2ggb2JqZWN0IGlzIHBhc3NlZCBpbiwgZ2V0IGl0cyBzaWRcbiAgICAgICAgICAgIGlmIChzaWQgJiYgc2lkIGluc3RhbmNlb2YgU2VydmljZS5Kb2IpIHtcbiAgICAgICAgICAgICAgICBzaWQgPSBzaWQuc2lkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXNpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZCB0byB1c2UgZm9yIGFjY2VsZXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb25OYW1lc3BhY2UgPSBcInNpZD1cIiArIHNpZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBmaWx0ZXIgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC4gVGhlIGZpbHRlciB3aWxsIGJlIGEgY29uc3RyYWludCBvZiB0aGUgZm9ybVxuICAgICAgICAgKiBgZmllbGQgYGNvbXBhcmlzb25gIGNvbXBhcmVUb2AsIGZvciBleGFtcGxlOiBgaXNfcmVtb3RlID0gZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGZpbHRlciBvblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyaXNvblR5cGUgVGhlIHR5cGUgb2YgY29tcGFyaXNvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyaXNvbk9wIFRoZSBjb21wYXJpc29uLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgY29tcGFyaXNvbnMsIGJhc2VkIG9uIHR5cGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21wYXJlVG8gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdGhlIGZpZWxkIHRvLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkRmlsdGVyOiBmdW5jdGlvbihmaWVsZE5hbWUsIGNvbXBhcmlzb25UeXBlLCBjb21wYXJpc29uT3AsIGNvbXBhcmVUbykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBmaWx0ZXIgb24gYSBub25leGlzdGVudCBmaWVsZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcGFyaXNvblR5cGUgIT09IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgYWRkIFwiICsgY29tcGFyaXNvblR5cGUgKyAgXG4gICAgICAgICAgICAgICAgICAgIFwiIGZpbHRlciBvbiBcIiArIGZpZWxkTmFtZSArIFxuICAgICAgICAgICAgICAgICAgICBcIiBiZWNhdXNlIGl0IGlzIG9mIHR5cGUgXCIgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyh0aGlzLl9jb21wYXJpc29uc1tjb21wYXJpc29uVHlwZV0sIGNvbXBhcmlzb25PcCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGFkZCBcIiArIGNvbXBhcmlzb25UeXBlICsgXG4gICAgICAgICAgICAgICAgICAgIFwiIGZpbHRlciBiZWNhdXNlIFwiICsgY29tcGFyaXNvbk9wICtcbiAgICAgICAgICAgICAgICAgICAgXCIgaXMgbm90IGEgdmFsaWQgY29tcGFyaXNvbiBvcGVyYXRvclwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKS5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGNvbXBhcmlzb25UeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVGhlc2UgZmllbGRzIGFyZSB0eXBlIGRlcGVuZGVudFxuICAgICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcImJvb2xlYW5cIiwgXCJzdHJpbmdcIiwgXCJpcHY0XCIsIFwibnVtYmVyXCJdLCByZXQudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXQucnVsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvcjogY29tcGFyaXNvbk9wLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlVG86IGNvbXBhcmVUb1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChyZXQpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGxpbWl0IG9uIHRoZSBldmVudHMgc2hvd24gaW4gYSBwaXZvdCBieSBzb3J0aW5nIHRoZW0gYWNjb3JkaW5nIHRvIHNvbWUgZmllbGQsIHRoZW4gdGFraW5nXG4gICAgICAgICAqIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGZyb20gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gZmlsdGVyIG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc29ydEF0dHJpYnV0ZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gdXNlIGZvciBzb3J0aW5nLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc29ydERpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgZXZlbnRzLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgdHlwZXMuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsaW1pdCBUaGUgbnVtYmVyIG9mIHZhbHVlcyBmcm9tIHRoZSBzb3J0ZWQgbGlzdCB0byBhbGxvdyB0aHJvdWdoIHRoaXMgZmlsdGVyLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdHNGdW5jdGlvbiBUaGUgc3RhdHMgZnVuY3Rpb24gdG8gdXNlIGZvciBhZ2dyZWdhdGlvbiBiZWZvcmUgc29ydGluZywgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkTGltaXRGaWx0ZXI6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgc29ydEF0dHJpYnV0ZSwgc29ydERpcmVjdGlvbiwgbGltaXQsIHN0YXRzRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgbGltaXQgZmlsdGVyIG9uIGEgbm9uZXhpc3RlbnQgZmllbGQuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0Q291bnRcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIGxpbWl0IGZpbHRlciBvbiBcIiArIGZpZWxkTmFtZSArIFwiIGJlY2F1c2UgaXQgaXMgb2YgdHlwZSBcIiArIGYudHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSBmLnR5cGUgJiYgIXV0aWxzLmNvbnRhaW5zKFtcImNvdW50XCIsIFwiZGNcIl0sIHN0YXRzRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gZm9yIGZpZWxkcyBvZiB0eXBlIHN0cmluZyBtdXN0IGJlIENPVU5UIG9yIERJU1RJTkNUX0NPVU5UOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiLCBcImRjXCIsIFwiYXZlcmFnZVwiLCBcInN1bVwiXSwgc3RhdHNGdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBmb3IgZmllbGRzIG9mIHR5cGUgbnVtYmVyIG11c3QgYmUgb25lIG9mIENPVU5ULCBESVNUSU5DVF9DT1VOVCwgU1VNLCBvciBBVkVSQUdFOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJvYmplY3RDb3VudFwiID09PSBmLnR5cGUgJiYgIXV0aWxzLmNvbnRhaW5zKFtcImNvdW50XCJdLCBzdGF0c0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIGZvciBmaWVsZHMgb2YgdHlwZSBvYmplY3QgY291bnQgbXVzdCBiZSBDT1VOVDsgZm91bmQgXCIgKyBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBzb3J0QXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU93bmVyOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShzb3J0QXR0cmlidXRlKS5saW5lYWdlLmpvaW4oXCIuXCIpLFxuICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgbGltaXRBbW91bnQ6IGxpbWl0LFxuICAgICAgICAgICAgICAgIHN0YXRzRm46IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBBc3N1bWVkIFwiaGlnaGVzdFwiIGlzIHByZWZlcnJlZCBmb3Igd2hlbiBzb3J0RGlyZWN0aW9uIGlzIFwiREVGQVVMVFwiXG4gICAgICAgICAgICBmaWx0ZXIubGltaXRUeXBlID0gXCJBU0NFTkRJTkdcIiA9PT0gc29ydERpcmVjdGlvbiA/IFwibG93ZXN0XCIgOiBcImhpZ2hlc3RcIjtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSBudW1lcmljIG9yIHN0cmluZyB2YWx1ZWQgZmllbGQsIHNwbGl0dGluZyBvbiBlYWNoIGRpc3RpbmN0IHZhbHVlIG9mIHRoZSBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJvd1NwbGl0OiBmdW5jdGlvbihmaWVsZE5hbWUsIGxhYmVsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyhbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIgb3Igc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJvdyA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgcm93LmRpc3BsYXkgPSBcImFsbFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgbnVtZXJpYyBmaWVsZCwgc3BsaXR0aW5nIGludG8gbnVtZXJpYyByYW5nZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgc3BsaXQgZ2VuZXJhdGVzIGJpbnMgd2l0aCBlZGdlcyBlcXVpdmFsZW50IHRvIHRoZVxuICAgICAgICAgKiBjbGFzc2ljIGxvb3AgJ2ZvciBpIGluIDxzdGFydD4gdG8gPGVuZD4gYnkgPHN0ZXA+JyBidXQgd2l0aCBhIG1heGltdW1cbiAgICAgICAgICogbnVtYmVyIG9mIGJpbnMgPGxpbWl0Pi4gVGhpcyBkaXNwYXRjaGVzIHRvIHRoZSBzdGF0cyBhbmQgeHlzZXJpZXMgc2VhcmNoIGNvbW1hbmRzLlxuICAgICAgICAgKiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSBvZiBjb2xsZWN0aW9uIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbiBvcHRpb25zOlxuICAgICAgICAgKiAgICAtIGBzdGFydGAgKF9pbnRlZ2VyXyk6IFRoZSB2YWx1ZSBvZiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGxvd2VzdCB2YWx1ZSBpbiB0aGUgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBlbmRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgZm9yIHRoZSBlbmQgb2YgdGhlIGxhc3QgcmFuZ2UsIG9yIG51bGwgdG8gdGFrZSB0aGUgaGlnaGVzdCB2YWx1ZSBpbiB0aGUgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBzdGVwYCAoX2ludGVnZXJfKTogVGhlIHRoZSB3aWR0aCBvZiBlYWNoIHJhbmdlLCBvciBudWxsIHRvIGhhdmUgU3BsdW5rIGNhbGN1bGF0ZSBpdC5cbiAgICAgICAgICogICAgLSBgbGltaXRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmFuZ2VzIHRvIHNwbGl0IGludG8sIG9yIG51bGwgZm9yIG5vIGxpbWl0LlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkUmFuZ2VSb3dTcGxpdDogZnVuY3Rpb24oZmllbGQsIGxhYmVsLCByYW5nZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1cGRhdGVSYW5nZXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0YXJ0KSAmJiByYW5nZXMuc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMuc3RhcnQgPSByYW5nZXMuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5lbmQpICYmIHJhbmdlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMuZW5kID0gcmFuZ2VzLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0ZXApICYmIHJhbmdlcy5zdGVwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLnNpemUgPSByYW5nZXMuc3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLmxpbWl0KSAmJiByYW5nZXMubGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZXMubWF4TnVtYmVyT2YgPSByYW5nZXMubGltaXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJyYW5nZXNcIixcbiAgICAgICAgICAgICAgICByYW5nZXM6IHVwZGF0ZVJhbmdlc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHRydWVEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgdHJ1ZSB2YWx1ZWQgcm93IGxhYmVsLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsc2VEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmFsc2UgdmFsdWVkIHJvdyBsYWJlbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEJvb2xlYW5Sb3dTcGxpdDogZnVuY3Rpb24oZmllbGQsIGxhYmVsLCB0cnVlRGlzcGxheVZhbHVlLCBmYWxzZURpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChcImJvb2xlYW5cIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgYm9vbGVhbi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgdHJ1ZUxhYmVsOiB0cnVlRGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICAgIGZhbHNlTGFiZWw6IGZhbHNlRGlzcGxheVZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIHJvdyBzcGxpdCBvbiBhIHRpbWVzdGFtcCB2YWx1ZWQgZmllbGQsIGJpbm5lZCBieSB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBzaXplLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciB0aGlzIHNldCBvZiByb3dzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmlubmluZyBUaGUgc2l6ZSBvZiBiaW5zIHRvIHVzZSwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkVGltZXN0YW1wUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgYmlubmluZykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChcInRpbWVzdGFtcFwiICE9PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCB0aW1lc3RhbXAuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyh0aGlzLl9iaW5uaW5nLCBiaW5uaW5nKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmlubmluZyBcIiArIGJpbm5pbmcgKyBcIiBmb3VuZC4gVmFsaWQgdmFsdWVzIGFyZTogXCIgKyB0aGlzLl9iaW5uaW5nLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLm93bmVyLFxuICAgICAgICAgICAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBiaW5uaW5nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZWQgZmllbGQsIHByb2R1Y2luZyBhIGNvbHVtbiBmb3JcbiAgICAgICAgICogZWFjaCBkaXN0aW5jdCB2YWx1ZSBvZiB0aGUgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRDb2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGROYW1lKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKCF1dGlscy5jb250YWlucyhbXCJudW1iZXJcIiwgXCJzdHJpbmdcIl0sIGYudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIgb3Igc3RyaW5nLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNvbCA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiID09PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb2wuZGlzcGxheSA9IFwiYWxsXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBjb2x1bW4gc3BsaXQgb24gYSBudW1lcmljIGZpZWxkLCBzcGxpdHRpbmcgdGhlIHZhbHVlcyBpbnRvIHJhbmdlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgc3RhcnRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgZW5kYCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIGZvciB0aGUgZW5kIG9mIHRoZSBsYXN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgc3RlcGAgKF9pbnRlZ2VyXyk6IFRoZSB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSwgb3IgbnVsbCB0byBoYXZlIFNwbHVuayBjYWxjdWxhdGUgaXQuXG4gICAgICAgICAqICAgIC0gYGxpbWl0YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJhbmdlcyB0byBzcGxpdCBpbnRvLCBvciBudWxsIGZvciBubyBsaW1pdC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJhbmdlQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIG51bWJlci5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluIFNwbHVuayA2LjAuMS4xLCBkYXRhIG1vZGVscyBpbmNvcnJlY3RseSBleHBlY3Qgc3RyaW5ncyBmb3IgdGhlc2UgZmllbGRzXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIG51bWJlcnMuIEluIDYuMSwgdGhpcyBpcyBmaXhlZCBhbmQgYm90aCBhcmUgYWNjZXB0ZWQuXG4gICAgICAgICAgICB2YXIgdXBkYXRlZFJhbmdlcyA9IHt9O1xuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuc3RhcnQpICYmIHJhbmdlcy5zdGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMuc3RhcnQgPSByYW5nZXMuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5lbmQpICYmIHJhbmdlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLmVuZCA9IHJhbmdlcy5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGVwKSAmJiByYW5nZXMuc3RlcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMuc2l6ZSA9IHJhbmdlcy5zdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMubGltaXQpICYmIHJhbmdlcy5saW1pdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRSYW5nZXMubWF4TnVtYmVyT2YgPSByYW5nZXMubGltaXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJyYW5nZXNcIixcbiAgICAgICAgICAgICAgICByYW5nZXM6IHVwZGF0ZWRSYW5nZXNcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBjb2x1bW4gc3BsaXQgb24gYSBib29sZWFuIHZhbHVlZCBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHRydWVEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgdHJ1ZSB2YWx1ZWQgY29sdW1uIGxhYmVsLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsc2VEaXNwbGF5VmFsdWUgQSBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmFsc2UgdmFsdWVkIGNvbHVtbiBsYWJlbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEJvb2xlYW5Db2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGROYW1lLCB0cnVlRGlzcGxheVZhbHVlLCBmYWxzZURpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmIChcImJvb2xlYW5cIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgYm9vbGVhbi5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgdHJ1ZUxhYmVsOiB0cnVlRGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICAgIGZhbHNlTGFiZWw6IGZhbHNlRGlzcGxheVZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgdGltZXN0YW1wIHZhbHVlZCBmaWVsZCwgYmlubmVkIGJ5IHRoZSBzcGVjaWZpZWQgYnVja2V0IHNpemUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiaW5uaW5nIFRoZSBzaXplIG9mIGJpbnMgdG8gdXNlLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgdHlwZXMuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRUaW1lc3RhbXBDb2x1bW5TcGxpdDogZnVuY3Rpb24oZmllbGQsIGJpbm5pbmcpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJ0aW1lc3RhbXBcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgdGltZXN0YW1wLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fYmlubmluZywgYmlubmluZykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJpbm5pbmcgXCIgKyBiaW5uaW5nICsgXCIgZm91bmQuIFZhbGlkIHZhbHVlcyBhcmU6IFwiICsgdGhpcy5fYmlubmluZy5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgcGVyaW9kOiBiaW5uaW5nXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7ICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGFuIGFnZ3JlZ2F0ZSB0byBlYWNoIGNlbGwgb2YgdGhlIHBpdm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGFnZ3JlZ2F0ZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIGEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBhZ2dyZWdhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGF0c0Z1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byB1c2UgZm9yIGFnZ3JlZ2F0aW9uLCBzZWUgY2xhc3MgZG9jcyBmb3IgdmFsaWQgc3RhdHMgZnVuY3Rpb25zLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkQ2VsbFZhbHVlOiBmdW5jdGlvbihmaWVsZE5hbWUsIGxhYmVsLCBzdGF0c0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEaWQgbm90IGZpbmQgZmllbGQgXCIgKyBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBpZiAodXRpbHMuY29udGFpbnMoW1wic3RyaW5nXCIsIFwiaXB2NFwiXSwgZi50eXBlKSAmJlxuICAgICAgICAgICAgICAgICF1dGlscy5jb250YWlucyhbXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiLFxuICAgICAgICAgICAgICAgICAgICBcImZpcnN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGFzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGNcIl0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gc3RyaW5nIGFuZCBJUHY0IGZpZWxkcyBtdXN0IGJlIG9uZSBvZjpcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIGxpc3QsIGRpc3RpbmN0X3ZhbHVlcywgZmlyc3QsIGxhc3QsIGNvdW50LCBvciBkaXN0aW5jdF9jb3VudDsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSAmJiBcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcInN1bVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNvdW50XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXZlcmFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1pblwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1heFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0ZGV2XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgIF0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gbnVtYmVyIGZpZWxkIG11c3QgYmUgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBzdW0sIGNvdW50LCBhdmVyYWdlLCBtYXgsIG1pbiwgc3RkZXYsIGxpc3QsIG9yIGRpc3RpbmN0X3ZhbHVlczsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcInRpbWVzdGFtcFwiID09PSBmLnR5cGUgJiZcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWFybGllc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsYXRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJsaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgXSwgc3RhdHNGdW5jdGlvbilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBvbiB0aW1lc3RhbXAgZmllbGQgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBkdXJhdGlvbiwgZWFybGllc3QsIGxhdGVzdCwgbGlzdCwgb3IgZGlzdGluY3QgdmFsdWVzOyBmb3VuZCBcIiArXG4gICAgICAgICAgICAgICAgICAgIHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIm9iamVjdENvdW50XCIsIFwiY2hpbGRDb3VudFwiXSwgZi50eXBlKSAmJlxuICAgICAgICAgICAgICAgIFwiY291bnRcIiAhPT0gc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIGNoaWxkY291bnQgYW5kIG9iamVjdGNvdW50IGZpZWxkcyBtdXN0IGJlIGNvdW50OyBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiZm91bmQgXCIgKyBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFwiYm9vbGVhblwiID09PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGJvb2xlYW4gdmFsdWVkIGZpZWxkcyBhcyBjZWxsIHZhbHVlcy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2VsbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHNwYXJrbGluZTogZmFsc2UsIC8vIE5vdCBwcm9wZXJseSBpbXBsZW1lbnRlZCBpbiBjb3JlIHlldC5cbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBKU09OIHJlYWR5IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIEpTT04gcmVhZHkgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgdG9Kc29uT2JqZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwubmFtZSxcbiAgICAgICAgICAgICAgICBiYXNlQ2xhc3M6IHRoaXMuZGF0YU1vZGVsT2JqZWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjZWxsczogdGhpcy5jZWxscyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byBhIHBpdm90IHJlcG9ydFxuICAgICAgICAgKiBmb3IgdGhpcyBkYXRhIG1vZGVsLCBkZWZpbmVkIGJ5IHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBzZWFyY2hlcyA9IGRhdGFNb2RlbHMuaXRlbShcImludGVybmFsX2F1ZGl0X2xvZ3NcIikub2JqZWN0QnlOYW1lKFwic2VhcmNoZXNcIik7XG4gICAgICAgICAqICAgICAgICAgIHZhciBwaXZvdFNwZWMgPSBzZWFyY2hlcy5jcmVhdGVQaXZvdFNwZWNpZmljYXRpb24oKTtcbiAgICAgICAgICogICAgICAgICAgLy8gVXNlIG9mIHRoZSBmbHVlbnQgQVBJXG4gICAgICAgICAqICAgICAgICAgIHBpdm90U3BlYy5hZGRSb3dTcGxpdChcInVzZXJcIiwgXCJFeGVjdXRpbmcgdXNlclwiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZFJhbmdlQ29sdW1uU3BsaXQoXCJleGVjX3RpbWVcIiwge3N0YXJ0OiAwLCBlbmQ6IDEyLCBzdGVwOiA1LCBsaW1pdDogNH0pXG4gICAgICAgICAqICAgICAgICAgICAgICAuYWRkQ2VsbFZhbHVlKFwic2VhcmNoXCIsIFwiU2VhcmNoIFF1ZXJ5XCIsIFwidmFsdWVzXCIpXG4gICAgICAgICAqICAgICAgICAgICAgICAucGl2b3QoZnVuY3Rpb24ocGl2b3RFcnIsIHBpdm90KSB7XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQaXZvdCBzZWFyY2ggaXM6XCIsIHBpdm90LnNlYXJjaCk7XG4gICAgICAgICAqICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gZG9uZSBnZXR0aW5nIHRoZSBwaXZvdDogYChlcnIsIHBpdm90KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHBpdm90OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHN2YyA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5zZXJ2aWNlO1xuXG4gICAgICAgICAgICB2YXIgYXJncyA9IHtcbiAgICAgICAgICAgICAgICBwaXZvdF9qc29uOiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSnNvbk9iamVjdCgpKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZCh0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzLm5hbWVzcGFjZSA9IHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gc3ZjLmdldChQYXRocy5waXZvdCArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5uYW1lKSwgYXJncywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVyci5kYXRhLm1lc3NhZ2VzWzBdLnRleHQpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5lbnRyeSAmJiByZXNwb25zZS5kYXRhLmVudHJ5WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyByb290LlBpdm90KHN2YywgcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5jb250ZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJEaWRuJ3QgZ2V0IGEgUGl2b3QgcmVwb3J0IGJhY2sgZnJvbSBTcGx1bmtcIiksIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHdyYXAgdXAgdGhlIGBQaXZvdFNwZWNpZmljYXRpb24ucGl2b3QoKWAgYW5kXG4gICAgICAgICAqIGBQaXZvdC5ydW4oKWAgZnVuY3Rpb24gY2FsbHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFF1ZXJ5IFNwbHVuayBmb3IgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byBhIHBpdm90IHJlcG9ydFxuICAgICAgICAgKiBmb3IgdGhpcyBkYXRhIG1vZGVsLCBkZWZpbmVkIGJ5IHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmA7IHRoZW4sXG4gICAgICAgICAqIHN0YXJ0cyBhIHNlYXJjaCBqb2IgcnVubmluZyB0aGlzIHBpdm90LCBhY2NlbGVyYXRlZCBpZiBwb3NzaWJsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmRhdGFNb2RlbHMoKS5mZXRjaChmdW5jdGlvbihmZXRjaEVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICB2YXIgcGl2b3RTcGVjID0gc2VhcmNoZXMuY3JlYXRlUGl2b3RTcGVjaWZpY2F0aW9uKCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIFVzZSBvZiB0aGUgZmx1ZW50IEFQSVxuICAgICAgICAgKiAgICAgICAgICBwaXZvdFNwZWMuYWRkUm93U3BsaXQoXCJ1c2VyXCIsIFwiRXhlY3V0aW5nIHVzZXJcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtzdGFydDogMCwgZW5kOiAxMiwgc3RlcDogNSwgbGltaXQ6IDR9KVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLnJ1bihmdW5jdGlvbihlcnIsIGpvYiwgcGl2b3QpIHtcbiAgICAgICAgICogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYiBTSUQgaXM6XCIsIGpvYi5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGl2b3Qgc2VhcmNoIGlzOlwiLCBwaXZvdC5zZWFyY2gpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYiAob3B0aW9uYWwpLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgZ2V0dGluZyB0aGUgcGl2b3Q6IGAoZXJyLCBqb2IsIHBpdm90KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHJ1bjogZnVuY3Rpb24oYXJncywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwge307XG5cbiAgICAgICAgICAgIHRoaXMucGl2b3QoZnVuY3Rpb24oZXJyLCBwaXZvdCkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBpdm90LnJ1bihhcmdzLCBBc3luYy5hdWdtZW50KGNhbGxiYWNrLCBwaXZvdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIG9uZSBvZiB0aGUgc3RydWN0dXJlZCB2aWV3cyBpbiBhIGBEYXRhTW9kZWxgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZGF0YU1vZGVsYCAoX3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXyk6IFRoZSBgRGF0YU1vZGVsYCB0byB3aGljaCB0aGlzIGBEYXRhTW9kZWxPYmplY3RgIGJlbG9uZ3MuXG4gICAgICogICAgLSBgbmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhpcyBgRGF0YU1vZGVsT2JqZWN0YC5cbiAgICAgKiAgICAtIGBkaXNwbGF5TmFtZWAgKF9zdHJpbmdfKTogVGhlIGh1bWFuIHJlYWRhYmxlIG5hbWUgb2YgdGhpcyBgRGF0YU1vZGVsT2JqZWN0YC5cbiAgICAgKiAgICAtIGBwYXJlbnROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgcGFyZW50IGBEYXRhTW9kZWxPYmplY3RgIHRvIHRoaXMgb25lLlxuICAgICAqICAgIC0gYGxpbmVhZ2VgIChfYXJyYXlfKTogQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgbGluZWFnZSBvZiB0aGUgZGF0YSBtb2RlbFxuICAgICAqICAgICAgICAgIG9uIHdoaWNoIHRoaXMgZmllbGQgaXMgZGVmaW5lZC5cbiAgICAgKiAgICAtIGBmaWVsZHNgIChfb2JqZWN0Xyk6IEEgZGljdGlvbmFyeSBvZiBgRGF0YU1vZGVsRmllbGRgIG9iamVjdHMsIGFjY2Vzc2libGUgYnkgbmFtZS5cbiAgICAgKiAgICAtIGBjb25zdHJhaW50c2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBgRGF0YU1vZGVsQ29uc3RyYWludGAgb2JqZWN0cy5cbiAgICAgKiAgICAtIGBjYWxjdWxhdGlvbnNgIChfb2JqZWN0Xyk6IEEgZGljdGlvbmFyeSBvZiBgRGF0YU1vZGVsQ2FsY3VsYXRpb25gIG9iamVjdHMsIGFjY2Vzc2libGUgYnkgSUQuXG4gICAgICpcbiAgICAgKiBCYXNlU2VhcmNoIGhhcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGJhc2VTZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggcXVlcnkgd3JhcHBlZCBieSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAqXG4gICAgICogQmFzZVRyYW5zYWN0aW9uIGhhcyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZ3JvdXBCeUZpZWxkc2AgKF9zdHJpbmdfKTogVGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBncm91cCBldmVudHMgaW50byB0cmFuc2FjdGlvbnMuXG4gICAgICogICAgLSBgb2JqZWN0c1RvR3JvdXBgIChfYXJyYXlfKTogTmFtZXMgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1bmlvbmVkXG4gICAgICogICAgICAgIGFuZCBzcGxpdCBpbnRvIHRyYW5zYWN0aW9ucy5cbiAgICAgKiAgICAtIGBtYXhTcGFuYCAoX3N0cmluZ18pOiBUaGUgbWF4aW11bSB0aW1lIHNwYW4gb2YgYSB0cmFuc2FjdGlvbi5cbiAgICAgKiAgICAtIGBtYXhQYXVzZWAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gcGF1c2UgdGltZSBvZiBhIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxPYmplY3QgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgIC0gYG9iamVjdE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIGZvciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiAgICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYHBhcmVudE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiAgICAgLSBgbGluZWFnZWAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QsXG4gICAgICAgICAqICAgICAgICAgIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG8gYW4gYXJyYXkgb2ZcbiAgICAgICAgICogICAgICAgICAgc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICogICAgIC0gYGZpZWxkc2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcy5cbiAgICAgICAgICogICAgIC0gYGNvbnN0cmFpbnRzYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIGRhdGEgbW9kZWwgY29uc3RyYWludHMuXG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvbnNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqICAgICAtIGBiYXNlU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHdyYXBwZWQgYnkgdGhpcyBkYXRhIG1vZGVsIG9iamVjdDsgZXhjbHVzaXZlIHRvIEJhc2VTZWFyY2ggKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgZ3JvdXBCeUZpZWxkc2AgKF9hcnJheV8pOiBUaGUgZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdyb3VwIGV2ZW50cyBpbnRvIHRyYW5zYWN0aW9uczsgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvbiAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBvYmplY3RzVG9Hcm91cGAgKF9hcnJheV8pOiBOYW1lcyBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIHVuaW9uZWRcbiAgICAgICAgICogICAgICAgICBhbmQgc3BsaXQgaW50byB0cmFuc2FjdGlvbnM7IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgbWF4U3BhbmAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gdGltZSBzcGFuIG9mIGEgdHJhbnNhY3Rpb247IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgbWF4UGF1c2VgIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHBhdXNlIHRpbWUgb2YgYSB0cmFuc2FjdGlvbjsgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvbiAob3B0aW9uYWwpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWx9IHBhcmVudERhdGFNb2RlbCBUaGUgYERhdGFNb2RlbGAgdGhhdCBvd25zIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHByb3BzLCBwYXJlbnREYXRhTW9kZWwpIHtcbiAgICAgICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgICAgICBwcm9wcy5vd25lciA9IHByb3BzLm93bmVyIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsICAgICAgICAgICAgICA9IHBhcmVudERhdGFNb2RlbDtcbiAgICAgICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgICAgICAgICA9IHByb3BzLm9iamVjdE5hbWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlOYW1lICAgICAgICAgICAgPSBwcm9wcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50TmFtZSAgICAgICAgICAgICA9IHByb3BzLnBhcmVudE5hbWU7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgICAgICAgICAgICAgICAgPSBwcm9wcy5saW5lYWdlLnNwbGl0KFwiLlwiKTtcblxuICAgICAgICAgICAgLy8gUHJvcGVydGllcyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJncm91cEJ5RmllbGRzXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEJ5RmllbGRzID0gcHJvcHMuZ3JvdXBCeUZpZWxkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcIm9iamVjdHNUb0dyb3VwXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzVG9Hcm91cCA9IHByb3BzLm9iamVjdHNUb0dyb3VwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwidHJhbnNhY3Rpb25NYXhUaW1lU3BhblwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4U3BhbiA9IHByb3BzLnRyYW5zYWN0aW9uTWF4VGltZVNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJ0cmFuc2FjdGlvbk1heFBhdXNlXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhQYXVzZSA9IHByb3BzLnRyYW5zYWN0aW9uTWF4UGF1c2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByb3BlcnR5IGV4Y2x1c2l2ZSB0byBCYXNlU2VhcmNoXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJiYXNlU2VhcmNoXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlU2VhcmNoID0gcHJvcHMuYmFzZVNlYXJjaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUGFyc2UgZmllbGRzXG4gICAgICAgICAgICB0aGlzLmZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkc1twcm9wcy5maWVsZHNbaV0uZmllbGROYW1lXSA9IG5ldyByb290LkRhdGFNb2RlbEZpZWxkKHByb3BzLmZpZWxkc1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGNvbnN0cmFpbnRzXG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BzLmNvbnN0cmFpbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cy5wdXNoKG5ldyByb290LkRhdGFNb2RlbENvbnN0cmFpbnQocHJvcHMuY29uc3RyYWludHNbal0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUGFyc2UgY2FsY3VsYXRpb25zXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwcm9wcy5jYWxjdWxhdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0aW9uc1twcm9wcy5jYWxjdWxhdGlvbnNba10uY2FsY3VsYXRpb25JRF0gPSBuZXcgcm9vdC5EYXRhTW9kZWxDYWxjdWxhdGlvbihwcm9wcy5jYWxjdWxhdGlvbnNba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGEgQmFzZVNlYXJjaD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gV2hldGhlciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGlzIHRoZSByb290IHR5cGUsIEJhc2VTZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGlzQmFzZVNlYXJjaDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHRoaXMuYmFzZVNlYXJjaCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgaXMgYSBCYXNlVHJhbnNhY3Rpb24/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBpcyB0aGUgcm9vdCB0eXBlLCBCYXNlVHJhbnNhY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGlzQmFzZVRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQodGhpcy5tYXhTcGFuKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGRhdGEgbW9kZWwgZmllbGQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIGZpZWxkIG9uIHRoaXNcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkfG51bGx9IFRoZSBkYXRhIG1vZGVsIGZpZWxkXG4gICAgICAgICAqIGZyb20gdGhpcyBkYXRhIG1vZGVsIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgbnVsbCBpZiBpdCB0aGUgXG4gICAgICAgICAqIGZpZWxkIGJ5IHRoYXQgbmFtZSBkb2Vzbid0IGV4aXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZEJ5TmFtZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlZEZpZWxkcygpW25hbWVdIHx8IHRoaXMuZmllbGRzW25hbWVdIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMsIGFuZCB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgZmllbGRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVuay5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkYCBvYmplY3RzXG4gICAgICAgICAqIHdoaWNoIGluY2x1ZGVzIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMsIGFuZCB0aGUgZmllbGRzIGZyb21cbiAgICAgICAgICogdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgYWxsRmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIG1lcmdlIGZpZWxkcyBhbmQgY2FsY3VsYXRlZEZpZWxkcygpXG4gICAgICAgICAgICB2YXIgY29tYmluZWRGaWVsZHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgZiBpbiB0aGlzLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEZpZWxkc1tmXSA9IHRoaXMuZmllbGRzW2ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGNmIGluIGNhbGN1bGF0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsY3VsYXRlZEZpZWxkcy5oYXNPd25Qcm9wZXJ0eShjZikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRGaWVsZHNbY2ZdID0gY2FsY3VsYXRlZEZpZWxkc1tjZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRGaWVsZHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgYXJyYXkgb2YgdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMsIGFuZCB0aGUgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMsIGFuZCB0aGUgbmFtZXMgb2YgZmllbGRzIG9uIFxuICAgICAgICAgKiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBhbGxGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmFsbEZpZWxkcygpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIG1vZGVsIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBgc3BsdW5rLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRgIG9iamVjdHNcbiAgICAgICAgICogb2YgdGhlIGZpZWxkcyBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0ZWRGaWVsZHM6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgZmllbGRzID0ge307XG4gICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGNhbGN1bGF0aW9ucywgZ2V0IHRoZWlyIGZpZWxkc1xuICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLmNhbGN1bGF0aW9uSURzKCk7XG4gICAgICAgICAgICB2YXIgY2FsY3VsYXRpb25zID0gdGhpcy5jYWxjdWxhdGlvbnM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRpb24gPSBjYWxjdWxhdGlvbnNba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZE5hbWVzKCkubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzW2NhbGN1bGF0aW9uLm91dHB1dEZpZWxkTmFtZXMoKVtmXV0gPSBjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZHNbY2FsY3VsYXRpb24ub3V0cHV0RmllbGROYW1lcygpW2ZdXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIFxuICAgICAgICAgKiBkYXRhIG1vZGVsIG9iamVjdCdzIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgY2FsY3VsYXRlZEZpZWxkTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2FsY3VsYXRlZEZpZWxkcygpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgY29udGFpbnMgdGhlIGZpZWxkIHdpdGggdGhlXG4gICAgICAgICAqIG5hbWUgcGFzc2VkIGluIHRoZSBgZmllbGROYW1lYCBwYXJhbWV0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGxvb2sgZm9yLlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjb250YWlucyB0aGUgZmllbGQgYnkgbmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgaGFzRmllbGQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuYWxsRmllbGROYW1lcygpLCBmaWVsZE5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBJRHMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzXG4gICAgICAgICAqIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgSURzIG9mIHRoaXMgZGF0YSBtb2RlbFxuICAgICAgICAgKiBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0aW9uSURzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhbGN1bGF0aW9ucyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvY2FsIGFjY2VsZXJhdGlvbiBpcyB0c2lkeCBhY2NlbGVyYXRpb24gb2YgYSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IGlzIGhhbmRsZWRcbiAgICAgICAgICogbWFudWFsbHkgYnkgYSB1c2VyLiBZb3UgY3JlYXRlIGEgam9iIHdoaWNoIGdlbmVyYXRlcyBhbiBpbmRleCwgYW5kIHRoZW4gdXNlIHRoYXRcbiAgICAgICAgICogaW5kZXggaW4geW91ciBwaXZvdHMgb24gdGhlIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgbmFtZXNwYWNlIGNyZWF0ZWQgYnkgdGhlIGpvYiBpcyAnc2lkPXtzaWR9JyB3aGVyZSB7c2lkfSBpcyB0aGUgam9iJ3Mgc2lkLiBZb3VcbiAgICAgICAgICogd291bGQgdXNlIGl0IGluIGFub3RoZXIgam9iIGJ5IHN0YXJ0aW5nIHlvdXIgc2VhcmNoIHF1ZXJ5IHdpdGggYHwgdHN0YXRzIC4uLiBmcm9tIHNpZD17c2lkfSB8IC4uLmBcbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHRzaWR4IGluZGV4IGNyZWF0ZWQgYnkgdGhpcyBqb2IgaXMgZGVsZXRlZCB3aGVuIHRoZSBqb2IgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgYnkgU3BsdW5rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIG1hbmFnZSB0aGlzIGpvYiwgaW5jbHVkaW5nIGNhbmNlbGxpbmcgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBvYmplY3QgPSBkYXRhTW9kZWxzLml0ZW0oXCJzb21lX2RhdGFfbW9kZWxcIikub2JqZWN0QnlOYW1lKFwic29tZV9vYmplY3RcIik7XG4gICAgICAgICAqICAgICAgICAgIG9iamVjdC5jcmVhdGVMb2NhbEFjY2VsZXJhdGlvbkpvYihcIi0xZFwiLCBmdW5jdGlvbihlcnIsIGFjY2VsZXJhdGlvbkpvYikge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUaGUgam9iIGhhcyBuYW1lOlwiLCBhY2NlbGVyYXRpb25Kb2IubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZWFybGllc3RUaW1lIEEgdGltZSBtb2RpZmllciAoZS5nLiwgXCItMndcIikgc2V0dGluZyB0aGUgZWFybGllc3QgdGltZSB0byBpbmRleC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBhY2NlbGVyYXRpb25Kb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2I6IGZ1bmN0aW9uKGVhcmxpZXN0VGltZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIGVhcmxpZXN0VGltZSBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBzZXQgY2FsbGJhY2sgdG8gaXRzIHZhbHVlXG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24oZWFybGllc3RUaW1lKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZWFybGllc3RUaW1lO1xuICAgICAgICAgICAgICAgIGVhcmxpZXN0VGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gXCJ8IGRhdGFtb2RlbCBcXFwiXCIgKyB0aGlzLmRhdGFNb2RlbC5uYW1lICsgXCJcXFwiIFwiICsgdGhpcy5uYW1lICsgXCIgc2VhcmNoIHwgdHNjb2xsZWN0XCI7XG4gICAgICAgICAgICB2YXIgYXJncyA9IGVhcmxpZXN0VGltZSA/IHtlYXJsaWVzdF90aW1lOiBlYXJsaWVzdFRpbWV9IDoge307XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLnNlcnZpY2Uuc2VhcmNoKHF1ZXJ5LCBhcmdzLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXJ0IGEgc2VhcmNoIGpvYiB0aGF0IGFwcGxpZXMgcXVlcnlTdWZmaXggdG8gYWxsIHRoZSBldmVudHMgaW4gdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmRhdGFNb2RlbHMoKS5mZXRjaChmdW5jdGlvbihlcnIsIGRhdGFNb2RlbHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIG9iamVjdCA9IGRhdGFNb2RlbHMuaXRlbShcImludGVybmFsX2F1ZGl0X2xvZ3NcIikub2JqZWN0QnlOYW1lKFwic2VhcmNoZXNcIik7XG4gICAgICAgICAqICAgICAgICAgIG9iamVjdC5zdGFydFNlYXJjaCh7fSwgXCJ8IGhlYWQgNVwiLCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUaGUgam9iIGhhcyBuYW1lOlwiLCBqb2IubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnlTdWZmaXggQSBzZWFyY2ggcXVlcnksIHN0YXJ0aW5nIHdpdGggYSAnfCcgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIHRvIGZldGNoIHRoZSBjb250ZW50cyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IChlLmcuLCBcInwgaGVhZCAzXCIpLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBzdGFydFNlYXJjaDogZnVuY3Rpb24ocGFyYW1zLCBxdWVyeVN1ZmZpeCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBxdWVyeSA9IFwifCBkYXRhbW9kZWwgXCIgKyB0aGlzLmRhdGFNb2RlbC5uYW1lICsgXCIgXCIgKyB0aGlzLm5hbWUgKyBcIiBzZWFyY2hcIjtcbiAgICAgICAgICAgIC8vIFByZXBlbmQgYSBzcGFjZSB0byB0aGUgcXVlcnlTdWZmaXgsIG9yIHNldCBpdCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIHF1ZXJ5U3VmZml4ID0gKHF1ZXJ5U3VmZml4KSA/IChcIiBcIiArIHF1ZXJ5U3VmZml4KSA6IChcIlwiKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLnNlcnZpY2Uuc2VhcmNoKHF1ZXJ5ICsgcXVlcnlTdWZmaXgsIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHRoaXMgb25lIGluaGVyaXRzIGZyb20gaWYgaXQgaXMgYSB1c2VyIGRlZmluZWQsXG4gICAgICAgICAqIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3R8bnVsbH0gVGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIHBhcmVudFxuICAgICAgICAgKiAgICAgb3IgbnVsbCBpZiB0aGlzIGlzIG5vdCBhIHVzZXIgZGVmaW5lZCBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgcGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFNb2RlbC5vYmplY3RCeU5hbWUodGhpcy5wYXJlbnROYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgbmV3IFBpdm90IFNwZWNpZmljYXRpb24sIGFjY2VwdHMgbm8gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IEEgbmV3IHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBQYXNzIGluIHRoaXMgRGF0YU1vZGVsT2JqZWN0IHRvIGNyZWF0ZSBhIFBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlBpdm90U3BlY2lmaWNhdGlvbih0aGlzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBkYXRhIG1vZGVsIG9uIHRoZSBzZXJ2ZXIuIERhdGEgbW9kZWxzXG4gICAgICogY29udGFpbiBgRGF0YU1vZGVsT2JqZWN0YCBpbnN0YW5jZXMsIHdoaWNoIHNwZWNpZnkgc3RydWN0dXJlZFxuICAgICAqIHZpZXdzIG9uIFNwbHVuayBkYXRhLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbC97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsID0gU2VydmljZS5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmRhdGFNb2RlbHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBuZXcgZGF0YSBtb2RlbC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSAoT3B0aW9uYWwpIG5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFByb3BlcnRpZXMgb2YgdGhpcyBkYXRhIG1vZGVsOlxuICAgICAgICAgKiAgICAtIGBhY2NlbGVyYXRpb25gIChfc3RyaW5nXyk6IEEgSlNPTiBvYmplY3Qgd2l0aCBhbiBgZW5hYmxlZGAga2V5LCByZXByZXNlbnRpbmcgaWYgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgICAgICAgKiAgICAtIGBjb25jaXNlYCAoX3N0cmluZ18pOiBJbmRpY2F0ZXMgd2hldGhlciB0byBsaXN0IGEgY29uY2lzZSBKU09OIGRlc2NyaXB0aW9uIG9mIHRoZSBkYXRhIG1vZGVsLCBzaG91bGQgYWx3YXlzIGJlIFwiMFwiLlxuICAgICAgICAgKiAgICAtIGBkZXNjcmlwdGlvbmAgKF9zdHJpbmdfKTogVGhlIEpTT04gZGVzY3JpYmluZyB0aGUgZGF0YSBtb2RlbC5cbiAgICAgICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIGRpc3BsYXllZCBmb3IgdGhlIGRhdGEgbW9kZWwgaW4gU3BsdW5rIFdlYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlLCBwcm9wcykge1xuICAgICAgICAgICAgLy8gSWYgbm90IGdpdmVuIGEgNHRoIGFyZywgYXNzdW1lIHRoZSBuYW1lc3BhY2Ugd2FzIG9taXR0ZWRcbiAgICAgICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgICAgICBwcm9wcyA9IG5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvbiA9IEpTT04ucGFyc2UocHJvcHMuY29udGVudC5hY2NlbGVyYXRpb24pIHx8IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMuYWNjZWxlcmF0aW9uLmhhc093blByb3BlcnR5KFwiZW5hYmxlZFwiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIGVuYWJsZWQgcHJvcGVydHkgdG8gYSBib29sZWFuXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZCA9ICEhdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY29uY2lzZT0wIChmYWxzZSkgZm9yY2VzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuIGFsbCBkZXRhaWxzIG9mIHRoZSBuZXdseSBjcmVhdGVkIGRhdGEgbW9kZWwuXG4gICAgICAgICAgICAvLyB3ZSBkbyBub3Qgd2FudCBhIHN1bW1hcnkgb2YgdGhpcyBkYXRhIG1vZGVsXG4gICAgICAgICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KFwiY29uY2lzZVwiKSB8fCB1dGlscy5pc1VuZGVmaW5lZChwcm9wcy5jb25jaXNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uY2lzZSA9IFwiMFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZGF0YU1vZGVsRGVmaW5pdGlvbiA9IEpTT04ucGFyc2UocHJvcHMuY29udGVudC5kZXNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIHRoaXMub2JqZWN0TmFtZXMgPSBkYXRhTW9kZWxEZWZpbml0aW9uLm9iamVjdE5hbWVMaXN0O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IGRhdGFNb2RlbERlZmluaXRpb24uZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YU1vZGVsRGVmaW5pdGlvbi5kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIG9iamVjdHMgZm9yIHRoaXMgZGF0YSBtb2RlbCAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb2JqcyA9IGRhdGFNb2RlbERlZmluaXRpb24ub2JqZWN0cztcbiAgICAgICAgICAgIHRoaXMub2JqZWN0cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzLnB1c2gobmV3IHJvb3QuRGF0YU1vZGVsT2JqZWN0KG9ianNbaV0sIHRoaXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhY2NlbGVyYXRpb24gaXMgZW5hYmxlZCBvciBub3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaXNBY2NlbGVyYXRlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmFjY2VsZXJhdGlvbi5lbmFibGVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgZGF0YSBtb2RlbCBvYmplY3QgZnJvbSB0aGlzIGRhdGEgbW9kZWxcbiAgICAgICAgICogd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgaWYgaXQgZXhpc3RzLCBudWxsIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fG51bGx9IGEgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIG9iamVjdEJ5TmFtZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmplY3RzW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0c1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGJvb2xlYW4gb2Ygd2hldGhlciB0aGlzIGV4aXN0cyBpbiB0aGlzIGRhdGEgbW9kZWwgb3Igbm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGhhcyBvYmplY3Qgd2l0aCBzcGVjaWZpZWQgbmFtZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBoYXNPYmplY3Q6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLm9iamVjdE5hbWVzLCBuYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgZGF0YSBtb2RlbCBvbiB0aGUgc2VydmVyLCB1c2VkIHRvIHVwZGF0ZSBhY2NlbGVyYXRpb24gc2V0dGluZ3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byB1cGRhdGUgdGhlIG9iamVjdCB3aXRoOlxuICAgICAgICAgKiAgICAgLSBgYWNjZWxlcmF0aW9uYCAoX29iamVjdF8pOiBUaGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzIGZvciB0aGUgZGF0YSBtb2RlbC5cbiAgICAgICAgICogICAgICAgICBWYWxpZCBrZXlzIGFyZTogYGVuYWJsZWRgLCBgZWFybGllc3RUaW1lYCwgYGNyb25TY2hlZHVsZWAuXG4gICAgICAgICAqICAgICAgICAgQW55IGtleXMgbm90IHNldCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBhY2NlbGVyYXRpb24gc2V0dGluZ3MgYWxyZWFkeVxuICAgICAgICAgKiAgICAgICAgIHNldCBvbiB0aGlzIGRhdGEgbW9kZWwuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkYXRhIG1vZGVsIGlzIHVwZGF0ZWQ6IGAoZXJyLCBkYXRhTW9kZWwpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9wcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZChjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb3BzO1xuICAgICAgICAgICAgICAgIHByb3BzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJNdXN0IHNwZWNpZnkgYSBwcm9wcyBhcmd1bWVudCB0byB1cGRhdGUgYSBkYXRhIG1vZGVsLlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGlmIHByb3BzIGlzbid0IHNldCwgdG8gYXZvaWQgY2FsbGluZyB0aGUgY2FsbGJhY2sgdHdpY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiQ2Fubm90IHNldCAnbmFtZScgZmllbGQgaW4gJ3VwZGF0ZSdcIiksIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiB0aGUgbmFtZSBpcyBzZXQsIHRvIGF2b2lkIGNhbGxpbmcgdGhlIGNhbGxiYWNrIHR3aWNlLlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdXBkYXRlZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIGFjY2VsZXJhdGlvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5lbmFibGVkIHx8IHRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0X3RpbWU6IHByb3BzLmFjY2NlbGVyYXRpb24gJiYgcHJvcHMuYWNjZWxlcmF0aW9uLmVhcmxpZXN0VGltZSB8fCB0aGlzLmFjY2VsZXJhdGlvbi5lYXJsaWVzdFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGNyb25fc2NoZWR1bGU6IHByb3BzLmFjY2NlbGVyYXRpb24gJiYgcHJvcHMuYWNjZWxlcmF0aW9uLmNyb25TY2hlZHVsZSB8fCB0aGlzLmFjY2VsZXJhdGlvbi5jcm9uU2NoZWR1bGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdChcIlwiLCB1cGRhdGVkUHJvcHMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU1vZGVsTmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocmVzcG9uc2UuZGF0YS5lbnRyeVswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyByb290LkRhdGFNb2RlbCh0aGF0LnNlcnZpY2UsIHJlc3BvbnNlLmRhdGEuZW50cnlbMF0ubmFtZSwgZGF0YU1vZGVsTmFtZXNwYWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBkYXRhIG1vZGVscy4gWW91IGNhbiBjcmVhdGUgYW5kXG4gICAgICogbGlzdCBkYXRhIG1vZGVscyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvclxuICAgICAqIGdldCBhIHNwZWNpZmljIGRhdGEgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YW1vZGVsL21vZGVsXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVscyA9IFNlcnZpY2UuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmRhdGFNb2RlbHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzYC5cbiAgICAgICAgICogXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgKE9wdGlvbmFsKSBuYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UgfHwge307XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNyZWF0ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgYERhdGFNb2RlbGAgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHBhcmFtZXRlcnMuXG4gICAgICAgICAqIEl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBjcmVhdGUgZGF0YSBtb2RlbHMgdGhyb3VnaCB0aGUgU3BsdW5rXG4gICAgICAgICAqIEVudGVycHJpc2Ugd2l0aCBhIGJyb3dzZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIHRvIGNyZWF0ZS4gSWYgaXQgY29udGFpbnMgc3BhY2VzIHRoZXkgd2lsbCBiZSByZXBsYWNlZFxuICAgICAgICAgKiAgICAgd2l0aCB1bmRlcnNjb3Jlcy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBgRGF0YU1vZGVsYCBvYmplY3Q6IGAoZXJyLCBjcmVhdGVkRGF0YU1vZGVsKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGdldCAobmFtZSwgY2FsbGJhY2spIGluc3RlYWQgb2YgKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spXG4gICAgICAgICAgICAvLyBkbyB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlIHN3YXBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvIC9nLCBcIl9cIik7XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwge25hbWU6IG5hbWUsIGRlc2NyaXB0aW9uOiBKU09OLnN0cmluZ2lmeShwYXJhbXMpfSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTW9kZWwgPSBuZXcgcm9vdC5EYXRhTW9kZWwodGhhdC5zZXJ2aWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdLm5hbWUsIHRoYXQubmFtZXNwYWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YU1vZGVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdXNlZCB0byBjcmVhdGUgYSBcbiAgICAgICAgICogYERhdGFNb2RlbGAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBBIG5ldyBgRGF0YU1vZGVsYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5EYXRhTW9kZWwodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UsIHByb3BzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyohKi9cbiAgICAvLyBJdGVyYXRlcyBvdmVyIGFuIGVuZHBvaW50J3MgcmVzdWx0cy5cbiAgICByb290LlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBpbml0OiBmdW5jdGlvbihlbmRwb2ludCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX2VuZHBvaW50ID0gZW5kcG9pbnQ7XG4gICAgICAgICAgICB0aGlzLl9wYWdlc2l6ZSA9IHBhcmFtcy5wYWdlc2l6ZSB8fCAwO1xuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIEZldGNoZXMgdGhlIG5leHQgcGFnZSBmcm9tIHRoZSBlbmRwb2ludC5cbiAgICAgICAgbmV4dDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdGhpcy5fcGFnZXNpemUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnQocGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1SZXN1bHRzID0gKHJlc3VsdHMucm93cyA/IHJlc3VsdHMucm93cy5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb2Zmc2V0ICs9IG51bVJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLCBudW1SZXN1bHRzID4gMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7Il19 \ No newline at end of file diff --git a/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js b/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js deleted file mode 100644 index 2b64393bb..000000000 --- a/node_modules/.cache/nyc/service-ee0af46cf9fea320d5dd2acc484d81786a58e3cde0369210c14b0a65c62d3b58.js +++ /dev/null @@ -1,2875 +0,0 @@ -function cov_1ks4ntaci2(){var path="/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js";var hash="1e13507780108878ff5a225bb0ab3d0d383df74e";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/Users/vmalaviya/DVPL-7124/splunk-sdk-javascript/lib/service.js",statementMap:{"0":{start:{line:16,column:0},end:{line:5803,column:5}},"1":{start:{line:19,column:22},end:{line:19,column:42}},"2":{start:{line:20,column:22},end:{line:20,column:39}},"3":{start:{line:21,column:22},end:{line:21,column:40}},"4":{start:{line:22,column:22},end:{line:22,column:46}},"5":{start:{line:23,column:22},end:{line:23,column:53}},"6":{start:{line:24,column:22},end:{line:24,column:40}},"7":{start:{line:26,column:15},end:{line:26,column:30}},"8":{start:{line:27,column:18},end:{line:27,column:22}},"9":{start:{line:37,column:22},end:{line:41,column:6}},"10":{start:{line:39,column:12},end:{line:39,column:47}},"11":{start:{line:51,column:4},end:{line:664,column:7}},"12":{start:{line:73,column:12},end:{line:73,column:47}},"13":{start:{line:77,column:12},end:{line:77,column:72}},"14":{start:{line:78,column:12},end:{line:78,column:66}},"15":{start:{line:79,column:12},end:{line:79,column:76}},"16":{start:{line:80,column:12},end:{line:80,column:69}},"17":{start:{line:81,column:12},end:{line:81,column:75}},"18":{start:{line:82,column:12},end:{line:82,column:66}},"19":{start:{line:83,column:12},end:{line:83,column:67}},"20":{start:{line:84,column:12},end:{line:84,column:73}},"21":{start:{line:85,column:12},end:{line:85,column:67}},"22":{start:{line:86,column:12},end:{line:86,column:78}},"23":{start:{line:87,column:12},end:{line:87,column:72}},"24":{start:{line:106,column:12},end:{line:116,column:15}},"25":{start:{line:136,column:12},end:{line:136,column:47}},"26":{start:{line:164,column:12},end:{line:164,column:60}},"27":{start:{line:192,column:12},end:{line:192,column:53}},"28":{start:{line:218,column:12},end:{line:218,column:59}},"29":{start:{line:244,column:12},end:{line:244,column:62}},"30":{start:{line:271,column:12},end:{line:271,column:71}},"31":{start:{line:300,column:12},end:{line:300,column:50}},"32":{start:{line:312,column:12},end:{line:312,column:56}},"33":{start:{line:337,column:12},end:{line:337,column:40}},"34":{start:{line:366,column:12},end:{line:366,column:51}},"35":{start:{line:397,column:12},end:{line:400,column:13}},"36":{start:{line:398,column:16},end:{line:398,column:37}},"37":{start:{line:399,column:16},end:{line:399,column:33}},"38":{start:{line:402,column:23},end:{line:402,column:53}},"39":{start:{line:403,column:12},end:{line:403,column:56}},"40":{start:{line:420,column:12},end:{line:423,column:13}},"41":{start:{line:421,column:16},end:{line:421,column:37}},"42":{start:{line:422,column:16},end:{line:422,column:33}},"43":{start:{line:424,column:22},end:{line:424,column:56}},"44":{start:{line:425,column:12},end:{line:425,column:43}},"45":{start:{line:453,column:12},end:{line:456,column:13}},"46":{start:{line:454,column:16},end:{line:454,column:37}},"47":{start:{line:455,column:16},end:{line:455,column:33}},"48":{start:{line:458,column:23},end:{line:458,column:53}},"49":{start:{line:459,column:12},end:{line:459,column:63}},"50":{start:{line:478,column:12},end:{line:478,column:49}},"51":{start:{line:480,column:23},end:{line:480,column:27}},"52":{start:{line:481,column:22},end:{line:497,column:14}},"53":{start:{line:482,column:16},end:{line:496,column:17}},"54":{start:{line:483,column:20},end:{line:483,column:34}},"55":{start:{line:486,column:35},end:{line:486,column:74}},"56":{start:{line:487,column:31},end:{line:487,column:60}},"57":{start:{line:488,column:20},end:{line:495,column:23}},"58":{start:{line:489,column:24},end:{line:494,column:25}},"59":{start:{line:490,column:28},end:{line:490,column:35}},"60":{start:{line:493,column:28},end:{line:493,column:60}},"61":{start:{line:499,column:12},end:{line:499,column:23}},"62":{start:{line:517,column:12},end:{line:517,column:49}},"63":{start:{line:519,column:29},end:{line:519,column:54}},"64":{start:{line:520,column:12},end:{line:520,column:46}},"65":{start:{line:544,column:12},end:{line:547,column:13}},"66":{start:{line:545,column:16},end:{line:545,column:34}},"67":{start:{line:546,column:16},end:{line:546,column:28}},"68":{start:{line:549,column:12},end:{line:549,column:49}},"69":{start:{line:550,column:12},end:{line:550,column:34}},"70":{start:{line:552,column:12},end:{line:552,column:29}},"71":{start:{line:554,column:12},end:{line:561,column:15}},"72":{start:{line:555,column:16},end:{line:560,column:17}},"73":{start:{line:556,column:20},end:{line:556,column:34}},"74":{start:{line:559,column:20},end:{line:559,column:50}},"75":{start:{line:581,column:12},end:{line:584,column:13}},"76":{start:{line:582,column:16},end:{line:582,column:33}},"77":{start:{line:583,column:16},end:{line:583,column:27}},"78":{start:{line:586,column:12},end:{line:586,column:49}},"79":{start:{line:587,column:25},end:{line:590,column:13}},"80":{start:{line:592,column:12},end:{line:600,column:15}},"81":{start:{line:593,column:16},end:{line:599,column:17}},"82":{start:{line:594,column:20},end:{line:594,column:34}},"83":{start:{line:597,column:34},end:{line:597,column:63}},"84":{start:{line:598,column:20},end:{line:598,column:50}},"85":{start:{line:625,column:12},end:{line:628,column:13}},"86":{start:{line:626,column:16},end:{line:626,column:34}},"87":{start:{line:627,column:16},end:{line:627,column:28}},"88":{start:{line:630,column:12},end:{line:630,column:49}},"89":{start:{line:631,column:12},end:{line:631,column:34}},"90":{start:{line:634,column:12},end:{line:636,column:13}},"91":{start:{line:635,column:16},end:{line:635,column:46}},"92":{start:{line:638,column:23},end:{line:638,column:45}},"93":{start:{line:639,column:25},end:{line:639,column:31}},"94":{start:{line:640,column:26},end:{line:640,column:56}},"95":{start:{line:641,column:23},end:{line:641,column:28}},"96":{start:{line:642,column:22},end:{line:642,column:28}},"97":{start:{line:643,column:23},end:{line:643,column:25}},"98":{start:{line:645,column:22},end:{line:660,column:13}},"99":{start:{line:653,column:20},end:{line:658,column:21}},"100":{start:{line:654,column:24},end:{line:654,column:38}},"101":{start:{line:657,column:24},end:{line:657,column:54}},"102":{start:{line:662,column:12},end:{line:662,column:23}},"103":{start:{line:674,column:4},end:{line:815,column:7}},"104":{start:{line:686,column:12},end:{line:688,column:13}},"105":{start:{line:687,column:16},end:{line:687,column:61}},"106":{start:{line:690,column:12},end:{line:692,column:13}},"107":{start:{line:691,column:16},end:{line:691,column:60}},"108":{start:{line:694,column:12},end:{line:694,column:35}},"109":{start:{line:695,column:12},end:{line:695,column:47}},"110":{start:{line:699,column:12},end:{line:699,column:53}},"111":{start:{line:700,column:12},end:{line:700,column:56}},"112":{start:{line:701,column:12},end:{line:701,column:54}},"113":{start:{line:702,column:12},end:{line:702,column:53}},"114":{start:{line:722,column:22},end:{line:722,column:40}},"115":{start:{line:726,column:12},end:{line:728,column:13}},"116":{start:{line:727,column:16},end:{line:727,column:42}},"117":{start:{line:730,column:12},end:{line:734,column:14}},"118":{start:{line:738,column:22},end:{line:738,column:40}},"119":{start:{line:742,column:12},end:{line:744,column:13}},"120":{start:{line:743,column:16},end:{line:743,column:42}},"121":{start:{line:746,column:12},end:{line:749,column:14}},"122":{start:{line:769,column:22},end:{line:769,column:40}},"123":{start:{line:773,column:12},end:{line:775,column:13}},"124":{start:{line:774,column:16},end:{line:774,column:42}},"125":{start:{line:777,column:12},end:{line:781,column:14}},"126":{start:{line:801,column:22},end:{line:801,column:40}},"127":{start:{line:805,column:12},end:{line:807,column:13}},"128":{start:{line:806,column:16},end:{line:806,column:42}},"129":{start:{line:809,column:12},end:{line:813,column:14}},"130":{start:{line:828,column:4},end:{line:916,column:7}},"131":{start:{line:844,column:27},end:{line:844,column:60}},"132":{start:{line:846,column:12},end:{line:846,column:43}},"133":{start:{line:847,column:12},end:{line:847,column:39}},"134":{start:{line:848,column:12},end:{line:848,column:34}},"135":{start:{line:849,column:12},end:{line:849,column:29}},"136":{start:{line:853,column:12},end:{line:853,column:60}},"137":{start:{line:854,column:12},end:{line:854,column:60}},"138":{start:{line:855,column:12},end:{line:855,column:65}},"139":{start:{line:856,column:12},end:{line:856,column:60}},"140":{start:{line:857,column:12},end:{line:857,column:59}},"141":{start:{line:866,column:12},end:{line:866,column:50}},"142":{start:{line:878,column:12},end:{line:878,column:48}},"143":{start:{line:879,column:12},end:{line:879,column:43}},"144":{start:{line:892,column:12},end:{line:892,column:50}},"145":{start:{line:903,column:12},end:{line:903,column:36}},"146":{start:{line:914,column:12},end:{line:914,column:31}},"147":{start:{line:929,column:4},end:{line:1238,column:7}},"148":{start:{line:954,column:12},end:{line:954,column:50}},"149":{start:{line:958,column:12},end:{line:958,column:58}},"150":{start:{line:959,column:12},end:{line:959,column:58}},"151":{start:{line:960,column:12},end:{line:960,column:59}},"152":{start:{line:961,column:12},end:{line:961,column:59}},"153":{start:{line:962,column:12},end:{line:962,column:59}},"154":{start:{line:963,column:12},end:{line:963,column:58}},"155":{start:{line:964,column:12},end:{line:964,column:56}},"156":{start:{line:965,column:12},end:{line:965,column:59}},"157":{start:{line:966,column:12},end:{line:966,column:60}},"158":{start:{line:967,column:12},end:{line:967,column:62}},"159":{start:{line:968,column:12},end:{line:968,column:59}},"160":{start:{line:969,column:12},end:{line:969,column:60}},"161":{start:{line:970,column:12},end:{line:970,column:59}},"162":{start:{line:973,column:12},end:{line:973,column:34}},"163":{start:{line:974,column:12},end:{line:974,column:34}},"164":{start:{line:975,column:12},end:{line:975,column:34}},"165":{start:{line:976,column:12},end:{line:976,column:34}},"166":{start:{line:988,column:12},end:{line:988,column:80}},"167":{start:{line:992,column:12},end:{line:997,column:14}},"168":{start:{line:999,column:12},end:{line:999,column:36}},"169":{start:{line:1002,column:12},end:{line:1002,column:58}},"170":{start:{line:1003,column:12},end:{line:1003,column:74}},"171":{start:{line:1004,column:12},end:{line:1004,column:58}},"172":{start:{line:1005,column:12},end:{line:1005,column:58}},"173":{start:{line:1006,column:12},end:{line:1006,column:60}},"174":{start:{line:1007,column:12},end:{line:1007,column:60}},"175":{start:{line:1008,column:12},end:{line:1008,column:60}},"176":{start:{line:1020,column:12},end:{line:1020,column:32}},"177":{start:{line:1032,column:12},end:{line:1032,column:29}},"178":{start:{line:1044,column:12},end:{line:1044,column:31}},"179":{start:{line:1055,column:12},end:{line:1055,column:32}},"180":{start:{line:1066,column:12},end:{line:1066,column:33}},"181":{start:{line:1077,column:12},end:{line:1077,column:35}},"182":{start:{line:1096,column:12},end:{line:1099,column:13}},"183":{start:{line:1097,column:16},end:{line:1097,column:35}},"184":{start:{line:1098,column:16},end:{line:1098,column:29}},"185":{start:{line:1100,column:12},end:{line:1100,column:49}},"186":{start:{line:1102,column:12},end:{line:1102,column:36}},"187":{start:{line:1104,column:23},end:{line:1104,column:27}},"188":{start:{line:1105,column:12},end:{line:1113,column:15}},"189":{start:{line:1106,column:16},end:{line:1112,column:17}},"190":{start:{line:1107,column:20},end:{line:1107,column:34}},"191":{start:{line:1110,column:20},end:{line:1110,column:75}},"192":{start:{line:1111,column:20},end:{line:1111,column:41}},"193":{start:{line:1125,column:12},end:{line:1125,column:49}},"194":{start:{line:1127,column:23},end:{line:1127,column:27}},"195":{start:{line:1128,column:12},end:{line:1130,column:15}},"196":{start:{line:1129,column:16},end:{line:1129,column:30}},"197":{start:{line:1143,column:12},end:{line:1143,column:49}},"198":{start:{line:1145,column:12},end:{line:1147,column:13}},"199":{start:{line:1146,column:16},end:{line:1146,column:71}},"200":{start:{line:1149,column:23},end:{line:1149,column:27}},"201":{start:{line:1150,column:22},end:{line:1168,column:14}},"202":{start:{line:1151,column:16},end:{line:1167,column:17}},"203":{start:{line:1152,column:20},end:{line:1152,column:52}},"204":{start:{line:1153,column:20},end:{line:1153,column:40}},"205":{start:{line:1155,column:21},end:{line:1167,column:17}},"206":{start:{line:1156,column:20},end:{line:1163,column:23}},"207":{start:{line:1157,column:24},end:{line:1162,column:25}},"208":{start:{line:1158,column:28},end:{line:1158,column:35}},"209":{start:{line:1161,column:28},end:{line:1161,column:60}},"210":{start:{line:1166,column:20},end:{line:1166,column:40}},"211":{start:{line:1170,column:12},end:{line:1170,column:23}},"212":{start:{line:1182,column:12},end:{line:1182,column:49}},"213":{start:{line:1184,column:23},end:{line:1184,column:27}},"214":{start:{line:1185,column:12},end:{line:1192,column:15}},"215":{start:{line:1186,column:16},end:{line:1191,column:17}},"216":{start:{line:1187,column:20},end:{line:1187,column:34}},"217":{start:{line:1190,column:20},end:{line:1190,column:41}},"218":{start:{line:1204,column:12},end:{line:1204,column:49}},"219":{start:{line:1206,column:23},end:{line:1206,column:27}},"220":{start:{line:1207,column:12},end:{line:1214,column:15}},"221":{start:{line:1208,column:16},end:{line:1213,column:17}},"222":{start:{line:1209,column:20},end:{line:1209,column:34}},"223":{start:{line:1212,column:20},end:{line:1212,column:41}},"224":{start:{line:1226,column:12},end:{line:1226,column:49}},"225":{start:{line:1228,column:23},end:{line:1228,column:27}},"226":{start:{line:1229,column:12},end:{line:1236,column:15}},"227":{start:{line:1230,column:16},end:{line:1235,column:17}},"228":{start:{line:1231,column:20},end:{line:1231,column:34}},"229":{start:{line:1234,column:20},end:{line:1234,column:41}},"230":{start:{line:1248,column:4},end:{line:1579,column:7}},"231":{start:{line:1273,column:12},end:{line:1273,column:50}},"232":{start:{line:1277,column:12},end:{line:1277,column:66}},"233":{start:{line:1278,column:12},end:{line:1278,column:66}},"234":{start:{line:1279,column:12},end:{line:1279,column:67}},"235":{start:{line:1280,column:12},end:{line:1280,column:65}},"236":{start:{line:1281,column:12},end:{line:1281,column:65}},"237":{start:{line:1282,column:12},end:{line:1282,column:78}},"238":{start:{line:1285,column:12},end:{line:1285,column:38}},"239":{start:{line:1286,column:12},end:{line:1286,column:38}},"240":{start:{line:1287,column:12},end:{line:1287,column:38}},"241":{start:{line:1288,column:12},end:{line:1288,column:38}},"242":{start:{line:1289,column:12},end:{line:1289,column:38}},"243":{start:{line:1301,column:12},end:{line:1301,column:50}},"244":{start:{line:1314,column:12},end:{line:1314,column:36}},"245":{start:{line:1316,column:27},end:{line:1316,column:29}},"246":{start:{line:1317,column:33},end:{line:1317,column:35}},"247":{start:{line:1318,column:37},end:{line:1318,column:59}},"248":{start:{line:1319,column:12},end:{line:1331,column:13}},"249":{start:{line:1319,column:24},end:{line:1319,column:25}},"250":{start:{line:1320,column:28},end:{line:1320,column:49}},"251":{start:{line:1321,column:29},end:{line:1321,column:58}},"252":{start:{line:1322,column:16},end:{line:1322,column:36}},"253":{start:{line:1323,column:16},end:{line:1323,column:38}},"254":{start:{line:1325,column:16},end:{line:1330,column:17}},"255":{start:{line:1326,column:20},end:{line:1326,column:61}},"256":{start:{line:1329,column:20},end:{line:1329,column:59}},"257":{start:{line:1332,column:12},end:{line:1332,column:44}},"258":{start:{line:1333,column:12},end:{line:1333,column:50}},"259":{start:{line:1334,column:12},end:{line:1334,column:62}},"260":{start:{line:1335,column:12},end:{line:1335,column:62}},"261":{start:{line:1336,column:12},end:{line:1336,column:64}},"262":{start:{line:1348,column:12},end:{line:1348,column:31}},"263":{start:{line:1359,column:12},end:{line:1359,column:32}},"264":{start:{line:1370,column:12},end:{line:1370,column:33}},"265":{start:{line:1389,column:12},end:{line:1392,column:13}},"266":{start:{line:1390,column:16},end:{line:1390,column:35}},"267":{start:{line:1391,column:16},end:{line:1391,column:29}},"268":{start:{line:1393,column:12},end:{line:1393,column:49}},"269":{start:{line:1395,column:12},end:{line:1395,column:36}},"270":{start:{line:1396,column:12},end:{line:1398,column:13}},"271":{start:{line:1397,column:16},end:{line:1397,column:34}},"272":{start:{line:1400,column:23},end:{line:1400,column:27}},"273":{start:{line:1401,column:22},end:{line:1409,column:14}},"274":{start:{line:1402,column:16},end:{line:1408,column:17}},"275":{start:{line:1403,column:20},end:{line:1403,column:34}},"276":{start:{line:1406,column:20},end:{line:1406,column:46}},"277":{start:{line:1407,column:20},end:{line:1407,column:41}},"278":{start:{line:1411,column:12},end:{line:1411,column:23}},"279":{start:{line:1415,column:12},end:{line:1415,column:36}},"280":{start:{line:1416,column:12},end:{line:1418,column:13}},"281":{start:{line:1417,column:16},end:{line:1417,column:34}},"282":{start:{line:1420,column:23},end:{line:1420,column:27}},"283":{start:{line:1421,column:27},end:{line:1421,column:57}},"284":{start:{line:1423,column:12},end:{line:1423,column:38}},"285":{start:{line:1424,column:12},end:{line:1424,column:24}},"286":{start:{line:1449,column:12},end:{line:1451,column:13}},"287":{start:{line:1450,column:16},end:{line:1450,column:33}},"288":{start:{line:1453,column:12},end:{line:1455,column:13}},"289":{start:{line:1454,column:16},end:{line:1454,column:64}},"290":{start:{line:1457,column:12},end:{line:1459,column:13}},"291":{start:{line:1458,column:16},end:{line:1458,column:136}},"292":{start:{line:1461,column:27},end:{line:1461,column:31}},"293":{start:{line:1462,column:12},end:{line:1504,column:13}},"294":{start:{line:1463,column:31},end:{line:1463,column:55}},"295":{start:{line:1465,column:16},end:{line:1500,column:17}},"296":{start:{line:1470,column:20},end:{line:1470,column:39}},"297":{start:{line:1472,column:21},end:{line:1500,column:17}},"298":{start:{line:1476,column:20},end:{line:1476,column:84}},"299":{start:{line:1477,column:20},end:{line:1482,column:21}},"300":{start:{line:1478,column:24},end:{line:1478,column:43}},"301":{start:{line:1481,column:24},end:{line:1481,column:36}},"302":{start:{line:1484,column:21},end:{line:1500,column:17}},"303":{start:{line:1488,column:20},end:{line:1488,column:77}},"304":{start:{line:1493,column:20},end:{line:1499,column:21}},"305":{start:{line:1493,column:32},end:{line:1493,column:33}},"306":{start:{line:1494,column:37},end:{line:1494,column:48}},"307":{start:{line:1495,column:24},end:{line:1495,column:88}},"308":{start:{line:1496,column:24},end:{line:1498,column:25}},"309":{start:{line:1497,column:28},end:{line:1497,column:42}},"310":{start:{line:1503,column:16},end:{line:1503,column:28}},"311":{start:{line:1525,column:12},end:{line:1525,column:49}},"312":{start:{line:1526,column:23},end:{line:1526,column:27}},"313":{start:{line:1527,column:22},end:{line:1554,column:14}},"314":{start:{line:1528,column:16},end:{line:1553,column:17}},"315":{start:{line:1529,column:20},end:{line:1529,column:34}},"316":{start:{line:1532,column:32},end:{line:1532,column:51}},"317":{start:{line:1533,column:20},end:{line:1535,column:21}},"318":{start:{line:1534,column:24},end:{line:1534,column:41}},"319":{start:{line:1537,column:33},end:{line:1537,column:62}},"320":{start:{line:1538,column:20},end:{line:1538,column:40}},"321":{start:{line:1540,column:20},end:{line:1552,column:21}},"322":{start:{line:1541,column:24},end:{line:1548,column:27}},"323":{start:{line:1542,column:28},end:{line:1547,column:29}},"324":{start:{line:1543,column:32},end:{line:1543,column:39}},"325":{start:{line:1546,column:32},end:{line:1546,column:64}},"326":{start:{line:1551,column:24},end:{line:1551,column:47}},"327":{start:{line:1556,column:12},end:{line:1556,column:23}},"328":{start:{line:1575,column:12},end:{line:1575,column:49}},"329":{start:{line:1577,column:12},end:{line:1577,column:47}},"330":{start:{line:1589,column:4},end:{line:1843,column:7}},"331":{start:{line:1596,column:12},end:{line:1596,column:77}},"332":{start:{line:1614,column:12},end:{line:1614,column:29}},"333":{start:{line:1615,column:12},end:{line:1615,column:57}},"334":{start:{line:1617,column:12},end:{line:1617,column:67}},"335":{start:{line:1618,column:12},end:{line:1618,column:64}},"336":{start:{line:1619,column:12},end:{line:1619,column:63}},"337":{start:{line:1620,column:12},end:{line:1620,column:68}},"338":{start:{line:1637,column:12},end:{line:1637,column:78}},"339":{start:{line:1657,column:12},end:{line:1657,column:49}},"340":{start:{line:1659,column:23},end:{line:1659,column:27}},"341":{start:{line:1660,column:22},end:{line:1662,column:14}},"342":{start:{line:1661,column:16},end:{line:1661,column:36}},"343":{start:{line:1664,column:12},end:{line:1664,column:23}},"344":{start:{line:1689,column:12},end:{line:1692,column:13}},"345":{start:{line:1690,column:16},end:{line:1690,column:35}},"346":{start:{line:1691,column:16},end:{line:1691,column:29}},"347":{start:{line:1694,column:12},end:{line:1694,column:49}},"348":{start:{line:1695,column:12},end:{line:1695,column:36}},"349":{start:{line:1697,column:23},end:{line:1697,column:27}},"350":{start:{line:1698,column:22},end:{line:1708,column:14}},"351":{start:{line:1699,column:16},end:{line:1702,column:17}},"352":{start:{line:1700,column:20},end:{line:1700,column:34}},"353":{start:{line:1701,column:20},end:{line:1701,column:27}},"354":{start:{line:1704,column:26},end:{line:1704,column:43}},"355":{start:{line:1705,column:26},end:{line:1705,column:73}},"356":{start:{line:1707,column:16},end:{line:1707,column:42}},"357":{start:{line:1710,column:12},end:{line:1710,column:23}},"358":{start:{line:1726,column:12},end:{line:1726,column:69}},"359":{start:{line:1749,column:12},end:{line:1752,column:13}},"360":{start:{line:1750,column:16},end:{line:1750,column:35}},"361":{start:{line:1751,column:16},end:{line:1751,column:29}},"362":{start:{line:1754,column:12},end:{line:1754,column:49}},"363":{start:{line:1755,column:12},end:{line:1755,column:36}},"364":{start:{line:1757,column:23},end:{line:1757,column:27}},"365":{start:{line:1758,column:12},end:{line:1776,column:15}},"366":{start:{line:1759,column:16},end:{line:1762,column:17}},"367":{start:{line:1760,column:20},end:{line:1760,column:34}},"368":{start:{line:1761,column:20},end:{line:1761,column:27}},"369":{start:{line:1764,column:27},end:{line:1764,column:29}},"370":{start:{line:1765,column:27},end:{line:1765,column:52}},"371":{start:{line:1766,column:16},end:{line:1773,column:17}},"372":{start:{line:1766,column:28},end:{line:1766,column:29}},"373":{start:{line:1767,column:34},end:{line:1767,column:56}},"374":{start:{line:1768,column:36},end:{line:1768,column:74}},"375":{start:{line:1769,column:30},end:{line:1769,column:81}},"376":{start:{line:1771,column:20},end:{line:1771,column:39}},"377":{start:{line:1772,column:20},end:{line:1772,column:35}},"378":{start:{line:1775,column:16},end:{line:1775,column:43}},"379":{start:{line:1795,column:12},end:{line:1795,column:49}},"380":{start:{line:1797,column:23},end:{line:1797,column:27}},"381":{start:{line:1798,column:12},end:{line:1800,column:15}},"382":{start:{line:1799,column:16},end:{line:1799,column:65}},"383":{start:{line:1816,column:12},end:{line:1816,column:34}},"384":{start:{line:1818,column:12},end:{line:1841,column:13}},"385":{start:{line:1819,column:29},end:{line:1819,column:40}},"386":{start:{line:1820,column:26},end:{line:1835,column:18}},"387":{start:{line:1821,column:20},end:{line:1834,column:21}},"388":{start:{line:1822,column:24},end:{line:1822,column:38}},"389":{start:{line:1825,column:24},end:{line:1825,column:67}},"390":{start:{line:1826,column:24},end:{line:1833,column:27}},"391":{start:{line:1827,column:28},end:{line:1832,column:29}},"392":{start:{line:1828,column:32},end:{line:1828,column:39}},"393":{start:{line:1831,column:32},end:{line:1831,column:64}},"394":{start:{line:1837,column:16},end:{line:1837,column:27}},"395":{start:{line:1840,column:16},end:{line:1840,column:53}},"396":{start:{line:1854,column:4},end:{line:1893,column:7}},"397":{start:{line:1861,column:12},end:{line:1861,column:39}},"398":{start:{line:1873,column:34},end:{line:1873,column:70}},"399":{start:{line:1874,column:12},end:{line:1874,column:83}},"400":{start:{line:1891,column:12},end:{line:1891,column:57}},"401":{start:{line:1903,column:4},end:{line:1931,column:7}},"402":{start:{line:1910,column:12},end:{line:1910,column:80}},"403":{start:{line:1928,column:12},end:{line:1928,column:29}},"404":{start:{line:1929,column:12},end:{line:1929,column:57}},"405":{start:{line:1941,column:4},end:{line:1991,column:7}},"406":{start:{line:1957,column:12},end:{line:1957,column:42}},"407":{start:{line:1971,column:34},end:{line:1971,column:70}},"408":{start:{line:1972,column:12},end:{line:1972,column:87}},"409":{start:{line:1989,column:12},end:{line:1989,column:57}},"410":{start:{line:2002,column:4},end:{line:2143,column:7}},"411":{start:{line:2009,column:12},end:{line:2009,column:75}},"412":{start:{line:2021,column:12},end:{line:2021,column:51}},"413":{start:{line:2031,column:12},end:{line:2031,column:56}},"414":{start:{line:2045,column:12},end:{line:2045,column:51}},"415":{start:{line:2057,column:12},end:{line:2057,column:70}},"416":{start:{line:2067,column:12},end:{line:2067,column:62}},"417":{start:{line:2078,column:12},end:{line:2078,column:66}},"418":{start:{line:2088,column:12},end:{line:2088,column:49}},"419":{start:{line:2098,column:12},end:{line:2098,column:58}},"420":{start:{line:2110,column:12},end:{line:2110,column:67}},"421":{start:{line:2122,column:12},end:{line:2122,column:74}},"422":{start:{line:2140,column:12},end:{line:2140,column:29}},"423":{start:{line:2141,column:12},end:{line:2141,column:57}},"424":{start:{line:2154,column:4},end:{line:2243,column:7}},"425":{start:{line:2161,column:12},end:{line:2161,column:75}},"426":{start:{line:2173,column:12},end:{line:2173,column:78}},"427":{start:{line:2194,column:12},end:{line:2197,column:13}},"428":{start:{line:2195,column:16},end:{line:2195,column:35}},"429":{start:{line:2196,column:16},end:{line:2196,column:29}},"430":{start:{line:2199,column:12},end:{line:2199,column:49}},"431":{start:{line:2200,column:12},end:{line:2200,column:36}},"432":{start:{line:2202,column:23},end:{line:2202,column:27}},"433":{start:{line:2203,column:12},end:{line:2220,column:15}},"434":{start:{line:2204,column:16},end:{line:2207,column:17}},"435":{start:{line:2205,column:20},end:{line:2205,column:34}},"436":{start:{line:2206,column:20},end:{line:2206,column:27}},"437":{start:{line:2209,column:34},end:{line:2209,column:36}},"438":{start:{line:2210,column:27},end:{line:2210,column:52}},"439":{start:{line:2211,column:16},end:{line:2217,column:17}},"440":{start:{line:2211,column:29},end:{line:2211,column:30}},"441":{start:{line:2212,column:41},end:{line:2212,column:63}},"442":{start:{line:2213,column:36},end:{line:2213,column:81}},"443":{start:{line:2214,column:37},end:{line:2214,column:102}},"444":{start:{line:2215,column:20},end:{line:2215,column:53}},"445":{start:{line:2216,column:20},end:{line:2216,column:49}},"446":{start:{line:2219,column:16},end:{line:2219,column:50}},"447":{start:{line:2238,column:12},end:{line:2238,column:29}},"448":{start:{line:2239,column:12},end:{line:2239,column:57}},"449":{start:{line:2241,column:12},end:{line:2241,column:52}},"450":{start:{line:2255,column:4},end:{line:2306,column:7}},"451":{start:{line:2262,column:12},end:{line:2262,column:37}},"452":{start:{line:2274,column:34},end:{line:2274,column:70}},"453":{start:{line:2275,column:12},end:{line:2275,column:87}},"454":{start:{line:2284,column:12},end:{line:2284,column:95}},"455":{start:{line:2301,column:12},end:{line:2301,column:57}},"456":{start:{line:2303,column:12},end:{line:2303,column:78}},"457":{start:{line:2304,column:12},end:{line:2304,column:56}},"458":{start:{line:2316,column:4},end:{line:2409,column:7}},"459":{start:{line:2331,column:12},end:{line:2331,column:68}},"460":{start:{line:2345,column:12},end:{line:2345,column:29}},"461":{start:{line:2346,column:12},end:{line:2346,column:50}},"462":{start:{line:2348,column:12},end:{line:2348,column:63}},"463":{start:{line:2349,column:12},end:{line:2349,column:64}},"464":{start:{line:2368,column:12},end:{line:2368,column:49}},"465":{start:{line:2370,column:23},end:{line:2370,column:27}},"466":{start:{line:2371,column:12},end:{line:2378,column:15}},"467":{start:{line:2372,column:16},end:{line:2377,column:17}},"468":{start:{line:2373,column:20},end:{line:2373,column:34}},"469":{start:{line:2376,column:20},end:{line:2376,column:70}},"470":{start:{line:2397,column:12},end:{line:2397,column:49}},"471":{start:{line:2399,column:23},end:{line:2399,column:27}},"472":{start:{line:2400,column:12},end:{line:2407,column:15}},"473":{start:{line:2401,column:16},end:{line:2406,column:17}},"474":{start:{line:2402,column:20},end:{line:2402,column:34}},"475":{start:{line:2405,column:20},end:{line:2405,column:70}},"476":{start:{line:2419,column:4},end:{line:2462,column:7}},"477":{start:{line:2435,column:12},end:{line:2435,column:30}},"478":{start:{line:2447,column:12},end:{line:2447,column:70}},"479":{start:{line:2460,column:12},end:{line:2460,column:50}},"480":{start:{line:2471,column:4},end:{line:2494,column:7}},"481":{start:{line:2478,column:12},end:{line:2478,column:30}},"482":{start:{line:2491,column:12},end:{line:2491,column:38}},"483":{start:{line:2492,column:12},end:{line:2492,column:50}},"484":{start:{line:2504,column:4},end:{line:2528,column:7}},"485":{start:{line:2511,column:12},end:{line:2511,column:69}},"486":{start:{line:2525,column:12},end:{line:2525,column:29}},"487":{start:{line:2526,column:12},end:{line:2526,column:50}},"488":{start:{line:2538,column:4},end:{line:2618,column:7}},"489":{start:{line:2554,column:12},end:{line:2554,column:31}},"490":{start:{line:2566,column:12},end:{line:2566,column:63}},"491":{start:{line:2579,column:12},end:{line:2579,column:50}},"492":{start:{line:2593,column:12},end:{line:2593,column:49}},"493":{start:{line:2595,column:23},end:{line:2595,column:27}},"494":{start:{line:2596,column:22},end:{line:2614,column:14}},"495":{start:{line:2597,column:16},end:{line:2613,column:17}},"496":{start:{line:2598,column:20},end:{line:2598,column:34}},"497":{start:{line:2602,column:32},end:{line:2602,column:51}},"498":{start:{line:2604,column:33},end:{line:2604,column:62}},"499":{start:{line:2605,column:20},end:{line:2612,column:23}},"500":{start:{line:2606,column:24},end:{line:2611,column:25}},"501":{start:{line:2607,column:28},end:{line:2607,column:35}},"502":{start:{line:2610,column:28},end:{line:2610,column:60}},"503":{start:{line:2616,column:12},end:{line:2616,column:23}},"504":{start:{line:2628,column:4},end:{line:2656,column:7}},"505":{start:{line:2635,column:12},end:{line:2635,column:69}},"506":{start:{line:2653,column:12},end:{line:2653,column:29}},"507":{start:{line:2654,column:12},end:{line:2654,column:57}},"508":{start:{line:2666,column:4},end:{line:2705,column:7}},"509":{start:{line:2673,column:12},end:{line:2673,column:31}},"510":{start:{line:2685,column:34},end:{line:2685,column:70}},"511":{start:{line:2686,column:12},end:{line:2686,column:76}},"512":{start:{line:2703,column:12},end:{line:2703,column:57}},"513":{start:{line:2714,column:4},end:{line:2792,column:7}},"514":{start:{line:2721,column:12},end:{line:2721,column:71}},"515":{start:{line:2739,column:12},end:{line:2739,column:29}},"516":{start:{line:2740,column:12},end:{line:2740,column:57}},"517":{start:{line:2742,column:12},end:{line:2742,column:66}},"518":{start:{line:2767,column:12},end:{line:2770,column:13}},"519":{start:{line:2768,column:16},end:{line:2768,column:34}},"520":{start:{line:2769,column:16},end:{line:2769,column:28}},"521":{start:{line:2772,column:12},end:{line:2772,column:49}},"522":{start:{line:2773,column:12},end:{line:2773,column:34}},"523":{start:{line:2776,column:12},end:{line:2776,column:40}},"524":{start:{line:2778,column:23},end:{line:2778,column:27}},"525":{start:{line:2779,column:12},end:{line:2781,column:15}},"526":{start:{line:2780,column:16},end:{line:2780,column:44}},"527":{start:{line:2785,column:12},end:{line:2790,column:13}},"528":{start:{line:2786,column:16},end:{line:2786,column:75}},"529":{start:{line:2789,column:16},end:{line:2789,column:45}},"530":{start:{line:2802,column:4},end:{line:2873,column:7}},"531":{start:{line:2809,column:12},end:{line:2809,column:33}},"532":{start:{line:2821,column:34},end:{line:2821,column:70}},"533":{start:{line:2822,column:12},end:{line:2822,column:77}},"534":{start:{line:2839,column:12},end:{line:2839,column:57}},"535":{start:{line:2862,column:12},end:{line:2866,column:13}},"536":{start:{line:2863,column:16},end:{line:2863,column:34}},"537":{start:{line:2864,column:16},end:{line:2864,column:30}},"538":{start:{line:2865,column:16},end:{line:2865,column:35}},"539":{start:{line:2868,column:12},end:{line:2868,column:34}},"540":{start:{line:2869,column:12},end:{line:2869,column:34}},"541":{start:{line:2871,column:12},end:{line:2871,column:49}},"542":{start:{line:2883,column:4},end:{line:2914,column:7}},"543":{start:{line:2890,column:23},end:{line:2890,column:67}},"544":{start:{line:2891,column:12},end:{line:2891,column:116}},"545":{start:{line:2910,column:12},end:{line:2910,column:29}},"546":{start:{line:2911,column:12},end:{line:2911,column:29}},"547":{start:{line:2912,column:12},end:{line:2912,column:57}},"548":{start:{line:2925,column:4},end:{line:3017,column:7}},"549":{start:{line:2932,column:12},end:{line:2932,column:83}},"550":{start:{line:2946,column:12},end:{line:2946,column:100}},"551":{start:{line:2958,column:34},end:{line:2958,column:70}},"552":{start:{line:2959,column:12},end:{line:2959,column:102}},"553":{start:{line:2977,column:12},end:{line:2977,column:29}},"554":{start:{line:2978,column:12},end:{line:2978,column:57}},"555":{start:{line:3001,column:12},end:{line:3005,column:13}},"556":{start:{line:3002,column:16},end:{line:3002,column:34}},"557":{start:{line:3003,column:16},end:{line:3003,column:36}},"558":{start:{line:3004,column:16},end:{line:3004,column:41}},"559":{start:{line:3007,column:12},end:{line:3010,column:13}},"560":{start:{line:3008,column:16},end:{line:3008,column:34}},"561":{start:{line:3009,column:16},end:{line:3009,column:28}},"562":{start:{line:3012,column:12},end:{line:3012,column:34}},"563":{start:{line:3013,column:12},end:{line:3013,column:40}},"564":{start:{line:3015,column:12},end:{line:3015,column:49}},"565":{start:{line:3027,column:4},end:{line:3213,column:7}},"566":{start:{line:3043,column:12},end:{line:3043,column:36}},"567":{start:{line:3055,column:12},end:{line:3055,column:88}},"568":{start:{line:3072,column:12},end:{line:3074,column:13}},"569":{start:{line:3073,column:16},end:{line:3073,column:84}},"570":{start:{line:3076,column:12},end:{line:3076,column:57}},"571":{start:{line:3098,column:12},end:{line:3100,column:13}},"572":{start:{line:3099,column:16},end:{line:3099,column:46}},"573":{start:{line:3102,column:12},end:{line:3102,column:49}},"574":{start:{line:3104,column:23},end:{line:3104,column:27}},"575":{start:{line:3105,column:22},end:{line:3120,column:14}},"576":{start:{line:3106,column:16},end:{line:3119,column:17}},"577":{start:{line:3107,column:20},end:{line:3107,column:34}},"578":{start:{line:3110,column:33},end:{line:3110,column:83}},"579":{start:{line:3111,column:20},end:{line:3118,column:23}},"580":{start:{line:3112,column:24},end:{line:3117,column:25}},"581":{start:{line:3113,column:28},end:{line:3113,column:35}},"582":{start:{line:3116,column:28},end:{line:3116,column:60}},"583":{start:{line:3122,column:12},end:{line:3122,column:23}},"584":{start:{line:3126,column:12},end:{line:3150,column:13}},"585":{start:{line:3127,column:27},end:{line:3127,column:31}},"586":{start:{line:3130,column:31},end:{line:3130,column:73}},"587":{start:{line:3133,column:28},end:{line:3133,column:83}},"588":{start:{line:3133,column:63},end:{line:3133,column:82}},"589":{start:{line:3136,column:16},end:{line:3138,column:17}},"590":{start:{line:3137,column:20},end:{line:3137,column:113}},"591":{start:{line:3141,column:40},end:{line:3141,column:90}},"592":{start:{line:3144,column:34},end:{line:3144,column:68}},"593":{start:{line:3146,column:16},end:{line:3146,column:43}},"594":{start:{line:3149,column:16},end:{line:3149,column:72}},"595":{start:{line:3154,column:12},end:{line:3168,column:13}},"596":{start:{line:3157,column:36},end:{line:3157,column:53}},"597":{start:{line:3159,column:16},end:{line:3164,column:17}},"598":{start:{line:3160,column:20},end:{line:3160,column:115}},"599":{start:{line:3163,column:20},end:{line:3163,column:51}},"600":{start:{line:3167,column:16},end:{line:3167,column:72}},"601":{start:{line:3172,column:12},end:{line:3172,column:49}},"602":{start:{line:3173,column:23},end:{line:3173,column:27}},"603":{start:{line:3176,column:40},end:{line:3176,column:74}},"604":{start:{line:3177,column:29},end:{line:3177,column:55}},"605":{start:{line:3180,column:12},end:{line:3189,column:13}},"606":{start:{line:3181,column:16},end:{line:3181,column:51}},"607":{start:{line:3182,column:16},end:{line:3182,column:68}},"608":{start:{line:3184,column:16},end:{line:3185,column:95}},"609":{start:{line:3185,column:38},end:{line:3185,column:92}},"610":{start:{line:3187,column:16},end:{line:3187,column:82}},"611":{start:{line:3188,column:16},end:{line:3188,column:57}},"612":{start:{line:3192,column:42},end:{line:3192,column:88}},"613":{start:{line:3193,column:31},end:{line:3193,column:61}},"614":{start:{line:3196,column:12},end:{line:3211,column:13}},"615":{start:{line:3197,column:16},end:{line:3197,column:53}},"616":{start:{line:3198,column:16},end:{line:3198,column:70}},"617":{start:{line:3200,column:16},end:{line:3203,column:19}},"618":{start:{line:3201,column:20},end:{line:3201,column:75}},"619":{start:{line:3202,column:20},end:{line:3202,column:31}},"620":{start:{line:3207,column:16},end:{line:3210,column:19}},"621":{start:{line:3208,column:20},end:{line:3208,column:75}},"622":{start:{line:3209,column:20},end:{line:3209,column:31}},"623":{start:{line:3223,column:4},end:{line:3814,column:7}},"624":{start:{line:3230,column:12},end:{line:3230,column:68}},"625":{start:{line:3248,column:12},end:{line:3248,column:28}},"626":{start:{line:3249,column:12},end:{line:3249,column:57}},"627":{start:{line:3250,column:12},end:{line:3250,column:27}},"628":{start:{line:3254,column:12},end:{line:3254,column:64}},"629":{start:{line:3255,column:12},end:{line:3255,column:72}},"630":{start:{line:3256,column:12},end:{line:3256,column:71}},"631":{start:{line:3257,column:12},end:{line:3257,column:64}},"632":{start:{line:3258,column:12},end:{line:3258,column:66}},"633":{start:{line:3259,column:12},end:{line:3259,column:63}},"634":{start:{line:3260,column:12},end:{line:3260,column:65}},"635":{start:{line:3261,column:12},end:{line:3261,column:65}},"636":{start:{line:3262,column:12},end:{line:3262,column:67}},"637":{start:{line:3263,column:12},end:{line:3263,column:69}},"638":{start:{line:3264,column:12},end:{line:3264,column:64}},"639":{start:{line:3265,column:12},end:{line:3265,column:65}},"640":{start:{line:3266,column:12},end:{line:3266,column:66}},"641":{start:{line:3267,column:12},end:{line:3267,column:63}},"642":{start:{line:3268,column:12},end:{line:3268,column:65}},"643":{start:{line:3287,column:22},end:{line:3287,column:72}},"644":{start:{line:3289,column:12},end:{line:3289,column:23}},"645":{start:{line:3308,column:12},end:{line:3308,column:49}},"646":{start:{line:3310,column:23},end:{line:3310,column:27}},"647":{start:{line:3311,column:22},end:{line:3313,column:14}},"648":{start:{line:3312,column:16},end:{line:3312,column:36}},"649":{start:{line:3315,column:12},end:{line:3315,column:23}},"650":{start:{line:3334,column:12},end:{line:3334,column:49}},"651":{start:{line:3336,column:23},end:{line:3336,column:27}},"652":{start:{line:3337,column:22},end:{line:3339,column:14}},"653":{start:{line:3338,column:16},end:{line:3338,column:36}},"654":{start:{line:3341,column:12},end:{line:3341,column:23}},"655":{start:{line:3361,column:12},end:{line:3361,column:49}},"656":{start:{line:3362,column:12},end:{line:3362,column:34}},"657":{start:{line:3363,column:12},end:{line:3363,column:67}},"658":{start:{line:3365,column:23},end:{line:3365,column:27}},"659":{start:{line:3366,column:12},end:{line:3373,column:15}},"660":{start:{line:3367,column:16},end:{line:3372,column:17}},"661":{start:{line:3368,column:20},end:{line:3368,column:34}},"662":{start:{line:3371,column:20},end:{line:3371,column:56}},"663":{start:{line:3392,column:12},end:{line:3392,column:49}},"664":{start:{line:3394,column:23},end:{line:3394,column:27}},"665":{start:{line:3395,column:22},end:{line:3397,column:14}},"666":{start:{line:3396,column:16},end:{line:3396,column:36}},"667":{start:{line:3399,column:12},end:{line:3399,column:23}},"668":{start:{line:3414,column:12},end:{line:3414,column:74}},"669":{start:{line:3433,column:12},end:{line:3433,column:49}},"670":{start:{line:3435,column:23},end:{line:3435,column:27}},"671":{start:{line:3436,column:22},end:{line:3438,column:14}},"672":{start:{line:3437,column:16},end:{line:3437,column:36}},"673":{start:{line:3440,column:12},end:{line:3440,column:23}},"674":{start:{line:3460,column:12},end:{line:3460,column:49}},"675":{start:{line:3461,column:12},end:{line:3461,column:34}},"676":{start:{line:3462,column:12},end:{line:3462,column:67}},"677":{start:{line:3464,column:23},end:{line:3464,column:27}},"678":{start:{line:3465,column:12},end:{line:3472,column:15}},"679":{start:{line:3466,column:16},end:{line:3471,column:17}},"680":{start:{line:3467,column:20},end:{line:3467,column:34}},"681":{start:{line:3470,column:20},end:{line:3470,column:56}},"682":{start:{line:3497,column:12},end:{line:3497,column:49}},"683":{start:{line:3498,column:12},end:{line:3498,column:34}},"684":{start:{line:3499,column:12},end:{line:3499,column:67}},"685":{start:{line:3501,column:23},end:{line:3501,column:27}},"686":{start:{line:3502,column:12},end:{line:3509,column:15}},"687":{start:{line:3503,column:16},end:{line:3508,column:17}},"688":{start:{line:3504,column:20},end:{line:3504,column:34}},"689":{start:{line:3507,column:20},end:{line:3507,column:56}},"690":{start:{line:3528,column:12},end:{line:3528,column:49}},"691":{start:{line:3530,column:23},end:{line:3530,column:27}},"692":{start:{line:3531,column:12},end:{line:3538,column:15}},"693":{start:{line:3532,column:16},end:{line:3537,column:17}},"694":{start:{line:3533,column:20},end:{line:3533,column:34}},"695":{start:{line:3536,column:20},end:{line:3536,column:56}},"696":{start:{line:3558,column:12},end:{line:3558,column:49}},"697":{start:{line:3560,column:23},end:{line:3560,column:27}},"698":{start:{line:3561,column:22},end:{line:3563,column:14}},"699":{start:{line:3562,column:16},end:{line:3562,column:36}},"700":{start:{line:3565,column:12},end:{line:3565,column:23}},"701":{start:{line:3586,column:12},end:{line:3586,column:49}},"702":{start:{line:3588,column:23},end:{line:3588,column:27}},"703":{start:{line:3589,column:22},end:{line:3591,column:14}},"704":{start:{line:3590,column:16},end:{line:3590,column:36}},"705":{start:{line:3593,column:12},end:{line:3593,column:23}},"706":{start:{line:3613,column:12},end:{line:3613,column:49}},"707":{start:{line:3615,column:23},end:{line:3615,column:27}},"708":{start:{line:3616,column:12},end:{line:3623,column:15}},"709":{start:{line:3617,column:16},end:{line:3622,column:17}},"710":{start:{line:3618,column:20},end:{line:3618,column:34}},"711":{start:{line:3621,column:20},end:{line:3621,column:56}},"712":{start:{line:3643,column:12},end:{line:3643,column:49}},"713":{start:{line:3645,column:23},end:{line:3645,column:27}},"714":{start:{line:3646,column:12},end:{line:3653,column:15}},"715":{start:{line:3647,column:16},end:{line:3652,column:17}},"716":{start:{line:3648,column:20},end:{line:3648,column:34}},"717":{start:{line:3651,column:20},end:{line:3651,column:56}},"718":{start:{line:3673,column:12},end:{line:3673,column:49}},"719":{start:{line:3675,column:23},end:{line:3675,column:27}},"720":{start:{line:3676,column:22},end:{line:3678,column:14}},"721":{start:{line:3677,column:16},end:{line:3677,column:36}},"722":{start:{line:3680,column:12},end:{line:3680,column:23}},"723":{start:{line:3700,column:25},end:{line:3700,column:46}},"724":{start:{line:3702,column:12},end:{line:3706,column:13}},"725":{start:{line:3703,column:16},end:{line:3705,column:18}},"726":{start:{line:3709,column:16},end:{line:3712,column:32}},"727":{start:{line:3715,column:12},end:{line:3715,column:63}},"728":{start:{line:3716,column:12},end:{line:3716,column:69}},"729":{start:{line:3717,column:12},end:{line:3717,column:61}},"730":{start:{line:3718,column:12},end:{line:3718,column:65}},"731":{start:{line:3719,column:12},end:{line:3719,column:63}},"732":{start:{line:3722,column:12},end:{line:3722,column:71}},"733":{start:{line:3723,column:12},end:{line:3723,column:89}},"734":{start:{line:3725,column:23},end:{line:3725,column:27}},"735":{start:{line:3726,column:31},end:{line:3726,column:36}},"736":{start:{line:3727,column:30},end:{line:3727,column:35}},"737":{start:{line:3728,column:12},end:{line:3786,column:14}},"738":{start:{line:3729,column:29},end:{line:3729,column:49}},"739":{start:{line:3731,column:20},end:{line:3779,column:23}},"740":{start:{line:3732,column:24},end:{line:3735,column:25}},"741":{start:{line:3733,column:28},end:{line:3733,column:47}},"742":{start:{line:3734,column:28},end:{line:3734,column:35}},"743":{start:{line:3737,column:44},end:{line:3737,column:74}},"744":{start:{line:3738,column:39},end:{line:3738,column:96}},"745":{start:{line:3739,column:24},end:{line:3776,column:25}},"746":{start:{line:3740,column:28},end:{line:3740,column:53}},"747":{start:{line:3743,column:28},end:{line:3756,column:29}},"748":{start:{line:3744,column:32},end:{line:3744,column:53}},"749":{start:{line:3745,column:32},end:{line:3745,column:52}},"750":{start:{line:3749,column:32},end:{line:3755,column:33}},"751":{start:{line:3750,column:36},end:{line:3750,column:70}},"752":{start:{line:3752,column:36},end:{line:3752,column:55}},"753":{start:{line:3753,column:36},end:{line:3753,column:52}},"754":{start:{line:3754,column:36},end:{line:3754,column:43}},"755":{start:{line:3758,column:28},end:{line:3758,column:52}},"756":{start:{line:3760,column:40},end:{line:3760,column:56}},"757":{start:{line:3762,column:28},end:{line:3775,column:29}},"758":{start:{line:3763,column:32},end:{line:3763,column:52}},"759":{start:{line:3765,column:32},end:{line:3765,column:51}},"760":{start:{line:3766,column:32},end:{line:3766,column:48}},"761":{start:{line:3767,column:32},end:{line:3767,column:39}},"762":{start:{line:3769,column:33},end:{line:3775,column:29}},"763":{start:{line:3770,column:32},end:{line:3770,column:54}},"764":{start:{line:3772,column:32},end:{line:3772,column:51}},"765":{start:{line:3773,column:32},end:{line:3773,column:48}},"766":{start:{line:3774,column:32},end:{line:3774,column:39}},"767":{start:{line:3778,column:24},end:{line:3778,column:59}},"768":{start:{line:3782,column:20},end:{line:3784,column:21}},"769":{start:{line:3783,column:24},end:{line:3783,column:45}},"770":{start:{line:3805,column:12},end:{line:3805,column:49}},"771":{start:{line:3807,column:23},end:{line:3807,column:27}},"772":{start:{line:3808,column:22},end:{line:3810,column:14}},"773":{start:{line:3809,column:16},end:{line:3809,column:36}},"774":{start:{line:3812,column:12},end:{line:3812,column:23}},"775":{start:{line:3824,column:4},end:{line:4015,column:7}},"776":{start:{line:3831,column:12},end:{line:3831,column:30}},"777":{start:{line:3843,column:22},end:{line:3843,column:39}},"778":{start:{line:3844,column:34},end:{line:3844,column:70}},"779":{start:{line:3845,column:12},end:{line:3845,column:68}},"780":{start:{line:3862,column:12},end:{line:3862,column:57}},"781":{start:{line:3866,column:12},end:{line:3866,column:60}},"782":{start:{line:3889,column:12},end:{line:3893,column:13}},"783":{start:{line:3890,column:16},end:{line:3890,column:34}},"784":{start:{line:3891,column:16},end:{line:3891,column:31}},"785":{start:{line:3892,column:16},end:{line:3892,column:38}},"786":{start:{line:3895,column:12},end:{line:3895,column:49}},"787":{start:{line:3896,column:12},end:{line:3896,column:34}},"788":{start:{line:3897,column:12},end:{line:3897,column:34}},"789":{start:{line:3899,column:12},end:{line:3901,column:13}},"790":{start:{line:3900,column:16},end:{line:3900,column:104}},"791":{start:{line:3903,column:12},end:{line:3906,column:13}},"792":{start:{line:3904,column:16},end:{line:3904,column:72}},"793":{start:{line:3905,column:16},end:{line:3905,column:23}},"794":{start:{line:3907,column:23},end:{line:3907,column:27}},"795":{start:{line:3908,column:12},end:{line:3916,column:15}},"796":{start:{line:3909,column:16},end:{line:3915,column:17}},"797":{start:{line:3910,column:20},end:{line:3910,column:34}},"798":{start:{line:3913,column:30},end:{line:3913,column:91}},"799":{start:{line:3914,column:20},end:{line:3914,column:40}},"800":{start:{line:3945,column:12},end:{line:3945,column:56}},"801":{start:{line:3972,column:12},end:{line:3976,column:13}},"802":{start:{line:3973,column:16},end:{line:3973,column:34}},"803":{start:{line:3974,column:16},end:{line:3974,column:31}},"804":{start:{line:3975,column:16},end:{line:3975,column:38}},"805":{start:{line:3978,column:12},end:{line:3978,column:49}},"806":{start:{line:3979,column:12},end:{line:3979,column:34}},"807":{start:{line:3980,column:12},end:{line:3980,column:34}},"808":{start:{line:3981,column:12},end:{line:3981,column:41}},"809":{start:{line:3983,column:12},end:{line:3985,column:13}},"810":{start:{line:3984,column:16},end:{line:3984,column:72}},"811":{start:{line:3987,column:29},end:{line:3987,column:62}},"812":{start:{line:3989,column:23},end:{line:3989,column:41}},"813":{start:{line:3990,column:25},end:{line:3990,column:31}},"814":{start:{line:3991,column:26},end:{line:3991,column:28}},"815":{start:{line:3992,column:23},end:{line:3992,column:29}},"816":{start:{line:3993,column:22},end:{line:3993,column:47}},"817":{start:{line:3994,column:23},end:{line:3994,column:27}},"818":{start:{line:3996,column:22},end:{line:4011,column:13}},"819":{start:{line:4004,column:20},end:{line:4009,column:21}},"820":{start:{line:4005,column:24},end:{line:4005,column:38}},"821":{start:{line:4008,column:24},end:{line:4008,column:54}},"822":{start:{line:4013,column:12},end:{line:4013,column:23}},"823":{start:{line:4047,column:4},end:{line:4164,column:7}},"824":{start:{line:4072,column:12},end:{line:4072,column:32}},"825":{start:{line:4073,column:12},end:{line:4073,column:44}},"826":{start:{line:4075,column:12},end:{line:4075,column:50}},"827":{start:{line:4076,column:12},end:{line:4076,column:52}},"828":{start:{line:4077,column:12},end:{line:4077,column:45}},"829":{start:{line:4078,column:12},end:{line:4078,column:51}},"830":{start:{line:4079,column:12},end:{line:4079,column:49}},"831":{start:{line:4080,column:12},end:{line:4080,column:47}},"832":{start:{line:4081,column:12},end:{line:4081,column:49}},"833":{start:{line:4082,column:12},end:{line:4082,column:56}},"834":{start:{line:4083,column:12},end:{line:4083,column:52}},"835":{start:{line:4084,column:12},end:{line:4084,column:57}},"836":{start:{line:4085,column:12},end:{line:4085,column:72}},"837":{start:{line:4096,column:12},end:{line:4096,column:42}},"838":{start:{line:4107,column:12},end:{line:4107,column:42}},"839":{start:{line:4118,column:12},end:{line:4118,column:45}},"840":{start:{line:4129,column:12},end:{line:4129,column:47}},"841":{start:{line:4140,column:12},end:{line:4140,column:46}},"842":{start:{line:4151,column:12},end:{line:4151,column:40}},"843":{start:{line:4162,column:12},end:{line:4162,column:43}},"844":{start:{line:4177,column:4},end:{line:4199,column:7}},"845":{start:{line:4192,column:12},end:{line:4192,column:32}},"846":{start:{line:4193,column:12},end:{line:4193,column:44}},"847":{start:{line:4195,column:12},end:{line:4195,column:40}},"848":{start:{line:4196,column:12},end:{line:4196,column:50}},"849":{start:{line:4197,column:12},end:{line:4197,column:65}},"850":{start:{line:4232,column:4},end:{line:4350,column:7}},"851":{start:{line:4258,column:12},end:{line:4258,column:32}},"852":{start:{line:4259,column:12},end:{line:4259,column:44}},"853":{start:{line:4261,column:12},end:{line:4261,column:54}},"854":{start:{line:4262,column:12},end:{line:4262,column:56}},"855":{start:{line:4263,column:12},end:{line:4263,column:56}},"856":{start:{line:4264,column:12},end:{line:4264,column:49}},"857":{start:{line:4265,column:12},end:{line:4265,column:57}},"858":{start:{line:4266,column:12},end:{line:4266,column:72}},"859":{start:{line:4268,column:12},end:{line:4268,column:35}},"860":{start:{line:4269,column:12},end:{line:4271,column:13}},"861":{start:{line:4269,column:25},end:{line:4269,column:26}},"862":{start:{line:4270,column:16},end:{line:4270,column:116}},"863":{start:{line:4273,column:12},end:{line:4275,column:13}},"864":{start:{line:4274,column:16},end:{line:4274,column:51}},"865":{start:{line:4276,column:12},end:{line:4278,column:13}},"866":{start:{line:4277,column:16},end:{line:4277,column:51}},"867":{start:{line:4279,column:12},end:{line:4282,column:13}},"868":{start:{line:4280,column:16},end:{line:4280,column:51}},"869":{start:{line:4281,column:16},end:{line:4281,column:64}},"870":{start:{line:4293,column:12},end:{line:4293,column:50}},"871":{start:{line:4304,column:12},end:{line:4304,column:35}},"872":{start:{line:4315,column:12},end:{line:4315,column:42}},"873":{start:{line:4326,column:12},end:{line:4326,column:40}},"874":{start:{line:4337,column:12},end:{line:4337,column:39}},"875":{start:{line:4348,column:12},end:{line:4348,column:41}},"876":{start:{line:4366,column:4},end:{line:4413,column:7}},"877":{start:{line:4383,column:12},end:{line:4383,column:35}},"878":{start:{line:4384,column:12},end:{line:4384,column:39}},"879":{start:{line:4385,column:12},end:{line:4385,column:58}},"880":{start:{line:4386,column:12},end:{line:4386,column:72}},"881":{start:{line:4387,column:12},end:{line:4387,column:50}},"882":{start:{line:4388,column:12},end:{line:4388,column:60}},"883":{start:{line:4390,column:12},end:{line:4390,column:50}},"884":{start:{line:4402,column:12},end:{line:4405,column:13}},"885":{start:{line:4403,column:16},end:{line:4403,column:32}},"886":{start:{line:4404,column:16},end:{line:4404,column:26}},"887":{start:{line:4406,column:12},end:{line:4408,column:13}},"888":{start:{line:4407,column:16},end:{line:4407,column:26}},"889":{start:{line:4411,column:12},end:{line:4411,column:87}},"890":{start:{line:4524,column:4},end:{line:5169,column:7}},"891":{start:{line:4544,column:12},end:{line:4544,column:51}},"892":{start:{line:4545,column:12},end:{line:4545,column:30}},"893":{start:{line:4546,column:12},end:{line:4546,column:27}},"894":{start:{line:4547,column:12},end:{line:4547,column:30}},"895":{start:{line:4548,column:12},end:{line:4548,column:28}},"896":{start:{line:4550,column:12},end:{line:4551,column:54}},"897":{start:{line:4553,column:12},end:{line:4553,column:52}},"898":{start:{line:4554,column:12},end:{line:4554,column:54}},"899":{start:{line:4570,column:12},end:{line:4572,column:13}},"900":{start:{line:4571,column:16},end:{line:4571,column:30}},"901":{start:{line:4574,column:12},end:{line:4576,column:13}},"902":{start:{line:4575,column:16},end:{line:4575,column:81}},"903":{start:{line:4578,column:12},end:{line:4578,column:54}},"904":{start:{line:4579,column:12},end:{line:4579,column:24}},"905":{start:{line:4595,column:12},end:{line:4597,column:13}},"906":{start:{line:4596,column:16},end:{line:4596,column:77}},"907":{start:{line:4598,column:12},end:{line:4604,column:13}},"908":{start:{line:4599,column:16},end:{line:4603,column:70}},"909":{start:{line:4605,column:12},end:{line:4610,column:13}},"910":{start:{line:4606,column:16},end:{line:4609,column:59}},"911":{start:{line:4612,column:22},end:{line:4616,column:13}},"912":{start:{line:4618,column:12},end:{line:4623,column:13}},"913":{start:{line:4619,column:16},end:{line:4622,column:18}},"914":{start:{line:4624,column:12},end:{line:4624,column:35}},"915":{start:{line:4626,column:12},end:{line:4626,column:24}},"916":{start:{line:4643,column:12},end:{line:4645,column:13}},"917":{start:{line:4644,column:16},end:{line:4644,column:83}},"918":{start:{line:4647,column:20},end:{line:4647,column:63}},"919":{start:{line:4649,column:12},end:{line:4651,column:13}},"920":{start:{line:4650,column:16},end:{line:4650,column:112}},"921":{start:{line:4653,column:12},end:{line:4656,column:13}},"922":{start:{line:4654,column:16},end:{line:4655,column:35}},"923":{start:{line:4658,column:12},end:{line:4661,column:13}},"924":{start:{line:4659,column:16},end:{line:4660,column:35}},"925":{start:{line:4663,column:12},end:{line:4665,column:13}},"926":{start:{line:4664,column:16},end:{line:4664,column:120}},"927":{start:{line:4667,column:25},end:{line:4676,column:13}},"928":{start:{line:4678,column:12},end:{line:4678,column:84}},"929":{start:{line:4679,column:12},end:{line:4679,column:38}},"930":{start:{line:4681,column:12},end:{line:4681,column:24}},"931":{start:{line:4694,column:12},end:{line:4696,column:13}},"932":{start:{line:4695,column:16},end:{line:4695,column:67}},"933":{start:{line:4697,column:20},end:{line:4697,column:63}},"934":{start:{line:4698,column:12},end:{line:4700,column:13}},"935":{start:{line:4699,column:16},end:{line:4699,column:96}},"936":{start:{line:4702,column:22},end:{line:4707,column:13}},"937":{start:{line:4709,column:12},end:{line:4711,column:13}},"938":{start:{line:4710,column:16},end:{line:4710,column:36}},"939":{start:{line:4713,column:12},end:{line:4713,column:32}},"940":{start:{line:4715,column:12},end:{line:4715,column:24}},"941":{start:{line:4738,column:12},end:{line:4740,column:13}},"942":{start:{line:4739,column:16},end:{line:4739,column:63}},"943":{start:{line:4741,column:20},end:{line:4741,column:59}},"944":{start:{line:4742,column:12},end:{line:4744,column:13}},"945":{start:{line:4743,column:16},end:{line:4743,column:86}},"946":{start:{line:4745,column:31},end:{line:4745,column:33}},"947":{start:{line:4746,column:12},end:{line:4748,column:13}},"948":{start:{line:4747,column:16},end:{line:4747,column:50}},"949":{start:{line:4749,column:12},end:{line:4751,column:13}},"950":{start:{line:4750,column:16},end:{line:4750,column:46}},"951":{start:{line:4752,column:12},end:{line:4754,column:13}},"952":{start:{line:4753,column:16},end:{line:4753,column:48}},"953":{start:{line:4755,column:12},end:{line:4757,column:13}},"954":{start:{line:4756,column:16},end:{line:4756,column:56}},"955":{start:{line:4759,column:12},end:{line:4766,column:15}},"956":{start:{line:4768,column:12},end:{line:4768,column:24}},"957":{start:{line:4783,column:12},end:{line:4785,column:13}},"958":{start:{line:4784,column:16},end:{line:4784,column:63}},"959":{start:{line:4786,column:20},end:{line:4786,column:59}},"960":{start:{line:4787,column:12},end:{line:4789,column:13}},"961":{start:{line:4788,column:16},end:{line:4788,column:87}},"962":{start:{line:4791,column:12},end:{line:4798,column:15}},"963":{start:{line:4800,column:12},end:{line:4800,column:24}},"964":{start:{line:4814,column:12},end:{line:4816,column:13}},"965":{start:{line:4815,column:16},end:{line:4815,column:63}},"966":{start:{line:4817,column:20},end:{line:4817,column:59}},"967":{start:{line:4818,column:12},end:{line:4820,column:13}},"968":{start:{line:4819,column:16},end:{line:4819,column:89}},"969":{start:{line:4821,column:12},end:{line:4823,column:13}},"970":{start:{line:4822,column:16},end:{line:4822,column:120}},"971":{start:{line:4825,column:12},end:{line:4831,column:15}},"972":{start:{line:4833,column:12},end:{line:4833,column:24}},"973":{start:{line:4846,column:12},end:{line:4848,column:13}},"974":{start:{line:4847,column:16},end:{line:4847,column:67}},"975":{start:{line:4849,column:20},end:{line:4849,column:63}},"976":{start:{line:4850,column:12},end:{line:4852,column:13}},"977":{start:{line:4851,column:16},end:{line:4851,column:96}},"978":{start:{line:4854,column:22},end:{line:4858,column:13}},"979":{start:{line:4860,column:12},end:{line:4862,column:13}},"980":{start:{line:4861,column:16},end:{line:4861,column:36}},"981":{start:{line:4864,column:12},end:{line:4864,column:35}},"982":{start:{line:4866,column:12},end:{line:4866,column:24}},"983":{start:{line:4883,column:12},end:{line:4885,column:13}},"984":{start:{line:4884,column:16},end:{line:4884,column:67}},"985":{start:{line:4886,column:20},end:{line:4886,column:63}},"986":{start:{line:4887,column:12},end:{line:4889,column:13}},"987":{start:{line:4888,column:16},end:{line:4888,column:86}},"988":{start:{line:4893,column:32},end:{line:4893,column:34}},"989":{start:{line:4894,column:12},end:{line:4896,column:13}},"990":{start:{line:4895,column:16},end:{line:4895,column:51}},"991":{start:{line:4897,column:12},end:{line:4899,column:13}},"992":{start:{line:4898,column:16},end:{line:4898,column:47}},"993":{start:{line:4900,column:12},end:{line:4902,column:13}},"994":{start:{line:4901,column:16},end:{line:4901,column:49}},"995":{start:{line:4903,column:12},end:{line:4905,column:13}},"996":{start:{line:4904,column:16},end:{line:4904,column:57}},"997":{start:{line:4907,column:12},end:{line:4913,column:15}},"998":{start:{line:4915,column:12},end:{line:4915,column:24}},"999":{start:{line:4929,column:12},end:{line:4931,column:13}},"1000":{start:{line:4930,column:16},end:{line:4930,column:67}},"1001":{start:{line:4932,column:20},end:{line:4932,column:63}},"1002":{start:{line:4933,column:12},end:{line:4935,column:13}},"1003":{start:{line:4934,column:16},end:{line:4934,column:87}},"1004":{start:{line:4937,column:12},end:{line:4943,column:15}},"1005":{start:{line:4945,column:12},end:{line:4945,column:24}},"1006":{start:{line:4958,column:12},end:{line:4960,column:13}},"1007":{start:{line:4959,column:16},end:{line:4959,column:63}},"1008":{start:{line:4961,column:20},end:{line:4961,column:59}},"1009":{start:{line:4962,column:12},end:{line:4964,column:13}},"1010":{start:{line:4963,column:16},end:{line:4963,column:89}},"1011":{start:{line:4965,column:12},end:{line:4967,column:13}},"1012":{start:{line:4966,column:16},end:{line:4966,column:120}},"1013":{start:{line:4969,column:12},end:{line:4974,column:15}},"1014":{start:{line:4976,column:12},end:{line:4976,column:24}},"1015":{start:{line:4990,column:12},end:{line:4992,column:13}},"1016":{start:{line:4991,column:16},end:{line:4991,column:67}},"1017":{start:{line:4994,column:20},end:{line:4994,column:63}},"1018":{start:{line:4995,column:12},end:{line:5047,column:13}},"1019":{start:{line:5004,column:16},end:{line:5006,column:35}},"1020":{start:{line:5008,column:17},end:{line:5047,column:13}},"1021":{start:{line:5020,column:16},end:{line:5023,column:22}},"1022":{start:{line:5025,column:17},end:{line:5047,column:13}},"1023":{start:{line:5034,column:16},end:{line:5037,column:22}},"1024":{start:{line:5039,column:17},end:{line:5047,column:13}},"1025":{start:{line:5042,column:16},end:{line:5043,column:46}},"1026":{start:{line:5045,column:17},end:{line:5047,column:13}},"1027":{start:{line:5046,column:16},end:{line:5046,column:84}},"1028":{start:{line:5049,column:12},end:{line:5056,column:15}},"1029":{start:{line:5058,column:12},end:{line:5058,column:24}},"1030":{start:{line:5069,column:12},end:{line:5076,column:14}},"1031":{start:{line:5102,column:22},end:{line:5102,column:60}},"1032":{start:{line:5104,column:23},end:{line:5106,column:13}},"1033":{start:{line:5108,column:12},end:{line:5110,column:13}},"1034":{start:{line:5109,column:16},end:{line:5109,column:60}},"1035":{start:{line:5112,column:12},end:{line:5124,column:15}},"1036":{start:{line:5113,column:16},end:{line:5116,column:17}},"1037":{start:{line:5114,column:20},end:{line:5114,column:77}},"1038":{start:{line:5115,column:20},end:{line:5115,column:27}},"1039":{start:{line:5118,column:16},end:{line:5123,column:17}},"1040":{start:{line:5119,column:20},end:{line:5119,column:88}},"1041":{start:{line:5122,column:20},end:{line:5122,column:96}},"1042":{start:{line:5154,column:12},end:{line:5157,column:13}},"1043":{start:{line:5155,column:16},end:{line:5155,column:32}},"1044":{start:{line:5156,column:16},end:{line:5156,column:26}},"1045":{start:{line:5158,column:12},end:{line:5158,column:30}},"1046":{start:{line:5160,column:12},end:{line:5167,column:15}},"1047":{start:{line:5161,column:16},end:{line:5166,column:17}},"1048":{start:{line:5162,column:20},end:{line:5162,column:46}},"1049":{start:{line:5165,column:20},end:{line:5165,column:68}},"1050":{start:{line:5197,column:4},end:{line:5515,column:7}},"1051":{start:{line:5225,column:12},end:{line:5225,column:32}},"1052":{start:{line:5226,column:12},end:{line:5226,column:44}},"1053":{start:{line:5228,column:12},end:{line:5228,column:58}},"1054":{start:{line:5229,column:12},end:{line:5229,column:59}},"1055":{start:{line:5230,column:12},end:{line:5230,column:60}},"1056":{start:{line:5231,column:12},end:{line:5231,column:59}},"1057":{start:{line:5232,column:12},end:{line:5232,column:67}},"1058":{start:{line:5235,column:12},end:{line:5237,column:13}},"1059":{start:{line:5236,column:16},end:{line:5236,column:57}},"1060":{start:{line:5238,column:12},end:{line:5240,column:13}},"1061":{start:{line:5239,column:16},end:{line:5239,column:59}},"1062":{start:{line:5241,column:12},end:{line:5243,column:13}},"1063":{start:{line:5242,column:16},end:{line:5242,column:60}},"1064":{start:{line:5244,column:12},end:{line:5246,column:13}},"1065":{start:{line:5245,column:16},end:{line:5245,column:58}},"1066":{start:{line:5249,column:12},end:{line:5251,column:13}},"1067":{start:{line:5250,column:16},end:{line:5250,column:51}},"1068":{start:{line:5254,column:12},end:{line:5254,column:29}},"1069":{start:{line:5255,column:12},end:{line:5257,column:13}},"1070":{start:{line:5255,column:25},end:{line:5255,column:26}},"1071":{start:{line:5256,column:16},end:{line:5256,column:98}},"1072":{start:{line:5260,column:12},end:{line:5260,column:34}},"1073":{start:{line:5261,column:12},end:{line:5263,column:13}},"1074":{start:{line:5261,column:25},end:{line:5261,column:26}},"1075":{start:{line:5262,column:16},end:{line:5262,column:90}},"1076":{start:{line:5266,column:12},end:{line:5266,column:35}},"1077":{start:{line:5267,column:12},end:{line:5269,column:13}},"1078":{start:{line:5267,column:25},end:{line:5267,column:26}},"1079":{start:{line:5268,column:16},end:{line:5268,column:126}},"1080":{start:{line:5280,column:12},end:{line:5280,column:55}},"1081":{start:{line:5291,column:12},end:{line:5291,column:52}},"1082":{start:{line:5303,column:12},end:{line:5303,column:44}},"1083":{start:{line:5317,column:12},end:{line:5317,column:78}},"1084":{start:{line:5332,column:33},end:{line:5332,column:35}},"1085":{start:{line:5334,column:12},end:{line:5338,column:13}},"1086":{start:{line:5335,column:16},end:{line:5337,column:17}},"1087":{start:{line:5336,column:20},end:{line:5336,column:55}},"1088":{start:{line:5340,column:35},end:{line:5340,column:58}},"1089":{start:{line:5341,column:12},end:{line:5345,column:13}},"1090":{start:{line:5342,column:16},end:{line:5344,column:17}},"1091":{start:{line:5343,column:20},end:{line:5343,column:62}},"1092":{start:{line:5347,column:12},end:{line:5347,column:34}},"1093":{start:{line:5361,column:12},end:{line:5361,column:49}},"1094":{start:{line:5374,column:25},end:{line:5374,column:27}},"1095":{start:{line:5376,column:23},end:{line:5376,column:44}},"1096":{start:{line:5377,column:31},end:{line:5377,column:48}},"1097":{start:{line:5378,column:12},end:{line:5383,column:13}},"1098":{start:{line:5378,column:25},end:{line:5378,column:26}},"1099":{start:{line:5379,column:34},end:{line:5379,column:55}},"1100":{start:{line:5380,column:16},end:{line:5382,column:17}},"1101":{start:{line:5380,column:29},end:{line:5380,column:30}},"1102":{start:{line:5381,column:20},end:{line:5381,column:124}},"1103":{start:{line:5384,column:12},end:{line:5384,column:26}},"1104":{start:{line:5397,column:12},end:{line:5397,column:56}},"1105":{start:{line:5410,column:12},end:{line:5410,column:67}},"1106":{start:{line:5423,column:12},end:{line:5423,column:50}},"1107":{start:{line:5454,column:12},end:{line:5457,column:13}},"1108":{start:{line:5455,column:16},end:{line:5455,column:40}},"1109":{start:{line:5456,column:16},end:{line:5456,column:41}},"1110":{start:{line:5459,column:24},end:{line:5459,column:106}},"1111":{start:{line:5460,column:23},end:{line:5460,column:72}},"1112":{start:{line:5462,column:12},end:{line:5462,column:65}},"1113":{start:{line:5485,column:24},end:{line:5485,column:90}},"1114":{start:{line:5487,column:12},end:{line:5487,column:69}},"1115":{start:{line:5488,column:12},end:{line:5488,column:81}},"1116":{start:{line:5501,column:12},end:{line:5501,column:64}},"1117":{start:{line:5513,column:12},end:{line:5513,column:53}},"1118":{start:{line:5526,column:4},end:{line:5679,column:7}},"1119":{start:{line:5533,column:12},end:{line:5533,column:74}},"1120":{start:{line:5556,column:12},end:{line:5559,column:13}},"1121":{start:{line:5557,column:16},end:{line:5557,column:34}},"1122":{start:{line:5558,column:16},end:{line:5558,column:31}},"1123":{start:{line:5561,column:12},end:{line:5561,column:29}},"1124":{start:{line:5562,column:12},end:{line:5562,column:57}},"1125":{start:{line:5564,column:12},end:{line:5564,column:77}},"1126":{start:{line:5565,column:12},end:{line:5568,column:13}},"1127":{start:{line:5567,column:16},end:{line:5567,column:72}},"1128":{start:{line:5572,column:12},end:{line:5574,column:13}},"1129":{start:{line:5573,column:16},end:{line:5573,column:35}},"1130":{start:{line:5576,column:38},end:{line:5576,column:75}},"1131":{start:{line:5578,column:12},end:{line:5578,column:66}},"1132":{start:{line:5579,column:12},end:{line:5579,column:63}},"1133":{start:{line:5580,column:12},end:{line:5580,column:63}},"1134":{start:{line:5583,column:23},end:{line:5583,column:50}},"1135":{start:{line:5584,column:12},end:{line:5584,column:30}},"1136":{start:{line:5585,column:12},end:{line:5587,column:13}},"1137":{start:{line:5585,column:25},end:{line:5585,column:26}},"1138":{start:{line:5586,column:16},end:{line:5586,column:75}},"1139":{start:{line:5589,column:12},end:{line:5589,column:56}},"1140":{start:{line:5590,column:12},end:{line:5590,column:56}},"1141":{start:{line:5601,column:12},end:{line:5601,column:47}},"1142":{start:{line:5613,column:12},end:{line:5617,column:13}},"1143":{start:{line:5613,column:25},end:{line:5613,column:26}},"1144":{start:{line:5614,column:16},end:{line:5616,column:17}},"1145":{start:{line:5615,column:20},end:{line:5615,column:43}},"1146":{start:{line:5618,column:12},end:{line:5618,column:24}},"1147":{start:{line:5629,column:12},end:{line:5629,column:58}},"1148":{start:{line:5645,column:12},end:{line:5648,column:13}},"1149":{start:{line:5646,column:16},end:{line:5646,column:33}},"1150":{start:{line:5647,column:16},end:{line:5647,column:27}},"1151":{start:{line:5649,column:12},end:{line:5649,column:49}},"1152":{start:{line:5651,column:12},end:{line:5654,column:13}},"1153":{start:{line:5652,column:16},end:{line:5652,column:93}},"1154":{start:{line:5653,column:16},end:{line:5653,column:23}},"1155":{start:{line:5655,column:12},end:{line:5658,column:13}},"1156":{start:{line:5656,column:16},end:{line:5656,column:81}},"1157":{start:{line:5657,column:16},end:{line:5657,column:23}},"1158":{start:{line:5660,column:31},end:{line:5666,column:13}},"1159":{start:{line:5668,column:23},end:{line:5668,column:27}},"1160":{start:{line:5669,column:12},end:{line:5677,column:15}},"1161":{start:{line:5670,column:16},end:{line:5676,column:17}},"1162":{start:{line:5671,column:20},end:{line:5671,column:40}},"1163":{start:{line:5674,column:45},end:{line:5674,column:98}},"1164":{start:{line:5675,column:20},end:{line:5675,column:142}},"1165":{start:{line:5690,column:4},end:{line:5768,column:7}},"1166":{start:{line:5697,column:12},end:{line:5697,column:36}},"1167":{start:{line:5713,column:12},end:{line:5713,column:40}},"1168":{start:{line:5714,column:12},end:{line:5714,column:57}},"1169":{start:{line:5715,column:12},end:{line:5715,column:56}},"1170":{start:{line:5733,column:12},end:{line:5736,column:13}},"1171":{start:{line:5734,column:16},end:{line:5734,column:34}},"1172":{start:{line:5735,column:16},end:{line:5735,column:28}},"1173":{start:{line:5738,column:12},end:{line:5738,column:34}},"1174":{start:{line:5739,column:12},end:{line:5739,column:48}},"1175":{start:{line:5740,column:12},end:{line:5740,column:43}},"1176":{start:{line:5742,column:23},end:{line:5742,column:27}},"1177":{start:{line:5743,column:12},end:{line:5751,column:15}},"1178":{start:{line:5744,column:16},end:{line:5750,column:17}},"1179":{start:{line:5745,column:20},end:{line:5745,column:34}},"1180":{start:{line:5748,column:36},end:{line:5748,column:137}},"1181":{start:{line:5749,column:20},end:{line:5749,column:46}},"1182":{start:{line:5765,column:34},end:{line:5765,column:70}},"1183":{start:{line:5766,column:12},end:{line:5766,column:88}},"1184":{start:{line:5772,column:4},end:{line:5802,column:7}},"1185":{start:{line:5774,column:12},end:{line:5774,column:34}},"1186":{start:{line:5776,column:12},end:{line:5776,column:38}},"1187":{start:{line:5777,column:12},end:{line:5777,column:50}},"1188":{start:{line:5778,column:12},end:{line:5778,column:29}},"1189":{start:{line:5783,column:12},end:{line:5783,column:49}},"1190":{start:{line:5785,column:23},end:{line:5785,column:27}},"1191":{start:{line:5786,column:25},end:{line:5789,column:13}},"1192":{start:{line:5790,column:12},end:{line:5800,column:15}},"1193":{start:{line:5791,column:16},end:{line:5799,column:17}},"1194":{start:{line:5792,column:20},end:{line:5792,column:34}},"1195":{start:{line:5795,column:38},end:{line:5795,column:76}},"1196":{start:{line:5796,column:20},end:{line:5796,column:47}},"1197":{start:{line:5798,column:20},end:{line:5798,column:60}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:16,column:1},end:{line:16,column:2}},loc:{start:{line:16,column:12},end:{line:5803,column:1}},line:16},"1":{name:"(anonymous_1)",decl:{start:{line:38,column:14},end:{line:38,column:15}},loc:{start:{line:38,column:25},end:{line:40,column:9}},line:38},"2":{name:"(anonymous_2)",decl:{start:{line:72,column:14},end:{line:72,column:15}},loc:{start:{line:72,column:25},end:{line:88,column:9}},line:72},"3":{name:"(anonymous_3)",decl:{start:{line:105,column:20},end:{line:105,column:21}},loc:{start:{line:105,column:41},end:{line:117,column:9}},line:105},"4":{name:"(anonymous_4)",decl:{start:{line:135,column:14},end:{line:135,column:15}},loc:{start:{line:135,column:25},end:{line:137,column:9}},line:135},"5":{name:"(anonymous_5)",decl:{start:{line:163,column:24},end:{line:163,column:25}},loc:{start:{line:163,column:44},end:{line:165,column:9}},line:163},"6":{name:"(anonymous_6)",decl:{start:{line:191,column:17},end:{line:191,column:18}},loc:{start:{line:191,column:37},end:{line:193,column:9}},line:191},"7":{name:"(anonymous_7)",decl:{start:{line:217,column:23},end:{line:217,column:24}},loc:{start:{line:217,column:43},end:{line:219,column:9}},line:217},"8":{name:"(anonymous_8)",decl:{start:{line:243,column:26},end:{line:243,column:27}},loc:{start:{line:243,column:46},end:{line:245,column:9}},line:243},"9":{name:"(anonymous_9)",decl:{start:{line:270,column:26},end:{line:270,column:27}},loc:{start:{line:270,column:46},end:{line:272,column:9}},line:270},"10":{name:"(anonymous_10)",decl:{start:{line:299,column:14},end:{line:299,column:15}},loc:{start:{line:299,column:34},end:{line:301,column:9}},line:299},"11":{name:"(anonymous_11)",decl:{start:{line:311,column:20},end:{line:311,column:21}},loc:{start:{line:311,column:40},end:{line:313,column:9}},line:311},"12":{name:"(anonymous_12)",decl:{start:{line:336,column:15},end:{line:336,column:16}},loc:{start:{line:336,column:26},end:{line:338,column:9}},line:336},"13":{name:"(anonymous_13)",decl:{start:{line:365,column:15},end:{line:365,column:16}},loc:{start:{line:365,column:35},end:{line:367,column:9}},line:365},"14":{name:"(anonymous_14)",decl:{start:{line:396,column:16},end:{line:396,column:17}},loc:{start:{line:396,column:61},end:{line:404,column:9}},line:396},"15":{name:"(anonymous_15)",decl:{start:{line:419,column:16},end:{line:419,column:17}},loc:{start:{line:419,column:51},end:{line:426,column:9}},line:419},"16":{name:"(anonymous_16)",decl:{start:{line:452,column:23},end:{line:452,column:24}},loc:{start:{line:452,column:68},end:{line:460,column:9}},line:452},"17":{name:"(anonymous_17)",decl:{start:{line:477,column:21},end:{line:477,column:22}},loc:{start:{line:477,column:40},end:{line:500,column:9}},line:477},"18":{name:"(anonymous_18)",decl:{start:{line:478,column:35},end:{line:478,column:36}},loc:{start:{line:478,column:46},end:{line:478,column:48}},line:478},"19":{name:"(anonymous_19)",decl:{start:{line:481,column:54},end:{line:481,column:55}},loc:{start:{line:481,column:78},end:{line:497,column:13}},line:481},"20":{name:"(anonymous_20)",decl:{start:{line:488,column:31},end:{line:488,column:32}},loc:{start:{line:488,column:42},end:{line:495,column:21}},line:488},"21":{name:"(anonymous_21)",decl:{start:{line:516,column:20},end:{line:516,column:21}},loc:{start:{line:516,column:39},end:{line:521,column:9}},line:516},"22":{name:"(anonymous_22)",decl:{start:{line:517,column:35},end:{line:517,column:36}},loc:{start:{line:517,column:46},end:{line:517,column:48}},line:517},"23":{name:"(anonymous_23)",decl:{start:{line:543,column:15},end:{line:543,column:16}},loc:{start:{line:543,column:49},end:{line:562,column:9}},line:543},"24":{name:"(anonymous_24)",decl:{start:{line:549,column:35},end:{line:549,column:36}},loc:{start:{line:549,column:46},end:{line:549,column:48}},line:549},"25":{name:"(anonymous_25)",decl:{start:{line:554,column:50},end:{line:554,column:51}},loc:{start:{line:554,column:74},end:{line:561,column:13}},line:554},"26":{name:"(anonymous_26)",decl:{start:{line:580,column:19},end:{line:580,column:20}},loc:{start:{line:580,column:53},end:{line:601,column:9}},line:580},"27":{name:"(anonymous_27)",decl:{start:{line:586,column:35},end:{line:586,column:36}},loc:{start:{line:586,column:46},end:{line:586,column:48}},line:586},"28":{name:"(anonymous_28)",decl:{start:{line:592,column:53},end:{line:592,column:54}},loc:{start:{line:592,column:77},end:{line:600,column:13}},line:592},"29":{name:"(anonymous_29)",decl:{start:{line:624,column:13},end:{line:624,column:14}},loc:{start:{line:624,column:47},end:{line:663,column:9}},line:624},"30":{name:"(anonymous_30)",decl:{start:{line:630,column:35},end:{line:630,column:36}},loc:{start:{line:630,column:46},end:{line:630,column:48}},line:630},"31":{name:"(anonymous_31)",decl:{start:{line:652,column:16},end:{line:652,column:17}},loc:{start:{line:652,column:40},end:{line:659,column:17}},line:652},"32":{name:"(anonymous_32)",decl:{start:{line:685,column:14},end:{line:685,column:15}},loc:{start:{line:685,column:47},end:{line:703,column:9}},line:685},"33":{name:"(anonymous_33)",decl:{start:{line:721,column:13},end:{line:721,column:14}},loc:{start:{line:721,column:49},end:{line:735,column:9}},line:721},"34":{name:"(anonymous_34)",decl:{start:{line:737,column:16},end:{line:737,column:17}},loc:{start:{line:737,column:42},end:{line:750,column:9}},line:737},"35":{name:"(anonymous_35)",decl:{start:{line:768,column:14},end:{line:768,column:15}},loc:{start:{line:768,column:50},end:{line:782,column:9}},line:768},"36":{name:"(anonymous_36)",decl:{start:{line:800,column:13},end:{line:800,column:14}},loc:{start:{line:800,column:49},end:{line:814,column:9}},line:800},"37":{name:"(anonymous_37)",decl:{start:{line:843,column:14},end:{line:843,column:15}},loc:{start:{line:843,column:49},end:{line:858,column:9}},line:843},"38":{name:"(anonymous_38)",decl:{start:{line:865,column:14},end:{line:865,column:15}},loc:{start:{line:865,column:25},end:{line:867,column:9}},line:865},"39":{name:"(anonymous_39)",decl:{start:{line:877,column:15},end:{line:877,column:16}},loc:{start:{line:877,column:36},end:{line:880,column:9}},line:877},"40":{name:"(anonymous_40)",decl:{start:{line:891,column:15},end:{line:891,column:16}},loc:{start:{line:891,column:34},end:{line:893,column:9}},line:891},"41":{name:"(anonymous_41)",decl:{start:{line:902,column:20},end:{line:902,column:21}},loc:{start:{line:902,column:31},end:{line:904,column:9}},line:902},"42":{name:"(anonymous_42)",decl:{start:{line:913,column:15},end:{line:913,column:16}},loc:{start:{line:913,column:26},end:{line:915,column:9}},line:913},"43":{name:"(anonymous_43)",decl:{start:{line:953,column:14},end:{line:953,column:15}},loc:{start:{line:953,column:49},end:{line:977,column:9}},line:953},"44":{name:"(anonymous_44)",decl:{start:{line:987,column:15},end:{line:987,column:16}},loc:{start:{line:987,column:36},end:{line:1009,column:9}},line:987},"45":{name:"(anonymous_45)",decl:{start:{line:1019,column:16},end:{line:1019,column:17}},loc:{start:{line:1019,column:27},end:{line:1021,column:9}},line:1019},"46":{name:"(anonymous_46)",decl:{start:{line:1031,column:13},end:{line:1031,column:14}},loc:{start:{line:1031,column:24},end:{line:1033,column:9}},line:1031},"47":{name:"(anonymous_47)",decl:{start:{line:1043,column:15},end:{line:1043,column:16}},loc:{start:{line:1043,column:26},end:{line:1045,column:9}},line:1043},"48":{name:"(anonymous_48)",decl:{start:{line:1054,column:16},end:{line:1054,column:17}},loc:{start:{line:1054,column:27},end:{line:1056,column:9}},line:1054},"49":{name:"(anonymous_49)",decl:{start:{line:1065,column:17},end:{line:1065,column:18}},loc:{start:{line:1065,column:28},end:{line:1067,column:9}},line:1065},"50":{name:"(anonymous_50)",decl:{start:{line:1076,column:19},end:{line:1076,column:20}},loc:{start:{line:1076,column:30},end:{line:1078,column:9}},line:1076},"51":{name:"(anonymous_51)",decl:{start:{line:1095,column:15},end:{line:1095,column:16}},loc:{start:{line:1095,column:43},end:{line:1114,column:9}},line:1095},"52":{name:"(anonymous_52)",decl:{start:{line:1100,column:35},end:{line:1100,column:36}},loc:{start:{line:1100,column:46},end:{line:1100,column:48}},line:1100},"53":{name:"(anonymous_53)",decl:{start:{line:1105,column:41},end:{line:1105,column:42}},loc:{start:{line:1105,column:65},end:{line:1113,column:13}},line:1105},"54":{name:"(anonymous_54)",decl:{start:{line:1124,column:16},end:{line:1124,column:17}},loc:{start:{line:1124,column:35},end:{line:1131,column:9}},line:1124},"55":{name:"(anonymous_55)",decl:{start:{line:1125,column:35},end:{line:1125,column:36}},loc:{start:{line:1125,column:46},end:{line:1125,column:48}},line:1125},"56":{name:"(anonymous_56)",decl:{start:{line:1128,column:36},end:{line:1128,column:37}},loc:{start:{line:1128,column:50},end:{line:1130,column:13}},line:1128},"57":{name:"(anonymous_57)",decl:{start:{line:1142,column:16},end:{line:1142,column:17}},loc:{start:{line:1142,column:42},end:{line:1171,column:9}},line:1142},"58":{name:"(anonymous_58)",decl:{start:{line:1143,column:35},end:{line:1143,column:36}},loc:{start:{line:1143,column:46},end:{line:1143,column:48}},line:1143},"59":{name:"(anonymous_59)",decl:{start:{line:1150,column:43},end:{line:1150,column:44}},loc:{start:{line:1150,column:67},end:{line:1168,column:13}},line:1150},"60":{name:"(anonymous_60)",decl:{start:{line:1156,column:31},end:{line:1156,column:32}},loc:{start:{line:1156,column:42},end:{line:1163,column:21}},line:1156},"61":{name:"(anonymous_61)",decl:{start:{line:1181,column:17},end:{line:1181,column:18}},loc:{start:{line:1181,column:36},end:{line:1193,column:9}},line:1181},"62":{name:"(anonymous_62)",decl:{start:{line:1182,column:35},end:{line:1182,column:36}},loc:{start:{line:1182,column:46},end:{line:1182,column:48}},line:1182},"63":{name:"(anonymous_63)",decl:{start:{line:1185,column:37},end:{line:1185,column:38}},loc:{start:{line:1185,column:61},end:{line:1192,column:13}},line:1185},"64":{name:"(anonymous_64)",decl:{start:{line:1203,column:16},end:{line:1203,column:17}},loc:{start:{line:1203,column:35},end:{line:1215,column:9}},line:1203},"65":{name:"(anonymous_65)",decl:{start:{line:1204,column:35},end:{line:1204,column:36}},loc:{start:{line:1204,column:46},end:{line:1204,column:48}},line:1204},"66":{name:"(anonymous_66)",decl:{start:{line:1207,column:36},end:{line:1207,column:37}},loc:{start:{line:1207,column:60},end:{line:1214,column:13}},line:1207},"67":{name:"(anonymous_67)",decl:{start:{line:1225,column:16},end:{line:1225,column:17}},loc:{start:{line:1225,column:35},end:{line:1237,column:9}},line:1225},"68":{name:"(anonymous_68)",decl:{start:{line:1226,column:35},end:{line:1226,column:36}},loc:{start:{line:1226,column:46},end:{line:1226,column:48}},line:1226},"69":{name:"(anonymous_69)",decl:{start:{line:1229,column:37},end:{line:1229,column:38}},loc:{start:{line:1229,column:61},end:{line:1236,column:13}},line:1229},"70":{name:"(anonymous_70)",decl:{start:{line:1272,column:14},end:{line:1272,column:15}},loc:{start:{line:1272,column:49},end:{line:1290,column:9}},line:1272},"71":{name:"(anonymous_71)",decl:{start:{line:1300,column:27},end:{line:1300,column:28}},loc:{start:{line:1300,column:43},end:{line:1302,column:9}},line:1300},"72":{name:"(anonymous_72)",decl:{start:{line:1313,column:15},end:{line:1313,column:16}},loc:{start:{line:1313,column:36},end:{line:1337,column:9}},line:1313},"73":{name:"(anonymous_73)",decl:{start:{line:1347,column:15},end:{line:1347,column:16}},loc:{start:{line:1347,column:26},end:{line:1349,column:9}},line:1347},"74":{name:"(anonymous_74)",decl:{start:{line:1358,column:16},end:{line:1358,column:17}},loc:{start:{line:1358,column:27},end:{line:1360,column:9}},line:1358},"75":{name:"(anonymous_75)",decl:{start:{line:1369,column:17},end:{line:1369,column:18}},loc:{start:{line:1369,column:28},end:{line:1371,column:9}},line:1369},"76":{name:"(anonymous_76)",decl:{start:{line:1388,column:15},end:{line:1388,column:16}},loc:{start:{line:1388,column:43},end:{line:1412,column:9}},line:1388},"77":{name:"(anonymous_77)",decl:{start:{line:1393,column:35},end:{line:1393,column:36}},loc:{start:{line:1393,column:46},end:{line:1393,column:48}},line:1393},"78":{name:"(anonymous_78)",decl:{start:{line:1401,column:44},end:{line:1401,column:45}},loc:{start:{line:1401,column:68},end:{line:1409,column:13}},line:1401},"79":{name:"(anonymous_79)",decl:{start:{line:1414,column:18},end:{line:1414,column:19}},loc:{start:{line:1414,column:42},end:{line:1425,column:9}},line:1414},"80":{name:"(anonymous_80)",decl:{start:{line:1448,column:14},end:{line:1448,column:15}},loc:{start:{line:1448,column:38},end:{line:1505,column:9}},line:1448},"81":{name:"(anonymous_81)",decl:{start:{line:1524,column:16},end:{line:1524,column:17}},loc:{start:{line:1524,column:43},end:{line:1557,column:9}},line:1524},"82":{name:"(anonymous_82)",decl:{start:{line:1525,column:35},end:{line:1525,column:36}},loc:{start:{line:1525,column:46},end:{line:1525,column:48}},line:1525},"83":{name:"(anonymous_83)",decl:{start:{line:1527,column:44},end:{line:1527,column:45}},loc:{start:{line:1527,column:68},end:{line:1554,column:13}},line:1527},"84":{name:"(anonymous_84)",decl:{start:{line:1541,column:37},end:{line:1541,column:38}},loc:{start:{line:1541,column:48},end:{line:1548,column:25}},line:1541},"85":{name:"(anonymous_85)",decl:{start:{line:1574,column:14},end:{line:1574,column:15}},loc:{start:{line:1574,column:33},end:{line:1578,column:9}},line:1574},"86":{name:"(anonymous_86)",decl:{start:{line:1575,column:35},end:{line:1575,column:36}},loc:{start:{line:1575,column:46},end:{line:1575,column:48}},line:1575},"87":{name:"(anonymous_87)",decl:{start:{line:1595,column:14},end:{line:1595,column:15}},loc:{start:{line:1595,column:25},end:{line:1597,column:9}},line:1595},"88":{name:"(anonymous_88)",decl:{start:{line:1613,column:14},end:{line:1613,column:15}},loc:{start:{line:1613,column:49},end:{line:1621,column:9}},line:1613},"89":{name:"(anonymous_89)",decl:{start:{line:1636,column:20},end:{line:1636,column:21}},loc:{start:{line:1636,column:31},end:{line:1638,column:9}},line:1636},"90":{name:"(anonymous_90)",decl:{start:{line:1656,column:21},end:{line:1656,column:22}},loc:{start:{line:1656,column:40},end:{line:1665,column:9}},line:1656},"91":{name:"(anonymous_91)",decl:{start:{line:1657,column:35},end:{line:1657,column:36}},loc:{start:{line:1657,column:46},end:{line:1657,column:48}},line:1657},"92":{name:"(anonymous_92)",decl:{start:{line:1660,column:51},end:{line:1660,column:52}},loc:{start:{line:1660,column:65},end:{line:1662,column:13}},line:1660},"93":{name:"(anonymous_93)",decl:{start:{line:1688,column:18},end:{line:1688,column:19}},loc:{start:{line:1688,column:46},end:{line:1711,column:9}},line:1688},"94":{name:"(anonymous_94)",decl:{start:{line:1694,column:35},end:{line:1694,column:36}},loc:{start:{line:1694,column:46},end:{line:1694,column:48}},line:1694},"95":{name:"(anonymous_95)",decl:{start:{line:1698,column:53},end:{line:1698,column:54}},loc:{start:{line:1698,column:77},end:{line:1708,column:13}},line:1698},"96":{name:"(anonymous_96)",decl:{start:{line:1725,column:25},end:{line:1725,column:26}},loc:{start:{line:1725,column:36},end:{line:1727,column:9}},line:1725},"97":{name:"(anonymous_97)",decl:{start:{line:1748,column:17},end:{line:1748,column:18}},loc:{start:{line:1748,column:45},end:{line:1777,column:9}},line:1748},"98":{name:"(anonymous_98)",decl:{start:{line:1754,column:35},end:{line:1754,column:36}},loc:{start:{line:1754,column:46},end:{line:1754,column:48}},line:1754},"99":{name:"(anonymous_99)",decl:{start:{line:1758,column:48},end:{line:1758,column:49}},loc:{start:{line:1758,column:72},end:{line:1776,column:13}},line:1758},"100":{name:"(anonymous_100)",decl:{start:{line:1794,column:22},end:{line:1794,column:23}},loc:{start:{line:1794,column:41},end:{line:1801,column:9}},line:1794},"101":{name:"(anonymous_101)",decl:{start:{line:1795,column:35},end:{line:1795,column:36}},loc:{start:{line:1795,column:46},end:{line:1795,column:48}},line:1795},"102":{name:"(anonymous_102)",decl:{start:{line:1798,column:44},end:{line:1798,column:45}},loc:{start:{line:1798,column:68},end:{line:1800,column:13}},line:1798},"103":{name:"(anonymous_103)",decl:{start:{line:1815,column:16},end:{line:1815,column:17}},loc:{start:{line:1815,column:43},end:{line:1842,column:9}},line:1815},"104":{name:"(anonymous_104)",decl:{start:{line:1820,column:37},end:{line:1820,column:38}},loc:{start:{line:1820,column:59},end:{line:1835,column:17}},line:1820},"105":{name:"(anonymous_105)",decl:{start:{line:1826,column:52},end:{line:1826,column:53}},loc:{start:{line:1826,column:63},end:{line:1833,column:25}},line:1826},"106":{name:"(anonymous_106)",decl:{start:{line:1860,column:14},end:{line:1860,column:15}},loc:{start:{line:1860,column:25},end:{line:1862,column:9}},line:1860},"107":{name:"(anonymous_107)",decl:{start:{line:1872,column:27},end:{line:1872,column:28}},loc:{start:{line:1872,column:43},end:{line:1875,column:9}},line:1872},"108":{name:"(anonymous_108)",decl:{start:{line:1890,column:14},end:{line:1890,column:15}},loc:{start:{line:1890,column:43},end:{line:1892,column:9}},line:1890},"109":{name:"(anonymous_109)",decl:{start:{line:1909,column:14},end:{line:1909,column:15}},loc:{start:{line:1909,column:26},end:{line:1911,column:9}},line:1909},"110":{name:"(anonymous_110)",decl:{start:{line:1927,column:14},end:{line:1927,column:15}},loc:{start:{line:1927,column:50},end:{line:1930,column:9}},line:1927},"111":{name:"(anonymous_111)",decl:{start:{line:1956,column:14},end:{line:1956,column:15}},loc:{start:{line:1956,column:25},end:{line:1958,column:9}},line:1956},"112":{name:"(anonymous_112)",decl:{start:{line:1970,column:27},end:{line:1970,column:28}},loc:{start:{line:1970,column:43},end:{line:1973,column:9}},line:1970},"113":{name:"(anonymous_113)",decl:{start:{line:1988,column:14},end:{line:1988,column:15}},loc:{start:{line:1988,column:43},end:{line:1990,column:9}},line:1988},"114":{name:"(anonymous_114)",decl:{start:{line:2008,column:14},end:{line:2008,column:15}},loc:{start:{line:2008,column:25},end:{line:2010,column:9}},line:2008},"115":{name:"(anonymous_115)",decl:{start:{line:2020,column:17},end:{line:2020,column:18}},loc:{start:{line:2020,column:28},end:{line:2022,column:9}},line:2020},"116":{name:"(anonymous_116)",decl:{start:{line:2030,column:19},end:{line:2030,column:20}},loc:{start:{line:2030,column:30},end:{line:2032,column:9}},line:2030},"117":{name:"(anonymous_117)",decl:{start:{line:2043,column:22},end:{line:2043,column:23}},loc:{start:{line:2043,column:33},end:{line:2046,column:9}},line:2043},"118":{name:"(anonymous_118)",decl:{start:{line:2056,column:24},end:{line:2056,column:25}},loc:{start:{line:2056,column:35},end:{line:2058,column:9}},line:2056},"119":{name:"(anonymous_119)",decl:{start:{line:2066,column:25},end:{line:2066,column:26}},loc:{start:{line:2066,column:36},end:{line:2068,column:9}},line:2066},"120":{name:"(anonymous_120)",decl:{start:{line:2077,column:18},end:{line:2077,column:19}},loc:{start:{line:2077,column:29},end:{line:2079,column:9}},line:2077},"121":{name:"(anonymous_121)",decl:{start:{line:2087,column:13},end:{line:2087,column:14}},loc:{start:{line:2087,column:24},end:{line:2089,column:9}},line:2087},"122":{name:"(anonymous_122)",decl:{start:{line:2097,column:21},end:{line:2097,column:22}},loc:{start:{line:2097,column:32},end:{line:2099,column:9}},line:2097},"123":{name:"(anonymous_123)",decl:{start:{line:2109,column:29},end:{line:2109,column:30}},loc:{start:{line:2109,column:40},end:{line:2111,column:9}},line:2109},"124":{name:"(anonymous_124)",decl:{start:{line:2121,column:29},end:{line:2121,column:30}},loc:{start:{line:2121,column:40},end:{line:2123,column:9}},line:2121},"125":{name:"(anonymous_125)",decl:{start:{line:2139,column:14},end:{line:2139,column:15}},loc:{start:{line:2139,column:49},end:{line:2142,column:9}},line:2139},"126":{name:"(anonymous_126)",decl:{start:{line:2160,column:14},end:{line:2160,column:15}},loc:{start:{line:2160,column:25},end:{line:2162,column:9}},line:2160},"127":{name:"(anonymous_127)",decl:{start:{line:2172,column:15},end:{line:2172,column:16}},loc:{start:{line:2172,column:26},end:{line:2174,column:9}},line:2172},"128":{name:"(anonymous_128)",decl:{start:{line:2193,column:14},end:{line:2193,column:15}},loc:{start:{line:2193,column:42},end:{line:2221,column:9}},line:2193},"129":{name:"(anonymous_129)",decl:{start:{line:2199,column:35},end:{line:2199,column:36}},loc:{start:{line:2199,column:46},end:{line:2199,column:48}},line:2199},"130":{name:"(anonymous_130)",decl:{start:{line:2203,column:41},end:{line:2203,column:42}},loc:{start:{line:2203,column:65},end:{line:2220,column:13}},line:2203},"131":{name:"(anonymous_131)",decl:{start:{line:2237,column:14},end:{line:2237,column:15}},loc:{start:{line:2237,column:49},end:{line:2242,column:9}},line:2237},"132":{name:"(anonymous_132)",decl:{start:{line:2261,column:14},end:{line:2261,column:15}},loc:{start:{line:2261,column:25},end:{line:2263,column:9}},line:2261},"133":{name:"(anonymous_133)",decl:{start:{line:2273,column:27},end:{line:2273,column:28}},loc:{start:{line:2273,column:43},end:{line:2276,column:9}},line:2273},"134":{name:"(anonymous_134)",decl:{start:{line:2283,column:16},end:{line:2283,column:17}},loc:{start:{line:2283,column:27},end:{line:2285,column:9}},line:2283},"135":{name:"(anonymous_135)",decl:{start:{line:2300,column:14},end:{line:2300,column:15}},loc:{start:{line:2300,column:43},end:{line:2305,column:9}},line:2300},"136":{name:"(anonymous_136)",decl:{start:{line:2330,column:14},end:{line:2330,column:15}},loc:{start:{line:2330,column:25},end:{line:2332,column:9}},line:2330},"137":{name:"(anonymous_137)",decl:{start:{line:2344,column:14},end:{line:2344,column:15}},loc:{start:{line:2344,column:38},end:{line:2350,column:9}},line:2344},"138":{name:"(anonymous_138)",decl:{start:{line:2367,column:19},end:{line:2367,column:20}},loc:{start:{line:2367,column:38},end:{line:2379,column:9}},line:2367},"139":{name:"(anonymous_139)",decl:{start:{line:2368,column:35},end:{line:2368,column:36}},loc:{start:{line:2368,column:46},end:{line:2368,column:48}},line:2368},"140":{name:"(anonymous_140)",decl:{start:{line:2371,column:41},end:{line:2371,column:42}},loc:{start:{line:2371,column:65},end:{line:2378,column:13}},line:2371},"141":{name:"(anonymous_141)",decl:{start:{line:2396,column:20},end:{line:2396,column:21}},loc:{start:{line:2396,column:39},end:{line:2408,column:9}},line:2396},"142":{name:"(anonymous_142)",decl:{start:{line:2397,column:35},end:{line:2397,column:36}},loc:{start:{line:2397,column:46},end:{line:2397,column:48}},line:2397},"143":{name:"(anonymous_143)",decl:{start:{line:2400,column:42},end:{line:2400,column:43}},loc:{start:{line:2400,column:66},end:{line:2407,column:13}},line:2400},"144":{name:"(anonymous_144)",decl:{start:{line:2434,column:14},end:{line:2434,column:15}},loc:{start:{line:2434,column:25},end:{line:2436,column:9}},line:2434},"145":{name:"(anonymous_145)",decl:{start:{line:2446,column:27},end:{line:2446,column:28}},loc:{start:{line:2446,column:43},end:{line:2448,column:9}},line:2446},"146":{name:"(anonymous_146)",decl:{start:{line:2459,column:14},end:{line:2459,column:15}},loc:{start:{line:2459,column:32},end:{line:2461,column:9}},line:2459},"147":{name:"(anonymous_147)",decl:{start:{line:2477,column:14},end:{line:2477,column:15}},loc:{start:{line:2477,column:25},end:{line:2479,column:9}},line:2477},"148":{name:"(anonymous_148)",decl:{start:{line:2490,column:14},end:{line:2490,column:15}},loc:{start:{line:2490,column:32},end:{line:2493,column:9}},line:2490},"149":{name:"(anonymous_149)",decl:{start:{line:2510,column:14},end:{line:2510,column:15}},loc:{start:{line:2510,column:25},end:{line:2512,column:9}},line:2510},"150":{name:"(anonymous_150)",decl:{start:{line:2524,column:14},end:{line:2524,column:15}},loc:{start:{line:2524,column:38},end:{line:2527,column:9}},line:2524},"151":{name:"(anonymous_151)",decl:{start:{line:2553,column:14},end:{line:2553,column:15}},loc:{start:{line:2553,column:25},end:{line:2555,column:9}},line:2553},"152":{name:"(anonymous_152)",decl:{start:{line:2565,column:27},end:{line:2565,column:28}},loc:{start:{line:2565,column:43},end:{line:2567,column:9}},line:2565},"153":{name:"(anonymous_153)",decl:{start:{line:2578,column:14},end:{line:2578,column:15}},loc:{start:{line:2578,column:32},end:{line:2580,column:9}},line:2578},"154":{name:"(anonymous_154)",decl:{start:{line:2592,column:16},end:{line:2592,column:17}},loc:{start:{line:2592,column:43},end:{line:2617,column:9}},line:2592},"155":{name:"(anonymous_155)",decl:{start:{line:2593,column:35},end:{line:2593,column:36}},loc:{start:{line:2593,column:46},end:{line:2593,column:48}},line:2593},"156":{name:"(anonymous_156)",decl:{start:{line:2596,column:44},end:{line:2596,column:45}},loc:{start:{line:2596,column:68},end:{line:2614,column:13}},line:2596},"157":{name:"(anonymous_157)",decl:{start:{line:2605,column:33},end:{line:2605,column:34}},loc:{start:{line:2605,column:44},end:{line:2612,column:21}},line:2605},"158":{name:"(anonymous_158)",decl:{start:{line:2634,column:14},end:{line:2634,column:15}},loc:{start:{line:2634,column:25},end:{line:2636,column:9}},line:2634},"159":{name:"(anonymous_159)",decl:{start:{line:2652,column:14},end:{line:2652,column:15}},loc:{start:{line:2652,column:49},end:{line:2655,column:9}},line:2652},"160":{name:"(anonymous_160)",decl:{start:{line:2672,column:14},end:{line:2672,column:15}},loc:{start:{line:2672,column:25},end:{line:2674,column:9}},line:2672},"161":{name:"(anonymous_161)",decl:{start:{line:2684,column:27},end:{line:2684,column:28}},loc:{start:{line:2684,column:43},end:{line:2687,column:9}},line:2684},"162":{name:"(anonymous_162)",decl:{start:{line:2702,column:14},end:{line:2702,column:15}},loc:{start:{line:2702,column:43},end:{line:2704,column:9}},line:2702},"163":{name:"(anonymous_163)",decl:{start:{line:2720,column:14},end:{line:2720,column:15}},loc:{start:{line:2720,column:25},end:{line:2722,column:9}},line:2720},"164":{name:"(anonymous_164)",decl:{start:{line:2738,column:14},end:{line:2738,column:15}},loc:{start:{line:2738,column:49},end:{line:2743,column:9}},line:2738},"165":{name:"(anonymous_165)",decl:{start:{line:2766,column:21},end:{line:2766,column:22}},loc:{start:{line:2766,column:55},end:{line:2782,column:9}},line:2766},"166":{name:"(anonymous_166)",decl:{start:{line:2772,column:35},end:{line:2772,column:36}},loc:{start:{line:2772,column:46},end:{line:2772,column:48}},line:2772},"167":{name:"(anonymous_167)",decl:{start:{line:2779,column:51},end:{line:2779,column:52}},loc:{start:{line:2779,column:73},end:{line:2781,column:13}},line:2779},"168":{name:"(anonymous_168)",decl:{start:{line:2784,column:16},end:{line:2784,column:17}},loc:{start:{line:2784,column:35},end:{line:2791,column:9}},line:2784},"169":{name:"(anonymous_169)",decl:{start:{line:2808,column:14},end:{line:2808,column:15}},loc:{start:{line:2808,column:25},end:{line:2810,column:9}},line:2808},"170":{name:"(anonymous_170)",decl:{start:{line:2820,column:27},end:{line:2820,column:28}},loc:{start:{line:2820,column:43},end:{line:2823,column:9}},line:2820},"171":{name:"(anonymous_171)",decl:{start:{line:2838,column:14},end:{line:2838,column:15}},loc:{start:{line:2838,column:43},end:{line:2840,column:9}},line:2838},"172":{name:"(anonymous_172)",decl:{start:{line:2859,column:16},end:{line:2859,column:17}},loc:{start:{line:2859,column:49},end:{line:2872,column:9}},line:2859},"173":{name:"(anonymous_173)",decl:{start:{line:2889,column:14},end:{line:2889,column:15}},loc:{start:{line:2889,column:25},end:{line:2892,column:9}},line:2889},"174":{name:"(anonymous_174)",decl:{start:{line:2909,column:14},end:{line:2909,column:15}},loc:{start:{line:2909,column:55},end:{line:2913,column:9}},line:2909},"175":{name:"(anonymous_175)",decl:{start:{line:2931,column:14},end:{line:2931,column:15}},loc:{start:{line:2931,column:25},end:{line:2933,column:9}},line:2931},"176":{name:"(anonymous_176)",decl:{start:{line:2945,column:26},end:{line:2945,column:27}},loc:{start:{line:2945,column:37},end:{line:2947,column:9}},line:2945},"177":{name:"(anonymous_177)",decl:{start:{line:2957,column:27},end:{line:2957,column:28}},loc:{start:{line:2957,column:43},end:{line:2960,column:9}},line:2957},"178":{name:"(anonymous_178)",decl:{start:{line:2976,column:14},end:{line:2976,column:15}},loc:{start:{line:2976,column:49},end:{line:2979,column:9}},line:2976},"179":{name:"(anonymous_179)",decl:{start:{line:2998,column:16},end:{line:2998,column:17}},loc:{start:{line:2998,column:55},end:{line:3016,column:9}},line:2998},"180":{name:"(anonymous_180)",decl:{start:{line:3042,column:14},end:{line:3042,column:15}},loc:{start:{line:3042,column:25},end:{line:3044,column:9}},line:3042},"181":{name:"(anonymous_181)",decl:{start:{line:3054,column:27},end:{line:3054,column:28}},loc:{start:{line:3054,column:43},end:{line:3056,column:9}},line:3054},"182":{name:"(anonymous_182)",decl:{start:{line:3071,column:14},end:{line:3071,column:15}},loc:{start:{line:3071,column:43},end:{line:3077,column:9}},line:3071},"183":{name:"(anonymous_183)",decl:{start:{line:3095,column:16},end:{line:3095,column:17}},loc:{start:{line:3095,column:45},end:{line:3123,column:9}},line:3095},"184":{name:"(anonymous_184)",decl:{start:{line:3102,column:35},end:{line:3102,column:36}},loc:{start:{line:3102,column:46},end:{line:3102,column:48}},line:3102},"185":{name:"(anonymous_185)",decl:{start:{line:3105,column:56},end:{line:3105,column:57}},loc:{start:{line:3105,column:80},end:{line:3120,column:13}},line:3105},"186":{name:"(anonymous_186)",decl:{start:{line:3111,column:33},end:{line:3111,column:34}},loc:{start:{line:3111,column:44},end:{line:3118,column:21}},line:3111},"187":{name:"(anonymous_187)",decl:{start:{line:3125,column:23},end:{line:3125,column:24}},loc:{start:{line:3125,column:48},end:{line:3151,column:9}},line:3125},"188":{name:"(anonymous_188)",decl:{start:{line:3133,column:58},end:{line:3133,column:59}},loc:{start:{line:3133,column:63},end:{line:3133,column:82}},line:3133},"189":{name:"(anonymous_189)",decl:{start:{line:3153,column:25},end:{line:3153,column:26}},loc:{start:{line:3153,column:54},end:{line:3169,column:9}},line:3153},"190":{name:"(anonymous_190)",decl:{start:{line:3171,column:19},end:{line:3171,column:20}},loc:{start:{line:3171,column:90},end:{line:3212,column:9}},line:3171},"191":{name:"(anonymous_191)",decl:{start:{line:3172,column:35},end:{line:3172,column:36}},loc:{start:{line:3172,column:46},end:{line:3172,column:48}},line:3172},"192":{name:"(anonymous_192)",decl:{start:{line:3185,column:20},end:{line:3185,column:21}},loc:{start:{line:3185,column:38},end:{line:3185,column:92}},line:3185},"193":{name:"(anonymous_193)",decl:{start:{line:3200,column:55},end:{line:3200,column:56}},loc:{start:{line:3200,column:81},end:{line:3203,column:17}},line:3200},"194":{name:"(anonymous_194)",decl:{start:{line:3207,column:49},end:{line:3207,column:50}},loc:{start:{line:3207,column:73},end:{line:3210,column:17}},line:3207},"195":{name:"(anonymous_195)",decl:{start:{line:3229,column:14},end:{line:3229,column:15}},loc:{start:{line:3229,column:25},end:{line:3231,column:9}},line:3229},"196":{name:"(anonymous_196)",decl:{start:{line:3247,column:14},end:{line:3247,column:15}},loc:{start:{line:3247,column:48},end:{line:3269,column:9}},line:3247},"197":{name:"(anonymous_197)",decl:{start:{line:3286,column:16},end:{line:3286,column:17}},loc:{start:{line:3286,column:35},end:{line:3290,column:9}},line:3286},"198":{name:"(anonymous_198)",decl:{start:{line:3307,column:24},end:{line:3307,column:25}},loc:{start:{line:3307,column:43},end:{line:3316,column:9}},line:3307},"199":{name:"(anonymous_199)",decl:{start:{line:3308,column:35},end:{line:3308,column:36}},loc:{start:{line:3308,column:46},end:{line:3308,column:48}},line:3308},"200":{name:"(anonymous_200)",decl:{start:{line:3311,column:71},end:{line:3311,column:72}},loc:{start:{line:3311,column:85},end:{line:3313,column:13}},line:3311},"201":{name:"(anonymous_201)",decl:{start:{line:3333,column:23},end:{line:3333,column:24}},loc:{start:{line:3333,column:42},end:{line:3342,column:9}},line:3333},"202":{name:"(anonymous_202)",decl:{start:{line:3334,column:35},end:{line:3334,column:36}},loc:{start:{line:3334,column:46},end:{line:3334,column:48}},line:3334},"203":{name:"(anonymous_203)",decl:{start:{line:3337,column:70},end:{line:3337,column:71}},loc:{start:{line:3337,column:84},end:{line:3339,column:13}},line:3337},"204":{name:"(anonymous_204)",decl:{start:{line:3360,column:16},end:{line:3360,column:17}},loc:{start:{line:3360,column:43},end:{line:3374,column:9}},line:3360},"205":{name:"(anonymous_205)",decl:{start:{line:3361,column:35},end:{line:3361,column:36}},loc:{start:{line:3361,column:46},end:{line:3361,column:48}},line:3361},"206":{name:"(anonymous_206)",decl:{start:{line:3366,column:46},end:{line:3366,column:47}},loc:{start:{line:3366,column:70},end:{line:3373,column:13}},line:3366},"207":{name:"(anonymous_207)",decl:{start:{line:3391,column:18},end:{line:3391,column:19}},loc:{start:{line:3391,column:37},end:{line:3400,column:9}},line:3391},"208":{name:"(anonymous_208)",decl:{start:{line:3392,column:35},end:{line:3392,column:36}},loc:{start:{line:3392,column:46},end:{line:3392,column:48}},line:3392},"209":{name:"(anonymous_209)",decl:{start:{line:3395,column:65},end:{line:3395,column:66}},loc:{start:{line:3395,column:79},end:{line:3397,column:13}},line:3395},"210":{name:"(anonymous_210)",decl:{start:{line:3413,column:18},end:{line:3413,column:19}},loc:{start:{line:3413,column:41},end:{line:3415,column:9}},line:3413},"211":{name:"(anonymous_211)",decl:{start:{line:3432,column:15},end:{line:3432,column:16}},loc:{start:{line:3432,column:34},end:{line:3441,column:9}},line:3432},"212":{name:"(anonymous_212)",decl:{start:{line:3433,column:35},end:{line:3433,column:36}},loc:{start:{line:3433,column:46},end:{line:3433,column:48}},line:3433},"213":{name:"(anonymous_213)",decl:{start:{line:3436,column:62},end:{line:3436,column:63}},loc:{start:{line:3436,column:76},end:{line:3438,column:13}},line:3436},"214":{name:"(anonymous_214)",decl:{start:{line:3459,column:17},end:{line:3459,column:18}},loc:{start:{line:3459,column:44},end:{line:3473,column:9}},line:3459},"215":{name:"(anonymous_215)",decl:{start:{line:3460,column:35},end:{line:3460,column:36}},loc:{start:{line:3460,column:46},end:{line:3460,column:48}},line:3460},"216":{name:"(anonymous_216)",decl:{start:{line:3465,column:55},end:{line:3465,column:56}},loc:{start:{line:3465,column:79},end:{line:3472,column:13}},line:3465},"217":{name:"(anonymous_217)",decl:{start:{line:3496,column:17},end:{line:3496,column:18}},loc:{start:{line:3496,column:44},end:{line:3510,column:9}},line:3496},"218":{name:"(anonymous_218)",decl:{start:{line:3497,column:35},end:{line:3497,column:36}},loc:{start:{line:3497,column:46},end:{line:3497,column:48}},line:3497},"219":{name:"(anonymous_219)",decl:{start:{line:3502,column:47},end:{line:3502,column:48}},loc:{start:{line:3502,column:71},end:{line:3509,column:13}},line:3502},"220":{name:"(anonymous_220)",decl:{start:{line:3527,column:19},end:{line:3527,column:20}},loc:{start:{line:3527,column:38},end:{line:3539,column:9}},line:3527},"221":{name:"(anonymous_221)",decl:{start:{line:3528,column:35},end:{line:3528,column:36}},loc:{start:{line:3528,column:46},end:{line:3528,column:48}},line:3528},"222":{name:"(anonymous_222)",decl:{start:{line:3531,column:46},end:{line:3531,column:47}},loc:{start:{line:3531,column:70},end:{line:3538,column:13}},line:3531},"223":{name:"(anonymous_223)",decl:{start:{line:3557,column:21},end:{line:3557,column:22}},loc:{start:{line:3557,column:47},end:{line:3566,column:9}},line:3557},"224":{name:"(anonymous_224)",decl:{start:{line:3558,column:35},end:{line:3558,column:36}},loc:{start:{line:3558,column:46},end:{line:3558,column:48}},line:3558},"225":{name:"(anonymous_225)",decl:{start:{line:3561,column:85},end:{line:3561,column:86}},loc:{start:{line:3561,column:99},end:{line:3563,column:13}},line:3561},"226":{name:"(anonymous_226)",decl:{start:{line:3585,column:16},end:{line:3585,column:17}},loc:{start:{line:3585,column:42},end:{line:3594,column:9}},line:3585},"227":{name:"(anonymous_227)",decl:{start:{line:3586,column:35},end:{line:3586,column:36}},loc:{start:{line:3586,column:46},end:{line:3586,column:48}},line:3586},"228":{name:"(anonymous_228)",decl:{start:{line:3589,column:75},end:{line:3589,column:76}},loc:{start:{line:3589,column:89},end:{line:3591,column:13}},line:3589},"229":{name:"(anonymous_229)",decl:{start:{line:3612,column:17},end:{line:3612,column:18}},loc:{start:{line:3612,column:44},end:{line:3624,column:9}},line:3612},"230":{name:"(anonymous_230)",decl:{start:{line:3613,column:35},end:{line:3613,column:36}},loc:{start:{line:3613,column:46},end:{line:3613,column:48}},line:3613},"231":{name:"(anonymous_231)",decl:{start:{line:3616,column:47},end:{line:3616,column:48}},loc:{start:{line:3616,column:71},end:{line:3623,column:13}},line:3616},"232":{name:"(anonymous_232)",decl:{start:{line:3642,column:18},end:{line:3642,column:19}},loc:{start:{line:3642,column:45},end:{line:3654,column:9}},line:3642},"233":{name:"(anonymous_233)",decl:{start:{line:3643,column:35},end:{line:3643,column:36}},loc:{start:{line:3643,column:46},end:{line:3643,column:48}},line:3643},"234":{name:"(anonymous_234)",decl:{start:{line:3646,column:48},end:{line:3646,column:49}},loc:{start:{line:3646,column:72},end:{line:3653,column:13}},line:3646},"235":{name:"(anonymous_235)",decl:{start:{line:3672,column:15},end:{line:3672,column:16}},loc:{start:{line:3672,column:34},end:{line:3681,column:9}},line:3672},"236":{name:"(anonymous_236)",decl:{start:{line:3673,column:35},end:{line:3673,column:36}},loc:{start:{line:3673,column:46},end:{line:3673,column:48}},line:3673},"237":{name:"(anonymous_237)",decl:{start:{line:3676,column:62},end:{line:3676,column:63}},loc:{start:{line:3676,column:76},end:{line:3678,column:13}},line:3676},"238":{name:"(anonymous_238)",decl:{start:{line:3699,column:15},end:{line:3699,column:16}},loc:{start:{line:3699,column:44},end:{line:3787,column:9}},line:3699},"239":{name:"(anonymous_239)",decl:{start:{line:3715,column:49},end:{line:3715,column:50}},loc:{start:{line:3715,column:60},end:{line:3715,column:62}},line:3715},"240":{name:"(anonymous_240)",decl:{start:{line:3716,column:55},end:{line:3716,column:56}},loc:{start:{line:3716,column:66},end:{line:3716,column:68}},line:3716},"241":{name:"(anonymous_241)",decl:{start:{line:3717,column:47},end:{line:3717,column:48}},loc:{start:{line:3717,column:58},end:{line:3717,column:60}},line:3717},"242":{name:"(anonymous_242)",decl:{start:{line:3718,column:51},end:{line:3718,column:52}},loc:{start:{line:3718,column:62},end:{line:3718,column:64}},line:3718},"243":{name:"(anonymous_243)",decl:{start:{line:3719,column:49},end:{line:3719,column:50}},loc:{start:{line:3719,column:60},end:{line:3719,column:62}},line:3719},"244":{name:"(anonymous_244)",decl:{start:{line:3722,column:57},end:{line:3722,column:58}},loc:{start:{line:3722,column:68},end:{line:3722,column:70}},line:3722},"245":{name:"(anonymous_245)",decl:{start:{line:3723,column:75},end:{line:3723,column:76}},loc:{start:{line:3723,column:86},end:{line:3723,column:88}},line:3723},"246":{name:"(anonymous_246)",decl:{start:{line:3729,column:16},end:{line:3729,column:17}},loc:{start:{line:3729,column:27},end:{line:3729,column:51}},line:3729},"247":{name:"(anonymous_247)",decl:{start:{line:3730,column:16},end:{line:3730,column:17}},loc:{start:{line:3730,column:40},end:{line:3780,column:17}},line:3730},"248":{name:"(anonymous_248)",decl:{start:{line:3731,column:31},end:{line:3731,column:32}},loc:{start:{line:3731,column:50},end:{line:3779,column:21}},line:3731},"249":{name:"(anonymous_249)",decl:{start:{line:3781,column:16},end:{line:3781,column:17}},loc:{start:{line:3781,column:30},end:{line:3785,column:17}},line:3781},"250":{name:"(anonymous_250)",decl:{start:{line:3804,column:17},end:{line:3804,column:18}},loc:{start:{line:3804,column:36},end:{line:3813,column:9}},line:3804},"251":{name:"(anonymous_251)",decl:{start:{line:3805,column:35},end:{line:3805,column:36}},loc:{start:{line:3805,column:46},end:{line:3805,column:48}},line:3805},"252":{name:"(anonymous_252)",decl:{start:{line:3808,column:64},end:{line:3808,column:65}},loc:{start:{line:3808,column:78},end:{line:3810,column:13}},line:3808},"253":{name:"(anonymous_253)",decl:{start:{line:3830,column:14},end:{line:3830,column:15}},loc:{start:{line:3830,column:25},end:{line:3832,column:9}},line:3830},"254":{name:"(anonymous_254)",decl:{start:{line:3842,column:27},end:{line:3842,column:28}},loc:{start:{line:3842,column:43},end:{line:3846,column:9}},line:3842},"255":{name:"(anonymous_255)",decl:{start:{line:3861,column:14},end:{line:3861,column:15}},loc:{start:{line:3861,column:43},end:{line:3867,column:9}},line:3861},"256":{name:"(anonymous_256)",decl:{start:{line:3886,column:16},end:{line:3886,column:17}},loc:{start:{line:3886,column:50},end:{line:3917,column:9}},line:3886},"257":{name:"(anonymous_257)",decl:{start:{line:3895,column:35},end:{line:3895,column:36}},loc:{start:{line:3895,column:46},end:{line:3895,column:48}},line:3895},"258":{name:"(anonymous_258)",decl:{start:{line:3908,column:41},end:{line:3908,column:42}},loc:{start:{line:3908,column:65},end:{line:3916,column:13}},line:3908},"259":{name:"(anonymous_259)",decl:{start:{line:3944,column:16},end:{line:3944,column:17}},loc:{start:{line:3944,column:50},end:{line:3946,column:9}},line:3944},"260":{name:"(anonymous_260)",decl:{start:{line:3969,column:23},end:{line:3969,column:24}},loc:{start:{line:3969,column:57},end:{line:4014,column:9}},line:3969},"261":{name:"(anonymous_261)",decl:{start:{line:3978,column:35},end:{line:3978,column:36}},loc:{start:{line:3978,column:46},end:{line:3978,column:48}},line:3978},"262":{name:"(anonymous_262)",decl:{start:{line:4003,column:16},end:{line:4003,column:17}},loc:{start:{line:4003,column:40},end:{line:4010,column:17}},line:4003},"263":{name:"(anonymous_263)",decl:{start:{line:4071,column:14},end:{line:4071,column:15}},loc:{start:{line:4071,column:30},end:{line:4086,column:9}},line:4071},"264":{name:"(anonymous_264)",decl:{start:{line:4095,column:18},end:{line:4095,column:19}},loc:{start:{line:4095,column:29},end:{line:4097,column:9}},line:4095},"265":{name:"(anonymous_265)",decl:{start:{line:4106,column:18},end:{line:4106,column:19}},loc:{start:{line:4106,column:29},end:{line:4108,column:9}},line:4106},"266":{name:"(anonymous_266)",decl:{start:{line:4117,column:21},end:{line:4117,column:22}},loc:{start:{line:4117,column:32},end:{line:4119,column:9}},line:4117},"267":{name:"(anonymous_267)",decl:{start:{line:4128,column:23},end:{line:4128,column:24}},loc:{start:{line:4128,column:34},end:{line:4130,column:9}},line:4128},"268":{name:"(anonymous_268)",decl:{start:{line:4139,column:22},end:{line:4139,column:23}},loc:{start:{line:4139,column:33},end:{line:4141,column:9}},line:4139},"269":{name:"(anonymous_269)",decl:{start:{line:4150,column:16},end:{line:4150,column:17}},loc:{start:{line:4150,column:27},end:{line:4152,column:9}},line:4150},"270":{name:"(anonymous_270)",decl:{start:{line:4161,column:19},end:{line:4161,column:20}},loc:{start:{line:4161,column:30},end:{line:4163,column:9}},line:4161},"271":{name:"(anonymous_271)",decl:{start:{line:4191,column:14},end:{line:4191,column:15}},loc:{start:{line:4191,column:30},end:{line:4198,column:9}},line:4191},"272":{name:"(anonymous_272)",decl:{start:{line:4257,column:14},end:{line:4257,column:15}},loc:{start:{line:4257,column:30},end:{line:4283,column:9}},line:4257},"273":{name:"(anonymous_273)",decl:{start:{line:4292,column:26},end:{line:4292,column:27}},loc:{start:{line:4292,column:37},end:{line:4294,column:9}},line:4292},"274":{name:"(anonymous_274)",decl:{start:{line:4303,column:20},end:{line:4303,column:21}},loc:{start:{line:4303,column:31},end:{line:4305,column:9}},line:4303},"275":{name:"(anonymous_275)",decl:{start:{line:4314,column:18},end:{line:4314,column:19}},loc:{start:{line:4314,column:29},end:{line:4316,column:9}},line:4314},"276":{name:"(anonymous_276)",decl:{start:{line:4325,column:16},end:{line:4325,column:17}},loc:{start:{line:4325,column:27},end:{line:4327,column:9}},line:4325},"277":{name:"(anonymous_277)",decl:{start:{line:4336,column:15},end:{line:4336,column:16}},loc:{start:{line:4336,column:26},end:{line:4338,column:9}},line:4336},"278":{name:"(anonymous_278)",decl:{start:{line:4347,column:17},end:{line:4347,column:18}},loc:{start:{line:4347,column:28},end:{line:4349,column:9}},line:4347},"279":{name:"(anonymous_279)",decl:{start:{line:4382,column:14},end:{line:4382,column:15}},loc:{start:{line:4382,column:39},end:{line:4391,column:9}},line:4382},"280":{name:"(anonymous_280)",decl:{start:{line:4401,column:13},end:{line:4401,column:14}},loc:{start:{line:4401,column:38},end:{line:4412,column:9}},line:4401},"281":{name:"(anonymous_281)",decl:{start:{line:4543,column:14},end:{line:4543,column:15}},loc:{start:{line:4543,column:40},end:{line:4555,column:9}},line:4543},"282":{name:"(anonymous_282)",decl:{start:{line:4568,column:28},end:{line:4568,column:29}},loc:{start:{line:4568,column:42},end:{line:4580,column:9}},line:4568},"283":{name:"(anonymous_283)",decl:{start:{line:4594,column:19},end:{line:4594,column:20}},loc:{start:{line:4594,column:80},end:{line:4627,column:9}},line:4594},"284":{name:"(anonymous_284)",decl:{start:{line:4642,column:24},end:{line:4642,column:25}},loc:{start:{line:4642,column:96},end:{line:4682,column:9}},line:4642},"285":{name:"(anonymous_285)",decl:{start:{line:4693,column:21},end:{line:4693,column:22}},loc:{start:{line:4693,column:48},end:{line:4716,column:9}},line:4693},"286":{name:"(anonymous_286)",decl:{start:{line:4737,column:26},end:{line:4737,column:27}},loc:{start:{line:4737,column:57},end:{line:4769,column:9}},line:4737},"287":{name:"(anonymous_287)",decl:{start:{line:4782,column:28},end:{line:4782,column:29}},loc:{start:{line:4782,column:88},end:{line:4801,column:9}},line:4782},"288":{name:"(anonymous_288)",decl:{start:{line:4813,column:30},end:{line:4813,column:31}},loc:{start:{line:4813,column:62},end:{line:4834,column:9}},line:4813},"289":{name:"(anonymous_289)",decl:{start:{line:4845,column:24},end:{line:4845,column:25}},loc:{start:{line:4845,column:44},end:{line:4867,column:9}},line:4845},"290":{name:"(anonymous_290)",decl:{start:{line:4882,column:29},end:{line:4882,column:30}},loc:{start:{line:4882,column:57},end:{line:4916,column:9}},line:4882},"291":{name:"(anonymous_291)",decl:{start:{line:4928,column:31},end:{line:4928,column:32}},loc:{start:{line:4928,column:88},end:{line:4946,column:9}},line:4928},"292":{name:"(anonymous_292)",decl:{start:{line:4957,column:33},end:{line:4957,column:34}},loc:{start:{line:4957,column:58},end:{line:4977,column:9}},line:4957},"293":{name:"(anonymous_293)",decl:{start:{line:4989,column:22},end:{line:4989,column:23}},loc:{start:{line:4989,column:64},end:{line:5059,column:9}},line:4989},"294":{name:"(anonymous_294)",decl:{start:{line:5068,column:22},end:{line:5068,column:23}},loc:{start:{line:5068,column:33},end:{line:5077,column:9}},line:5068},"295":{name:"(anonymous_295)",decl:{start:{line:5101,column:15},end:{line:5101,column:16}},loc:{start:{line:5101,column:34},end:{line:5125,column:9}},line:5101},"296":{name:"(anonymous_296)",decl:{start:{line:5112,column:110},end:{line:5112,column:111}},loc:{start:{line:5112,column:134},end:{line:5124,column:13}},line:5112},"297":{name:"(anonymous_297)",decl:{start:{line:5153,column:13},end:{line:5153,column:14}},loc:{start:{line:5153,column:38},end:{line:5168,column:9}},line:5153},"298":{name:"(anonymous_298)",decl:{start:{line:5160,column:23},end:{line:5160,column:24}},loc:{start:{line:5160,column:44},end:{line:5167,column:13}},line:5160},"299":{name:"(anonymous_299)",decl:{start:{line:5224,column:14},end:{line:5224,column:15}},loc:{start:{line:5224,column:47},end:{line:5270,column:9}},line:5224},"300":{name:"(anonymous_300)",decl:{start:{line:5279,column:22},end:{line:5279,column:23}},loc:{start:{line:5279,column:33},end:{line:5281,column:9}},line:5279},"301":{name:"(anonymous_301)",decl:{start:{line:5290,column:27},end:{line:5290,column:28}},loc:{start:{line:5290,column:38},end:{line:5292,column:9}},line:5290},"302":{name:"(anonymous_302)",decl:{start:{line:5302,column:20},end:{line:5302,column:21}},loc:{start:{line:5302,column:31},end:{line:5304,column:9}},line:5302},"303":{name:"(anonymous_303)",decl:{start:{line:5316,column:21},end:{line:5316,column:22}},loc:{start:{line:5316,column:36},end:{line:5318,column:9}},line:5316},"304":{name:"(anonymous_304)",decl:{start:{line:5330,column:19},end:{line:5330,column:20}},loc:{start:{line:5330,column:30},end:{line:5348,column:9}},line:5330},"305":{name:"(anonymous_305)",decl:{start:{line:5360,column:23},end:{line:5360,column:24}},loc:{start:{line:5360,column:34},end:{line:5362,column:9}},line:5360},"306":{name:"(anonymous_306)",decl:{start:{line:5373,column:26},end:{line:5373,column:27}},loc:{start:{line:5373,column:36},end:{line:5385,column:9}},line:5373},"307":{name:"(anonymous_307)",decl:{start:{line:5396,column:30},end:{line:5396,column:31}},loc:{start:{line:5396,column:41},end:{line:5398,column:9}},line:5396},"308":{name:"(anonymous_308)",decl:{start:{line:5409,column:18},end:{line:5409,column:19}},loc:{start:{line:5409,column:38},end:{line:5411,column:9}},line:5409},"309":{name:"(anonymous_309)",decl:{start:{line:5422,column:24},end:{line:5422,column:25}},loc:{start:{line:5422,column:35},end:{line:5424,column:9}},line:5422},"310":{name:"(anonymous_310)",decl:{start:{line:5452,column:36},end:{line:5452,column:37}},loc:{start:{line:5452,column:69},end:{line:5463,column:9}},line:5452},"311":{name:"(anonymous_311)",decl:{start:{line:5484,column:21},end:{line:5484,column:22}},loc:{start:{line:5484,column:61},end:{line:5489,column:9}},line:5484},"312":{name:"(anonymous_312)",decl:{start:{line:5500,column:16},end:{line:5500,column:17}},loc:{start:{line:5500,column:27},end:{line:5502,column:9}},line:5500},"313":{name:"(anonymous_313)",decl:{start:{line:5511,column:34},end:{line:5511,column:35}},loc:{start:{line:5511,column:45},end:{line:5514,column:9}},line:5511},"314":{name:"(anonymous_314)",decl:{start:{line:5532,column:14},end:{line:5532,column:15}},loc:{start:{line:5532,column:25},end:{line:5534,column:9}},line:5532},"315":{name:"(anonymous_315)",decl:{start:{line:5554,column:14},end:{line:5554,column:15}},loc:{start:{line:5554,column:56},end:{line:5591,column:9}},line:5554},"316":{name:"(anonymous_316)",decl:{start:{line:5600,column:23},end:{line:5600,column:24}},loc:{start:{line:5600,column:34},end:{line:5602,column:9}},line:5600},"317":{name:"(anonymous_317)",decl:{start:{line:5612,column:22},end:{line:5612,column:23}},loc:{start:{line:5612,column:37},end:{line:5619,column:9}},line:5612},"318":{name:"(anonymous_318)",decl:{start:{line:5628,column:19},end:{line:5628,column:20}},loc:{start:{line:5628,column:34},end:{line:5630,column:9}},line:5628},"319":{name:"(anonymous_319)",decl:{start:{line:5644,column:16},end:{line:5644,column:17}},loc:{start:{line:5644,column:42},end:{line:5678,column:9}},line:5644},"320":{name:"(anonymous_320)",decl:{start:{line:5649,column:35},end:{line:5649,column:36}},loc:{start:{line:5649,column:46},end:{line:5649,column:48}},line:5649},"321":{name:"(anonymous_321)",decl:{start:{line:5669,column:47},end:{line:5669,column:48}},loc:{start:{line:5669,column:71},end:{line:5677,column:13}},line:5669},"322":{name:"(anonymous_322)",decl:{start:{line:5696,column:14},end:{line:5696,column:15}},loc:{start:{line:5696,column:25},end:{line:5698,column:9}},line:5696},"323":{name:"(anonymous_323)",decl:{start:{line:5712,column:14},end:{line:5712,column:15}},loc:{start:{line:5712,column:43},end:{line:5716,column:9}},line:5712},"324":{name:"(anonymous_324)",decl:{start:{line:5730,column:16},end:{line:5730,column:17}},loc:{start:{line:5730,column:49},end:{line:5752,column:9}},line:5730},"325":{name:"(anonymous_325)",decl:{start:{line:5739,column:35},end:{line:5739,column:36}},loc:{start:{line:5739,column:45},end:{line:5739,column:47}},line:5739},"326":{name:"(anonymous_326)",decl:{start:{line:5743,column:84},end:{line:5743,column:85}},loc:{start:{line:5743,column:108},end:{line:5751,column:13}},line:5743},"327":{name:"(anonymous_327)",decl:{start:{line:5764,column:27},end:{line:5764,column:28}},loc:{start:{line:5764,column:43},end:{line:5767,column:9}},line:5764},"328":{name:"(anonymous_328)",decl:{start:{line:5773,column:14},end:{line:5773,column:15}},loc:{start:{line:5773,column:41},end:{line:5779,column:9}},line:5773},"329":{name:"(anonymous_329)",decl:{start:{line:5782,column:14},end:{line:5782,column:15}},loc:{start:{line:5782,column:33},end:{line:5801,column:9}},line:5782},"330":{name:"(anonymous_330)",decl:{start:{line:5783,column:35},end:{line:5783,column:36}},loc:{start:{line:5783,column:46},end:{line:5783,column:48}},line:5783},"331":{name:"(anonymous_331)",decl:{start:{line:5790,column:42},end:{line:5790,column:43}},loc:{start:{line:5790,column:65},end:{line:5800,column:13}},line:5790}},branchMap:{"0":{loc:{start:{line:26,column:15},end:{line:26,column:30}},type:"binary-expr",locations:[{start:{line:26,column:15},end:{line:26,column:22}},{start:{line:26,column:26},end:{line:26,column:30}}],line:26},"1":{loc:{start:{line:397,column:12},end:{line:400,column:13}},type:"if",locations:[{start:{line:397,column:12},end:{line:400,column:13}},{start:{line:397,column:12},end:{line:400,column:13}}],line:397},"2":{loc:{start:{line:397,column:16},end:{line:397,column:56}},type:"binary-expr",locations:[{start:{line:397,column:16},end:{line:397,column:25}},{start:{line:397,column:29},end:{line:397,column:56}}],line:397},"3":{loc:{start:{line:420,column:12},end:{line:423,column:13}},type:"if",locations:[{start:{line:420,column:12},end:{line:423,column:13}},{start:{line:420,column:12},end:{line:423,column:13}}],line:420},"4":{loc:{start:{line:420,column:16},end:{line:420,column:56}},type:"binary-expr",locations:[{start:{line:420,column:16},end:{line:420,column:25}},{start:{line:420,column:29},end:{line:420,column:56}}],line:420},"5":{loc:{start:{line:453,column:12},end:{line:456,column:13}},type:"if",locations:[{start:{line:453,column:12},end:{line:456,column:13}},{start:{line:453,column:12},end:{line:456,column:13}}],line:453},"6":{loc:{start:{line:453,column:16},end:{line:453,column:56}},type:"binary-expr",locations:[{start:{line:453,column:16},end:{line:453,column:25}},{start:{line:453,column:29},end:{line:453,column:56}}],line:453},"7":{loc:{start:{line:478,column:23},end:{line:478,column:48}},type:"binary-expr",locations:[{start:{line:478,column:23},end:{line:478,column:31}},{start:{line:478,column:35},end:{line:478,column:48}}],line:478},"8":{loc:{start:{line:482,column:16},end:{line:496,column:17}},type:"if",locations:[{start:{line:482,column:16},end:{line:496,column:17}},{start:{line:482,column:16},end:{line:496,column:17}}],line:482},"9":{loc:{start:{line:489,column:24},end:{line:494,column:25}},type:"if",locations:[{start:{line:489,column:24},end:{line:494,column:25}},{start:{line:489,column:24},end:{line:494,column:25}}],line:489},"10":{loc:{start:{line:517,column:23},end:{line:517,column:48}},type:"binary-expr",locations:[{start:{line:517,column:23},end:{line:517,column:31}},{start:{line:517,column:35},end:{line:517,column:48}}],line:517},"11":{loc:{start:{line:544,column:12},end:{line:547,column:13}},type:"if",locations:[{start:{line:544,column:12},end:{line:547,column:13}},{start:{line:544,column:12},end:{line:547,column:13}}],line:544},"12":{loc:{start:{line:544,column:16},end:{line:544,column:53}},type:"binary-expr",locations:[{start:{line:544,column:16},end:{line:544,column:25}},{start:{line:544,column:29},end:{line:544,column:53}}],line:544},"13":{loc:{start:{line:549,column:23},end:{line:549,column:48}},type:"binary-expr",locations:[{start:{line:549,column:23},end:{line:549,column:31}},{start:{line:549,column:35},end:{line:549,column:48}}],line:549},"14":{loc:{start:{line:550,column:21},end:{line:550,column:33}},type:"binary-expr",locations:[{start:{line:550,column:21},end:{line:550,column:27}},{start:{line:550,column:31},end:{line:550,column:33}}],line:550},"15":{loc:{start:{line:555,column:16},end:{line:560,column:17}},type:"if",locations:[{start:{line:555,column:16},end:{line:560,column:17}},{start:{line:555,column:16},end:{line:560,column:17}}],line:555},"16":{loc:{start:{line:581,column:12},end:{line:584,column:13}},type:"if",locations:[{start:{line:581,column:12},end:{line:584,column:13}},{start:{line:581,column:12},end:{line:584,column:13}}],line:581},"17":{loc:{start:{line:581,column:16},end:{line:581,column:52}},type:"binary-expr",locations:[{start:{line:581,column:16},end:{line:581,column:25}},{start:{line:581,column:29},end:{line:581,column:52}}],line:581},"18":{loc:{start:{line:586,column:23},end:{line:586,column:48}},type:"binary-expr",locations:[{start:{line:586,column:23},end:{line:586,column:31}},{start:{line:586,column:35},end:{line:586,column:48}}],line:586},"19":{loc:{start:{line:588,column:23},end:{line:588,column:34}},type:"binary-expr",locations:[{start:{line:588,column:23},end:{line:588,column:28}},{start:{line:588,column:32},end:{line:588,column:34}}],line:588},"20":{loc:{start:{line:593,column:16},end:{line:599,column:17}},type:"if",locations:[{start:{line:593,column:16},end:{line:599,column:17}},{start:{line:593,column:16},end:{line:599,column:17}}],line:593},"21":{loc:{start:{line:597,column:35},end:{line:597,column:54}},type:"binary-expr",locations:[{start:{line:597,column:35},end:{line:597,column:48}},{start:{line:597,column:52},end:{line:597,column:54}}],line:597},"22":{loc:{start:{line:598,column:35},end:{line:598,column:48}},type:"binary-expr",locations:[{start:{line:598,column:35},end:{line:598,column:42}},{start:{line:598,column:46},end:{line:598,column:48}}],line:598},"23":{loc:{start:{line:625,column:12},end:{line:628,column:13}},type:"if",locations:[{start:{line:625,column:12},end:{line:628,column:13}},{start:{line:625,column:12},end:{line:628,column:13}}],line:625},"24":{loc:{start:{line:625,column:16},end:{line:625,column:53}},type:"binary-expr",locations:[{start:{line:625,column:16},end:{line:625,column:25}},{start:{line:625,column:29},end:{line:625,column:53}}],line:625},"25":{loc:{start:{line:630,column:23},end:{line:630,column:48}},type:"binary-expr",locations:[{start:{line:630,column:23},end:{line:630,column:31}},{start:{line:630,column:35},end:{line:630,column:48}}],line:630},"26":{loc:{start:{line:631,column:21},end:{line:631,column:33}},type:"binary-expr",locations:[{start:{line:631,column:21},end:{line:631,column:27}},{start:{line:631,column:31},end:{line:631,column:33}}],line:631},"27":{loc:{start:{line:634,column:12},end:{line:636,column:13}},type:"if",locations:[{start:{line:634,column:12},end:{line:636,column:13}},{start:{line:634,column:12},end:{line:636,column:13}}],line:634},"28":{loc:{start:{line:653,column:20},end:{line:658,column:21}},type:"if",locations:[{start:{line:653,column:20},end:{line:658,column:21}},{start:{line:653,column:20},end:{line:658,column:21}}],line:653},"29":{loc:{start:{line:686,column:12},end:{line:688,column:13}},type:"if",locations:[{start:{line:686,column:12},end:{line:688,column:13}},{start:{line:686,column:12},end:{line:688,column:13}}],line:686},"30":{loc:{start:{line:690,column:12},end:{line:692,column:13}},type:"if",locations:[{start:{line:690,column:12},end:{line:692,column:13}},{start:{line:690,column:12},end:{line:692,column:13}}],line:690},"31":{loc:{start:{line:726,column:12},end:{line:728,column:13}},type:"if",locations:[{start:{line:726,column:12},end:{line:728,column:13}},{start:{line:726,column:12},end:{line:728,column:13}}],line:726},"32":{loc:{start:{line:742,column:12},end:{line:744,column:13}},type:"if",locations:[{start:{line:742,column:12},end:{line:744,column:13}},{start:{line:742,column:12},end:{line:744,column:13}}],line:742},"33":{loc:{start:{line:773,column:12},end:{line:775,column:13}},type:"if",locations:[{start:{line:773,column:12},end:{line:775,column:13}},{start:{line:773,column:12},end:{line:775,column:13}}],line:773},"34":{loc:{start:{line:805,column:12},end:{line:807,column:13}},type:"if",locations:[{start:{line:805,column:12},end:{line:807,column:13}},{start:{line:805,column:12},end:{line:807,column:13}}],line:805},"35":{loc:{start:{line:878,column:31},end:{line:878,column:47}},type:"binary-expr",locations:[{start:{line:878,column:31},end:{line:878,column:41}},{start:{line:878,column:45},end:{line:878,column:47}}],line:878},"36":{loc:{start:{line:879,column:26},end:{line:879,column:42}},type:"binary-expr",locations:[{start:{line:879,column:26},end:{line:879,column:36}},{start:{line:879,column:40},end:{line:879,column:42}}],line:879},"37":{loc:{start:{line:988,column:25},end:{line:988,column:79}},type:"cond-expr",locations:[{start:{line:988,column:53},end:{line:988,column:66}},{start:{line:988,column:69},end:{line:988,column:79}}],line:988},"38":{loc:{start:{line:992,column:25},end:{line:997,column:13}},type:"binary-expr",locations:[{start:{line:992,column:25},end:{line:992,column:35}},{start:{line:992,column:39},end:{line:997,column:13}}],line:992},"39":{loc:{start:{line:1002,column:31},end:{line:1002,column:57}},type:"binary-expr",locations:[{start:{line:1002,column:31},end:{line:1002,column:49}},{start:{line:1002,column:55},end:{line:1002,column:57}}],line:1002},"40":{loc:{start:{line:1003,column:31},end:{line:1003,column:73}},type:"binary-expr",locations:[{start:{line:1003,column:31},end:{line:1003,column:48}},{start:{line:1003,column:55},end:{line:1003,column:67}},{start:{line:1003,column:71},end:{line:1003,column:73}}],line:1003},"41":{loc:{start:{line:1004,column:31},end:{line:1004,column:57}},type:"binary-expr",locations:[{start:{line:1004,column:31},end:{line:1004,column:45}},{start:{line:1004,column:55},end:{line:1004,column:57}}],line:1004},"42":{loc:{start:{line:1005,column:31},end:{line:1005,column:57}},type:"binary-expr",locations:[{start:{line:1005,column:31},end:{line:1005,column:47}},{start:{line:1005,column:55},end:{line:1005,column:57}}],line:1005},"43":{loc:{start:{line:1006,column:31},end:{line:1006,column:59}},type:"binary-expr",locations:[{start:{line:1006,column:31},end:{line:1006,column:48}},{start:{line:1006,column:55},end:{line:1006,column:59}}],line:1006},"44":{loc:{start:{line:1007,column:31},end:{line:1007,column:59}},type:"binary-expr",locations:[{start:{line:1007,column:31},end:{line:1007,column:49}},{start:{line:1007,column:55},end:{line:1007,column:59}}],line:1007},"45":{loc:{start:{line:1008,column:31},end:{line:1008,column:59}},type:"binary-expr",locations:[{start:{line:1008,column:31},end:{line:1008,column:51}},{start:{line:1008,column:55},end:{line:1008,column:59}}],line:1008},"46":{loc:{start:{line:1096,column:12},end:{line:1099,column:13}},type:"if",locations:[{start:{line:1096,column:12},end:{line:1099,column:13}},{start:{line:1096,column:12},end:{line:1099,column:13}}],line:1096},"47":{loc:{start:{line:1096,column:16},end:{line:1096,column:54}},type:"binary-expr",locations:[{start:{line:1096,column:16},end:{line:1096,column:25}},{start:{line:1096,column:29},end:{line:1096,column:54}}],line:1096},"48":{loc:{start:{line:1100,column:23},end:{line:1100,column:48}},type:"binary-expr",locations:[{start:{line:1100,column:23},end:{line:1100,column:31}},{start:{line:1100,column:35},end:{line:1100,column:48}}],line:1100},"49":{loc:{start:{line:1102,column:22},end:{line:1102,column:35}},type:"binary-expr",locations:[{start:{line:1102,column:22},end:{line:1102,column:29}},{start:{line:1102,column:33},end:{line:1102,column:35}}],line:1102},"50":{loc:{start:{line:1106,column:16},end:{line:1112,column:17}},type:"if",locations:[{start:{line:1106,column:16},end:{line:1112,column:17}},{start:{line:1106,column:16},end:{line:1112,column:17}}],line:1106},"51":{loc:{start:{line:1110,column:31},end:{line:1110,column:73}},type:"cond-expr",locations:[{start:{line:1110,column:47},end:{line:1110,column:66}},{start:{line:1110,column:69},end:{line:1110,column:73}}],line:1110},"52":{loc:{start:{line:1125,column:23},end:{line:1125,column:48}},type:"binary-expr",locations:[{start:{line:1125,column:23},end:{line:1125,column:31}},{start:{line:1125,column:35},end:{line:1125,column:48}}],line:1125},"53":{loc:{start:{line:1143,column:23},end:{line:1143,column:48}},type:"binary-expr",locations:[{start:{line:1143,column:23},end:{line:1143,column:31}},{start:{line:1143,column:35},end:{line:1143,column:48}}],line:1143},"54":{loc:{start:{line:1145,column:12},end:{line:1147,column:13}},type:"if",locations:[{start:{line:1145,column:12},end:{line:1147,column:13}},{start:{line:1145,column:12},end:{line:1147,column:13}}],line:1145},"55":{loc:{start:{line:1151,column:16},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1151,column:16},end:{line:1167,column:17}},{start:{line:1151,column:16},end:{line:1167,column:17}}],line:1151},"56":{loc:{start:{line:1151,column:20},end:{line:1151,column:47}},type:"binary-expr",locations:[{start:{line:1151,column:20},end:{line:1151,column:24}},{start:{line:1151,column:28},end:{line:1151,column:47}}],line:1151},"57":{loc:{start:{line:1155,column:21},end:{line:1167,column:17}},type:"if",locations:[{start:{line:1155,column:21},end:{line:1167,column:17}},{start:{line:1155,column:21},end:{line:1167,column:17}}],line:1155},"58":{loc:{start:{line:1155,column:25},end:{line:1155,column:51}},type:"binary-expr",locations:[{start:{line:1155,column:25},end:{line:1155,column:29}},{start:{line:1155,column:33},end:{line:1155,column:51}}],line:1155},"59":{loc:{start:{line:1157,column:24},end:{line:1162,column:25}},type:"if",locations:[{start:{line:1157,column:24},end:{line:1162,column:25}},{start:{line:1157,column:24},end:{line:1162,column:25}}],line:1157},"60":{loc:{start:{line:1182,column:23},end:{line:1182,column:48}},type:"binary-expr",locations:[{start:{line:1182,column:23},end:{line:1182,column:31}},{start:{line:1182,column:35},end:{line:1182,column:48}}],line:1182},"61":{loc:{start:{line:1186,column:16},end:{line:1191,column:17}},type:"if",locations:[{start:{line:1186,column:16},end:{line:1191,column:17}},{start:{line:1186,column:16},end:{line:1191,column:17}}],line:1186},"62":{loc:{start:{line:1204,column:23},end:{line:1204,column:48}},type:"binary-expr",locations:[{start:{line:1204,column:23},end:{line:1204,column:31}},{start:{line:1204,column:35},end:{line:1204,column:48}}],line:1204},"63":{loc:{start:{line:1208,column:16},end:{line:1213,column:17}},type:"if",locations:[{start:{line:1208,column:16},end:{line:1213,column:17}},{start:{line:1208,column:16},end:{line:1213,column:17}}],line:1208},"64":{loc:{start:{line:1226,column:23},end:{line:1226,column:48}},type:"binary-expr",locations:[{start:{line:1226,column:23},end:{line:1226,column:31}},{start:{line:1226,column:35},end:{line:1226,column:48}}],line:1226},"65":{loc:{start:{line:1230,column:16},end:{line:1235,column:17}},type:"if",locations:[{start:{line:1230,column:16},end:{line:1235,column:17}},{start:{line:1230,column:16},end:{line:1235,column:17}}],line:1230},"66":{loc:{start:{line:1318,column:37},end:{line:1318,column:59}},type:"binary-expr",locations:[{start:{line:1318,column:37},end:{line:1318,column:53}},{start:{line:1318,column:57},end:{line:1318,column:59}}],line:1318},"67":{loc:{start:{line:1325,column:16},end:{line:1330,column:17}},type:"if",locations:[{start:{line:1325,column:16},end:{line:1330,column:17}},{start:{line:1325,column:16},end:{line:1330,column:17}}],line:1325},"68":{loc:{start:{line:1334,column:35},end:{line:1334,column:61}},type:"binary-expr",locations:[{start:{line:1334,column:35},end:{line:1334,column:52}},{start:{line:1334,column:59},end:{line:1334,column:61}}],line:1334},"69":{loc:{start:{line:1335,column:35},end:{line:1335,column:61}},type:"binary-expr",locations:[{start:{line:1335,column:35},end:{line:1335,column:51}},{start:{line:1335,column:59},end:{line:1335,column:61}}],line:1335},"70":{loc:{start:{line:1336,column:35},end:{line:1336,column:63}},type:"binary-expr",locations:[{start:{line:1336,column:35},end:{line:1336,column:53}},{start:{line:1336,column:59},end:{line:1336,column:63}}],line:1336},"71":{loc:{start:{line:1389,column:12},end:{line:1392,column:13}},type:"if",locations:[{start:{line:1389,column:12},end:{line:1392,column:13}},{start:{line:1389,column:12},end:{line:1392,column:13}}],line:1389},"72":{loc:{start:{line:1389,column:16},end:{line:1389,column:54}},type:"binary-expr",locations:[{start:{line:1389,column:16},end:{line:1389,column:25}},{start:{line:1389,column:29},end:{line:1389,column:54}}],line:1389},"73":{loc:{start:{line:1393,column:23},end:{line:1393,column:48}},type:"binary-expr",locations:[{start:{line:1393,column:23},end:{line:1393,column:31}},{start:{line:1393,column:35},end:{line:1393,column:48}}],line:1393},"74":{loc:{start:{line:1395,column:22},end:{line:1395,column:35}},type:"binary-expr",locations:[{start:{line:1395,column:22},end:{line:1395,column:29}},{start:{line:1395,column:33},end:{line:1395,column:35}}],line:1395},"75":{loc:{start:{line:1396,column:12},end:{line:1398,column:13}},type:"if",locations:[{start:{line:1396,column:12},end:{line:1398,column:13}},{start:{line:1396,column:12},end:{line:1398,column:13}}],line:1396},"76":{loc:{start:{line:1402,column:16},end:{line:1408,column:17}},type:"if",locations:[{start:{line:1402,column:16},end:{line:1408,column:17}},{start:{line:1402,column:16},end:{line:1408,column:17}}],line:1402},"77":{loc:{start:{line:1415,column:22},end:{line:1415,column:35}},type:"binary-expr",locations:[{start:{line:1415,column:22},end:{line:1415,column:29}},{start:{line:1415,column:33},end:{line:1415,column:35}}],line:1415},"78":{loc:{start:{line:1416,column:12},end:{line:1418,column:13}},type:"if",locations:[{start:{line:1416,column:12},end:{line:1418,column:13}},{start:{line:1416,column:12},end:{line:1418,column:13}}],line:1416},"79":{loc:{start:{line:1449,column:12},end:{line:1451,column:13}},type:"if",locations:[{start:{line:1449,column:12},end:{line:1451,column:13}},{start:{line:1449,column:12},end:{line:1451,column:13}}],line:1449},"80":{loc:{start:{line:1453,column:12},end:{line:1455,column:13}},type:"if",locations:[{start:{line:1453,column:12},end:{line:1455,column:13}},{start:{line:1453,column:12},end:{line:1455,column:13}}],line:1453},"81":{loc:{start:{line:1457,column:12},end:{line:1459,column:13}},type:"if",locations:[{start:{line:1457,column:12},end:{line:1459,column:13}},{start:{line:1457,column:12},end:{line:1459,column:13}}],line:1457},"82":{loc:{start:{line:1457,column:16},end:{line:1457,column:79}},type:"binary-expr",locations:[{start:{line:1457,column:16},end:{line:1457,column:25}},{start:{line:1457,column:30},end:{line:1457,column:51}},{start:{line:1457,column:55},end:{line:1457,column:78}}],line:1457},"83":{loc:{start:{line:1462,column:12},end:{line:1504,column:13}},type:"if",locations:[{start:{line:1462,column:12},end:{line:1504,column:13}},{start:{line:1462,column:12},end:{line:1504,column:13}}],line:1462},"84":{loc:{start:{line:1465,column:16},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1465,column:16},end:{line:1500,column:17}},{start:{line:1465,column:16},end:{line:1500,column:17}}],line:1465},"85":{loc:{start:{line:1465,column:20},end:{line:1465,column:55}},type:"binary-expr",locations:[{start:{line:1465,column:20},end:{line:1465,column:41}},{start:{line:1465,column:45},end:{line:1465,column:55}}],line:1465},"86":{loc:{start:{line:1472,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1472,column:21},end:{line:1500,column:17}},{start:{line:1472,column:21},end:{line:1500,column:17}}],line:1472},"87":{loc:{start:{line:1472,column:25},end:{line:1472,column:59}},type:"binary-expr",locations:[{start:{line:1472,column:25},end:{line:1472,column:46}},{start:{line:1472,column:50},end:{line:1472,column:59}}],line:1472},"88":{loc:{start:{line:1477,column:20},end:{line:1482,column:21}},type:"if",locations:[{start:{line:1477,column:20},end:{line:1482,column:21}},{start:{line:1477,column:20},end:{line:1482,column:21}}],line:1477},"89":{loc:{start:{line:1484,column:21},end:{line:1500,column:17}},type:"if",locations:[{start:{line:1484,column:21},end:{line:1500,column:17}},{start:{line:1484,column:21},end:{line:1500,column:17}}],line:1484},"90":{loc:{start:{line:1484,column:25},end:{line:1484,column:58}},type:"binary-expr",locations:[{start:{line:1484,column:25},end:{line:1484,column:44}},{start:{line:1484,column:48},end:{line:1484,column:58}}],line:1484},"91":{loc:{start:{line:1496,column:24},end:{line:1498,column:25}},type:"if",locations:[{start:{line:1496,column:24},end:{line:1498,column:25}},{start:{line:1496,column:24},end:{line:1498,column:25}}],line:1496},"92":{loc:{start:{line:1525,column:23},end:{line:1525,column:48}},type:"binary-expr",locations:[{start:{line:1525,column:23},end:{line:1525,column:31}},{start:{line:1525,column:35},end:{line:1525,column:48}}],line:1525},"93":{loc:{start:{line:1528,column:16},end:{line:1553,column:17}},type:"if",locations:[{start:{line:1528,column:16},end:{line:1553,column:17}},{start:{line:1528,column:16},end:{line:1553,column:17}}],line:1528},"94":{loc:{start:{line:1533,column:20},end:{line:1535,column:21}},type:"if",locations:[{start:{line:1533,column:20},end:{line:1535,column:21}},{start:{line:1533,column:20},end:{line:1535,column:21}}],line:1533},"95":{loc:{start:{line:1540,column:20},end:{line:1552,column:21}},type:"if",locations:[{start:{line:1540,column:20},end:{line:1552,column:21}},{start:{line:1540,column:20},end:{line:1552,column:21}}],line:1540},"96":{loc:{start:{line:1542,column:28},end:{line:1547,column:29}},type:"if",locations:[{start:{line:1542,column:28},end:{line:1547,column:29}},{start:{line:1542,column:28},end:{line:1547,column:29}}],line:1542},"97":{loc:{start:{line:1575,column:23},end:{line:1575,column:48}},type:"binary-expr",locations:[{start:{line:1575,column:23},end:{line:1575,column:31}},{start:{line:1575,column:35},end:{line:1575,column:48}}],line:1575},"98":{loc:{start:{line:1637,column:19},end:{line:1637,column:77}},type:"binary-expr",locations:[{start:{line:1637,column:19},end:{line:1637,column:72}},{start:{line:1637,column:76},end:{line:1637,column:77}}],line:1637},"99":{loc:{start:{line:1657,column:23},end:{line:1657,column:48}},type:"binary-expr",locations:[{start:{line:1657,column:23},end:{line:1657,column:31}},{start:{line:1657,column:35},end:{line:1657,column:48}}],line:1657},"100":{loc:{start:{line:1689,column:12},end:{line:1692,column:13}},type:"if",locations:[{start:{line:1689,column:12},end:{line:1692,column:13}},{start:{line:1689,column:12},end:{line:1692,column:13}}],line:1689},"101":{loc:{start:{line:1689,column:16},end:{line:1689,column:54}},type:"binary-expr",locations:[{start:{line:1689,column:16},end:{line:1689,column:25}},{start:{line:1689,column:29},end:{line:1689,column:54}}],line:1689},"102":{loc:{start:{line:1694,column:23},end:{line:1694,column:48}},type:"binary-expr",locations:[{start:{line:1694,column:23},end:{line:1694,column:31}},{start:{line:1694,column:35},end:{line:1694,column:48}}],line:1694},"103":{loc:{start:{line:1695,column:22},end:{line:1695,column:35}},type:"binary-expr",locations:[{start:{line:1695,column:22},end:{line:1695,column:29}},{start:{line:1695,column:33},end:{line:1695,column:35}}],line:1695},"104":{loc:{start:{line:1699,column:16},end:{line:1702,column:17}},type:"if",locations:[{start:{line:1699,column:16},end:{line:1702,column:17}},{start:{line:1699,column:16},end:{line:1702,column:17}}],line:1699},"105":{loc:{start:{line:1749,column:12},end:{line:1752,column:13}},type:"if",locations:[{start:{line:1749,column:12},end:{line:1752,column:13}},{start:{line:1749,column:12},end:{line:1752,column:13}}],line:1749},"106":{loc:{start:{line:1749,column:16},end:{line:1749,column:54}},type:"binary-expr",locations:[{start:{line:1749,column:16},end:{line:1749,column:25}},{start:{line:1749,column:29},end:{line:1749,column:54}}],line:1749},"107":{loc:{start:{line:1754,column:23},end:{line:1754,column:48}},type:"binary-expr",locations:[{start:{line:1754,column:23},end:{line:1754,column:31}},{start:{line:1754,column:35},end:{line:1754,column:48}}],line:1754},"108":{loc:{start:{line:1755,column:22},end:{line:1755,column:35}},type:"binary-expr",locations:[{start:{line:1755,column:22},end:{line:1755,column:29}},{start:{line:1755,column:33},end:{line:1755,column:35}}],line:1755},"109":{loc:{start:{line:1759,column:16},end:{line:1762,column:17}},type:"if",locations:[{start:{line:1759,column:16},end:{line:1762,column:17}},{start:{line:1759,column:16},end:{line:1762,column:17}}],line:1759},"110":{loc:{start:{line:1765,column:27},end:{line:1765,column:52}},type:"binary-expr",locations:[{start:{line:1765,column:27},end:{line:1765,column:46}},{start:{line:1765,column:50},end:{line:1765,column:52}}],line:1765},"111":{loc:{start:{line:1795,column:23},end:{line:1795,column:48}},type:"binary-expr",locations:[{start:{line:1795,column:23},end:{line:1795,column:31}},{start:{line:1795,column:35},end:{line:1795,column:48}}],line:1795},"112":{loc:{start:{line:1816,column:21},end:{line:1816,column:33}},type:"binary-expr",locations:[{start:{line:1816,column:21},end:{line:1816,column:27}},{start:{line:1816,column:31},end:{line:1816,column:33}}],line:1816},"113":{loc:{start:{line:1818,column:12},end:{line:1841,column:13}},type:"if",locations:[{start:{line:1818,column:12},end:{line:1841,column:13}},{start:{line:1818,column:12},end:{line:1841,column:13}}],line:1818},"114":{loc:{start:{line:1821,column:20},end:{line:1834,column:21}},type:"if",locations:[{start:{line:1821,column:20},end:{line:1834,column:21}},{start:{line:1821,column:20},end:{line:1834,column:21}}],line:1821},"115":{loc:{start:{line:1827,column:28},end:{line:1832,column:29}},type:"if",locations:[{start:{line:1827,column:28},end:{line:1832,column:29}},{start:{line:1827,column:28},end:{line:1832,column:29}}],line:1827},"116":{loc:{start:{line:2021,column:19},end:{line:2021,column:50}},type:"binary-expr",locations:[{start:{line:2021,column:19},end:{line:2021,column:44}},{start:{line:2021,column:48},end:{line:2021,column:50}}],line:2021},"117":{loc:{start:{line:2031,column:19},end:{line:2031,column:55}},type:"binary-expr",locations:[{start:{line:2031,column:19},end:{line:2031,column:47}},{start:{line:2031,column:51},end:{line:2031,column:55}}],line:2031},"118":{loc:{start:{line:2057,column:19},end:{line:2057,column:69}},type:"binary-expr",locations:[{start:{line:2057,column:19},end:{line:2057,column:61}},{start:{line:2057,column:65},end:{line:2057,column:69}}],line:2057},"119":{loc:{start:{line:2067,column:19},end:{line:2067,column:61}},type:"binary-expr",locations:[{start:{line:2067,column:19},end:{line:2067,column:53}},{start:{line:2067,column:57},end:{line:2067,column:61}}],line:2067},"120":{loc:{start:{line:2078,column:19},end:{line:2078,column:65}},type:"binary-expr",locations:[{start:{line:2078,column:19},end:{line:2078,column:59}},{start:{line:2078,column:63},end:{line:2078,column:65}}],line:2078},"121":{loc:{start:{line:2088,column:19},end:{line:2088,column:48}},type:"binary-expr",locations:[{start:{line:2088,column:19},end:{line:2088,column:40}},{start:{line:2088,column:44},end:{line:2088,column:48}}],line:2088},"122":{loc:{start:{line:2098,column:19},end:{line:2098,column:57}},type:"binary-expr",locations:[{start:{line:2098,column:19},end:{line:2098,column:49}},{start:{line:2098,column:53},end:{line:2098,column:57}}],line:2098},"123":{loc:{start:{line:2110,column:19},end:{line:2110,column:66}},type:"binary-expr",locations:[{start:{line:2110,column:19},end:{line:2110,column:58}},{start:{line:2110,column:62},end:{line:2110,column:66}}],line:2110},"124":{loc:{start:{line:2122,column:19},end:{line:2122,column:73}},type:"binary-expr",locations:[{start:{line:2122,column:19},end:{line:2122,column:67}},{start:{line:2122,column:71},end:{line:2122,column:73}}],line:2122},"125":{loc:{start:{line:2173,column:19},end:{line:2173,column:77}},type:"binary-expr",locations:[{start:{line:2173,column:19},end:{line:2173,column:72}},{start:{line:2173,column:76},end:{line:2173,column:77}}],line:2173},"126":{loc:{start:{line:2194,column:12},end:{line:2197,column:13}},type:"if",locations:[{start:{line:2194,column:12},end:{line:2197,column:13}},{start:{line:2194,column:12},end:{line:2197,column:13}}],line:2194},"127":{loc:{start:{line:2194,column:16},end:{line:2194,column:54}},type:"binary-expr",locations:[{start:{line:2194,column:16},end:{line:2194,column:25}},{start:{line:2194,column:29},end:{line:2194,column:54}}],line:2194},"128":{loc:{start:{line:2199,column:23},end:{line:2199,column:48}},type:"binary-expr",locations:[{start:{line:2199,column:23},end:{line:2199,column:31}},{start:{line:2199,column:35},end:{line:2199,column:48}}],line:2199},"129":{loc:{start:{line:2200,column:22},end:{line:2200,column:35}},type:"binary-expr",locations:[{start:{line:2200,column:22},end:{line:2200,column:29}},{start:{line:2200,column:33},end:{line:2200,column:35}}],line:2200},"130":{loc:{start:{line:2204,column:16},end:{line:2207,column:17}},type:"if",locations:[{start:{line:2204,column:16},end:{line:2207,column:17}},{start:{line:2204,column:16},end:{line:2207,column:17}}],line:2204},"131":{loc:{start:{line:2210,column:27},end:{line:2210,column:52}},type:"binary-expr",locations:[{start:{line:2210,column:27},end:{line:2210,column:46}},{start:{line:2210,column:50},end:{line:2210,column:52}}],line:2210},"132":{loc:{start:{line:2368,column:23},end:{line:2368,column:48}},type:"binary-expr",locations:[{start:{line:2368,column:23},end:{line:2368,column:31}},{start:{line:2368,column:35},end:{line:2368,column:48}}],line:2368},"133":{loc:{start:{line:2372,column:16},end:{line:2377,column:17}},type:"if",locations:[{start:{line:2372,column:16},end:{line:2377,column:17}},{start:{line:2372,column:16},end:{line:2377,column:17}}],line:2372},"134":{loc:{start:{line:2397,column:23},end:{line:2397,column:48}},type:"binary-expr",locations:[{start:{line:2397,column:23},end:{line:2397,column:31}},{start:{line:2397,column:35},end:{line:2397,column:48}}],line:2397},"135":{loc:{start:{line:2401,column:16},end:{line:2406,column:17}},type:"if",locations:[{start:{line:2401,column:16},end:{line:2406,column:17}},{start:{line:2401,column:16},end:{line:2406,column:17}}],line:2401},"136":{loc:{start:{line:2593,column:23},end:{line:2593,column:48}},type:"binary-expr",locations:[{start:{line:2593,column:23},end:{line:2593,column:31}},{start:{line:2593,column:35},end:{line:2593,column:48}}],line:2593},"137":{loc:{start:{line:2597,column:16},end:{line:2613,column:17}},type:"if",locations:[{start:{line:2597,column:16},end:{line:2613,column:17}},{start:{line:2597,column:16},end:{line:2613,column:17}}],line:2597},"138":{loc:{start:{line:2606,column:24},end:{line:2611,column:25}},type:"if",locations:[{start:{line:2606,column:24},end:{line:2611,column:25}},{start:{line:2606,column:24},end:{line:2611,column:25}}],line:2606},"139":{loc:{start:{line:2767,column:12},end:{line:2770,column:13}},type:"if",locations:[{start:{line:2767,column:12},end:{line:2770,column:13}},{start:{line:2767,column:12},end:{line:2770,column:13}}],line:2767},"140":{loc:{start:{line:2767,column:16},end:{line:2767,column:53}},type:"binary-expr",locations:[{start:{line:2767,column:16},end:{line:2767,column:25}},{start:{line:2767,column:29},end:{line:2767,column:53}}],line:2767},"141":{loc:{start:{line:2772,column:23},end:{line:2772,column:48}},type:"binary-expr",locations:[{start:{line:2772,column:23},end:{line:2772,column:31}},{start:{line:2772,column:35},end:{line:2772,column:48}}],line:2772},"142":{loc:{start:{line:2773,column:21},end:{line:2773,column:33}},type:"binary-expr",locations:[{start:{line:2773,column:21},end:{line:2773,column:27}},{start:{line:2773,column:31},end:{line:2773,column:33}}],line:2773},"143":{loc:{start:{line:2785,column:12},end:{line:2790,column:13}},type:"if",locations:[{start:{line:2785,column:12},end:{line:2790,column:13}},{start:{line:2785,column:12},end:{line:2790,column:13}}],line:2785},"144":{loc:{start:{line:2862,column:12},end:{line:2866,column:13}},type:"if",locations:[{start:{line:2862,column:12},end:{line:2866,column:13}},{start:{line:2862,column:12},end:{line:2866,column:13}}],line:2862},"145":{loc:{start:{line:2862,column:16},end:{line:2862,column:77}},type:"binary-expr",locations:[{start:{line:2862,column:16},end:{line:2862,column:36}},{start:{line:2862,column:40},end:{line:2862,column:64}},{start:{line:2862,column:68},end:{line:2862,column:77}}],line:2862},"146":{loc:{start:{line:2868,column:21},end:{line:2868,column:33}},type:"binary-expr",locations:[{start:{line:2868,column:21},end:{line:2868,column:27}},{start:{line:2868,column:31},end:{line:2868,column:33}}],line:2868},"147":{loc:{start:{line:2890,column:23},end:{line:2890,column:67}},type:"cond-expr",locations:[{start:{line:2890,column:49},end:{line:2890,column:55}},{start:{line:2890,column:58},end:{line:2890,column:67}}],line:2890},"148":{loc:{start:{line:3001,column:12},end:{line:3005,column:13}},type:"if",locations:[{start:{line:3001,column:12},end:{line:3005,column:13}},{start:{line:3001,column:12},end:{line:3005,column:13}}],line:3001},"149":{loc:{start:{line:3001,column:16},end:{line:3001,column:83}},type:"binary-expr",locations:[{start:{line:3001,column:16},end:{line:3001,column:42}},{start:{line:3001,column:46},end:{line:3001,column:70}},{start:{line:3001,column:74},end:{line:3001,column:83}}],line:3001},"150":{loc:{start:{line:3007,column:12},end:{line:3010,column:13}},type:"if",locations:[{start:{line:3007,column:12},end:{line:3010,column:13}},{start:{line:3007,column:12},end:{line:3010,column:13}}],line:3007},"151":{loc:{start:{line:3007,column:16},end:{line:3007,column:53}},type:"binary-expr",locations:[{start:{line:3007,column:16},end:{line:3007,column:40}},{start:{line:3007,column:44},end:{line:3007,column:53}}],line:3007},"152":{loc:{start:{line:3012,column:21},end:{line:3012,column:33}},type:"binary-expr",locations:[{start:{line:3012,column:21},end:{line:3012,column:27}},{start:{line:3012,column:31},end:{line:3012,column:33}}],line:3012},"153":{loc:{start:{line:3072,column:12},end:{line:3074,column:13}},type:"if",locations:[{start:{line:3072,column:12},end:{line:3074,column:13}},{start:{line:3072,column:12},end:{line:3074,column:13}}],line:3072},"154":{loc:{start:{line:3072,column:16},end:{line:3072,column:78}},type:"binary-expr",locations:[{start:{line:3072,column:16},end:{line:3072,column:26}},{start:{line:3072,column:30},end:{line:3072,column:53}},{start:{line:3072,column:57},end:{line:3072,column:78}}],line:3072},"155":{loc:{start:{line:3098,column:12},end:{line:3100,column:13}},type:"if",locations:[{start:{line:3098,column:12},end:{line:3100,column:13}},{start:{line:3098,column:12},end:{line:3100,column:13}}],line:3098},"156":{loc:{start:{line:3102,column:23},end:{line:3102,column:48}},type:"binary-expr",locations:[{start:{line:3102,column:23},end:{line:3102,column:31}},{start:{line:3102,column:35},end:{line:3102,column:48}}],line:3102},"157":{loc:{start:{line:3106,column:16},end:{line:3119,column:17}},type:"if",locations:[{start:{line:3106,column:16},end:{line:3119,column:17}},{start:{line:3106,column:16},end:{line:3119,column:17}}],line:3106},"158":{loc:{start:{line:3112,column:24},end:{line:3117,column:25}},type:"if",locations:[{start:{line:3112,column:24},end:{line:3117,column:25}},{start:{line:3112,column:24},end:{line:3117,column:25}}],line:3112},"159":{loc:{start:{line:3136,column:16},end:{line:3138,column:17}},type:"if",locations:[{start:{line:3136,column:16},end:{line:3138,column:17}},{start:{line:3136,column:16},end:{line:3138,column:17}}],line:3136},"160":{loc:{start:{line:3136,column:19},end:{line:3136,column:45}},type:"binary-expr",locations:[{start:{line:3136,column:19},end:{line:3136,column:24}},{start:{line:3136,column:28},end:{line:3136,column:45}}],line:3136},"161":{loc:{start:{line:3159,column:16},end:{line:3164,column:17}},type:"if",locations:[{start:{line:3159,column:16},end:{line:3164,column:17}},{start:{line:3159,column:16},end:{line:3164,column:17}}],line:3159},"162":{loc:{start:{line:3172,column:23},end:{line:3172,column:48}},type:"binary-expr",locations:[{start:{line:3172,column:23},end:{line:3172,column:31}},{start:{line:3172,column:35},end:{line:3172,column:48}}],line:3172},"163":{loc:{start:{line:3180,column:12},end:{line:3189,column:13}},type:"if",locations:[{start:{line:3180,column:12},end:{line:3189,column:13}},{start:{line:3180,column:12},end:{line:3189,column:13}}],line:3180},"164":{loc:{start:{line:3196,column:12},end:{line:3211,column:13}},type:"if",locations:[{start:{line:3196,column:12},end:{line:3211,column:13}},{start:{line:3196,column:12},end:{line:3211,column:13}}],line:3196},"165":{loc:{start:{line:3308,column:23},end:{line:3308,column:48}},type:"binary-expr",locations:[{start:{line:3308,column:23},end:{line:3308,column:31}},{start:{line:3308,column:35},end:{line:3308,column:48}}],line:3308},"166":{loc:{start:{line:3334,column:23},end:{line:3334,column:48}},type:"binary-expr",locations:[{start:{line:3334,column:23},end:{line:3334,column:31}},{start:{line:3334,column:35},end:{line:3334,column:48}}],line:3334},"167":{loc:{start:{line:3361,column:23},end:{line:3361,column:48}},type:"binary-expr",locations:[{start:{line:3361,column:23},end:{line:3361,column:31}},{start:{line:3361,column:35},end:{line:3361,column:48}}],line:3361},"168":{loc:{start:{line:3362,column:21},end:{line:3362,column:33}},type:"binary-expr",locations:[{start:{line:3362,column:21},end:{line:3362,column:27}},{start:{line:3362,column:31},end:{line:3362,column:33}}],line:3362},"169":{loc:{start:{line:3363,column:33},end:{line:3363,column:66}},type:"binary-expr",locations:[{start:{line:3363,column:33},end:{line:3363,column:51}},{start:{line:3363,column:55},end:{line:3363,column:66}}],line:3363},"170":{loc:{start:{line:3367,column:16},end:{line:3372,column:17}},type:"if",locations:[{start:{line:3367,column:16},end:{line:3372,column:17}},{start:{line:3367,column:16},end:{line:3372,column:17}}],line:3367},"171":{loc:{start:{line:3392,column:23},end:{line:3392,column:48}},type:"binary-expr",locations:[{start:{line:3392,column:23},end:{line:3392,column:31}},{start:{line:3392,column:35},end:{line:3392,column:48}}],line:3392},"172":{loc:{start:{line:3433,column:23},end:{line:3433,column:48}},type:"binary-expr",locations:[{start:{line:3433,column:23},end:{line:3433,column:31}},{start:{line:3433,column:35},end:{line:3433,column:48}}],line:3433},"173":{loc:{start:{line:3460,column:23},end:{line:3460,column:48}},type:"binary-expr",locations:[{start:{line:3460,column:23},end:{line:3460,column:31}},{start:{line:3460,column:35},end:{line:3460,column:48}}],line:3460},"174":{loc:{start:{line:3461,column:21},end:{line:3461,column:33}},type:"binary-expr",locations:[{start:{line:3461,column:21},end:{line:3461,column:27}},{start:{line:3461,column:31},end:{line:3461,column:33}}],line:3461},"175":{loc:{start:{line:3462,column:33},end:{line:3462,column:66}},type:"binary-expr",locations:[{start:{line:3462,column:33},end:{line:3462,column:51}},{start:{line:3462,column:55},end:{line:3462,column:66}}],line:3462},"176":{loc:{start:{line:3466,column:16},end:{line:3471,column:17}},type:"if",locations:[{start:{line:3466,column:16},end:{line:3471,column:17}},{start:{line:3466,column:16},end:{line:3471,column:17}}],line:3466},"177":{loc:{start:{line:3497,column:23},end:{line:3497,column:48}},type:"binary-expr",locations:[{start:{line:3497,column:23},end:{line:3497,column:31}},{start:{line:3497,column:35},end:{line:3497,column:48}}],line:3497},"178":{loc:{start:{line:3498,column:21},end:{line:3498,column:33}},type:"binary-expr",locations:[{start:{line:3498,column:21},end:{line:3498,column:27}},{start:{line:3498,column:31},end:{line:3498,column:33}}],line:3498},"179":{loc:{start:{line:3499,column:33},end:{line:3499,column:66}},type:"binary-expr",locations:[{start:{line:3499,column:33},end:{line:3499,column:51}},{start:{line:3499,column:55},end:{line:3499,column:66}}],line:3499},"180":{loc:{start:{line:3503,column:16},end:{line:3508,column:17}},type:"if",locations:[{start:{line:3503,column:16},end:{line:3508,column:17}},{start:{line:3503,column:16},end:{line:3508,column:17}}],line:3503},"181":{loc:{start:{line:3528,column:23},end:{line:3528,column:48}},type:"binary-expr",locations:[{start:{line:3528,column:23},end:{line:3528,column:31}},{start:{line:3528,column:35},end:{line:3528,column:48}}],line:3528},"182":{loc:{start:{line:3532,column:16},end:{line:3537,column:17}},type:"if",locations:[{start:{line:3532,column:16},end:{line:3537,column:17}},{start:{line:3532,column:16},end:{line:3537,column:17}}],line:3532},"183":{loc:{start:{line:3558,column:23},end:{line:3558,column:48}},type:"binary-expr",locations:[{start:{line:3558,column:23},end:{line:3558,column:31}},{start:{line:3558,column:35},end:{line:3558,column:48}}],line:3558},"184":{loc:{start:{line:3586,column:23},end:{line:3586,column:48}},type:"binary-expr",locations:[{start:{line:3586,column:23},end:{line:3586,column:31}},{start:{line:3586,column:35},end:{line:3586,column:48}}],line:3586},"185":{loc:{start:{line:3613,column:23},end:{line:3613,column:48}},type:"binary-expr",locations:[{start:{line:3613,column:23},end:{line:3613,column:31}},{start:{line:3613,column:35},end:{line:3613,column:48}}],line:3613},"186":{loc:{start:{line:3617,column:16},end:{line:3622,column:17}},type:"if",locations:[{start:{line:3617,column:16},end:{line:3622,column:17}},{start:{line:3617,column:16},end:{line:3622,column:17}}],line:3617},"187":{loc:{start:{line:3643,column:23},end:{line:3643,column:48}},type:"binary-expr",locations:[{start:{line:3643,column:23},end:{line:3643,column:31}},{start:{line:3643,column:35},end:{line:3643,column:48}}],line:3643},"188":{loc:{start:{line:3647,column:16},end:{line:3652,column:17}},type:"if",locations:[{start:{line:3647,column:16},end:{line:3652,column:17}},{start:{line:3647,column:16},end:{line:3652,column:17}}],line:3647},"189":{loc:{start:{line:3673,column:23},end:{line:3673,column:48}},type:"binary-expr",locations:[{start:{line:3673,column:23},end:{line:3673,column:31}},{start:{line:3673,column:35},end:{line:3673,column:48}}],line:3673},"190":{loc:{start:{line:3700,column:25},end:{line:3700,column:46}},type:"binary-expr",locations:[{start:{line:3700,column:25},end:{line:3700,column:39}},{start:{line:3700,column:43},end:{line:3700,column:46}}],line:3700},"191":{loc:{start:{line:3702,column:12},end:{line:3706,column:13}},type:"if",locations:[{start:{line:3702,column:12},end:{line:3706,column:13}},{start:{line:3702,column:12},end:{line:3706,column:13}}],line:3702},"192":{loc:{start:{line:3709,column:16},end:{line:3712,column:32}},type:"binary-expr",locations:[{start:{line:3709,column:16},end:{line:3709,column:35}},{start:{line:3710,column:16},end:{line:3710,column:31}},{start:{line:3711,column:16},end:{line:3711,column:33}},{start:{line:3712,column:16},end:{line:3712,column:32}}],line:3709},"193":{loc:{start:{line:3715,column:30},end:{line:3715,column:62}},type:"binary-expr",locations:[{start:{line:3715,column:30},end:{line:3715,column:45}},{start:{line:3715,column:49},end:{line:3715,column:62}}],line:3715},"194":{loc:{start:{line:3716,column:33},end:{line:3716,column:68}},type:"binary-expr",locations:[{start:{line:3716,column:33},end:{line:3716,column:51}},{start:{line:3716,column:55},end:{line:3716,column:68}}],line:3716},"195":{loc:{start:{line:3717,column:29},end:{line:3717,column:60}},type:"binary-expr",locations:[{start:{line:3717,column:29},end:{line:3717,column:43}},{start:{line:3717,column:47},end:{line:3717,column:60}}],line:3717},"196":{loc:{start:{line:3718,column:31},end:{line:3718,column:64}},type:"binary-expr",locations:[{start:{line:3718,column:31},end:{line:3718,column:47}},{start:{line:3718,column:51},end:{line:3718,column:64}}],line:3718},"197":{loc:{start:{line:3719,column:30},end:{line:3719,column:62}},type:"binary-expr",locations:[{start:{line:3719,column:30},end:{line:3719,column:45}},{start:{line:3719,column:49},end:{line:3719,column:62}}],line:3719},"198":{loc:{start:{line:3722,column:34},end:{line:3722,column:70}},type:"binary-expr",locations:[{start:{line:3722,column:34},end:{line:3722,column:53}},{start:{line:3722,column:57},end:{line:3722,column:70}}],line:3722},"199":{loc:{start:{line:3723,column:43},end:{line:3723,column:88}},type:"binary-expr",locations:[{start:{line:3723,column:43},end:{line:3723,column:71}},{start:{line:3723,column:75},end:{line:3723,column:88}}],line:3723},"200":{loc:{start:{line:3732,column:24},end:{line:3735,column:25}},type:"if",locations:[{start:{line:3732,column:24},end:{line:3735,column:25}},{start:{line:3732,column:24},end:{line:3735,column:25}}],line:3732},"201":{loc:{start:{line:3738,column:39},end:{line:3738,column:96}},type:"binary-expr",locations:[{start:{line:3738,column:39},end:{line:3738,column:65}},{start:{line:3738,column:69},end:{line:3738,column:96}}],line:3738},"202":{loc:{start:{line:3739,column:24},end:{line:3776,column:25}},type:"if",locations:[{start:{line:3739,column:24},end:{line:3776,column:25}},{start:{line:3739,column:24},end:{line:3776,column:25}}],line:3739},"203":{loc:{start:{line:3743,column:28},end:{line:3756,column:29}},type:"if",locations:[{start:{line:3743,column:28},end:{line:3756,column:29}},{start:{line:3743,column:28},end:{line:3756,column:29}}],line:3743},"204":{loc:{start:{line:3749,column:32},end:{line:3755,column:33}},type:"if",locations:[{start:{line:3749,column:32},end:{line:3755,column:33}},{start:{line:3749,column:32},end:{line:3755,column:33}}],line:3749},"205":{loc:{start:{line:3762,column:28},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3762,column:28},end:{line:3775,column:29}},{start:{line:3762,column:28},end:{line:3775,column:29}}],line:3762},"206":{loc:{start:{line:3762,column:32},end:{line:3762,column:72}},type:"binary-expr",locations:[{start:{line:3762,column:32},end:{line:3762,column:56}},{start:{line:3762,column:60},end:{line:3762,column:72}}],line:3762},"207":{loc:{start:{line:3769,column:33},end:{line:3775,column:29}},type:"if",locations:[{start:{line:3769,column:33},end:{line:3775,column:29}},{start:{line:3769,column:33},end:{line:3775,column:29}}],line:3769},"208":{loc:{start:{line:3769,column:37},end:{line:3769,column:81}},type:"binary-expr",locations:[{start:{line:3769,column:37},end:{line:3769,column:63}},{start:{line:3769,column:67},end:{line:3769,column:81}}],line:3769},"209":{loc:{start:{line:3782,column:20},end:{line:3784,column:21}},type:"if",locations:[{start:{line:3782,column:20},end:{line:3784,column:21}},{start:{line:3782,column:20},end:{line:3784,column:21}}],line:3782},"210":{loc:{start:{line:3805,column:23},end:{line:3805,column:48}},type:"binary-expr",locations:[{start:{line:3805,column:23},end:{line:3805,column:31}},{start:{line:3805,column:35},end:{line:3805,column:48}}],line:3805},"211":{loc:{start:{line:3889,column:12},end:{line:3893,column:13}},type:"if",locations:[{start:{line:3889,column:12},end:{line:3893,column:13}},{start:{line:3889,column:12},end:{line:3893,column:13}}],line:3889},"212":{loc:{start:{line:3889,column:16},end:{line:3889,column:78}},type:"binary-expr",locations:[{start:{line:3889,column:16},end:{line:3889,column:37}},{start:{line:3889,column:41},end:{line:3889,column:65}},{start:{line:3889,column:69},end:{line:3889,column:78}}],line:3889},"213":{loc:{start:{line:3895,column:23},end:{line:3895,column:48}},type:"binary-expr",locations:[{start:{line:3895,column:23},end:{line:3895,column:31}},{start:{line:3895,column:35},end:{line:3895,column:48}}],line:3895},"214":{loc:{start:{line:3896,column:21},end:{line:3896,column:33}},type:"binary-expr",locations:[{start:{line:3896,column:21},end:{line:3896,column:27}},{start:{line:3896,column:31},end:{line:3896,column:33}}],line:3896},"215":{loc:{start:{line:3899,column:12},end:{line:3901,column:13}},type:"if",locations:[{start:{line:3899,column:12},end:{line:3901,column:13}},{start:{line:3899,column:12},end:{line:3901,column:13}}],line:3899},"216":{loc:{start:{line:3899,column:17},end:{line:3899,column:39}},type:"binary-expr",locations:[{start:{line:3899,column:17},end:{line:3899,column:33}},{start:{line:3899,column:37},end:{line:3899,column:39}}],line:3899},"217":{loc:{start:{line:3903,column:12},end:{line:3906,column:13}},type:"if",locations:[{start:{line:3903,column:12},end:{line:3906,column:13}},{start:{line:3903,column:12},end:{line:3906,column:13}}],line:3903},"218":{loc:{start:{line:3909,column:16},end:{line:3915,column:17}},type:"if",locations:[{start:{line:3909,column:16},end:{line:3915,column:17}},{start:{line:3909,column:16},end:{line:3915,column:17}}],line:3909},"219":{loc:{start:{line:3972,column:12},end:{line:3976,column:13}},type:"if",locations:[{start:{line:3972,column:12},end:{line:3976,column:13}},{start:{line:3972,column:12},end:{line:3976,column:13}}],line:3972},"220":{loc:{start:{line:3972,column:16},end:{line:3972,column:78}},type:"binary-expr",locations:[{start:{line:3972,column:16},end:{line:3972,column:37}},{start:{line:3972,column:41},end:{line:3972,column:65}},{start:{line:3972,column:69},end:{line:3972,column:78}}],line:3972},"221":{loc:{start:{line:3978,column:23},end:{line:3978,column:48}},type:"binary-expr",locations:[{start:{line:3978,column:23},end:{line:3978,column:31}},{start:{line:3978,column:35},end:{line:3978,column:48}}],line:3978},"222":{loc:{start:{line:3979,column:21},end:{line:3979,column:33}},type:"binary-expr",locations:[{start:{line:3979,column:21},end:{line:3979,column:27}},{start:{line:3979,column:31},end:{line:3979,column:33}}],line:3979},"223":{loc:{start:{line:3983,column:12},end:{line:3985,column:13}},type:"if",locations:[{start:{line:3983,column:12},end:{line:3985,column:13}},{start:{line:3983,column:12},end:{line:3985,column:13}}],line:3983},"224":{loc:{start:{line:3987,column:29},end:{line:3987,column:62}},type:"binary-expr",locations:[{start:{line:3987,column:29},end:{line:3987,column:47}},{start:{line:3987,column:51},end:{line:3987,column:62}}],line:3987},"225":{loc:{start:{line:4004,column:20},end:{line:4009,column:21}},type:"if",locations:[{start:{line:4004,column:20},end:{line:4009,column:21}},{start:{line:4004,column:20},end:{line:4009,column:21}}],line:4004},"226":{loc:{start:{line:4072,column:20},end:{line:4072,column:31}},type:"binary-expr",locations:[{start:{line:4072,column:20},end:{line:4072,column:25}},{start:{line:4072,column:29},end:{line:4072,column:31}}],line:4072},"227":{loc:{start:{line:4073,column:26},end:{line:4073,column:43}},type:"binary-expr",locations:[{start:{line:4073,column:26},end:{line:4073,column:37}},{start:{line:4073,column:41},end:{line:4073,column:43}}],line:4073},"228":{loc:{start:{line:4082,column:34},end:{line:4082,column:55}},type:"binary-expr",locations:[{start:{line:4082,column:34},end:{line:4082,column:47}},{start:{line:4082,column:51},end:{line:4082,column:55}}],line:4082},"229":{loc:{start:{line:4192,column:20},end:{line:4192,column:31}},type:"binary-expr",locations:[{start:{line:4192,column:20},end:{line:4192,column:25}},{start:{line:4192,column:29},end:{line:4192,column:31}}],line:4192},"230":{loc:{start:{line:4193,column:26},end:{line:4193,column:43}},type:"binary-expr",locations:[{start:{line:4193,column:26},end:{line:4193,column:37}},{start:{line:4193,column:41},end:{line:4193,column:43}}],line:4193},"231":{loc:{start:{line:4258,column:20},end:{line:4258,column:31}},type:"binary-expr",locations:[{start:{line:4258,column:20},end:{line:4258,column:25}},{start:{line:4258,column:29},end:{line:4258,column:31}}],line:4258},"232":{loc:{start:{line:4259,column:26},end:{line:4259,column:43}},type:"binary-expr",locations:[{start:{line:4259,column:26},end:{line:4259,column:37}},{start:{line:4259,column:41},end:{line:4259,column:43}}],line:4259},"233":{loc:{start:{line:4263,column:34},end:{line:4263,column:55}},type:"binary-expr",locations:[{start:{line:4263,column:34},end:{line:4263,column:47}},{start:{line:4263,column:51},end:{line:4263,column:55}}],line:4263},"234":{loc:{start:{line:4273,column:12},end:{line:4275,column:13}},type:"if",locations:[{start:{line:4273,column:12},end:{line:4275,column:13}},{start:{line:4273,column:12},end:{line:4275,column:13}}],line:4273},"235":{loc:{start:{line:4273,column:16},end:{line:4273,column:59}},type:"binary-expr",locations:[{start:{line:4273,column:16},end:{line:4273,column:36}},{start:{line:4273,column:40},end:{line:4273,column:59}}],line:4273},"236":{loc:{start:{line:4276,column:12},end:{line:4278,column:13}},type:"if",locations:[{start:{line:4276,column:12},end:{line:4278,column:13}},{start:{line:4276,column:12},end:{line:4278,column:13}}],line:4276},"237":{loc:{start:{line:4276,column:16},end:{line:4276,column:60}},type:"binary-expr",locations:[{start:{line:4276,column:16},end:{line:4276,column:37}},{start:{line:4276,column:41},end:{line:4276,column:60}}],line:4276},"238":{loc:{start:{line:4279,column:12},end:{line:4282,column:13}},type:"if",locations:[{start:{line:4279,column:12},end:{line:4282,column:13}},{start:{line:4279,column:12},end:{line:4282,column:13}}],line:4279},"239":{loc:{start:{line:4388,column:32},end:{line:4388,column:59}},type:"binary-expr",locations:[{start:{line:4388,column:32},end:{line:4388,column:51}},{start:{line:4388,column:55},end:{line:4388,column:59}}],line:4388},"240":{loc:{start:{line:4402,column:12},end:{line:4405,column:13}},type:"if",locations:[{start:{line:4402,column:12},end:{line:4405,column:13}},{start:{line:4402,column:12},end:{line:4405,column:13}}],line:4402},"241":{loc:{start:{line:4406,column:12},end:{line:4408,column:13}},type:"if",locations:[{start:{line:4406,column:12},end:{line:4408,column:13}},{start:{line:4406,column:12},end:{line:4408,column:13}}],line:4406},"242":{loc:{start:{line:4406,column:16},end:{line:4406,column:55}},type:"binary-expr",locations:[{start:{line:4406,column:16},end:{line:4406,column:21}},{start:{line:4406,column:25},end:{line:4406,column:55}}],line:4406},"243":{loc:{start:{line:4411,column:32},end:{line:4411,column:69}},type:"binary-expr",locations:[{start:{line:4411,column:32},end:{line:4411,column:49}},{start:{line:4411,column:53},end:{line:4411,column:69}}],line:4411},"244":{loc:{start:{line:4550,column:41},end:{line:4551,column:53}},type:"cond-expr",locations:[{start:{line:4551,column:16},end:{line:4551,column:46}},{start:{line:4551,column:49},end:{line:4551,column:53}}],line:4550},"245":{loc:{start:{line:4570,column:12},end:{line:4572,column:13}},type:"if",locations:[{start:{line:4570,column:12},end:{line:4572,column:13}},{start:{line:4570,column:12},end:{line:4572,column:13}}],line:4570},"246":{loc:{start:{line:4570,column:16},end:{line:4570,column:49}},type:"binary-expr",locations:[{start:{line:4570,column:16},end:{line:4570,column:19}},{start:{line:4570,column:23},end:{line:4570,column:49}}],line:4570},"247":{loc:{start:{line:4574,column:12},end:{line:4576,column:13}},type:"if",locations:[{start:{line:4574,column:12},end:{line:4576,column:13}},{start:{line:4574,column:12},end:{line:4576,column:13}}],line:4574},"248":{loc:{start:{line:4595,column:12},end:{line:4597,column:13}},type:"if",locations:[{start:{line:4595,column:12},end:{line:4597,column:13}},{start:{line:4595,column:12},end:{line:4597,column:13}}],line:4595},"249":{loc:{start:{line:4598,column:12},end:{line:4604,column:13}},type:"if",locations:[{start:{line:4598,column:12},end:{line:4604,column:13}},{start:{line:4598,column:12},end:{line:4604,column:13}}],line:4598},"250":{loc:{start:{line:4605,column:12},end:{line:4610,column:13}},type:"if",locations:[{start:{line:4605,column:12},end:{line:4610,column:13}},{start:{line:4605,column:12},end:{line:4610,column:13}}],line:4605},"251":{loc:{start:{line:4618,column:12},end:{line:4623,column:13}},type:"if",locations:[{start:{line:4618,column:12},end:{line:4623,column:13}},{start:{line:4618,column:12},end:{line:4623,column:13}}],line:4618},"252":{loc:{start:{line:4643,column:12},end:{line:4645,column:13}},type:"if",locations:[{start:{line:4643,column:12},end:{line:4645,column:13}},{start:{line:4643,column:12},end:{line:4645,column:13}}],line:4643},"253":{loc:{start:{line:4649,column:12},end:{line:4651,column:13}},type:"if",locations:[{start:{line:4649,column:12},end:{line:4651,column:13}},{start:{line:4649,column:12},end:{line:4651,column:13}}],line:4649},"254":{loc:{start:{line:4653,column:12},end:{line:4656,column:13}},type:"if",locations:[{start:{line:4653,column:12},end:{line:4656,column:13}},{start:{line:4653,column:12},end:{line:4656,column:13}}],line:4653},"255":{loc:{start:{line:4653,column:16},end:{line:4653,column:86}},type:"binary-expr",locations:[{start:{line:4653,column:16},end:{line:4653,column:35}},{start:{line:4653,column:39},end:{line:4653,column:86}}],line:4653},"256":{loc:{start:{line:4658,column:12},end:{line:4661,column:13}},type:"if",locations:[{start:{line:4658,column:12},end:{line:4661,column:13}},{start:{line:4658,column:12},end:{line:4661,column:13}}],line:4658},"257":{loc:{start:{line:4658,column:16},end:{line:4658,column:104}},type:"binary-expr",locations:[{start:{line:4658,column:16},end:{line:4658,column:35}},{start:{line:4658,column:39},end:{line:4658,column:104}}],line:4658},"258":{loc:{start:{line:4663,column:12},end:{line:4665,column:13}},type:"if",locations:[{start:{line:4663,column:12},end:{line:4665,column:13}},{start:{line:4663,column:12},end:{line:4665,column:13}}],line:4663},"259":{loc:{start:{line:4663,column:16},end:{line:4663,column:85}},type:"binary-expr",locations:[{start:{line:4663,column:16},end:{line:4663,column:40}},{start:{line:4663,column:44},end:{line:4663,column:85}}],line:4663},"260":{loc:{start:{line:4678,column:31},end:{line:4678,column:83}},type:"cond-expr",locations:[{start:{line:4678,column:63},end:{line:4678,column:71}},{start:{line:4678,column:74},end:{line:4678,column:83}}],line:4678},"261":{loc:{start:{line:4694,column:12},end:{line:4696,column:13}},type:"if",locations:[{start:{line:4694,column:12},end:{line:4696,column:13}},{start:{line:4694,column:12},end:{line:4696,column:13}}],line:4694},"262":{loc:{start:{line:4698,column:12},end:{line:4700,column:13}},type:"if",locations:[{start:{line:4698,column:12},end:{line:4700,column:13}},{start:{line:4698,column:12},end:{line:4700,column:13}}],line:4698},"263":{loc:{start:{line:4709,column:12},end:{line:4711,column:13}},type:"if",locations:[{start:{line:4709,column:12},end:{line:4711,column:13}},{start:{line:4709,column:12},end:{line:4711,column:13}}],line:4709},"264":{loc:{start:{line:4738,column:12},end:{line:4740,column:13}},type:"if",locations:[{start:{line:4738,column:12},end:{line:4740,column:13}},{start:{line:4738,column:12},end:{line:4740,column:13}}],line:4738},"265":{loc:{start:{line:4742,column:12},end:{line:4744,column:13}},type:"if",locations:[{start:{line:4742,column:12},end:{line:4744,column:13}},{start:{line:4742,column:12},end:{line:4744,column:13}}],line:4742},"266":{loc:{start:{line:4746,column:12},end:{line:4748,column:13}},type:"if",locations:[{start:{line:4746,column:12},end:{line:4748,column:13}},{start:{line:4746,column:12},end:{line:4748,column:13}}],line:4746},"267":{loc:{start:{line:4746,column:16},end:{line:4746,column:73}},type:"binary-expr",locations:[{start:{line:4746,column:16},end:{line:4746,column:48}},{start:{line:4746,column:52},end:{line:4746,column:73}}],line:4746},"268":{loc:{start:{line:4749,column:12},end:{line:4751,column:13}},type:"if",locations:[{start:{line:4749,column:12},end:{line:4751,column:13}},{start:{line:4749,column:12},end:{line:4751,column:13}}],line:4749},"269":{loc:{start:{line:4749,column:16},end:{line:4749,column:69}},type:"binary-expr",locations:[{start:{line:4749,column:16},end:{line:4749,column:46}},{start:{line:4749,column:50},end:{line:4749,column:69}}],line:4749},"270":{loc:{start:{line:4752,column:12},end:{line:4754,column:13}},type:"if",locations:[{start:{line:4752,column:12},end:{line:4754,column:13}},{start:{line:4752,column:12},end:{line:4754,column:13}}],line:4752},"271":{loc:{start:{line:4752,column:16},end:{line:4752,column:71}},type:"binary-expr",locations:[{start:{line:4752,column:16},end:{line:4752,column:47}},{start:{line:4752,column:51},end:{line:4752,column:71}}],line:4752},"272":{loc:{start:{line:4755,column:12},end:{line:4757,column:13}},type:"if",locations:[{start:{line:4755,column:12},end:{line:4757,column:13}},{start:{line:4755,column:12},end:{line:4757,column:13}}],line:4755},"273":{loc:{start:{line:4755,column:16},end:{line:4755,column:73}},type:"binary-expr",locations:[{start:{line:4755,column:16},end:{line:4755,column:48}},{start:{line:4755,column:52},end:{line:4755,column:73}}],line:4755},"274":{loc:{start:{line:4783,column:12},end:{line:4785,column:13}},type:"if",locations:[{start:{line:4783,column:12},end:{line:4785,column:13}},{start:{line:4783,column:12},end:{line:4785,column:13}}],line:4783},"275":{loc:{start:{line:4787,column:12},end:{line:4789,column:13}},type:"if",locations:[{start:{line:4787,column:12},end:{line:4789,column:13}},{start:{line:4787,column:12},end:{line:4789,column:13}}],line:4787},"276":{loc:{start:{line:4814,column:12},end:{line:4816,column:13}},type:"if",locations:[{start:{line:4814,column:12},end:{line:4816,column:13}},{start:{line:4814,column:12},end:{line:4816,column:13}}],line:4814},"277":{loc:{start:{line:4818,column:12},end:{line:4820,column:13}},type:"if",locations:[{start:{line:4818,column:12},end:{line:4820,column:13}},{start:{line:4818,column:12},end:{line:4820,column:13}}],line:4818},"278":{loc:{start:{line:4821,column:12},end:{line:4823,column:13}},type:"if",locations:[{start:{line:4821,column:12},end:{line:4823,column:13}},{start:{line:4821,column:12},end:{line:4823,column:13}}],line:4821},"279":{loc:{start:{line:4846,column:12},end:{line:4848,column:13}},type:"if",locations:[{start:{line:4846,column:12},end:{line:4848,column:13}},{start:{line:4846,column:12},end:{line:4848,column:13}}],line:4846},"280":{loc:{start:{line:4850,column:12},end:{line:4852,column:13}},type:"if",locations:[{start:{line:4850,column:12},end:{line:4852,column:13}},{start:{line:4850,column:12},end:{line:4852,column:13}}],line:4850},"281":{loc:{start:{line:4860,column:12},end:{line:4862,column:13}},type:"if",locations:[{start:{line:4860,column:12},end:{line:4862,column:13}},{start:{line:4860,column:12},end:{line:4862,column:13}}],line:4860},"282":{loc:{start:{line:4883,column:12},end:{line:4885,column:13}},type:"if",locations:[{start:{line:4883,column:12},end:{line:4885,column:13}},{start:{line:4883,column:12},end:{line:4885,column:13}}],line:4883},"283":{loc:{start:{line:4887,column:12},end:{line:4889,column:13}},type:"if",locations:[{start:{line:4887,column:12},end:{line:4889,column:13}},{start:{line:4887,column:12},end:{line:4889,column:13}}],line:4887},"284":{loc:{start:{line:4894,column:12},end:{line:4896,column:13}},type:"if",locations:[{start:{line:4894,column:12},end:{line:4896,column:13}},{start:{line:4894,column:12},end:{line:4896,column:13}}],line:4894},"285":{loc:{start:{line:4894,column:16},end:{line:4894,column:73}},type:"binary-expr",locations:[{start:{line:4894,column:16},end:{line:4894,column:48}},{start:{line:4894,column:52},end:{line:4894,column:73}}],line:4894},"286":{loc:{start:{line:4897,column:12},end:{line:4899,column:13}},type:"if",locations:[{start:{line:4897,column:12},end:{line:4899,column:13}},{start:{line:4897,column:12},end:{line:4899,column:13}}],line:4897},"287":{loc:{start:{line:4897,column:16},end:{line:4897,column:69}},type:"binary-expr",locations:[{start:{line:4897,column:16},end:{line:4897,column:46}},{start:{line:4897,column:50},end:{line:4897,column:69}}],line:4897},"288":{loc:{start:{line:4900,column:12},end:{line:4902,column:13}},type:"if",locations:[{start:{line:4900,column:12},end:{line:4902,column:13}},{start:{line:4900,column:12},end:{line:4902,column:13}}],line:4900},"289":{loc:{start:{line:4900,column:16},end:{line:4900,column:71}},type:"binary-expr",locations:[{start:{line:4900,column:16},end:{line:4900,column:47}},{start:{line:4900,column:51},end:{line:4900,column:71}}],line:4900},"290":{loc:{start:{line:4903,column:12},end:{line:4905,column:13}},type:"if",locations:[{start:{line:4903,column:12},end:{line:4905,column:13}},{start:{line:4903,column:12},end:{line:4905,column:13}}],line:4903},"291":{loc:{start:{line:4903,column:16},end:{line:4903,column:73}},type:"binary-expr",locations:[{start:{line:4903,column:16},end:{line:4903,column:48}},{start:{line:4903,column:52},end:{line:4903,column:73}}],line:4903},"292":{loc:{start:{line:4929,column:12},end:{line:4931,column:13}},type:"if",locations:[{start:{line:4929,column:12},end:{line:4931,column:13}},{start:{line:4929,column:12},end:{line:4931,column:13}}],line:4929},"293":{loc:{start:{line:4933,column:12},end:{line:4935,column:13}},type:"if",locations:[{start:{line:4933,column:12},end:{line:4935,column:13}},{start:{line:4933,column:12},end:{line:4935,column:13}}],line:4933},"294":{loc:{start:{line:4958,column:12},end:{line:4960,column:13}},type:"if",locations:[{start:{line:4958,column:12},end:{line:4960,column:13}},{start:{line:4958,column:12},end:{line:4960,column:13}}],line:4958},"295":{loc:{start:{line:4962,column:12},end:{line:4964,column:13}},type:"if",locations:[{start:{line:4962,column:12},end:{line:4964,column:13}},{start:{line:4962,column:12},end:{line:4964,column:13}}],line:4962},"296":{loc:{start:{line:4965,column:12},end:{line:4967,column:13}},type:"if",locations:[{start:{line:4965,column:12},end:{line:4967,column:13}},{start:{line:4965,column:12},end:{line:4967,column:13}}],line:4965},"297":{loc:{start:{line:4990,column:12},end:{line:4992,column:13}},type:"if",locations:[{start:{line:4990,column:12},end:{line:4992,column:13}},{start:{line:4990,column:12},end:{line:4992,column:13}}],line:4990},"298":{loc:{start:{line:4995,column:12},end:{line:5047,column:13}},type:"if",locations:[{start:{line:4995,column:12},end:{line:5047,column:13}},{start:{line:4995,column:12},end:{line:5047,column:13}}],line:4995},"299":{loc:{start:{line:4995,column:16},end:{line:5002,column:41}},type:"binary-expr",locations:[{start:{line:4995,column:16},end:{line:4995,column:58}},{start:{line:4996,column:16},end:{line:5002,column:41}}],line:4995},"300":{loc:{start:{line:5008,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5008,column:17},end:{line:5047,column:13}},{start:{line:5008,column:17},end:{line:5047,column:13}}],line:5008},"301":{loc:{start:{line:5008,column:21},end:{line:5018,column:37}},type:"binary-expr",locations:[{start:{line:5008,column:21},end:{line:5008,column:40}},{start:{line:5009,column:16},end:{line:5018,column:37}}],line:5008},"302":{loc:{start:{line:5025,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5025,column:17},end:{line:5047,column:13}},{start:{line:5025,column:17},end:{line:5047,column:13}}],line:5025},"303":{loc:{start:{line:5025,column:21},end:{line:5032,column:37}},type:"binary-expr",locations:[{start:{line:5025,column:21},end:{line:5025,column:43}},{start:{line:5026,column:16},end:{line:5032,column:37}}],line:5025},"304":{loc:{start:{line:5039,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5039,column:17},end:{line:5047,column:13}},{start:{line:5039,column:17},end:{line:5047,column:13}}],line:5039},"305":{loc:{start:{line:5039,column:21},end:{line:5040,column:41}},type:"binary-expr",locations:[{start:{line:5039,column:21},end:{line:5039,column:74}},{start:{line:5040,column:16},end:{line:5040,column:41}}],line:5039},"306":{loc:{start:{line:5045,column:17},end:{line:5047,column:13}},type:"if",locations:[{start:{line:5045,column:17},end:{line:5047,column:13}},{start:{line:5045,column:17},end:{line:5047,column:13}}],line:5045},"307":{loc:{start:{line:5108,column:12},end:{line:5110,column:13}},type:"if",locations:[{start:{line:5108,column:12},end:{line:5110,column:13}},{start:{line:5108,column:12},end:{line:5110,column:13}}],line:5108},"308":{loc:{start:{line:5113,column:16},end:{line:5116,column:17}},type:"if",locations:[{start:{line:5113,column:16},end:{line:5116,column:17}},{start:{line:5113,column:16},end:{line:5116,column:17}}],line:5113},"309":{loc:{start:{line:5118,column:16},end:{line:5123,column:17}},type:"if",locations:[{start:{line:5118,column:16},end:{line:5123,column:17}},{start:{line:5118,column:16},end:{line:5123,column:17}}],line:5118},"310":{loc:{start:{line:5118,column:20},end:{line:5118,column:65}},type:"binary-expr",locations:[{start:{line:5118,column:20},end:{line:5118,column:39}},{start:{line:5118,column:43},end:{line:5118,column:65}}],line:5118},"311":{loc:{start:{line:5154,column:12},end:{line:5157,column:13}},type:"if",locations:[{start:{line:5154,column:12},end:{line:5157,column:13}},{start:{line:5154,column:12},end:{line:5157,column:13}}],line:5154},"312":{loc:{start:{line:5158,column:19},end:{line:5158,column:29}},type:"binary-expr",locations:[{start:{line:5158,column:19},end:{line:5158,column:23}},{start:{line:5158,column:27},end:{line:5158,column:29}}],line:5158},"313":{loc:{start:{line:5161,column:16},end:{line:5166,column:17}},type:"if",locations:[{start:{line:5161,column:16},end:{line:5166,column:17}},{start:{line:5161,column:16},end:{line:5166,column:17}}],line:5161},"314":{loc:{start:{line:5225,column:20},end:{line:5225,column:31}},type:"binary-expr",locations:[{start:{line:5225,column:20},end:{line:5225,column:25}},{start:{line:5225,column:29},end:{line:5225,column:31}}],line:5225},"315":{loc:{start:{line:5226,column:26},end:{line:5226,column:43}},type:"binary-expr",locations:[{start:{line:5226,column:26},end:{line:5226,column:37}},{start:{line:5226,column:41},end:{line:5226,column:43}}],line:5226},"316":{loc:{start:{line:5235,column:12},end:{line:5237,column:13}},type:"if",locations:[{start:{line:5235,column:12},end:{line:5237,column:13}},{start:{line:5235,column:12},end:{line:5237,column:13}}],line:5235},"317":{loc:{start:{line:5238,column:12},end:{line:5240,column:13}},type:"if",locations:[{start:{line:5238,column:12},end:{line:5240,column:13}},{start:{line:5238,column:12},end:{line:5240,column:13}}],line:5238},"318":{loc:{start:{line:5241,column:12},end:{line:5243,column:13}},type:"if",locations:[{start:{line:5241,column:12},end:{line:5243,column:13}},{start:{line:5241,column:12},end:{line:5243,column:13}}],line:5241},"319":{loc:{start:{line:5244,column:12},end:{line:5246,column:13}},type:"if",locations:[{start:{line:5244,column:12},end:{line:5246,column:13}},{start:{line:5244,column:12},end:{line:5246,column:13}}],line:5244},"320":{loc:{start:{line:5249,column:12},end:{line:5251,column:13}},type:"if",locations:[{start:{line:5249,column:12},end:{line:5251,column:13}},{start:{line:5249,column:12},end:{line:5251,column:13}}],line:5249},"321":{loc:{start:{line:5317,column:19},end:{line:5317,column:77}},type:"binary-expr",locations:[{start:{line:5317,column:19},end:{line:5317,column:48}},{start:{line:5317,column:52},end:{line:5317,column:69}},{start:{line:5317,column:73},end:{line:5317,column:77}}],line:5317},"322":{loc:{start:{line:5335,column:16},end:{line:5337,column:17}},type:"if",locations:[{start:{line:5335,column:16},end:{line:5337,column:17}},{start:{line:5335,column:16},end:{line:5337,column:17}}],line:5335},"323":{loc:{start:{line:5342,column:16},end:{line:5344,column:17}},type:"if",locations:[{start:{line:5342,column:16},end:{line:5344,column:17}},{start:{line:5342,column:16},end:{line:5344,column:17}}],line:5342},"324":{loc:{start:{line:5454,column:12},end:{line:5457,column:13}},type:"if",locations:[{start:{line:5454,column:12},end:{line:5457,column:13}},{start:{line:5454,column:12},end:{line:5457,column:13}}],line:5454},"325":{loc:{start:{line:5454,column:16},end:{line:5454,column:59}},type:"binary-expr",locations:[{start:{line:5454,column:16},end:{line:5454,column:25}},{start:{line:5454,column:29},end:{line:5454,column:59}}],line:5454},"326":{loc:{start:{line:5460,column:23},end:{line:5460,column:72}},type:"cond-expr",locations:[{start:{line:5460,column:38},end:{line:5460,column:67}},{start:{line:5460,column:70},end:{line:5460,column:72}}],line:5460},"327":{loc:{start:{line:5487,column:26},end:{line:5487,column:68}},type:"cond-expr",locations:[{start:{line:5487,column:43},end:{line:5487,column:60}},{start:{line:5487,column:65},end:{line:5487,column:67}}],line:5487},"328":{loc:{start:{line:5556,column:12},end:{line:5559,column:13}},type:"if",locations:[{start:{line:5556,column:12},end:{line:5559,column:13}},{start:{line:5556,column:12},end:{line:5559,column:13}}],line:5556},"329":{loc:{start:{line:5564,column:32},end:{line:5564,column:76}},type:"binary-expr",locations:[{start:{line:5564,column:32},end:{line:5564,column:70}},{start:{line:5564,column:74},end:{line:5564,column:76}}],line:5564},"330":{loc:{start:{line:5565,column:12},end:{line:5568,column:13}},type:"if",locations:[{start:{line:5565,column:12},end:{line:5568,column:13}},{start:{line:5565,column:12},end:{line:5568,column:13}}],line:5565},"331":{loc:{start:{line:5572,column:12},end:{line:5574,column:13}},type:"if",locations:[{start:{line:5572,column:12},end:{line:5574,column:13}},{start:{line:5572,column:12},end:{line:5574,column:13}}],line:5572},"332":{loc:{start:{line:5572,column:16},end:{line:5572,column:84}},type:"binary-expr",locations:[{start:{line:5572,column:16},end:{line:5572,column:48}},{start:{line:5572,column:52},end:{line:5572,column:84}}],line:5572},"333":{loc:{start:{line:5614,column:16},end:{line:5616,column:17}},type:"if",locations:[{start:{line:5614,column:16},end:{line:5616,column:17}},{start:{line:5614,column:16},end:{line:5616,column:17}}],line:5614},"334":{loc:{start:{line:5645,column:12},end:{line:5648,column:13}},type:"if",locations:[{start:{line:5645,column:12},end:{line:5648,column:13}},{start:{line:5645,column:12},end:{line:5648,column:13}}],line:5645},"335":{loc:{start:{line:5649,column:23},end:{line:5649,column:48}},type:"binary-expr",locations:[{start:{line:5649,column:23},end:{line:5649,column:31}},{start:{line:5649,column:35},end:{line:5649,column:48}}],line:5649},"336":{loc:{start:{line:5651,column:12},end:{line:5654,column:13}},type:"if",locations:[{start:{line:5651,column:12},end:{line:5654,column:13}},{start:{line:5651,column:12},end:{line:5654,column:13}}],line:5651},"337":{loc:{start:{line:5655,column:12},end:{line:5658,column:13}},type:"if",locations:[{start:{line:5655,column:12},end:{line:5658,column:13}},{start:{line:5655,column:12},end:{line:5658,column:13}}],line:5655},"338":{loc:{start:{line:5662,column:29},end:{line:5662,column:107}},type:"binary-expr",locations:[{start:{line:5662,column:29},end:{line:5662,column:48}},{start:{line:5662,column:52},end:{line:5662,column:78}},{start:{line:5662,column:82},end:{line:5662,column:107}}],line:5662},"339":{loc:{start:{line:5663,column:35},end:{line:5663,column:123}},type:"binary-expr",locations:[{start:{line:5663,column:35},end:{line:5663,column:54}},{start:{line:5663,column:58},end:{line:5663,column:89}},{start:{line:5663,column:93},end:{line:5663,column:123}}],line:5663},"340":{loc:{start:{line:5664,column:35},end:{line:5664,column:123}},type:"binary-expr",locations:[{start:{line:5664,column:35},end:{line:5664,column:54}},{start:{line:5664,column:58},end:{line:5664,column:89}},{start:{line:5664,column:93},end:{line:5664,column:123}}],line:5664},"341":{loc:{start:{line:5670,column:16},end:{line:5676,column:17}},type:"if",locations:[{start:{line:5670,column:16},end:{line:5676,column:17}},{start:{line:5670,column:16},end:{line:5676,column:17}}],line:5670},"342":{loc:{start:{line:5713,column:24},end:{line:5713,column:39}},type:"binary-expr",locations:[{start:{line:5713,column:24},end:{line:5713,column:33}},{start:{line:5713,column:37},end:{line:5713,column:39}}],line:5713},"343":{loc:{start:{line:5733,column:12},end:{line:5736,column:13}},type:"if",locations:[{start:{line:5733,column:12},end:{line:5736,column:13}},{start:{line:5733,column:12},end:{line:5736,column:13}}],line:5733},"344":{loc:{start:{line:5733,column:16},end:{line:5733,column:53}},type:"binary-expr",locations:[{start:{line:5733,column:16},end:{line:5733,column:40}},{start:{line:5733,column:44},end:{line:5733,column:53}}],line:5733},"345":{loc:{start:{line:5738,column:21},end:{line:5738,column:33}},type:"binary-expr",locations:[{start:{line:5738,column:21},end:{line:5738,column:27}},{start:{line:5738,column:31},end:{line:5738,column:33}}],line:5738},"346":{loc:{start:{line:5739,column:23},end:{line:5739,column:47}},type:"binary-expr",locations:[{start:{line:5739,column:23},end:{line:5739,column:31}},{start:{line:5739,column:35},end:{line:5739,column:47}}],line:5739},"347":{loc:{start:{line:5744,column:16},end:{line:5750,column:17}},type:"if",locations:[{start:{line:5744,column:16},end:{line:5750,column:17}},{start:{line:5744,column:16},end:{line:5750,column:17}}],line:5744},"348":{loc:{start:{line:5774,column:21},end:{line:5774,column:33}},type:"binary-expr",locations:[{start:{line:5774,column:21},end:{line:5774,column:27}},{start:{line:5774,column:31},end:{line:5774,column:33}}],line:5774},"349":{loc:{start:{line:5777,column:29},end:{line:5777,column:49}},type:"binary-expr",locations:[{start:{line:5777,column:29},end:{line:5777,column:44}},{start:{line:5777,column:48},end:{line:5777,column:49}}],line:5777},"350":{loc:{start:{line:5783,column:23},end:{line:5783,column:48}},type:"binary-expr",locations:[{start:{line:5783,column:23},end:{line:5783,column:31}},{start:{line:5783,column:35},end:{line:5783,column:48}}],line:5783},"351":{loc:{start:{line:5791,column:16},end:{line:5799,column:17}},type:"if",locations:[{start:{line:5791,column:16},end:{line:5799,column:17}},{start:{line:5791,column:16},end:{line:5799,column:17}}],line:5791},"352":{loc:{start:{line:5795,column:38},end:{line:5795,column:76}},type:"cond-expr",locations:[{start:{line:5795,column:53},end:{line:5795,column:72}},{start:{line:5795,column:75},end:{line:5795,column:76}}],line:5795}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":0,"529":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"536":0,"537":0,"538":0,"539":0,"540":0,"541":0,"542":0,"543":0,"544":0,"545":0,"546":0,"547":0,"548":0,"549":0,"550":0,"551":0,"552":0,"553":0,"554":0,"555":0,"556":0,"557":0,"558":0,"559":0,"560":0,"561":0,"562":0,"563":0,"564":0,"565":0,"566":0,"567":0,"568":0,"569":0,"570":0,"571":0,"572":0,"573":0,"574":0,"575":0,"576":0,"577":0,"578":0,"579":0,"580":0,"581":0,"582":0,"583":0,"584":0,"585":0,"586":0,"587":0,"588":0,"589":0,"590":0,"591":0,"592":0,"593":0,"594":0,"595":0,"596":0,"597":0,"598":0,"599":0,"600":0,"601":0,"602":0,"603":0,"604":0,"605":0,"606":0,"607":0,"608":0,"609":0,"610":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"619":0,"620":0,"621":0,"622":0,"623":0,"624":0,"625":0,"626":0,"627":0,"628":0,"629":0,"630":0,"631":0,"632":0,"633":0,"634":0,"635":0,"636":0,"637":0,"638":0,"639":0,"640":0,"641":0,"642":0,"643":0,"644":0,"645":0,"646":0,"647":0,"648":0,"649":0,"650":0,"651":0,"652":0,"653":0,"654":0,"655":0,"656":0,"657":0,"658":0,"659":0,"660":0,"661":0,"662":0,"663":0,"664":0,"665":0,"666":0,"667":0,"668":0,"669":0,"670":0,"671":0,"672":0,"673":0,"674":0,"675":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"682":0,"683":0,"684":0,"685":0,"686":0,"687":0,"688":0,"689":0,"690":0,"691":0,"692":0,"693":0,"694":0,"695":0,"696":0,"697":0,"698":0,"699":0,"700":0,"701":0,"702":0,"703":0,"704":0,"705":0,"706":0,"707":0,"708":0,"709":0,"710":0,"711":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"720":0,"721":0,"722":0,"723":0,"724":0,"725":0,"726":0,"727":0,"728":0,"729":0,"730":0,"731":0,"732":0,"733":0,"734":0,"735":0,"736":0,"737":0,"738":0,"739":0,"740":0,"741":0,"742":0,"743":0,"744":0,"745":0,"746":0,"747":0,"748":0,"749":0,"750":0,"751":0,"752":0,"753":0,"754":0,"755":0,"756":0,"757":0,"758":0,"759":0,"760":0,"761":0,"762":0,"763":0,"764":0,"765":0,"766":0,"767":0,"768":0,"769":0,"770":0,"771":0,"772":0,"773":0,"774":0,"775":0,"776":0,"777":0,"778":0,"779":0,"780":0,"781":0,"782":0,"783":0,"784":0,"785":0,"786":0,"787":0,"788":0,"789":0,"790":0,"791":0,"792":0,"793":0,"794":0,"795":0,"796":0,"797":0,"798":0,"799":0,"800":0,"801":0,"802":0,"803":0,"804":0,"805":0,"806":0,"807":0,"808":0,"809":0,"810":0,"811":0,"812":0,"813":0,"814":0,"815":0,"816":0,"817":0,"818":0,"819":0,"820":0,"821":0,"822":0,"823":0,"824":0,"825":0,"826":0,"827":0,"828":0,"829":0,"830":0,"831":0,"832":0,"833":0,"834":0,"835":0,"836":0,"837":0,"838":0,"839":0,"840":0,"841":0,"842":0,"843":0,"844":0,"845":0,"846":0,"847":0,"848":0,"849":0,"850":0,"851":0,"852":0,"853":0,"854":0,"855":0,"856":0,"857":0,"858":0,"859":0,"860":0,"861":0,"862":0,"863":0,"864":0,"865":0,"866":0,"867":0,"868":0,"869":0,"870":0,"871":0,"872":0,"873":0,"874":0,"875":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"882":0,"883":0,"884":0,"885":0,"886":0,"887":0,"888":0,"889":0,"890":0,"891":0,"892":0,"893":0,"894":0,"895":0,"896":0,"897":0,"898":0,"899":0,"900":0,"901":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"908":0,"909":0,"910":0,"911":0,"912":0,"913":0,"914":0,"915":0,"916":0,"917":0,"918":0,"919":0,"920":0,"921":0,"922":0,"923":0,"924":0,"925":0,"926":0,"927":0,"928":0,"929":0,"930":0,"931":0,"932":0,"933":0,"934":0,"935":0,"936":0,"937":0,"938":0,"939":0,"940":0,"941":0,"942":0,"943":0,"944":0,"945":0,"946":0,"947":0,"948":0,"949":0,"950":0,"951":0,"952":0,"953":0,"954":0,"955":0,"956":0,"957":0,"958":0,"959":0,"960":0,"961":0,"962":0,"963":0,"964":0,"965":0,"966":0,"967":0,"968":0,"969":0,"970":0,"971":0,"972":0,"973":0,"974":0,"975":0,"976":0,"977":0,"978":0,"979":0,"980":0,"981":0,"982":0,"983":0,"984":0,"985":0,"986":0,"987":0,"988":0,"989":0,"990":0,"991":0,"992":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1001":0,"1002":0,"1003":0,"1004":0,"1005":0,"1006":0,"1007":0,"1008":0,"1009":0,"1010":0,"1011":0,"1012":0,"1013":0,"1014":0,"1015":0,"1016":0,"1017":0,"1018":0,"1019":0,"1020":0,"1021":0,"1022":0,"1023":0,"1024":0,"1025":0,"1026":0,"1027":0,"1028":0,"1029":0,"1030":0,"1031":0,"1032":0,"1033":0,"1034":0,"1035":0,"1036":0,"1037":0,"1038":0,"1039":0,"1040":0,"1041":0,"1042":0,"1043":0,"1044":0,"1045":0,"1046":0,"1047":0,"1048":0,"1049":0,"1050":0,"1051":0,"1052":0,"1053":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1065":0,"1066":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1073":0,"1074":0,"1075":0,"1076":0,"1077":0,"1078":0,"1079":0,"1080":0,"1081":0,"1082":0,"1083":0,"1084":0,"1085":0,"1086":0,"1087":0,"1088":0,"1089":0,"1090":0,"1091":0,"1092":0,"1093":0,"1094":0,"1095":0,"1096":0,"1097":0,"1098":0,"1099":0,"1100":0,"1101":0,"1102":0,"1103":0,"1104":0,"1105":0,"1106":0,"1107":0,"1108":0,"1109":0,"1110":0,"1111":0,"1112":0,"1113":0,"1114":0,"1115":0,"1116":0,"1117":0,"1118":0,"1119":0,"1120":0,"1121":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1131":0,"1132":0,"1133":0,"1134":0,"1135":0,"1136":0,"1137":0,"1138":0,"1139":0,"1140":0,"1141":0,"1142":0,"1143":0,"1144":0,"1145":0,"1146":0,"1147":0,"1148":0,"1149":0,"1150":0,"1151":0,"1152":0,"1153":0,"1154":0,"1155":0,"1156":0,"1157":0,"1158":0,"1159":0,"1160":0,"1161":0,"1162":0,"1163":0,"1164":0,"1165":0,"1166":0,"1167":0,"1168":0,"1169":0,"1170":0,"1171":0,"1172":0,"1173":0,"1174":0,"1175":0,"1176":0,"1177":0,"1178":0,"1179":0,"1180":0,"1181":0,"1182":0,"1183":0,"1184":0,"1185":0,"1186":0,"1187":0,"1188":0,"1189":0,"1190":0,"1191":0,"1192":0,"1193":0,"1194":0,"1195":0,"1196":0,"1197":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0,0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0],"205":[0,0],"206":[0,0],"207":[0,0],"208":[0,0],"209":[0,0],"210":[0,0],"211":[0,0],"212":[0,0,0],"213":[0,0],"214":[0,0],"215":[0,0],"216":[0,0],"217":[0,0],"218":[0,0],"219":[0,0],"220":[0,0,0],"221":[0,0],"222":[0,0],"223":[0,0],"224":[0,0],"225":[0,0],"226":[0,0],"227":[0,0],"228":[0,0],"229":[0,0],"230":[0,0],"231":[0,0],"232":[0,0],"233":[0,0],"234":[0,0],"235":[0,0],"236":[0,0],"237":[0,0],"238":[0,0],"239":[0,0],"240":[0,0],"241":[0,0],"242":[0,0],"243":[0,0],"244":[0,0],"245":[0,0],"246":[0,0],"247":[0,0],"248":[0,0],"249":[0,0],"250":[0,0],"251":[0,0],"252":[0,0],"253":[0,0],"254":[0,0],"255":[0,0],"256":[0,0],"257":[0,0],"258":[0,0],"259":[0,0],"260":[0,0],"261":[0,0],"262":[0,0],"263":[0,0],"264":[0,0],"265":[0,0],"266":[0,0],"267":[0,0],"268":[0,0],"269":[0,0],"270":[0,0],"271":[0,0],"272":[0,0],"273":[0,0],"274":[0,0],"275":[0,0],"276":[0,0],"277":[0,0],"278":[0,0],"279":[0,0],"280":[0,0],"281":[0,0],"282":[0,0],"283":[0,0],"284":[0,0],"285":[0,0],"286":[0,0],"287":[0,0],"288":[0,0],"289":[0,0],"290":[0,0],"291":[0,0],"292":[0,0],"293":[0,0],"294":[0,0],"295":[0,0],"296":[0,0],"297":[0,0],"298":[0,0],"299":[0,0],"300":[0,0],"301":[0,0],"302":[0,0],"303":[0,0],"304":[0,0],"305":[0,0],"306":[0,0],"307":[0,0],"308":[0,0],"309":[0,0],"310":[0,0],"311":[0,0],"312":[0,0],"313":[0,0],"314":[0,0],"315":[0,0],"316":[0,0],"317":[0,0],"318":[0,0],"319":[0,0],"320":[0,0],"321":[0,0,0],"322":[0,0],"323":[0,0],"324":[0,0],"325":[0,0],"326":[0,0],"327":[0,0],"328":[0,0],"329":[0,0],"330":[0,0],"331":[0,0],"332":[0,0],"333":[0,0],"334":[0,0],"335":[0,0],"336":[0,0],"337":[0,0],"338":[0,0,0],"339":[0,0,0],"340":[0,0,0],"341":[0,0],"342":[0,0],"343":[0,0],"344":[0,0],"345":[0,0],"346":[0,0],"347":[0,0],"348":[0,0],"349":[0,0],"350":[0,0],"351":[0,0],"352":[0,0]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"1e13507780108878ff5a225bb0ab3d0d383df74e"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore -cov_1ks4ntaci2=function(){return actualCoverage;};}return actualCoverage;}cov_1ks4ntaci2();cov_1ks4ntaci2().s[0]++;/*!*/ // Copyright 2014 Splunk, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -(function(){"use strict";cov_1ks4ntaci2().f[0]++;var Context=(cov_1ks4ntaci2().s[1]++,require('./context'));var Http=(cov_1ks4ntaci2().s[2]++,require('./http'));var Async=(cov_1ks4ntaci2().s[3]++,require('./async'));var Paths=(cov_1ks4ntaci2().s[4]++,require('./paths').Paths);var Class=(cov_1ks4ntaci2().s[5]++,require('./jquery.class').Class);var utils=(cov_1ks4ntaci2().s[6]++,require('./utils'));var root=(cov_1ks4ntaci2().s[7]++,(cov_1ks4ntaci2().b[0][0]++,exports)||(cov_1ks4ntaci2().b[0][1]++,this));var Service=(cov_1ks4ntaci2().s[8]++,null);/** - * Contains functionality common to Splunk Enterprise and Splunk Storm. - * - * This class is an implementation detail and is therefore SDK-private. - * - * @class splunkjs.private.BaseService - * @extends splunkjs.Context - */var BaseService=(cov_1ks4ntaci2().s[9]++,Context.extend({init:function(){cov_1ks4ntaci2().f[1]++;cov_1ks4ntaci2().s[10]++;this._super.apply(this,arguments);}}));/** - * Provides a root access point to Splunk functionality with typed access to - * Splunk resources such as searches, indexes, inputs, and more. Provides - * methods to authenticate and create specialized instances of the service. - * - * @class splunkjs.Service - * @extends splunkjs.private.BaseService - */cov_1ks4ntaci2().s[11]++;module.exports=root=Service=BaseService.extend({/** - * Constructor for `splunkjs.Service`. - * - * @constructor - * @param {splunkjs.Http} http An instance of a `splunkjs.Http` class. - * @param {Object} params A dictionary of optional parameters: - * - `scheme` (_string_): The scheme ("http" or "https") for accessing Splunk. - * - `host` (_string_): The host name (the default is "localhost"). - * - `port` (_integer_): The port number (the default is 8089). - * - `username` (_string_): The Splunk account username, which is used to authenticate the Splunk instance. - * - `password` (_string_): The password, which is used to authenticate the Splunk instance. - * - `owner` (_string_): The owner (username) component of the namespace. - * - `app` (_string_): The app component of the namespace. - * - `sessionKey` (_string_): The current session token. - * - `autologin` (_boolean_): `true` to automatically try to log in again if the session terminates, `false` if not (`true` by default). - * - `version` (_string_): The version string for Splunk, for example "4.3.2" (the default is "5.0"). - * @return {splunkjs.Service} A new `splunkjs.Service` instance. - * - * @method splunkjs.Service - */init:function(){cov_1ks4ntaci2().f[2]++;cov_1ks4ntaci2().s[12]++;this._super.apply(this,arguments);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[13]++;this.specialize=utils.bind(this,this.specialize);cov_1ks4ntaci2().s[14]++;this.apps=utils.bind(this,this.apps);cov_1ks4ntaci2().s[15]++;this.configurations=utils.bind(this,this.configurations);cov_1ks4ntaci2().s[16]++;this.indexes=utils.bind(this,this.indexes);cov_1ks4ntaci2().s[17]++;this.savedSearches=utils.bind(this,this.savedSearches);cov_1ks4ntaci2().s[18]++;this.jobs=utils.bind(this,this.jobs);cov_1ks4ntaci2().s[19]++;this.users=utils.bind(this,this.users);cov_1ks4ntaci2().s[20]++;this.currentUser=utils.bind(this,this.currentUser);cov_1ks4ntaci2().s[21]++;this.views=utils.bind(this,this.views);cov_1ks4ntaci2().s[22]++;this.firedAlertGroups=utils.bind(this,this.firedAlertGroups);cov_1ks4ntaci2().s[23]++;this.dataModels=utils.bind(this,this.dataModels);},/** - * Creates a specialized version of the current `Service` instance for - * a specific namespace context. - * - * @example - * - * var svc = ...; - * var newService = svc.specialize("myuser", "unix"); - * - * @param {String} owner The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * @param {String} app The app context for this resource (such as "search"). The "-" wildcard means all apps. - * @return {splunkjs.Service} The specialized `Service` instance. - * - * @method splunkjs.Service - */specialize:function(owner,app){cov_1ks4ntaci2().f[3]++;cov_1ks4ntaci2().s[24]++;return new Service(this.http,{scheme:this.scheme,host:this.host,port:this.port,username:this.username,password:this.password,owner:owner,app:app,sessionKey:this.sessionKey,version:this.version});},/** - * Gets the `Applications` collection, which allows you to - * list installed apps and retrieve information about them. - * - * @example - * - * // List installed apps - * var apps = svc.apps(); - * apps.fetch(function(err) { console.log(apps.list()); }); - * - * @return {splunkjs.Service.Collection} The `Applications` collection. - * - * @endpoint apps/local - * @method splunkjs.Service - * @see splunkjs.Service.Applications - */apps:function(){cov_1ks4ntaci2().f[4]++;cov_1ks4ntaci2().s[25]++;return new root.Applications(this);},/** - * Gets the `Configurations` collection, which lets you - * create, list, and retrieve configuration (.conf) files. - * - * @example - * - * // List all properties in the 'props.conf' file - * var files = svc.configurations(); - * files.item("props", function(err, propsFile) { - * propsFile.fetch(function(err, props) { - * console.log(props.properties()); - * }); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Configurations} The `Configurations` collection. - * - * @endpoint configs - * @method splunkjs.Service - * @see splunkjs.Service.Configurations - */configurations:function(namespace){cov_1ks4ntaci2().f[5]++;cov_1ks4ntaci2().s[26]++;return new root.Configurations(this,namespace);},/** - * Gets the `Indexes` collection, which lets you create, - * list, and update indexes. - * - * @example - * - * // Check if we have an _internal index - * var indexes = svc.indexes(); - * indexes.fetch(function(err, indexes) { - * var index = indexes.item("_internal"); - * console.log("Was index found: " + !!index); - * // `index` is an Index object. - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Indexes} The `Indexes` collection. - * - * @endpoint data/indexes - * @method splunkjs.Service - * @see splunkjs.Service.Indexes - */indexes:function(namespace){cov_1ks4ntaci2().f[6]++;cov_1ks4ntaci2().s[27]++;return new root.Indexes(this,namespace);},/** - * Gets the `SavedSearches` collection, which lets you - * create, list, and update saved searches. - * - * @example - * - * // List all # of saved searches - * var savedSearches = svc.savedSearches(); - * savedSearches.fetch(function(err, savedSearches) { - * console.log("# Of Saved Searches: " + savedSearches.list().length); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.SavedSearches} The `SavedSearches` collection. - * - * @endpoint saved/searches - * @method splunkjs.Service - * @see splunkjs.Service.SavedSearches - */savedSearches:function(namespace){cov_1ks4ntaci2().f[7]++;cov_1ks4ntaci2().s[28]++;return new root.SavedSearches(this,namespace);},/** - * Gets the `StoragePasswords` collection, which lets you - * create, list, and update storage passwords. - * - * @example - * - * // List all # of storage passwords - * var storagePasswords = svc.storagePasswords(); - * storagePasswords.fetch(function(err, storagePasswords) { - * console.log("# of Storage Passwords: " + storagePasswords.list().length); - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePasswords} The `StoragePasswords` collection. - * - * @endpoint storage/passwords - * @method splunkjs.Service - * @see splunkjs.Service.StoragePasswords - */storagePasswords:function(namespace){cov_1ks4ntaci2().f[8]++;cov_1ks4ntaci2().s[29]++;return new root.StoragePasswords(this,namespace);},/** - * Gets the `FiredAlertGroupCollection` collection, which lets you - * list alert groups. - * - * @example - * - * // List all # of fired alert groups - * var firedAlertGroups = svc.firedAlertGroups(); - * firedAlertGroups.fetch(function(err, firedAlertGroups) { - * console.log("# of alert groups: " + firedAlertGroups.list().length); - * }); - * - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.FiredAlertGroupCollection} The `FiredAlertGroupCollection` collection. - * - * @endpoint saved/searches - * @method splunkjs.Service - * @see splunkjs.Service.FiredAlertGroupCollection - */firedAlertGroups:function(namespace){cov_1ks4ntaci2().f[9]++;cov_1ks4ntaci2().s[30]++;return new root.FiredAlertGroupCollection(this,namespace);},/** - * Gets the `Jobs` collection, which lets you create, list, - * and retrieve search jobs. - * - * @example - * - * // List all job IDs - * var jobs = svc.jobs(); - * jobs.fetch(function(err, jobs) { - * var list = jobs.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("Job " + (i+1) + ": " + list[i].sid); - * } - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Jobs} The `Jobs` collection. - * - * @endpoint search/jobs - * @method splunkjs.Service - * @see splunkjs.Service.Jobs - */jobs:function(namespace){cov_1ks4ntaci2().f[10]++;cov_1ks4ntaci2().s[31]++;return new root.Jobs(this,namespace);},/** - * Gets the `DataModels` collection, which lets you create, list, - * and retrieve data models. - * - * @endpoint datamodel/model - * @method splunkjs.Service - * @see splunkjs.Service.DataModels - */dataModels:function(namespace){cov_1ks4ntaci2().f[11]++;cov_1ks4ntaci2().s[32]++;return new root.DataModels(this,namespace);},/** - * Gets the `Users` collection, which lets you create, - * list, and retrieve users. - * - * @example - * - * // List all usernames - * var users = svc.users(); - * users.fetch(function(err, users) { - * var list = users.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("User " + (i+1) + ": " + list[i].properties().name); - * } - * }); - * - * @return {splunkjs.Service.Users} The `Users` collection. - * - * @endpoint authorization/users - * @method splunkjs.Service - * @see splunkjs.Service.Users - */users:function(){cov_1ks4ntaci2().f[12]++;cov_1ks4ntaci2().s[33]++;return new root.Users(this);},/** - * Gets the `Views` collection, which lets you create, - * list, and retrieve views (custom UIs built in Splunk's app framework). - * - * @example - * - * // List all views - * var views = svc.views(); - * views.fetch(function(err, views) { - * var list = views.list(); - * for(var i = 0; i < list.length; i++) { - * console.log("View " + (i+1) + ": " + list[i].properties().name); - * } - * }); - * - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Views} The `Views` collection. - * - * @endpoint data/ui/views - * @method splunkjs.Service - * @see splunkjs.Service.Views - */views:function(namespace){cov_1ks4ntaci2().f[13]++;cov_1ks4ntaci2().s[34]++;return new root.Views(this,namespace);},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.oneshotSearch`. - * - * @example - * - * service.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { - * console.log("CREATED": newJob.sid); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the created job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */search:function(query,params,namespace,callback){cov_1ks4ntaci2().f[14]++;cov_1ks4ntaci2().s[35]++;if((cov_1ks4ntaci2().b[2][0]++,!callback)&&(cov_1ks4ntaci2().b[2][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[1][0]++;cov_1ks4ntaci2().s[36]++;callback=namespace;cov_1ks4ntaci2().s[37]++;namespace=null;}else{cov_1ks4ntaci2().b[1][1]++;}var jobs=(cov_1ks4ntaci2().s[38]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[39]++;return jobs.search(query,params,callback);},/** - * A convenience method to get a `Job` by its sid. - * - * @param {String} sid The search ID for a search job. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the created job: `(err, job)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */getJob:function(sid,namespace,callback){cov_1ks4ntaci2().f[15]++;cov_1ks4ntaci2().s[40]++;if((cov_1ks4ntaci2().b[4][0]++,!callback)&&(cov_1ks4ntaci2().b[4][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[3][0]++;cov_1ks4ntaci2().s[41]++;callback=namespace;cov_1ks4ntaci2().s[42]++;namespace=null;}else{cov_1ks4ntaci2().b[3][1]++;}var job=(cov_1ks4ntaci2().s[43]++,new root.Job(this,sid,namespace));cov_1ks4ntaci2().s[44]++;return job.fetch({},callback);},/** - * Creates a oneshot search from a given search query and optional parameters. - * - * @example - * - * service.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { - * console.log("RESULT FIELDS": results.fields); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search: - * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). - * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `rf` (_string_): Specifies one or more fields to add to the search. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Function} callback A function to call with the results of the search: `(err, results)`. - * - * @endpoint search/jobs - * @method splunkjs.Service - */oneshotSearch:function(query,params,namespace,callback){cov_1ks4ntaci2().f[16]++;cov_1ks4ntaci2().s[45]++;if((cov_1ks4ntaci2().b[6][0]++,!callback)&&(cov_1ks4ntaci2().b[6][1]++,utils.isFunction(namespace))){cov_1ks4ntaci2().b[5][0]++;cov_1ks4ntaci2().s[46]++;callback=namespace;cov_1ks4ntaci2().s[47]++;namespace=null;}else{cov_1ks4ntaci2().b[5][1]++;}var jobs=(cov_1ks4ntaci2().s[48]++,new root.Jobs(this,namespace));cov_1ks4ntaci2().s[49]++;return jobs.oneshotSearch(query,params,callback);},/** - * Gets the user that is currently logged in. - * - * @example - * - * service.currentUser(function(err, user) { - * console.log("Real name: ", user.properties().realname); - * }); - * - * @param {Function} callback A function to call with the user instance: `(err, user)`. - * @return {splunkjs.Service.currentUser} The `User`. - * - * @endpoint authorization/current-context - * @method splunkjs.Service - */currentUser:function(callback){cov_1ks4ntaci2().f[17]++;cov_1ks4ntaci2().s[50]++;callback=(cov_1ks4ntaci2().b[7][0]++,callback)||(cov_1ks4ntaci2().b[7][1]++,function(){cov_1ks4ntaci2().f[18]++;});var that=(cov_1ks4ntaci2().s[51]++,this);var req=(cov_1ks4ntaci2().s[52]++,this.get(Paths.currentUser,{},function(err,response){cov_1ks4ntaci2().f[19]++;cov_1ks4ntaci2().s[53]++;if(err){cov_1ks4ntaci2().b[8][0]++;cov_1ks4ntaci2().s[54]++;callback(err);}else{cov_1ks4ntaci2().b[8][1]++;var username=(cov_1ks4ntaci2().s[55]++,response.data.entry[0].content.username);var user=(cov_1ks4ntaci2().s[56]++,new root.User(that,username));cov_1ks4ntaci2().s[57]++;user.fetch(function(){cov_1ks4ntaci2().f[20]++;cov_1ks4ntaci2().s[58]++;if(req.wasAborted){cov_1ks4ntaci2().b[9][0]++;cov_1ks4ntaci2().s[59]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[9][1]++;cov_1ks4ntaci2().s[60]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[61]++;return req;},/** - * Gets configuration information about the server. - * - * @example - * - * service.serverInfo(function(err, info) { - * console.log("Splunk Version: ", info.properties().version); - * }); - * - * @param {Function} callback A function to call with the server info: `(err, info)`. - * - * @endpoint server/info - * @method splunkjs.Service - */serverInfo:function(callback){cov_1ks4ntaci2().f[21]++;cov_1ks4ntaci2().s[62]++;callback=(cov_1ks4ntaci2().b[10][0]++,callback)||(cov_1ks4ntaci2().b[10][1]++,function(){cov_1ks4ntaci2().f[22]++;});var serverInfo=(cov_1ks4ntaci2().s[63]++,new root.ServerInfo(this));cov_1ks4ntaci2().s[64]++;return serverInfo.fetch(callback);},/** - * Parses a search query. - * - * @example - * - * service.parse("search index=_internal | head 1", function(err, parse) { - * console.log("Commands: ", parse.commands); - * }); - * - * @param {String} query The search query to parse. - * @param {Object} params An object of options for the parser: - * - `enable_lookups` (_boolean_): If `true`, performs reverse lookups to expand the search expression. - * - `output_mode` (_string_): The output format (XML or JSON). - * - `parse_only` (_boolean_): If `true`, disables the expansion of search due to evaluation of subsearches, time term expansion, lookups, tags, eventtypes, and sourcetype alias. - * - `reload_macros` (_boolean_): If `true`, reloads macro definitions from macros.conf. - * @param {Function} callback A function to call with the parse info: `(err, parse)`. - * - * @endpoint search/parser - * @method splunkjs.Service - */parse:function(query,params,callback){cov_1ks4ntaci2().f[23]++;cov_1ks4ntaci2().s[65]++;if((cov_1ks4ntaci2().b[12][0]++,!callback)&&(cov_1ks4ntaci2().b[12][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[11][0]++;cov_1ks4ntaci2().s[66]++;callback=params;cov_1ks4ntaci2().s[67]++;params={};}else{cov_1ks4ntaci2().b[11][1]++;}cov_1ks4ntaci2().s[68]++;callback=(cov_1ks4ntaci2().b[13][0]++,callback)||(cov_1ks4ntaci2().b[13][1]++,function(){cov_1ks4ntaci2().f[24]++;});cov_1ks4ntaci2().s[69]++;params=(cov_1ks4ntaci2().b[14][0]++,params)||(cov_1ks4ntaci2().b[14][1]++,{});cov_1ks4ntaci2().s[70]++;params.q=query;cov_1ks4ntaci2().s[71]++;return this.get(Paths.parser,params,function(err,response){cov_1ks4ntaci2().f[25]++;cov_1ks4ntaci2().s[72]++;if(err){cov_1ks4ntaci2().b[15][0]++;cov_1ks4ntaci2().s[73]++;callback(err);}else{cov_1ks4ntaci2().b[15][1]++;cov_1ks4ntaci2().s[74]++;callback(null,response.data);}});},/** - * Provides auto-complete suggestions for search queries. - * - * @example - * - * service.typeahead("index=", 10, function(err, options) { - * console.log("Autocompletion options: ", options); - * }); - * - * @param {String} prefix The query fragment to autocomplete. - * @param {Number} count The number of options to return (optional). - * @param {Function} callback A function to call with the autocompletion info: `(err, options)`. - * - * @endpoint search/typeahead - * @method splunkjs.Service - */typeahead:function(prefix,count,callback){cov_1ks4ntaci2().f[26]++;cov_1ks4ntaci2().s[75]++;if((cov_1ks4ntaci2().b[17][0]++,!callback)&&(cov_1ks4ntaci2().b[17][1]++,utils.isFunction(count))){cov_1ks4ntaci2().b[16][0]++;cov_1ks4ntaci2().s[76]++;callback=count;cov_1ks4ntaci2().s[77]++;count=10;}else{cov_1ks4ntaci2().b[16][1]++;}cov_1ks4ntaci2().s[78]++;callback=(cov_1ks4ntaci2().b[18][0]++,callback)||(cov_1ks4ntaci2().b[18][1]++,function(){cov_1ks4ntaci2().f[27]++;});var params=(cov_1ks4ntaci2().s[79]++,{count:(cov_1ks4ntaci2().b[19][0]++,count)||(cov_1ks4ntaci2().b[19][1]++,10),prefix:prefix});cov_1ks4ntaci2().s[80]++;return this.get(Paths.typeahead,params,function(err,response){cov_1ks4ntaci2().f[28]++;cov_1ks4ntaci2().s[81]++;if(err){cov_1ks4ntaci2().b[20][0]++;cov_1ks4ntaci2().s[82]++;callback(err);}else{cov_1ks4ntaci2().b[20][1]++;var results=(cov_1ks4ntaci2().s[83]++,((cov_1ks4ntaci2().b[21][0]++,response.data)||(cov_1ks4ntaci2().b[21][1]++,{})).results);cov_1ks4ntaci2().s[84]++;callback(null,(cov_1ks4ntaci2().b[22][0]++,results)||(cov_1ks4ntaci2().b[22][1]++,[]));}});},/** - * Logs an event to Splunk. - * - * @example - * - * service.log("A new event", {index: "_internal", sourcetype: "mysourcetype"}, function(err, result) { - * console.log("Submitted event: ", result); - * }); - * - * @param {String|Object} event The text for this event, or a JSON object. - * @param {Object} params A dictionary of parameters for indexing: - * - `index` (_string_): The index to send events from this input to. - * - `host` (_string_): The value to populate in the Host field for events from this data input. - * - `host_regex` (_string_): A regular expression used to extract the host value from each event. - * - `source` (_string_): The value to populate in the Source field for events from this data input. - * - `sourcetype` (_string_): The value to populate in the Sourcetype field for events from this data input. - * @param {Function} callback A function to call when the event is submitted: `(err, result)`. - * - * @endpoint receivers/simple - * @method splunkjs.Service - */log:function(event,params,callback){cov_1ks4ntaci2().f[29]++;cov_1ks4ntaci2().s[85]++;if((cov_1ks4ntaci2().b[24][0]++,!callback)&&(cov_1ks4ntaci2().b[24][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[23][0]++;cov_1ks4ntaci2().s[86]++;callback=params;cov_1ks4ntaci2().s[87]++;params={};}else{cov_1ks4ntaci2().b[23][1]++;}cov_1ks4ntaci2().s[88]++;callback=(cov_1ks4ntaci2().b[25][0]++,callback)||(cov_1ks4ntaci2().b[25][1]++,function(){cov_1ks4ntaci2().f[30]++;});cov_1ks4ntaci2().s[89]++;params=(cov_1ks4ntaci2().b[26][0]++,params)||(cov_1ks4ntaci2().b[26][1]++,{});// If the event is a JSON object, convert it to a string. -cov_1ks4ntaci2().s[90]++;if(utils.isObject(event)){cov_1ks4ntaci2().b[27][0]++;cov_1ks4ntaci2().s[91]++;event=JSON.stringify(event);}else{cov_1ks4ntaci2().b[27][1]++;}var path=(cov_1ks4ntaci2().s[92]++,this.paths.submitEvent);var method=(cov_1ks4ntaci2().s[93]++,"POST");var headers=(cov_1ks4ntaci2().s[94]++,{"Content-Type":"text/plain"});var body=(cov_1ks4ntaci2().s[95]++,event);var get=(cov_1ks4ntaci2().s[96]++,params);var post=(cov_1ks4ntaci2().s[97]++,{});var req=(cov_1ks4ntaci2().s[98]++,this.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[31]++;cov_1ks4ntaci2().s[99]++;if(err){cov_1ks4ntaci2().b[28][0]++;cov_1ks4ntaci2().s[100]++;callback(err);}else{cov_1ks4ntaci2().b[28][1]++;cov_1ks4ntaci2().s[101]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[102]++;return req;}});/** - * Provides a base definition for a Splunk endpoint, which is a combination of - * a specific service and path. Provides convenience methods for GET, POST, and - * DELETE operations used in splunkjs, automatically preparing the path correctly - * and allowing for relative calls. - * - * @class splunkjs.Service.Endpoint - */cov_1ks4ntaci2().s[103]++;root.Endpoint=Class.extend({/** - * Constructor for `splunkjs.Service.Endpoint`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} qualifiedPath A fully-qualified relative endpoint path (for example, "/services/search/jobs"). - * @return {splunkjs.Service.Endpoint} A new `splunkjs.Service.Endpoint` instance. - * - * @method splunkjs.Service.Endpoint - */init:function(service,qualifiedPath){cov_1ks4ntaci2().f[32]++;cov_1ks4ntaci2().s[104]++;if(!service){cov_1ks4ntaci2().b[29][0]++;cov_1ks4ntaci2().s[105]++;throw new Error("Passed in a null Service.");}else{cov_1ks4ntaci2().b[29][1]++;}cov_1ks4ntaci2().s[106]++;if(!qualifiedPath){cov_1ks4ntaci2().b[30][0]++;cov_1ks4ntaci2().s[107]++;throw new Error("Passed in an empty path.");}else{cov_1ks4ntaci2().b[30][1]++;}cov_1ks4ntaci2().s[108]++;this.service=service;cov_1ks4ntaci2().s[109]++;this.qualifiedPath=qualifiedPath;// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[110]++;this.get=utils.bind(this,this.get);cov_1ks4ntaci2().s[111]++;this.get_v2=utils.bind(this,this.get_v2);cov_1ks4ntaci2().s[112]++;this.post=utils.bind(this,this.post);cov_1ks4ntaci2().s[113]++;this.del=utils.bind(this,this.del);},/** - * Performs a relative GET request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456/results?offset=1 - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.get("results", {offset: 1}, function() { console.log("DONE"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the query string. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */get:function(relpath,params,callback){cov_1ks4ntaci2().f[33]++;var url=(cov_1ks4ntaci2().s[114]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[115]++;if(relpath){cov_1ks4ntaci2().b[31][0]++;cov_1ks4ntaci2().s[116]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[31][1]++;}cov_1ks4ntaci2().s[117]++;return this.service.get(url,params,callback);},get_v2:function(relpath,params){cov_1ks4ntaci2().f[34]++;var url=(cov_1ks4ntaci2().s[118]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[119]++;if(relpath){cov_1ks4ntaci2().b[32][0]++;cov_1ks4ntaci2().s[120]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[32][1]++;}cov_1ks4ntaci2().s[121]++;return this.service.get_v2(url,params);},/** - * Performs a relative POST request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456/control - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.post("control", {action: "cancel"}, function() { console.log("CANCELLED"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the body. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */post:function(relpath,params,callback){cov_1ks4ntaci2().f[35]++;var url=(cov_1ks4ntaci2().s[122]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[123]++;if(relpath){cov_1ks4ntaci2().b[33][0]++;cov_1ks4ntaci2().s[124]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[33][1]++;}cov_1ks4ntaci2().s[125]++;return this.service.post(url,params,callback);},/** - * Performs a relative DELETE request on an endpoint's path, - * combined with the parameters and a relative path if specified. - * - * @example - * - * // Will make a request to {service.prefix}/search/jobs/123456 - * var endpoint = new splunkjs.Service.Endpoint(service, "search/jobs/12345"); - * endpoint.delete("", {}, function() { console.log("DELETED"))}); - * - * @param {String} relpath A relative path to append to the endpoint path. - * @param {Object} params A dictionary of entity-specific parameters to add to the query string. - * @param {Function} callback A function to call when the request is complete: `(err, response)`. - * - * @method splunkjs.Service.Endpoint - */del:function(relpath,params,callback){cov_1ks4ntaci2().f[36]++;var url=(cov_1ks4ntaci2().s[126]++,this.qualifiedPath);// If we have a relative path, we will append it with a preceding -// slash. -cov_1ks4ntaci2().s[127]++;if(relpath){cov_1ks4ntaci2().b[34][0]++;cov_1ks4ntaci2().s[128]++;url=url+"/"+relpath;}else{cov_1ks4ntaci2().b[34][1]++;}cov_1ks4ntaci2().s[129]++;return this.service.del(url,params,callback);}});/** - * Provides a base definition for a Splunk resource (for example, an entity - * such as an index or search job, or a collection of entities). Provides - * basic methods for handling Splunk resources, such as validation and - * accessing properties. - * - * This class should not be used directly because most methods are meant to be overridden. - * - * @class splunkjs.Service.Resource - * @extends splunkjs.Service.Endpoint - */cov_1ks4ntaci2().s[130]++;root.Resource=root.Endpoint.extend({/** - * Constructor for `splunkjs.Service.Resource`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Resource} A new `splunkjs.Service.Resource` instance. - * - * @method splunkjs.Service.Resource - */init:function(service,path,namespace){cov_1ks4ntaci2().f[37]++;var fullpath=(cov_1ks4ntaci2().s[131]++,service.fullpath(path,namespace));cov_1ks4ntaci2().s[132]++;this._super(service,fullpath);cov_1ks4ntaci2().s[133]++;this.namespace=namespace;cov_1ks4ntaci2().s[134]++;this._properties={};cov_1ks4ntaci2().s[135]++;this._state={};// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[136]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[137]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[138]++;this.properties=utils.bind(this,this.properties);cov_1ks4ntaci2().s[139]++;this.state=utils.bind(this,this.state);cov_1ks4ntaci2().s[140]++;this.path=utils.bind(this,this.path);},/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Resource - */path:function(){cov_1ks4ntaci2().f[38]++;cov_1ks4ntaci2().s[141]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Loads the resource and stores the properties. - * - * @param {Object} properties The properties for this resource. - * - * @method splunkjs.Service.Resource - * @protected - */_load:function(properties){cov_1ks4ntaci2().f[39]++;cov_1ks4ntaci2().s[142]++;this._properties=(cov_1ks4ntaci2().b[35][0]++,properties)||(cov_1ks4ntaci2().b[35][1]++,{});cov_1ks4ntaci2().s[143]++;this._state=(cov_1ks4ntaci2().b[36][0]++,properties)||(cov_1ks4ntaci2().b[36][1]++,{});},/** - * Refreshes the resource by fetching the object from the server - * and loading it. - * - * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. - * - * @method splunkjs.Service.Resource - * @protected - */fetch:function(callback){cov_1ks4ntaci2().f[40]++;cov_1ks4ntaci2().s[144]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Retrieves the current properties for this resource. - * - * @return {Object} The properties. - * - * @method splunkjs.Service.Resource - */properties:function(){cov_1ks4ntaci2().f[41]++;cov_1ks4ntaci2().s[145]++;return this._properties;},/** - * Retrieves the current full state (properties and metadata) of this resource. - * - * @return {Object} The current full state of this resource. - * - * @method splunkjs.Service.Resource - */state:function(){cov_1ks4ntaci2().f[42]++;cov_1ks4ntaci2().s[146]++;return this._state;}});/** - * Defines a base class for a Splunk entity, which is a well-defined construct - * with certain operations (such as "properties", "update", and "delete"). - * Entities include search jobs, indexes, inputs, apps, and more. - * - * Provides basic methods for working with Splunk entities, such as fetching and - * updating them. - * - * @class splunkjs.Service.Entity - * @extends splunkjs.Service.Resource - */cov_1ks4ntaci2().s[147]++;root.Entity=root.Resource.extend({/** - * A static property that indicates whether to call `fetch` after an - * update to get the updated entity. By default, the entity is not - * fetched because the endpoint returns (echoes) the updated entity. - * - * @method splunkjs.Service.Entity - */fetchOnUpdate:false,/** - * Constructor for `splunkjs.Service.Entity`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. - * - * @method splunkjs.Service.Entity - */init:function(service,path,namespace){cov_1ks4ntaci2().f[43]++;cov_1ks4ntaci2().s[148]++;this._super(service,path,namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[149]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[150]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[151]++;this.remove=utils.bind(this,this.remove);cov_1ks4ntaci2().s[152]++;this.update=utils.bind(this,this.update);cov_1ks4ntaci2().s[153]++;this.fields=utils.bind(this,this.fields);cov_1ks4ntaci2().s[154]++;this.links=utils.bind(this,this.links);cov_1ks4ntaci2().s[155]++;this.acl=utils.bind(this,this.acl);cov_1ks4ntaci2().s[156]++;this.author=utils.bind(this,this.author);cov_1ks4ntaci2().s[157]++;this.updated=utils.bind(this,this.updated);cov_1ks4ntaci2().s[158]++;this.published=utils.bind(this,this.published);cov_1ks4ntaci2().s[159]++;this.enable=utils.bind(this,this.enable);cov_1ks4ntaci2().s[160]++;this.disable=utils.bind(this,this.disable);cov_1ks4ntaci2().s[161]++;this.reload=utils.bind(this,this.reload);// Initial values -cov_1ks4ntaci2().s[162]++;this._properties={};cov_1ks4ntaci2().s[163]++;this._fields={};cov_1ks4ntaci2().s[164]++;this._acl={};cov_1ks4ntaci2().s[165]++;this._links={};},/** - * Loads the entity and stores the properties. - * - * @param {Object} properties The properties for this entity. - * - * @method splunkjs.Service.Entity - * @protected - */_load:function(properties){cov_1ks4ntaci2().f[44]++;cov_1ks4ntaci2().s[166]++;properties=utils.isArray(properties)?(cov_1ks4ntaci2().b[37][0]++,properties[0]):(cov_1ks4ntaci2().b[37][1]++,properties);// Initialize the properties to -// empty values -cov_1ks4ntaci2().s[167]++;properties=(cov_1ks4ntaci2().b[38][0]++,properties)||(cov_1ks4ntaci2().b[38][1]++,{content:{},fields:{},acl:{},links:{}});cov_1ks4ntaci2().s[168]++;this._super(properties);// Take out the entity-specific content -cov_1ks4ntaci2().s[169]++;this._properties=(cov_1ks4ntaci2().b[39][0]++,properties.content)||(cov_1ks4ntaci2().b[39][1]++,{});cov_1ks4ntaci2().s[170]++;this._fields=(cov_1ks4ntaci2().b[40][0]++,properties.fields)||(cov_1ks4ntaci2().b[40][1]++,this._fields)||(cov_1ks4ntaci2().b[40][2]++,{});cov_1ks4ntaci2().s[171]++;this._acl=(cov_1ks4ntaci2().b[41][0]++,properties.acl)||(cov_1ks4ntaci2().b[41][1]++,{});cov_1ks4ntaci2().s[172]++;this._links=(cov_1ks4ntaci2().b[42][0]++,properties.links)||(cov_1ks4ntaci2().b[42][1]++,{});cov_1ks4ntaci2().s[173]++;this._author=(cov_1ks4ntaci2().b[43][0]++,properties.author)||(cov_1ks4ntaci2().b[43][1]++,null);cov_1ks4ntaci2().s[174]++;this._updated=(cov_1ks4ntaci2().b[44][0]++,properties.updated)||(cov_1ks4ntaci2().b[44][1]++,null);cov_1ks4ntaci2().s[175]++;this._published=(cov_1ks4ntaci2().b[45][0]++,properties.published)||(cov_1ks4ntaci2().b[45][1]++,null);},/** - * Retrieves the fields information for this entity, indicating which - * fields are wildcards, required, and optional. - * - * @return {Object} The fields information. - * - * @method splunkjs.Service.Entity - */fields:function(){cov_1ks4ntaci2().f[45]++;cov_1ks4ntaci2().s[176]++;return this._fields;},/** - * Retrieves the access control list (ACL) information for this entity, - * which contains the permissions for accessing the entity. - * - * @return {Object} The ACL. - * - * @method splunkjs.Service.Entity - */acl:function(){cov_1ks4ntaci2().f[46]++;cov_1ks4ntaci2().s[177]++;return this._acl;},/** - * Retrieves the links information for this entity, which is the URI of - * the entity relative to the management port of a Splunk instance. - * - * @return {Object} The links information. - * - * @method splunkjs.Service.Entity - */links:function(){cov_1ks4ntaci2().f[47]++;cov_1ks4ntaci2().s[178]++;return this._links;},/** - * Retrieves the author information for this entity. - * - * @return {String} The author. - * - * @method splunkjs.Service.Entity - */author:function(){cov_1ks4ntaci2().f[48]++;cov_1ks4ntaci2().s[179]++;return this._author;},/** - * Retrieves the updated time for this entity. - * - * @return {String} The updated time. - * - * @method splunkjs.Service.Entity - */updated:function(){cov_1ks4ntaci2().f[49]++;cov_1ks4ntaci2().s[180]++;return this._updated;},/** - * Retrieves the published time for this entity. - * - * @return {String} The published time. - * - * @method splunkjs.Service.Entity - */published:function(){cov_1ks4ntaci2().f[50]++;cov_1ks4ntaci2().s[181]++;return this._published;},/** - * Refreshes the entity by fetching the object from the server and - * loading it. - * - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `count` (_integer_): The maximum number of items to return. - * - `offset` (_integer_): The offset of the first item to return. - * - `search` (_string_): The search query to filter responses. - * - `sort_dir` (_string_): The direction to sort returned items: “asc” or “desc”. - * - `sort_key` (_string_): The field to use for sorting (optional). - * - `sort_mode` (_string_): The collating sequence for sorting returned items: “auto”, “alpha”, “alpha_case”, or “num”. - * @param {Function} callback A function to call when the object is retrieved: `(err, resource)`. - * - * @method splunkjs.Service.Entity - */fetch:function(options,callback){cov_1ks4ntaci2().f[51]++;cov_1ks4ntaci2().s[182]++;if((cov_1ks4ntaci2().b[47][0]++,!callback)&&(cov_1ks4ntaci2().b[47][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[46][0]++;cov_1ks4ntaci2().s[183]++;callback=options;cov_1ks4ntaci2().s[184]++;options={};}else{cov_1ks4ntaci2().b[46][1]++;}cov_1ks4ntaci2().s[185]++;callback=(cov_1ks4ntaci2().b[48][0]++,callback)||(cov_1ks4ntaci2().b[48][1]++,function(){cov_1ks4ntaci2().f[52]++;});cov_1ks4ntaci2().s[186]++;options=(cov_1ks4ntaci2().b[49][0]++,options)||(cov_1ks4ntaci2().b[49][1]++,{});var that=(cov_1ks4ntaci2().s[187]++,this);cov_1ks4ntaci2().s[188]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[53]++;cov_1ks4ntaci2().s[189]++;if(err){cov_1ks4ntaci2().b[50][0]++;cov_1ks4ntaci2().s[190]++;callback(err);}else{cov_1ks4ntaci2().b[50][1]++;cov_1ks4ntaci2().s[191]++;that._load(response.data?(cov_1ks4ntaci2().b[51][0]++,response.data.entry):(cov_1ks4ntaci2().b[51][1]++,null));cov_1ks4ntaci2().s[192]++;callback(null,that);}});},/** - * Deletes the entity from the server. - * - * @param {Function} callback A function to call when the object is deleted: `(err)`. - * - * @method splunkjs.Service.Entity - * @protected - */remove:function(callback){cov_1ks4ntaci2().f[54]++;cov_1ks4ntaci2().s[193]++;callback=(cov_1ks4ntaci2().b[52][0]++,callback)||(cov_1ks4ntaci2().b[52][1]++,function(){cov_1ks4ntaci2().f[55]++;});var that=(cov_1ks4ntaci2().s[194]++,this);cov_1ks4ntaci2().s[195]++;return this.del("",{},function(err){cov_1ks4ntaci2().f[56]++;cov_1ks4ntaci2().s[196]++;callback(err);});},/** - * Updates the entity on the server. - * - * @param {Object} props The properties to update the object with. - * @param {Function} callback A function to call when the object is updated: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */update:function(props,callback){cov_1ks4ntaci2().f[57]++;cov_1ks4ntaci2().s[197]++;callback=(cov_1ks4ntaci2().b[53][0]++,callback)||(cov_1ks4ntaci2().b[53][1]++,function(){cov_1ks4ntaci2().f[58]++;});cov_1ks4ntaci2().s[198]++;if(props.hasOwnProperty("name")){cov_1ks4ntaci2().b[54][0]++;cov_1ks4ntaci2().s[199]++;throw new Error("Cannot set 'name' field in 'update'");}else{cov_1ks4ntaci2().b[54][1]++;}var that=(cov_1ks4ntaci2().s[200]++,this);var req=(cov_1ks4ntaci2().s[201]++,this.post("",props,function(err,response){cov_1ks4ntaci2().f[59]++;cov_1ks4ntaci2().s[202]++;if((cov_1ks4ntaci2().b[56][0]++,!err)&&(cov_1ks4ntaci2().b[56][1]++,!that.fetchOnUpdate)){cov_1ks4ntaci2().b[55][0]++;cov_1ks4ntaci2().s[203]++;that._load(response.data.entry);cov_1ks4ntaci2().s[204]++;callback(err,that);}else{cov_1ks4ntaci2().b[55][1]++;cov_1ks4ntaci2().s[205]++;if((cov_1ks4ntaci2().b[58][0]++,!err)&&(cov_1ks4ntaci2().b[58][1]++,that.fetchOnUpdate)){cov_1ks4ntaci2().b[57][0]++;cov_1ks4ntaci2().s[206]++;that.fetch(function(){cov_1ks4ntaci2().f[60]++;cov_1ks4ntaci2().s[207]++;if(req.wasAborted){cov_1ks4ntaci2().b[59][0]++;cov_1ks4ntaci2().s[208]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[59][1]++;cov_1ks4ntaci2().s[209]++;callback.apply(null,arguments);}});}else{cov_1ks4ntaci2().b[57][1]++;cov_1ks4ntaci2().s[210]++;callback(err,that);}}}));cov_1ks4ntaci2().s[211]++;return req;},/** - * Disables the entity on the server. - * - * @param {Function} callback A function to call when the object is disabled: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */disable:function(callback){cov_1ks4ntaci2().f[61]++;cov_1ks4ntaci2().s[212]++;callback=(cov_1ks4ntaci2().b[60][0]++,callback)||(cov_1ks4ntaci2().b[60][1]++,function(){cov_1ks4ntaci2().f[62]++;});var that=(cov_1ks4ntaci2().s[213]++,this);cov_1ks4ntaci2().s[214]++;this.post("disable",{},function(err,response){cov_1ks4ntaci2().f[63]++;cov_1ks4ntaci2().s[215]++;if(err){cov_1ks4ntaci2().b[61][0]++;cov_1ks4ntaci2().s[216]++;callback(err);}else{cov_1ks4ntaci2().b[61][1]++;cov_1ks4ntaci2().s[217]++;callback(null,that);}});},/** - * Enables the entity on the server. - * - * @param {Function} callback A function to call when the object is enabled: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */enable:function(callback){cov_1ks4ntaci2().f[64]++;cov_1ks4ntaci2().s[218]++;callback=(cov_1ks4ntaci2().b[62][0]++,callback)||(cov_1ks4ntaci2().b[62][1]++,function(){cov_1ks4ntaci2().f[65]++;});var that=(cov_1ks4ntaci2().s[219]++,this);cov_1ks4ntaci2().s[220]++;this.post("enable",{},function(err,response){cov_1ks4ntaci2().f[66]++;cov_1ks4ntaci2().s[221]++;if(err){cov_1ks4ntaci2().b[63][0]++;cov_1ks4ntaci2().s[222]++;callback(err);}else{cov_1ks4ntaci2().b[63][1]++;cov_1ks4ntaci2().s[223]++;callback(null,that);}});},/** - * Reloads the entity on the server. - * - * @param {Function} callback A function to call when the object is reloaded: `(err, entity)`. - * - * @method splunkjs.Service.Entity - * @protected - */reload:function(callback){cov_1ks4ntaci2().f[67]++;cov_1ks4ntaci2().s[224]++;callback=(cov_1ks4ntaci2().b[64][0]++,callback)||(cov_1ks4ntaci2().b[64][1]++,function(){cov_1ks4ntaci2().f[68]++;});var that=(cov_1ks4ntaci2().s[225]++,this);cov_1ks4ntaci2().s[226]++;this.post("_reload",{},function(err,response){cov_1ks4ntaci2().f[69]++;cov_1ks4ntaci2().s[227]++;if(err){cov_1ks4ntaci2().b[65][0]++;cov_1ks4ntaci2().s[228]++;callback(err);}else{cov_1ks4ntaci2().b[65][1]++;cov_1ks4ntaci2().s[229]++;callback(null,that);}});}});/** - * Defines a base class for a Splunk collection, which is a well-defined construct - * that provides basic methods for working with collections of entities, such as - * creating and listing entities. - * - * @class splunkjs.Service.Collection - * @extends splunkjs.Service.Resource - */cov_1ks4ntaci2().s[230]++;root.Collection=root.Resource.extend({/** - * A static property that indicates whether to call `fetch` after an - * entity has been created. By default, the entity is not fetched - * because the endpoint returns (echoes) the new entity. - - * @method splunkjs.Service.Collection - */fetchOnEntityCreation:false,/** - * Constructor for `splunkjs.Service.Collection`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} path A relative endpoint path (for example, "search/jobs"). - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Collection} A new `splunkjs.Service.Collection` instance. - * - * @method splunkjs.Service.Collection - */init:function(service,path,namespace){cov_1ks4ntaci2().f[70]++;cov_1ks4ntaci2().s[231]++;this._super(service,path,namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[232]++;this._load=utils.bind(this,this._load);cov_1ks4ntaci2().s[233]++;this.fetch=utils.bind(this,this.fetch);cov_1ks4ntaci2().s[234]++;this.create=utils.bind(this,this.create);cov_1ks4ntaci2().s[235]++;this.list=utils.bind(this,this.list);cov_1ks4ntaci2().s[236]++;this.item=utils.bind(this,this.item);cov_1ks4ntaci2().s[237]++;this.instantiateEntity=utils.bind(this,this.instantiateEntity);// Initial values -cov_1ks4ntaci2().s[238]++;this._entities=[];cov_1ks4ntaci2().s[239]++;this._entitiesByName={};cov_1ks4ntaci2().s[240]++;this._properties={};cov_1ks4ntaci2().s[241]++;this._paging={};cov_1ks4ntaci2().s[242]++;this._links={};},/** - * Creates a local instance of an entity. - * - * @param {Object} props The properties for this entity. - * @return {splunkjs.Service.Entity} A new `splunkjs.Service.Entity` instance. - * - * @method splunkjs.Service.Collection - */instantiateEntity:function(props){cov_1ks4ntaci2().f[71]++;cov_1ks4ntaci2().s[243]++;throw new Error("MUST BE OVERRIDDEN");},/** - * Loads the collection and properties, and creates a map of entity - * names to entity IDs (for retrieval purposes). - * - * @param {Object} properties The properties for this collection. - * - * @method splunkjs.Service.Collection - * @private - */_load:function(properties){cov_1ks4ntaci2().f[72]++;cov_1ks4ntaci2().s[244]++;this._super(properties);var entities=(cov_1ks4ntaci2().s[245]++,[]);var entitiesByName=(cov_1ks4ntaci2().s[246]++,{});var entityPropertyList=(cov_1ks4ntaci2().s[247]++,(cov_1ks4ntaci2().b[66][0]++,properties.entry)||(cov_1ks4ntaci2().b[66][1]++,[]));cov_1ks4ntaci2().s[248]++;for(var i=(cov_1ks4ntaci2().s[249]++,0);i1)&&(cov_1ks4ntaci2().b[90][1]++,!namespace)){cov_1ks4ntaci2().b[89][0]++;cov_1ks4ntaci2().s[303]++;// If there is more than one entity and we didn't -// specify a namespace, then we return an error -// saying the match is ambiguous -throw new Error("Ambiguous match for name '"+id+"'");}else{cov_1ks4ntaci2().b[89][1]++;cov_1ks4ntaci2().s[304]++;// There is more than one entity, and we do have -// a namespace, so we try and find it -for(var i=(cov_1ks4ntaci2().s[305]++,0);iPagination and Filtering options in the REST API documentation. - * @param {Function} callback A function to call when the history is retrieved: `(err, job, savedSearch)`. - * - * @endpoint saved/searches/{name}/history - * @method splunkjs.Service.SavedSearch - */history:function(options,callback){cov_1ks4ntaci2().f[97]++;cov_1ks4ntaci2().s[359]++;if((cov_1ks4ntaci2().b[106][0]++,!callback)&&(cov_1ks4ntaci2().b[106][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[105][0]++;cov_1ks4ntaci2().s[360]++;callback=options;cov_1ks4ntaci2().s[361]++;options={};}else{cov_1ks4ntaci2().b[105][1]++;}cov_1ks4ntaci2().s[362]++;callback=(cov_1ks4ntaci2().b[107][0]++,callback)||(cov_1ks4ntaci2().b[107][1]++,function(){cov_1ks4ntaci2().f[98]++;});cov_1ks4ntaci2().s[363]++;options=(cov_1ks4ntaci2().b[108][0]++,options)||(cov_1ks4ntaci2().b[108][1]++,{});var that=(cov_1ks4ntaci2().s[364]++,this);cov_1ks4ntaci2().s[365]++;return this.get("history",options,function(err,response){cov_1ks4ntaci2().f[99]++;cov_1ks4ntaci2().s[366]++;if(err){cov_1ks4ntaci2().b[109][0]++;cov_1ks4ntaci2().s[367]++;callback(err);cov_1ks4ntaci2().s[368]++;return;}else{cov_1ks4ntaci2().b[109][1]++;}var jobs=(cov_1ks4ntaci2().s[369]++,[]);var data=(cov_1ks4ntaci2().s[370]++,(cov_1ks4ntaci2().b[110][0]++,response.data.entry)||(cov_1ks4ntaci2().b[110][1]++,[]));cov_1ks4ntaci2().s[371]++;for(var i=(cov_1ks4ntaci2().s[372]++,0);iSaved search parameters on Splunk Developer Portal. - * @param {Function} callback A function to call when the object is updated: `(err, entity)`. - * - * @method splunkjs.Service.SavedSearch - */update:function(params,callback){cov_1ks4ntaci2().f[103]++;cov_1ks4ntaci2().s[383]++;params=(cov_1ks4ntaci2().b[112][0]++,params)||(cov_1ks4ntaci2().b[112][1]++,{});cov_1ks4ntaci2().s[384]++;if(!params.search){cov_1ks4ntaci2().b[113][0]++;var update=(cov_1ks4ntaci2().s[385]++,this._super);var req=(cov_1ks4ntaci2().s[386]++,this.fetch(function(err,search){cov_1ks4ntaci2().f[104]++;cov_1ks4ntaci2().s[387]++;if(err){cov_1ks4ntaci2().b[114][0]++;cov_1ks4ntaci2().s[388]++;callback(err);}else{cov_1ks4ntaci2().b[114][1]++;cov_1ks4ntaci2().s[389]++;params.search=search.properties().search;cov_1ks4ntaci2().s[390]++;update.call(search,params,function(){cov_1ks4ntaci2().f[105]++;cov_1ks4ntaci2().s[391]++;if(req.wasAborted){cov_1ks4ntaci2().b[115][0]++;cov_1ks4ntaci2().s[392]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[115][1]++;cov_1ks4ntaci2().s[393]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[394]++;return req;}else{cov_1ks4ntaci2().b[113][1]++;cov_1ks4ntaci2().s[395]++;return this._super(params,callback);}}});/** - * Represents a collection of saved searches. You can create and list saved - * searches using this collection container, or get a specific saved search. - * - * - * @endpoint saved/searches - * @class splunkjs.Service.SavedSearches - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[396]++;root.SavedSearches=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.SavedSearches - */path:function(){cov_1ks4ntaci2().f[106]++;cov_1ks4ntaci2().s[397]++;return Paths.savedSearches;},/** - * Creates a local instance of a saved search. - * - * @param {Object} props The properties for the new saved search. For a list of available parameters, see Saved search parameters on Splunk Developer Portal. - * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.SavedSearch` instance. - * - * @method splunkjs.Service.SavedSearches - */instantiateEntity:function(props){cov_1ks4ntaci2().f[107]++;var entityNamespace=(cov_1ks4ntaci2().s[398]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[399]++;return new root.SavedSearch(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.SavedSearches`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.SavedSearches} A new `splunkjs.Service.SavedSearches` instance. - * - * @method splunkjs.Service.SavedSearches - */init:function(service,namespace){cov_1ks4ntaci2().f[108]++;cov_1ks4ntaci2().s[400]++;this._super(service,this.path(),namespace);}});/** - * Represents a specific storage password, which you can then view, modify, and - * remove. - * - * @endpoint storage/passwords/{name} - * @class splunkjs.Service.StoragePassword - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[401]++;root.StoragePassword=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.StoragePassword - */path:function(){cov_1ks4ntaci2().f[109]++;cov_1ks4ntaci2().s[402]++;return Paths.storagePasswords+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.StoragePassword`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new storage password. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePassword} A new `splunkjs.Service.StoragePassword` instance. - * - * @method splunkjs.Service.StoragePassword - */init:function(service,name,namespace){cov_1ks4ntaci2().f[110]++;cov_1ks4ntaci2().s[403]++;this.name=name;cov_1ks4ntaci2().s[404]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of storage passwords. You can create and list storage - * passwords using this collection container, or get a specific storage password. - * - * @endpoint storage/passwords - * @class splunkjs.Service.StoragePasswords - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[405]++;root.StoragePasswords=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.StoragePasswords - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.StoragePasswords - */path:function(){cov_1ks4ntaci2().f[111]++;cov_1ks4ntaci2().s[406]++;return Paths.storagePasswords;},/** - * Creates a local instance of a storage password. - * - * @param {Object} props The properties for the new storage password. For a list of available parameters, - * see - * POST storage/passwords on Splunk Developer Portal. - * @return {splunkjs.Service.SavedSearch} A new `splunkjs.Service.StoragePassword` instance. - * - * @method splunkjs.Service.StoragePasswords - */instantiateEntity:function(props){cov_1ks4ntaci2().f[112]++;var entityNamespace=(cov_1ks4ntaci2().s[407]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[408]++;return new root.StoragePassword(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.StoragePasswords`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.StoragePasswords} A new `splunkjs.Service.StoragePasswords` instance. - * - * @method splunkjs.Service.StoragePasswords - */init:function(service,namespace){cov_1ks4ntaci2().f[113]++;cov_1ks4ntaci2().s[409]++;this._super(service,this.path(),namespace);}});/** - * Represents a fired alert. - * You can retrieve several of the fired alert's properties by - * the corresponding function name. - * - * @endpoint alerts/fired_alerts/{name} - * @class splunkjs.Service.FiredAlert - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[410]++;root.FiredAlert=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.FiredAlert - */path:function(){cov_1ks4ntaci2().f[114]++;cov_1ks4ntaci2().s[411]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** - * Returns this alert's actions (such as notifying by email, running a - * script, adding to RSS, tracking in Alert Manager, and enabling - * summary indexing). - * - * @return {Array} of actions, an empty {Array} if no actions - * @method splunkjs.Service.FiredAlert - */actions:function(){cov_1ks4ntaci2().f[115]++;cov_1ks4ntaci2().s[412]++;return(cov_1ks4ntaci2().b[116][0]++,this.properties().actions)||(cov_1ks4ntaci2().b[116][1]++,[]);},/** - * Returns this alert's type. - * - * @return {String} the alert's type. - * @method splunkjs.Service.FiredAlert - */alertType:function(){cov_1ks4ntaci2().f[116]++;cov_1ks4ntaci2().s[413]++;return(cov_1ks4ntaci2().b[117][0]++,this.properties().alert_type)||(cov_1ks4ntaci2().b[117][1]++,null);},/** - * Indicates whether the result is a set of events (digest) or a single - * event (per result). - * - * This method is available in Splunk 4.3 and later. - * - * @return {Boolean} true if the result is a digest, false if per result - * @method splunkjs.Service.FiredAlert - */isDigestMode:function(){cov_1ks4ntaci2().f[117]++;cov_1ks4ntaci2().s[414]++;// Convert this property to a Boolean -return!!this.properties().digest_mode;},/** - * Returns the rendered expiration time for this alert. - * - * This method is available in Splunk 4.3 and later. - * - * @return {String} - * @method splunkjs.Service.FiredAlert - */expirationTime:function(){cov_1ks4ntaci2().f[118]++;cov_1ks4ntaci2().s[415]++;return(cov_1ks4ntaci2().b[118][0]++,this.properties().expiration_time_rendered)||(cov_1ks4ntaci2().b[118][1]++,null);},/** - * Returns the saved search for this alert. - * - * @return {String} The saved search name, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */savedSearchName:function(){cov_1ks4ntaci2().f[119]++;cov_1ks4ntaci2().s[416]++;return(cov_1ks4ntaci2().b[119][0]++,this.properties().savedsearch_name)||(cov_1ks4ntaci2().b[119][1]++,null);},/** - * Returns this alert's severity on a scale of 1 to 10, with 1 being the - * highest severity. - * - * @return {Number} this alert's severity, -1 if not specified - * @method splunkjs.Service.FiredAlert - */severity:function(){cov_1ks4ntaci2().f[120]++;cov_1ks4ntaci2().s[417]++;return(cov_1ks4ntaci2().b[120][0]++,parseInt(this.properties().severity,10))||(cov_1ks4ntaci2().b[120][1]++,-1);},/** - * Returns this alert's search ID (SID). - * - * @return {String} This alert's SID, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */sid:function(){cov_1ks4ntaci2().f[121]++;cov_1ks4ntaci2().s[418]++;return(cov_1ks4ntaci2().b[121][0]++,this.properties().sid)||(cov_1ks4ntaci2().b[121][1]++,null);},/** - * Returns the time this alert was triggered. - * - * @return {Number} This alert's trigger time, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */triggerTime:function(){cov_1ks4ntaci2().f[122]++;cov_1ks4ntaci2().s[419]++;return(cov_1ks4ntaci2().b[122][0]++,this.properties().trigger_time)||(cov_1ks4ntaci2().b[122][1]++,null);},/** - * Returns this alert's rendered trigger time. - * - * This method is available in Splunk 4.3 and later. - * - * @return {String} This alert's rendered trigger time, or {null} if not available. - * @method splunkjs.Service.FiredAlert - */triggerTimeRendered:function(){cov_1ks4ntaci2().f[123]++;cov_1ks4ntaci2().s[420]++;return(cov_1ks4ntaci2().b[123][0]++,this.properties().trigger_time_rendered)||(cov_1ks4ntaci2().b[123][1]++,null);},/** - * Returns the count of triggered alerts. - * - * This method is available in Splunk 4.3 and later. - * - * @return {Number} The number of triggered alerts, or -1 if not specified. - * @method splunkjs.Service.FiredAlert - */triggeredAlertCount:function(){cov_1ks4ntaci2().f[124]++;cov_1ks4ntaci2().s[421]++;return(cov_1ks4ntaci2().b[124][0]++,parseInt(this.properties().triggered_alerts,10))||(cov_1ks4ntaci2().b[124][1]++,-1);},/** - * Constructor for `splunkjs.Service.FiredAlert`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new alert group. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.FiredAlert} A new `splunkjs.Service.FiredAlert` instance. - * - * @method splunkjs.Service.FiredAlert - */init:function(service,name,namespace){cov_1ks4ntaci2().f[125]++;cov_1ks4ntaci2().s[422]++;this.name=name;cov_1ks4ntaci2().s[423]++;this._super(service,this.path(),namespace);}});/** - * Represents a specific alert group, which you can then view and - * remove. - * - * @endpoint alerts/fired_alerts/{name} - * @class splunkjs.Service.FiredAlertGroup - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[424]++;root.FiredAlertGroup=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.FiredAlertGroup - */path:function(){cov_1ks4ntaci2().f[126]++;cov_1ks4ntaci2().s[425]++;return Paths.firedAlerts+"/"+encodeURIComponent(this.name);},/** - * Returns the `triggered_alert_count` property, the count - * of triggered alerts. - * - * @return {Number} the count of triggered alerts - * - * @method splunkjs.Service.FiredAlertGroup - */count:function(){cov_1ks4ntaci2().f[127]++;cov_1ks4ntaci2().s[426]++;return(cov_1ks4ntaci2().b[125][0]++,parseInt(this.properties().triggered_alert_count,10))||(cov_1ks4ntaci2().b[125][1]++,0);},/** - * Returns fired instances of this alert, which is - * a list of `splunkjs.Service.FiredAlert` instances. - * - * @example - * - * var alertGroup = service.firedAlertGroups().item("MyAlert"); - * alertGroup.list(function(err, firedAlerts, alert) { - * for(var i = 0; i < firedAlerts.length; i++) { - * console.log("Fired alert", i, ":", firedAlerts[i].sid); - * } - * }); - * - * @param {Function} callback A function to call when the fired alerts are retrieved: `(err, firedAlerts, alertGroup)`. - * - * @method splunkjs.Service.FiredAlertGroup - */list:function(options,callback){cov_1ks4ntaci2().f[128]++;cov_1ks4ntaci2().s[427]++;if((cov_1ks4ntaci2().b[127][0]++,!callback)&&(cov_1ks4ntaci2().b[127][1]++,utils.isFunction(options))){cov_1ks4ntaci2().b[126][0]++;cov_1ks4ntaci2().s[428]++;callback=options;cov_1ks4ntaci2().s[429]++;options={};}else{cov_1ks4ntaci2().b[126][1]++;}cov_1ks4ntaci2().s[430]++;callback=(cov_1ks4ntaci2().b[128][0]++,callback)||(cov_1ks4ntaci2().b[128][1]++,function(){cov_1ks4ntaci2().f[129]++;});cov_1ks4ntaci2().s[431]++;options=(cov_1ks4ntaci2().b[129][0]++,options)||(cov_1ks4ntaci2().b[129][1]++,{});var that=(cov_1ks4ntaci2().s[432]++,this);cov_1ks4ntaci2().s[433]++;return this.get("",options,function(err,response){cov_1ks4ntaci2().f[130]++;cov_1ks4ntaci2().s[434]++;if(err){cov_1ks4ntaci2().b[130][0]++;cov_1ks4ntaci2().s[435]++;callback(err);cov_1ks4ntaci2().s[436]++;return;}else{cov_1ks4ntaci2().b[130][1]++;}var firedAlerts=(cov_1ks4ntaci2().s[437]++,[]);var data=(cov_1ks4ntaci2().s[438]++,(cov_1ks4ntaci2().b[131][0]++,response.data.entry)||(cov_1ks4ntaci2().b[131][1]++,[]));cov_1ks4ntaci2().s[439]++;for(var i=(cov_1ks4ntaci2().s[440]++,0);iPOST apps/local endpoint in the REST API documentation. - * @return {splunkjs.Service.Application} A new `splunkjs.Service.Application` instance. - * - * @method splunkjs.Service.Applications - */instantiateEntity:function(props){cov_1ks4ntaci2().f[145]++;cov_1ks4ntaci2().s[478]++;return new root.Application(this.service,props.name,{});},/** - * Constructor for `splunkjs.Service.Applications`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.Applications} A new `splunkjs.Service.Applications` instance. - * - * @method splunkjs.Service.Applications - */init:function(service){cov_1ks4ntaci2().f[146]++;cov_1ks4ntaci2().s[479]++;this._super(service,this.path(),{});}});/** - * Provides access to configuration information about the server. - * - * @endpoint server/info - * @class splunkjs.Service.ServerInfo - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[480]++;root.ServerInfo=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ServerInfo - */path:function(){cov_1ks4ntaci2().f[147]++;cov_1ks4ntaci2().s[481]++;return Paths.info;},/** - * Constructor for `splunkjs.Service.ServerInfo`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.ServerInfo} A new `splunkjs.Service.ServerInfo` instance. - * - * @method splunkjs.Service.ServerInfo - */init:function(service){cov_1ks4ntaci2().f[148]++;cov_1ks4ntaci2().s[482]++;this.name="server-info";cov_1ks4ntaci2().s[483]++;this._super(service,this.path(),{});}});/** - * Represents a specific Splunk user, which you can view, modify, and - * remove. - * - * @endpoint authentication/users/{name} - * @class splunkjs.Service.User - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[484]++;root.User=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.User - */path:function(){cov_1ks4ntaci2().f[149]++;cov_1ks4ntaci2().s[485]++;return Paths.users+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.User`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The Splunk username. - * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. - * - * @method splunkjs.Service.User - */init:function(service,name){cov_1ks4ntaci2().f[150]++;cov_1ks4ntaci2().s[486]++;this.name=name;cov_1ks4ntaci2().s[487]++;this._super(service,this.path(),{});}});/** - * Represents a collection of users. You can create and list users using - * this collection container, or get a specific user. - * - * @endpoint authentication/users - * @class splunkjs.Service.Users - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[488]++;root.Users=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.Users - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Users - */path:function(){cov_1ks4ntaci2().f[151]++;cov_1ks4ntaci2().s[489]++;return Paths.users;},/** - * Creates a local instance of a user. - * - * @param {Object} props The properties for this new user. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. - * @return {splunkjs.Service.User} A new `splunkjs.Service.User` instance. - * - * @method splunkjs.Service.Users - */instantiateEntity:function(props){cov_1ks4ntaci2().f[152]++;cov_1ks4ntaci2().s[490]++;return new root.User(this.service,props.name,{});},/** - * Constructor for `splunkjs.Service.Users`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @return {splunkjs.Service.Users} A new `splunkjs.Service.Users` instance. - * - * @method splunkjs.Service.Users - */init:function(service){cov_1ks4ntaci2().f[153]++;cov_1ks4ntaci2().s[491]++;this._super(service,this.path(),{});},/** - * Creates a new user. - * - * **Note:** This endpoint requires a special implementation. - * - * @param {Object} params A dictionary of properties. For a list of available parameters, see User authentication parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the new entity: `(err, createdEntity)`. - * - * @method splunkjs.Service.Users - */create:function(params,callback){cov_1ks4ntaci2().f[154]++;cov_1ks4ntaci2().s[492]++;callback=(cov_1ks4ntaci2().b[136][0]++,callback)||(cov_1ks4ntaci2().b[136][1]++,function(){cov_1ks4ntaci2().f[155]++;});var that=(cov_1ks4ntaci2().s[493]++,this);var req=(cov_1ks4ntaci2().s[494]++,this.post("",params,function(err,response){cov_1ks4ntaci2().f[156]++;cov_1ks4ntaci2().s[495]++;if(err){cov_1ks4ntaci2().b[137][0]++;cov_1ks4ntaci2().s[496]++;callback(err);}else{cov_1ks4ntaci2().b[137][1]++;// This endpoint requires us to use the passed-in name -var props=(cov_1ks4ntaci2().s[497]++,{name:params.name});var entity=(cov_1ks4ntaci2().s[498]++,that.instantiateEntity(props));cov_1ks4ntaci2().s[499]++;entity.fetch(function(){cov_1ks4ntaci2().f[157]++;cov_1ks4ntaci2().s[500]++;if(req.wasAborted){cov_1ks4ntaci2().b[138][0]++;cov_1ks4ntaci2().s[501]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[138][1]++;cov_1ks4ntaci2().s[502]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[503]++;return req;}});/** - * Represents a specific Splunk view, which you can view, modify, and - * remove. - * - * @endpoint data/ui/views/{name} - * @class splunkjs.Service.View - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[504]++;root.View=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.View - */path:function(){cov_1ks4ntaci2().f[158]++;cov_1ks4ntaci2().s[505]++;return Paths.views+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.View`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the view. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. - * - * @method splunkjs.Service.View - */init:function(service,name,namespace){cov_1ks4ntaci2().f[159]++;cov_1ks4ntaci2().s[506]++;this.name=name;cov_1ks4ntaci2().s[507]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of views. You can create and list views using - * this collection container, or get a specific view. - * - * @endpoint data/ui/views - * @class splunkjs.Service.Views - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[508]++;root.Views=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Views - */path:function(){cov_1ks4ntaci2().f[160]++;cov_1ks4ntaci2().s[509]++;return Paths.views;},/** - * Creates a local instance of a view. - * - * @param {Object} props The properties for the new view. For a list of available parameters, see the POST scheduled/views/{name} endpoint in the REST API documentation. - * @return {splunkjs.Service.View} A new `splunkjs.Service.View` instance. - * - * @method splunkjs.Service.Views - */instantiateEntity:function(props){cov_1ks4ntaci2().f[161]++;var entityNamespace=(cov_1ks4ntaci2().s[510]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[511]++;return new root.View(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.Views`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Views} A new `splunkjs.Service.Views` instance. - * - * @method splunkjs.Service.Views - */init:function(service,namespace){cov_1ks4ntaci2().f[162]++;cov_1ks4ntaci2().s[512]++;this._super(service,this.path(),namespace);}});/** - * Represents an index, which you can update and submit events to. - * - * @endpoint data/indexes/name - * @class splunkjs.Service.Index - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[513]++;root.Index=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Index - */path:function(){cov_1ks4ntaci2().f[163]++;cov_1ks4ntaci2().s[514]++;return Paths.indexes+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.Index`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the index. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. - * - * @method splunkjs.Service.Index - */init:function(service,name,namespace){cov_1ks4ntaci2().f[164]++;cov_1ks4ntaci2().s[515]++;this.name=name;cov_1ks4ntaci2().s[516]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[517]++;this.submitEvent=utils.bind(this,this.submitEvent);},/** - * Submits an event to this index. - * - * @example - * - * var index = service.indexes().item("_internal"); - * index.submitEvent("A new event", {sourcetype: "mysourcetype"}, function(err, result, index) { - * console.log("Submitted event: ", result); - * }); - * - * @param {String} event The text for this event. - * @param {Object} params A dictionary of parameters for indexing: - * - `host` (_string_): The value to populate in the host field for events from this data input. - * - `host_regex` (_string_): A regular expression used to extract the host value from each event. - * - `source` (_string_): The source value to fill in the metadata for this input's events. - * - `sourcetype` (_string_): The sourcetype to apply to events from this input. - * @param {Function} callback A function to call when the event is submitted: `(err, result, index)`. - * - * @endpoint receivers/simple?index={name} - * @method splunkjs.Service.Index - */submitEvent:function(event,params,callback){cov_1ks4ntaci2().f[165]++;cov_1ks4ntaci2().s[518]++;if((cov_1ks4ntaci2().b[140][0]++,!callback)&&(cov_1ks4ntaci2().b[140][1]++,utils.isFunction(params))){cov_1ks4ntaci2().b[139][0]++;cov_1ks4ntaci2().s[519]++;callback=params;cov_1ks4ntaci2().s[520]++;params={};}else{cov_1ks4ntaci2().b[139][1]++;}cov_1ks4ntaci2().s[521]++;callback=(cov_1ks4ntaci2().b[141][0]++,callback)||(cov_1ks4ntaci2().b[141][1]++,function(){cov_1ks4ntaci2().f[166]++;});cov_1ks4ntaci2().s[522]++;params=(cov_1ks4ntaci2().b[142][0]++,params)||(cov_1ks4ntaci2().b[142][1]++,{});// Add the index name -cov_1ks4ntaci2().s[523]++;params["index"]=this.name;var that=(cov_1ks4ntaci2().s[524]++,this);cov_1ks4ntaci2().s[525]++;return this.service.log(event,params,function(err,result){cov_1ks4ntaci2().f[167]++;cov_1ks4ntaci2().s[526]++;callback(err,result,that);});},remove:function(callback){cov_1ks4ntaci2().f[168]++;cov_1ks4ntaci2().s[527]++;if(this.service.versionCompare("5.0")<0){cov_1ks4ntaci2().b[143][0]++;cov_1ks4ntaci2().s[528]++;throw new Error("Indexes cannot be removed in Splunk 4.x");}else{cov_1ks4ntaci2().b[143][1]++;cov_1ks4ntaci2().s[529]++;return this._super(callback);}}});/** - * Represents a collection of indexes. You can create and list indexes using - * this collection container, or get a specific index. - * - * @endpoint data/indexes - * @class splunkjs.Service.Indexes - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[530]++;root.Indexes=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Indexes - */path:function(){cov_1ks4ntaci2().f[169]++;cov_1ks4ntaci2().s[531]++;return Paths.indexes;},/** - * Creates a local instance of an index. - * - * @param {Object} props The properties for the new index. For a list of available parameters, see Index parameters on Splunk Developer Portal. - * @return {splunkjs.Service.Index} A new `splunkjs.Service.Index` instance. - * - * @method splunkjs.Service.Indexes - */instantiateEntity:function(props){cov_1ks4ntaci2().f[170]++;var entityNamespace=(cov_1ks4ntaci2().s[532]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[533]++;return new root.Index(this.service,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.Indexes`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Indexes} A new `splunkjs.Service.Indexes` instance. - * - * @method splunkjs.Service.Indexes - */init:function(service,namespace){cov_1ks4ntaci2().f[171]++;cov_1ks4ntaci2().s[534]++;this._super(service,this.path(),namespace);},/** - * Creates an index with the given name and parameters. - * - * @example - * - * var indexes = service.indexes(); - * indexes.create("NewIndex", {assureUTF8: true}, function(err, newIndex) { - * console.log("CREATED"); - * }); - * - * @param {String} name A name for this index. - * @param {Object} params A dictionary of properties. For a list of available parameters, see Index parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the new index: `(err, createdIndex)`. - * - * @endpoint data/indexes - * @method splunkjs.Service.Indexes - */create:function(name,params,callback){cov_1ks4ntaci2().f[172]++;cov_1ks4ntaci2().s[535]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[145][0]++,utils.isObject(name))&&(cov_1ks4ntaci2().b[145][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[145][2]++,!callback)){cov_1ks4ntaci2().b[144][0]++;cov_1ks4ntaci2().s[536]++;callback=params;cov_1ks4ntaci2().s[537]++;params=name;cov_1ks4ntaci2().s[538]++;name=params.name;}else{cov_1ks4ntaci2().b[144][1]++;}cov_1ks4ntaci2().s[539]++;params=(cov_1ks4ntaci2().b[146][0]++,params)||(cov_1ks4ntaci2().b[146][1]++,{});cov_1ks4ntaci2().s[540]++;params["name"]=name;cov_1ks4ntaci2().s[541]++;return this._super(params,callback);}});/** - * Represents a specific stanza, which you can update and remove, from a - * configuration file. - * - * @endpoint configs/conf-{file}/{name}` - * @class splunkjs.Service.ConfigurationStanza - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[542]++;root.ConfigurationStanza=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ConfigurationStanza - */path:function(){cov_1ks4ntaci2().f[173]++;var name=(cov_1ks4ntaci2().s[543]++,this.name==="default"?(cov_1ks4ntaci2().b[147][0]++,"_new"):(cov_1ks4ntaci2().b[147][1]++,this.name));cov_1ks4ntaci2().s[544]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.file)+"/"+encodeURIComponent(name);},/** - * Constructor for `splunkjs.Service.ConfigurationStanza`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} file The name of the configuration file. - * @param {String} name The name of the new stanza. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationStanza - */init:function(service,file,name,namespace){cov_1ks4ntaci2().f[174]++;cov_1ks4ntaci2().s[545]++;this.name=name;cov_1ks4ntaci2().s[546]++;this.file=file;cov_1ks4ntaci2().s[547]++;this._super(service,this.path(),namespace);}});/** - * Represents a collection of stanzas for a specific property file. You can - * create and list stanzas using this collection container, or get a specific - * stanza. - * - * @endpoint configs/conf-{file} - * @class splunkjs.Service.ConfigurationFile - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[548]++;root.ConfigurationFile=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.ConfigurationFile - */path:function(){cov_1ks4ntaci2().f[175]++;cov_1ks4ntaci2().s[549]++;return Paths.configurations+"/conf-"+encodeURIComponent(this.name);},/** - * Creates a local instance of the default stanza in a configuration file. - * You cannot directly update the `ConfigurationStanza` returned by this function. - * - * This is equivalent to viewing `configs/conf-{file}/_new`. - * - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationFile - */getDefaultStanza:function(){cov_1ks4ntaci2().f[176]++;cov_1ks4ntaci2().s[550]++;return new root.ConfigurationStanza(this.service,this.name,"default",this.namespace);},/** - * Creates a local instance of a stanza in a configuration file. - * - * @param {Object} props The key-value properties for the new stanza. - * @return {splunkjs.Service.ConfigurationStanza} A new `splunkjs.Service.ConfigurationStanza` instance. - * - * @method splunkjs.Service.ConfigurationFile - */instantiateEntity:function(props){cov_1ks4ntaci2().f[177]++;var entityNamespace=(cov_1ks4ntaci2().s[551]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[552]++;return new root.ConfigurationStanza(this.service,this.name,props.name,entityNamespace);},/** - * Constructor for `splunkjs.Service.ConfigurationFile`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name of the configuration file. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. - * - * @method splunkjs.Service.ConfigurationFile - */init:function(service,name,namespace){cov_1ks4ntaci2().f[178]++;cov_1ks4ntaci2().s[553]++;this.name=name;cov_1ks4ntaci2().s[554]++;this._super(service,this.path(),namespace);},/** - * Creates a stanza in this configuration file. - * - * @example - * - * var file = service.configurations().item("props"); - * file.create("my_stanza", function(err, newStanza) { - * console.log("CREATED"); - * }); - * - * @param {String} stanzaName A name for this stanza. - * @param {Object} values A dictionary of key-value pairs to put in this stanza. - * @param {Function} callback A function to call with the created stanza: `(err, createdStanza)`. - * - * @endpoint configs/conf-{file} - * @method splunkjs.Service.ConfigurationFile - */create:function(stanzaName,values,callback){cov_1ks4ntaci2().f[179]++;cov_1ks4ntaci2().s[555]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[149][0]++,utils.isObject(stanzaName))&&(cov_1ks4ntaci2().b[149][1]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[149][2]++,!callback)){cov_1ks4ntaci2().b[148][0]++;cov_1ks4ntaci2().s[556]++;callback=values;cov_1ks4ntaci2().s[557]++;values=stanzaName;cov_1ks4ntaci2().s[558]++;stanzaName=values.name;}else{cov_1ks4ntaci2().b[148][1]++;}cov_1ks4ntaci2().s[559]++;if((cov_1ks4ntaci2().b[151][0]++,utils.isFunction(values))&&(cov_1ks4ntaci2().b[151][1]++,!callback)){cov_1ks4ntaci2().b[150][0]++;cov_1ks4ntaci2().s[560]++;callback=values;cov_1ks4ntaci2().s[561]++;values={};}else{cov_1ks4ntaci2().b[150][1]++;}cov_1ks4ntaci2().s[562]++;values=(cov_1ks4ntaci2().b[152][0]++,values)||(cov_1ks4ntaci2().b[152][1]++,{});cov_1ks4ntaci2().s[563]++;values["name"]=stanzaName;cov_1ks4ntaci2().s[564]++;return this._super(values,callback);}});/** - * Represents a collection of configuration files. You can create and list - * configuration files using this collection container, or get a specific file. - * - * @endpoint properties - * @class splunkjs.Service.Configurations - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[565]++;root.Configurations=root.Collection.extend({/** - * Indicates whether to call `fetch` after an entity has been created. By - * default, the entity is not fetched because the endpoint returns - * (echoes) the new entity. - * - * @method splunkjs.Service.Configurations - */fetchOnEntityCreation:true,/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Configurations - */path:function(){cov_1ks4ntaci2().f[180]++;cov_1ks4ntaci2().s[566]++;return Paths.properties;},/** - * Creates a local instance of a configuration file. - * - * @param {Object} props The properties for this configuration file. - * @return {splunkjs.Service.ConfigurationFile} A new `splunkjs.Service.ConfigurationFile` instance. - * - * @method splunkjs.Service.Configurations - */instantiateEntity:function(props){cov_1ks4ntaci2().f[181]++;cov_1ks4ntaci2().s[567]++;return new root.ConfigurationFile(this.service,props.name,this.namespace);},/** - * Constructor for `splunkjs.Service.Configurations`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Configurations} A new `splunkjs.Service.Configurations` instance. - * - * @method splunkjs.Service.Configurations - */init:function(service,namespace){cov_1ks4ntaci2().f[182]++;cov_1ks4ntaci2().s[568]++;if((cov_1ks4ntaci2().b[154][0]++,!namespace)||(cov_1ks4ntaci2().b[154][1]++,namespace.owner==="-")||(cov_1ks4ntaci2().b[154][2]++,namespace.app==="-")){cov_1ks4ntaci2().b[153][0]++;cov_1ks4ntaci2().s[569]++;throw new Error("Configurations requires a non-wildcard owner/app");}else{cov_1ks4ntaci2().b[153][1]++;}cov_1ks4ntaci2().s[570]++;this._super(service,this.path(),namespace);},/** - * Creates a configuration file. - * - * @example - * - * var configurations = service.configurations(); - * configurations.create("myprops", function(err, newFile) { - * console.log("CREATED"); - * }); - * - * @param {String} filename A name for this configuration file. - * @param {Function} callback A function to call with the new configuration file: `(err, createdFile)`. - * - * @endpoint properties - * @method splunkjs.Service.Configurations - */create:function(filename,callback){cov_1ks4ntaci2().f[183]++;cov_1ks4ntaci2().s[571]++;// If someone called us with the default style of (params, callback), -// lets make it work -if(utils.isObject(filename)){cov_1ks4ntaci2().b[155][0]++;cov_1ks4ntaci2().s[572]++;filename=filename["__conf"];}else{cov_1ks4ntaci2().b[155][1]++;}cov_1ks4ntaci2().s[573]++;callback=(cov_1ks4ntaci2().b[156][0]++,callback)||(cov_1ks4ntaci2().b[156][1]++,function(){cov_1ks4ntaci2().f[184]++;});var that=(cov_1ks4ntaci2().s[574]++,this);var req=(cov_1ks4ntaci2().s[575]++,this.post("",{__conf:filename},function(err,response){cov_1ks4ntaci2().f[185]++;cov_1ks4ntaci2().s[576]++;if(err){cov_1ks4ntaci2().b[157][0]++;cov_1ks4ntaci2().s[577]++;callback(err);}else{cov_1ks4ntaci2().b[157][1]++;var entity=(cov_1ks4ntaci2().s[578]++,new root.ConfigurationFile(that.service,filename));cov_1ks4ntaci2().s[579]++;entity.fetch(function(){cov_1ks4ntaci2().f[186]++;cov_1ks4ntaci2().s[580]++;if(req.wasAborted){cov_1ks4ntaci2().b[158][0]++;cov_1ks4ntaci2().s[581]++;return;// aborted, so ignore -}else{cov_1ks4ntaci2().b[158][1]++;cov_1ks4ntaci2().s[582]++;callback.apply(null,arguments);}});}}));cov_1ks4ntaci2().s[583]++;return req;},doesFileExist:async function(filename){cov_1ks4ntaci2().f[187]++;cov_1ks4ntaci2().s[584]++;try{var that=(cov_1ks4ntaci2().s[585]++,this);// 1. Fetch files list -var response=(cov_1ks4ntaci2().s[586]++,await this.get_v2("",{__conf:filename}));// 2. Filter the files -var files=(cov_1ks4ntaci2().s[587]++,response?.body?.entry?.filter(f=>{cov_1ks4ntaci2().f[188]++;cov_1ks4ntaci2().s[588]++;return f.name===filename;}));// 2. Check if the file exists -cov_1ks4ntaci2().s[589]++;if((cov_1ks4ntaci2().b[160][0]++,files)&&(cov_1ks4ntaci2().b[160][1]++,files.length==0)){cov_1ks4ntaci2().b[159][0]++;cov_1ks4ntaci2().s[590]++;return{code:"FILE_NOT_FOUND",message:`File with the name '${filename}' does not exist.`};}else{cov_1ks4ntaci2().b[159][1]++;}// 3. Create a local instance -var configurationFile=(cov_1ks4ntaci2().s[591]++,new root.ConfigurationFile(that.service,filename));// 4. Load the file content -var fetchedFile=(cov_1ks4ntaci2().s[592]++,await configurationFile.fetch_v2());cov_1ks4ntaci2().s[593]++;return{file:fetchedFile};}catch(error){cov_1ks4ntaci2().s[594]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},doesStanzaExist:async function(file,stanza){cov_1ks4ntaci2().f[189]++;cov_1ks4ntaci2().s[595]++;try{// 1. check if the stanza exists -var fetchedStanza=(cov_1ks4ntaci2().s[596]++,file.item(stanza));cov_1ks4ntaci2().s[597]++;if(!fetchedStanza){cov_1ks4ntaci2().b[161][0]++;cov_1ks4ntaci2().s[598]++;return{code:"STANZA_NOT_FOUND",message:`Stanza with the name '${stanza}' does not exist.`};}else{cov_1ks4ntaci2().b[161][1]++;cov_1ks4ntaci2().s[599]++;return{stanza:fetchedStanza};}}catch(error){cov_1ks4ntaci2().s[600]++;return{errorCode:"SYSTEM_ERROR",errorMessage:error};}},create_v2:async function(configs,svc,filename,stanza,keyValueMap,callback){cov_1ks4ntaci2().f[190]++;cov_1ks4ntaci2().s[601]++;callback=(cov_1ks4ntaci2().b[162][0]++,callback)||(cov_1ks4ntaci2().b[162][1]++,function(){cov_1ks4ntaci2().f[191]++;});var that=(cov_1ks4ntaci2().s[602]++,this);// 1. Check if the file exists -var doesFileExistResponse=(cov_1ks4ntaci2().s[603]++,await this.doesFileExist(filename));var configFile=(cov_1ks4ntaci2().s[604]++,doesFileExistResponse.file);// 2. If the file doesn't exist, create a new file -cov_1ks4ntaci2().s[605]++;if(!configFile){cov_1ks4ntaci2().b[163][0]++;cov_1ks4ntaci2().s[606]++;console.log(doesFileExistResponse);cov_1ks4ntaci2().s[607]++;console.log("Creating a new configuration file...");cov_1ks4ntaci2().s[608]++;that.create({__conf:filename},(err,newFile)=>{cov_1ks4ntaci2().f[192]++;cov_1ks4ntaci2().s[609]++;return console.log(`Configuration File created: ${filename}`);});cov_1ks4ntaci2().s[610]++;configFile=new root.ConfigurationFile(that.service,filename);cov_1ks4ntaci2().s[611]++;configFile=await configFile.fetch_v2();}else{cov_1ks4ntaci2().b[163][1]++;}// 2. Check if the stanza exists -var doesStanzaExistResponse=(cov_1ks4ntaci2().s[612]++,await this.doesStanzaExist(configFile,stanza));var configStanza=(cov_1ks4ntaci2().s[613]++,doesStanzaExistResponse.stanza);// 3. If the stanza doesn't exist, create a new stanza with given keyValueMap -cov_1ks4ntaci2().s[614]++;if(!configStanza){cov_1ks4ntaci2().b[164][0]++;cov_1ks4ntaci2().s[615]++;console.log(doesStanzaExistResponse);cov_1ks4ntaci2().s[616]++;console.log("Creating a new configuration stanza...");cov_1ks4ntaci2().s[617]++;configFile.create(stanza,keyValueMap,function(err,newStanza){cov_1ks4ntaci2().f[193]++;cov_1ks4ntaci2().s[618]++;console.log(`Configuration Stanza created: ${stanza}`);cov_1ks4ntaci2().s[619]++;callback();});}// 4. If the stanza exists, update it with the keyValueMap -else{cov_1ks4ntaci2().b[164][1]++;cov_1ks4ntaci2().s[620]++;configStanza.update(keyValueMap,(err,updatedStanza)=>{cov_1ks4ntaci2().f[194]++;cov_1ks4ntaci2().s[621]++;console.log(`Configuration Stanza updated: ${stanza}`);cov_1ks4ntaci2().s[622]++;callback();});}}});/** - * Represents a specific search job. You can perform different operations - * on this job, such as reading its status, canceling it, and getting results. - * - * @endpoint search/jobs/{search_id} - * @class splunkjs.Service.Job - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[623]++;root.Job=root.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Job - */path:function(){cov_1ks4ntaci2().f[195]++;cov_1ks4ntaci2().s[624]++;return Paths.jobs+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.Job`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} sid The search ID for this search job. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. - * - * @method splunkjs.Service.Job - */init:function(service,sid,namespace){cov_1ks4ntaci2().f[196]++;cov_1ks4ntaci2().s[625]++;this.name=sid;cov_1ks4ntaci2().s[626]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[627]++;this.sid=sid;// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[628]++;this.cancel=utils.bind(this,this.cancel);cov_1ks4ntaci2().s[629]++;this.disablePreview=utils.bind(this,this.disablePreview);cov_1ks4ntaci2().s[630]++;this.enablePreview=utils.bind(this,this.enablePreview);cov_1ks4ntaci2().s[631]++;this.events=utils.bind(this,this.events);cov_1ks4ntaci2().s[632]++;this.finalize=utils.bind(this,this.finalize);cov_1ks4ntaci2().s[633]++;this.pause=utils.bind(this,this.pause);cov_1ks4ntaci2().s[634]++;this.preview=utils.bind(this,this.preview);cov_1ks4ntaci2().s[635]++;this.results=utils.bind(this,this.results);cov_1ks4ntaci2().s[636]++;this.searchlog=utils.bind(this,this.searchlog);cov_1ks4ntaci2().s[637]++;this.setPriority=utils.bind(this,this.setPriority);cov_1ks4ntaci2().s[638]++;this.setTTL=utils.bind(this,this.setTTL);cov_1ks4ntaci2().s[639]++;this.summary=utils.bind(this,this.summary);cov_1ks4ntaci2().s[640]++;this.timeline=utils.bind(this,this.timeline);cov_1ks4ntaci2().s[641]++;this.touch=utils.bind(this,this.touch);cov_1ks4ntaci2().s[642]++;this.unpause=utils.bind(this,this.unpause);},/** - * Cancels a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.cancel(function(err) { - * console.log("CANCELLED"); - * }); - * - * @param {Function} callback A function to call when the search is done: `(err)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */cancel:function(callback){cov_1ks4ntaci2().f[197]++;var req=(cov_1ks4ntaci2().s[643]++,this.post("control",{action:"cancel"},callback));cov_1ks4ntaci2().s[644]++;return req;},/** - * Disables preview generation for a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.disablePreview(function(err, job) { - * console.log("PREVIEW DISABLED"); - * }); - * - * @param {Function} callback A function to call with this search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */disablePreview:function(callback){cov_1ks4ntaci2().f[198]++;cov_1ks4ntaci2().s[645]++;callback=(cov_1ks4ntaci2().b[165][0]++,callback)||(cov_1ks4ntaci2().b[165][1]++,function(){cov_1ks4ntaci2().f[199]++;});var that=(cov_1ks4ntaci2().s[646]++,this);var req=(cov_1ks4ntaci2().s[647]++,this.post("control",{action:"disablepreview"},function(err){cov_1ks4ntaci2().f[200]++;cov_1ks4ntaci2().s[648]++;callback(err,that);}));cov_1ks4ntaci2().s[649]++;return req;},/** - * Enables preview generation for a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.disablePreview(function(err, job) { - * console.log("PREVIEW ENABLED"); - * }); - * - * @param {Function} callback A function to call with this search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */enablePreview:function(callback){cov_1ks4ntaci2().f[201]++;cov_1ks4ntaci2().s[650]++;callback=(cov_1ks4ntaci2().b[166][0]++,callback)||(cov_1ks4ntaci2().b[166][1]++,function(){cov_1ks4ntaci2().f[202]++;});var that=(cov_1ks4ntaci2().s[651]++,this);var req=(cov_1ks4ntaci2().s[652]++,this.post("control",{action:"enablepreview"},function(err){cov_1ks4ntaci2().f[203]++;cov_1ks4ntaci2().s[653]++;callback(err,that);}));cov_1ks4ntaci2().s[654]++;return req;},/** - * Returns the events of a search job with given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.events({count: 10}, function(err, events, job) { - * console.log("Fields: ", events.fields); - * }); - * - * @param {Object} params The parameters for retrieving events. For a list of available parameters, see the GET search/jobs/{search_id}/events endpoint in the REST API documentation. - * @param {Function} callback A function to call when the events are retrieved: `(err, events, job)`. - * - * @endpoint search/jobs/{search_id}/events - * @method splunkjs.Service.Job - */events:function(params,callback){cov_1ks4ntaci2().f[204]++;cov_1ks4ntaci2().s[655]++;callback=(cov_1ks4ntaci2().b[167][0]++,callback)||(cov_1ks4ntaci2().b[167][1]++,function(){cov_1ks4ntaci2().f[205]++;});cov_1ks4ntaci2().s[656]++;params=(cov_1ks4ntaci2().b[168][0]++,params)||(cov_1ks4ntaci2().b[168][1]++,{});cov_1ks4ntaci2().s[657]++;params.output_mode=(cov_1ks4ntaci2().b[169][0]++,params.output_mode)||(cov_1ks4ntaci2().b[169][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[658]++,this);cov_1ks4ntaci2().s[659]++;return this.get("events",params,function(err,response){cov_1ks4ntaci2().f[206]++;cov_1ks4ntaci2().s[660]++;if(err){cov_1ks4ntaci2().b[170][0]++;cov_1ks4ntaci2().s[661]++;callback(err);}else{cov_1ks4ntaci2().b[170][1]++;cov_1ks4ntaci2().s[662]++;callback(null,response.data,that);}});},/** - * Finalizes a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.finalize(function(err, job) { - * console.log("JOB FINALIZED"); - * }); - * - * @param {Function} callback A function to call with the job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */finalize:function(callback){cov_1ks4ntaci2().f[207]++;cov_1ks4ntaci2().s[663]++;callback=(cov_1ks4ntaci2().b[171][0]++,callback)||(cov_1ks4ntaci2().b[171][1]++,function(){cov_1ks4ntaci2().f[208]++;});var that=(cov_1ks4ntaci2().s[664]++,this);var req=(cov_1ks4ntaci2().s[665]++,this.post("control",{action:"finalize"},function(err){cov_1ks4ntaci2().f[209]++;cov_1ks4ntaci2().s[666]++;callback(err,that);}));cov_1ks4ntaci2().s[667]++;return req;},/** - * Returns an iterator over this search job's events or results. - * - * @param {String} type One of {"events", "preview", "results"}. - * @param {Object} params A dictionary of optional parameters: - * - `pagesize` (_integer_): The number of items to return on each request. Defaults to as many as possible. - * @return {Object} An iterator object with a `next(callback)` method, where `callback` is of the form `(err, results, hasMoreResults)`. - * - * @endpoint search/jobs/{search_id}/results - * @method splunkjs.Service.Job - */iterator:function(type,params){cov_1ks4ntaci2().f[210]++;cov_1ks4ntaci2().s[668]++;return new root.PaginatedEndpointIterator(this[type],params);},/** - * Pauses a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.pause(function(err, job) { - * console.log("JOB PAUSED"); - * }); - * - * @param {Function} callback A function to call with the job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */pause:function(callback){cov_1ks4ntaci2().f[211]++;cov_1ks4ntaci2().s[669]++;callback=(cov_1ks4ntaci2().b[172][0]++,callback)||(cov_1ks4ntaci2().b[172][1]++,function(){cov_1ks4ntaci2().f[212]++;});var that=(cov_1ks4ntaci2().s[670]++,this);var req=(cov_1ks4ntaci2().s[671]++,this.post("control",{action:"pause"},function(err){cov_1ks4ntaci2().f[213]++;cov_1ks4ntaci2().s[672]++;callback(err,that);}));cov_1ks4ntaci2().s[673]++;return req;},/* - * Gets the preview results for a search job with given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.preview({count: 10}, function(err, results, job) { - * console.log("Fields: ", results.fields); - * }); - * - * @param {Object} params The parameters for retrieving preview results. For a list of available parameters, see the GET search/jobs/{search_id}/results_preview endpoint in the REST API documentation. - * @param {Function} callback A function to call when the preview results are retrieved : `(err, results, job)`. - * - * @endpoint search/jobs/{search_id}/results_preview - * @method splunkjs.Service.Job - */preview:function(params,callback){cov_1ks4ntaci2().f[214]++;cov_1ks4ntaci2().s[674]++;callback=(cov_1ks4ntaci2().b[173][0]++,callback)||(cov_1ks4ntaci2().b[173][1]++,function(){cov_1ks4ntaci2().f[215]++;});cov_1ks4ntaci2().s[675]++;params=(cov_1ks4ntaci2().b[174][0]++,params)||(cov_1ks4ntaci2().b[174][1]++,{});cov_1ks4ntaci2().s[676]++;params.output_mode=(cov_1ks4ntaci2().b[175][0]++,params.output_mode)||(cov_1ks4ntaci2().b[175][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[677]++,this);cov_1ks4ntaci2().s[678]++;return this.get("results_preview",params,function(err,response){cov_1ks4ntaci2().f[216]++;cov_1ks4ntaci2().s[679]++;if(err){cov_1ks4ntaci2().b[176][0]++;cov_1ks4ntaci2().s[680]++;callback(err);}else{cov_1ks4ntaci2().b[176][1]++;cov_1ks4ntaci2().s[681]++;callback(null,response.data,that);}});},/** - * Gets the results for a search job with given parameters. - * - * The callback can get `undefined` for its `results` parameter if the - * job is not yet done. To avoid this, use the `Job.track()` method to - * wait until the job is complete prior to fetching the results with - * this method. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.results({count: 10}, function(err, results, job) { - * console.log("Fields: ", results.results); - * }); - * - * @param {Object} params The parameters for retrieving search results. For a list of available parameters, see the GET search/jobs/{search_id}/results endpoint in the REST API documentation. - * @param {Function} callback A function to call when the results are retrieved: `(err, results, job)`. - * - * @endpoint search/jobs/{search_id}/results - * @method splunkjs.Service.Job - */results:function(params,callback){cov_1ks4ntaci2().f[217]++;cov_1ks4ntaci2().s[682]++;callback=(cov_1ks4ntaci2().b[177][0]++,callback)||(cov_1ks4ntaci2().b[177][1]++,function(){cov_1ks4ntaci2().f[218]++;});cov_1ks4ntaci2().s[683]++;params=(cov_1ks4ntaci2().b[178][0]++,params)||(cov_1ks4ntaci2().b[178][1]++,{});cov_1ks4ntaci2().s[684]++;params.output_mode=(cov_1ks4ntaci2().b[179][0]++,params.output_mode)||(cov_1ks4ntaci2().b[179][1]++,"json_rows");var that=(cov_1ks4ntaci2().s[685]++,this);cov_1ks4ntaci2().s[686]++;return this.get("results",params,function(err,response){cov_1ks4ntaci2().f[219]++;cov_1ks4ntaci2().s[687]++;if(err){cov_1ks4ntaci2().b[180][0]++;cov_1ks4ntaci2().s[688]++;callback(err);}else{cov_1ks4ntaci2().b[180][1]++;cov_1ks4ntaci2().s[689]++;callback(null,response.data,that);}});},/** - * Gets the search log for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.searchlog(function(err, searchlog, job) { - * console.log(searchlog); - * }); - * - * @param {Function} callback A function to call with the search log and job: `(err, searchlog, job)`. - * - * @endpoint search/jobs/{search_id}/search.log - * @method splunkjs.Service.Job - */searchlog:function(callback){cov_1ks4ntaci2().f[220]++;cov_1ks4ntaci2().s[690]++;callback=(cov_1ks4ntaci2().b[181][0]++,callback)||(cov_1ks4ntaci2().b[181][1]++,function(){cov_1ks4ntaci2().f[221]++;});var that=(cov_1ks4ntaci2().s[691]++,this);cov_1ks4ntaci2().s[692]++;return this.get("search.log",{},function(err,response){cov_1ks4ntaci2().f[222]++;cov_1ks4ntaci2().s[693]++;if(err){cov_1ks4ntaci2().b[182][0]++;cov_1ks4ntaci2().s[694]++;callback(err);}else{cov_1ks4ntaci2().b[182][1]++;cov_1ks4ntaci2().s[695]++;callback(null,response.data,that);}});},/** - * Sets the priority for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.setPriority(6, function(err, job) { - * console.log("JOB PRIORITY SET"); - * }); - * - * @param {Number} value The priority (an integer between 1-10). A higher value means a higher priority. - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */setPriority:function(value,callback){cov_1ks4ntaci2().f[223]++;cov_1ks4ntaci2().s[696]++;callback=(cov_1ks4ntaci2().b[183][0]++,callback)||(cov_1ks4ntaci2().b[183][1]++,function(){cov_1ks4ntaci2().f[224]++;});var that=(cov_1ks4ntaci2().s[697]++,this);var req=(cov_1ks4ntaci2().s[698]++,this.post("control",{action:"setpriority",priority:value},function(err){cov_1ks4ntaci2().f[225]++;cov_1ks4ntaci2().s[699]++;callback(err,that);}));cov_1ks4ntaci2().s[700]++;return req;},/** - * Sets the time to live (TTL) for the search job, which is the time before - * the search job expires after it has been completed and is still available. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.setTTL(1000, function(err, job) { - * console.log("JOB TTL SET"); - * }); - * - * @param {Number} value The time to live, in seconds. - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */setTTL:function(value,callback){cov_1ks4ntaci2().f[226]++;cov_1ks4ntaci2().s[701]++;callback=(cov_1ks4ntaci2().b[184][0]++,callback)||(cov_1ks4ntaci2().b[184][1]++,function(){cov_1ks4ntaci2().f[227]++;});var that=(cov_1ks4ntaci2().s[702]++,this);var req=(cov_1ks4ntaci2().s[703]++,this.post("control",{action:"setttl",ttl:value},function(err){cov_1ks4ntaci2().f[228]++;cov_1ks4ntaci2().s[704]++;callback(err,that);}));cov_1ks4ntaci2().s[705]++;return req;},/** - * Gets the summary for this search job with the given parameters. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.summary({top_count: 5}, function(err, summary, job) { - * console.log("Summary: ", summary); - * }); - * - * @param {Object} params The parameters for retrieving the summary. For a list of available parameters, see the GET search/jobs/{search_id}/summary endpoint in the REST API documentation. - * @param {Function} callback A function to call with the summary and search job: `(err, summary, job)`. - * - * @endpoint search/jobs/{search_id}/summmary - * @method splunkjs.Service.Job - */summary:function(params,callback){cov_1ks4ntaci2().f[229]++;cov_1ks4ntaci2().s[706]++;callback=(cov_1ks4ntaci2().b[185][0]++,callback)||(cov_1ks4ntaci2().b[185][1]++,function(){cov_1ks4ntaci2().f[230]++;});var that=(cov_1ks4ntaci2().s[707]++,this);cov_1ks4ntaci2().s[708]++;return this.get("summary",params,function(err,response){cov_1ks4ntaci2().f[231]++;cov_1ks4ntaci2().s[709]++;if(err){cov_1ks4ntaci2().b[186][0]++;cov_1ks4ntaci2().s[710]++;callback(err);}else{cov_1ks4ntaci2().b[186][1]++;cov_1ks4ntaci2().s[711]++;callback(null,response.data,that);}});},/** - * Gets the timeline for this search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.timeline({time_format: "%c"}, function(err, job, timeline) { - * console.log("Timeline: ", timeline); - * }); - * - * @param {Object} params The parameters for retrieving the timeline. For a list of available parameters, see the GET search/jobs/{search_id}/timeline endpoint in the REST API documentation. - * @param {Function} callback A function to call with the timeline and search job: `(err, timeline, job)`. - * - * @endpoint search/jobs/{search_id}/timeline - * @method splunkjs.Service.Job - */timeline:function(params,callback){cov_1ks4ntaci2().f[232]++;cov_1ks4ntaci2().s[712]++;callback=(cov_1ks4ntaci2().b[187][0]++,callback)||(cov_1ks4ntaci2().b[187][1]++,function(){cov_1ks4ntaci2().f[233]++;});var that=(cov_1ks4ntaci2().s[713]++,this);cov_1ks4ntaci2().s[714]++;return this.get("timeline",params,function(err,response){cov_1ks4ntaci2().f[234]++;cov_1ks4ntaci2().s[715]++;if(err){cov_1ks4ntaci2().b[188][0]++;cov_1ks4ntaci2().s[716]++;callback(err);}else{cov_1ks4ntaci2().b[188][1]++;cov_1ks4ntaci2().s[717]++;callback(null,response.data,that);}});},/** - * Touches a search job, which means extending the expiration time of - * the search to now plus the time to live (TTL). - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.touch(function(err) { - * console.log("JOB TOUCHED"); - * }); - * - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */touch:function(callback){cov_1ks4ntaci2().f[235]++;cov_1ks4ntaci2().s[718]++;callback=(cov_1ks4ntaci2().b[189][0]++,callback)||(cov_1ks4ntaci2().b[189][1]++,function(){cov_1ks4ntaci2().f[236]++;});var that=(cov_1ks4ntaci2().s[719]++,this);var req=(cov_1ks4ntaci2().s[720]++,this.post("control",{action:"touch"},function(err){cov_1ks4ntaci2().f[237]++;cov_1ks4ntaci2().s[721]++;callback(err,that);}));cov_1ks4ntaci2().s[722]++;return req;},/** - * Starts polling the status of this search job, and fires callbacks - * upon each status change. - * - * @param {Object} options A dictionary of optional parameters: - * - `period` (_integer_): The number of milliseconds to wait between each poll. Defaults to 500. - * @param {Object|Function} callbacks A dictionary of optional callbacks: - * - `ready`: A function `(job)` invoked when the job's properties first become available. - * - `progress`: A function `(job)` invoked whenever new job properties are available. - * - `done`: A function `(job)` invoked if the job completes successfully. No further polling is done. - * - `failed`: A function `(job)` invoked if the job fails executing on the server. No further polling is done. - * - `error`: A function `(err)` invoked if an error occurs while polling. No further polling is done. - * Or, if a function `(job)`, equivalent to passing it as a `done` callback. - * - * @method splunkjs.Service.Job - */track:function(options,callbacks){cov_1ks4ntaci2().f[238]++;var period=(cov_1ks4ntaci2().s[723]++,(cov_1ks4ntaci2().b[190][0]++,options.period)||(cov_1ks4ntaci2().b[190][1]++,500));// ms -cov_1ks4ntaci2().s[724]++;if(utils.isFunction(callbacks)){cov_1ks4ntaci2().b[191][0]++;cov_1ks4ntaci2().s[725]++;callbacks={done:callbacks};}else{cov_1ks4ntaci2().b[191][1]++;}var noCallbacksAfterReady=(cov_1ks4ntaci2().s[726]++,(cov_1ks4ntaci2().b[192][0]++,!callbacks.progress)&&(cov_1ks4ntaci2().b[192][1]++,!callbacks.done)&&(cov_1ks4ntaci2().b[192][2]++,!callbacks.failed)&&(cov_1ks4ntaci2().b[192][3]++,!callbacks.error));cov_1ks4ntaci2().s[727]++;callbacks.ready=(cov_1ks4ntaci2().b[193][0]++,callbacks.ready)||(cov_1ks4ntaci2().b[193][1]++,function(){cov_1ks4ntaci2().f[239]++;});cov_1ks4ntaci2().s[728]++;callbacks.progress=(cov_1ks4ntaci2().b[194][0]++,callbacks.progress)||(cov_1ks4ntaci2().b[194][1]++,function(){cov_1ks4ntaci2().f[240]++;});cov_1ks4ntaci2().s[729]++;callbacks.done=(cov_1ks4ntaci2().b[195][0]++,callbacks.done)||(cov_1ks4ntaci2().b[195][1]++,function(){cov_1ks4ntaci2().f[241]++;});cov_1ks4ntaci2().s[730]++;callbacks.failed=(cov_1ks4ntaci2().b[196][0]++,callbacks.failed)||(cov_1ks4ntaci2().b[196][1]++,function(){cov_1ks4ntaci2().f[242]++;});cov_1ks4ntaci2().s[731]++;callbacks.error=(cov_1ks4ntaci2().b[197][0]++,callbacks.error)||(cov_1ks4ntaci2().b[197][1]++,function(){cov_1ks4ntaci2().f[243]++;});// For use by tests only -cov_1ks4ntaci2().s[732]++;callbacks._preready=(cov_1ks4ntaci2().b[198][0]++,callbacks._preready)||(cov_1ks4ntaci2().b[198][1]++,function(){cov_1ks4ntaci2().f[244]++;});cov_1ks4ntaci2().s[733]++;callbacks._stoppedAfterReady=(cov_1ks4ntaci2().b[199][0]++,callbacks._stoppedAfterReady)||(cov_1ks4ntaci2().b[199][1]++,function(){cov_1ks4ntaci2().f[245]++;});var that=(cov_1ks4ntaci2().s[734]++,this);var emittedReady=(cov_1ks4ntaci2().s[735]++,false);var doneLooping=(cov_1ks4ntaci2().s[736]++,false);cov_1ks4ntaci2().s[737]++;Async.whilst(function(){cov_1ks4ntaci2().f[246]++;cov_1ks4ntaci2().s[738]++;return!doneLooping;},function(nextIteration){cov_1ks4ntaci2().f[247]++;cov_1ks4ntaci2().s[739]++;that.fetch(function(err,job){cov_1ks4ntaci2().f[248]++;cov_1ks4ntaci2().s[740]++;if(err){cov_1ks4ntaci2().b[200][0]++;cov_1ks4ntaci2().s[741]++;nextIteration(err);cov_1ks4ntaci2().s[742]++;return;}else{cov_1ks4ntaci2().b[200][1]++;}var dispatchState=(cov_1ks4ntaci2().s[743]++,job.properties().dispatchState);var notReady=(cov_1ks4ntaci2().s[744]++,(cov_1ks4ntaci2().b[201][0]++,dispatchState==="QUEUED")||(cov_1ks4ntaci2().b[201][1]++,dispatchState==="PARSING"));cov_1ks4ntaci2().s[745]++;if(notReady){cov_1ks4ntaci2().b[202][0]++;cov_1ks4ntaci2().s[746]++;callbacks._preready(job);}else{cov_1ks4ntaci2().b[202][1]++;cov_1ks4ntaci2().s[747]++;if(!emittedReady){cov_1ks4ntaci2().b[203][0]++;cov_1ks4ntaci2().s[748]++;callbacks.ready(job);cov_1ks4ntaci2().s[749]++;emittedReady=true;// Optimization: Don't keep polling the job if the -// caller only cares about the `ready` event. -cov_1ks4ntaci2().s[750]++;if(noCallbacksAfterReady){cov_1ks4ntaci2().b[204][0]++;cov_1ks4ntaci2().s[751]++;callbacks._stoppedAfterReady(job);cov_1ks4ntaci2().s[752]++;doneLooping=true;cov_1ks4ntaci2().s[753]++;nextIteration();cov_1ks4ntaci2().s[754]++;return;}else{cov_1ks4ntaci2().b[204][1]++;}}else{cov_1ks4ntaci2().b[203][1]++;}cov_1ks4ntaci2().s[755]++;callbacks.progress(job);var props=(cov_1ks4ntaci2().s[756]++,job.properties());cov_1ks4ntaci2().s[757]++;if((cov_1ks4ntaci2().b[206][0]++,dispatchState==="DONE")&&(cov_1ks4ntaci2().b[206][1]++,props.isDone)){cov_1ks4ntaci2().b[205][0]++;cov_1ks4ntaci2().s[758]++;callbacks.done(job);cov_1ks4ntaci2().s[759]++;doneLooping=true;cov_1ks4ntaci2().s[760]++;nextIteration();cov_1ks4ntaci2().s[761]++;return;}else{cov_1ks4ntaci2().b[205][1]++;cov_1ks4ntaci2().s[762]++;if((cov_1ks4ntaci2().b[208][0]++,dispatchState==="FAILED")&&(cov_1ks4ntaci2().b[208][1]++,props.isFailed)){cov_1ks4ntaci2().b[207][0]++;cov_1ks4ntaci2().s[763]++;callbacks.failed(job);cov_1ks4ntaci2().s[764]++;doneLooping=true;cov_1ks4ntaci2().s[765]++;nextIteration();cov_1ks4ntaci2().s[766]++;return;}else{cov_1ks4ntaci2().b[207][1]++;}}}cov_1ks4ntaci2().s[767]++;Async.sleep(period,nextIteration);});},function(err){cov_1ks4ntaci2().f[249]++;cov_1ks4ntaci2().s[768]++;if(err){cov_1ks4ntaci2().b[209][0]++;cov_1ks4ntaci2().s[769]++;callbacks.error(err);}else{cov_1ks4ntaci2().b[209][1]++;}});},/** - * Resumes a search job. - * - * @example - * - * var job = service.jobs().item("mysid"); - * job.unpause(function(err) { - * console.log("JOB UNPAUSED"); - * }); - * - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @endpoint search/jobs/{search_id}/control - * @method splunkjs.Service.Job - */unpause:function(callback){cov_1ks4ntaci2().f[250]++;cov_1ks4ntaci2().s[770]++;callback=(cov_1ks4ntaci2().b[210][0]++,callback)||(cov_1ks4ntaci2().b[210][1]++,function(){cov_1ks4ntaci2().f[251]++;});var that=(cov_1ks4ntaci2().s[771]++,this);var req=(cov_1ks4ntaci2().s[772]++,this.post("control",{action:"unpause"},function(err){cov_1ks4ntaci2().f[252]++;cov_1ks4ntaci2().s[773]++;callback(err,that);}));cov_1ks4ntaci2().s[774]++;return req;}});/** - * Represents a collection of search jobs. You can create and list search - * jobs using this collection container, or get a specific search job. - * - * @endpoint search/jobs - * @class splunkjs.Service.Jobs - * @extends splunkjs.Service.Collection - */cov_1ks4ntaci2().s[775]++;root.Jobs=root.Collection.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.Jobs - */path:function(){cov_1ks4ntaci2().f[253]++;cov_1ks4ntaci2().s[776]++;return Paths.jobs;},/** - * Creates a local instance of a job. - * - * @param {Object} props The properties for this new job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @return {splunkjs.Service.Job} A new `splunkjs.Service.Job` instance. - * - * @method splunkjs.Service.Jobs - */instantiateEntity:function(props){cov_1ks4ntaci2().f[254]++;var sid=(cov_1ks4ntaci2().s[777]++,props.content.sid);var entityNamespace=(cov_1ks4ntaci2().s[778]++,utils.namespaceFromProperties(props));cov_1ks4ntaci2().s[779]++;return new root.Job(this.service,sid,entityNamespace);},/** - * Constructor for `splunkjs.Service.Jobs`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {Object} namespace Namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @return {splunkjs.Service.Jobs} A new `splunkjs.Service.Jobs` instance. - * - * @method splunkjs.Service.Jobs - */init:function(service,namespace){cov_1ks4ntaci2().f[255]++;cov_1ks4ntaci2().s[780]++;this._super(service,this.path(),namespace);// We perform the bindings so that every function works -// properly when it is passed as a callback. -cov_1ks4ntaci2().s[781]++;this.create=utils.bind(this,this.create);},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * @param {Function} callback A function to call with the created job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */create:function(query,params,callback){cov_1ks4ntaci2().f[256]++;cov_1ks4ntaci2().s[782]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[212][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[212][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[212][2]++,!callback)){cov_1ks4ntaci2().b[211][0]++;cov_1ks4ntaci2().s[783]++;callback=params;cov_1ks4ntaci2().s[784]++;params=query;cov_1ks4ntaci2().s[785]++;query=params.search;}else{cov_1ks4ntaci2().b[211][1]++;}cov_1ks4ntaci2().s[786]++;callback=(cov_1ks4ntaci2().b[213][0]++,callback)||(cov_1ks4ntaci2().b[213][1]++,function(){cov_1ks4ntaci2().f[257]++;});cov_1ks4ntaci2().s[787]++;params=(cov_1ks4ntaci2().b[214][0]++,params)||(cov_1ks4ntaci2().b[214][1]++,{});cov_1ks4ntaci2().s[788]++;params.search=query;cov_1ks4ntaci2().s[789]++;if(((cov_1ks4ntaci2().b[216][0]++,params.exec_mode)||(cov_1ks4ntaci2().b[216][1]++,"")).toLowerCase()==="oneshot"){cov_1ks4ntaci2().b[215][0]++;cov_1ks4ntaci2().s[790]++;throw new Error("Please use splunkjs.Service.Jobs.oneshotSearch for exec_mode=oneshot");}else{cov_1ks4ntaci2().b[215][1]++;}cov_1ks4ntaci2().s[791]++;if(!params.search){cov_1ks4ntaci2().b[217][0]++;cov_1ks4ntaci2().s[792]++;callback("Must provide a query to create a search job");cov_1ks4ntaci2().s[793]++;return;}else{cov_1ks4ntaci2().b[217][1]++;}var that=(cov_1ks4ntaci2().s[794]++,this);cov_1ks4ntaci2().s[795]++;return this.post("",params,function(err,response){cov_1ks4ntaci2().f[258]++;cov_1ks4ntaci2().s[796]++;if(err){cov_1ks4ntaci2().b[218][0]++;cov_1ks4ntaci2().s[797]++;callback(err);}else{cov_1ks4ntaci2().b[218][1]++;var job=(cov_1ks4ntaci2().s[798]++,new root.Job(that.service,response.data.sid,that.namespace));cov_1ks4ntaci2().s[799]++;callback(null,job);}});},/** - * Creates a search job with a given search query and optional parameters, including `exec_mode` to specify the type of search: - * - * - Use `exec_mode=normal` to return a search job ID immediately (default). - * Poll for completion to find out when you can retrieve search results. - * - * - Use `exec_mode=blocking` to return the search job ID when the search has finished. - * - * To run a oneshot search, which does not create a job but rather returns the search results, use `Service.Jobs.oneshotSearch`. - * - * @example - * - * var jobs = service.jobs(); - * jobs.search("search ERROR", {id: "myjob_123"}, function(err, newJob) { - * console.log("CREATED": newJob.sid); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search job. For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call with the new search job: `(err, createdJob)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */search:function(query,params,callback){cov_1ks4ntaci2().f[259]++;cov_1ks4ntaci2().s[800]++;return this.create(query,params,callback);},/** - * Creates a oneshot search from a given search query and parameters. - * - * @example - * - * var jobs = service.jobs(); - * jobs.oneshotSearch("search ERROR", {id: "myjob_123"}, function(err, results) { - * console.log("RESULT FIELDS": results.fields); - * }); - * - * @param {String} query The search query. - * @param {Object} params A dictionary of properties for the search: - * - `output_mode` (_string_): Specifies the output format of the results (XML, JSON, or CSV). - * - `earliest_time` (_string_): Specifies the earliest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `latest_time` (_string_): Specifies the latest time in the time range to search. The time string can be a UTC time (with fractional seconds), a relative time specifier (to now), or a formatted time string. - * - `rf` (_string_): Specifies one or more fields to add to the search. - * @param {Function} callback A function to call with the results of the search: `(err, results)`. - * - * @endpoint search/jobs - * @method splunkjs.Service.Jobs - */oneshotSearch:function(query,params,callback){cov_1ks4ntaci2().f[260]++;cov_1ks4ntaci2().s[801]++;// If someone called us with the default style of (params, callback), -// lets make it work -if((cov_1ks4ntaci2().b[220][0]++,utils.isObject(query))&&(cov_1ks4ntaci2().b[220][1]++,utils.isFunction(params))&&(cov_1ks4ntaci2().b[220][2]++,!callback)){cov_1ks4ntaci2().b[219][0]++;cov_1ks4ntaci2().s[802]++;callback=params;cov_1ks4ntaci2().s[803]++;params=query;cov_1ks4ntaci2().s[804]++;query=params.search;}else{cov_1ks4ntaci2().b[219][1]++;}cov_1ks4ntaci2().s[805]++;callback=(cov_1ks4ntaci2().b[221][0]++,callback)||(cov_1ks4ntaci2().b[221][1]++,function(){cov_1ks4ntaci2().f[261]++;});cov_1ks4ntaci2().s[806]++;params=(cov_1ks4ntaci2().b[222][0]++,params)||(cov_1ks4ntaci2().b[222][1]++,{});cov_1ks4ntaci2().s[807]++;params.search=query;cov_1ks4ntaci2().s[808]++;params.exec_mode="oneshot";cov_1ks4ntaci2().s[809]++;if(!params.search){cov_1ks4ntaci2().b[223][0]++;cov_1ks4ntaci2().s[810]++;callback("Must provide a query to create a search job");}else{cov_1ks4ntaci2().b[223][1]++;}var outputMode=(cov_1ks4ntaci2().s[811]++,(cov_1ks4ntaci2().b[224][0]++,params.output_mode)||(cov_1ks4ntaci2().b[224][1]++,"json_rows"));var path=(cov_1ks4ntaci2().s[812]++,this.qualifiedPath);var method=(cov_1ks4ntaci2().s[813]++,"POST");var headers=(cov_1ks4ntaci2().s[814]++,{});var post=(cov_1ks4ntaci2().s[815]++,params);var get=(cov_1ks4ntaci2().s[816]++,{output_mode:outputMode});var body=(cov_1ks4ntaci2().s[817]++,null);var req=(cov_1ks4ntaci2().s[818]++,this.service.request(path,method,get,post,body,headers,function(err,response){cov_1ks4ntaci2().f[262]++;cov_1ks4ntaci2().s[819]++;if(err){cov_1ks4ntaci2().b[225][0]++;cov_1ks4ntaci2().s[820]++;callback(err);}else{cov_1ks4ntaci2().b[225][1]++;cov_1ks4ntaci2().s[821]++;callback(null,response.data);}}));cov_1ks4ntaci2().s[822]++;return req;}});/** - * Represents a field of a data model object. - * This is a helper class for `DataModelCalculation` - * and `DataModelObject`. - * - * Has these properties: - * - `fieldName` (_string_): The name of this field. - * - `displayName` (_string_): A human readable name for this field. - * - `type` (_string_): The type of this field. - * - `multivalued` (_boolean_): Whether this field is multivalued. - * - `required` (_boolean_): Whether this field is required. - * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. - * - `editable` (_boolean_): Whether this field can be edited. - * - `comment` (_string_): A comment for this field, or `null` if there isn't one. - * - `fieldSearch` (_string_): A search query fragment for this field. - * - `lineage` (_array_): An array of strings of the lineage of the data model - * on which this field is defined. - * - `owner` (_string_): The name of the data model object on which this field is defined. - * - * Possible types for a data model field: - * - `string` - * - `boolean` - * - `number` - * - `timestamp` - * - `objectCount` - * - `childCount` - * - `ipv4` - * - * @class splunkjs.Service.DataModelField - */cov_1ks4ntaci2().s[823]++;root.DataModelField=Class.extend({_types:["string","number","timestamp","objectCount","childCount","ipv4","boolean"],/** - * Constructor for a data model field. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `fieldName` (_string_): The name of this field. - * - `displayName` (_string_): A human readable name for this field. - * - `type` (_string_): The type of this field, see valid types in class docs. - * - `multivalue` (_boolean_): Whether this field is multivalued. - * - `required` (_boolean_): Whether this field is required on events in the object - * - `hidden` (_boolean_): Whether this field should be displayed in a data model UI. - * - `editable` (_boolean_): Whether this field can be edited. - * - `comment` (_string_): A comment for this field, or `null` if there isn't one. - * - `fieldSearch` (_string_): A search query fragment for this field. - * - `lineage` (_string_): The lineage of the data model object on which this field - * is defined, items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - * @method splunkjs.Service.DataModelField - */init:function(props){cov_1ks4ntaci2().f[263]++;cov_1ks4ntaci2().s[824]++;props=(cov_1ks4ntaci2().b[226][0]++,props)||(cov_1ks4ntaci2().b[226][1]++,{});cov_1ks4ntaci2().s[825]++;props.owner=(cov_1ks4ntaci2().b[227][0]++,props.owner)||(cov_1ks4ntaci2().b[227][1]++,"");cov_1ks4ntaci2().s[826]++;this.name=props.fieldName;cov_1ks4ntaci2().s[827]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[828]++;this.type=props.type;cov_1ks4ntaci2().s[829]++;this.multivalued=props.multivalue;cov_1ks4ntaci2().s[830]++;this.required=props.required;cov_1ks4ntaci2().s[831]++;this.hidden=props.hidden;cov_1ks4ntaci2().s[832]++;this.editable=props.editable;cov_1ks4ntaci2().s[833]++;this.comment=(cov_1ks4ntaci2().b[228][0]++,props.comment)||(cov_1ks4ntaci2().b[228][1]++,null);cov_1ks4ntaci2().s[834]++;this.fieldSearch=props.fieldSearch;cov_1ks4ntaci2().s[835]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[836]++;this.owner=this.lineage[this.lineage.length-1];},/** - * Is this data model field of type string? - * - * @return {Boolean} True if this data model field is of type string. - * - * @method splunkjs.Service.DataModelField - */isString:function(){cov_1ks4ntaci2().f[264]++;cov_1ks4ntaci2().s[837]++;return"string"===this.type;},/** - * Is this data model field of type number? - * - * @return {Boolean} True if this data model field is of type number. - * - * @method splunkjs.Service.DataModelField - */isNumber:function(){cov_1ks4ntaci2().f[265]++;cov_1ks4ntaci2().s[838]++;return"number"===this.type;},/** - * Is this data model field of type timestamp? - * - * @return {Boolean} True if this data model field is of type timestamp. - * - * @method splunkjs.Service.DataModelField - */isTimestamp:function(){cov_1ks4ntaci2().f[266]++;cov_1ks4ntaci2().s[839]++;return"timestamp"===this.type;},/** - * Is this data model field of type object count? - * - * @return {Boolean} True if this data model field is of type object count. - * - * @method splunkjs.Service.DataModelField - */isObjectcount:function(){cov_1ks4ntaci2().f[267]++;cov_1ks4ntaci2().s[840]++;return"objectCount"===this.type;},/** - * Is this data model field of type child count? - * - * @return {Boolean} True if this data model field is of type child count. - * - * @method splunkjs.Service.DataModelField - */isChildcount:function(){cov_1ks4ntaci2().f[268]++;cov_1ks4ntaci2().s[841]++;return"childCount"===this.type;},/** - * Is this data model field of type ipv4? - * - * @return {Boolean} True if this data model field is of type ipv4. - * - * @method splunkjs.Service.DataModelField - */isIPv4:function(){cov_1ks4ntaci2().f[269]++;cov_1ks4ntaci2().s[842]++;return"ipv4"===this.type;},/** - * Is this data model field of type boolean? - * - * @return {Boolean} True if this data model field is of type boolean. - * - * @method splunkjs.Service.DataModelField - */isBoolean:function(){cov_1ks4ntaci2().f[270]++;cov_1ks4ntaci2().s[843]++;return"boolean"===this.type;}});/** - * Represents a constraint on a `DataModelObject` or a `DataModelField`. - * - * Has these properties: - * - `query` (_string_): The search query defining this data model constraint. - * - `lineage` (_array_): The lineage of this data model constraint. - * - `owner` (_string_): The name of the data model object that owns - * this data model constraint. - * - * @class splunkjs.Service.DataModelConstraint - */cov_1ks4ntaci2().s[844]++;root.DataModelConstraint=Class.extend({/** - * Constructor for a data model constraint. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `search` (_string_): The Splunk search query this constraint specifies. - * - `owner` (_string_): The lineage of the data model object that owns this - * constraint, items are delimited by a dot. This is converted into - * an array of strings upon construction. - * - * @method splunkjs.Service.DataModelConstraint - */init:function(props){cov_1ks4ntaci2().f[271]++;cov_1ks4ntaci2().s[845]++;props=(cov_1ks4ntaci2().b[229][0]++,props)||(cov_1ks4ntaci2().b[229][1]++,{});cov_1ks4ntaci2().s[846]++;props.owner=(cov_1ks4ntaci2().b[230][0]++,props.owner)||(cov_1ks4ntaci2().b[230][1]++,"");cov_1ks4ntaci2().s[847]++;this.query=props.search;cov_1ks4ntaci2().s[848]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[849]++;this.owner=this.lineage[this.lineage.length-1];}});/** - * Used for specifying a calculation on a `DataModelObject`. - * - * Has these properties: - * - `id` (_string_): The ID for this data model calculation. - * - `type` (_string_): The type of this data model calculation. - * - `comment` (_string_|_null_): The comment for this data model calculation, or `null`. - * - `editable` (_boolean_): True if this calculation can be edited, false otherwise. - * - `lineage` (_array_): The lineage of the data model object on which this calculation - * is defined in an array of strings. - * - `owner` (_string_): The data model that this calculation belongs to. - * - `outputFields` (_array_): The fields output by this calculation. - * - * The Rex and Eval types have an additional property: - * - `expression` (_string_): The expression to use for this calculation. - * - * The Rex and GeoIP types have an additional property: - * - `inputField` (_string_): The field to use for calculation. - * - * The Lookup type has additional properties: - * - `lookupName` (_string_): The name of the lookup to perform. - * - `inputFieldMappings` (_object_): The mappings from fields in the events to fields in the lookup. - * - * Valid types of calculations are: - * - `Lookup` - * - `Eval` - * - `GeoIP` - * - `Rex` - * - * @class splunkjs.Service.DataModelCalculation - */cov_1ks4ntaci2().s[850]++;root.DataModelCalculation=Class.extend({_types:["Lookup","Eval","GeoIP","Rex"],/** - * Constructor for a data model calculation. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `calculationID` (_string_): The ID of this calculation. - * - `calculationType` (_string_): The type of this calculation, see class docs for valid types. - * - `editable` (_boolean_): Whether this calculation can be edited. - * - `comment` (_string_): A comment for this calculation, or `null` if there isn't one. - * - `owner` (_string_): The lineage of the data model object on which this calculation - * is defined, items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - `outputFields` (_array_): An array of the fields this calculation generates. - * - `expression` (_string_): The expression to use for this calculation; exclusive to `Eval` and `Rex` calculations (optional) - * - `inputField` (_string_): The field to use for calculation; exclusive to `GeoIP` and `Rex` calculations (optional) - * - `lookupName` (_string_): The name of the lookup to perform; exclusive to `Lookup` calculations (optional) - * - `inputFieldMappings` (_array_): One element array containing an object with the mappings from fields in the events to fields - * in the lookup; exclusive to `Lookup` calculations (optional) - * - * @method splunkjs.Service.DataModelCalculation - */init:function(props){cov_1ks4ntaci2().f[272]++;cov_1ks4ntaci2().s[851]++;props=(cov_1ks4ntaci2().b[231][0]++,props)||(cov_1ks4ntaci2().b[231][1]++,{});cov_1ks4ntaci2().s[852]++;props.owner=(cov_1ks4ntaci2().b[232][0]++,props.owner)||(cov_1ks4ntaci2().b[232][1]++,"");cov_1ks4ntaci2().s[853]++;this.id=props.calculationID;cov_1ks4ntaci2().s[854]++;this.type=props.calculationType;cov_1ks4ntaci2().s[855]++;this.comment=(cov_1ks4ntaci2().b[233][0]++,props.comment)||(cov_1ks4ntaci2().b[233][1]++,null);cov_1ks4ntaci2().s[856]++;this.editable=props.editable;cov_1ks4ntaci2().s[857]++;this.lineage=props.owner.split(".");cov_1ks4ntaci2().s[858]++;this.owner=this.lineage[this.lineage.length-1];cov_1ks4ntaci2().s[859]++;this.outputFields=[];cov_1ks4ntaci2().s[860]++;for(var i=(cov_1ks4ntaci2().s[861]++,0);iSearch job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call when done creating the search job: `(err, job)`. - * @method splunkjs.Service.Pivot - */run:function(args,callback){cov_1ks4ntaci2().f[280]++;cov_1ks4ntaci2().s[884]++;if(utils.isUndefined(callback)){cov_1ks4ntaci2().b[240][0]++;cov_1ks4ntaci2().s[885]++;callback=args;cov_1ks4ntaci2().s[886]++;args={};}else{cov_1ks4ntaci2().b[240][1]++;}cov_1ks4ntaci2().s[887]++;if((cov_1ks4ntaci2().b[242][0]++,!args)||(cov_1ks4ntaci2().b[242][1]++,Object.keys(args).length===0)){cov_1ks4ntaci2().b[241][0]++;cov_1ks4ntaci2().s[888]++;args={};}else{cov_1ks4ntaci2().b[241][1]++;}// If tstats is undefined, use pivotSearch (try to run an accelerated search if possible) -cov_1ks4ntaci2().s[889]++;this.service.search((cov_1ks4ntaci2().b[243][0]++,this.tstatsSearch)||(cov_1ks4ntaci2().b[243][1]++,this.pivotSearch),args,callback);}});/** - * PivotSpecification represents a pivot to be done on a particular data model object. - * The user creates a PivotSpecification on some data model object, adds filters, row splits, - * column splits, and cell values, then calls the pivot method to query splunkd and - * get a set of SPL queries corresponding to this specification. - * - * Call the `pivot` method to query Splunk for SPL queries corresponding to this pivot. - * - * This class supports a fluent API, each function except `init`, `toJsonObject` & `pivot` - * return the modified `splunkjs.Service.PivotSpecification` instance. - * - * @example - * service.dataModels().fetch(function(err, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpecification = searches.createPivotSpecification(); - * pivotSpecification - * .addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .pivot(function(err, pivot) { - * console.log("Got a Pivot object from the Splunk server!"); - * }); - * }); - * - * Has these properties: - * - `dataModelObject` (_splunkjs.Service.DataModelObject_): The `DataModelObject` from which - * this `PivotSpecification` was created. - * - `columns` (_array_): The column splits on this `PivotSpecification`. - * - `rows` (_array_): The row splits on this `PivotSpecification`. - * - `filters` (_array_): The filters on this `PivotSpecification`. - * - `cells` (_array_): The cell aggregations for this`PivotSpecification`. - * - `accelerationNamespace` (_string_|_null_): The name of the `DataModel` that owns the `DataModelObject` - * on which this `PivotSpecification` was created if the `DataModel` is accelerated. Alternatively, - * you can set this property manually to the sid of an acceleration job in the format `sid=`. - * - * Valid comparison types are: - * - `boolean` - * - `string` - * - `number` - * - `ipv4` - * - * Valid boolean comparisons are: - * - `=` - * - `is` - * - `isNull` - * - `isNotNull` - * - * Valid string comparisons are: - * - `=` - * - `is` - * - `isNull` - * - `isNotNull` - * - `contains` - * - `doesNotContain` - * - `startsWith` - * - `endsWith` - * - `regex` - * - * Valid number comparisons are: - * - `=` - * - `!=` - * - `<` - * - `>` - * - `<=` - * - `>=` - * - `is` - * - `isNull` - * - `isNotNull` - * - * Valid ipv4 comparisons are: - * - `is` - * - `isNull` - * - `isNotNull` - * - `contains` - * - `doesNotContain` - * - `startsWith` - * - * Valid binning values are: - * - `auto` - * - `year` - * - `month` - * - `day` - * - `hour` - * - `minute` - * - `second` - * - * Valid sort directions are: - * - `ASCENDING` - * - `DECENDING` - * - `DEFAULT` - * - * Valid stats functions are: - * - `list` - * - `values` - * - `first` - * - `last` - * - `count` - * - `dc` - * - `sum` - * - `average` - * - `max` - * - `min` - * - `stdev` - * - `duration` - * - `earliest` - * - `latest` - * - * @class splunkjs.Service.PivotSpecification - */cov_1ks4ntaci2().s[890]++;root.PivotSpecification=Class.extend({_comparisons:{boolean:["=","is","isNull","isNotNull"],string:["=","is","isNull","isNotNull","contains","doesNotContain","startsWith","endsWith","regex"],number:["=","!=","<",">","<=",">=","is","isNull","isNotNull"],ipv4:["is","isNull","isNotNull","contains","doesNotContain","startsWith"]},_binning:["auto","year","month","day","hour","minute","second"],_sortDirection:["ASCENDING","DESCENDING","DEFAULT"],_statsFunctions:["list","values","first","last","count","dc","sum","average","max","min","stdev","duration","earliest","latest"],/** - * Constructor for a pivot specification. - * - * @constructor - * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. - * - * @method splunkjs.Service.PivotSpecification - */init:function(dataModelObject){cov_1ks4ntaci2().f[281]++;cov_1ks4ntaci2().s[891]++;this.dataModelObject=dataModelObject;cov_1ks4ntaci2().s[892]++;this.columns=[];cov_1ks4ntaci2().s[893]++;this.rows=[];cov_1ks4ntaci2().s[894]++;this.filters=[];cov_1ks4ntaci2().s[895]++;this.cells=[];cov_1ks4ntaci2().s[896]++;this.accelerationNamespace=dataModelObject.dataModel.isAccelerated()?(cov_1ks4ntaci2().b[244][0]++,dataModelObject.dataModel.name):(cov_1ks4ntaci2().b[244][1]++,null);cov_1ks4ntaci2().s[897]++;this.run=utils.bind(this,this.run);cov_1ks4ntaci2().s[898]++;this.pivot=utils.bind(this,this.pivot);},/** - * Set the acceleration cache for this pivot specification to a job, - * usually generated by createLocalAccelerationJob on a DataModelObject - * instance, as the acceleration cache for this pivot specification. - * - * @param {String|splunkjs.Service.Job} sid The sid of an acceleration job, - * or, a `splunkjs.Service.Job` instance. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */setAccelerationJob:function(sid){cov_1ks4ntaci2().f[282]++;cov_1ks4ntaci2().s[899]++;// If a search object is passed in, get its sid -if((cov_1ks4ntaci2().b[246][0]++,sid)&&(cov_1ks4ntaci2().b[246][1]++,sid instanceof Service.Job)){cov_1ks4ntaci2().b[245][0]++;cov_1ks4ntaci2().s[900]++;sid=sid.sid;}else{cov_1ks4ntaci2().b[245][1]++;}cov_1ks4ntaci2().s[901]++;if(!sid){cov_1ks4ntaci2().b[247][0]++;cov_1ks4ntaci2().s[902]++;throw new Error("Sid to use for acceleration must not be null.");}else{cov_1ks4ntaci2().b[247][1]++;}cov_1ks4ntaci2().s[903]++;this.accelerationNamespace="sid="+sid;cov_1ks4ntaci2().s[904]++;return this;},/** - * Add a filter on a boolean valued field. The filter will be a constraint of the form - * `field `comparison` compareTo`, for example: `is_remote = false`. - * - * @param {String} fieldName The name of field to filter on - * @param {String} comparisonType The type of comparison, see class docs for valid types. - * @param {String} comparisonOp The comparison, see class docs for valid comparisons, based on type. - * @param {String} compareTo The value to compare the field to. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addFilter:function(fieldName,comparisonType,comparisonOp,compareTo){cov_1ks4ntaci2().f[283]++;cov_1ks4ntaci2().s[905]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[248][0]++;cov_1ks4ntaci2().s[906]++;throw new Error("Cannot add filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[248][1]++;}cov_1ks4ntaci2().s[907]++;if(comparisonType!==this.dataModelObject.fieldByName(fieldName).type){cov_1ks4ntaci2().b[249][0]++;cov_1ks4ntaci2().s[908]++;throw new Error("Cannot add "+comparisonType+" filter on "+fieldName+" because it is of type "+this.dataModelObject.fieldByName(fieldName).type);}else{cov_1ks4ntaci2().b[249][1]++;}cov_1ks4ntaci2().s[909]++;if(!utils.contains(this._comparisons[comparisonType],comparisonOp)){cov_1ks4ntaci2().b[250][0]++;cov_1ks4ntaci2().s[910]++;throw new Error("Cannot add "+comparisonType+" filter because "+comparisonOp+" is not a valid comparison operator");}else{cov_1ks4ntaci2().b[250][1]++;}var ret=(cov_1ks4ntaci2().s[911]++,{fieldName:fieldName,owner:this.dataModelObject.fieldByName(fieldName).lineage.join("."),type:comparisonType});// These fields are type dependent -cov_1ks4ntaci2().s[912]++;if(utils.contains(["boolean","string","ipv4","number"],ret.type)){cov_1ks4ntaci2().b[251][0]++;cov_1ks4ntaci2().s[913]++;ret.rule={comparator:comparisonOp,compareTo:compareTo};}else{cov_1ks4ntaci2().b[251][1]++;}cov_1ks4ntaci2().s[914]++;this.filters.push(ret);cov_1ks4ntaci2().s[915]++;return this;},/** - * Add a limit on the events shown in a pivot by sorting them according to some field, then taking - * the specified number from the beginning or end of the list. - * - * @param {String} fieldName The name of field to filter on. - * @param {String} sortAttribute The name of the field to use for sorting. - * @param {String} sortDirection The direction to sort events, see class docs for valid types. - * @param {String} limit The number of values from the sorted list to allow through this filter. - * @param {String} statsFunction The stats function to use for aggregation before sorting, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addLimitFilter:function(fieldName,sortAttribute,sortDirection,limit,statsFunction){cov_1ks4ntaci2().f[284]++;cov_1ks4ntaci2().s[916]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[252][0]++;cov_1ks4ntaci2().s[917]++;throw new Error("Cannot add limit filter on a nonexistent field.");}else{cov_1ks4ntaci2().b[252][1]++;}var f=(cov_1ks4ntaci2().s[918]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[919]++;if(!utils.contains(["string","number","objectCount"],f.type)){cov_1ks4ntaci2().b[253][0]++;cov_1ks4ntaci2().s[920]++;throw new Error("Cannot add limit filter on "+fieldName+" because it is of type "+f.type);}else{cov_1ks4ntaci2().b[253][1]++;}cov_1ks4ntaci2().s[921]++;if((cov_1ks4ntaci2().b[255][0]++,"string"===f.type)&&(cov_1ks4ntaci2().b[255][1]++,!utils.contains(["count","dc"],statsFunction))){cov_1ks4ntaci2().b[254][0]++;cov_1ks4ntaci2().s[922]++;throw new Error("Stats function for fields of type string must be COUNT or DISTINCT_COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[254][1]++;}cov_1ks4ntaci2().s[923]++;if((cov_1ks4ntaci2().b[257][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[257][1]++,!utils.contains(["count","dc","average","sum"],statsFunction))){cov_1ks4ntaci2().b[256][0]++;cov_1ks4ntaci2().s[924]++;throw new Error("Stats function for fields of type number must be one of COUNT, DISTINCT_COUNT, SUM, or AVERAGE; found "+statsFunction);}else{cov_1ks4ntaci2().b[256][1]++;}cov_1ks4ntaci2().s[925]++;if((cov_1ks4ntaci2().b[259][0]++,"objectCount"===f.type)&&(cov_1ks4ntaci2().b[259][1]++,!utils.contains(["count"],statsFunction))){cov_1ks4ntaci2().b[258][0]++;cov_1ks4ntaci2().s[926]++;throw new Error("Stats function for fields of type object count must be COUNT; found "+statsFunction);}else{cov_1ks4ntaci2().b[258][1]++;}var filter=(cov_1ks4ntaci2().s[927]++,{fieldName:fieldName,owner:f.lineage.join("."),type:f.type,attributeName:sortAttribute,attributeOwner:this.dataModelObject.fieldByName(sortAttribute).lineage.join("."),sortDirection:sortDirection,limitAmount:limit,statsFn:statsFunction});// Assumed "highest" is preferred for when sortDirection is "DEFAULT" -cov_1ks4ntaci2().s[928]++;filter.limitType="ASCENDING"===sortDirection?(cov_1ks4ntaci2().b[260][0]++,"lowest"):(cov_1ks4ntaci2().b[260][1]++,"highest");cov_1ks4ntaci2().s[929]++;this.filters.push(filter);cov_1ks4ntaci2().s[930]++;return this;},/** - * Add a row split on a numeric or string valued field, splitting on each distinct value of the field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRowSplit:function(fieldName,label){cov_1ks4ntaci2().f[285]++;cov_1ks4ntaci2().s[931]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[261][0]++;cov_1ks4ntaci2().s[932]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[261][1]++;}var f=(cov_1ks4ntaci2().s[933]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[934]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[262][0]++;cov_1ks4ntaci2().s[935]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[262][1]++;}var row=(cov_1ks4ntaci2().s[936]++,{fieldName:fieldName,owner:f.owner,type:f.type,label:label});cov_1ks4ntaci2().s[937]++;if("number"===f.type){cov_1ks4ntaci2().b[263][0]++;cov_1ks4ntaci2().s[938]++;row.display="all";}else{cov_1ks4ntaci2().b[263][1]++;}cov_1ks4ntaci2().s[939]++;this.rows.push(row);cov_1ks4ntaci2().s[940]++;return this;},/** - * Add a row split on a numeric field, splitting into numeric ranges. - * - * This split generates bins with edges equivalent to the - * classic loop 'for i in to by ' but with a maximum - * number of bins . This dispatches to the stats and xyseries search commands. - * See their documentation for more details. - * - * @param {String} fieldName The field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. - * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. - * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. - * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRangeRowSplit:function(field,label,ranges){cov_1ks4ntaci2().f[286]++;cov_1ks4ntaci2().s[941]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[264][0]++;cov_1ks4ntaci2().s[942]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[264][1]++;}var f=(cov_1ks4ntaci2().s[943]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[944]++;if("number"!==f.type){cov_1ks4ntaci2().b[265][0]++;cov_1ks4ntaci2().s[945]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[265][1]++;}var updateRanges=(cov_1ks4ntaci2().s[946]++,{});cov_1ks4ntaci2().s[947]++;if((cov_1ks4ntaci2().b[267][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[267][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[266][0]++;cov_1ks4ntaci2().s[948]++;updateRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[266][1]++;}cov_1ks4ntaci2().s[949]++;if((cov_1ks4ntaci2().b[269][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[269][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[268][0]++;cov_1ks4ntaci2().s[950]++;updateRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[268][1]++;}cov_1ks4ntaci2().s[951]++;if((cov_1ks4ntaci2().b[271][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[271][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[270][0]++;cov_1ks4ntaci2().s[952]++;updateRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[270][1]++;}cov_1ks4ntaci2().s[953]++;if((cov_1ks4ntaci2().b[273][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[273][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[272][0]++;cov_1ks4ntaci2().s[954]++;updateRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[272][1]++;}cov_1ks4ntaci2().s[955]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,display:"ranges",ranges:updateRanges});cov_1ks4ntaci2().s[956]++;return this;},/** - * Add a row split on a boolean valued field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {String} trueDisplayValue A string to display in the true valued row label. - * @param {String} falseDisplayValue A string to display in the false valued row label. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addBooleanRowSplit:function(field,label,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[287]++;cov_1ks4ntaci2().s[957]++;if(!this.dataModelObject.fieldByName(field)){cov_1ks4ntaci2().b[274][0]++;cov_1ks4ntaci2().s[958]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[274][1]++;}var f=(cov_1ks4ntaci2().s[959]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[960]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[275][0]++;cov_1ks4ntaci2().s[961]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[275][1]++;}cov_1ks4ntaci2().s[962]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[963]++;return this;},/** - * Add a row split on a timestamp valued field, binned by the specified bucket size. - * - * @param {String} fieldName The name of field to split on. - * @param {String} label A human readable name for this set of rows. - * @param {String} binning The size of bins to use, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addTimestampRowSplit:function(field,label,binning){cov_1ks4ntaci2().f[288]++;cov_1ks4ntaci2().s[964]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[276][0]++;cov_1ks4ntaci2().s[965]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[276][1]++;}var f=(cov_1ks4ntaci2().s[966]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[967]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[277][0]++;cov_1ks4ntaci2().s[968]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[277][1]++;}cov_1ks4ntaci2().s[969]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[278][0]++;cov_1ks4ntaci2().s[970]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[278][1]++;}cov_1ks4ntaci2().s[971]++;this.rows.push({fieldName:field,owner:f.owner,type:f.type,label:label,period:binning});cov_1ks4ntaci2().s[972]++;return this;},/** - * Add a column split on a string or number valued field, producing a column for - * each distinct value of the field. - * - * @param {String} fieldName The name of field to split on. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addColumnSplit:function(fieldName){cov_1ks4ntaci2().f[289]++;cov_1ks4ntaci2().s[973]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[279][0]++;cov_1ks4ntaci2().s[974]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[279][1]++;}var f=(cov_1ks4ntaci2().s[975]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[976]++;if(!utils.contains(["number","string"],f.type)){cov_1ks4ntaci2().b[280][0]++;cov_1ks4ntaci2().s[977]++;throw new Error("Field was of type "+f.type+", expected number or string.");}else{cov_1ks4ntaci2().b[280][1]++;}var col=(cov_1ks4ntaci2().s[978]++,{fieldName:fieldName,owner:f.owner,type:f.type});cov_1ks4ntaci2().s[979]++;if("number"===f.type){cov_1ks4ntaci2().b[281][0]++;cov_1ks4ntaci2().s[980]++;col.display="all";}else{cov_1ks4ntaci2().b[281][1]++;}cov_1ks4ntaci2().s[981]++;this.columns.push(col);cov_1ks4ntaci2().s[982]++;return this;},/** - * Add a column split on a numeric field, splitting the values into ranges. - * - * @param {String} fieldName The field to split on. - * @param {Object} options An optional dictionary of collection filtering and pagination options: - * - `start` (_integer_): The value of the start of the first range, or null to take the lowest value in the events. - * - `end` (_integer_): The value for the end of the last range, or null to take the highest value in the events. - * - `step` (_integer_): The the width of each range, or null to have Splunk calculate it. - * - `limit` (_integer_): The maximum number of ranges to split into, or null for no limit. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addRangeColumnSplit:function(fieldName,ranges){cov_1ks4ntaci2().f[290]++;cov_1ks4ntaci2().s[983]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[282][0]++;cov_1ks4ntaci2().s[984]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[282][1]++;}var f=(cov_1ks4ntaci2().s[985]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[986]++;if("number"!==f.type){cov_1ks4ntaci2().b[283][0]++;cov_1ks4ntaci2().s[987]++;throw new Error("Field was of type "+f.type+", expected number.");}else{cov_1ks4ntaci2().b[283][1]++;}// In Splunk 6.0.1.1, data models incorrectly expect strings for these fields -// instead of numbers. In 6.1, this is fixed and both are accepted. -var updatedRanges=(cov_1ks4ntaci2().s[988]++,{});cov_1ks4ntaci2().s[989]++;if((cov_1ks4ntaci2().b[285][0]++,!utils.isUndefined(ranges.start))&&(cov_1ks4ntaci2().b[285][1]++,ranges.start!==null)){cov_1ks4ntaci2().b[284][0]++;cov_1ks4ntaci2().s[990]++;updatedRanges.start=ranges.start;}else{cov_1ks4ntaci2().b[284][1]++;}cov_1ks4ntaci2().s[991]++;if((cov_1ks4ntaci2().b[287][0]++,!utils.isUndefined(ranges.end))&&(cov_1ks4ntaci2().b[287][1]++,ranges.end!==null)){cov_1ks4ntaci2().b[286][0]++;cov_1ks4ntaci2().s[992]++;updatedRanges.end=ranges.end;}else{cov_1ks4ntaci2().b[286][1]++;}cov_1ks4ntaci2().s[993]++;if((cov_1ks4ntaci2().b[289][0]++,!utils.isUndefined(ranges.step))&&(cov_1ks4ntaci2().b[289][1]++,ranges.step!==null)){cov_1ks4ntaci2().b[288][0]++;cov_1ks4ntaci2().s[994]++;updatedRanges.size=ranges.step;}else{cov_1ks4ntaci2().b[288][1]++;}cov_1ks4ntaci2().s[995]++;if((cov_1ks4ntaci2().b[291][0]++,!utils.isUndefined(ranges.limit))&&(cov_1ks4ntaci2().b[291][1]++,ranges.limit!==null)){cov_1ks4ntaci2().b[290][0]++;cov_1ks4ntaci2().s[996]++;updatedRanges.maxNumberOf=ranges.limit;}else{cov_1ks4ntaci2().b[290][1]++;}cov_1ks4ntaci2().s[997]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,display:"ranges",ranges:updatedRanges});cov_1ks4ntaci2().s[998]++;return this;},/** - * Add a column split on a boolean valued field. - * - * @param {String} fieldName The name of field to split on. - * @param {String} trueDisplayValue A string to display in the true valued column label. - * @param {String} falseDisplayValue A string to display in the false valued column label. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addBooleanColumnSplit:function(fieldName,trueDisplayValue,falseDisplayValue){cov_1ks4ntaci2().f[291]++;cov_1ks4ntaci2().s[999]++;if(!this.dataModelObject.fieldByName(fieldName)){cov_1ks4ntaci2().b[292][0]++;cov_1ks4ntaci2().s[1000]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[292][1]++;}var f=(cov_1ks4ntaci2().s[1001]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1002]++;if("boolean"!==f.type){cov_1ks4ntaci2().b[293][0]++;cov_1ks4ntaci2().s[1003]++;throw new Error("Field was of type "+f.type+", expected boolean.");}else{cov_1ks4ntaci2().b[293][1]++;}cov_1ks4ntaci2().s[1004]++;this.columns.push({fieldName:fieldName,owner:f.owner,type:f.type,trueLabel:trueDisplayValue,falseLabel:falseDisplayValue});cov_1ks4ntaci2().s[1005]++;return this;},/** - * Add a column split on a timestamp valued field, binned by the specified bucket size. - * - * @param {String} fieldName The name of field to split on. - * @param {String} binning The size of bins to use, see class docs for valid types. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addTimestampColumnSplit:function(field,binning){cov_1ks4ntaci2().f[292]++;cov_1ks4ntaci2().s[1006]++;if(!this.dataModelObject.hasField(field)){cov_1ks4ntaci2().b[294][0]++;cov_1ks4ntaci2().s[1007]++;throw new Error("Did not find field "+field);}else{cov_1ks4ntaci2().b[294][1]++;}var f=(cov_1ks4ntaci2().s[1008]++,this.dataModelObject.fieldByName(field));cov_1ks4ntaci2().s[1009]++;if("timestamp"!==f.type){cov_1ks4ntaci2().b[295][0]++;cov_1ks4ntaci2().s[1010]++;throw new Error("Field was of type "+f.type+", expected timestamp.");}else{cov_1ks4ntaci2().b[295][1]++;}cov_1ks4ntaci2().s[1011]++;if(!utils.contains(this._binning,binning)){cov_1ks4ntaci2().b[296][0]++;cov_1ks4ntaci2().s[1012]++;throw new Error("Invalid binning "+binning+" found. Valid values are: "+this._binning.join(", "));}else{cov_1ks4ntaci2().b[296][1]++;}cov_1ks4ntaci2().s[1013]++;this.columns.push({fieldName:field,owner:f.owner,type:f.type,period:binning});cov_1ks4ntaci2().s[1014]++;return this;},/** - * Add an aggregate to each cell of the pivot. - * - * @param {String} fieldName The name of field to aggregate. - * @param {String} label a human readable name for this aggregate. - * @param {String} statsFunction The function to use for aggregation, see class docs for valid stats functions. - * @return {splunkjs.Service.PivotSpecification} The updated pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */addCellValue:function(fieldName,label,statsFunction){cov_1ks4ntaci2().f[293]++;cov_1ks4ntaci2().s[1015]++;if(!this.dataModelObject.hasField(fieldName)){cov_1ks4ntaci2().b[297][0]++;cov_1ks4ntaci2().s[1016]++;throw new Error("Did not find field "+fieldName);}else{cov_1ks4ntaci2().b[297][1]++;}var f=(cov_1ks4ntaci2().s[1017]++,this.dataModelObject.fieldByName(fieldName));cov_1ks4ntaci2().s[1018]++;if((cov_1ks4ntaci2().b[299][0]++,utils.contains(["string","ipv4"],f.type))&&(cov_1ks4ntaci2().b[299][1]++,!utils.contains(["list","values","first","last","count","dc"],statsFunction))){cov_1ks4ntaci2().b[298][0]++;cov_1ks4ntaci2().s[1019]++;throw new Error("Stats function on string and IPv4 fields must be one of:"+" list, distinct_values, first, last, count, or distinct_count; found "+statsFunction);}else{cov_1ks4ntaci2().b[298][1]++;cov_1ks4ntaci2().s[1020]++;if((cov_1ks4ntaci2().b[301][0]++,"number"===f.type)&&(cov_1ks4ntaci2().b[301][1]++,!utils.contains(["sum","count","average","min","max","stdev","list","values"],statsFunction))){cov_1ks4ntaci2().b[300][0]++;cov_1ks4ntaci2().s[1021]++;throw new Error("Stats function on number field must be must be one of:"+" sum, count, average, max, min, stdev, list, or distinct_values; found "+statsFunction);}else{cov_1ks4ntaci2().b[300][1]++;cov_1ks4ntaci2().s[1022]++;if((cov_1ks4ntaci2().b[303][0]++,"timestamp"===f.type)&&(cov_1ks4ntaci2().b[303][1]++,!utils.contains(["duration","earliest","latest","list","values"],statsFunction))){cov_1ks4ntaci2().b[302][0]++;cov_1ks4ntaci2().s[1023]++;throw new Error("Stats function on timestamp field must be one of:"+" duration, earliest, latest, list, or distinct values; found "+statsFunction);}else{cov_1ks4ntaci2().b[302][1]++;cov_1ks4ntaci2().s[1024]++;if((cov_1ks4ntaci2().b[305][0]++,utils.contains(["objectCount","childCount"],f.type))&&(cov_1ks4ntaci2().b[305][1]++,"count"!==statsFunction)){cov_1ks4ntaci2().b[304][0]++;cov_1ks4ntaci2().s[1025]++;throw new Error("Stats function on childcount and objectcount fields must be count; "+"found "+statsFunction);}else{cov_1ks4ntaci2().b[304][1]++;cov_1ks4ntaci2().s[1026]++;if("boolean"===f.type){cov_1ks4ntaci2().b[306][0]++;cov_1ks4ntaci2().s[1027]++;throw new Error("Cannot use boolean valued fields as cell values.");}else{cov_1ks4ntaci2().b[306][1]++;}}}}}cov_1ks4ntaci2().s[1028]++;this.cells.push({fieldName:fieldName,owner:f.lineage.join("."),type:f.type,label:label,sparkline:false,// Not properly implemented in core yet. -value:statsFunction});cov_1ks4ntaci2().s[1029]++;return this;},/** - * Returns a JSON ready object representation of this pivot specification. - * - * @return {Object} The JSON ready object representation of this pivot specification. - * - * @method splunkjs.Service.PivotSpecification - */toJsonObject:function(){cov_1ks4ntaci2().f[294]++;cov_1ks4ntaci2().s[1030]++;return{dataModel:this.dataModelObject.dataModel.name,baseClass:this.dataModelObject.name,rows:this.rows,columns:this.columns,cells:this.cells,filters:this.filters};},/** - * Query Splunk for SPL queries corresponding to a pivot report - * for this data model, defined by this `PivotSpecification`. - * - * @example - * - * service.dataModels().fetch(function(err, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpec = searches.createPivotSpecification(); - * // Use of the fluent API - * pivotSpec.addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .pivot(function(pivotErr, pivot) { - * console.log("Pivot search is:", pivot.search); - * }); - * }); - * - * @param {Function} callback A function to call when done getting the pivot: `(err, pivot)`. - * - * @method splunkjs.Service.PivotSpecification - */pivot:function(callback){cov_1ks4ntaci2().f[295]++;var svc=(cov_1ks4ntaci2().s[1031]++,this.dataModelObject.dataModel.service);var args=(cov_1ks4ntaci2().s[1032]++,{pivot_json:JSON.stringify(this.toJsonObject())});cov_1ks4ntaci2().s[1033]++;if(!utils.isUndefined(this.accelerationNamespace)){cov_1ks4ntaci2().b[307][0]++;cov_1ks4ntaci2().s[1034]++;args.namespace=this.accelerationNamespace;}else{cov_1ks4ntaci2().b[307][1]++;}cov_1ks4ntaci2().s[1035]++;return svc.get(Paths.pivot+"/"+encodeURIComponent(this.dataModelObject.dataModel.name),args,function(err,response){cov_1ks4ntaci2().f[296]++;cov_1ks4ntaci2().s[1036]++;if(err){cov_1ks4ntaci2().b[308][0]++;cov_1ks4ntaci2().s[1037]++;callback(new Error(err.data.messages[0].text),response);cov_1ks4ntaci2().s[1038]++;return;}else{cov_1ks4ntaci2().b[308][1]++;}cov_1ks4ntaci2().s[1039]++;if((cov_1ks4ntaci2().b[310][0]++,response.data.entry)&&(cov_1ks4ntaci2().b[310][1]++,response.data.entry[0])){cov_1ks4ntaci2().b[309][0]++;cov_1ks4ntaci2().s[1040]++;callback(null,new root.Pivot(svc,response.data.entry[0].content));}else{cov_1ks4ntaci2().b[309][1]++;cov_1ks4ntaci2().s[1041]++;callback(new Error("Didn't get a Pivot report back from Splunk"),response);}});},/** - * Convenience method to wrap up the `PivotSpecification.pivot()` and - * `Pivot.run()` function calls. - * - * Query Splunk for SPL queries corresponding to a pivot report - * for this data model, defined by this `PivotSpecification`; then, - * starts a search job running this pivot, accelerated if possible. - * - * service.dataModels().fetch(function(fetchErr, dataModels) { - * var searches = dataModels.item("internal_audit_logs").objectByName("searches"); - * var pivotSpec = searches.createPivotSpecification(); - * // Use of the fluent API - * pivotSpec.addRowSplit("user", "Executing user") - * .addRangeColumnSplit("exec_time", {start: 0, end: 12, step: 5, limit: 4}) - * .addCellValue("search", "Search Query", "values") - * .run(function(err, job, pivot) { - * console.log("Job SID is:", job.sid); - * console.log("Pivot search is:", pivot.search); - * }); - * }); - * @param {Object} args A dictionary of properties for the search job (optional). For a list of available parameters, see Search job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {Function} callback A function to call when done getting the pivot: `(err, job, pivot)`. - * - * @method splunkjs.Service.PivotSpecification - */run:function(args,callback){cov_1ks4ntaci2().f[297]++;cov_1ks4ntaci2().s[1042]++;if(!callback){cov_1ks4ntaci2().b[311][0]++;cov_1ks4ntaci2().s[1043]++;callback=args;cov_1ks4ntaci2().s[1044]++;args={};}else{cov_1ks4ntaci2().b[311][1]++;}cov_1ks4ntaci2().s[1045]++;args=(cov_1ks4ntaci2().b[312][0]++,args)||(cov_1ks4ntaci2().b[312][1]++,{});cov_1ks4ntaci2().s[1046]++;this.pivot(function(err,pivot){cov_1ks4ntaci2().f[298]++;cov_1ks4ntaci2().s[1047]++;if(err){cov_1ks4ntaci2().b[313][0]++;cov_1ks4ntaci2().s[1048]++;callback(err,null,null);}else{cov_1ks4ntaci2().b[313][1]++;cov_1ks4ntaci2().s[1049]++;pivot.run(args,Async.augment(callback,pivot));}});}});/** - * Represents one of the structured views in a `DataModel`. - * - * Has these properties: - * - `dataModel` (_splunkjs.Service.DataModel_): The `DataModel` to which this `DataModelObject` belongs. - * - `name` (_string_): The name of this `DataModelObject`. - * - `displayName` (_string_): The human readable name of this `DataModelObject`. - * - `parentName` (_string_): The name of the parent `DataModelObject` to this one. - * - `lineage` (_array_): An array of strings of the lineage of the data model - * on which this field is defined. - * - `fields` (_object_): A dictionary of `DataModelField` objects, accessible by name. - * - `constraints` (_array_): An array of `DataModelConstraint` objects. - * - `calculations` (_object_): A dictionary of `DataModelCalculation` objects, accessible by ID. - * - * BaseSearch has an additional property: - * - `baseSearch` (_string_): The search query wrapped by this data model object. - * - * BaseTransaction has additional properties: - * - `groupByFields` (_string_): The fields that will be used to group events into transactions. - * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned - * and split into transactions. - * - `maxSpan` (_string_): The maximum time span of a transaction. - * - `maxPause` (_string_): The maximum pause time of a transaction. - * - * @class splunkjs.Service.DataModelObject - */cov_1ks4ntaci2().s[1050]++;root.DataModelObject=Class.extend({/** - * Constructor for a data model object. - * SDK users are not expected to invoke this constructor directly. - * - * @constructor - * @param {Object} props A dictionary of properties to set: - * - `objectName` (_string_): The name for this data model object. - * - `displayName` (_string_): A human readable name for this data model object. - * - `parentName` (_string_): The name of the data model that owns this data model object. - * - `lineage` (_string_): The lineage of the data model that owns this data model object, - * items are delimited by a dot. This is converted into an array of - * strings upon construction. - * - `fields` (_array_): An array of data model fields. - * - `constraints` (_array_): An array of data model constraints. - * - `calculations` (_array_): An array of data model calculations. - * - `baseSearch` (_string_): The search query wrapped by this data model object; exclusive to BaseSearch (optional) - * - `groupByFields` (_array_): The fields that will be used to group events into transactions; exclusive to BaseTransaction (optional) - * - `objectsToGroup` (_array_): Names of the data model objects that should be unioned - * and split into transactions; exclusive to BaseTransaction (optional) - * - `maxSpan` (_string_): The maximum time span of a transaction; exclusive to BaseTransaction (optional) - * - `maxPause` (_string_): The maximum pause time of a transaction; exclusive to BaseTransaction (optional) - * - * @param {splunkjs.Service.DataModel} parentDataModel The `DataModel` that owns this data model object. - * - * @method splunkjs.Service.DataModelObject - */init:function(props,parentDataModel){cov_1ks4ntaci2().f[299]++;cov_1ks4ntaci2().s[1051]++;props=(cov_1ks4ntaci2().b[314][0]++,props)||(cov_1ks4ntaci2().b[314][1]++,{});cov_1ks4ntaci2().s[1052]++;props.owner=(cov_1ks4ntaci2().b[315][0]++,props.owner)||(cov_1ks4ntaci2().b[315][1]++,"");cov_1ks4ntaci2().s[1053]++;this.dataModel=parentDataModel;cov_1ks4ntaci2().s[1054]++;this.name=props.objectName;cov_1ks4ntaci2().s[1055]++;this.displayName=props.displayName;cov_1ks4ntaci2().s[1056]++;this.parentName=props.parentName;cov_1ks4ntaci2().s[1057]++;this.lineage=props.lineage.split(".");// Properties exclusive to BaseTransaction -cov_1ks4ntaci2().s[1058]++;if(props.hasOwnProperty("groupByFields")){cov_1ks4ntaci2().b[316][0]++;cov_1ks4ntaci2().s[1059]++;this.groupByFields=props.groupByFields;}else{cov_1ks4ntaci2().b[316][1]++;}cov_1ks4ntaci2().s[1060]++;if(props.hasOwnProperty("objectsToGroup")){cov_1ks4ntaci2().b[317][0]++;cov_1ks4ntaci2().s[1061]++;this.objectsToGroup=props.objectsToGroup;}else{cov_1ks4ntaci2().b[317][1]++;}cov_1ks4ntaci2().s[1062]++;if(props.hasOwnProperty("transactionMaxTimeSpan")){cov_1ks4ntaci2().b[318][0]++;cov_1ks4ntaci2().s[1063]++;this.maxSpan=props.transactionMaxTimeSpan;}else{cov_1ks4ntaci2().b[318][1]++;}cov_1ks4ntaci2().s[1064]++;if(props.hasOwnProperty("transactionMaxPause")){cov_1ks4ntaci2().b[319][0]++;cov_1ks4ntaci2().s[1065]++;this.maxPause=props.transactionMaxPause;}else{cov_1ks4ntaci2().b[319][1]++;}// Property exclusive to BaseSearch -cov_1ks4ntaci2().s[1066]++;if(props.hasOwnProperty("baseSearch")){cov_1ks4ntaci2().b[320][0]++;cov_1ks4ntaci2().s[1067]++;this.baseSearch=props.baseSearch;}else{cov_1ks4ntaci2().b[320][1]++;}// Parse fields -cov_1ks4ntaci2().s[1068]++;this.fields={};cov_1ks4ntaci2().s[1069]++;for(var i=(cov_1ks4ntaci2().s[1070]++,0);iSearch job parameters on Splunk Developer Portal. - * **Note:** This method throws an error if the `exec_mode=oneshot` parameter is passed in with the properties dictionary. - * @param {String} querySuffix A search query, starting with a '|' that will be appended to the command to fetch the contents of this data model object (e.g., "| head 3"). - * @param {Function} callback A function to call with the search job: `(err, job)`. - * - * @method splunkjs.Service.DataModelObject - */startSearch:function(params,querySuffix,callback){cov_1ks4ntaci2().f[311]++;var query=(cov_1ks4ntaci2().s[1113]++,"| datamodel "+this.dataModel.name+" "+this.name+" search");// Prepend a space to the querySuffix, or set it to an empty string if null or undefined -cov_1ks4ntaci2().s[1114]++;querySuffix=querySuffix?(cov_1ks4ntaci2().b[327][0]++," "+querySuffix):(cov_1ks4ntaci2().b[327][1]++,"");cov_1ks4ntaci2().s[1115]++;this.dataModel.service.search(query+querySuffix,params,callback);},/** - * Returns the data model object this one inherits from if it is a user defined, - * otherwise return null. - * - * @return {splunkjs.Service.DataModelObject|null} This data model object's parent - * or null if this is not a user defined data model object. - * - * @method splunkjs.Service.DataModelObject - */parent:function(){cov_1ks4ntaci2().f[312]++;cov_1ks4ntaci2().s[1116]++;return this.dataModel.objectByName(this.parentName);},/** - * Returns a new Pivot Specification, accepts no parameters. - * - * @return {splunkjs.Service.PivotSpecification} A new pivot specification. - * - * @method splunkjs.Service.DataModelObject - */createPivotSpecification:function(){cov_1ks4ntaci2().f[313]++;cov_1ks4ntaci2().s[1117]++;// Pass in this DataModelObject to create a PivotSpecification -return new root.PivotSpecification(this);}});/** - * Represents a data model on the server. Data models - * contain `DataModelObject` instances, which specify structured - * views on Splunk data. - * - * @endpoint datamodel/model/{name} - * @class splunkjs.Service.DataModel - * @extends splunkjs.Service.Entity - */cov_1ks4ntaci2().s[1118]++;root.DataModel=Service.Entity.extend({/** - * Retrieves the REST endpoint path for this resource (with no namespace). - * - * @method splunkjs.Service.DataModel - */path:function(){cov_1ks4ntaci2().f[314]++;cov_1ks4ntaci2().s[1119]++;return Paths.dataModels+"/"+encodeURIComponent(this.name);},/** - * Constructor for `splunkjs.Service.DataModel`. - * - * @constructor - * @param {splunkjs.Service} service A `Service` instance. - * @param {String} name The name for the new data model. - * @param {Object} namespace (Optional) namespace information: - * - `owner` (_string_): The Splunk username, such as "admin". A value of "nobody" means no specific user. The "-" wildcard means all users. - * - `app` (_string_): The app context for this resource (such as "search"). The "-" wildcard means all apps. - * - `sharing` (_string_): A mode that indicates how the resource is shared. The sharing mode can be "user", "app", "global", or "system". - * @param {Object} props Properties of this data model: - * - `acceleration` (_string_): A JSON object with an `enabled` key, representing if acceleration is enabled or not. - * - `concise` (_string_): Indicates whether to list a concise JSON description of the data model, should always be "0". - * - `description` (_string_): The JSON describing the data model. - * - `displayName` (_string_): The name displayed for the data model in Splunk Web. - * - * @method splunkjs.Service.DataModel - */init:function(service,name,namespace,props){cov_1ks4ntaci2().f[315]++;cov_1ks4ntaci2().s[1120]++;// If not given a 4th arg, assume the namespace was omitted -if(!props){cov_1ks4ntaci2().b[328][0]++;cov_1ks4ntaci2().s[1121]++;props=namespace;cov_1ks4ntaci2().s[1122]++;namespace={};}else{cov_1ks4ntaci2().b[328][1]++;}cov_1ks4ntaci2().s[1123]++;this.name=name;cov_1ks4ntaci2().s[1124]++;this._super(service,this.path(),namespace);cov_1ks4ntaci2().s[1125]++;this.acceleration=(cov_1ks4ntaci2().b[329][0]++,JSON.parse(props.content.acceleration))||(cov_1ks4ntaci2().b[329][1]++,{});cov_1ks4ntaci2().s[1126]++;if(this.acceleration.hasOwnProperty("enabled")){cov_1ks4ntaci2().b[330][0]++;cov_1ks4ntaci2().s[1127]++;// convert the enabled property to a boolean -this.acceleration.enabled=!!this.acceleration.enabled;}else{cov_1ks4ntaci2().b[330][1]++;}// concise=0 (false) forces the server to return all details of the newly created data model. -// we do not want a summary of this data model -cov_1ks4ntaci2().s[1128]++;if((cov_1ks4ntaci2().b[332][0]++,!props.hasOwnProperty("concise"))||(cov_1ks4ntaci2().b[332][1]++,utils.isUndefined(props.concise))){cov_1ks4ntaci2().b[331][0]++;cov_1ks4ntaci2().s[1129]++;this.concise="0";}else{cov_1ks4ntaci2().b[331][1]++;}var dataModelDefinition=(cov_1ks4ntaci2().s[1130]++,JSON.parse(props.content.description));cov_1ks4ntaci2().s[1131]++;this.objectNames=dataModelDefinition.objectNameList;cov_1ks4ntaci2().s[1132]++;this.displayName=dataModelDefinition.displayName;cov_1ks4ntaci2().s[1133]++;this.description=dataModelDefinition.description;// Parse the objects for this data model -var objs=(cov_1ks4ntaci2().s[1134]++,dataModelDefinition.objects);cov_1ks4ntaci2().s[1135]++;this.objects=[];cov_1ks4ntaci2().s[1136]++;for(var i=(cov_1ks4ntaci2().s[1137]++,0);i0);}});}});})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZpY2UuanMiXSwibmFtZXMiOlsiQ29udGV4dCIsInJlcXVpcmUiLCJIdHRwIiwiQXN5bmMiLCJQYXRocyIsIkNsYXNzIiwidXRpbHMiLCJyb290IiwiZXhwb3J0cyIsIlNlcnZpY2UiLCJCYXNlU2VydmljZSIsImV4dGVuZCIsImluaXQiLCJfc3VwZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIm1vZHVsZSIsInNwZWNpYWxpemUiLCJiaW5kIiwiYXBwcyIsImNvbmZpZ3VyYXRpb25zIiwiaW5kZXhlcyIsInNhdmVkU2VhcmNoZXMiLCJqb2JzIiwidXNlcnMiLCJjdXJyZW50VXNlciIsInZpZXdzIiwiZmlyZWRBbGVydEdyb3VwcyIsImRhdGFNb2RlbHMiLCJvd25lciIsImFwcCIsImh0dHAiLCJzY2hlbWUiLCJob3N0IiwicG9ydCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJzZXNzaW9uS2V5IiwidmVyc2lvbiIsIkFwcGxpY2F0aW9ucyIsIm5hbWVzcGFjZSIsIkNvbmZpZ3VyYXRpb25zIiwiSW5kZXhlcyIsIlNhdmVkU2VhcmNoZXMiLCJzdG9yYWdlUGFzc3dvcmRzIiwiU3RvcmFnZVBhc3N3b3JkcyIsIkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb24iLCJKb2JzIiwiRGF0YU1vZGVscyIsIlVzZXJzIiwiVmlld3MiLCJzZWFyY2giLCJxdWVyeSIsInBhcmFtcyIsImNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsImdldEpvYiIsInNpZCIsImpvYiIsIkpvYiIsImZldGNoIiwib25lc2hvdFNlYXJjaCIsInRoYXQiLCJyZXEiLCJnZXQiLCJlcnIiLCJyZXNwb25zZSIsImRhdGEiLCJlbnRyeSIsImNvbnRlbnQiLCJ1c2VyIiwiVXNlciIsIndhc0Fib3J0ZWQiLCJzZXJ2ZXJJbmZvIiwiU2VydmVySW5mbyIsInBhcnNlIiwicSIsInBhcnNlciIsInR5cGVhaGVhZCIsInByZWZpeCIsImNvdW50IiwicmVzdWx0cyIsImxvZyIsImV2ZW50IiwiaXNPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwicGF0aCIsInBhdGhzIiwic3VibWl0RXZlbnQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsInBvc3QiLCJyZXF1ZXN0IiwiRW5kcG9pbnQiLCJzZXJ2aWNlIiwicXVhbGlmaWVkUGF0aCIsIkVycm9yIiwiZ2V0X3YyIiwiZGVsIiwicmVscGF0aCIsInVybCIsIlJlc291cmNlIiwiZnVsbHBhdGgiLCJfcHJvcGVydGllcyIsIl9zdGF0ZSIsIl9sb2FkIiwicHJvcGVydGllcyIsInN0YXRlIiwiRW50aXR5IiwiZmV0Y2hPblVwZGF0ZSIsInJlbW92ZSIsInVwZGF0ZSIsImZpZWxkcyIsImxpbmtzIiwiYWNsIiwiYXV0aG9yIiwidXBkYXRlZCIsInB1Ymxpc2hlZCIsImVuYWJsZSIsImRpc2FibGUiLCJyZWxvYWQiLCJfZmllbGRzIiwiX2FjbCIsIl9saW5rcyIsImlzQXJyYXkiLCJfYXV0aG9yIiwiX3VwZGF0ZWQiLCJfcHVibGlzaGVkIiwib3B0aW9ucyIsInByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJDb2xsZWN0aW9uIiwiZmV0Y2hPbkVudGl0eUNyZWF0aW9uIiwiY3JlYXRlIiwibGlzdCIsIml0ZW0iLCJpbnN0YW50aWF0ZUVudGl0eSIsIl9lbnRpdGllcyIsIl9lbnRpdGllc0J5TmFtZSIsIl9wYWdpbmciLCJlbnRpdGllcyIsImVudGl0aWVzQnlOYW1lIiwiZW50aXR5UHJvcGVydHlMaXN0IiwiaSIsImxlbmd0aCIsImVudGl0eSIsInB1c2giLCJuYW1lIiwicGFnaW5nIiwiZmV0Y2hfdjIiLCJpZCIsImlzRW1wdHkiLCJmdWxsUGF0aCIsImNsb25lIiwiU2F2ZWRTZWFyY2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJhY2tub3dsZWRnZSIsImRpc3BhdGNoIiwiaGlzdG9yeSIsInN1cHByZXNzSW5mbyIsImFsZXJ0Q291bnQiLCJwYXJzZUludCIsInRyaWdnZXJlZF9hbGVydF9jb3VudCIsImZpcmVkQWxlcnRHcm91cCIsIkZpcmVkQWxlcnRHcm91cCIsImpvYkRhdGEiLCJuYW1lc3BhY2VGcm9tUHJvcGVydGllcyIsImNhbGwiLCJlbnRpdHlOYW1lc3BhY2UiLCJTdG9yYWdlUGFzc3dvcmQiLCJGaXJlZEFsZXJ0IiwiZmlyZWRBbGVydHMiLCJhY3Rpb25zIiwiYWxlcnRUeXBlIiwiYWxlcnRfdHlwZSIsImlzRGlnZXN0TW9kZSIsImRpZ2VzdF9tb2RlIiwiZXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uX3RpbWVfcmVuZGVyZWQiLCJzYXZlZFNlYXJjaE5hbWUiLCJzYXZlZHNlYXJjaF9uYW1lIiwic2V2ZXJpdHkiLCJ0cmlnZ2VyVGltZSIsInRyaWdnZXJfdGltZSIsInRyaWdnZXJUaW1lUmVuZGVyZWQiLCJ0cmlnZ2VyX3RpbWVfcmVuZGVyZWQiLCJ0cmlnZ2VyZWRBbGVydENvdW50IiwidHJpZ2dlcmVkX2FsZXJ0cyIsImZpcmVkQWxlcnREYXRhIiwiZmlyZWRBbGVydCIsIkFwcGxpY2F0aW9uIiwic2V0dXBJbmZvIiwidXBkYXRlSW5mbyIsImluZm8iLCJWaWV3IiwiSW5kZXgiLCJyZXN1bHQiLCJ2ZXJzaW9uQ29tcGFyZSIsIkNvbmZpZ3VyYXRpb25TdGFuemEiLCJmaWxlIiwiQ29uZmlndXJhdGlvbkZpbGUiLCJnZXREZWZhdWx0U3RhbnphIiwic3RhbnphTmFtZSIsInZhbHVlcyIsImZpbGVuYW1lIiwiX19jb25mIiwiZG9lc0ZpbGVFeGlzdCIsImZpbGVzIiwiZmlsdGVyIiwiZiIsImNvZGUiLCJtZXNzYWdlIiwiY29uZmlndXJhdGlvbkZpbGUiLCJmZXRjaGVkRmlsZSIsImVycm9yIiwiZXJyb3JDb2RlIiwiZXJyb3JNZXNzYWdlIiwiZG9lc1N0YW56YUV4aXN0Iiwic3RhbnphIiwiZmV0Y2hlZFN0YW56YSIsImNyZWF0ZV92MiIsImNvbmZpZ3MiLCJzdmMiLCJrZXlWYWx1ZU1hcCIsImRvZXNGaWxlRXhpc3RSZXNwb25zZSIsImNvbmZpZ0ZpbGUiLCJjb25zb2xlIiwibmV3RmlsZSIsImRvZXNTdGFuemFFeGlzdFJlc3BvbnNlIiwiY29uZmlnU3RhbnphIiwibmV3U3RhbnphIiwidXBkYXRlZFN0YW56YSIsImNhbmNlbCIsImRpc2FibGVQcmV2aWV3IiwiZW5hYmxlUHJldmlldyIsImV2ZW50cyIsImZpbmFsaXplIiwicGF1c2UiLCJwcmV2aWV3Iiwic2VhcmNobG9nIiwic2V0UHJpb3JpdHkiLCJzZXRUVEwiLCJzdW1tYXJ5IiwidGltZWxpbmUiLCJ0b3VjaCIsInVucGF1c2UiLCJhY3Rpb24iLCJvdXRwdXRfbW9kZSIsIml0ZXJhdG9yIiwidHlwZSIsIlBhZ2luYXRlZEVuZHBvaW50SXRlcmF0b3IiLCJ2YWx1ZSIsInByaW9yaXR5IiwidHRsIiwidHJhY2siLCJjYWxsYmFja3MiLCJwZXJpb2QiLCJkb25lIiwibm9DYWxsYmFja3NBZnRlclJlYWR5IiwicHJvZ3Jlc3MiLCJmYWlsZWQiLCJyZWFkeSIsIl9wcmVyZWFkeSIsIl9zdG9wcGVkQWZ0ZXJSZWFkeSIsImVtaXR0ZWRSZWFkeSIsImRvbmVMb29waW5nIiwid2hpbHN0IiwibmV4dEl0ZXJhdGlvbiIsImRpc3BhdGNoU3RhdGUiLCJub3RSZWFkeSIsImlzRG9uZSIsImlzRmFpbGVkIiwic2xlZXAiLCJleGVjX21vZGUiLCJ0b0xvd2VyQ2FzZSIsIm91dHB1dE1vZGUiLCJEYXRhTW9kZWxGaWVsZCIsIl90eXBlcyIsImZpZWxkTmFtZSIsImRpc3BsYXlOYW1lIiwibXVsdGl2YWx1ZWQiLCJtdWx0aXZhbHVlIiwicmVxdWlyZWQiLCJoaWRkZW4iLCJlZGl0YWJsZSIsImNvbW1lbnQiLCJmaWVsZFNlYXJjaCIsImxpbmVhZ2UiLCJzcGxpdCIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1RpbWVzdGFtcCIsImlzT2JqZWN0Y291bnQiLCJpc0NoaWxkY291bnQiLCJpc0lQdjQiLCJpc0Jvb2xlYW4iLCJEYXRhTW9kZWxDb25zdHJhaW50IiwiRGF0YU1vZGVsQ2FsY3VsYXRpb24iLCJjYWxjdWxhdGlvbklEIiwiY2FsY3VsYXRpb25UeXBlIiwib3V0cHV0RmllbGRzIiwiZXhwcmVzc2lvbiIsImlucHV0RmllbGQiLCJsb29rdXBOYW1lIiwiaW5wdXRGaWVsZE1hcHBpbmdzIiwibG9va3VwSW5wdXRzIiwib3V0cHV0RmllbGROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpc0VkaXRhYmxlIiwiaXNMb29rdXAiLCJpc0V2YWwiLCJpc1JleCIsImlzR2VvSVAiLCJQaXZvdCIsImRyaWxsZG93blNlYXJjaCIsImRyaWxsZG93bl9zZWFyY2giLCJwcmV0dHlRdWVyeSIsIm9wZW5JblNlYXJjaCIsIm9wZW5faW5fc2VhcmNoIiwicGl2b3RTZWFyY2giLCJwaXZvdF9zZWFyY2giLCJ0c3RhdHNTZWFyY2giLCJ0c3RhdHNfc2VhcmNoIiwicnVuIiwiYXJncyIsImlzVW5kZWZpbmVkIiwiUGl2b3RTcGVjaWZpY2F0aW9uIiwiX2NvbXBhcmlzb25zIiwiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsImlwdjQiLCJfYmlubmluZyIsIl9zb3J0RGlyZWN0aW9uIiwiX3N0YXRzRnVuY3Rpb25zIiwiZGF0YU1vZGVsT2JqZWN0IiwiY29sdW1ucyIsInJvd3MiLCJmaWx0ZXJzIiwiY2VsbHMiLCJhY2NlbGVyYXRpb25OYW1lc3BhY2UiLCJkYXRhTW9kZWwiLCJpc0FjY2VsZXJhdGVkIiwicGl2b3QiLCJzZXRBY2NlbGVyYXRpb25Kb2IiLCJhZGRGaWx0ZXIiLCJjb21wYXJpc29uVHlwZSIsImNvbXBhcmlzb25PcCIsImNvbXBhcmVUbyIsImhhc0ZpZWxkIiwiZmllbGRCeU5hbWUiLCJjb250YWlucyIsInJldCIsImpvaW4iLCJydWxlIiwiY29tcGFyYXRvciIsImFkZExpbWl0RmlsdGVyIiwic29ydEF0dHJpYnV0ZSIsInNvcnREaXJlY3Rpb24iLCJsaW1pdCIsInN0YXRzRnVuY3Rpb24iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlT3duZXIiLCJsaW1pdEFtb3VudCIsInN0YXRzRm4iLCJsaW1pdFR5cGUiLCJhZGRSb3dTcGxpdCIsImxhYmVsIiwicm93IiwiZGlzcGxheSIsImFkZFJhbmdlUm93U3BsaXQiLCJmaWVsZCIsInJhbmdlcyIsInVwZGF0ZVJhbmdlcyIsInN0YXJ0IiwiZW5kIiwic3RlcCIsInNpemUiLCJtYXhOdW1iZXJPZiIsImFkZEJvb2xlYW5Sb3dTcGxpdCIsInRydWVEaXNwbGF5VmFsdWUiLCJmYWxzZURpc3BsYXlWYWx1ZSIsInRydWVMYWJlbCIsImZhbHNlTGFiZWwiLCJhZGRUaW1lc3RhbXBSb3dTcGxpdCIsImJpbm5pbmciLCJhZGRDb2x1bW5TcGxpdCIsImNvbCIsImFkZFJhbmdlQ29sdW1uU3BsaXQiLCJ1cGRhdGVkUmFuZ2VzIiwiYWRkQm9vbGVhbkNvbHVtblNwbGl0IiwiYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQiLCJhZGRDZWxsVmFsdWUiLCJzcGFya2xpbmUiLCJ0b0pzb25PYmplY3QiLCJiYXNlQ2xhc3MiLCJwaXZvdF9qc29uIiwibWVzc2FnZXMiLCJ0ZXh0IiwiYXVnbWVudCIsIkRhdGFNb2RlbE9iamVjdCIsInBhcmVudERhdGFNb2RlbCIsIm9iamVjdE5hbWUiLCJwYXJlbnROYW1lIiwiZ3JvdXBCeUZpZWxkcyIsIm9iamVjdHNUb0dyb3VwIiwibWF4U3BhbiIsInRyYW5zYWN0aW9uTWF4VGltZVNwYW4iLCJtYXhQYXVzZSIsInRyYW5zYWN0aW9uTWF4UGF1c2UiLCJiYXNlU2VhcmNoIiwiY29uc3RyYWludHMiLCJqIiwiY2FsY3VsYXRpb25zIiwiayIsImlzQmFzZVNlYXJjaCIsImlzQmFzZVRyYW5zYWN0aW9uIiwiZmllbGROYW1lcyIsImNhbGN1bGF0ZWRGaWVsZHMiLCJhbGxGaWVsZHMiLCJjb21iaW5lZEZpZWxkcyIsImNmIiwiYWxsRmllbGROYW1lcyIsImNhbGN1bGF0aW9uSURzIiwiY2FsY3VsYXRpb24iLCJjYWxjdWxhdGVkRmllbGROYW1lcyIsImNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iIiwiZWFybGllc3RUaW1lIiwidW5kZWZpbmVkIiwiZWFybGllc3RfdGltZSIsInN0YXJ0U2VhcmNoIiwicXVlcnlTdWZmaXgiLCJwYXJlbnQiLCJvYmplY3RCeU5hbWUiLCJjcmVhdGVQaXZvdFNwZWNpZmljYXRpb24iLCJEYXRhTW9kZWwiLCJhY2NlbGVyYXRpb24iLCJlbmFibGVkIiwiY29uY2lzZSIsImRhdGFNb2RlbERlZmluaXRpb24iLCJkZXNjcmlwdGlvbiIsIm9iamVjdE5hbWVzIiwib2JqZWN0TmFtZUxpc3QiLCJvYmpzIiwib2JqZWN0cyIsImhhc09iamVjdCIsInVwZGF0ZWRQcm9wcyIsImFjY2NlbGVyYXRpb24iLCJjcm9uX3NjaGVkdWxlIiwiY3JvblNjaGVkdWxlIiwiZGF0YU1vZGVsTmFtZXNwYWNlIiwicmVwbGFjZSIsImVuZHBvaW50IiwiX2VuZHBvaW50IiwiX3BhZ2VzaXplIiwicGFnZXNpemUiLCJfb2Zmc2V0IiwibmV4dCIsIm9mZnNldCIsIm51bVJlc3VsdHMiXSwibWFwcGluZ3MiOiJvc3ZOQWVZO21IQWZaLEssQ0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLENBQUMsVUFBVyxDQUNSLGFBRFEsd0JBR1IsR0FBSUEsQ0FBQUEsT0FBTywwQkFBT0MsT0FBTyxDQUFDLFdBQUQsQ0FBZCxDQUFYLENBQ0EsR0FBSUMsQ0FBQUEsSUFBSSwwQkFBVUQsT0FBTyxDQUFDLFFBQUQsQ0FBakIsQ0FBUixDQUNBLEdBQUlFLENBQUFBLEtBQUssMEJBQVNGLE9BQU8sQ0FBQyxTQUFELENBQWhCLENBQVQsQ0FDQSxHQUFJRyxDQUFBQSxLQUFLLDBCQUFTSCxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CRyxLQUE1QixDQUFULENBQ0EsR0FBSUMsQ0FBQUEsS0FBSywwQkFBU0osT0FBTyxDQUFDLGdCQUFELENBQVAsQ0FBMEJJLEtBQW5DLENBQVQsQ0FDQSxHQUFJQyxDQUFBQSxLQUFLLDBCQUFTTCxPQUFPLENBQUMsU0FBRCxDQUFoQixDQUFULENBRUEsR0FBSU0sQ0FBQUEsSUFBSSwwQkFBRyw0QkFBQUMsT0FBTywrQkFBSSxJQUFKLENBQVYsQ0FBUixDQUNBLEdB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MkJBRURwRixJQUFJLENBQUM2WSxPQUFMLEVBQWdCRyxVQUFoQixDQUZDLDJCQUlEeFosUUFBUSxDQUFDLElBQUQsQ0FBTzJCLE9BQVAsQ0FBZ0I2WCxVQUFVLENBQUcsQ0FBN0IsQ0FBUixDQUNILENBQ0osQ0FWTSxDQUFQLENBV0gsQ0E3QnlDLENBQWIsQ0FBakMsQ0ErQkgsQ0EzcExEIiwic291cmNlc0NvbnRlbnQiOlsiLyohKi9cbi8vIENvcHlyaWdodCAyMDE0IFNwbHVuaywgSW5jLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik6IHlvdSBtYXlcbi8vIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluXG4vLyBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4vLyBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbi8vIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4vLyB1bmRlciB0aGUgTGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIFxuICAgIHZhciBDb250ZXh0ICAgICA9IHJlcXVpcmUoJy4vY29udGV4dCcpO1xuICAgIHZhciBIdHRwICAgICAgICA9IHJlcXVpcmUoJy4vaHR0cCcpO1xuICAgIHZhciBBc3luYyAgICAgICA9IHJlcXVpcmUoJy4vYXN5bmMnKTtcbiAgICB2YXIgUGF0aHMgICAgICAgPSByZXF1aXJlKCcuL3BhdGhzJykuUGF0aHM7XG4gICAgdmFyIENsYXNzICAgICAgID0gcmVxdWlyZSgnLi9qcXVlcnkuY2xhc3MnKS5DbGFzcztcbiAgICB2YXIgdXRpbHMgICAgICAgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG4gICAgXG4gICAgdmFyIHJvb3QgPSBleHBvcnRzIHx8IHRoaXM7XG4gICAgdmFyIFNlcnZpY2UgPSBudWxsO1xuICAgIFxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIFNwbHVuayBFbnRlcnByaXNlIGFuZCBTcGx1bmsgU3Rvcm0uXG4gICAgICogXG4gICAgICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlzIHRoZXJlZm9yZSBTREstcHJpdmF0ZS5cbiAgICAgKiBcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMucHJpdmF0ZS5CYXNlU2VydmljZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLkNvbnRleHRcbiAgICAgKi9cbiAgICB2YXIgQmFzZVNlcnZpY2UgPSBDb250ZXh0LmV4dGVuZCh7XG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSByb290IGFjY2VzcyBwb2ludCB0byBTcGx1bmsgZnVuY3Rpb25hbGl0eSB3aXRoIHR5cGVkIGFjY2VzcyB0byBcbiAgICAgKiBTcGx1bmsgcmVzb3VyY2VzIHN1Y2ggYXMgc2VhcmNoZXMsIGluZGV4ZXMsIGlucHV0cywgYW5kIG1vcmUuIFByb3ZpZGVzXG4gICAgICogbWV0aG9kcyB0byBhdXRoZW50aWNhdGUgYW5kIGNyZWF0ZSBzcGVjaWFsaXplZCBpbnN0YW5jZXMgb2YgdGhlIHNlcnZpY2UuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZVxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLnByaXZhdGUuQmFzZVNlcnZpY2VcbiAgICAgKi9cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJvb3QgPSBTZXJ2aWNlID0gQmFzZVNlcnZpY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLkh0dHB9IGh0dHAgQW4gaW5zdGFuY2Ugb2YgYSBgc3BsdW5ranMuSHR0cGAgY2xhc3MuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnM6IFxuICAgICAgICAgKiAgICAtIGBzY2hlbWVgIChfc3RyaW5nXyk6IFRoZSBzY2hlbWUgKFwiaHR0cFwiIG9yIFwiaHR0cHNcIikgZm9yIGFjY2Vzc2luZyBTcGx1bmsuXG4gICAgICAgICAqICAgIC0gYGhvc3RgIChfc3RyaW5nXyk6IFRoZSBob3N0IG5hbWUgKHRoZSBkZWZhdWx0IGlzIFwibG9jYWxob3N0XCIpLlxuICAgICAgICAgKiAgICAtIGBwb3J0YCAoX2ludGVnZXJfKTogVGhlIHBvcnQgbnVtYmVyICh0aGUgZGVmYXVsdCBpcyA4MDg5KS5cbiAgICAgICAgICogICAgLSBgdXNlcm5hbWVgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgYWNjb3VudCB1c2VybmFtZSwgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICogICAgLSBgcGFzc3dvcmRgIChfc3RyaW5nXyk6IFRoZSBwYXNzd29yZCwgd2hpY2ggaXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIFNwbHVuayBpbnN0YW5jZS5cbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBvd25lciAodXNlcm5hbWUpIGNvbXBvbmVudCBvZiB0aGUgbmFtZXNwYWNlLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29tcG9uZW50IG9mIHRoZSBuYW1lc3BhY2UuXG4gICAgICAgICAqICAgIC0gYHNlc3Npb25LZXlgIChfc3RyaW5nXyk6IFRoZSBjdXJyZW50IHNlc3Npb24gdG9rZW4uXG4gICAgICAgICAqICAgIC0gYGF1dG9sb2dpbmAgKF9ib29sZWFuXyk6IGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IHRyeSB0byBsb2cgaW4gYWdhaW4gaWYgdGhlIHNlc3Npb24gdGVybWluYXRlcywgYGZhbHNlYCBpZiBub3QgKGB0cnVlYCBieSBkZWZhdWx0KS5cbiAgICAgICAgICogICAgLSBgdmVyc2lvbmAgKF9zdHJpbmdfKTogVGhlIHZlcnNpb24gc3RyaW5nIGZvciBTcGx1bmssIGZvciBleGFtcGxlIFwiNC4zLjJcIiAodGhlIGRlZmF1bHQgaXMgXCI1LjBcIikuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2V9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5zcGVjaWFsaXplICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3BlY2lhbGl6ZSk7XG4gICAgICAgICAgICB0aGlzLmFwcHMgICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hcHBzKTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlcyAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmluZGV4ZXMpO1xuICAgICAgICAgICAgdGhpcy5zYXZlZFNlYXJjaGVzICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2F2ZWRTZWFyY2hlcyk7XG4gICAgICAgICAgICB0aGlzLmpvYnMgICAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5qb2JzKTtcbiAgICAgICAgICAgIHRoaXMudXNlcnMgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVzZXJzKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld3MgICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnZpZXdzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZWRBbGVydEdyb3VwcyAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpcmVkQWxlcnRHcm91cHMpO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxzICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGF0YU1vZGVscyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgYFNlcnZpY2VgIGluc3RhbmNlIGZvclxuICAgICAgICAgKiBhIHNwZWNpZmljIG5hbWVzcGFjZSBjb250ZXh0LiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc3ZjID0gLi4uO1xuICAgICAgICAgKiAgICAgIHZhciBuZXdTZXJ2aWNlID0gc3ZjLnNwZWNpYWxpemUoXCJteXVzZXJcIiwgXCJ1bml4XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3duZXIgVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXBwIFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlfSBUaGUgc3BlY2lhbGl6ZWQgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHNwZWNpYWxpemU6IGZ1bmN0aW9uKG93bmVyLCBhcHApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZSh0aGlzLmh0dHAsIHtcbiAgICAgICAgICAgICAgICBzY2hlbWU6IHRoaXMuc2NoZW1lLFxuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMuaG9zdCwgICBcbiAgICAgICAgICAgICAgICBwb3J0OiB0aGlzLnBvcnQsICAgICAgIFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIG93bmVyOiBvd25lcixcbiAgICAgICAgICAgICAgICBhcHA6IGFwcCwgXG4gICAgICAgICAgICAgICAgc2Vzc2lvbktleTogdGhpcy5zZXNzaW9uS2V5LFxuICAgICAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYEFwcGxpY2F0aW9uc2AgY29sbGVjdGlvbiwgd2hpY2ggYWxsb3dzIHlvdSB0byBcbiAgICAgICAgICogbGlzdCBpbnN0YWxsZWQgYXBwcyBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBMaXN0IGluc3RhbGxlZCBhcHBzXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzdmMuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuZmV0Y2goZnVuY3Rpb24oZXJyKSB7IGNvbnNvbGUubG9nKGFwcHMubGlzdCgpKTsgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbn0gVGhlIGBBcHBsaWNhdGlvbnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBhcHBzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5BcHBsaWNhdGlvbnModGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYENvbmZpZ3VyYXRpb25zYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBcbiAgICAgICAgICogY3JlYXRlLCBsaXN0LCBhbmQgcmV0cmlldmUgY29uZmlndXJhdGlvbiAoLmNvbmYpIGZpbGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHByb3BlcnRpZXMgaW4gdGhlICdwcm9wcy5jb25mJyBmaWxlXG4gICAgICAgICAqICAgICAgdmFyIGZpbGVzID0gc3ZjLmNvbmZpZ3VyYXRpb25zKCk7XG4gICAgICAgICAqICAgICAgZmlsZXMuaXRlbShcInByb3BzXCIsIGZ1bmN0aW9uKGVyciwgcHJvcHNGaWxlKSB7XG4gICAgICAgICAqICAgICAgICAgIHByb3BzRmlsZS5mZXRjaChmdW5jdGlvbihlcnIsIHByb3BzKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9wcy5wcm9wZXJ0aWVzKCkpOyBcbiAgICAgICAgICogICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zfSBUaGUgYENvbmZpZ3VyYXRpb25zYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgY29uZmlnc1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBjb25maWd1cmF0aW9uczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvbnModGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgSW5kZXhlc2AgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlLCBcbiAgICAgICAgICogbGlzdCwgYW5kIHVwZGF0ZSBpbmRleGVzLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFuIF9pbnRlcm5hbCBpbmRleFxuICAgICAgICAgKiAgICAgIHZhciBpbmRleGVzID0gc3ZjLmluZGV4ZXMoKTtcbiAgICAgICAgICogICAgICBpbmRleGVzLmZldGNoKGZ1bmN0aW9uKGVyciwgaW5kZXhlcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzLml0ZW0oXCJfaW50ZXJuYWxcIik7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiV2FzIGluZGV4IGZvdW5kOiBcIiArICEhaW5kZXgpO1xuICAgICAgICAgKiAgICAgICAgICAvLyBgaW5kZXhgIGlzIGFuIEluZGV4IG9iamVjdC5cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXhlc30gVGhlIGBJbmRleGVzYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi8gICAgICAgIFxuICAgICAgICBpbmRleGVzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHsgXG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuSW5kZXhlcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBTYXZlZFNlYXJjaGVzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCB1cGRhdGUgc2F2ZWQgc2VhcmNoZXMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2Ygc2F2ZWQgc2VhcmNoZXNcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2hlcyA9IHN2Yy5zYXZlZFNlYXJjaGVzKCk7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2hlcy5mZXRjaChmdW5jdGlvbihlcnIsIHNhdmVkU2VhcmNoZXMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIE9mIFNhdmVkIFNlYXJjaGVzOiBcIiArIHNhdmVkU2VhcmNoZXMubGlzdCgpLmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXN9IFRoZSBgU2F2ZWRTZWFyY2hlc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgc2F2ZWRTZWFyY2hlczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU2F2ZWRTZWFyY2hlcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBTdG9yYWdlUGFzc3dvcmRzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdVxuICAgICAgICAgKiBjcmVhdGUsIGxpc3QsIGFuZCB1cGRhdGUgc3RvcmFnZSBwYXNzd29yZHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2Ygc3RvcmFnZSBwYXNzd29yZHNcbiAgICAgICAgICogICAgICB2YXIgc3RvcmFnZVBhc3N3b3JkcyA9IHN2Yy5zdG9yYWdlUGFzc3dvcmRzKCk7XG4gICAgICAgICAqICAgICAgc3RvcmFnZVBhc3N3b3Jkcy5mZXRjaChmdW5jdGlvbihlcnIsIHN0b3JhZ2VQYXNzd29yZHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCIjIG9mIFN0b3JhZ2UgUGFzc3dvcmRzOiBcIiArIHN0b3JhZ2VQYXNzd29yZHMubGlzdCgpLmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHN9IFRoZSBgU3RvcmFnZVBhc3N3b3Jkc2AgY29sbGVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHN0b3JhZ2UvcGFzc3dvcmRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi9cbiAgICAgICAgc3RvcmFnZVBhc3N3b3JkczogZnVuY3Rpb24obmFtZXNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuU3RvcmFnZVBhc3N3b3Jkcyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBgRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3VcbiAgICAgICAgICogbGlzdCBhbGVydCBncm91cHMuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAgICAgIFxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsICMgb2YgZmlyZWQgYWxlcnQgZ3JvdXBzXG4gICAgICAgICAqICAgICAgdmFyIGZpcmVkQWxlcnRHcm91cHMgPSBzdmMuZmlyZWRBbGVydEdyb3VwcygpO1xuICAgICAgICAgKiAgICAgIGZpcmVkQWxlcnRHcm91cHMuZmV0Y2goZnVuY3Rpb24oZXJyLCBmaXJlZEFsZXJ0R3JvdXBzKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiIyBvZiBhbGVydCBncm91cHM6IFwiICsgZmlyZWRBbGVydEdyb3Vwcy5saXN0KCkubGVuZ3RoKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbn0gVGhlIGBGaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uYCBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqIEBzZWUgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBmaXJlZEFsZXJ0R3JvdXBzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uKHRoaXMsIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBKb2JzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIGxpc3QsXG4gICAgICAgICAqIGFuZCByZXRyaWV2ZSBzZWFyY2ggam9icy4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gTGlzdCBhbGwgam9iIElEc1xuICAgICAgICAgKiAgICAgIHZhciBqb2JzID0gc3ZjLmpvYnMoKTtcbiAgICAgICAgICogICAgICBqb2JzLmZldGNoKGZ1bmN0aW9uKGVyciwgam9icykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IGpvYnMubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgKiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgXCIgKyAoaSsxKSArIFwiOiBcIiArIGxpc3RbaV0uc2lkKTtcbiAgICAgICAgICogICAgICAgICAgfVxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2JzfSBUaGUgYEpvYnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9ic1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGpvYnM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkpvYnModGhpcywgbmFtZXNwYWNlKTsgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBEYXRhTW9kZWxzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIGxpc3QsXG4gICAgICAgICAqIGFuZCByZXRyaWV2ZSBkYXRhIG1vZGVscy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICogQHNlZSBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGRhdGFNb2RlbHM6IGZ1bmN0aW9uKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkRhdGFNb2RlbHModGhpcywgbmFtZXNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgYFVzZXJzYCBjb2xsZWN0aW9uLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUsIFxuICAgICAgICAgKiBsaXN0LCBhbmQgcmV0cmlldmUgdXNlcnMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHVzZXJuYW1lc1xuICAgICAgICAgKiAgICAgIHZhciB1c2VycyA9IHN2Yy51c2VycygpO1xuICAgICAgICAgKiAgICAgIHVzZXJzLmZldGNoKGZ1bmN0aW9uKGVyciwgdXNlcnMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIGxpc3QgPSB1c2Vycy5saXN0KCk7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVzZXIgXCIgKyAoaSsxKSArIFwiOiBcIiArIGxpc3RbaV0ucHJvcGVydGllcygpLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcnN9IFRoZSBgVXNlcnNgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhdXRob3JpemF0aW9uL3VzZXJzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Vc2Vycyh0aGlzKTsgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGBWaWV3c2AgY29sbGVjdGlvbiwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlLFxuICAgICAgICAgKiBsaXN0LCBhbmQgcmV0cmlldmUgdmlld3MgKGN1c3RvbSBVSXMgYnVpbHQgaW4gU3BsdW5rJ3MgYXBwIGZyYW1ld29yaykuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIC8vIExpc3QgYWxsIHZpZXdzXG4gICAgICAgICAqICAgICAgdmFyIHZpZXdzID0gc3ZjLnZpZXdzKCk7XG4gICAgICAgICAqICAgICAgdmlld3MuZmV0Y2goZnVuY3Rpb24oZXJyLCB2aWV3cykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgbGlzdCA9IHZpZXdzLmxpc3QoKTtcbiAgICAgICAgICogICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVmlldyBcIiArIChpKzEpICsgXCI6IFwiICsgbGlzdFtpXS5wcm9wZXJ0aWVzKCkubmFtZSk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld3N9IFRoZSBgVmlld3NgIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBkYXRhL3VpL3ZpZXdzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKiBAc2VlIHNwbHVua2pzLlNlcnZpY2UuVmlld3NcbiAgICAgICAgICovXG4gICAgICAgIHZpZXdzOiBmdW5jdGlvbihuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5WaWV3cyh0aGlzLCBuYW1lc3BhY2UpOyAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNlYXJjaCBqb2Igd2l0aCBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycywgaW5jbHVkaW5nIGBleGVjX21vZGVgIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2Ygc2VhcmNoOlxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPW5vcm1hbGAgdG8gcmV0dXJuIGEgc2VhcmNoIGpvYiBJRCBpbW1lZGlhdGVseSAoZGVmYXVsdCkuXG4gICAgICAgICAqICAgICAgUG9sbCBmb3IgY29tcGxldGlvbiB0byBmaW5kIG91dCB3aGVuIHlvdSBjYW4gcmV0cmlldmUgc2VhcmNoIHJlc3VsdHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPWJsb2NraW5nYCB0byByZXR1cm4gdGhlIHNlYXJjaCBqb2IgSUQgd2hlbiB0aGUgc2VhcmNoIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRvIHJ1biBhIG9uZXNob3Qgc2VhcmNoLCB3aGljaCBkb2VzIG5vdCBjcmVhdGUgYSBqb2IgYnV0IHJhdGhlciByZXR1cm5zIHRoZSBzZWFyY2ggcmVzdWx0cywgdXNlIGBTZXJ2aWNlLm9uZXNob3RTZWFyY2hgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2Uuc2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgbmV3Sm9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiOiBuZXdKb2Iuc2lkKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiIGh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24obmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBqb2JzID0gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYnMuc2VhcmNoKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZ2V0IGEgYEpvYmAgYnkgaXRzIHNpZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNpZCBUaGUgc2VhcmNoIElEIGZvciBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgY3JlYXRlZCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0Sm9iOiBmdW5jdGlvbihzaWQsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhpcywgc2lkLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYi5mZXRjaCh7fSwgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBvbmVzaG90IHNlYXJjaCBmcm9tIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2Uub25lc2hvdFNlYXJjaChcInNlYXJjaCBFUlJPUlwiLCB7aWQ6IFwibXlqb2JfMTIzXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSRVNVTFQgRklFTERTXCI6IHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2g6XG4gICAgICAgICAqICAgIC0gYG91dHB1dF9tb2RlYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIHJlc3VsdHMgKFhNTCwgSlNPTiwgb3IgQ1NWKS5cbiAgICAgICAgICogICAgLSBgZWFybGllc3RfdGltZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBlYXJsaWVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGBsYXRlc3RfdGltZWAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIHRoZSBsYXRlc3QgdGltZSBpbiB0aGUgdGltZSByYW5nZSB0byBzZWFyY2guIFRoZSB0aW1lIHN0cmluZyBjYW4gYmUgYSBVVEMgdGltZSAod2l0aCBmcmFjdGlvbmFsIHNlY29uZHMpLCBhIHJlbGF0aXZlIHRpbWUgc3BlY2lmaWVyICh0byBub3cpLCBvciBhIGZvcm1hdHRlZCB0aW1lIHN0cmluZy5cbiAgICAgICAgICogICAgLSBgcmZgIChfc3RyaW5nXyk6IFNwZWNpZmllcyBvbmUgb3IgbW9yZSBmaWVsZHMgdG8gYWRkIHRvIHRoZSBzZWFyY2guXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgc2VhcmNoOiBgKGVyciwgcmVzdWx0cylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBvbmVzaG90U2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBuYW1lc3BhY2UsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrICYmIHV0aWxzLmlzRnVuY3Rpb24obmFtZXNwYWNlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBqb2JzID0gbmV3IHJvb3QuSm9icyh0aGlzLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGpvYnMub25lc2hvdFNlYXJjaChxdWVyeSwgcGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgdXNlciB0aGF0IGlzIGN1cnJlbnRseSBsb2dnZWQgaW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5jdXJyZW50VXNlcihmdW5jdGlvbihlcnIsIHVzZXIpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJSZWFsIG5hbWU6IFwiLCB1c2VyLnByb3BlcnRpZXMoKS5yZWFsbmFtZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSB1c2VyIGluc3RhbmNlOiBgKGVyciwgdXNlcilgLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLmN1cnJlbnRVc2VyfSBUaGUgYFVzZXJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgYXV0aG9yaXphdGlvbi9jdXJyZW50LWNvbnRleHRcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlXG4gICAgICAgICAqL1xuICAgICAgICBjdXJyZW50VXNlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMuZ2V0KFBhdGhzLmN1cnJlbnRVc2VyLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdXNlcm5hbWUgPSByZXNwb25zZS5kYXRhLmVudHJ5WzBdLmNvbnRlbnQudXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1c2VyID0gbmV3IHJvb3QuVXNlcih0aGF0LCB1c2VybmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5zZXJ2ZXJJbmZvKGZ1bmN0aW9uKGVyciwgaW5mbykge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNwbHVuayBWZXJzaW9uOiBcIiwgaW5mby5wcm9wZXJ0aWVzKCkudmVyc2lvbik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZXJ2ZXIgaW5mbzogYChlcnIsIGluZm8pYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlcnZlci9pbmZvXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZVxuICAgICAgICAgKi9cbiAgICAgICAgc2VydmVySW5mbzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHNlcnZlckluZm8gPSBuZXcgcm9vdC5TZXJ2ZXJJbmZvKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHNlcnZlckluZm8uZmV0Y2goY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhcnNlcyBhIHNlYXJjaCBxdWVyeS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnBhcnNlKFwic2VhcmNoIGluZGV4PV9pbnRlcm5hbCB8IGhlYWQgMVwiLCBmdW5jdGlvbihlcnIsIHBhcnNlKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWFuZHM6IFwiLCBwYXJzZS5jb21tYW5kcyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5IHRvIHBhcnNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEFuIG9iamVjdCBvZiBvcHRpb25zIGZvciB0aGUgcGFyc2VyOlxuICAgICAgICAgKiAgICAtIGBlbmFibGVfbG9va3Vwc2AgKF9ib29sZWFuXyk6IElmIGB0cnVlYCwgcGVyZm9ybXMgcmV2ZXJzZSBsb29rdXBzIHRvIGV4cGFuZCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG4gICAgICAgICAqICAgIC0gYG91dHB1dF9tb2RlYCAoX3N0cmluZ18pOiBUaGUgb3V0cHV0IGZvcm1hdCAoWE1MIG9yIEpTT04pLlxuICAgICAgICAgKiAgICAtIGBwYXJzZV9vbmx5YCAoX2Jvb2xlYW5fKTogSWYgYHRydWVgLCBkaXNhYmxlcyB0aGUgZXhwYW5zaW9uIG9mIHNlYXJjaCBkdWUgdG8gZXZhbHVhdGlvbiBvZiBzdWJzZWFyY2hlcywgdGltZSB0ZXJtIGV4cGFuc2lvbiwgbG9va3VwcywgdGFncywgZXZlbnR0eXBlcywgYW5kIHNvdXJjZXR5cGUgYWxpYXMuXG4gICAgICAgICAqICAgIC0gYHJlbG9hZF9tYWNyb3NgIChfYm9vbGVhbl8pOiBJZiBgdHJ1ZWAsIHJlbG9hZHMgbWFjcm8gZGVmaW5pdGlvbnMgZnJvbSBtYWNyb3MuY29uZi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHBhcnNlIGluZm86IGAoZXJyLCBwYXJzZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL3BhcnNlclxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBwYXJhbXMucSA9IHF1ZXJ5O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoUGF0aHMucGFyc2VyLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQcm92aWRlcyBhdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggcXVlcmllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLnR5cGVhaGVhZChcImluZGV4PVwiLCAxMCwgZnVuY3Rpb24oZXJyLCBvcHRpb25zKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQXV0b2NvbXBsZXRpb24gb3B0aW9uczogXCIsIG9wdGlvbnMpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcHJlZml4IFRoZSBxdWVyeSBmcmFnbWVudCB0byBhdXRvY29tcGxldGUuXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBUaGUgbnVtYmVyIG9mIG9wdGlvbnMgdG8gcmV0dXJuIChvcHRpb25hbCkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBhdXRvY29tcGxldGlvbiBpbmZvOiBgKGVyciwgb3B0aW9ucylgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL3R5cGVhaGVhZFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIHR5cGVhaGVhZDogZnVuY3Rpb24ocHJlZml4LCBjb3VudCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihjb3VudCkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvdW50O1xuICAgICAgICAgICAgICAgIGNvdW50ID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgY291bnQ6IGNvdW50IHx8IDEwLFxuICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoUGF0aHMudHlwZWFoZWFkLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IChyZXNwb25zZS5kYXRhIHx8IHt9KS5yZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzIHx8IFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMb2dzIGFuIGV2ZW50IHRvIFNwbHVuay5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBzZXJ2aWNlLmxvZyhcIkEgbmV3IGV2ZW50XCIsIHtpbmRleDogXCJfaW50ZXJuYWxcIiwgc291cmNldHlwZTogXCJteXNvdXJjZXR5cGVcIn0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3VibWl0dGVkIGV2ZW50OiBcIiwgcmVzdWx0KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBldmVudCBUaGUgdGV4dCBmb3IgdGhpcyBldmVudCwgb3IgYSBKU09OIG9iamVjdC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcGFyYW1ldGVycyBmb3IgaW5kZXhpbmc6IFxuICAgICAgICAgKiAgICAtIGBpbmRleGAgKF9zdHJpbmdfKTogVGhlIGluZGV4IHRvIHNlbmQgZXZlbnRzIGZyb20gdGhpcyBpbnB1dCB0by5cbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIHZhbHVlIHRvIHBvcHVsYXRlIGluIHRoZSBIb3N0IGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuIFxuICAgICAgICAgKiAgICAtIGBob3N0X3JlZ2V4YCAoX3N0cmluZ18pOiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGV4dHJhY3QgdGhlIGhvc3QgdmFsdWUgZnJvbSBlYWNoIGV2ZW50LiBcbiAgICAgICAgICogICAgLSBgc291cmNlYCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIFNvdXJjZSBmaWVsZCBmb3IgZXZlbnRzIGZyb20gdGhpcyBkYXRhIGlucHV0LlxuICAgICAgICAgKiAgICAtIGBzb3VyY2V0eXBlYCAoX3N0cmluZ18pOiBUaGUgdmFsdWUgdG8gcG9wdWxhdGUgaW4gdGhlIFNvdXJjZXR5cGUgZmllbGQgZm9yIGV2ZW50cyBmcm9tIHRoaXMgZGF0YSBpbnB1dC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHN1Ym1pdHRlZDogYChlcnIsIHJlc3VsdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcmVjZWl2ZXJzL3NpbXBsZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2VcbiAgICAgICAgICovXG4gICAgICAgIGxvZzogZnVuY3Rpb24oZXZlbnQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGlzIGEgSlNPTiBvYmplY3QsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBwYXRoID0gdGhpcy5wYXRocy5zdWJtaXRFdmVudDtcbiAgICAgICAgICAgIHZhciBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0ge1wiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwifTtcbiAgICAgICAgICAgIHZhciBib2R5ID0gZXZlbnQ7XG4gICAgICAgICAgICB2YXIgZ2V0ID0gcGFyYW1zO1xuICAgICAgICAgICAgdmFyIHBvc3QgPSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucmVxdWVzdChcbiAgICAgICAgICAgICAgICBwYXRoLCBcbiAgICAgICAgICAgICAgICBtZXRob2QsIFxuICAgICAgICAgICAgICAgIGdldCwgXG4gICAgICAgICAgICAgICAgcG9zdCwgXG4gICAgICAgICAgICAgICAgYm9keSwgXG4gICAgICAgICAgICAgICAgaGVhZGVycywgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYSBiYXNlIGRlZmluaXRpb24gZm9yIGEgU3BsdW5rIGVuZHBvaW50LCB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mXG4gICAgICogYSBzcGVjaWZpYyBzZXJ2aWNlIGFuZCBwYXRoLiBQcm92aWRlcyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBHRVQsIFBPU1QsIGFuZFxuICAgICAqIERFTEVURSBvcGVyYXRpb25zIHVzZWQgaW4gc3BsdW5ranMsIGF1dG9tYXRpY2FsbHkgcHJlcGFyaW5nIHRoZSBwYXRoIGNvcnJlY3RseVxuICAgICAqIGFuZCBhbGxvd2luZyBmb3IgcmVsYXRpdmUgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAqL1xuICAgIHJvb3QuRW5kcG9pbnQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1YWxpZmllZFBhdGggQSBmdWxseS1xdWFsaWZpZWQgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwiL3NlcnZpY2VzL3NlYXJjaC9qb2JzXCIpLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcXVhbGlmaWVkUGF0aCkge1xuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFzc2VkIGluIGEgbnVsbCBTZXJ2aWNlLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFxdWFsaWZpZWRQYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFzc2VkIGluIGFuIGVtcHR5IHBhdGguXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgdGhpcy5xdWFsaWZpZWRQYXRoID0gcXVhbGlmaWVkUGF0aDtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmdldCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5nZXQpO1xuICAgICAgICAgICAgdGhpcy5nZXRfdjIgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZ2V0X3YyKTtcbiAgICAgICAgICAgIHRoaXMucG9zdCAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnBvc3QpO1xuICAgICAgICAgICAgdGhpcy5kZWwgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGVsKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUGVyZm9ybXMgYSByZWxhdGl2ZSBHRVQgcmVxdWVzdCBvbiBhbiBlbmRwb2ludCdzIHBhdGgsXG4gICAgICAgICAqIGNvbWJpbmVkIHdpdGggdGhlIHBhcmFtZXRlcnMgYW5kIGEgcmVsYXRpdmUgcGF0aCBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gV2lsbCBtYWtlIGEgcmVxdWVzdCB0byB7c2VydmljZS5wcmVmaXh9L3NlYXJjaC9qb2JzLzEyMzQ1Ni9yZXN1bHRzP29mZnNldD0xXG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5nZXQoXCJyZXN1bHRzXCIsIHtvZmZzZXQ6IDF9LCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coXCJET05FXCIpKX0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVscGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBlbmRwb2ludCBwYXRoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgY29tcGxldGU6IGAoZXJyLCByZXNwb25zZSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnRcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24ocmVscGF0aCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMucXVhbGlmaWVkUGF0aDtcblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIHdlIHdpbGwgYXBwZW5kIGl0IHdpdGggYSBwcmVjZWRpbmdcbiAgICAgICAgICAgIC8vIHNsYXNoLlxuICAgICAgICAgICAgaWYgKHJlbHBhdGgpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcIi9cIiArIHJlbHBhdGg7ICAgIFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmdldChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldF92MjogZnVuY3Rpb24ocmVscGF0aCwgcGFyYW1zKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0X3YyKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIFBPU1QgcmVxdWVzdCBvbiBhbiBlbmRwb2ludCdzIHBhdGgsXG4gICAgICAgICAqIGNvbWJpbmVkIHdpdGggdGhlIHBhcmFtZXRlcnMgYW5kIGEgcmVsYXRpdmUgcGF0aCBpZiBzcGVjaWZpZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgLy8gV2lsbCBtYWtlIGEgcmVxdWVzdCB0byB7c2VydmljZS5wcmVmaXh9L3NlYXJjaC9qb2JzLzEyMzQ1Ni9jb250cm9sXG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImNhbmNlbFwifSwgZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKFwiQ0FOQ0VMTEVEXCIpKX0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVscGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gYXBwZW5kIHRvIHRoZSBlbmRwb2ludCBwYXRoLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIGJvZHkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlOiBgKGVyciwgcmVzcG9uc2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICAgICAqL1xuICAgICAgICBwb3N0OiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UucG9zdChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQZXJmb3JtcyBhIHJlbGF0aXZlIERFTEVURSByZXF1ZXN0IG9uIGFuIGVuZHBvaW50J3MgcGF0aCxcbiAgICAgICAgICogY29tYmluZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgYSByZWxhdGl2ZSBwYXRoIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAvLyBXaWxsIG1ha2UgYSByZXF1ZXN0IHRvIHtzZXJ2aWNlLnByZWZpeH0vc2VhcmNoL2pvYnMvMTIzNDU2XG4gICAgICAgICAqICAgICAgdmFyIGVuZHBvaW50ID0gbmV3IHNwbHVua2pzLlNlcnZpY2UuRW5kcG9pbnQoc2VydmljZSwgXCJzZWFyY2gvam9icy8xMjM0NVwiKTtcbiAgICAgICAgICogICAgICBlbmRwb2ludC5kZWxldGUoXCJcIiwge30sIGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyhcIkRFTEVURURcIikpfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZWxwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGVuZHBvaW50IHBhdGguXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIGVudGl0eS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgcXVlcnkgc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbmRwb2ludFxuICAgICAgICAgKi9cbiAgICAgICAgZGVsOiBmdW5jdGlvbihyZWxwYXRoLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcmVsYXRpdmUgcGF0aCwgd2Ugd2lsbCBhcHBlbmQgaXQgd2l0aCBhIHByZWNlZGluZ1xuICAgICAgICAgICAgLy8gc2xhc2guXG4gICAgICAgICAgICBpZiAocmVscGF0aCkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFwiL1wiICsgcmVscGF0aDsgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZGVsKFxuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBhIGJhc2UgZGVmaW5pdGlvbiBmb3IgYSBTcGx1bmsgcmVzb3VyY2UgKGZvciBleGFtcGxlLCBhbiBlbnRpdHkgXG4gICAgICogc3VjaCBhcyBhbiBpbmRleCBvciBzZWFyY2ggam9iLCBvciBhIGNvbGxlY3Rpb24gb2YgZW50aXRpZXMpLiBQcm92aWRlcyBcbiAgICAgKiBiYXNpYyBtZXRob2RzIGZvciBoYW5kbGluZyBTcGx1bmsgcmVzb3VyY2VzLCBzdWNoIGFzIHZhbGlkYXRpb24gYW5kIFxuICAgICAqIGFjY2Vzc2luZyBwcm9wZXJ0aWVzLiBcbiAgICAgKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5IGJlY2F1c2UgbW9zdCBtZXRob2RzIGFyZSBtZWFudCB0byBiZSBvdmVycmlkZGVuLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVuZHBvaW50XG4gICAgICovXG4gICAgcm9vdC5SZXNvdXJjZSA9IHJvb3QuRW5kcG9pbnQuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIEEgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwic2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgcGF0aCwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB2YXIgZnVsbHBhdGggPSBzZXJ2aWNlLmZ1bGxwYXRoKHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIGZ1bGxwYXRoKTtcbiAgICAgICAgICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLl9sb2FkICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLl9sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2ggICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgdGhpcy5wYXRoICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUmVzb3VyY2VcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSByZXNvdXJjZSBhbmQgc3RvcmVzIHRoZSBwcm9wZXJ0aWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWZyZXNoZXMgdGhlIHJlc291cmNlIGJ5IGZldGNoaW5nIHRoZSBvYmplY3QgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgICAqIGFuZCBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJldHJpZXZlZDogYChlcnIsIHJlc291cmNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1VU1QgQkUgT1ZFUlJJRERFTlwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcHJvcGVydGllcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICAgICAqL1xuICAgICAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBmdWxsIHN0YXRlIChwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSkgb2YgdGhpcyByZXNvdXJjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY3VycmVudCBmdWxsIHN0YXRlIG9mIHRoaXMgcmVzb3VyY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIGJhc2UgY2xhc3MgZm9yIGEgU3BsdW5rIGVudGl0eSwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgY29uc3RydWN0XG4gICAgICogd2l0aCBjZXJ0YWluIG9wZXJhdGlvbnMgKHN1Y2ggYXMgXCJwcm9wZXJ0aWVzXCIsIFwidXBkYXRlXCIsIGFuZCBcImRlbGV0ZVwiKS4gXG4gICAgICogRW50aXRpZXMgaW5jbHVkZSBzZWFyY2ggam9icywgaW5kZXhlcywgaW5wdXRzLCBhcHBzLCBhbmQgbW9yZS4gXG4gICAgICpcbiAgICAgKiBQcm92aWRlcyBiYXNpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU3BsdW5rIGVudGl0aWVzLCBzdWNoIGFzIGZldGNoaW5nIGFuZFxuICAgICAqIHVwZGF0aW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLlJlc291cmNlXG4gICAgICovXG4gICAgcm9vdC5FbnRpdHkgPSByb290LlJlc291cmNlLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHN0YXRpYyBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBcbiAgICAgICAgICogdXBkYXRlIHRvIGdldCB0aGUgdXBkYXRlZCBlbnRpdHkuIEJ5IGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IFxuICAgICAgICAgKiBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnMgKGVjaG9lcykgdGhlIHVwZGF0ZWQgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBmZXRjaE9uVXBkYXRlOiBmYWxzZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQSByZWxhdGl2ZSBlbmRwb2ludCBwYXRoIChmb3IgZXhhbXBsZSwgXCJzZWFyY2gvam9ic1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5FbnRpdHlgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5fbG9hZCAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuX2xvYWQpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaCAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZmV0Y2gpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkcyAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5maWVsZHMpO1xuICAgICAgICAgICAgdGhpcy5saW5rcyAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlua3MpO1xuICAgICAgICAgICAgdGhpcy5hY2wgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuYWNsKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmF1dGhvcik7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZWQgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGVkKTtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaGVkID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnB1Ymxpc2hlZCk7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZSAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5lbmFibGUpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZGlzYWJsZSk7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5yZWxvYWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fZmllbGRzICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fYWNsICAgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSBlbnRpdHkgYW5kIHN0b3JlcyB0aGUgcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIF9sb2FkOiBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gdXRpbHMuaXNBcnJheShwcm9wZXJ0aWVzKSA/IHByb3BlcnRpZXNbMF0gOiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwcm9wZXJ0aWVzIHRvXG4gICAgICAgICAgICAvLyBlbXB0eSB2YWx1ZXNcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB7fSxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgICAgIGFjbDoge30sXG4gICAgICAgICAgICAgICAgbGlua3M6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zdXBlcihwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGFrZSBvdXQgdGhlIGVudGl0eS1zcGVjaWZpYyBjb250ZW50XG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcy5jb250ZW50ICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl9maWVsZHMgICAgID0gcHJvcGVydGllcy5maWVsZHMgICAgfHwgdGhpcy5fZmllbGRzIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fYWNsICAgICAgICA9IHByb3BlcnRpZXMuYWNsICAgICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fbGlua3MgICAgICA9IHByb3BlcnRpZXMubGlua3MgICAgIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fYXV0aG9yICAgICA9IHByb3BlcnRpZXMuYXV0aG9yICAgIHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkICAgID0gcHJvcGVydGllcy51cGRhdGVkICAgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlZCAgPSBwcm9wZXJ0aWVzLnB1Ymxpc2hlZCB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgZmllbGRzIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSwgaW5kaWNhdGluZyB3aGljaCBcbiAgICAgICAgICogZmllbGRzIGFyZSB3aWxkY2FyZHMsIHJlcXVpcmVkLCBhbmQgb3B0aW9uYWwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGZpZWxkcyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSxcbiAgICAgICAgICogd2hpY2ggY29udGFpbnMgdGhlIHBlcm1pc3Npb25zIGZvciBhY2Nlc3NpbmcgdGhlIGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgQUNMLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBhY2w6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjbDtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGxpbmtzIGluZm9ybWF0aW9uIGZvciB0aGlzIGVudGl0eSwgd2hpY2ggaXMgdGhlIFVSSSBvZlxuICAgICAgICAgKiB0aGUgZW50aXR5IHJlbGF0aXZlIHRvIHRoZSBtYW5hZ2VtZW50IHBvcnQgb2YgYSBTcGx1bmsgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGxpbmtzIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICBsaW5rczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlua3M7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBhdXRob3IgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBhdXRob3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGF1dGhvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgdXBkYXRlZCB0aW1lIGZvciB0aGlzIGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgdXBkYXRlZCB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVkO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgcHVibGlzaGVkIHRpbWUgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBwdWJsaXNoZWQgdGltZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGlzaGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wdWJsaXNoZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIHRoZSBlbnRpdHkgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIFxuICAgICAgICAgKiBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIGNvbGxlY3Rpb24gZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uIG9wdGlvbnM6XG4gICAgICAgICAqICAgIC0gYGNvdW50YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgb2Zmc2V0YCAoX2ludGVnZXJfKTogVGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgaXRlbSB0byByZXR1cm4uXG4gICAgICAgICAqICAgIC0gYHNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSB0byBmaWx0ZXIgcmVzcG9uc2VzLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2RpcmAgKF9zdHJpbmdfKTogVGhlIGRpcmVjdGlvbiB0byBzb3J0IHJldHVybmVkIGl0ZW1zOiDigJxhc2PigJ0gb3Ig4oCcZGVzY+KAnS5cbiAgICAgICAgICogICAgLSBgc29ydF9rZXlgIChfc3RyaW5nXyk6IFRoZSBmaWVsZCB0byB1c2UgZm9yIHNvcnRpbmcgKG9wdGlvbmFsKS5cbiAgICAgICAgICogICAgLSBgc29ydF9tb2RlYCAoX3N0cmluZ18pOiBUaGUgY29sbGF0aW5nIHNlcXVlbmNlIGZvciBzb3J0aW5nIHJldHVybmVkIGl0ZW1zOiDigJxhdXRv4oCdLCDigJxhbHBoYeKAnSwg4oCcYWxwaGFfY2FzZeKAnSwgb3Ig4oCcbnVt4oCdLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHJldHJpZXZlZDogYChlcnIsIHJlc291cmNlKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcIlwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YSA/IHJlc3BvbnNlLmRhdGEuZW50cnkgOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogRGVsZXRlcyB0aGUgZW50aXR5IGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBkZWxldGVkOiBgKGVycilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsKFwiXCIsIHt9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgZW50aXR5IG9uIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyB0byB1cGRhdGUgdGhlIG9iamVjdCB3aXRoLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb2JqZWN0IGlzIHVwZGF0ZWQ6IGAoZXJyLCBlbnRpdHkpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb3BzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCAnbmFtZScgZmllbGQgaW4gJ3VwZGF0ZSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcHJvcHMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiAhdGhhdC5mZXRjaE9uVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2xvYWQocmVzcG9uc2UuZGF0YS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlcnIgJiYgdGhhdC5mZXRjaE9uVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZmV0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLndhc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc2FibGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBkaXNhYmxlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMucG9zdChcImRpc2FibGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyBlbmFibGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBvc3QoXCJlbmFibGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWxvYWRzIHRoZSBlbnRpdHkgb24gdGhlIHNlcnZlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyByZWxvYWRlZDogYChlcnIsIGVudGl0eSlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbG9hZDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5wb3N0KFwiX3JlbG9hZFwiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgYmFzZSBjbGFzcyBmb3IgYSBTcGx1bmsgY29sbGVjdGlvbiwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgY29uc3RydWN0XG4gICAgICogdGhhdCBwcm92aWRlcyBiYXNpYyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggY29sbGVjdGlvbnMgb2YgZW50aXRpZXMsIHN1Y2ggYXMgXG4gICAgICogY3JlYXRpbmcgYW5kIGxpc3RpbmcgZW50aXRpZXMuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5SZXNvdXJjZVxuICAgICAqL1xuICAgIHJvb3QuQ29sbGVjdGlvbiA9IHJvb3QuUmVzb3VyY2UuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgc3RhdGljIHByb3BlcnR5IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIFxuICAgICAgICAgKiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBcbiAgICAgICAgICogYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJucyAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cblxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvbmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIEEgcmVsYXRpdmUgZW5kcG9pbnQgcGF0aCAoZm9yIGV4YW1wbGUsIFwic2VhcmNoL2pvYnNcIikuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb259IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBwYXRoLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHBhdGgsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdGhlIGJpbmRpbmdzIHNvIHRoYXQgZXZlcnkgZnVuY3Rpb24gd29ya3MgXG4gICAgICAgICAgICAvLyBwcm9wZXJseSB3aGVuIGl0IGlzIHBhc3NlZCBhcyBhIGNhbGxiYWNrLlxuICAgICAgICAgICAgdGhpcy5fbG9hZCAgICAgICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5fbG9hZCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZldGNoKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3JlYXRlKTtcbiAgICAgICAgICAgIHRoaXMubGlzdCAgICAgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlzdCk7XG4gICAgICAgICAgICB0aGlzLml0ZW0gICAgICAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5pbnN0YW50aWF0ZUVudGl0eSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllcyAgICAgICA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZW50aXRpZXNCeU5hbWUgPSB7fTsgICAgXG4gICAgICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fcGFnaW5nICAgICAgICAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuX2xpbmtzICAgICAgICAgID0ge307IFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBlbnRpdHkuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgZW50aXR5LlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eX0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTVVTVCBCRSBPVkVSUklEREVOXCIpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIExvYWRzIHRoZSBjb2xsZWN0aW9uIGFuZCBwcm9wZXJ0aWVzLCBhbmQgY3JlYXRlcyBhIG1hcCBvZiBlbnRpdHlcbiAgICAgICAgICogbmFtZXMgdG8gZW50aXR5IElEcyAoZm9yIHJldHJpZXZhbCBwdXJwb3NlcykuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfbG9hZDogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIocHJvcGVydGllcyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGVudGl0aWVzQnlOYW1lID0ge307XG4gICAgICAgICAgICB2YXIgZW50aXR5UHJvcGVydHlMaXN0ID0gcHJvcGVydGllcy5lbnRyeSB8fCBbXTtcbiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbnRpdHlQcm9wZXJ0eUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBlbnRpdHlQcm9wZXJ0eUxpc3RbaV07XG4gICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IHRoaXMuaW5zdGFudGlhdGVFbnRpdHkocHJvcHMpO1xuICAgICAgICAgICAgICAgIGVudGl0eS5fbG9hZChwcm9wcyk7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChlbnRpdHkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChlbnRpdGllc0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShlbnRpdHkubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNCeU5hbWVbZW50aXR5Lm5hbWVdLnB1c2goZW50aXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0aWVzQnlOYW1lW2VudGl0eS5uYW1lXSA9IFtlbnRpdHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzICAgICAgID0gZW50aXRpZXM7XG4gICAgICAgICAgICB0aGlzLl9lbnRpdGllc0J5TmFtZSA9IGVudGl0aWVzQnlOYW1lO1xuICAgICAgICAgICAgdGhpcy5fcGFnaW5nICAgICAgICAgPSBwcm9wZXJ0aWVzLnBhZ2luZyAgICB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX2xpbmtzICAgICAgICAgID0gcHJvcGVydGllcy5saW5rcyAgICAgfHwge307XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVkICAgICAgICA9IHByb3BlcnRpZXMudXBkYXRlZCAgIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBsaW5rcyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb2xsZWN0aW9uLCB3aGljaCBpcyB0aGUgVVJJIG9mXG4gICAgICAgICAqIHRoZSByZXNvdXJjZSByZWxhdGl2ZSB0byB0aGUgbWFuYWdlbWVudCBwb3J0IG9mIGEgU3BsdW5rIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsaW5rcyBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5rcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSBhdXRob3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwYWdpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luZztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVwZGF0ZWQgdGltZSBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB1cGRhdGVkIHRpbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVkO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyB0aGUgcmVzb3VyY2UgYnkgZmV0Y2hpbmcgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIFxuICAgICAgICAgKiBsb2FkaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgY291bnRgIChfaW50ZWdlcl8pOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLlxuICAgICAgICAgKiAgICAtIGBvZmZzZXRgIChfaW50ZWdlcl8pOiBUaGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBpdGVtIHRvIHJldHVybi5cbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGZpbHRlciByZXNwb25zZXMuXG4gICAgICAgICAqICAgIC0gYHNvcnRfZGlyYCAoX3N0cmluZ18pOiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgcmV0dXJuZWQgaXRlbXM6IOKAnGFzY+KAnSBvciDigJxkZXNj4oCdLlxuICAgICAgICAgKiAgICAtIGBzb3J0X2tleWAgKF9zdHJpbmdfKTogVGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZyAob3B0aW9uYWwpLlxuICAgICAgICAgKiAgICAtIGBzb3J0X21vZGVgIChfc3RyaW5nXyk6IFRoZSBjb2xsYXRpbmcgc2VxdWVuY2UgZm9yIHNvcnRpbmcgcmV0dXJuZWQgaXRlbXM6IOKAnGF1dG/igJ0sIOKAnGFscGhh4oCdLCDigJxhbHBoYV9jYXNl4oCdLCBvciDigJxudW3igJ0uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBvYmplY3QgaXMgcmV0cmlldmVkOiBgKGVyciwgcmVzb3VyY2UpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGZldGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoYXQuZ2V0KFwiXCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9sb2FkKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcblxuICAgICAgICBmZXRjaF92MjogYXN5bmMgZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgdGhhdC5nZXRfdjIoXCJcIiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAvLyByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGF0Ll9sb2FkKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHNwZWNpZmljIGVudGl0eSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHBzID0gc2VydmljZS5hcHBzKCk7XG4gICAgICAgICAqICAgICAgYXBwcy5mZXRjaChmdW5jdGlvbihlcnIsIGFwcHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIGFwcCA9IGFwcHMuaXRlbShcInNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTZWFyY2ggQXBwIEZvdW5kOiBcIiArICEhYXBwKTtcbiAgICAgICAgICogICAgICAgICAgLy8gYGFwcGAgaXMgYW4gQXBwbGljYXRpb24gb2JqZWN0LlxuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0byByZXRyaWV2ZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSB3aWxkY2FyZCB2YWx1ZSBcIi1cIiwgaXMgbm90IGFjY2VwdGFibGUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eS5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSB3aWxkY2FyZCB2YWx1ZSBcIi1cIiBpcyB1bmFjY2VwdGFibGUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eS5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybnMge3NwbHVua2pzLlNlcnZpY2UuRW50aXR5fSBUaGUgZW50aXR5LCBvciBgbnVsbGAgaWYgb25lIGlzIG5vdCBmb3VuZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGl0ZW06IGZ1bmN0aW9uKGlkLCBuYW1lc3BhY2UpIHsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNFbXB0eShuYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICAgICAgICAgIH0gICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IHN1cGx5IGEgbm9uLWVtcHR5IG5hbWUuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmFtZXNwYWNlICYmIChuYW1lc3BhY2UuYXBwID09PSAnLScgfHwgbmFtZXNwYWNlLm93bmVyID09PSAnLScpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2hlbiBzZWFyY2hpbmcgZm9yIGFuIGVudGl0eSwgd2lsZGNhcmRzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgbmFtZXNwYWNlLiBQbGVhc2UgcmVmaW5lIHlvdXIgc2VhcmNoLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGZ1bGxQYXRoID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnRpdGllc0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXRpZXMgPSB0aGlzLl9lbnRpdGllc0J5TmFtZVtpZF07ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAxICYmICFuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgZW50aXR5IHdpdGggdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBuYW1lIGFuZCB0aGUgdXNlciBkaWQgbm90XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHRoZW4gd2UganVzdFxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gaXRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDEgJiYgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHNwZWNpZmllZCBhIG5hbWVzcGFjZSwgdGhlbiB3ZSBcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSByZXR1cm4gdGhlIGVudGl0eSBpZiBpdCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmdWxsIHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZnVsbFBhdGggPSB0aGlzLnNlcnZpY2UuZnVsbHBhdGgoZW50aXRpZXNbMF0ucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXRpZXNbMF0ucXVhbGlmaWVkUGF0aCA9PT0gZnVsbFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdGllc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVudGl0aWVzLmxlbmd0aCA+IDEgJiYgIW5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGVudGl0eSBhbmQgd2UgZGlkbid0XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgYSBuYW1lc3BhY2UsIHRoZW4gd2UgcmV0dXJuIGFuIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHNheWluZyB0aGUgbWF0Y2ggaXMgYW1iaWd1b3VzXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFtYmlndW91cyBtYXRjaCBmb3IgbmFtZSAnXCIgKyBpZCArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZW50aXR5LCBhbmQgd2UgZG8gaGF2ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhIG5hbWVzcGFjZSwgc28gd2UgdHJ5IGFuZCBmaW5kIGl0XG4gICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFBhdGggPSB0aGlzLnNlcnZpY2UuZnVsbHBhdGgoZW50aXRpZXNbaV0ucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eS5xdWFsaWZpZWRQYXRoID09PSBmdWxsUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9ICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gZW50aXR5IG9uIHRoZSBzZXJ2ZXIgZm9yIHRoaXMgY29sbGVjdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWRcbiAgICAgICAgICogcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYXBwcyA9IHNlcnZpY2UuYXBwcygpO1xuICAgICAgICAgKiAgICAgIGFwcHMuY3JlYXRlKHtuYW1lOiBcIk5ld1NlYXJjaEFwcFwifSwgZnVuY3Rpb24oZXJyLCBuZXdBcHApIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBlbnRpdHktc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZTogYChlcnIsIHJlc3BvbnNlKWAuXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVua2pzLlNlcnZpY2UuRW50aXR5YCBvYmplY3RzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiXCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlc3BvbnNlLmRhdGEuZW50cnk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSBwcm9wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IHRoYXQuaW5zdGFudGlhdGVFbnRpdHkocHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHkuX2xvYWQocHJvcHMpOyBcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZldGNoT25FbnRpdHlDcmVhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgZW50aXRpZXMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGFwcHMgPSBzZXJ2aWNlLmFwcHMoKTtcbiAgICAgICAgICogICAgICBhcHBzLmZldGNoKGZ1bmN0aW9uKGVyciwgYXBwcykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgYXBwTGlzdCA9IGFwcHMubGlzdCgpO1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhhcHBMaXN0Lmxlbmd0aCk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBsaXN0IG9mIGVudGl0aWVzOiBgKGVyciwgbGlzdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbGlzdDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLmNsb25lKHRoaXMuX2VudGl0aWVzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzYXZlZCBzZWFyY2gsIHdoaWNoIHlvdSBjYW4gdGhlbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzYXZlZC9zZWFyY2hlcy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5TYXZlZFNlYXJjaCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnNhdmVkU2VhcmNoZXMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IHNhdmVkIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2h9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmFja25vd2xlZGdlICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5hY2tub3dsZWRnZSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5kaXNwYXRjaCk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5oaXN0b3J5KTtcbiAgICAgICAgICAgIHRoaXMuc3VwcHJlc3NJbmZvID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnN1cHByZXNzSW5mbyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGNvdW50IG9mIHRyaWdnZXJlZCBhbGVydHMgZm9yIHRoaXMgc2F2ZWRTZWFyY2gsXG4gICAgICAgICAqIGRlZmF1bHRpbmcgdG8gMCB3aGVuIHVuZGVmaW5lZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICB2YXIgYWxlcnRDb3VudCA9IHNhdmVkU2VhcmNoLmFsZXJ0Q291bnQoKTtcbiAgICAgICAgICogXG4gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIGNvdW50IG9mIHRyaWdnZXJlZCBhbGVydHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgYWxlcnRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0X2NvdW50LCAxMCkgfHwgMDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWNrbm93bGVkZ2VzIHRoZSBzdXBwcmVzc2lvbiBvZiB0aGUgYWxlcnRzIGZyb20gYSBzYXZlZCBzZWFyY2ggYW5kXG4gICAgICAgICAqIHJlc3VtZXMgYWxlcnRpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guYWNrbm93bGVkZ2UoZnVuY3Rpb24oZXJyLCBzZWFyY2gpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJBQ0tOT1dMRURHRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzYXZlZCBzZWFyY2ggaXMgYWNrbm93bGVkZ2VkOiBgKGVyciwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9hY2tub3dsZWRnZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGFja25vd2xlZGdlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiYWNrbm93bGVkZ2VcIiwge30sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNwYXRjaGVzIGEgc2F2ZWQgc2VhcmNoLCB3aGljaCBjcmVhdGVzIGEgc2VhcmNoIGpvYiBhbmQgcmV0dXJucyBhIFxuICAgICAgICAgKiBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlIGluIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgc2F2ZWRTZWFyY2ggPSBzZXJ2aWNlLnNhdmVkU2VhcmNoZXMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICogICAgICBzYXZlZFNlYXJjaC5kaXNwYXRjaCh7Zm9yY2VfZGlzcGF0Y2g6IGZhbHNlfSwgZnVuY3Rpb24oZXJyLCBqb2IsIHNhdmVkU2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSm9iIFNJRDogXCIsIGpvYi5zaWQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgZGlzcGF0Y2hpbmcgdGhpcyBzYXZlZCBzZWFyY2g6XG4gICAgICAgICAqICAgIC0gYGRpc3BhdGNoLm5vd2AgKF9zdHJpbmdfKTogVGhlIHRpbWUgdGhhdCBpcyB1c2VkIHRvIGRpc3BhdGNoIHRoZSBzZWFyY2ggYXMgdGhvdWdoIHRoZSBzcGVjaWZpZWQgdGltZSB3ZXJlIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICAgICAqICAgIC0gYGRpc3BhdGNoLipgIChfc3RyaW5nXyk6IE92ZXJ3cml0ZXMgdGhlIHZhbHVlIG9mIHRoZSBzZWFyY2ggZmllbGQgc3BlY2lmaWVkIGluICouXG4gICAgICAgICAqICAgIC0gYHRyaWdnZXJfYWN0aW9uc2AgKF9ib29sZWFuXyk6IEluZGljYXRlcyB3aGV0aGVyIHRvIHRyaWdnZXIgYWxlcnQgYWN0aW9ucy5cbiAgICAgICAgICogICAgLSBgZm9yY2VfZGlzcGF0Y2hgIChfYm9vbGVhbl8pOiBJbmRpY2F0ZXMgd2hldGhlciB0byBzdGFydCBhIG5ldyBzZWFyY2ggaWYgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGlzIHNlYXJjaCBpcyBhbHJlYWR5IHJ1bm5pbmcuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzYXZlZCBzZWFyY2ggaXMgZGlzcGF0Y2hlZDogYChlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9kaXNwYXRjaFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hcbiAgICAgICAgICovXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJkaXNwYXRjaFwiLCBvcHRpb25zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBzaWQgPSByZXNwb25zZS5kYXRhLnNpZDtcbiAgICAgICAgICAgICAgICB2YXIgam9iID0gbmV3IHJvb3QuSm9iKHRoYXQuc2VydmljZSwgc2lkLCB0aGF0Lm5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgam9iLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKiBcbiAgICAgICAgICogR2V0cyB0aGUgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwYCBmb3IgZmlyZWRBbGVydHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2F2ZWQgc2VhcmNoLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhbGVydHMgPSBzZXJ2aWNlLmZpcmVkQWxlcnRHcm91cHMoKS5pdGVtKFwiTXlTYXZlZFNlYXJjaFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEFuIEFsZXJ0R3JvdXAgb2JqZWN0IHdpdGggdGhlXG4gICAgICAgICAqIHNhbWUgbmFtZSBhcyB0aGlzIFNhdmVkU2VhcmNoIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoXG4gICAgICAgICAqL1xuICAgICAgICBmaXJlZEFsZXJ0R3JvdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cCh0aGlzLnNlcnZpY2UsIHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgam9iIGhpc3RvcnkgZm9yIGEgc2F2ZWQgc2VhcmNoLCB3aGljaCBpcyBhIGxpc3Qgb2YgXG4gICAgICAgICAqIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBzYXZlZFNlYXJjaCA9IHNlcnZpY2Uuc2F2ZWRTZWFyY2hlcygpLml0ZW0oXCJNeVNhdmVkU2VhcmNoXCIpO1xuICAgICAgICAgKiAgICAgIHNhdmVkU2VhcmNoLmhpc3Rvcnkoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgam9icywgc2VhcmNoKSB7XG4gICAgICAgICAqICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBqb2JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAqICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkpvYlwiLCBpLCBcIjpcIiwgam9ic1tpXS5zaWQpO1xuICAgICAgICAgKiAgICAgICAgICB9XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZm9yIHJldHJpZXZpbmcgaGlzdG9yeS4gRm9yIGEgZnVsbCBsaXN0LCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay84LjAuMi9SRVNUUkVGL1JFU1Rwcm9sb2cjUGFnaW5hdGlvbl9hbmRfZmlsdGVyaW5nX3BhcmFtZXRlcnNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5QYWdpbmF0aW9uIGFuZCBGaWx0ZXJpbmcgb3B0aW9uczwvYT4gaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBoaXN0b3J5IGlzIHJldHJpZXZlZDogYChlcnIsIGpvYiwgc2F2ZWRTZWFyY2gpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNhdmVkL3NlYXJjaGVzL3tuYW1lfS9oaXN0b3J5XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgaGlzdG9yeTogZnVuY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJoaXN0b3J5XCIsIG9wdGlvbnMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGpvYnMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnkgfHwgW107XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYkRhdGEgPSByZXNwb25zZS5kYXRhLmVudHJ5W2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMoam9iRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2IgPSBuZXcgcm9vdC5Kb2IodGhhdC5zZXJ2aWNlLCBqb2JEYXRhLm5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBqb2IuX2xvYWQoam9iRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBqb2JzLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgc3VwcHJlc3Npb24gc3RhdGUgb2YgYSBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIHNhdmVkU2VhcmNoID0gc2VydmljZS5zYXZlZFNlYXJjaGVzKCkuaXRlbShcIk15U2F2ZWRTZWFyY2hcIik7XG4gICAgICAgICAqICAgICAgc2F2ZWRTZWFyY2guaGlzdG9yeShmdW5jdGlvbihlcnIsIHN1cHByZXNzaW9uU3RhdGUsIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNUQVRFOiBcIiwgc3VwcHJlc3Npb25TdGF0ZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzdXBwcmVzc2lvbiBzdGF0ZSBpcyByZXRyaWV2ZWQ6IGAoZXJyLCBzdXBwcmVzc2lvblN0YXRlLCBzYXZlZFNlYXJjaClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXMve25hbWV9L3N1cHByZXNzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgc3VwcHJlc3NJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdXBwcmVzc1wiLCB7fSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIHNhdmVkIHNlYXJjaCBvbiB0aGUgc2VydmVyLiBcbiAgICAgICAgICpcbiAgICAgICAgICogKipOb3RlOioqIFRoZSBzZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQsIGV2ZW4gd2hlbiBpdCBpc24ndCBiZWluZyBtb2RpZmllZC5cbiAgICAgICAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgaXQsIHRoaXMgbWV0aG9kIHdpbGwgZmV0Y2ggdGhlIHNlYXJjaCBzdHJpbmcgZnJvbVxuICAgICAgICAgKiB0aGUgc2VydmVyIG9yIGZyb20gdGhlIGxvY2FsIGNhY2hlLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgc2VhcmNoIHdpdGguIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzYXZlZHNlYXJjaHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNhdmVkIHNlYXJjaCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9iamVjdCBpcyB1cGRhdGVkOiBgKGVyciwgZW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaFxuICAgICAgICAgKi9cbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyYW1zLnNlYXJjaCkge1xuICAgICAgICAgICAgICAgIHZhciB1cGRhdGUgPSB0aGlzLl9zdXBlcjtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5mZXRjaChmdW5jdGlvbihlcnIsIHNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnNlYXJjaCA9IHNlYXJjaC5wcm9wZXJ0aWVzKCkuc2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLmNhbGwoc2VhcmNoLCBwYXJhbXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFib3J0ZWQsIHNvIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzYXZlZCBzZWFyY2hlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc2F2ZWQgXG4gICAgICogc2VhcmNoZXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc2F2ZWQgc2VhcmNoLlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgc2F2ZWQvc2VhcmNoZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovXG4gICAgcm9vdC5TYXZlZFNlYXJjaGVzID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuc2F2ZWRTZWFyY2hlcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgYSBzYXZlZCBzZWFyY2guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBzYXZlZCBzZWFyY2guIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzYXZlZHNlYXJjaHBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNhdmVkIHNlYXJjaCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlNhdmVkU2VhcmNoKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU2F2ZWRTZWFyY2hlc2AuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaGVzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlNhdmVkU2VhcmNoZXNcbiAgICAgICAgICovICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIHN0b3JhZ2UgcGFzc3dvcmQsIHdoaWNoIHlvdSBjYW4gdGhlbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzdG9yYWdlL3Bhc3N3b3Jkcy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuU3RvcmFnZVBhc3N3b3JkID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5zdG9yYWdlUGFzc3dvcmRzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IHN0b3JhZ2UgcGFzc3dvcmQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZFxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBzdG9yYWdlIHBhc3N3b3Jkcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgc3RvcmFnZSBcbiAgICAgKiBwYXNzd29yZHMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzdG9yYWdlL3Bhc3N3b3Jkc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LlN0b3JhZ2VQYXNzd29yZHMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiBlbnRpdHkgaGFzIGJlZW4gY3JlYXRlZC4gQnkgXG4gICAgICAgICAqIGRlZmF1bHQsIHRoZSBlbnRpdHkgaXMgbm90IGZldGNoZWQgYmVjYXVzZSB0aGUgZW5kcG9pbnQgcmV0dXJuc1xuICAgICAgICAgKiAoZWNob2VzKSB0aGUgbmV3IGVudGl0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnN0b3JhZ2VQYXNzd29yZHM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgc3RvcmFnZSBwYXNzd29yZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHN0b3JhZ2UgcGFzc3dvcmQuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsXG4gICAgICAgICAqIHNlZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUYWNjZXNzI1BPU1Rfc3RvcmFnZS4yRnBhc3N3b3Jkc1wiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgKiBQT1NUIHN0b3JhZ2UvcGFzc3dvcmRzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5TYXZlZFNlYXJjaH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3JkYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5TdG9yYWdlUGFzc3dvcmQodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5TdG9yYWdlUGFzc3dvcmRzYC4gXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlN0b3JhZ2VQYXNzd29yZHNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU3RvcmFnZVBhc3N3b3Jkc1xuICAgICAgICAgKi8gICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZmlyZWQgYWxlcnQuIFxuICAgICAqIFlvdSBjYW4gcmV0cmlldmUgc2V2ZXJhbCBvZiB0aGUgZmlyZWQgYWxlcnQncyBwcm9wZXJ0aWVzIGJ5XG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gbmFtZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhbGVydHMvZmlyZWRfYWxlcnRzL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuZmlyZWRBbGVydHMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBhY3Rpb25zIChzdWNoIGFzIG5vdGlmeWluZyBieSBlbWFpbCwgcnVubmluZyBhIFxuICAgICAgICAgKiBzY3JpcHQsIGFkZGluZyB0byBSU1MsIHRyYWNraW5nIGluIEFsZXJ0IE1hbmFnZXIsIGFuZCBlbmFibGluZyBcbiAgICAgICAgICogc3VtbWFyeSBpbmRleGluZykuIFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgYWN0aW9ucywgYW4gZW1wdHkge0FycmF5fSBpZiBubyBhY3Rpb25zXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBhY3Rpb25zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS5hY3Rpb25zIHx8IFtdO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyB0eXBlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBhbGVydCdzIHR5cGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBhbGVydFR5cGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmFsZXJ0X3R5cGUgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBpcyBhIHNldCBvZiBldmVudHMgKGRpZ2VzdCkgb3IgYSBzaW5nbGVcbiAgICAgICAgICogZXZlbnQgKHBlciByZXN1bHQpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlc3VsdCBpcyBhIGRpZ2VzdCwgZmFsc2UgaWYgcGVyIHJlc3VsdFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgaXNEaWdlc3RNb2RlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdGhpcyBwcm9wZXJ0eSB0byBhIEJvb2xlYW5cbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucHJvcGVydGllcygpLmRpZ2VzdF9tb2RlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSByZW5kZXJlZCBleHBpcmF0aW9uIHRpbWUgZm9yIHRoaXMgYWxlcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpbiBTcGx1bmsgNC4zIGFuZCBsYXRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydFxuICAgICAgICAgKi9cbiAgICAgICAgZXhwaXJhdGlvblRpbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLmV4cGlyYXRpb25fdGltZV9yZW5kZXJlZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBzYXZlZCBzZWFyY2ggZm9yIHRoaXMgYWxlcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhlIHNhdmVkIHNlYXJjaCBuYW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNhdmVkU2VhcmNoTmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzKCkuc2F2ZWRzZWFyY2hfbmFtZSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBzZXZlcml0eSBvbiBhIHNjYWxlIG9mIDEgdG8gMTAsIHdpdGggMSBiZWluZyB0aGVcbiAgICAgICAgICogaGlnaGVzdCBzZXZlcml0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSB0aGlzIGFsZXJ0J3Mgc2V2ZXJpdHksIC0xIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHNldmVyaXR5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXMoKS5zZXZlcml0eSwgMTApIHx8IC0xO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoaXMgYWxlcnQncyBzZWFyY2ggSUQgKFNJRCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhpcyBhbGVydCdzIFNJRCwgb3Ige251bGx9IGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICBzaWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcygpLnNpZCB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSB0aW1lIHRoaXMgYWxlcnQgd2FzIHRyaWdnZXJlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSBUaGlzIGFsZXJ0J3MgdHJpZ2dlciB0aW1lLCBvciB7bnVsbH0gaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJUaW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyX3RpbWUgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGlzIGFsZXJ0J3MgcmVuZGVyZWQgdHJpZ2dlciB0aW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gU3BsdW5rIDQuMyBhbmQgbGF0ZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gVGhpcyBhbGVydCdzIHJlbmRlcmVkIHRyaWdnZXIgdGltZSwgb3Ige251bGx9IGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqL1xuICAgICAgICB0cmlnZ2VyVGltZVJlbmRlcmVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMoKS50cmlnZ2VyX3RpbWVfcmVuZGVyZWQgfHwgbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIGluIFNwbHVuayA0LjMgYW5kIGxhdGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgdHJpZ2dlcmVkIGFsZXJ0cywgb3IgLTEgaWYgbm90IHNwZWNpZmllZC5cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRcbiAgICAgICAgICovXG4gICAgICAgIHRyaWdnZXJlZEFsZXJ0Q291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllcygpLnRyaWdnZXJlZF9hbGVydHMsIDEwKSB8fCAtMTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBmb3IgdGhlIG5ldyBhbGVydCBncm91cC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0XG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBhbGVydCBncm91cCwgd2hpY2ggeW91IGNhbiB0aGVuIHZpZXcgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFsZXJ0cy9maXJlZF9hbGVydHMve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkZpcmVkQWxlcnRHcm91cCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5maXJlZEFsZXJ0cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGB0cmlnZ2VyZWRfYWxlcnRfY291bnRgIHByb3BlcnR5LCB0aGUgY291bnRcbiAgICAgICAgICogb2YgdHJpZ2dlcmVkIGFsZXJ0cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfSB0aGUgY291bnQgb2YgdHJpZ2dlcmVkIGFsZXJ0c1xuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwXG4gICAgICAgICAqL1xuICAgICAgICBjb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzKCkudHJpZ2dlcmVkX2FsZXJ0X2NvdW50LCAxMCkgfHwgMDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBmaXJlZCBpbnN0YW5jZXMgb2YgdGhpcyBhbGVydCwgd2hpY2ggaXNcbiAgICAgICAgICogYSBsaXN0IG9mIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRgIGluc3RhbmNlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgYWxlcnRHcm91cCA9IHNlcnZpY2UuZmlyZWRBbGVydEdyb3VwcygpLml0ZW0oXCJNeUFsZXJ0XCIpO1xuICAgICAgICAgKiAgICAgIGFsZXJ0R3JvdXAubGlzdChmdW5jdGlvbihlcnIsIGZpcmVkQWxlcnRzLCBhbGVydCkge1xuICAgICAgICAgKiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZmlyZWRBbGVydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmlyZWQgYWxlcnRcIiwgaSwgXCI6XCIsIGZpcmVkQWxlcnRzW2ldLnNpZCk7XG4gICAgICAgICAqICAgICAgICAgIH1cbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGZpcmVkIGFsZXJ0cyBhcmUgcmV0cmlldmVkOiBgKGVyciwgZmlyZWRBbGVydHMsIGFsZXJ0R3JvdXApYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cFxuICAgICAgICAgKi9cbiAgICAgICAgbGlzdDogZnVuY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJcIiwgb3B0aW9ucywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgZmlyZWRBbGVydHMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnkgfHwgW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0RGF0YSA9IHJlc3BvbnNlLmRhdGEuZW50cnlbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhmaXJlZEFsZXJ0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaXJlZEFsZXJ0ID0gbmV3IHJvb3QuRmlyZWRBbGVydCh0aGF0LnNlcnZpY2UsIGZpcmVkQWxlcnREYXRhLm5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVkQWxlcnQuX2xvYWQoZmlyZWRBbGVydERhdGEpO1xuICAgICAgICAgICAgICAgICAgICBmaXJlZEFsZXJ0cy5wdXNoKGZpcmVkQWxlcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBmaXJlZEFsZXJ0cywgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGFsZXJ0IGdyb3VwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXB9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMubGlzdCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZpcmVkIGFsZXJ0cyBmb3IgYSBzYXZlZCBzZWFyY2guIFlvdSBjYW5cbiAgICAgKiBjcmVhdGUgYW5kIGxpc3Qgc2F2ZWQgc2VhcmNoZXMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3JcbiAgICAgKiBnZXQgYSBzcGVjaWZpYyBhbGVydCBncm91cC4gXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhbGVydHMvZmlyZWRfYWxlcnRzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqL1xuICAgIHJvb3QuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbiA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmZpcmVkQWxlcnRzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBhbGVydCBncm91cC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgYWxlcnQgZ3JvdXAuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkZpcmVkQWxlcnRHcm91cCh0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1cHByZXNzIHJlbW92aW5nIGFsZXJ0cyB2aWEgdGhlIGZpcmVkIGFsZXJ0cyBlbmRwb2ludC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUbyByZW1vdmUgYW4gYWxlcnQsIHJlbW92ZSB0aGUgc2F2ZWQgc2VhcmNoIHdpdGggdGhlIHNhbWUgbmFtZS5cIik7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkZpcmVkQWxlcnRHcm91cENvbGxlY3Rpb25gLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuRmlyZWRBbGVydEdyb3VwQ29sbGVjdGlvbmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5GaXJlZEFsZXJ0R3JvdXBDb2xsZWN0aW9uXG4gICAgICAgICAqLyAgICAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFudGlhdGVFbnRpdHkgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuaW5zdGFudGlhdGVFbnRpdHkpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBTcGx1bmsgYXBwIHRoYXQgeW91IGNhbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkFwcGxpY2F0aW9uID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGNhbGwgYGZldGNoYCBhZnRlciBhbiB1cGRhdGUgdG8gZ2V0IHRoZSB1cGRhdGVkIFxuICAgICAgICAgKiBpdGVtLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25VcGRhdGU6IHRydWUsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5hcHBzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgU3BsdW5rIGFwcC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZXR1cEluZm8gID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNldHVwSW5mbyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUluZm8gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudXBkYXRlSW5mbyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBzZXR1cCBpbmZvcm1hdGlvbiBmb3IgYSBTcGx1bmsgYXBwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHAgPSBzZXJ2aWNlLmFwcHMoKS5pdGVtKFwiYXBwXCIpO1xuICAgICAgICAgKiAgICAgIGFwcC5zZXR1cChmdW5jdGlvbihlcnIsIGluZm8sIHNlYXJjaCkge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlNFVFVQIElORk86IFwiLCBpbmZvKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc2V0dXAgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkOiBgKGVyciwgaW5mbywgYXBwKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfS9zZXR1cFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldHVwSW5mbzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwic2V0dXBcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgYW55IGluZm9ybWF0aW9uIGZvciBhbiB1cGRhdGUgdG8gYSBsb2NhbGx5LWluc3RhbGxlZCBTcGx1bmsgYXBwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBhcHAgPSBzZXJ2aWNlLmFwcHMoKS5pdGVtKFwiTXlBcHBcIik7XG4gICAgICAgICAqICAgICAgYXBwLnVwZGF0ZUluZm8oZnVuY3Rpb24oZXJyLCBpbmZvLCBhcHApIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJVUERBVEUgSU5GTzogXCIsIGluZm8pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB1cGRhdGUgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkOiBgKGVyciwgaW5mbywgYXBwKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBhcHBzL2xvY2FsL3tuYW1lfS91cGRhdGVcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGVJbmZvOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJ1cGRhdGVcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YS5lbnRyeS5jb250ZW50LCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIFNwbHVuayBhcHBzLiBZb3UgY2FuIGNyZWF0ZSBhbmQgbGlzdCBhcHBsaWNhdGlvbnMgXG4gICAgICogdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgYXBwLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGFwcHMvbG9jYWxcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuQXBwbGljYXRpb25zID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5hcHBzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBhcHAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBhcHAuIEZvciBkZXRhaWxzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RhcHBzI1BPU1RfYXBwcy4yRmxvY2FsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UE9TVCBhcHBzL2xvY2FsPC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25gIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5BcHBsaWNhdGlvbih0aGlzLnNlcnZpY2UsIHByb3BzLm5hbWUsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5BcHBsaWNhdGlvbnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuQXBwbGljYXRpb25zYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkFwcGxpY2F0aW9uc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZXJ2ZXIvaW5mb1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlNlcnZlckluZm9cbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuU2VydmVySW5mbyA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuaW5mbztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuU2VydmVySW5mb2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5TZXJ2ZXJJbmZvXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gXCJzZXJ2ZXItaW5mb1wiO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIHt9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBTcGx1bmsgdXNlciwgd2hpY2ggeW91IGNhbiB2aWV3LCBtb2RpZnksIGFuZFxuICAgICAqIHJlbW92ZS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhdXRoZW50aWNhdGlvbi91c2Vycy97bmFtZX1cbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Vc2VyXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LlVzZXIgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnVzZXJzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBTcGx1bmsgdXNlcm5hbWUuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVXNlcn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVXNlcmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2VyXG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCB7fSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB1c2Vycy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgdXNlcnMgdXNpbmcgXG4gICAgICogdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgdXNlci5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBhdXRoZW50aWNhdGlvbi91c2Vyc1xuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LlVzZXJzID0gcm9vdC5Db2xsZWN0aW9uLmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBjYWxsIGBmZXRjaGAgYWZ0ZXIgYW4gZW50aXR5IGhhcyBiZWVuIGNyZWF0ZWQuIEJ5IFxuICAgICAgICAgKiBkZWZhdWx0LCB0aGUgZW50aXR5IGlzIG5vdCBmZXRjaGVkIGJlY2F1c2UgdGhlIGVuZHBvaW50IHJldHVybnNcbiAgICAgICAgICogKGVjaG9lcykgdGhlIG5ldyBlbnRpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgZmV0Y2hPbkVudGl0eUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudXNlcnM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgdXNlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIG5ldyB1c2VyLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjgjdXNlcmF1dGhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Vc2VyIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlVzZXJ9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuVXNlcnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlVzZXIodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzYC4gXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlVzZXJzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Vc2Vyc2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwge30pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdXNlci4gXG4gICAgICAgICAqXG4gICAgICAgICAqICoqTm90ZToqKiBUaGlzIGVuZHBvaW50IHJlcXVpcmVzIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUo4I3VzZXJhdXRocGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VXNlciBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBlbnRpdHk6IGAoZXJyLCBjcmVhdGVkRW50aXR5KWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Vc2Vyc1xuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbmRwb2ludCByZXF1aXJlcyB1cyB0byB1c2UgdGhlIHBhc3NlZC1pbiBuYW1lXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHtuYW1lOiBwYXJhbXMubmFtZX07XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gdGhhdC5pbnN0YW50aWF0ZUVudGl0eShwcm9wcyk7ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5LmZldGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS53YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBhYm9ydGVkLCBzbyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIHNwZWNpZmljIFNwbHVuayB2aWV3LCB3aGljaCB5b3UgY2FuIHZpZXcsIG1vZGlmeSwgYW5kXG4gICAgICogcmVtb3ZlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGEvdWkvdmlld3Mve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVmlld1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5WaWV3ID0gcm9vdC5FbnRpdHkuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy52aWV3cyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLlZpZXdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmlldy5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3XG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiB2aWV3cy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3Qgdmlld3MgdXNpbmcgXG4gICAgICogdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3IgZ2V0IGEgc3BlY2lmaWMgdmlldy5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL3VpL3ZpZXdzXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuVmlld3NcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuVmlld3MgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMudmlld3M7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgdmlldy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IHZpZXcuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNQT1NUX3NjaGVkdWxlZC4yRnZpZXdzLjJGLjdCbmFtZS43RFwiIHRhcmdldD1cIl9ibGFua1wiPlBPU1Qgc2NoZWR1bGVkL3ZpZXdzL3tuYW1lfTwvYT4gZW5kcG9pbnQgaW4gdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24uXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuVmlld30gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuVmlld2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LlZpZXcodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5WaWV3c2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlZpZXdzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5WaWV3c2AgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5WaWV3c1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhbiBpbmRleCwgd2hpY2ggeW91IGNhbiB1cGRhdGUgYW5kIHN1Ym1pdCBldmVudHMgdG8uXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzL25hbWVcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5JbmRleFxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5JbmRleCA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmluZGV4ZXMgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5JbmRleGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbmRleC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuSW5kZXh9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4YCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICAgICAqLyBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXZlbnQgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VibWl0RXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN1Ym1pdHMgYW4gZXZlbnQgdG8gdGhpcyBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgaW5kZXggPSBzZXJ2aWNlLmluZGV4ZXMoKS5pdGVtKFwiX2ludGVybmFsXCIpO1xuICAgICAgICAgKiAgICAgIGluZGV4LnN1Ym1pdEV2ZW50KFwiQSBuZXcgZXZlbnRcIiwge3NvdXJjZXR5cGU6IFwibXlzb3VyY2V0eXBlXCJ9LCBmdW5jdGlvbihlcnIsIHJlc3VsdCwgaW5kZXgpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgZXZlbnQ6IFwiLCByZXN1bHQpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgVGhlIHRleHQgZm9yIHRoaXMgZXZlbnQuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHBhcmFtZXRlcnMgZm9yIGluZGV4aW5nOiBcbiAgICAgICAgICogICAgLSBgaG9zdGAgKF9zdHJpbmdfKTogVGhlIHZhbHVlIHRvIHBvcHVsYXRlIGluIHRoZSBob3N0IGZpZWxkIGZvciBldmVudHMgZnJvbSB0aGlzIGRhdGEgaW5wdXQuIFxuICAgICAgICAgKiAgICAtIGBob3N0X3JlZ2V4YCAoX3N0cmluZ18pOiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGV4dHJhY3QgdGhlIGhvc3QgdmFsdWUgZnJvbSBlYWNoIGV2ZW50LiBcbiAgICAgICAgICogICAgLSBgc291cmNlYCAoX3N0cmluZ18pOiBUaGUgc291cmNlIHZhbHVlIHRvIGZpbGwgaW4gdGhlIG1ldGFkYXRhIGZvciB0aGlzIGlucHV0J3MgZXZlbnRzLlxuICAgICAgICAgKiAgICAtIGBzb3VyY2V0eXBlYCAoX3N0cmluZ18pOiBUaGUgc291cmNldHlwZSB0byBhcHBseSB0byBldmVudHMgZnJvbSB0aGlzIGlucHV0LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgc3VibWl0dGVkOiBgKGVyciwgcmVzdWx0LCBpbmRleClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgcmVjZWl2ZXJzL3NpbXBsZT9pbmRleD17bmFtZX1cbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4XG4gICAgICAgICAqL1xuICAgICAgICBzdWJtaXRFdmVudDogZnVuY3Rpb24oZXZlbnQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICghY2FsbGJhY2sgJiYgdXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIHRoZSBpbmRleCBuYW1lXG4gICAgICAgICAgICBwYXJhbXNbXCJpbmRleFwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5sb2coZXZlbnQsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCwgdGhhdCk7IFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLnZlcnNpb25Db21wYXJlKFwiNS4wXCIpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluZGV4ZXMgY2Fubm90IGJlIHJlbW92ZWQgaW4gU3BsdW5rIDQueFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAgICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgaW5kZXhlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgaW5kZXhlcyB1c2luZyBcbiAgICAgKiB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhL2luZGV4ZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkluZGV4ZXMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5pbmRleGVzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhbiBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGluZGV4LiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjMjaW5kZXhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5JbmRleCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5JbmRleH0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5TmFtZXNwYWNlID0gdXRpbHMubmFtZXNwYWNlRnJvbVByb3BlcnRpZXMocHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkluZGV4KHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkluZGV4ZXNgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSW5kZXhlc1xuICAgICAgICAgKi8gIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKHNlcnZpY2UsIHRoaXMucGF0aCgpLCBuYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgaW5kZXhlcyA9IHNlcnZpY2UuaW5kZXhlcygpO1xuICAgICAgICAgKiAgICAgIGluZGV4ZXMuY3JlYXRlKFwiTmV3SW5kZXhcIiwge2Fzc3VyZVVURjg6IHRydWV9LCBmdW5jdGlvbihlcnIsIG5ld0luZGV4KSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgQSBuYW1lIGZvciB0aGlzIGluZGV4LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFSjMjaW5kZXhwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5JbmRleCBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIG5ldyBpbmRleDogYChlcnIsIGNyZWF0ZWRJbmRleClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgZGF0YS9pbmRleGVzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5JbmRleGVzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKG5hbWUsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgY2FsbGVkIHVzIHdpdGggdGhlIGRlZmF1bHQgc3R5bGUgb2YgKHBhcmFtcywgY2FsbGJhY2spLFxuICAgICAgICAgICAgLy8gbGV0cyBtYWtlIGl0IHdvcmtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc09iamVjdChuYW1lKSAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gbmFtZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW1zLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtc1tcIm5hbWVcIl0gPSBuYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgc3BlY2lmaWMgc3RhbnphLCB3aGljaCB5b3UgY2FuIHVwZGF0ZSBhbmQgcmVtb3ZlLCBmcm9tIGEgXG4gICAgICogY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGNvbmZpZ3MvY29uZi17ZmlsZX0ve25hbWV9YFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkVudGl0eVxuICAgICAqL1xuICAgIHJvb3QuQ29uZmlndXJhdGlvblN0YW56YSA9IHJvb3QuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZSA9PT0gXCJkZWZhdWx0XCIgPyBcIl9uZXdcIiA6IHRoaXMubmFtZTtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5jb25maWd1cmF0aW9ucyArIFwiL2NvbmYtXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5maWxlKSArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uU3RhbnphYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGUgVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG5ldyBzdGFuemEuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvblN0YW56YVxuICAgICAgICAgKi8gXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIGZpbGUsIG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHN0YW56YXMgZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgZmlsZS4gWW91IGNhblxuICAgICAqIGNyZWF0ZSBhbmQgbGlzdCBzdGFuemFzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIFxuICAgICAqIHN0YW56YS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBjb25maWdzL2NvbmYte2ZpbGV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi8gIFxuICAgIHJvb3QuQ29uZmlndXJhdGlvbkZpbGUgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHsgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLmNvbmZpZ3VyYXRpb25zICsgXCIvY29uZi1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbG9jYWwgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgc3RhbnphIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBZb3UgY2Fubm90IGRpcmVjdGx5IHVwZGF0ZSB0aGUgYENvbmZpZ3VyYXRpb25TdGFuemFgIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB2aWV3aW5nIGBjb25maWdzL2NvbmYte2ZpbGV9L19uZXdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIGdldERlZmF1bHRTdGFuemE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByb290LkNvbmZpZ3VyYXRpb25TdGFuemEodGhpcy5zZXJ2aWNlLCB0aGlzLm5hbWUsIFwiZGVmYXVsdFwiLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIHN0YW56YSBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBrZXktdmFsdWUgcHJvcGVydGllcyBmb3IgdGhlIG5ldyBzdGFuemEuIFxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemF9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25TdGFuemFgIGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbkZpbGVcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Db25maWd1cmF0aW9uU3RhbnphKHRoaXMuc2VydmljZSwgdGhpcy5uYW1lLCBwcm9wcy5uYW1lLCBlbnRpdHlOYW1lc3BhY2UpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgTmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHN0YW56YSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgZmlsZSA9IHNlcnZpY2UuY29uZmlndXJhdGlvbnMoKS5pdGVtKFwicHJvcHNcIik7XG4gICAgICAgICAqICAgICAgZmlsZS5jcmVhdGUoXCJteV9zdGFuemFcIiwgZnVuY3Rpb24oZXJyLCBuZXdTdGFuemEpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVEVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhbnphTmFtZSBBIG5hbWUgZm9yIHRoaXMgc3RhbnphLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEEgZGljdGlvbmFyeSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gcHV0IGluIHRoaXMgc3RhbnphLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgY3JlYXRlZCBzdGFuemE6IGAoZXJyLCBjcmVhdGVkU3RhbnphKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBjb25maWdzL2NvbmYte2ZpbGV9XG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZVxuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihzdGFuemFOYW1lLCB2YWx1ZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3Qoc3RhbnphTmFtZSkgJiYgdXRpbHMuaXNGdW5jdGlvbih2YWx1ZXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IHN0YW56YU5hbWU7XG4gICAgICAgICAgICAgICAgc3RhbnphTmFtZSA9IHZhbHVlcy5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbih2YWx1ZXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgICAgICAgICB2YWx1ZXNbXCJuYW1lXCJdID0gc3RhbnphTmFtZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKHZhbHVlcywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgY29uZmlndXJhdGlvbiBmaWxlcy4gWW91IGNhbiBjcmVhdGUgYW5kIGxpc3QgXG4gICAgICogY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbmVyLCBvciBnZXQgYSBzcGVjaWZpYyBmaWxlLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IHByb3BlcnRpZXNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuQ29sbGVjdGlvblxuICAgICAqLyAgXG4gICAgcm9vdC5Db25maWd1cmF0aW9ucyA9IHJvb3QuQ29sbGVjdGlvbi5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2FsbCBgZmV0Y2hgIGFmdGVyIGFuIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLiBCeSBcbiAgICAgICAgICogZGVmYXVsdCwgdGhlIGVudGl0eSBpcyBub3QgZmV0Y2hlZCBiZWNhdXNlIHRoZSBlbmRwb2ludCByZXR1cm5zXG4gICAgICAgICAqIChlY2hvZXMpIHRoZSBuZXcgZW50aXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIGZldGNoT25FbnRpdHlDcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhdGhzLnByb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIGxvY2FsIGluc3RhbmNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25GaWxlfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uRmlsZWAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Db25maWd1cmF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgaW5zdGFudGlhdGVFbnRpdHk6IGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuQ29uZmlndXJhdGlvbkZpbGUodGhpcy5zZXJ2aWNlLCBwcm9wcy5uYW1lLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5hbWVzcGFjZSBOYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuQ29uZmlndXJhdGlvbnN9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqLyAgXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UgfHwgbmFtZXNwYWNlLm93bmVyID09PSBcIi1cIiB8fCBuYW1lc3BhY2UuYXBwID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb25zIHJlcXVpcmVzIGEgbm9uLXdpbGRjYXJkIG93bmVyL2FwcFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGNvbmZpZ3VyYXRpb25zID0gc2VydmljZS5jb25maWd1cmF0aW9ucygpO1xuICAgICAgICAgKiAgICAgIGNvbmZpZ3VyYXRpb25zLmNyZWF0ZShcIm15cHJvcHNcIiwgZnVuY3Rpb24oZXJyLCBuZXdGaWxlKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lIEEgbmFtZSBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlOiBgKGVyciwgY3JlYXRlZEZpbGUpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHByb3BlcnRpZXNcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbXCJfX2NvbmZcIl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcIlwiLCB7X19jb25mOiBmaWxlbmFtZX0sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3IHJvb3QuQ29uZmlndXJhdGlvbkZpbGUodGhhdC5zZXJ2aWNlLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eS5mZXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEud2FzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gYWJvcnRlZCwgc28gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIGRvZXNGaWxlRXhpc3Q6IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgIC8vIDEuIEZldGNoIGZpbGVzIGxpc3RcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldF92MihcIlwiLCAge19fY29uZjogZmlsZW5hbWV9KTtcblxuICAgICAgICAgICAgICAgIC8vIDIuIEZpbHRlciB0aGUgZmlsZXNcbiAgICAgICAgICAgICAgICB2YXIgZmlsZXMgPSByZXNwb25zZT8uYm9keT8uZW50cnk/LmZpbHRlcihmID0+IGYubmFtZSA9PT0gZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIDIuIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGNvZGU6XCJGSUxFX05PVF9GT1VORFwiLCBtZXNzYWdlOiBgRmlsZSB3aXRoIHRoZSBuYW1lICcke2ZpbGVuYW1lfScgZG9lcyBub3QgZXhpc3QuYH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gMy4gQ3JlYXRlIGEgbG9jYWwgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlndXJhdGlvbkZpbGUgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSh0aGF0LnNlcnZpY2UsIGZpbGVuYW1lKTtcblxuICAgICAgICAgICAgICAgIC8vIDQuIExvYWQgdGhlIGZpbGUgY29udGVudFxuICAgICAgICAgICAgICAgIHZhciBmZXRjaGVkRmlsZSA9IGF3YWl0IGNvbmZpZ3VyYXRpb25GaWxlLmZldGNoX3YyKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge2ZpbGU6IGZldGNoZWRGaWxlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3JDb2RlOlwiU1lTVEVNX0VSUk9SXCIsIGVycm9yTWVzc2FnZTogZXJyb3J9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRvZXNTdGFuemFFeGlzdDogYXN5bmMgZnVuY3Rpb24oZmlsZSwgc3RhbnphKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIDEuIGNoZWNrIGlmIHRoZSBzdGFuemEgZXhpc3RzXG4gICAgICAgICAgICAgICAgdmFyIGZldGNoZWRTdGFuemEgPSBmaWxlLml0ZW0oc3RhbnphKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZighZmV0Y2hlZFN0YW56YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjb2RlOlwiU1RBTlpBX05PVF9GT1VORFwiLCBtZXNzYWdlOiBgU3RhbnphIHdpdGggdGhlIG5hbWUgJyR7c3RhbnphfScgZG9lcyBub3QgZXhpc3QuYH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3N0YW56YTogZmV0Y2hlZFN0YW56YX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckNvZGU6XCJTWVNURU1fRVJST1JcIiwgZXJyb3JNZXNzYWdlOiBlcnJvcn07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlX3YyOiBhc3luYyBmdW5jdGlvbiAoY29uZmlncywgc3ZjLCBmaWxlbmFtZSwgc3RhbnphLCBrZXlWYWx1ZU1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgLy8gMS4gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzXG4gICAgICAgICAgICB2YXIgZG9lc0ZpbGVFeGlzdFJlc3BvbnNlID0gYXdhaXQgdGhpcy5kb2VzRmlsZUV4aXN0KGZpbGVuYW1lKTtcbiAgICAgICAgICAgIHZhciBjb25maWdGaWxlID0gZG9lc0ZpbGVFeGlzdFJlc3BvbnNlLmZpbGU7XG5cbiAgICAgICAgICAgIC8vIDIuIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBmaWxlXG4gICAgICAgICAgICBpZighY29uZmlnRmlsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRvZXNGaWxlRXhpc3RSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDcmVhdGluZyBhIG5ldyBjb25maWd1cmF0aW9uIGZpbGUuLi5cIik7XG5cbiAgICAgICAgICAgICAgICB0aGF0LmNyZWF0ZSggeyBfX2NvbmY6IGZpbGVuYW1lIH0sIFxuICAgICAgICAgICAgICAgICAgICAoZXJyLCBuZXdGaWxlKSA9PiBjb25zb2xlLmxvZyhgQ29uZmlndXJhdGlvbiBGaWxlIGNyZWF0ZWQ6ICR7ZmlsZW5hbWV9YCkgKTtcblxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUgPSBuZXcgcm9vdC5Db25maWd1cmF0aW9uRmlsZSggdGhhdC5zZXJ2aWNlLCBmaWxlbmFtZSApO1xuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUgPSBhd2FpdCBjb25maWdGaWxlLmZldGNoX3YyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDIuIENoZWNrIGlmIHRoZSBzdGFuemEgZXhpc3RzXG4gICAgICAgICAgICB2YXIgZG9lc1N0YW56YUV4aXN0UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvZXNTdGFuemFFeGlzdChjb25maWdGaWxlLCBzdGFuemEpO1xuICAgICAgICAgICAgdmFyIGNvbmZpZ1N0YW56YSA9IGRvZXNTdGFuemFFeGlzdFJlc3BvbnNlLnN0YW56YTtcblxuICAgICAgICAgICAgLy8gMy4gSWYgdGhlIHN0YW56YSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgYSBuZXcgc3RhbnphIHdpdGggZ2l2ZW4ga2V5VmFsdWVNYXBcbiAgICAgICAgICAgIGlmKCFjb25maWdTdGFuemEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkb2VzU3RhbnphRXhpc3RSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDcmVhdGluZyBhIG5ldyBjb25maWd1cmF0aW9uIHN0YW56YS4uLlwiKTtcblxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUuY3JlYXRlKHN0YW56YSwga2V5VmFsdWVNYXAsIGZ1bmN0aW9uIChlcnIsIG5ld1N0YW56YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29uZmlndXJhdGlvbiBTdGFuemEgY3JlYXRlZDogJHtzdGFuemF9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyA0LiBJZiB0aGUgc3RhbnphIGV4aXN0cywgdXBkYXRlIGl0IHdpdGggdGhlIGtleVZhbHVlTWFwXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWdTdGFuemEudXBkYXRlKGtleVZhbHVlTWFwLCAoZXJyLCB1cGRhdGVkU3RhbnphKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb25maWd1cmF0aW9uIFN0YW56YSB1cGRhdGVkOiAke3N0YW56YX1gKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZWFyY2ggam9iLiBZb3UgY2FuIHBlcmZvcm0gZGlmZmVyZW50IG9wZXJhdGlvbnNcbiAgICAgKiBvbiB0aGlzIGpvYiwgc3VjaCBhcyByZWFkaW5nIGl0cyBzdGF0dXMsIGNhbmNlbGluZyBpdCwgYW5kIGdldHRpbmcgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfVxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAqIEBleHRlbmRzIHNwbHVua2pzLlNlcnZpY2UuRW50aXR5XG4gICAgICovXG4gICAgcm9vdC5Kb2IgPSByb290LkVudGl0eS5leHRlbmQoe1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0cmlldmVzIHRoZSBSRVNUIGVuZHBvaW50IHBhdGggZm9yIHRoaXMgcmVzb3VyY2UgKHdpdGggbm8gbmFtZXNwYWNlKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgcGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gUGF0aHMuam9icyArIFwiL1wiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzaWQgVGhlIHNlYXJjaCBJRCBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2J9IEEgbmV3IGBzcGx1bmtqcy5TZXJ2aWNlLkpvYmAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovIFxuICAgICAgICBpbml0OiBmdW5jdGlvbihzZXJ2aWNlLCBzaWQsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gc2lkO1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLnNpZCA9IHNpZDtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmNhbmNlbCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQcmV2aWV3ID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmRpc2FibGVQcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlUHJldmlldyAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuZW5hYmxlUHJldmlldyk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cyAgICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmV2ZW50cyk7XG4gICAgICAgICAgICB0aGlzLmZpbmFsaXplICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLmZpbmFsaXplKTtcbiAgICAgICAgICAgIHRoaXMucGF1c2UgICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucGF1c2UpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5wcmV2aWV3KTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucmVzdWx0cyk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaGxvZyAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNlYXJjaGxvZyk7XG4gICAgICAgICAgICB0aGlzLnNldFByaW9yaXR5ICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnNldFByaW9yaXR5KTtcbiAgICAgICAgICAgIHRoaXMuc2V0VFRMICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc2V0VFRMKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeSAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuc3VtbWFyeSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lICAgICAgID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnRpbWVsaW5lKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2ggICAgICAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMudG91Y2gpO1xuICAgICAgICAgICAgdGhpcy51bnBhdXNlICAgICAgICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51bnBhdXNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FuY2VscyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IuY2FuY2VsKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNBTkNFTExFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNlYXJjaCBpcyBkb25lOiBgKGVycilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImNhbmNlbFwifSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyBwcmV2aWV3IGdlbmVyYXRpb24gZm9yIGEgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5kaXNhYmxlUHJldmlldyhmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBSRVZJRVcgRElTQUJMRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoaXMgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBkaXNhYmxlUHJldmlldzogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJkaXNhYmxlcHJldmlld1wifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHByZXZpZXcgZ2VuZXJhdGlvbiBmb3IgYSBzZWFyY2ggam9iLiBcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5kaXNhYmxlUHJldmlldyhmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBSRVZJRVcgRU5BQkxFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhpcyBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGVuYWJsZVByZXZpZXc6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwiZW5hYmxlcHJldmlld1wifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBldmVudHMgb2YgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5ldmVudHMoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgZXZlbnRzLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZHM6IFwiLCBldmVudHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBldmVudHMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRmV2ZW50c1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9ldmVudHM8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnRzIGFyZSByZXRyaWV2ZWQ6IGAoZXJyLCBldmVudHMsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vZXZlbnRzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGV2ZW50czogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm91dHB1dF9tb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7IFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJldmVudHNcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmFsaXplcyBhIHNlYXJjaCBqb2IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IuZmluYWxpemUoZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgY29uc29sZS5sb2coXCJKT0IgRklOQUxJWkVEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIGZpbmFsaXplOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcImZpbmFsaXplXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoaXMgc2VhcmNoIGpvYidzIGV2ZW50cyBvciByZXN1bHRzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBPbmUgb2Yge1wiZXZlbnRzXCIsIFwicHJldmlld1wiLCBcInJlc3VsdHNcIn0uXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnM6XG4gICAgICAgICAqICAgIC0gYHBhZ2VzaXplYCAoX2ludGVnZXJfKTogVGhlIG51bWJlciBvZiBpdGVtcyB0byByZXR1cm4gb24gZWFjaCByZXF1ZXN0LiBEZWZhdWx0cyB0byBhcyBtYW55IGFzIHBvc3NpYmxlLlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhdG9yIG9iamVjdCB3aXRoIGEgYG5leHQoY2FsbGJhY2spYCBtZXRob2QsIHdoZXJlIGBjYWxsYmFja2AgaXMgb2YgdGhlIGZvcm0gYChlcnIsIHJlc3VsdHMsIGhhc01vcmVSZXN1bHRzKWAuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vcmVzdWx0c1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBpdGVyYXRvcjogZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuUGFnaW5hdGVkRW5kcG9pbnRJdGVyYXRvcih0aGlzW3R5cGVdLCBwYXJhbXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYXVzZXMgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnBhdXNlKGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFBBVVNFRFwiKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBwYXVzZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJwYXVzZVwifSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyLCB0aGF0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEdldHMgdGhlIHByZXZpZXcgcmVzdWx0cyBmb3IgYSBzZWFyY2ggam9iIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5wcmV2aWV3KHtjb3VudDogMTB9LCBmdW5jdGlvbihlcnIsIHJlc3VsdHMsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkczogXCIsIHJlc3VsdHMuZmllbGRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBwcmV2aWV3IHJlc3VsdHMuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHA6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvbGF0ZXN0L1JFU1RBUEkvUkVTVHNlYXJjaCNHRVRfc2VhcmNoLjJGam9icy4yRi43QnNlYXJjaF9pZC43RC4yRnJlc3VsdHNfcHJldmlld1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzX3ByZXZpZXc8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcHJldmlldyByZXN1bHRzIGFyZSByZXRyaWV2ZWQgOiBgKGVyciwgcmVzdWx0cywgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzX3ByZXZpZXdcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgcHJldmlldzogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm91dHB1dF9tb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7IFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJyZXN1bHRzX3ByZXZpZXdcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UuZGF0YSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHJlc3VsdHMgZm9yIGEgc2VhcmNoIGpvYiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBUaGUgY2FsbGJhY2sgY2FuIGdldCBgdW5kZWZpbmVkYCBmb3IgaXRzIGByZXN1bHRzYCBwYXJhbWV0ZXIgaWYgdGhlXG4gICAgICAgICAqIGpvYiBpcyBub3QgeWV0IGRvbmUuIFRvIGF2b2lkIHRoaXMsIHVzZSB0aGUgYEpvYi50cmFjaygpYCBtZXRob2QgdG9cbiAgICAgICAgICogd2FpdCB1bnRpbCB0aGUgam9iIGlzIGNvbXBsZXRlIHByaW9yIHRvIGZldGNoaW5nIHRoZSByZXN1bHRzIHdpdGhcbiAgICAgICAgICogdGhpcyBtZXRob2QuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnJlc3VsdHMoe2NvdW50OiAxMH0sIGZ1bmN0aW9uKGVyciwgcmVzdWx0cywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGRzOiBcIiwgcmVzdWx0cy5yZXN1bHRzKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBzZWFyY2ggcmVzdWx0cy4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIHRoZSA8YSBocmVmPVwiaHR0cDovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay9sYXRlc3QvUkVTVEFQSS9SRVNUc2VhcmNoI0dFVF9zZWFyY2guMkZqb2JzLjJGLjdCc2VhcmNoX2lkLjdELjJGcmVzdWx0c1wiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9yZXN1bHRzPC9hPiBlbmRwb2ludCBpbiB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbi5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHJlc3VsdHMgYXJlIHJldHJpZXZlZDogYChlcnIsIHJlc3VsdHMsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vcmVzdWx0c1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICByZXN1bHRzOiBmdW5jdGlvbihwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMub3V0cHV0X21vZGUgPSBwYXJhbXMub3V0cHV0X21vZGUgfHwgXCJqc29uX3Jvd3NcIjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFwicmVzdWx0c1wiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgc2VhcmNoIGxvZyBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNlYXJjaGxvZyhmdW5jdGlvbihlcnIsIHNlYXJjaGxvZywgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKHNlYXJjaGxvZyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggbG9nIGFuZCBqb2I6IGAoZXJyLCBzZWFyY2hsb2csIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc2VhcmNoLmxvZ1xuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2hsb2c6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChcInNlYXJjaC5sb2dcIiwge30sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcHJpb3JpdHkgZm9yIHRoaXMgc2VhcmNoIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9iID0gc2VydmljZS5qb2JzKCkuaXRlbShcIm15c2lkXCIpO1xuICAgICAgICAgKiAgICAgIGpvYi5zZXRQcmlvcml0eSg2LCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBQUklPUklUWSBTRVRcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgcHJpb3JpdHkgKGFuIGludGVnZXIgYmV0d2VlbiAxLTEwKS4gQSBoaWdoZXIgdmFsdWUgbWVhbnMgYSBoaWdoZXIgcHJpb3JpdHkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNldFByaW9yaXR5OiBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHJlcSA9IHRoaXMucG9zdChcImNvbnRyb2xcIiwge2FjdGlvbjogXCJzZXRwcmlvcml0eVwiLCBwcmlvcml0eTogdmFsdWV9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpbWUgdG8gbGl2ZSAoVFRMKSBmb3IgdGhlIHNlYXJjaCBqb2IsIHdoaWNoIGlzIHRoZSB0aW1lIGJlZm9yZVxuICAgICAgICAgKiB0aGUgc2VhcmNoIGpvYiBleHBpcmVzIGFmdGVyIGl0IGhhcyBiZWVuIGNvbXBsZXRlZCBhbmQgaXMgc3RpbGwgYXZhaWxhYmxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnNldFRUTCgxMDAwLCBmdW5jdGlvbihlcnIsIGpvYikge1xuICAgICAgICAgKiAgICAgICAgICBjb25zb2xlLmxvZyhcIkpPQiBUVEwgU0VUXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgVGhlIHRpbWUgdG8gbGl2ZSwgaW4gc2Vjb25kcy4gXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHNldFRUTDogZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnBvc3QoXCJjb250cm9sXCIsIHthY3Rpb246IFwic2V0dHRsXCIsIHR0bDogdmFsdWV9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHN1bW1hcnkgZm9yIHRoaXMgc2VhcmNoIGpvYiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnN1bW1hcnkoe3RvcF9jb3VudDogNX0sIGZ1bmN0aW9uKGVyciwgc3VtbWFyeSwgam9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3VtbWFyeTogXCIsIHN1bW1hcnkpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBzdW1tYXJ5LiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZzdW1tYXJ5XCIgdGFyZ2V0PVwiX2JsYW5rXCI+R0VUIHNlYXJjaC9qb2JzL3tzZWFyY2hfaWR9L3N1bW1hcnk8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc3VtbWFyeSBhbmQgc2VhcmNoIGpvYjogYChlcnIsIHN1bW1hcnksIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vc3VtbW1hcnlcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYlxuICAgICAgICAgKi9cbiAgICAgICAgc3VtbWFyeTogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJzdW1tYXJ5XCIsIHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSB0aW1lbGluZSBmb3IgdGhpcyBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnRpbWVsaW5lKHt0aW1lX2Zvcm1hdDogXCIlY1wifSwgZnVuY3Rpb24oZXJyLCBqb2IsIHRpbWVsaW5lKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGltZWxpbmU6IFwiLCB0aW1lbGluZSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIHRpbWVsaW5lLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgdGhlIDxhIGhyZWY9XCJodHRwOi8vZG9jcy5zcGx1bmsuY29tL0RvY3VtZW50YXRpb24vU3BsdW5rL2xhdGVzdC9SRVNUQVBJL1JFU1RzZWFyY2gjR0VUX3NlYXJjaC4yRmpvYnMuMkYuN0JzZWFyY2hfaWQuN0QuMkZ0aW1lbGluZVwiIHRhcmdldD1cIl9ibGFua1wiPkdFVCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS90aW1lbGluZSA8L2E+IGVuZHBvaW50IGluIHRoZSBSRVNUIEFQSSBkb2N1bWVudGF0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgdGltZWxpbmUgYW5kIHNlYXJjaCBqb2I6IGAoZXJyLCB0aW1lbGluZSwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS90aW1lbGluZVxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICB0aW1lbGluZTogZnVuY3Rpb24ocGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoXCJ0aW1lbGluZVwiLCBwYXJhbXMsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZS5kYXRhLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVG91Y2hlcyBhIHNlYXJjaCBqb2IsIHdoaWNoIG1lYW5zIGV4dGVuZGluZyB0aGUgZXhwaXJhdGlvbiB0aW1lIG9mIFxuICAgICAgICAgKiB0aGUgc2VhcmNoIHRvIG5vdyBwbHVzIHRoZSB0aW1lIHRvIGxpdmUgKFRUTCkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYiA9IHNlcnZpY2Uuam9icygpLml0ZW0oXCJteXNpZFwiKTtcbiAgICAgICAgICogICAgICBqb2IudG91Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFRPVUNIRURcIik7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBlbmRwb2ludCBzZWFyY2gvam9icy97c2VhcmNoX2lkfS9jb250cm9sXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRvdWNoOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInRvdWNoXCJ9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU3RhcnRzIHBvbGxpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIHNlYXJjaCBqb2IsIGFuZCBmaXJlcyBjYWxsYmFja3NcbiAgICAgICAgICogdXBvbiBlYWNoIHN0YXR1cyBjaGFuZ2UuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyczpcbiAgICAgICAgICogICAgLSBgcGVyaW9kYCAoX2ludGVnZXJfKTogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGVhY2ggcG9sbC4gRGVmYXVsdHMgdG8gNTAwLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gY2FsbGJhY2tzIEEgZGljdGlvbmFyeSBvZiBvcHRpb25hbCBjYWxsYmFja3M6XG4gICAgICAgICAqICAgIC0gYHJlYWR5YDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgd2hlbiB0aGUgam9iJ3MgcHJvcGVydGllcyBmaXJzdCBiZWNvbWUgYXZhaWxhYmxlLlxuICAgICAgICAgKiAgICAtIGBwcm9ncmVzc2A6IEEgZnVuY3Rpb24gYChqb2IpYCBpbnZva2VkIHdoZW5ldmVyIG5ldyBqb2IgcHJvcGVydGllcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgKiAgICAtIGBkb25lYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgaWYgdGhlIGpvYiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LiBObyBmdXJ0aGVyIHBvbGxpbmcgaXMgZG9uZS5cbiAgICAgICAgICogICAgLSBgZmFpbGVkYDogQSBmdW5jdGlvbiBgKGpvYilgIGludm9rZWQgaWYgdGhlIGpvYiBmYWlscyBleGVjdXRpbmcgb24gdGhlIHNlcnZlci4gTm8gZnVydGhlciBwb2xsaW5nIGlzIGRvbmUuXG4gICAgICAgICAqICAgIC0gYGVycm9yYDogQSBmdW5jdGlvbiBgKGVycilgIGludm9rZWQgaWYgYW4gZXJyb3Igb2NjdXJzIHdoaWxlIHBvbGxpbmcuIE5vIGZ1cnRoZXIgcG9sbGluZyBpcyBkb25lLlxuICAgICAgICAgKiBPciwgaWYgYSBmdW5jdGlvbiBgKGpvYilgLCBlcXVpdmFsZW50IHRvIHBhc3NpbmcgaXQgYXMgYSBgZG9uZWAgY2FsbGJhY2suXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JcbiAgICAgICAgICovXG4gICAgICAgIHRyYWNrOiBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHZhciBwZXJpb2QgPSBvcHRpb25zLnBlcmlvZCB8fCA1MDA7IC8vIG1zXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKGNhbGxiYWNrcykpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBub0NhbGxiYWNrc0FmdGVyUmVhZHkgPSAoXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5wcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgICFjYWxsYmFja3MuZG9uZSAmJlxuICAgICAgICAgICAgICAgICFjYWxsYmFja3MuZmFpbGVkICYmXG4gICAgICAgICAgICAgICAgIWNhbGxiYWNrcy5lcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlYWR5ID0gY2FsbGJhY2tzLnJlYWR5IHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MucHJvZ3Jlc3MgPSBjYWxsYmFja3MucHJvZ3Jlc3MgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5kb25lID0gY2FsbGJhY2tzLmRvbmUgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5mYWlsZWQgPSBjYWxsYmFja3MuZmFpbGVkIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBjYWxsYmFja3MuZXJyb3IgPSBjYWxsYmFja3MuZXJyb3IgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9yIHVzZSBieSB0ZXN0cyBvbmx5XG4gICAgICAgICAgICBjYWxsYmFja3MuX3ByZXJlYWR5ID0gY2FsbGJhY2tzLl9wcmVyZWFkeSB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeSA9IGNhbGxiYWNrcy5fc3RvcHBlZEFmdGVyUmVhZHkgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGVtaXR0ZWRSZWFkeSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGRvbmVMb29waW5nID0gZmFsc2U7XG4gICAgICAgICAgICBBc3luYy53aGlsc3QoXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiAhZG9uZUxvb3Bpbmc7IH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24obmV4dEl0ZXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmZldGNoKGZ1bmN0aW9uKGVyciwgam9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3BhdGNoU3RhdGUgPSBqb2IucHJvcGVydGllcygpLmRpc3BhdGNoU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90UmVhZHkgPSBkaXNwYXRjaFN0YXRlID09PSBcIlFVRVVFRFwiIHx8IGRpc3BhdGNoU3RhdGUgPT09IFwiUEFSU0lOR1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdFJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLl9wcmVyZWFkeShqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWl0dGVkUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnJlYWR5KGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWRSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IERvbid0IGtlZXAgcG9sbGluZyB0aGUgam9iIGlmIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZXIgb25seSBjYXJlcyBhYm91dCB0aGUgYHJlYWR5YCBldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vQ2FsbGJhY2tzQWZ0ZXJSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLl9zdG9wcGVkQWZ0ZXJSZWFkeShqb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLnByb2dyZXNzKGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gam9iLnByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2hTdGF0ZSA9PT0gXCJET05FXCIgJiYgcHJvcHMuaXNEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5kb25lKGpvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lTG9vcGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVyYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkaXNwYXRjaFN0YXRlID09PSBcIkZBSUxFRFwiICYmIHByb3BzLmlzRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5mYWlsZWQoam9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVMb29waW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luYy5zbGVlcChwZXJpb2QsIG5leHRJdGVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlc3VtZXMgYSBzZWFyY2ggam9iLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHZhciBqb2IgPSBzZXJ2aWNlLmpvYnMoKS5pdGVtKFwibXlzaWRcIik7XG4gICAgICAgICAqICAgICAgam9iLnVucGF1c2UoZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiSk9CIFVOUEFVU0VEXCIpO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgc2VhcmNoIGpvYjogYChlcnIsIGpvYilgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnMve3NlYXJjaF9pZH0vY29udHJvbFxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuSm9iXG4gICAgICAgICAqL1xuICAgICAgICB1bnBhdXNlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgcmVxID0gdGhpcy5wb3N0KFwiY29udHJvbFwiLCB7YWN0aW9uOiBcInVucGF1c2VcIn0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgdGhhdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2Ygc2VhcmNoIGpvYnMuIFlvdSBjYW4gY3JlYXRlIGFuZCBsaXN0IHNlYXJjaCBcbiAgICAgKiBqb2JzIHVzaW5nIHRoaXMgY29sbGVjdGlvbiBjb250YWluZXIsIG9yIGdldCBhIHNwZWNpZmljIHNlYXJjaCBqb2IuXG4gICAgICpcbiAgICAgKiBAZW5kcG9pbnQgc2VhcmNoL2pvYnNcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5Db2xsZWN0aW9uXG4gICAgICovICBcbiAgICByb290LkpvYnMgPSByb290LkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5qb2JzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBsb2NhbCBpbnN0YW5jZSBvZiBhIGpvYi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGlzIG5ldyBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkpvYn0gQSBuZXcgYHNwbHVua2pzLlNlcnZpY2UuSm9iYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovXG4gICAgICAgIGluc3RhbnRpYXRlRW50aXR5OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgdmFyIHNpZCA9IHByb3BzLmNvbnRlbnQuc2lkO1xuICAgICAgICAgICAgdmFyIGVudGl0eU5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5Kb2IodGhpcy5zZXJ2aWNlLCBzaWQsIGVudGl0eU5hbWVzcGFjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIE5hbWVzcGFjZSBpbmZvcm1hdGlvbjpcbiAgICAgICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBTcGx1bmsgdXNlcm5hbWUsIHN1Y2ggYXMgXCJhZG1pblwiLiBBIHZhbHVlIG9mIFwibm9ib2R5XCIgbWVhbnMgbm8gc3BlY2lmaWMgdXNlci4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCB1c2Vycy5cbiAgICAgICAgICogICAgLSBgYXBwYCAoX3N0cmluZ18pOiBUaGUgYXBwIGNvbnRleHQgZm9yIHRoaXMgcmVzb3VyY2UgKHN1Y2ggYXMgXCJzZWFyY2hcIikuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgYXBwcy5cbiAgICAgICAgICogICAgLSBgc2hhcmluZ2AgKF9zdHJpbmdfKTogQSBtb2RlIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgcmVzb3VyY2UgaXMgc2hhcmVkLiBUaGUgc2hhcmluZyBtb2RlIGNhbiBiZSBcInVzZXJcIiwgXCJhcHBcIiwgXCJnbG9iYWxcIiwgb3IgXCJzeXN0ZW1cIi5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5Kb2JzfSBBIG5ldyBgc3BsdW5ranMuU2VydmljZS5Kb2JzYCBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkpvYnNcbiAgICAgICAgICovICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oc2VydmljZSwgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0aGUgYmluZGluZ3Mgc28gdGhhdCBldmVyeSBmdW5jdGlvbiB3b3JrcyBcbiAgICAgICAgICAgIC8vIHByb3Blcmx5IHdoZW4gaXQgaXMgcGFzc2VkIGFzIGEgY2FsbGJhY2suXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZSAgICAgPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMuY3JlYXRlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIHNlYXJjaCBqb2Igd2l0aCBhIGdpdmVuIHNlYXJjaCBxdWVyeSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycywgaW5jbHVkaW5nIGBleGVjX21vZGVgIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2Ygc2VhcmNoOlxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPW5vcm1hbGAgdG8gcmV0dXJuIGEgc2VhcmNoIGpvYiBJRCBpbW1lZGlhdGVseSAoZGVmYXVsdCkuXG4gICAgICAgICAqICAgICAgUG9sbCBmb3IgY29tcGxldGlvbiB0byBmaW5kIG91dCB3aGVuIHlvdSBjYW4gcmV0cmlldmUgc2VhcmNoIHJlc3VsdHMuIFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAtIFVzZSBgZXhlY19tb2RlPWJsb2NraW5nYCB0byByZXR1cm4gdGhlIHNlYXJjaCBqb2IgSUQgd2hlbiB0aGUgc2VhcmNoIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICogXG4gICAgICAgICAqIFRvIHJ1biBhIG9uZXNob3Qgc2VhcmNoLCB3aGljaCBkb2VzIG5vdCBjcmVhdGUgYSBqb2IgYnV0IHJhdGhlciByZXR1cm5zIHRoZSBzZWFyY2ggcmVzdWx0cywgdXNlIGBTZXJ2aWNlLkpvYnMub25lc2hvdFNlYXJjaGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2VhcmNoIGpvYi4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBjcmVhdGVkIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21lb25lIGNhbGxlZCB1cyB3aXRoIHRoZSBkZWZhdWx0IHN0eWxlIG9mIChwYXJhbXMsIGNhbGxiYWNrKSxcbiAgICAgICAgICAgIC8vIGxldHMgbWFrZSBpdCB3b3JrXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNPYmplY3QocXVlcnkpICYmIHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zKSAmJiAhY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHBhcmFtcy5zZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5zZWFyY2ggPSBxdWVyeTsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgocGFyYW1zLmV4ZWNfbW9kZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uZXNob3RcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB1c2Ugc3BsdW5ranMuU2VydmljZS5Kb2JzLm9uZXNob3RTZWFyY2ggZm9yIGV4ZWNfbW9kZT1vbmVzaG90XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5zZWFyY2gpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhcIk11c3QgcHJvdmlkZSBhIHF1ZXJ5IHRvIGNyZWF0ZSBhIHNlYXJjaCBqb2JcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwgcGFyYW1zLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpvYiA9IG5ldyByb290LkpvYih0aGF0LnNlcnZpY2UsIHJlc3BvbnNlLmRhdGEuc2lkLCB0aGF0Lm5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGpvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgc2VhcmNoIGpvYiB3aXRoIGEgZ2l2ZW4gc2VhcmNoIHF1ZXJ5IGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgYGV4ZWNfbW9kZWAgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBzZWFyY2g6XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9bm9ybWFsYCB0byByZXR1cm4gYSBzZWFyY2ggam9iIElEIGltbWVkaWF0ZWx5IChkZWZhdWx0KS5cbiAgICAgICAgICogICAgICBQb2xsIGZvciBjb21wbGV0aW9uIHRvIGZpbmQgb3V0IHdoZW4geW91IGNhbiByZXRyaWV2ZSBzZWFyY2ggcmVzdWx0cy4gXG4gICAgICAgICAqXG4gICAgICAgICAqICAgIC0gVXNlIGBleGVjX21vZGU9YmxvY2tpbmdgIHRvIHJldHVybiB0aGUgc2VhcmNoIGpvYiBJRCB3aGVuIHRoZSBzZWFyY2ggaGFzIGZpbmlzaGVkLlxuICAgICAgICAgKiBcbiAgICAgICAgICogVG8gcnVuIGEgb25lc2hvdCBzZWFyY2gsIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBhIGpvYiBidXQgcmF0aGVyIHJldHVybnMgdGhlIHNlYXJjaCByZXN1bHRzLCB1c2UgYFNlcnZpY2UuSm9icy5vbmVzaG90U2VhcmNoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICB2YXIgam9icyA9IHNlcnZpY2Uuam9icygpO1xuICAgICAgICAgKiAgICAgIGpvYnMuc2VhcmNoKFwic2VhcmNoIEVSUk9SXCIsIHtpZDogXCJteWpvYl8xMjNcIn0sIGZ1bmN0aW9uKGVyciwgbmV3Sm9iKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ1JFQVRFRFwiOiBuZXdKb2Iuc2lkKTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgZm9yIHRoZSBzZWFyY2ggam9iLiBGb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLCBzZWUgPGEgaHJlZj1cImh0dHA6Ly9kZXYuc3BsdW5rLmNvbS92aWV3L1NQLUNBQUFFRkEjc2VhcmNoam9icGFyYW1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+U2VhcmNoIGpvYiBwYXJhbWV0ZXJzPC9hPiBvbiBTcGx1bmsgRGV2ZWxvcGVyIFBvcnRhbC5cbiAgICAgICAgICogICAgICAgICoqTm90ZToqKiBUaGlzIG1ldGhvZCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGBleGVjX21vZGU9b25lc2hvdGAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgc2VhcmNoIGpvYjogYChlcnIsIGNyZWF0ZWRKb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBzZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUocXVlcnksIHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG9uZXNob3Qgc2VhcmNoIGZyb20gYSBnaXZlbiBzZWFyY2ggcXVlcnkgYW5kIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdmFyIGpvYnMgPSBzZXJ2aWNlLmpvYnMoKTtcbiAgICAgICAgICogICAgICBqb2JzLm9uZXNob3RTZWFyY2goXCJzZWFyY2ggRVJST1JcIiwge2lkOiBcIm15am9iXzEyM1wifSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAqICAgICAgICAgIGNvbnNvbGUubG9nKFwiUkVTVUxUIEZJRUxEU1wiOiByZXN1bHRzLmZpZWxkcyk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgc2VhcmNoIHF1ZXJ5LiBcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaDpcbiAgICAgICAgICogICAgLSBgb3V0cHV0X21vZGVgIChfc3RyaW5nXyk6IFNwZWNpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiB0aGUgcmVzdWx0cyAoWE1MLCBKU09OLCBvciBDU1YpLlxuICAgICAgICAgKiAgICAtIGBlYXJsaWVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGVhcmxpZXN0IHRpbWUgaW4gdGhlIHRpbWUgcmFuZ2UgdG8gc2VhcmNoLiBUaGUgdGltZSBzdHJpbmcgY2FuIGJlIGEgVVRDIHRpbWUgKHdpdGggZnJhY3Rpb25hbCBzZWNvbmRzKSwgYSByZWxhdGl2ZSB0aW1lIHNwZWNpZmllciAodG8gbm93KSwgb3IgYSBmb3JtYXR0ZWQgdGltZSBzdHJpbmcuXG4gICAgICAgICAqICAgIC0gYGxhdGVzdF90aW1lYCAoX3N0cmluZ18pOiBTcGVjaWZpZXMgdGhlIGxhdGVzdCB0aW1lIGluIHRoZSB0aW1lIHJhbmdlIHRvIHNlYXJjaC4gVGhlIHRpbWUgc3RyaW5nIGNhbiBiZSBhIFVUQyB0aW1lICh3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyksIGEgcmVsYXRpdmUgdGltZSBzcGVjaWZpZXIgKHRvIG5vdyksIG9yIGEgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgICAgICAgKiAgICAtIGByZmAgKF9zdHJpbmdfKTogU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpZWxkcyB0byBhZGQgdG8gdGhlIHNlYXJjaC5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIHNlYXJjaDogYChlcnIsIHJlc3VsdHMpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGVuZHBvaW50IHNlYXJjaC9qb2JzXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5Kb2JzXG4gICAgICAgICAqL1xuICAgICAgICBvbmVzaG90U2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBjYWxsZWQgdXMgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZSBvZiAocGFyYW1zLCBjYWxsYmFjayksXG4gICAgICAgICAgICAvLyBsZXRzIG1ha2UgaXQgd29ya1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzT2JqZWN0KHF1ZXJ5KSAmJiB1dGlscy5pc0Z1bmN0aW9uKHBhcmFtcykgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSBwYXJhbXMuc2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBwYXJhbXMuc2VhcmNoID0gcXVlcnk7IFxuICAgICAgICAgICAgcGFyYW1zLmV4ZWNfbW9kZSA9IFwib25lc2hvdFwiO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5zZWFyY2gpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhcIk11c3QgcHJvdmlkZSBhIHF1ZXJ5IHRvIGNyZWF0ZSBhIHNlYXJjaCBqb2JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvdXRwdXRNb2RlID0gcGFyYW1zLm91dHB1dF9tb2RlIHx8IFwianNvbl9yb3dzXCI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBwYXRoID0gdGhpcy5xdWFsaWZpZWRQYXRoO1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHZhciBwb3N0ID0gcGFyYW1zO1xuICAgICAgICAgICAgdmFyIGdldCA9IHtvdXRwdXRfbW9kZTogb3V0cHV0TW9kZX07XG4gICAgICAgICAgICB2YXIgYm9keSA9IG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciByZXEgPSB0aGlzLnNlcnZpY2UucmVxdWVzdChcbiAgICAgICAgICAgICAgICBwYXRoLCBcbiAgICAgICAgICAgICAgICBtZXRob2QsIFxuICAgICAgICAgICAgICAgIGdldCwgXG4gICAgICAgICAgICAgICAgcG9zdCwgXG4gICAgICAgICAgICAgICAgYm9keSwgXG4gICAgICAgICAgICAgICAgaGVhZGVycywgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZmllbGQgb2YgYSBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKiBUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGZvciBgRGF0YU1vZGVsQ2FsY3VsYXRpb25gXG4gICAgICogYW5kIGBEYXRhTW9kZWxPYmplY3RgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgZmllbGROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiAgQSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciB0aGlzIGZpZWxkLlxuICAgICAqICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZmllbGQuXG4gICAgICogICAgLSBgbXVsdGl2YWx1ZWRgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgbXVsdGl2YWx1ZWQuXG4gICAgICogICAgLSBgcmVxdWlyZWRgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQuXG4gICAgICogICAgLSBgaGlkZGVuYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkYXRhIG1vZGVsIFVJLlxuICAgICAqICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIGNhbiBiZSBlZGl0ZWQuXG4gICAgICogICAgLSBgY29tbWVudGAgKF9zdHJpbmdfKTogQSBjb21tZW50IGZvciB0aGlzIGZpZWxkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXNuJ3Qgb25lLlxuICAgICAqICAgIC0gYGZpZWxkU2VhcmNoYCAoX3N0cmluZ18pOiBBIHNlYXJjaCBxdWVyeSBmcmFnbWVudCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2YgdGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiAgICAgICAgICBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICogICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICpcbiAgICAgKiBQb3NzaWJsZSB0eXBlcyBmb3IgYSBkYXRhIG1vZGVsIGZpZWxkOlxuICAgICAqICAgIC0gYHN0cmluZ2BcbiAgICAgKiAgICAtIGBib29sZWFuYFxuICAgICAqICAgIC0gYG51bWJlcmBcbiAgICAgKiAgICAtIGB0aW1lc3RhbXBgXG4gICAgICogICAgLSBgb2JqZWN0Q291bnRgXG4gICAgICogICAgLSBgY2hpbGRDb3VudGBcbiAgICAgKiAgICAtIGBpcHY0YFxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbEZpZWxkID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgX3R5cGVzOiBbIFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwidGltZXN0YW1wXCIsIFwib2JqZWN0Q291bnRcIiwgXCJjaGlsZENvdW50XCIsIFwiaXB2NFwiLCBcImJvb2xlYW5cIl0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgZmllbGQuXG4gICAgICAgICAqIFNESyB1c2VycyBhcmUgbm90IGV4cGVjdGVkIHRvIGludm9rZSB0aGlzIGNvbnN0cnVjdG9yIGRpcmVjdGx5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgIC0gYGZpZWxkTmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZmllbGQuXG4gICAgICAgICAqICAgICAtIGB0eXBlYCAoX3N0cmluZ18pOiBUaGUgdHlwZSBvZiB0aGlzIGZpZWxkLCBzZWUgdmFsaWQgdHlwZXMgaW4gY2xhc3MgZG9jcy5cbiAgICAgICAgICogICAgIC0gYG11bHRpdmFsdWVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgaXMgbXVsdGl2YWx1ZWQuXG4gICAgICAgICAqICAgICAtIGByZXF1aXJlZGAgKF9ib29sZWFuXyk6IFdoZXRoZXIgdGhpcyBmaWVsZCBpcyByZXF1aXJlZCBvbiBldmVudHMgaW4gdGhlIG9iamVjdFxuICAgICAgICAgKiAgICAgLSBgaGlkZGVuYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGZpZWxkIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkYXRhIG1vZGVsIFVJLlxuICAgICAgICAgKiAgICAgLSBgZWRpdGFibGVgIChfYm9vbGVhbl8pOiBXaGV0aGVyIHRoaXMgZmllbGQgY2FuIGJlIGVkaXRlZC5cbiAgICAgICAgICogICAgIC0gYGNvbW1lbnRgIChfc3RyaW5nXyk6IEEgY29tbWVudCBmb3IgdGhpcyBmaWVsZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICAgICAgICogICAgIC0gYGZpZWxkU2VhcmNoYCAoX3N0cmluZ18pOiBBIHNlYXJjaCBxdWVyeSBmcmFnbWVudCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgICogICAgIC0gYGxpbmVhZ2VgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGZpZWxkXG4gICAgICAgICAqICAgICAgICAgIGlzIGRlZmluZWQsIGl0ZW1zIGFyZSBkZWxpbWl0ZWQgYnkgYSBkb3QuIFRoaXMgaXMgY29udmVydGVkIGludG8gYW4gYXJyYXkgb2ZcbiAgICAgICAgICogICAgICAgICAgc3RyaW5ncyB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICA9IHByb3BzLmZpZWxkTmFtZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgICAgPSBwcm9wcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHRoaXMudHlwZSAgICAgICAgICAgPSBwcm9wcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5tdWx0aXZhbHVlZCAgICA9IHByb3BzLm11bHRpdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkICAgICAgID0gcHJvcHMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbiAgICAgICAgID0gcHJvcHMuaGlkZGVuO1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZSAgICAgICA9IHByb3BzLmVkaXRhYmxlO1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ICAgICAgICA9IHByb3BzLmNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2ggICAgPSBwcm9wcy5maWVsZFNlYXJjaDtcbiAgICAgICAgICAgIHRoaXMubGluZWFnZSAgICAgICAgPSBwcm9wcy5vd25lci5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0aGlzLm93bmVyICAgICAgICAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgc3RyaW5nP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIHN0cmluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBudW1iZXI/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgbnVtYmVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsRmllbGRcbiAgICAgICAgICovXG4gICAgICAgIGlzTnVtYmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBvZiB0eXBlIHRpbWVzdGFtcD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgZmllbGQgaXMgb2YgdHlwZSB0aW1lc3RhbXAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNUaW1lc3RhbXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidGltZXN0YW1wXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgb2JqZWN0IGNvdW50P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIG9iamVjdCBjb3VudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkXG4gICAgICAgICAqL1xuICAgICAgICBpc09iamVjdGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm9iamVjdENvdW50XCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIG9mIHR5cGUgY2hpbGQgY291bnQ/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGZpZWxkIGlzIG9mIHR5cGUgY2hpbGQgY291bnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNDaGlsZGNvdW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImNoaWxkQ291bnRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBpcHY0P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIGlwdjQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNJUHY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImlwdjRcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgZmllbGQgb2YgdHlwZSBib29sZWFuP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBmaWVsZCBpcyBvZiB0eXBlIGJvb2xlYW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgKi9cbiAgICAgICAgaXNCb29sZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcImJvb2xlYW5cIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbnN0cmFpbnQgb24gYSBgRGF0YU1vZGVsT2JqZWN0YCBvciBhIGBEYXRhTW9kZWxGaWVsZGAuXG4gICAgICpcbiAgICAgKiBIYXMgdGhlc2UgcHJvcGVydGllczpcbiAgICAgKiAgICAtIGBxdWVyeWAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSBkZWZpbmluZyB0aGlzIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IFRoZSBsaW5lYWdlIG9mIHRoaXMgZGF0YSBtb2RlbCBjb25zdHJhaW50LlxuICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCBvYmplY3QgdGhhdCBvd25zXG4gICAgICogICAgICAgICAgdGhpcyBkYXRhIG1vZGVsIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDb25zdHJhaW50XG4gICAgICovXG4gICAgcm9vdC5EYXRhTW9kZWxDb25zdHJhaW50ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgY29uc3RyYWludC5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHNlYXJjaCBxdWVyeSB0aGlzIGNvbnN0cmFpbnQgc3BlY2lmaWVzLlxuICAgICAgICAgKiAgICAgLSBgb3duZXJgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGF0IG93bnMgdGhpc1xuICAgICAgICAgKiAgICAgICAgICBjb25zdHJhaW50LCBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvXG4gICAgICAgICAqICAgICAgICAgIGFuIGFycmF5IG9mIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDb25zdHJhaW50XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICAgIHByb3BzLm93bmVyID0gcHJvcHMub3duZXIgfHwgXCJcIjtcblxuICAgICAgICAgICAgdGhpcy5xdWVyeSAgID0gcHJvcHMuc2VhcmNoO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlID0gcHJvcHMub3duZXIuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgdGhpcy5vd25lciAgID0gdGhpcy5saW5lYWdlW3RoaXMubGluZWFnZS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIHNwZWNpZnlpbmcgYSBjYWxjdWxhdGlvbiBvbiBhIGBEYXRhTW9kZWxPYmplY3RgLlxuICAgICAqXG4gICAgICogSGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICogICAgLSBgaWRgIChfc3RyaW5nXyk6IFRoZSBJRCBmb3IgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uLlxuICAgICAqICAgIC0gYHR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbi5cbiAgICAgKiAgICAtIGBjb21tZW50YCAoX3N0cmluZ198X251bGxfKTogVGhlIGNvbW1lbnQgZm9yIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiwgb3IgYG51bGxgLlxuICAgICAqICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogVHJ1ZSBpZiB0aGlzIGNhbGN1bGF0aW9uIGNhbiBiZSBlZGl0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBvbiB3aGljaCB0aGlzIGNhbGN1bGF0aW9uXG4gICAgICogICAgICAgICAgaXMgZGVmaW5lZCBpbiBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgZGF0YSBtb2RlbCB0aGF0IHRoaXMgY2FsY3VsYXRpb24gYmVsb25ncyB0by5cbiAgICAgKiAgICAtIGBvdXRwdXRGaWVsZHNgIChfYXJyYXlfKTogVGhlIGZpZWxkcyBvdXRwdXQgYnkgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBSZXggYW5kIEV2YWwgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIHByb3BlcnR5OlxuICAgICAqICAgIC0gYGV4cHJlc3Npb25gIChfc3RyaW5nXyk6IFRoZSBleHByZXNzaW9uIHRvIHVzZSBmb3IgdGhpcyBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBSZXggYW5kIEdlb0lQIHR5cGVzIGhhdmUgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eTpcbiAgICAgKiAgICAtIGBpbnB1dEZpZWxkYCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBjYWxjdWxhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBMb29rdXAgdHlwZSBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGxvb2t1cE5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoZSBsb29rdXAgdG8gcGVyZm9ybS5cbiAgICAgKiAgICAtIGBpbnB1dEZpZWxkTWFwcGluZ3NgIChfb2JqZWN0Xyk6IFRoZSBtYXBwaW5ncyBmcm9tIGZpZWxkcyBpbiB0aGUgZXZlbnRzIHRvIGZpZWxkcyBpbiB0aGUgbG9va3VwLlxuICAgICAqXG4gICAgICogVmFsaWQgdHlwZXMgb2YgY2FsY3VsYXRpb25zIGFyZTpcbiAgICAgKiAgICAtIGBMb29rdXBgXG4gICAgICogICAgLSBgRXZhbGBcbiAgICAgKiAgICAtIGBHZW9JUGBcbiAgICAgKiAgICAtIGBSZXhgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsQ2FsY3VsYXRpb24gPSBDbGFzcy5leHRlbmQoe1xuICAgICAgICBfdHlwZXM6IFtcIkxvb2t1cFwiLCBcIkV2YWxcIiwgXCJHZW9JUFwiLCBcIlJleFwiXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGEgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbi5cbiAgICAgICAgICogU0RLIHVzZXJzIGFyZSBub3QgZXhwZWN0ZWQgdG8gaW52b2tlIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gc2V0OlxuICAgICAgICAgKiAgICAgLSBgY2FsY3VsYXRpb25JRGAgKF9zdHJpbmdfKTogVGhlIElEIG9mIHRoaXMgY2FsY3VsYXRpb24uXG4gICAgICAgICAqICAgICAtIGBjYWxjdWxhdGlvblR5cGVgIChfc3RyaW5nXyk6IFRoZSB0eXBlIG9mIHRoaXMgY2FsY3VsYXRpb24sIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogICAgIC0gYGVkaXRhYmxlYCAoX2Jvb2xlYW5fKTogV2hldGhlciB0aGlzIGNhbGN1bGF0aW9uIGNhbiBiZSBlZGl0ZWQuXG4gICAgICAgICAqICAgICAtIGBjb21tZW50YCAoX3N0cmluZ18pOiBBIGNvbW1lbnQgZm9yIHRoaXMgY2FsY3VsYXRpb24sIG9yIGBudWxsYCBpZiB0aGVyZSBpc24ndCBvbmUuXG4gICAgICAgICAqICAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IG9uIHdoaWNoIHRoaXMgY2FsY3VsYXRpb25cbiAgICAgICAgICogICAgICAgICAgaXMgZGVmaW5lZCwgaXRlbXMgYXJlIGRlbGltaXRlZCBieSBhIGRvdC4gVGhpcyBpcyBjb252ZXJ0ZWQgaW50byBhbiBhcnJheSBvZlxuICAgICAgICAgKiAgICAgICAgICBzdHJpbmdzIHVwb24gY29uc3RydWN0aW9uLlxuICAgICAgICAgKiAgICAgLSBgb3V0cHV0RmllbGRzYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHRoZSBmaWVsZHMgdGhpcyBjYWxjdWxhdGlvbiBnZW5lcmF0ZXMuXG4gICAgICAgICAqICAgICAtIGBleHByZXNzaW9uYCAoX3N0cmluZ18pOiBUaGUgZXhwcmVzc2lvbiB0byB1c2UgZm9yIHRoaXMgY2FsY3VsYXRpb247IGV4Y2x1c2l2ZSB0byBgRXZhbGAgYW5kIGBSZXhgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBpbnB1dEZpZWxkYCAoX3N0cmluZ18pOiBUaGUgZmllbGQgdG8gdXNlIGZvciBjYWxjdWxhdGlvbjsgZXhjbHVzaXZlIHRvIGBHZW9JUGAgYW5kIGBSZXhgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqICAgICAtIGBsb29rdXBOYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgbG9va3VwIHRvIHBlcmZvcm07IGV4Y2x1c2l2ZSB0byBgTG9va3VwYCBjYWxjdWxhdGlvbnMgKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgaW5wdXRGaWVsZE1hcHBpbmdzYCAoX2FycmF5Xyk6IE9uZSBlbGVtZW50IGFycmF5IGNvbnRhaW5pbmcgYW4gb2JqZWN0IHdpdGggdGhlIG1hcHBpbmdzIGZyb20gZmllbGRzIGluIHRoZSBldmVudHMgdG8gZmllbGRzXG4gICAgICAgICAqICAgICAgICAgaW4gdGhlIGxvb2t1cDsgZXhjbHVzaXZlIHRvIGBMb29rdXBgIGNhbGN1bGF0aW9ucyAob3B0aW9uYWwpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaW5pdDogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgICAgICBwcm9wcy5vd25lciA9IHByb3BzLm93bmVyIHx8IFwiXCI7XG5cbiAgICAgICAgICAgIHRoaXMuaWQgICAgICAgICAgICAgPSBwcm9wcy5jYWxjdWxhdGlvbklEO1xuICAgICAgICAgICAgdGhpcy50eXBlICAgICAgICAgICA9IHByb3BzLmNhbGN1bGF0aW9uVHlwZTtcbiAgICAgICAgICAgIHRoaXMuY29tbWVudCAgICAgICAgPSBwcm9wcy5jb21tZW50IHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlICAgICAgID0gcHJvcHMuZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmxpbmVhZ2UgICAgICAgID0gcHJvcHMub3duZXIuc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgdGhpcy5vd25lciAgICAgICAgICA9IHRoaXMubGluZWFnZVt0aGlzLmxpbmVhZ2UubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIHRoaXMub3V0cHV0RmllbGRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLm91dHB1dEZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0RmllbGRzW3Byb3BzLm91dHB1dEZpZWxkc1tpXS5maWVsZE5hbWVdID0gbmV3IHJvb3QuRGF0YU1vZGVsRmllbGQocHJvcHMub3V0cHV0RmllbGRzW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwiRXZhbFwiID09PSB0aGlzLnR5cGUgfHwgXCJSZXhcIiA9PT0gdGhpcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gcHJvcHMuZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcIkdlb0lQXCIgPT09IHRoaXMudHlwZSB8fCBcIlJleFwiID09PSB0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RmllbGQgPSBwcm9wcy5pbnB1dEZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiTG9va3VwXCIgPT09IHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va3VwTmFtZSA9IHByb3BzLmxvb2t1cE5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEZpZWxkTWFwcGluZ3MgPSBwcm9wcy5sb29rdXBJbnB1dHNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiBvdXRwdXQgZmllbGQgbmFtZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIG9mIG91dHB1dCBmaWVsZCBuYW1lcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBvdXRwdXRGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm91dHB1dEZpZWxkcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBlZGl0YWJsZT9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgZWRpdGFibGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxDYWxjdWxhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXNFZGl0YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmVkaXRhYmxlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBsb29rdXA/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgbG9va3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsQ2FsY3VsYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzTG9va3VwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkxvb2t1cFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBvZiB0eXBlIGV2YWw/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgaWYgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIGlzIG9mIHR5cGUgZXZhbC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0V2YWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXZhbFwiID09PSB0aGlzLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIGNhbGN1bGF0aW9uIG9mIHR5cGUgUmV4P1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBjYWxjdWxhdGlvbiBpcyBvZiB0eXBlIFJleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc1JleDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJSZXhcIiA9PT0gdGhpcy50eXBlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gb2YgdHlwZSBHZW9JUD9cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY2FsY3VsYXRpb24gaXMgb2YgdHlwZSBHZW9JUC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbENhbGN1bGF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpc0dlb0lQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkdlb0lQXCIgPT09IHRoaXMudHlwZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8qKlxuICAgICAqIFBpdm90IHJlcHJlc2VudHMgZGF0YSBhYm91dCBhIHBpdm90IHJlcG9ydCByZXR1cm5lZCBieSB0aGUgU3BsdW5rIFNlcnZlci5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYHNlcnZpY2VgIChfc3BsdW5ranMuU2VydmljZV8pOiBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgKiAgICAtIGBzZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggc3RyaW5nIGZvciBydW5uaW5nIHRoZSBwaXZvdCByZXBvcnQuXG4gICAgICogICAgLSBgZHJpbGxkb3duU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIGRyaWxsZG93bi5cbiAgICAgKiAgICAtIGBvcGVuSW5TZWFyY2hgIChfc3RyaW5nXyk6IEVxdWl2YWxlbnQgdG8gc2VhcmNoIHBhcmFtZXRlciwgYnV0IGxpc3RlZCBtb3JlIHNpbXBseS5cbiAgICAgKiAgICAtIGBwcmV0dHlRdWVyeWAgKF9zdHJpbmdfKTogRXF1aXZhbGVudCB0byBgb3BlbkluU2VhcmNoYC5cbiAgICAgKiAgICAtIGBwaXZvdFNlYXJjaGAgKF9zdHJpbmdfKTogQSBwaXZvdCBzZWFyY2ggY29tbWFuZCBiYXNlZCBvbiB0aGUgbmFtZWQgZGF0YSBtb2RlbC5cbiAgICAgKiAgICAtIGB0c3RhdHNTZWFyY2hgIChfc3RyaW5nXyk6IFRoZSBzZWFyY2ggZm9yIHJ1bm5pbmcgdGhpcyBwaXZvdCByZXBvcnQgdXNpbmcgdHN0YXRzLlxuICAgICAqXG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RcbiAgICAgKi9cbiAgICByb290LlBpdm90ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIHBpdm90LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7c3BsdW5ranMuU2VydmljZX0gc2VydmljZSBBIGBTZXJ2aWNlYCBpbnN0YW5jZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHRvIHNldDpcbiAgICAgICAgICogICAgLSBgc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHN0cmluZyBmb3IgcnVubmluZyB0aGUgcGl2b3QgcmVwb3J0LlxuICAgICAgICAgKiAgICAtIGBkcmlsbGRvd25fc2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIGZvciBydW5uaW5nIHRoaXMgcGl2b3QgcmVwb3J0IHVzaW5nIGRyaWxsZG93bi5cbiAgICAgICAgICogICAgLSBgb3Blbl9pbl9zZWFyY2hgIChfc3RyaW5nXyk6IEVxdWl2YWxlbnQgdG8gc2VhcmNoIHBhcmFtZXRlciwgYnV0IGxpc3RlZCBtb3JlIHNpbXBseS5cbiAgICAgICAgICogICAgLSBgcGl2b3Rfc2VhcmNoYCAoX3N0cmluZ18pOiBBIHBpdm90IHNlYXJjaCBjb21tYW5kIGJhc2VkIG9uIHRoZSBuYW1lZCBkYXRhIG1vZGVsLlxuICAgICAgICAgKiAgICAtIGB0c3RhdHNfc2VhcmNoYCAoX3N0cmluZ198X251bGxfKTogVGhlIHNlYXJjaCBmb3IgcnVubmluZyB0aGlzIHBpdm90IHJlcG9ydCB1c2luZyB0c3RhdHMsIG51bGwgaWYgYWNjZWxlcmF0aW9uIGlzIGRpc2FibGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBwcm9wcy5zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLmRyaWxsZG93blNlYXJjaCA9IHByb3BzLmRyaWxsZG93bl9zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLnByZXR0eVF1ZXJ5ID0gdGhpcy5vcGVuSW5TZWFyY2ggPSBwcm9wcy5vcGVuX2luX3NlYXJjaDtcbiAgICAgICAgICAgIHRoaXMucGl2b3RTZWFyY2ggPSBwcm9wcy5waXZvdF9zZWFyY2g7XG4gICAgICAgICAgICB0aGlzLnRzdGF0c1NlYXJjaCA9IHByb3BzLnRzdGF0c19zZWFyY2ggfHwgbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5ydW4gPSB1dGlscy5iaW5kKHRoaXMsIHRoaXMucnVuKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3RhcnRzIGEgc2VhcmNoIGpvYiBydW5uaW5nIHRoaXMgcGl2b3QsIGFjY2VsZXJhdGVkIGlmIHBvc3NpYmxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IgKG9wdGlvbmFsKS4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkb25lIGNyZWF0aW5nIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgam9iKWAuXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFxuICAgICAgICAgKi9cbiAgICAgICAgcnVuOiBmdW5jdGlvbihhcmdzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gYXJncztcbiAgICAgICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFyZ3MgfHwgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0c3RhdHMgaXMgdW5kZWZpbmVkLCB1c2UgcGl2b3RTZWFyY2ggKHRyeSB0byBydW4gYW4gYWNjZWxlcmF0ZWQgc2VhcmNoIGlmIHBvc3NpYmxlKVxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnNlYXJjaCh0aGlzLnRzdGF0c1NlYXJjaCB8fCB0aGlzLnBpdm90U2VhcmNoLCBhcmdzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFBpdm90U3BlY2lmaWNhdGlvbiByZXByZXNlbnRzIGEgcGl2b3QgdG8gYmUgZG9uZSBvbiBhIHBhcnRpY3VsYXIgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICogVGhlIHVzZXIgY3JlYXRlcyBhIFBpdm90U3BlY2lmaWNhdGlvbiBvbiBzb21lIGRhdGEgbW9kZWwgb2JqZWN0LCBhZGRzIGZpbHRlcnMsIHJvdyBzcGxpdHMsXG4gICAgICogY29sdW1uIHNwbGl0cywgYW5kIGNlbGwgdmFsdWVzLCB0aGVuIGNhbGxzIHRoZSBwaXZvdCBtZXRob2QgdG8gcXVlcnkgc3BsdW5rZCBhbmRcbiAgICAgKiBnZXQgYSBzZXQgb2YgU1BMIHF1ZXJpZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBDYWxsIHRoZSBgcGl2b3RgIG1ldGhvZCB0byBxdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXZvdC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgYSBmbHVlbnQgQVBJLCBlYWNoIGZ1bmN0aW9uIGV4Y2VwdCBgaW5pdGAsIGB0b0pzb25PYmplY3RgICYgYHBpdm90YFxuICAgICAqIHJldHVybiB0aGUgbW9kaWZpZWQgYHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uYCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAqICAgICAgICAgdmFyIHNlYXJjaGVzID0gZGF0YU1vZGVscy5pdGVtKFwiaW50ZXJuYWxfYXVkaXRfbG9nc1wiKS5vYmplY3RCeU5hbWUoXCJzZWFyY2hlc1wiKTtcbiAgICAgKiAgICAgICAgIHZhciBwaXZvdFNwZWNpZmljYXRpb24gPSBzZWFyY2hlcy5jcmVhdGVQaXZvdFNwZWNpZmljYXRpb24oKTtcbiAgICAgKiAgICAgICAgIHBpdm90U3BlY2lmaWNhdGlvblxuICAgICAqICAgICAgICAgICAgIC5hZGRSb3dTcGxpdChcInVzZXJcIiwgXCJFeGVjdXRpbmcgdXNlclwiKVxuICAgICAqICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtsaW1pdDogNH0pXG4gICAgICogICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAqICAgICAgICAgICAgIC5waXZvdChmdW5jdGlvbihlcnIsIHBpdm90KSB7XG4gICAgICogICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR290IGEgUGl2b3Qgb2JqZWN0IGZyb20gdGhlIFNwbHVuayBzZXJ2ZXIhXCIpO1xuICAgICAqICAgICAgICAgICAgIH0pO1xuICAgICAqICAgICB9KTtcbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGRhdGFNb2RlbE9iamVjdGAgKF9zcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdF8pOiBUaGUgYERhdGFNb2RlbE9iamVjdGAgZnJvbSB3aGljaFxuICAgICAqICAgICAgICB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gIHdhcyBjcmVhdGVkLlxuICAgICAqICAgIC0gYGNvbHVtbnNgIChfYXJyYXlfKTogVGhlIGNvbHVtbiBzcGxpdHMgb24gdGhpcyBgUGl2b3RTcGVjaWZpY2F0aW9uYC5cbiAgICAgKiAgICAtIGByb3dzYCAoX2FycmF5Xyk6IFRoZSByb3cgc3BsaXRzIG9uIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAuXG4gICAgICogICAgLSBgZmlsdGVyc2AgKF9hcnJheV8pOiBUaGUgZmlsdGVycyBvbiB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYGNlbGxzYCAoX2FycmF5Xyk6IFRoZSBjZWxsIGFnZ3JlZ2F0aW9ucyBmb3IgdGhpc2BQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAqICAgIC0gYGFjY2VsZXJhdGlvbk5hbWVzcGFjZWAgKF9zdHJpbmdffF9udWxsXyk6IFRoZSBuYW1lIG9mIHRoZSBgRGF0YU1vZGVsYCB0aGF0IG93bnMgdGhlIGBEYXRhTW9kZWxPYmplY3RgXG4gICAgICogICAgICAgIG9uIHdoaWNoIHRoaXMgYFBpdm90U3BlY2lmaWNhdGlvbmAgd2FzIGNyZWF0ZWQgaWYgdGhlIGBEYXRhTW9kZWxgIGlzIGFjY2VsZXJhdGVkLiBBbHRlcm5hdGl2ZWx5LFxuICAgICAqICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHByb3BlcnR5IG1hbnVhbGx5IHRvIHRoZSBzaWQgb2YgYW4gYWNjZWxlcmF0aW9uIGpvYiBpbiB0aGUgZm9ybWF0IGBzaWQ9PHNpZD5gLlxuICAgICAqXG4gICAgICogVmFsaWQgY29tcGFyaXNvbiB0eXBlcyBhcmU6XG4gICAgICogICAgLSBgYm9vbGVhbmBcbiAgICAgKiAgICAtIGBzdHJpbmdgXG4gICAgICogICAgLSBgbnVtYmVyYFxuICAgICAqICAgIC0gYGlwdjRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBib29sZWFuIGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGA9YFxuICAgICAqICAgIC0gYGlzYFxuICAgICAqICAgIC0gYGlzTnVsbGBcbiAgICAgKiAgICAtIGBpc05vdE51bGxgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzdHJpbmcgY29tcGFyaXNvbnMgYXJlOlxuICAgICAqICAgIC0gYD1gXG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKiAgICAtIGBjb250YWluc2BcbiAgICAgKiAgICAtIGBkb2VzTm90Q29udGFpbmBcbiAgICAgKiAgICAtIGBzdGFydHNXaXRoYFxuICAgICAqICAgIC0gYGVuZHNXaXRoYFxuICAgICAqICAgIC0gYHJlZ2V4YFxuICAgICAqXG4gICAgICogVmFsaWQgbnVtYmVyIGNvbXBhcmlzb25zIGFyZTpcbiAgICAgKiAgICAtIGA9YFxuICAgICAqICAgIC0gYCE9YFxuICAgICAqICAgIC0gYDxgXG4gICAgICogICAgLSBgPmBcbiAgICAgKiAgICAtIGA8PWBcbiAgICAgKiAgICAtIGA+PWBcbiAgICAgKiAgICAtIGBpc2BcbiAgICAgKiAgICAtIGBpc051bGxgXG4gICAgICogICAgLSBgaXNOb3ROdWxsYFxuICAgICAqXG4gICAgICogVmFsaWQgaXB2NCBjb21wYXJpc29ucyBhcmU6XG4gICAgICogICAgLSBgaXNgXG4gICAgICogICAgLSBgaXNOdWxsYFxuICAgICAqICAgIC0gYGlzTm90TnVsbGBcbiAgICAgKiAgICAtIGBjb250YWluc2BcbiAgICAgKiAgICAtIGBkb2VzTm90Q29udGFpbmBcbiAgICAgKiAgICAtIGBzdGFydHNXaXRoYFxuICAgICAqXG4gICAgICogVmFsaWQgYmlubmluZyB2YWx1ZXMgYXJlOlxuICAgICAqICAgIC0gYGF1dG9gXG4gICAgICogICAgLSBgeWVhcmBcbiAgICAgKiAgICAtIGBtb250aGBcbiAgICAgKiAgICAtIGBkYXlgXG4gICAgICogICAgLSBgaG91cmBcbiAgICAgKiAgICAtIGBtaW51dGVgXG4gICAgICogICAgLSBgc2Vjb25kYFxuICAgICAqXG4gICAgICogVmFsaWQgc29ydCBkaXJlY3Rpb25zIGFyZTpcbiAgICAgKiAgICAtIGBBU0NFTkRJTkdgXG4gICAgICogICAgLSBgREVDRU5ESU5HYFxuICAgICAqICAgIC0gYERFRkFVTFRgXG4gICAgICpcbiAgICAgKiBWYWxpZCBzdGF0cyBmdW5jdGlvbnMgYXJlOlxuICAgICAqICAgIC0gYGxpc3RgXG4gICAgICogICAgLSBgdmFsdWVzYFxuICAgICAqICAgIC0gYGZpcnN0YFxuICAgICAqICAgIC0gYGxhc3RgXG4gICAgICogICAgLSBgY291bnRgXG4gICAgICogICAgLSBgZGNgXG4gICAgICogICAgLSBgc3VtYFxuICAgICAqICAgIC0gYGF2ZXJhZ2VgXG4gICAgICogICAgLSBgbWF4YFxuICAgICAqICAgIC0gYG1pbmBcbiAgICAgKiAgICAtIGBzdGRldmBcbiAgICAgKiAgICAtIGBkdXJhdGlvbmBcbiAgICAgKiAgICAtIGBlYXJsaWVzdGBcbiAgICAgKiAgICAtIGBsYXRlc3RgXG4gICAgICpcbiAgICAgKiBAY2xhc3Mgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgKi9cbiAgICByb290LlBpdm90U3BlY2lmaWNhdGlvbiA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIF9jb21wYXJpc29uczoge1xuICAgICAgICAgICAgYm9vbGVhbjogW1wiPVwiLCBcImlzXCIsIFwiaXNOdWxsXCIsIFwiaXNOb3ROdWxsXCJdLFxuICAgICAgICAgICAgc3RyaW5nOiBbXCI9XCIsIFwiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIiwgXCJjb250YWluc1wiLCBcImRvZXNOb3RDb250YWluXCIsIFwic3RhcnRzV2l0aFwiLCBcImVuZHNXaXRoXCIsIFwicmVnZXhcIl0sXG4gICAgICAgICAgICBudW1iZXI6IFtcIj1cIiwgXCIhPVwiLCBcIjxcIiwgXCI+XCIsIFwiPD1cIiwgXCI+PVwiLCBcImlzXCIsIFwiaXNOdWxsXCIsIFwiaXNOb3ROdWxsXCJdLFxuICAgICAgICAgICAgaXB2NDogW1wiaXNcIiwgXCJpc051bGxcIiwgXCJpc05vdE51bGxcIiwgXCJjb250YWluc1wiLCBcImRvZXNOb3RDb250YWluXCIsIFwic3RhcnRzV2l0aFwiXVxuICAgICAgICB9LFxuICAgICAgICBfYmlubmluZzogW1wiYXV0b1wiLCBcInllYXJcIiwgXCJtb250aFwiLCBcImRheVwiLCBcImhvdXJcIiwgXCJtaW51dGVcIiwgXCJzZWNvbmRcIl0sXG4gICAgICAgIF9zb3J0RGlyZWN0aW9uOiBbXCJBU0NFTkRJTkdcIiwgXCJERVNDRU5ESU5HXCIsIFwiREVGQVVMVFwiXSxcbiAgICAgICAgX3N0YXRzRnVuY3Rpb25zOiBbXCJsaXN0XCIsIFwidmFsdWVzXCIsIFwiZmlyc3RcIiwgXCJsYXN0XCIsIFwiY291bnRcIiwgXCJkY1wiLCBcInN1bVwiLCBcImF2ZXJhZ2VcIiwgXCJtYXhcIiwgXCJtaW5cIiwgXCJzdGRldlwiLCBcImR1cmF0aW9uXCIsIFwiZWFybGllc3RcIiwgXCJsYXRlc3RcIl0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBwYXJlbnREYXRhTW9kZWwgVGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihkYXRhTW9kZWxPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsT2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0O1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jZWxscyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZSA9IGRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwuaXNBY2NlbGVyYXRlZCgpID8gXG4gICAgICAgICAgICAgICAgZGF0YU1vZGVsT2JqZWN0LmRhdGFNb2RlbC5uYW1lIDogbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5ydW4gICA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5ydW4pO1xuICAgICAgICAgICAgdGhpcy5waXZvdCA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5waXZvdCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRoZSBhY2NlbGVyYXRpb24gY2FjaGUgZm9yIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbiB0byBhIGpvYixcbiAgICAgICAgICogdXN1YWxseSBnZW5lcmF0ZWQgYnkgY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2Igb24gYSBEYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICogaW5zdGFuY2UsIGFzIHRoZSBhY2NlbGVyYXRpb24gY2FjaGUgZm9yIHRoaXMgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8c3BsdW5ranMuU2VydmljZS5Kb2J9IHNpZCBUaGUgc2lkIG9mIGFuIGFjY2VsZXJhdGlvbiBqb2IsXG4gICAgICAgICAqICAgICBvciwgYSBgc3BsdW5ranMuU2VydmljZS5Kb2JgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QWNjZWxlcmF0aW9uSm9iOiBmdW5jdGlvbihzaWQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgc2VhcmNoIG9iamVjdCBpcyBwYXNzZWQgaW4sIGdldCBpdHMgc2lkXG4gICAgICAgICAgICBpZiAoc2lkICYmIHNpZCBpbnN0YW5jZW9mIFNlcnZpY2UuSm9iKSB7XG4gICAgICAgICAgICAgICAgc2lkID0gc2lkLnNpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFzaWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaWQgdG8gdXNlIGZvciBhY2NlbGVyYXRpb24gbXVzdCBub3QgYmUgbnVsbC5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uTmFtZXNwYWNlID0gXCJzaWQ9XCIgKyBzaWQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgZmlsdGVyIG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuIFRoZSBmaWx0ZXIgd2lsbCBiZSBhIGNvbnN0cmFpbnQgb2YgdGhlIGZvcm1cbiAgICAgICAgICogYGZpZWxkIGBjb21wYXJpc29uYCBjb21wYXJlVG9gLCBmb3IgZXhhbXBsZTogYGlzX3JlbW90ZSA9IGZhbHNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBmaWx0ZXIgb25cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbXBhcmlzb25UeXBlIFRoZSB0eXBlIG9mIGNvbXBhcmlzb24sIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbXBhcmlzb25PcCBUaGUgY29tcGFyaXNvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIGNvbXBhcmlzb25zLCBiYXNlZCBvbiB0eXBlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tcGFyZVRvIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRoZSBmaWVsZCB0by5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZEZpbHRlcjogZnVuY3Rpb24oZmllbGROYW1lLCBjb21wYXJpc29uVHlwZSwgY29tcGFyaXNvbk9wLCBjb21wYXJlVG8pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgZmlsdGVyIG9uIGEgbm9uZXhpc3RlbnQgZmllbGQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmlzb25UeXBlICE9PSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGFkZCBcIiArIGNvbXBhcmlzb25UeXBlICsgIFxuICAgICAgICAgICAgICAgICAgICBcIiBmaWx0ZXIgb24gXCIgKyBmaWVsZE5hbWUgKyBcbiAgICAgICAgICAgICAgICAgICAgXCIgYmVjYXVzZSBpdCBpcyBvZiB0eXBlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKS50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fY29tcGFyaXNvbnNbY29tcGFyaXNvblR5cGVdLCBjb21wYXJpc29uT3ApKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBhZGQgXCIgKyBjb21wYXJpc29uVHlwZSArIFxuICAgICAgICAgICAgICAgICAgICBcIiBmaWx0ZXIgYmVjYXVzZSBcIiArIGNvbXBhcmlzb25PcCArXG4gICAgICAgICAgICAgICAgICAgIFwiIGlzIG5vdCBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3JcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSkubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBjb21wYXJpc29uVHlwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFRoZXNlIGZpZWxkcyBhcmUgdHlwZSBkZXBlbmRlbnRcbiAgICAgICAgICAgIGlmICh1dGlscy5jb250YWlucyhbXCJib29sZWFuXCIsIFwic3RyaW5nXCIsIFwiaXB2NFwiLCBcIm51bWJlclwiXSwgcmV0LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0LnJ1bGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3I6IGNvbXBhcmlzb25PcCxcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVRvOiBjb21wYXJlVG9cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2gocmV0KTtcbiAgICBcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSBsaW1pdCBvbiB0aGUgZXZlbnRzIHNob3duIGluIGEgcGl2b3QgYnkgc29ydGluZyB0aGVtIGFjY29yZGluZyB0byBzb21lIGZpZWxkLCB0aGVuIHRha2luZ1xuICAgICAgICAgKiB0aGUgc3BlY2lmaWVkIG51bWJlciBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIGZpbHRlciBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvcnRBdHRyaWJ1dGUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHVzZSBmb3Igc29ydGluZy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvcnREaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0byBzb3J0IGV2ZW50cywgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGltaXQgVGhlIG51bWJlciBvZiB2YWx1ZXMgZnJvbSB0aGUgc29ydGVkIGxpc3QgdG8gYWxsb3cgdGhyb3VnaCB0aGlzIGZpbHRlci5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRzRnVuY3Rpb24gVGhlIHN0YXRzIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYWdncmVnYXRpb24gYmVmb3JlIHNvcnRpbmcsIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZExpbWl0RmlsdGVyOiBmdW5jdGlvbihmaWVsZE5hbWUsIHNvcnRBdHRyaWJ1dGUsIHNvcnREaXJlY3Rpb24sIGxpbWl0LCBzdGF0c0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIGxpbWl0IGZpbHRlciBvbiBhIG5vbmV4aXN0ZW50IGZpZWxkLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIXV0aWxzLmNvbnRhaW5zKFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcIm9iamVjdENvdW50XCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBsaW1pdCBmaWx0ZXIgb24gXCIgKyBmaWVsZE5hbWUgKyBcIiBiZWNhdXNlIGl0IGlzIG9mIHR5cGUgXCIgKyBmLnR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiLCBcImRjXCJdLCBzdGF0c0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIGZvciBmaWVsZHMgb2YgdHlwZSBzdHJpbmcgbXVzdCBiZSBDT1VOVCBvciBESVNUSU5DVF9DT1VOVDsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSAmJiAhdXRpbHMuY29udGFpbnMoW1wiY291bnRcIiwgXCJkY1wiLCBcImF2ZXJhZ2VcIiwgXCJzdW1cIl0sIHN0YXRzRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gZm9yIGZpZWxkcyBvZiB0eXBlIG51bWJlciBtdXN0IGJlIG9uZSBvZiBDT1VOVCwgRElTVElOQ1RfQ09VTlQsIFNVTSwgb3IgQVZFUkFHRTsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFwib2JqZWN0Q291bnRcIiA9PT0gZi50eXBlICYmICF1dGlscy5jb250YWlucyhbXCJjb3VudFwiXSwgc3RhdHNGdW5jdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBmb3IgZmllbGRzIG9mIHR5cGUgb2JqZWN0IGNvdW50IG11c3QgYmUgQ09VTlQ7IGZvdW5kIFwiICsgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogc29ydEF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVPd25lcjogdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoc29ydEF0dHJpYnV0ZSkubGluZWFnZS5qb2luKFwiLlwiKSxcbiAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbWl0QW1vdW50OiBsaW1pdCxcbiAgICAgICAgICAgICAgICBzdGF0c0ZuOiBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gQXNzdW1lZCBcImhpZ2hlc3RcIiBpcyBwcmVmZXJyZWQgZm9yIHdoZW4gc29ydERpcmVjdGlvbiBpcyBcIkRFRkFVTFRcIlxuICAgICAgICAgICAgZmlsdGVyLmxpbWl0VHlwZSA9IFwiQVNDRU5ESU5HXCIgPT09IHNvcnREaXJlY3Rpb24gPyBcImxvd2VzdFwiIDogXCJoaWdoZXN0XCI7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgbnVtZXJpYyBvciBzdHJpbmcgdmFsdWVkIGZpZWxkLCBzcGxpdHRpbmcgb24gZWFjaCBkaXN0aW5jdCB2YWx1ZSBvZiB0aGUgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRSb3dTcGxpdDogZnVuY3Rpb24oZmllbGROYW1lLCBsYWJlbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyIG9yIHN0cmluZy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByb3cgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHJvdy5kaXNwbGF5ID0gXCJhbGxcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dzLnB1c2gocm93KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIHJvdyBzcGxpdCBvbiBhIG51bWVyaWMgZmllbGQsIHNwbGl0dGluZyBpbnRvIG51bWVyaWMgcmFuZ2VzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHNwbGl0IGdlbmVyYXRlcyBiaW5zIHdpdGggZWRnZXMgZXF1aXZhbGVudCB0byB0aGVcbiAgICAgICAgICogY2xhc3NpYyBsb29wICdmb3IgaSBpbiA8c3RhcnQ+IHRvIDxlbmQ+IGJ5IDxzdGVwPicgYnV0IHdpdGggYSBtYXhpbXVtXG4gICAgICAgICAqIG51bWJlciBvZiBiaW5zIDxsaW1pdD4uIFRoaXMgZGlzcGF0Y2hlcyB0byB0aGUgc3RhdHMgYW5kIHh5c2VyaWVzIHNlYXJjaCBjb21tYW5kcy5cbiAgICAgICAgICogU2VlIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgb2YgY29sbGVjdGlvbiBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gb3B0aW9uczpcbiAgICAgICAgICogICAgLSBgc3RhcnRgIChfaW50ZWdlcl8pOiBUaGUgdmFsdWUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgZW5kYCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIGZvciB0aGUgZW5kIG9mIHRoZSBsYXN0IHJhbmdlLCBvciBudWxsIHRvIHRha2UgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gdGhlIGV2ZW50cy5cbiAgICAgICAgICogICAgLSBgc3RlcGAgKF9pbnRlZ2VyXyk6IFRoZSB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSwgb3IgbnVsbCB0byBoYXZlIFNwbHVuayBjYWxjdWxhdGUgaXQuXG4gICAgICAgICAqICAgIC0gYGxpbWl0YCAoX2ludGVnZXJfKTogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJhbmdlcyB0byBzcGxpdCBpbnRvLCBvciBudWxsIGZvciBubyBsaW1pdC5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFJhbmdlUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgcmFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpO1xuICAgICAgICAgICAgaWYgKFwibnVtYmVyXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIG51bWJlci5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdXBkYXRlUmFuZ2VzID0ge307XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGFydCkgJiYgcmFuZ2VzLnN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLnN0YXJ0ID0gcmFuZ2VzLnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuZW5kKSAmJiByYW5nZXMuZW5kICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLmVuZCA9IHJhbmdlcy5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5zdGVwKSAmJiByYW5nZXMuc3RlcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlcy5zaXplID0gcmFuZ2VzLnN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKHJhbmdlcy5saW1pdCkgJiYgcmFuZ2VzLmxpbWl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VzLm1heE51bWJlck9mID0gcmFuZ2VzLmxpbWl0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwicmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgcmFuZ2VzOiB1cGRhdGVSYW5nZXNcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgcm93IHNwbGl0IG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgc2V0IG9mIHJvd3MuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0cnVlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIHRydWUgdmFsdWVkIHJvdyBsYWJlbC5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZhbHNlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZhbHNlIHZhbHVlZCByb3cgbGFiZWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRCb29sZWFuUm93U3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBsYWJlbCwgdHJ1ZURpc3BsYXlWYWx1ZSwgZmFsc2VEaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJib29sZWFuXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIGJvb2xlYW4uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHRydWVMYWJlbDogdHJ1ZURpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZUxhYmVsOiBmYWxzZURpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGQgYSByb3cgc3BsaXQgb24gYSB0aW1lc3RhbXAgdmFsdWVkIGZpZWxkLCBiaW5uZWQgYnkgdGhlIHNwZWNpZmllZCBidWNrZXQgc2l6ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBzcGxpdCBvbi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBzZXQgb2Ygcm93cy5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJpbm5pbmcgVGhlIHNpemUgb2YgYmlucyB0byB1c2UsIHNlZSBjbGFzcyBkb2NzIGZvciB2YWxpZCB0eXBlcy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZFRpbWVzdGFtcFJvd1NwbGl0OiBmdW5jdGlvbihmaWVsZCwgbGFiZWwsIGJpbm5pbmcpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuaGFzRmllbGQoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZCk7XG4gICAgICAgICAgICBpZiAoXCJ0aW1lc3RhbXBcIiAhPT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgdGltZXN0YW1wLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnModGhpcy5fYmlubmluZywgYmlubmluZykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJpbm5pbmcgXCIgKyBiaW5uaW5nICsgXCIgZm91bmQuIFZhbGlkIHZhbHVlcyBhcmU6IFwiICsgdGhpcy5fYmlubmluZy5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvd25lcjogZi5vd25lcixcbiAgICAgICAgICAgICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgICAgIHBlcmlvZDogYmlubmluZ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGNvbHVtbiBzcGxpdCBvbiBhIHN0cmluZyBvciBudW1iZXIgdmFsdWVkIGZpZWxkLCBwcm9kdWNpbmcgYSBjb2x1bW4gZm9yXG4gICAgICAgICAqIGVhY2ggZGlzdGluY3QgdmFsdWUgb2YgdGhlIGZpZWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuY29udGFpbnMoW1wibnVtYmVyXCIsIFwic3RyaW5nXCJdLCBmLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmllbGQgd2FzIG9mIHR5cGUgXCIgKyBmLnR5cGUgKyBcIiwgZXhwZWN0ZWQgbnVtYmVyIG9yIHN0cmluZy5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjb2wgPSB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY29sLmRpc3BsYXkgPSBcImFsbFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgbnVtZXJpYyBmaWVsZCwgc3BsaXR0aW5nIHRoZSB2YWx1ZXMgaW50byByYW5nZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIGNvbGxlY3Rpb24gZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uIG9wdGlvbnM6XG4gICAgICAgICAqICAgIC0gYHN0YXJ0YCAoX2ludGVnZXJfKTogVGhlIHZhbHVlIG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcmFuZ2UsIG9yIG51bGwgdG8gdGFrZSB0aGUgbG93ZXN0IHZhbHVlIGluIHRoZSBldmVudHMuXG4gICAgICAgICAqICAgIC0gYGVuZGAgKF9pbnRlZ2VyXyk6IFRoZSB2YWx1ZSBmb3IgdGhlIGVuZCBvZiB0aGUgbGFzdCByYW5nZSwgb3IgbnVsbCB0byB0YWtlIHRoZSBoaWdoZXN0IHZhbHVlIGluIHRoZSBldmVudHMuXG4gICAgICAgICAqICAgIC0gYHN0ZXBgIChfaW50ZWdlcl8pOiBUaGUgdGhlIHdpZHRoIG9mIGVhY2ggcmFuZ2UsIG9yIG51bGwgdG8gaGF2ZSBTcGx1bmsgY2FsY3VsYXRlIGl0LlxuICAgICAgICAgKiAgICAtIGBsaW1pdGAgKF9pbnRlZ2VyXyk6IFRoZSBtYXhpbXVtIG51bWJlciBvZiByYW5nZXMgdG8gc3BsaXQgaW50bywgb3IgbnVsbCBmb3Igbm8gbGltaXQuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRSYW5nZUNvbHVtblNwbGl0OiBmdW5jdGlvbihmaWVsZE5hbWUsIHJhbmdlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiICE9PSBmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaWVsZCB3YXMgb2YgdHlwZSBcIiArIGYudHlwZSArIFwiLCBleHBlY3RlZCBudW1iZXIuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbiBTcGx1bmsgNi4wLjEuMSwgZGF0YSBtb2RlbHMgaW5jb3JyZWN0bHkgZXhwZWN0IHN0cmluZ3MgZm9yIHRoZXNlIGZpZWxkc1xuICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBudW1iZXJzLiBJbiA2LjEsIHRoaXMgaXMgZml4ZWQgYW5kIGJvdGggYXJlIGFjY2VwdGVkLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRSYW5nZXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLnN0YXJ0KSAmJiByYW5nZXMuc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLnN0YXJ0ID0gcmFuZ2VzLnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuZW5kKSAmJiByYW5nZXMuZW5kICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJhbmdlcy5lbmQgPSByYW5nZXMuZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChyYW5nZXMuc3RlcCkgJiYgcmFuZ2VzLnN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLnNpemUgPSByYW5nZXMuc3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQocmFuZ2VzLmxpbWl0KSAmJiByYW5nZXMubGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkUmFuZ2VzLm1heE51bWJlck9mID0gcmFuZ2VzLmxpbWl0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwicmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgcmFuZ2VzOiB1cGRhdGVkUmFuZ2VzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkIGEgY29sdW1uIHNwbGl0IG9uIGEgYm9vbGVhbiB2YWx1ZWQgZmllbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgZmllbGQgdG8gc3BsaXQgb24uXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0cnVlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIHRydWUgdmFsdWVkIGNvbHVtbiBsYWJlbC5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZhbHNlRGlzcGxheVZhbHVlIEEgc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZhbHNlIHZhbHVlZCBjb2x1bW4gbGFiZWwuXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBUaGUgdXBkYXRlZCBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhZGRCb29sZWFuQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkTmFtZSwgdHJ1ZURpc3BsYXlWYWx1ZSwgZmFsc2VEaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZiA9IHRoaXMuZGF0YU1vZGVsT2JqZWN0LmZpZWxkQnlOYW1lKGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBpZiAoXCJib29sZWFuXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIGJvb2xlYW4uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIHRydWVMYWJlbDogdHJ1ZURpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZUxhYmVsOiBmYWxzZURpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhIGNvbHVtbiBzcGxpdCBvbiBhIHRpbWVzdGFtcCB2YWx1ZWQgZmllbGQsIGJpbm5lZCBieSB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBzaXplLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIGZpZWxkIHRvIHNwbGl0IG9uLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmlubmluZyBUaGUgc2l6ZSBvZiBiaW5zIHRvIHVzZSwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHR5cGVzLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvbn0gVGhlIHVwZGF0ZWQgcGl2b3Qgc3BlY2lmaWNhdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLlBpdm90U3BlY2lmaWNhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgYWRkVGltZXN0YW1wQ29sdW1uU3BsaXQ6IGZ1bmN0aW9uKGZpZWxkLCBiaW5uaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YU1vZGVsT2JqZWN0Lmhhc0ZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRpZCBub3QgZmluZCBmaWVsZCBcIiArIGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmID0gdGhpcy5kYXRhTW9kZWxPYmplY3QuZmllbGRCeU5hbWUoZmllbGQpO1xuICAgICAgICAgICAgaWYgKFwidGltZXN0YW1wXCIgIT09IGYudHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpZWxkIHdhcyBvZiB0eXBlIFwiICsgZi50eXBlICsgXCIsIGV4cGVjdGVkIHRpbWVzdGFtcC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXV0aWxzLmNvbnRhaW5zKHRoaXMuX2Jpbm5pbmcsIGJpbm5pbmcpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiaW5uaW5nIFwiICsgYmlubmluZyArIFwiIGZvdW5kLiBWYWxpZCB2YWx1ZXMgYXJlOiBcIiArIHRoaXMuX2Jpbm5pbmcuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgb3duZXI6IGYub3duZXIsXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIHBlcmlvZDogYmlubmluZ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZCBhbiBhZ2dyZWdhdGUgdG8gZWFjaCBjZWxsIG9mIHRoZSBwaXZvdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkTmFtZSBUaGUgbmFtZSBvZiBmaWVsZCB0byBhZ2dyZWdhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBhIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgYWdncmVnYXRlLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdHNGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gdXNlIGZvciBhZ2dyZWdhdGlvbiwgc2VlIGNsYXNzIGRvY3MgZm9yIHZhbGlkIHN0YXRzIGZ1bmN0aW9ucy5cbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb259IFRoZSB1cGRhdGVkIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGFkZENlbGxWYWx1ZTogZnVuY3Rpb24oZmllbGROYW1lLCBsYWJlbCwgc3RhdHNGdW5jdGlvbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFNb2RlbE9iamVjdC5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBmaW5kIGZpZWxkIFwiICsgZmllbGROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGYgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5maWVsZEJ5TmFtZShmaWVsZE5hbWUpO1xuICAgICAgICAgICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcInN0cmluZ1wiLCBcImlwdjRcIl0sIGYudHlwZSkgJiZcbiAgICAgICAgICAgICAgICAhdXRpbHMuY29udGFpbnMoW1xuICAgICAgICAgICAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJmaXJzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImxhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRjXCJdLCBzdGF0c0Z1bmN0aW9uKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIHN0cmluZyBhbmQgSVB2NCBmaWVsZHMgbXVzdCBiZSBvbmUgb2Y6XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBsaXN0LCBkaXN0aW5jdF92YWx1ZXMsIGZpcnN0LCBsYXN0LCBjb3VudCwgb3IgZGlzdGluY3RfY291bnQ7IGZvdW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIm51bWJlclwiID09PSBmLnR5cGUgJiYgXG4gICAgICAgICAgICAgICAgIXV0aWxzLmNvbnRhaW5zKFtcbiAgICAgICAgICAgICAgICAgICAgXCJzdW1cIixcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICBcImF2ZXJhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJtYXhcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdGRldlwiLFxuICAgICAgICAgICAgICAgICAgICBcImxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBdLCBzdGF0c0Z1bmN0aW9uKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRzIGZ1bmN0aW9uIG9uIG51bWJlciBmaWVsZCBtdXN0IGJlIG11c3QgYmUgb25lIG9mOlwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgc3VtLCBjb3VudCwgYXZlcmFnZSwgbWF4LCBtaW4sIHN0ZGV2LCBsaXN0LCBvciBkaXN0aW5jdF92YWx1ZXM7IGZvdW5kIFwiICtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHNGdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoXCJ0aW1lc3RhbXBcIiA9PT0gZi50eXBlICYmXG4gICAgICAgICAgICAgICAgIXV0aWxzLmNvbnRhaW5zKFtcbiAgICAgICAgICAgICAgICAgICAgXCJkdXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImVhcmxpZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibGlzdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgIF0sIHN0YXRzRnVuY3Rpb24pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdHMgZnVuY3Rpb24gb24gdGltZXN0YW1wIGZpZWxkIG11c3QgYmUgb25lIG9mOlwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgZHVyYXRpb24sIGVhcmxpZXN0LCBsYXRlc3QsIGxpc3QsIG9yIGRpc3RpbmN0IHZhbHVlczsgZm91bmQgXCIgK1xuICAgICAgICAgICAgICAgICAgICBzdGF0c0Z1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1dGlscy5jb250YWlucyhbXCJvYmplY3RDb3VudFwiLCBcImNoaWxkQ291bnRcIl0sIGYudHlwZSkgJiZcbiAgICAgICAgICAgICAgICBcImNvdW50XCIgIT09IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0cyBmdW5jdGlvbiBvbiBjaGlsZGNvdW50IGFuZCBvYmplY3Rjb3VudCBmaWVsZHMgbXVzdCBiZSBjb3VudDsgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcImZvdW5kIFwiICsgc3RhdHNGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcImJvb2xlYW5cIiA9PT0gZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBib29sZWFuIHZhbHVlZCBmaWVsZHMgYXMgY2VsbCB2YWx1ZXMuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNlbGxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIG93bmVyOiBmLmxpbmVhZ2Uuam9pbihcIi5cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgICAgICBzcGFya2xpbmU6IGZhbHNlLCAvLyBOb3QgcHJvcGVybHkgaW1wbGVtZW50ZWQgaW4gY29yZSB5ZXQuXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXRzRnVuY3Rpb25cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgSlNPTiByZWFkeSBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBKU09OIHJlYWR5IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBpdm90IHNwZWNpZmljYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5QaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICovXG4gICAgICAgIHRvSnNvbk9iamVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFNb2RlbDogdGhpcy5kYXRhTW9kZWxPYmplY3QuZGF0YU1vZGVsLm5hbWUsXG4gICAgICAgICAgICAgICAgYmFzZUNsYXNzOiB0aGlzLmRhdGFNb2RlbE9iamVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY2VsbHM6IHRoaXMuY2VsbHMsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBRdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gYSBwaXZvdCByZXBvcnRcbiAgICAgICAgICogZm9yIHRoaXMgZGF0YSBtb2RlbCwgZGVmaW5lZCBieSB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgc2VhcmNoZXMgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICB2YXIgcGl2b3RTcGVjID0gc2VhcmNoZXMuY3JlYXRlUGl2b3RTcGVjaWZpY2F0aW9uKCk7XG4gICAgICAgICAqICAgICAgICAgIC8vIFVzZSBvZiB0aGUgZmx1ZW50IEFQSVxuICAgICAgICAgKiAgICAgICAgICBwaXZvdFNwZWMuYWRkUm93U3BsaXQoXCJ1c2VyXCIsIFwiRXhlY3V0aW5nIHVzZXJcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRSYW5nZUNvbHVtblNwbGl0KFwiZXhlY190aW1lXCIsIHtzdGFydDogMCwgZW5kOiAxMiwgc3RlcDogNSwgbGltaXQ6IDR9KVxuICAgICAgICAgKiAgICAgICAgICAgICAgLmFkZENlbGxWYWx1ZShcInNlYXJjaFwiLCBcIlNlYXJjaCBRdWVyeVwiLCBcInZhbHVlc1wiKVxuICAgICAgICAgKiAgICAgICAgICAgICAgLnBpdm90KGZ1bmN0aW9uKHBpdm90RXJyLCBwaXZvdCkge1xuICAgICAgICAgKiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGl2b3Qgc2VhcmNoIGlzOlwiLCBwaXZvdC5zZWFyY2gpO1xuICAgICAgICAgKiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAqICAgICAgfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGRvbmUgZ2V0dGluZyB0aGUgcGl2b3Q6IGAoZXJyLCBwaXZvdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBwaXZvdDogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBzdmMgPSB0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwuc2VydmljZTtcblxuICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgcGl2b3RfanNvbjogSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb25PYmplY3QoKSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQodGhpcy5hY2NlbGVyYXRpb25OYW1lc3BhY2UpKSB7XG4gICAgICAgICAgICAgICAgYXJncy5uYW1lc3BhY2UgPSB0aGlzLmFjY2VsZXJhdGlvbk5hbWVzcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHN2Yy5nZXQoUGF0aHMucGl2b3QgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRhdGFNb2RlbE9iamVjdC5kYXRhTW9kZWwubmFtZSksIGFyZ3MsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnIuZGF0YS5tZXNzYWdlc1swXS50ZXh0KSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZW50cnkgJiYgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBuZXcgcm9vdC5QaXZvdChzdmMsIHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRGlkbid0IGdldCBhIFBpdm90IHJlcG9ydCBiYWNrIGZyb20gU3BsdW5rXCIpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byB3cmFwIHVwIHRoZSBgUGl2b3RTcGVjaWZpY2F0aW9uLnBpdm90KClgIGFuZFxuICAgICAgICAgKiBgUGl2b3QucnVuKClgIGZ1bmN0aW9uIGNhbGxzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBRdWVyeSBTcGx1bmsgZm9yIFNQTCBxdWVyaWVzIGNvcnJlc3BvbmRpbmcgdG8gYSBwaXZvdCByZXBvcnRcbiAgICAgICAgICogZm9yIHRoaXMgZGF0YSBtb2RlbCwgZGVmaW5lZCBieSB0aGlzIGBQaXZvdFNwZWNpZmljYXRpb25gOyB0aGVuLFxuICAgICAgICAgKiBzdGFydHMgYSBzZWFyY2ggam9iIHJ1bm5pbmcgdGhpcyBwaXZvdCwgYWNjZWxlcmF0ZWQgaWYgcG9zc2libGUuXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZmV0Y2hFcnIsIGRhdGFNb2RlbHMpIHtcbiAgICAgICAgICogICAgICAgICAgdmFyIHNlYXJjaGVzID0gZGF0YU1vZGVscy5pdGVtKFwiaW50ZXJuYWxfYXVkaXRfbG9nc1wiKS5vYmplY3RCeU5hbWUoXCJzZWFyY2hlc1wiKTtcbiAgICAgICAgICogICAgICAgICAgdmFyIHBpdm90U3BlYyA9IHNlYXJjaGVzLmNyZWF0ZVBpdm90U3BlY2lmaWNhdGlvbigpO1xuICAgICAgICAgKiAgICAgICAgICAvLyBVc2Ugb2YgdGhlIGZsdWVudCBBUElcbiAgICAgICAgICogICAgICAgICAgcGl2b3RTcGVjLmFkZFJvd1NwbGl0KFwidXNlclwiLCBcIkV4ZWN1dGluZyB1c2VyXCIpXG4gICAgICAgICAqICAgICAgICAgICAgICAuYWRkUmFuZ2VDb2x1bW5TcGxpdChcImV4ZWNfdGltZVwiLCB7c3RhcnQ6IDAsIGVuZDogMTIsIHN0ZXA6IDUsIGxpbWl0OiA0fSlcbiAgICAgICAgICogICAgICAgICAgICAgIC5hZGRDZWxsVmFsdWUoXCJzZWFyY2hcIiwgXCJTZWFyY2ggUXVlcnlcIiwgXCJ2YWx1ZXNcIilcbiAgICAgICAgICogICAgICAgICAgICAgIC5ydW4oZnVuY3Rpb24oZXJyLCBqb2IsIHBpdm90KSB7XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2IgU0lEIGlzOlwiLCBqb2Iuc2lkKTtcbiAgICAgICAgICogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlBpdm90IHNlYXJjaCBpczpcIiwgcGl2b3Quc2VhcmNoKTtcbiAgICAgICAgICogICAgICAgICAgICAgIH0pO1xuICAgICAgICAgKiAgICAgIH0pO1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJncyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IgKG9wdGlvbmFsKS4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycywgc2VlIDxhIGhyZWY9XCJodHRwOi8vZGV2LnNwbHVuay5jb20vdmlldy9TUC1DQUFBRUZBI3NlYXJjaGpvYnBhcmFtc1wiIHRhcmdldD1cIl9ibGFua1wiPlNlYXJjaCBqb2IgcGFyYW1ldGVyczwvYT4gb24gU3BsdW5rIERldmVsb3BlciBQb3J0YWwuXG4gICAgICAgICAqICAgICAgICAqKk5vdGU6KiogVGhpcyBtZXRob2QgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBgZXhlY19tb2RlPW9uZXNob3RgIHBhcmFtZXRlciBpcyBwYXNzZWQgaW4gd2l0aCB0aGUgcHJvcGVydGllcyBkaWN0aW9uYXJ5LlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkb25lIGdldHRpbmcgdGhlIHBpdm90OiBgKGVyciwgam9iLCBwaXZvdClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBydW46IGZ1bmN0aW9uKGFyZ3MsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xuXG4gICAgICAgICAgICB0aGlzLnBpdm90KGZ1bmN0aW9uKGVyciwgcGl2b3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwaXZvdC5ydW4oYXJncywgQXN5bmMuYXVnbWVudChjYWxsYmFjaywgcGl2b3QpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBvbmUgb2YgdGhlIHN0cnVjdHVyZWQgdmlld3MgaW4gYSBgRGF0YU1vZGVsYC5cbiAgICAgKlxuICAgICAqIEhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGRhdGFNb2RlbGAgKF9zcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbF8pOiBUaGUgYERhdGFNb2RlbGAgdG8gd2hpY2ggdGhpcyBgRGF0YU1vZGVsT2JqZWN0YCBiZWxvbmdzLlxuICAgICAqICAgIC0gYG5hbWVgIChfc3RyaW5nXyk6IFRoZSBuYW1lIG9mIHRoaXMgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICogICAgLSBgZGlzcGxheU5hbWVgIChfc3RyaW5nXyk6IFRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoaXMgYERhdGFNb2RlbE9iamVjdGAuXG4gICAgICogICAgLSBgcGFyZW50TmFtZWAgKF9zdHJpbmdfKTogVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBgRGF0YU1vZGVsT2JqZWN0YCB0byB0aGlzIG9uZS5cbiAgICAgKiAgICAtIGBsaW5lYWdlYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb2YgdGhlIGxpbmVhZ2Ugb2YgdGhlIGRhdGEgbW9kZWxcbiAgICAgKiAgICAgICAgICBvbiB3aGljaCB0aGlzIGZpZWxkIGlzIGRlZmluZWQuXG4gICAgICogICAgLSBgZmllbGRzYCAoX29iamVjdF8pOiBBIGRpY3Rpb25hcnkgb2YgYERhdGFNb2RlbEZpZWxkYCBvYmplY3RzLCBhY2Nlc3NpYmxlIGJ5IG5hbWUuXG4gICAgICogICAgLSBgY29uc3RyYWludHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgYERhdGFNb2RlbENvbnN0cmFpbnRgIG9iamVjdHMuXG4gICAgICogICAgLSBgY2FsY3VsYXRpb25zYCAoX29iamVjdF8pOiBBIGRpY3Rpb25hcnkgb2YgYERhdGFNb2RlbENhbGN1bGF0aW9uYCBvYmplY3RzLCBhY2Nlc3NpYmxlIGJ5IElELlxuICAgICAqXG4gICAgICogQmFzZVNlYXJjaCBoYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eTpcbiAgICAgKiAgICAtIGBiYXNlU2VhcmNoYCAoX3N0cmluZ18pOiBUaGUgc2VhcmNoIHF1ZXJ5IHdyYXBwZWQgYnkgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEJhc2VUcmFuc2FjdGlvbiBoYXMgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxuICAgICAqICAgIC0gYGdyb3VwQnlGaWVsZHNgIChfc3RyaW5nXyk6IFRoZSBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ3JvdXAgZXZlbnRzIGludG8gdHJhbnNhY3Rpb25zLlxuICAgICAqICAgIC0gYG9iamVjdHNUb0dyb3VwYCAoX2FycmF5Xyk6IE5hbWVzIG9mIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdW5pb25lZFxuICAgICAqICAgICAgICBhbmQgc3BsaXQgaW50byB0cmFuc2FjdGlvbnMuXG4gICAgICogICAgLSBgbWF4U3BhbmAgKF9zdHJpbmdfKTogVGhlIG1heGltdW0gdGltZSBzcGFuIG9mIGEgdHJhbnNhY3Rpb24uXG4gICAgICogICAgLSBgbWF4UGF1c2VgIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHBhdXNlIHRpbWUgb2YgYSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAqL1xuICAgIHJvb3QuRGF0YU1vZGVsT2JqZWN0ID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKiBTREsgdXNlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBpbnZva2UgdGhpcyBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyB0byBzZXQ6XG4gICAgICAgICAqICAgICAtIGBvYmplY3ROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBmb3IgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqICAgICAtIGBwYXJlbnROYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCB0aGF0IG93bnMgdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICogICAgIC0gYGxpbmVhZ2VgIChfc3RyaW5nXyk6IFRoZSBsaW5lYWdlIG9mIHRoZSBkYXRhIG1vZGVsIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LFxuICAgICAgICAgKiAgICAgICAgICBpdGVtcyBhcmUgZGVsaW1pdGVkIGJ5IGEgZG90LiBUaGlzIGlzIGNvbnZlcnRlZCBpbnRvIGFuIGFycmF5IG9mXG4gICAgICAgICAqICAgICAgICAgIHN0cmluZ3MgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAgICAqICAgICAtIGBmaWVsZHNgIChfYXJyYXlfKTogQW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMuXG4gICAgICAgICAqICAgICAtIGBjb25zdHJhaW50c2AgKF9hcnJheV8pOiBBbiBhcnJheSBvZiBkYXRhIG1vZGVsIGNvbnN0cmFpbnRzLlxuICAgICAgICAgKiAgICAgLSBgY2FsY3VsYXRpb25zYCAoX2FycmF5Xyk6IEFuIGFycmF5IG9mIGRhdGEgbW9kZWwgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKiAgICAgLSBgYmFzZVNlYXJjaGAgKF9zdHJpbmdfKTogVGhlIHNlYXJjaCBxdWVyeSB3cmFwcGVkIGJ5IHRoaXMgZGF0YSBtb2RlbCBvYmplY3Q7IGV4Y2x1c2l2ZSB0byBCYXNlU2VhcmNoIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYGdyb3VwQnlGaWVsZHNgIChfYXJyYXlfKTogVGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBncm91cCBldmVudHMgaW50byB0cmFuc2FjdGlvbnM7IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKiAgICAgLSBgb2JqZWN0c1RvR3JvdXBgIChfYXJyYXlfKTogTmFtZXMgb2YgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1bmlvbmVkXG4gICAgICAgICAqICAgICAgICAgYW5kIHNwbGl0IGludG8gdHJhbnNhY3Rpb25zOyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYG1heFNwYW5gIChfc3RyaW5nXyk6IFRoZSBtYXhpbXVtIHRpbWUgc3BhbiBvZiBhIHRyYW5zYWN0aW9uOyBleGNsdXNpdmUgdG8gQmFzZVRyYW5zYWN0aW9uIChvcHRpb25hbClcbiAgICAgICAgICogICAgIC0gYG1heFBhdXNlYCAoX3N0cmluZ18pOiBUaGUgbWF4aW11bSBwYXVzZSB0aW1lIG9mIGEgdHJhbnNhY3Rpb247IGV4Y2x1c2l2ZSB0byBCYXNlVHJhbnNhY3Rpb24gKG9wdGlvbmFsKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsfSBwYXJlbnREYXRhTW9kZWwgVGhlIGBEYXRhTW9kZWxgIHRoYXQgb3ducyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbml0OiBmdW5jdGlvbihwcm9wcywgcGFyZW50RGF0YU1vZGVsKSB7XG4gICAgICAgICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgICAgICAgcHJvcHMub3duZXIgPSBwcm9wcy5vd25lciB8fCBcIlwiO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbCAgICAgICAgICAgICAgPSBwYXJlbnREYXRhTW9kZWw7XG4gICAgICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICAgICAgICAgPSBwcm9wcy5vYmplY3ROYW1lO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSAgICAgICAgICAgID0gcHJvcHMuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0aGlzLnBhcmVudE5hbWUgICAgICAgICAgICAgPSBwcm9wcy5wYXJlbnROYW1lO1xuICAgICAgICAgICAgdGhpcy5saW5lYWdlICAgICAgICAgICAgICAgID0gcHJvcHMubGluZWFnZS5zcGxpdChcIi5cIik7XG5cbiAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgZXhjbHVzaXZlIHRvIEJhc2VUcmFuc2FjdGlvblxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwiZ3JvdXBCeUZpZWxkc1wiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBCeUZpZWxkcyA9IHByb3BzLmdyb3VwQnlGaWVsZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoXCJvYmplY3RzVG9Hcm91cFwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0c1RvR3JvdXAgPSBwcm9wcy5vYmplY3RzVG9Hcm91cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShcInRyYW5zYWN0aW9uTWF4VGltZVNwYW5cIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1heFNwYW4gPSBwcm9wcy50cmFuc2FjdGlvbk1heFRpbWVTcGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwidHJhbnNhY3Rpb25NYXhQYXVzZVwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4UGF1c2UgPSBwcm9wcy50cmFuc2FjdGlvbk1heFBhdXNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcm9wZXJ0eSBleGNsdXNpdmUgdG8gQmFzZVNlYXJjaFxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwiYmFzZVNlYXJjaFwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVNlYXJjaCA9IHByb3BzLmJhc2VTZWFyY2g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGZpZWxkc1xuICAgICAgICAgICAgdGhpcy5maWVsZHMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHNbcHJvcHMuZmllbGRzW2ldLmZpZWxkTmFtZV0gPSBuZXcgcm9vdC5EYXRhTW9kZWxGaWVsZChwcm9wcy5maWVsZHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQYXJzZSBjb25zdHJhaW50c1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wcy5jb25zdHJhaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChuZXcgcm9vdC5EYXRhTW9kZWxDb25zdHJhaW50KHByb3BzLmNvbnN0cmFpbnRzW2pdKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIGNhbGN1bGF0aW9uc1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcHJvcHMuY2FsY3VsYXRpb25zLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGlvbnNbcHJvcHMuY2FsY3VsYXRpb25zW2tdLmNhbGN1bGF0aW9uSURdID0gbmV3IHJvb3QuRGF0YU1vZGVsQ2FsY3VsYXRpb24ocHJvcHMuY2FsY3VsYXRpb25zW2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBhIEJhc2VTZWFyY2g/XG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCBpcyB0aGUgcm9vdCB0eXBlLCBCYXNlU2VhcmNoLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpc0Jhc2VTZWFyY2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZCh0aGlzLmJhc2VTZWFyY2gpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGlzIGEgQmFzZVRyYW5zYWN0aW9uP1xuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBXaGV0aGVyIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QgaXMgdGhlIHJvb3QgdHlwZSwgQmFzZVRyYW5zYWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpc0Jhc2VUcmFuc2FjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHRoaXMubWF4U3Bhbik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgYXJyYXkgb2YgdGhlIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBmaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBkYXRhIG1vZGVsIGZpZWxkIGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBmaWVsZCBvbiB0aGlzXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0LiBcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7c3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxGaWVsZHxudWxsfSBUaGUgZGF0YSBtb2RlbCBmaWVsZFxuICAgICAgICAgKiBmcm9tIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG51bGwgaWYgaXQgdGhlIFxuICAgICAgICAgKiBmaWVsZCBieSB0aGF0IG5hbWUgZG9lc24ndCBleGlzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgZmllbGRCeU5hbWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKVtuYW1lXSB8fCB0aGlzLmZpZWxkc1tuYW1lXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLCBhbmQgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzIGZpZWxkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGBzcGx1bmsuU2VydmljZS5EYXRhTW9kZWxGaWVsZGAgb2JqZWN0c1xuICAgICAgICAgKiB3aGljaCBpbmNsdWRlcyB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgZmllbGRzLCBhbmQgdGhlIGZpZWxkcyBmcm9tXG4gICAgICAgICAqIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGFsbEZpZWxkczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBtZXJnZSBmaWVsZHMgYW5kIGNhbGN1bGF0ZWRGaWVsZHMoKVxuICAgICAgICAgICAgdmFyIGNvbWJpbmVkRmllbGRzID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGYgaW4gdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWVsZHMuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRGaWVsZHNbZl0gPSB0aGlzLmZpZWxkc1tmXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jYWxjdWxhdGVkRmllbGRzKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBjZiBpbiBjYWxjdWxhdGVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZWRGaWVsZHMuaGFzT3duUHJvcGVydHkoY2YpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkRmllbGRzW2NmXSA9IGNhbGN1bGF0ZWRGaWVsZHNbY2ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkRmllbGRzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBmaWVsZCBuYW1lcyBvZiB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLCBhbmQgdGhlIG5hbWVzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBmaWVsZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIG5hbWVzIG9mIHRoaXMgXG4gICAgICAgICAqIGRhdGEgbW9kZWwgb2JqZWN0J3MgY2FsY3VsYXRpb25zLCBhbmQgdGhlIG5hbWVzIG9mIGZpZWxkcyBvbiBcbiAgICAgICAgICogdGhpcyBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgYWxsRmllbGROYW1lczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hbGxGaWVsZHMoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBtb2RlbCBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3NcbiAgICAgICAgICogY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgYHNwbHVuay5TZXJ2aWNlLkRhdGFNb2RlbEZpZWxkYCBvYmplY3RzXG4gICAgICAgICAqIG9mIHRoZSBmaWVsZHMgZnJvbSB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0J3MgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjYWxjdWxhdGVkRmllbGRzOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjYWxjdWxhdGlvbnMsIGdldCB0aGVpciBmaWVsZHNcbiAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5jYWxjdWxhdGlvbklEcygpO1xuICAgICAgICAgICAgdmFyIGNhbGN1bGF0aW9ucyA9IHRoaXMuY2FsY3VsYXRpb25zO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhbGN1bGF0aW9uID0gY2FsY3VsYXRpb25zW2tleXNbaV1dO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgY2FsY3VsYXRpb24ub3V0cHV0RmllbGROYW1lcygpLmxlbmd0aDsgZisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tjYWxjdWxhdGlvbi5vdXRwdXRGaWVsZE5hbWVzKClbZl1dID0gY2FsY3VsYXRpb24ub3V0cHV0RmllbGRzW2NhbGN1bGF0aW9uLm91dHB1dEZpZWxkTmFtZXMoKVtmXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCdzXG4gICAgICAgICAqIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZmllbGQgbmFtZXMgb2YgdGhpcyBcbiAgICAgICAgICogZGF0YSBtb2RlbCBvYmplY3QncyBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNhbGN1bGF0ZWRGaWVsZE5hbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhbGN1bGF0ZWRGaWVsZHMoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGRhdGEgbW9kZWwgb2JqZWN0IGNvbnRhaW5zIHRoZSBmaWVsZCB3aXRoIHRoZVxuICAgICAgICAgKiBuYW1lIHBhc3NlZCBpbiB0aGUgYGZpZWxkTmFtZWAgcGFyYW1ldGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmllbGROYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBsb29rIGZvci5cbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGRhdGEgbW9kZWwgY29udGFpbnMgdGhlIGZpZWxkIGJ5IG5hbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGhhc0ZpZWxkOiBmdW5jdGlvbihmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmFsbEZpZWxkTmFtZXMoKSwgZmllbGROYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHN0cmluZyBhcnJheSBvZiB0aGUgSURzIG9mIHRoaXMgZGF0YSBtb2RlbCBvYmplY3Qnc1xuICAgICAgICAgKiBjYWxjdWxhdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIElEcyBvZiB0aGlzIGRhdGEgbW9kZWxcbiAgICAgICAgICogb2JqZWN0J3MgY2FsY3VsYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjYWxjdWxhdGlvbklEczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5jYWxjdWxhdGlvbnMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMb2NhbCBhY2NlbGVyYXRpb24gaXMgdHNpZHggYWNjZWxlcmF0aW9uIG9mIGEgZGF0YSBtb2RlbCBvYmplY3QgdGhhdCBpcyBoYW5kbGVkXG4gICAgICAgICAqIG1hbnVhbGx5IGJ5IGEgdXNlci4gWW91IGNyZWF0ZSBhIGpvYiB3aGljaCBnZW5lcmF0ZXMgYW4gaW5kZXgsIGFuZCB0aGVuIHVzZSB0aGF0XG4gICAgICAgICAqIGluZGV4IGluIHlvdXIgcGl2b3RzIG9uIHRoZSBkYXRhIG1vZGVsIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIG5hbWVzcGFjZSBjcmVhdGVkIGJ5IHRoZSBqb2IgaXMgJ3NpZD17c2lkfScgd2hlcmUge3NpZH0gaXMgdGhlIGpvYidzIHNpZC4gWW91XG4gICAgICAgICAqIHdvdWxkIHVzZSBpdCBpbiBhbm90aGVyIGpvYiBieSBzdGFydGluZyB5b3VyIHNlYXJjaCBxdWVyeSB3aXRoIGB8IHRzdGF0cyAuLi4gZnJvbSBzaWQ9e3NpZH0gfCAuLi5gXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSB0c2lkeCBpbmRleCBjcmVhdGVkIGJ5IHRoaXMgam9iIGlzIGRlbGV0ZWQgd2hlbiB0aGUgam9iIGlzIGdhcmJhZ2UgY29sbGVjdGVkIGJ5IFNwbHVuay5cbiAgICAgICAgICpcbiAgICAgICAgICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBtYW5hZ2UgdGhpcyBqb2IsIGluY2x1ZGluZyBjYW5jZWxsaW5nIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHNlcnZpY2UuZGF0YU1vZGVscygpLmZldGNoKGZ1bmN0aW9uKGVyciwgZGF0YU1vZGVscykge1xuICAgICAgICAgKiAgICAgICAgICB2YXIgb2JqZWN0ID0gZGF0YU1vZGVscy5pdGVtKFwic29tZV9kYXRhX21vZGVsXCIpLm9iamVjdEJ5TmFtZShcInNvbWVfb2JqZWN0XCIpO1xuICAgICAgICAgKiAgICAgICAgICBvYmplY3QuY3JlYXRlTG9jYWxBY2NlbGVyYXRpb25Kb2IoXCItMWRcIiwgZnVuY3Rpb24oZXJyLCBhY2NlbGVyYXRpb25Kb2IpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGpvYiBoYXMgbmFtZTpcIiwgYWNjZWxlcmF0aW9uSm9iLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVhcmxpZXN0VGltZSBBIHRpbWUgbW9kaWZpZXIgKGUuZy4sIFwiLTJ3XCIpIHNldHRpbmcgdGhlIGVhcmxpZXN0IHRpbWUgdG8gaW5kZXguXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBzZWFyY2ggam9iOiBgKGVyciwgYWNjZWxlcmF0aW9uSm9iKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZUxvY2FsQWNjZWxlcmF0aW9uSm9iOiBmdW5jdGlvbihlYXJsaWVzdFRpbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBlYXJsaWVzdFRpbWUgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gc2V0IGNhbGxiYWNrIHRvIGl0cyB2YWx1ZVxuICAgICAgICAgICAgaWYgKCFjYWxsYmFjayAmJiB1dGlscy5pc0Z1bmN0aW9uKGVhcmxpZXN0VGltZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVhcmxpZXN0VGltZTtcbiAgICAgICAgICAgICAgICBlYXJsaWVzdFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBxdWVyeSA9IFwifCBkYXRhbW9kZWwgXFxcIlwiICsgdGhpcy5kYXRhTW9kZWwubmFtZSArIFwiXFxcIiBcIiArIHRoaXMubmFtZSArIFwiIHNlYXJjaCB8IHRzY29sbGVjdFwiO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBlYXJsaWVzdFRpbWUgPyB7ZWFybGllc3RfdGltZTogZWFybGllc3RUaW1lfSA6IHt9O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5zZXJ2aWNlLnNlYXJjaChxdWVyeSwgYXJncywgY2FsbGJhY2spO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydCBhIHNlYXJjaCBqb2IgdGhhdCBhcHBsaWVzIHF1ZXJ5U3VmZml4IHRvIGFsbCB0aGUgZXZlbnRzIGluIHRoaXMgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgc2VydmljZS5kYXRhTW9kZWxzKCkuZmV0Y2goZnVuY3Rpb24oZXJyLCBkYXRhTW9kZWxzKSB7XG4gICAgICAgICAqICAgICAgICAgIHZhciBvYmplY3QgPSBkYXRhTW9kZWxzLml0ZW0oXCJpbnRlcm5hbF9hdWRpdF9sb2dzXCIpLm9iamVjdEJ5TmFtZShcInNlYXJjaGVzXCIpO1xuICAgICAgICAgKiAgICAgICAgICBvYmplY3Quc3RhcnRTZWFyY2goe30sIFwifCBoZWFkIDVcIiwgZnVuY3Rpb24oZXJyLCBqb2IpIHtcbiAgICAgICAgICogICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGhlIGpvYiBoYXMgbmFtZTpcIiwgam9iLm5hbWUpO1xuICAgICAgICAgKiAgICAgICAgICB9KTtcbiAgICAgICAgICogICAgICB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBBIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBmb3IgdGhlIHNlYXJjaCBqb2IuIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMsIHNlZSA8YSBocmVmPVwiaHR0cDovL2Rldi5zcGx1bmsuY29tL3ZpZXcvU1AtQ0FBQUVGQSNzZWFyY2hqb2JwYXJhbXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5TZWFyY2ggam9iIHBhcmFtZXRlcnM8L2E+IG9uIFNwbHVuayBEZXZlbG9wZXIgUG9ydGFsLlxuICAgICAgICAgKiAgICAgICAgKipOb3RlOioqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgYGV4ZWNfbW9kZT1vbmVzaG90YCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluIHdpdGggdGhlIHByb3BlcnRpZXMgZGljdGlvbmFyeS5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5U3VmZml4IEEgc2VhcmNoIHF1ZXJ5LCBzdGFydGluZyB3aXRoIGEgJ3wnIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCB0byBmZXRjaCB0aGUgY29udGVudHMgb2YgdGhpcyBkYXRhIG1vZGVsIG9iamVjdCAoZS5nLiwgXCJ8IGhlYWQgM1wiKS5cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIHNlYXJjaCBqb2I6IGAoZXJyLCBqb2IpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbE9iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgc3RhcnRTZWFyY2g6IGZ1bmN0aW9uKHBhcmFtcywgcXVlcnlTdWZmaXgsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcXVlcnkgPSBcInwgZGF0YW1vZGVsIFwiICsgdGhpcy5kYXRhTW9kZWwubmFtZSArIFwiIFwiICsgdGhpcy5uYW1lICsgXCIgc2VhcmNoXCI7XG4gICAgICAgICAgICAvLyBQcmVwZW5kIGEgc3BhY2UgdG8gdGhlIHF1ZXJ5U3VmZml4LCBvciBzZXQgaXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBxdWVyeVN1ZmZpeCA9IChxdWVyeVN1ZmZpeCkgPyAoXCIgXCIgKyBxdWVyeVN1ZmZpeCkgOiAoXCJcIik7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5zZXJ2aWNlLnNlYXJjaChxdWVyeSArIHF1ZXJ5U3VmZml4LCBwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBkYXRhIG1vZGVsIG9iamVjdCB0aGlzIG9uZSBpbmhlcml0cyBmcm9tIGlmIGl0IGlzIGEgdXNlciBkZWZpbmVkLFxuICAgICAgICAgKiBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0fG51bGx9IFRoaXMgZGF0YSBtb2RlbCBvYmplY3QncyBwYXJlbnRcbiAgICAgICAgICogICAgIG9yIG51bGwgaWYgdGhpcyBpcyBub3QgYSB1c2VyIGRlZmluZWQgZGF0YSBtb2RlbCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIHBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhTW9kZWwub2JqZWN0QnlOYW1lKHRoaXMucGFyZW50TmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIG5ldyBQaXZvdCBTcGVjaWZpY2F0aW9uLCBhY2NlcHRzIG5vIHBhcmFtZXRlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge3NwbHVua2pzLlNlcnZpY2UuUGl2b3RTcGVjaWZpY2F0aW9ufSBBIG5ldyBwaXZvdCBzcGVjaWZpY2F0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBjcmVhdGVQaXZvdFNwZWNpZmljYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gUGFzcyBpbiB0aGlzIERhdGFNb2RlbE9iamVjdCB0byBjcmVhdGUgYSBQaXZvdFNwZWNpZmljYXRpb25cbiAgICAgICAgICAgIHJldHVybiBuZXcgcm9vdC5QaXZvdFNwZWNpZmljYXRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBSZXByZXNlbnRzIGEgZGF0YSBtb2RlbCBvbiB0aGUgc2VydmVyLiBEYXRhIG1vZGVsc1xuICAgICAqIGNvbnRhaW4gYERhdGFNb2RlbE9iamVjdGAgaW5zdGFuY2VzLCB3aGljaCBzcGVjaWZ5IHN0cnVjdHVyZWRcbiAgICAgKiB2aWV3cyBvbiBTcGx1bmsgZGF0YS5cbiAgICAgKlxuICAgICAqIEBlbmRwb2ludCBkYXRhbW9kZWwvbW9kZWwve25hbWV9XG4gICAgICogQGNsYXNzIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICogQGV4dGVuZHMgc3BsdW5ranMuU2VydmljZS5FbnRpdHlcbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbCA9IFNlcnZpY2UuRW50aXR5LmV4dGVuZCh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXRyaWV2ZXMgdGhlIFJFU1QgZW5kcG9pbnQgcGF0aCBmb3IgdGhpcyByZXNvdXJjZSAod2l0aCBubyBuYW1lc3BhY2UpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5kYXRhTW9kZWxzICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge3NwbHVua2pzLlNlcnZpY2V9IHNlcnZpY2UgQSBgU2VydmljZWAgaW5zdGFuY2UuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgbmV3IGRhdGEgbW9kZWwuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lc3BhY2UgKE9wdGlvbmFsKSBuYW1lc3BhY2UgaW5mb3JtYXRpb246XG4gICAgICAgICAqICAgIC0gYG93bmVyYCAoX3N0cmluZ18pOiBUaGUgU3BsdW5rIHVzZXJuYW1lLCBzdWNoIGFzIFwiYWRtaW5cIi4gQSB2YWx1ZSBvZiBcIm5vYm9keVwiIG1lYW5zIG5vIHNwZWNpZmljIHVzZXIuIFRoZSBcIi1cIiB3aWxkY2FyZCBtZWFucyBhbGwgdXNlcnMuXG4gICAgICAgICAqICAgIC0gYGFwcGAgKF9zdHJpbmdfKTogVGhlIGFwcCBjb250ZXh0IGZvciB0aGlzIHJlc291cmNlIChzdWNoIGFzIFwic2VhcmNoXCIpLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIGFwcHMuXG4gICAgICAgICAqICAgIC0gYHNoYXJpbmdgIChfc3RyaW5nXyk6IEEgbW9kZSB0aGF0IGluZGljYXRlcyBob3cgdGhlIHJlc291cmNlIGlzIHNoYXJlZC4gVGhlIHNoYXJpbmcgbW9kZSBjYW4gYmUgXCJ1c2VyXCIsIFwiYXBwXCIsIFwiZ2xvYmFsXCIsIG9yIFwic3lzdGVtXCIuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIG9mIHRoaXMgZGF0YSBtb2RlbDpcbiAgICAgICAgICogICAgLSBgYWNjZWxlcmF0aW9uYCAoX3N0cmluZ18pOiBBIEpTT04gb2JqZWN0IHdpdGggYW4gYGVuYWJsZWRgIGtleSwgcmVwcmVzZW50aW5nIGlmIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICAgICAgICogICAgLSBgY29uY2lzZWAgKF9zdHJpbmdfKTogSW5kaWNhdGVzIHdoZXRoZXIgdG8gbGlzdCBhIGNvbmNpc2UgSlNPTiBkZXNjcmlwdGlvbiBvZiB0aGUgZGF0YSBtb2RlbCwgc2hvdWxkIGFsd2F5cyBiZSBcIjBcIi5cbiAgICAgICAgICogICAgLSBgZGVzY3JpcHRpb25gIChfc3RyaW5nXyk6IFRoZSBKU09OIGRlc2NyaWJpbmcgdGhlIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgIC0gYGRpc3BsYXlOYW1lYCAoX3N0cmluZ18pOiBUaGUgbmFtZSBkaXNwbGF5ZWQgZm9yIHRoZSBkYXRhIG1vZGVsIGluIFNwbHVuayBXZWIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWUsIG5hbWVzcGFjZSwgcHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIG5vdCBnaXZlbiBhIDR0aCBhcmcsIGFzc3VtZSB0aGUgbmFtZXNwYWNlIHdhcyBvbWl0dGVkXG4gICAgICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMgPSBuYW1lc3BhY2U7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9zdXBlcihzZXJ2aWNlLCB0aGlzLnBhdGgoKSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAgICAgdGhpcy5hY2NlbGVyYXRpb24gPSBKU09OLnBhcnNlKHByb3BzLmNvbnRlbnQuYWNjZWxlcmF0aW9uKSB8fCB7fTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjY2VsZXJhdGlvbi5oYXNPd25Qcm9wZXJ0eShcImVuYWJsZWRcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBlbmFibGVkIHByb3BlcnR5IHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQgPSAhIXRoaXMuYWNjZWxlcmF0aW9uLmVuYWJsZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbmNpc2U9MCAoZmFsc2UpIGZvcmNlcyB0aGUgc2VydmVyIHRvIHJldHVybiBhbGwgZGV0YWlscyBvZiB0aGUgbmV3bHkgY3JlYXRlZCBkYXRhIG1vZGVsLlxuICAgICAgICAgICAgLy8gd2UgZG8gbm90IHdhbnQgYSBzdW1tYXJ5IG9mIHRoaXMgZGF0YSBtb2RlbFxuICAgICAgICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImNvbmNpc2VcIikgfHwgdXRpbHMuaXNVbmRlZmluZWQocHJvcHMuY29uY2lzZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmNpc2UgPSBcIjBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRhdGFNb2RlbERlZmluaXRpb24gPSBKU09OLnBhcnNlKHByb3BzLmNvbnRlbnQuZGVzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVzID0gZGF0YU1vZGVsRGVmaW5pdGlvbi5vYmplY3ROYW1lTGlzdDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkYXRhTW9kZWxEZWZpbml0aW9uLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGFNb2RlbERlZmluaXRpb24uZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBvYmplY3RzIGZvciB0aGlzIGRhdGEgbW9kZWwgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9ianMgPSBkYXRhTW9kZWxEZWZpbml0aW9uLm9iamVjdHM7XG4gICAgICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG5ldyByb290LkRhdGFNb2RlbE9iamVjdChvYmpzW2ldLCB0aGlzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlID0gdXRpbHMuYmluZCh0aGlzLCB0aGlzLnJlbW92ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy51cGRhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWNjZWxlcmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIGlzQWNjZWxlcmF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5hY2NlbGVyYXRpb24uZW5hYmxlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIGRhdGEgbW9kZWwgb2JqZWN0IGZyb20gdGhpcyBkYXRhIG1vZGVsXG4gICAgICAgICAqIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGlmIGl0IGV4aXN0cywgbnVsbCBvdGhlcndpc2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdHxudWxsfSBhIGRhdGEgbW9kZWwgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsXG4gICAgICAgICAqL1xuICAgICAgICBvYmplY3RCeU5hbWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2JqZWN0c1tpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBib29sZWFuIG9mIHdoZXRoZXIgdGhpcyBleGlzdHMgaW4gdGhpcyBkYXRhIG1vZGVsIG9yIG5vdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGF0YSBtb2RlbCBoYXMgb2JqZWN0IHdpdGggc3BlY2lmaWVkIG5hbWUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbFxuICAgICAgICAgKi9cbiAgICAgICAgaGFzT2JqZWN0OiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5vYmplY3ROYW1lcywgbmFtZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgdGhlIGRhdGEgbW9kZWwgb24gdGhlIHNlcnZlciwgdXNlZCB0byB1cGRhdGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMgdG8gdXBkYXRlIHRoZSBvYmplY3Qgd2l0aDpcbiAgICAgICAgICogICAgIC0gYGFjY2VsZXJhdGlvbmAgKF9vYmplY3RfKTogVGhlIGFjY2VsZXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGRhdGEgbW9kZWwuXG4gICAgICAgICAqICAgICAgICAgVmFsaWQga2V5cyBhcmU6IGBlbmFibGVkYCwgYGVhcmxpZXN0VGltZWAsIGBjcm9uU2NoZWR1bGVgLlxuICAgICAgICAgKiAgICAgICAgIEFueSBrZXlzIG5vdCBzZXQgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgYWNjZWxlcmF0aW9uIHNldHRpbmdzIGFscmVhZHlcbiAgICAgICAgICogICAgICAgICBzZXQgb24gdGhpcyBkYXRhIG1vZGVsLlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZGF0YSBtb2RlbCBpcyB1cGRhdGVkOiBgKGVyciwgZGF0YU1vZGVsKWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxcbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9wcztcbiAgICAgICAgICAgICAgICBwcm9wcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuXG4gICAgICAgICAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiTXVzdCBzcGVjaWZ5IGEgcHJvcHMgYXJndW1lbnQgdG8gdXBkYXRlIGEgZGF0YSBtb2RlbC5cIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiBwcm9wcyBpc24ndCBzZXQsIHRvIGF2b2lkIGNhbGxpbmcgdGhlIGNhbGxiYWNrIHR3aWNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KFwibmFtZVwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgJ25hbWUnIGZpZWxkIGluICd1cGRhdGUnXCIpLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEV4aXQgaWYgdGhlIG5hbWUgaXMgc2V0LCB0byBhdm9pZCBjYWxsaW5nIHRoZSBjYWxsYmFjayB0d2ljZS5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBhY2NlbGVyYXRpb246IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogcHJvcHMuYWNjY2VsZXJhdGlvbiAmJiBwcm9wcy5hY2NlbGVyYXRpb24uZW5hYmxlZCB8fCB0aGlzLmFjY2VsZXJhdGlvbi5lbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICBlYXJsaWVzdF90aW1lOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5lYXJsaWVzdFRpbWUgfHwgdGhpcy5hY2NlbGVyYXRpb24uZWFybGllc3RUaW1lLFxuICAgICAgICAgICAgICAgICAgICBjcm9uX3NjaGVkdWxlOiBwcm9wcy5hY2NjZWxlcmF0aW9uICYmIHByb3BzLmFjY2VsZXJhdGlvbi5jcm9uU2NoZWR1bGUgfHwgdGhpcy5hY2NlbGVyYXRpb24uY3JvblNjaGVkdWxlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3QoXCJcIiwgdXBkYXRlZFByb3BzLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIHRoYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFNb2RlbE5hbWVzcGFjZSA9IHV0aWxzLm5hbWVzcGFjZUZyb21Qcm9wZXJ0aWVzKHJlc3BvbnNlLmRhdGEuZW50cnlbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBuZXcgcm9vdC5EYXRhTW9kZWwodGhhdC5zZXJ2aWNlLCByZXNwb25zZS5kYXRhLmVudHJ5WzBdLm5hbWUsIGRhdGFNb2RlbE5hbWVzcGFjZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLyoqXG4gICAgICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgZGF0YSBtb2RlbHMuIFlvdSBjYW4gY3JlYXRlIGFuZFxuICAgICAqIGxpc3QgZGF0YSBtb2RlbHMgdXNpbmcgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5lciwgb3JcbiAgICAgKiBnZXQgYSBzcGVjaWZpYyBkYXRhIG1vZGVsLlxuICAgICAqXG4gICAgICogQGVuZHBvaW50IGRhdGFtb2RlbC9tb2RlbFxuICAgICAqIEBjbGFzcyBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgKiBAZXh0ZW5kcyBzcGx1bmtqcy5TZXJ2aWNlLkNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICByb290LkRhdGFNb2RlbHMgPSBTZXJ2aWNlLkNvbGxlY3Rpb24uZXh0ZW5kKHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJpZXZlcyB0aGUgUkVTVCBlbmRwb2ludCBwYXRoIGZvciB0aGlzIHJlc291cmNlICh3aXRoIG5vIG5hbWVzcGFjZSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBwYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXRocy5kYXRhTW9kZWxzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgYHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc2AuXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtzcGx1bmtqcy5TZXJ2aWNlfSBzZXJ2aWNlIEEgYFNlcnZpY2VgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmFtZXNwYWNlIChPcHRpb25hbCkgbmFtZXNwYWNlIGluZm9ybWF0aW9uOlxuICAgICAgICAgKiAgICAtIGBvd25lcmAgKF9zdHJpbmdfKTogVGhlIFNwbHVuayB1c2VybmFtZSwgc3VjaCBhcyBcImFkbWluXCIuIEEgdmFsdWUgb2YgXCJub2JvZHlcIiBtZWFucyBubyBzcGVjaWZpYyB1c2VyLiBUaGUgXCItXCIgd2lsZGNhcmQgbWVhbnMgYWxsIHVzZXJzLlxuICAgICAgICAgKiAgICAtIGBhcHBgIChfc3RyaW5nXyk6IFRoZSBhcHAgY29udGV4dCBmb3IgdGhpcyByZXNvdXJjZSAoc3VjaCBhcyBcInNlYXJjaFwiKS4gVGhlIFwiLVwiIHdpbGRjYXJkIG1lYW5zIGFsbCBhcHBzLlxuICAgICAgICAgKiAgICAtIGBzaGFyaW5nYCAoX3N0cmluZ18pOiBBIG1vZGUgdGhhdCBpbmRpY2F0ZXMgaG93IHRoZSByZXNvdXJjZSBpcyBzaGFyZWQuIFRoZSBzaGFyaW5nIG1vZGUgY2FuIGJlIFwidXNlclwiLCBcImFwcFwiLCBcImdsb2JhbFwiLCBvciBcInN5c3RlbVwiLlxuICAgICAgICAgKiBcbiAgICAgICAgICogQG1ldGhvZCBzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbHNcbiAgICAgICAgICovXG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uKHNlcnZpY2UsIG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIoc2VydmljZSwgdGhpcy5wYXRoKCksIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZSA9IHV0aWxzLmJpbmQodGhpcywgdGhpcy5jcmVhdGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IGBEYXRhTW9kZWxgIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBwYXJhbWV0ZXJzLlxuICAgICAgICAgKiBJdCBpcyBwcmVmZXJyZWQgdGhhdCB5b3UgY3JlYXRlIGRhdGEgbW9kZWxzIHRocm91Z2ggdGhlIFNwbHVua1xuICAgICAgICAgKiBFbnRlcnByaXNlIHdpdGggYSBicm93c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZGF0YSBtb2RlbCB0byBjcmVhdGUuIElmIGl0IGNvbnRhaW5zIHNwYWNlcyB0aGV5IHdpbGwgYmUgcmVwbGFjZWRcbiAgICAgICAgICogICAgIHdpdGggdW5kZXJzY29yZXMuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgQSBkaWN0aW9uYXJ5IG9mIHByb3BlcnRpZXMuXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBuZXcgYERhdGFNb2RlbGAgb2JqZWN0OiBgKGVyciwgY3JlYXRlZERhdGFNb2RlbClgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNwbHVua2pzLlNlcnZpY2UuRGF0YU1vZGVsc1xuICAgICAgICAgKi9cbiAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihuYW1lLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBnZXQgKG5hbWUsIGNhbGxiYWNrKSBpbnN0ZWFkIG9mIChuYW1lLCBwYXJhbXMsIGNhbGxiYWNrKVxuICAgICAgICAgICAgLy8gZG8gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZSBzd2FwXG4gICAgICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXMpICYmICFjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCl7fTtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgXCJfXCIpO1xuXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0KFwiXCIsIHtuYW1lOiBuYW1lLCBkZXNjcmlwdGlvbjogSlNPTi5zdHJpbmdpZnkocGFyYW1zKX0sIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU1vZGVsID0gbmV3IHJvb3QuRGF0YU1vZGVsKHRoYXQuc2VydmljZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5uYW1lLCB0aGF0Lm5hbWVzcGFjZSwgcmVzcG9uc2UuZGF0YS5lbnRyeVswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGFNb2RlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnN0cnVjdG9yIGZvciBgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIHVzZWQgdG8gY3JlYXRlIGEgXG4gICAgICAgICAqIGBEYXRhTW9kZWxgIGluc3RhbmNlLlxuICAgICAgICAgKiBAcmV0dXJuIHtzcGx1bmtqcy5TZXJ2aWNlLkRhdGFNb2RlbH0gQSBuZXcgYERhdGFNb2RlbGAgaW5zdGFuY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2Qgc3BsdW5ranMuU2VydmljZS5EYXRhTW9kZWxzXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0YW50aWF0ZUVudGl0eTogZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lc3BhY2UgPSB1dGlscy5uYW1lc3BhY2VGcm9tUHJvcGVydGllcyhwcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHJvb3QuRGF0YU1vZGVsKHRoaXMuc2VydmljZSwgcHJvcHMubmFtZSwgZW50aXR5TmFtZXNwYWNlLCBwcm9wcyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qISovXG4gICAgLy8gSXRlcmF0ZXMgb3ZlciBhbiBlbmRwb2ludCdzIHJlc3VsdHMuXG4gICAgcm9vdC5QYWdpbmF0ZWRFbmRwb2ludEl0ZXJhdG9yID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oZW5kcG9pbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9lbmRwb2ludCA9IGVuZHBvaW50O1xuICAgICAgICAgICAgdGhpcy5fcGFnZXNpemUgPSBwYXJhbXMucGFnZXNpemUgfHwgMDtcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IDA7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBGZXRjaGVzIHRoZSBuZXh0IHBhZ2UgZnJvbSB0aGUgZW5kcG9pbnQuXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRoaXMuX3BhZ2VzaXplLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5fb2Zmc2V0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuZHBvaW50KHBhcmFtcywgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtUmVzdWx0cyA9IChyZXN1bHRzLnJvd3MgPyByZXN1bHRzLnJvd3MubGVuZ3RoIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29mZnNldCArPSBudW1SZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0cywgbnVtUmVzdWx0cyA+IDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpOyJdfQ== \ No newline at end of file From 18b07e86f9b0c36c0dc15b48322d25f6cb2845ea Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 19 Nov 2021 17:11:29 +0530 Subject: [PATCH 39/50] Updated null check --- lib/service.js | 5 ++++- tests/service_tests/configuration.js | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/service.js b/lib/service.js index 98efcb767..4e80670b1 100644 --- a/lib/service.js +++ b/lib/service.js @@ -3129,7 +3129,10 @@ var response = await this.get_v2("", {__conf: filename}); // 2. Filter the files - var files = response?.body?.entry?.filter(f => f.name === filename); + var files = response + && response.body + && response.body.entry + && response.body.entry.filter(f => f.name === filename); // 3. Check if the file exists if(files && files.length == 0) { diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index cf10ea935..089fce911 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -167,7 +167,7 @@ exports.setup = function (svc) { // a. File exists: Positive var doesFileExistResponse1 = await configs.doesFileExist(filename); - var configFile = doesFileExistResponse1?.file; + var configFile = doesFileExistResponse1.file; assert.ok(configFile); // b. Stanza exists: Positive @@ -182,7 +182,7 @@ exports.setup = function (svc) { // c. File exists: Negative var doesFileExistResponse2 = await configs.doesFileExist("invalid_filename"); - var invalidConfigFile = doesFileExistResponse2?.file; + var invalidConfigFile = doesFileExistResponse2.file; assert.ok(!invalidConfigFile); From 26ce0c348a30cfc2d4b8b51c195c91d2a65b80af Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 1 Dec 2021 16:34:25 +0530 Subject: [PATCH 40/50] Refactored --- lib/context.js | 4 +- lib/http.js | 84 ++++++++++------------------ lib/platform/node/node_http.js | 2 +- lib/service.js | 17 +++--- tests/service_tests/configuration.js | 6 +- 5 files changed, 43 insertions(+), 70 deletions(-) diff --git a/lib/context.js b/lib/context.js index 71c55427a..89871ca10 100644 --- a/lib/context.js +++ b/lib/context.js @@ -371,10 +371,10 @@ return this._requestWrapper(request, callback); }, - get_v2: function(path, params) { + getAsync: function(path, params) { var that = this; // var request = function() { - return that.http.get_v2( + return that.http.getAsync( that.urlify(path), that._headers(), params, diff --git a/lib/http.js b/lib/http.js index 5f3bed530..5a3e1e0de 100644 --- a/lib/http.js +++ b/lib/http.js @@ -144,7 +144,7 @@ return this.request(url, message, callback); }, - get_v2: function(url, headers, params, timeout) { + getAsync: function(url, headers, params, timeout) { var message = { method: "GET", headers: headers, @@ -152,7 +152,7 @@ query: params }; - return this.request_v2(url, message); + return this.request(url, message, true); }, /** @@ -215,29 +215,6 @@ */ request: function(url, message, callback) { var that = this; - var wrappedCallback = function(response) { - callback = callback || function() {}; - - // Handle cookies if 'set-cookie' header is in the response - - var cookieHeaders = response.response.headers['set-cookie']; - if (cookieHeaders) { - utils.forEach(cookieHeaders, function (cookieHeader) { - var cookie = that._parseCookieHeader(cookieHeader); - that._cookieStore[cookie.key] = cookie.value; - }); - } - - // Handle callback - - if (response.status < 400 && response.status !== "abort") { - callback(null, response); - } - else { - callback(response); - } - }; - var query = utils.getWithVersion(this.version, queryBuilderMap)(message); var post = message.post || {}; @@ -264,38 +241,35 @@ // Now we can invoke the user-provided HTTP class, // passing in our "wrapped" callback - return this.makeRequest(encodedUrl, options, wrappedCallback); - }, - - request_v2: function(url, message) { - var that = this; - var query = utils.getWithVersion(this.version, queryBuilderMap)(message); - var post = message.post || {}; - - var encodedUrl = url + "?" + Http.encode(query); - var body = message.body ? message.body : Http.encode(post); - - var cookieString = that._getCookieString(); - - if (cookieString.length !== 0) { - message.headers["Cookie"] = cookieString; - - // Remove Authorization header - // Splunk will use Authorization header and ignore Cookies if Authorization header is sent - delete message.headers["Authorization"]; + if(callback && typeof callback === 'boolean') { + return this.makeRequestAsync(encodedUrl, options); } + else { + var wrappedCallback = function(response) { + callback = callback || function() {}; + + // Handle cookies if 'set-cookie' header is in the response + + var cookieHeaders = response.response.headers['set-cookie']; + if (cookieHeaders) { + utils.forEach(cookieHeaders, function (cookieHeader) { + var cookie = that._parseCookieHeader(cookieHeader); + that._cookieStore[cookie.key] = cookie.value; + }); + } + + // Handle callback + + if (response.status < 400 && response.status !== "abort") { + callback(null, response); + } + else { + callback(response); + } + }; - var options = { - method: message.method, - headers: message.headers, - timeout: message.timeout, - body: body - }; - - // Now we can invoke the user-provided HTTP class, - // var res_2 = await this.makeRequest_v2(encodedUrl, options); - // console.log(res_2.body.entry[0]); - return this.makeRequest_v2(encodedUrl, options); + return this.makeRequest(encodedUrl, options, wrappedCallback); + } }, /** diff --git a/lib/platform/node/node_http.js b/lib/platform/node/node_http.js index 4393b5bc2..416ed65cd 100644 --- a/lib/platform/node/node_http.js +++ b/lib/platform/node/node_http.js @@ -85,7 +85,7 @@ return req; }, - makeRequest_v2: async function(url, message) { + makeRequestAsync: async function(url, message) { var request_options = { url: url, method: message.method, diff --git a/lib/service.js b/lib/service.js index 4e80670b1..64a65d8f4 100644 --- a/lib/service.js +++ b/lib/service.js @@ -733,7 +733,7 @@ ); }, - get_v2: function(relpath, params) { + getAsync: function(relpath, params) { var url = this.qualifiedPath; // If we have a relative path, we will append it with a preceding @@ -742,7 +742,7 @@ url = url + "/" + relpath; } - return this.service.get_v2( + return this.service.getAsync( url, params, ); @@ -1410,15 +1410,14 @@ return req; }, - fetch_v2: async function(options) { + fetchAsync: async function(options) { options = options || {}; if (!options.count) { options.count = 0; } var that = this; - var response = await that.get_v2("", options); - // return response; + var response = await that.getAsync("", options); that._load(response.body); return that; }, @@ -3126,7 +3125,7 @@ var that = this; // 1. Fetch files list - var response = await this.get_v2("", {__conf: filename}); + var response = await this.getAsync("", {__conf: filename}); // 2. Filter the files var files = response @@ -3143,7 +3142,7 @@ var configurationFile = new root.ConfigurationFile(that.service, filename); // 5. Load the file content - var fetchedFile = await configurationFile.fetch_v2(); + var fetchedFile = await configurationFile.fetchAsync(); return {file: fetchedFile}; } @@ -3170,7 +3169,7 @@ } }, - create_v2: async function (configs, svc, filename, stanza, keyValueMap, callback) { + createAsync: async function (configs, svc, filename, stanza, keyValueMap, callback) { callback = callback || function() {}; var that = this; @@ -3187,7 +3186,7 @@ (err, newFile) => console.log(`Configuration File created: ${filename}`) ); configFile = new root.ConfigurationFile( that.service, filename ); - configFile = await configFile.fetch_v2(); + configFile = await configFile.fetchAsync(); } // 2. Check if the stanza exists diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index 089fce911..37d715e21 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -139,7 +139,7 @@ exports.setup = function (svc) { }); }); - it("Callback#create_v2", function (done) { + it("Callback#createAsync", function (done) { var that = this; var namespace = { owner: "nobody", app: "system" }; var filename = "jssdk_file_new_" + getNextId(); @@ -159,7 +159,7 @@ exports.setup = function (svc) { keyValueMap[property1] = value1; keyValueMap[property2] = value2; - configs.create_v2(configs, svc, filename, stanza, keyValueMap, done); + configs.createAsync(configs, svc, filename, stanza, keyValueMap, done); }, async function (done) { var configs = svc.configurations(namespace); @@ -171,7 +171,7 @@ exports.setup = function (svc) { assert.ok(configFile); // b. Stanza exists: Positive - configFile = await configFile.fetch_v2(); + configFile = await configFile.fetchAsync(); var doesStanzaExistResponse1 = await configs.doesStanzaExist(configFile, stanza); var configStanza = doesStanzaExistResponse1.stanza; From b3fd917d2d010c8b271f446051817029edbc8d0f Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 1 Dec 2021 16:36:23 +0530 Subject: [PATCH 41/50] Update context.js --- lib/context.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/context.js b/lib/context.js index 89871ca10..3fc11c0ce 100644 --- a/lib/context.js +++ b/lib/context.js @@ -373,16 +373,12 @@ getAsync: function(path, params) { var that = this; - // var request = function() { - return that.http.getAsync( - that.urlify(path), - that._headers(), - params, - that.timeout, - ); - // }; - - // return this._requestWrapper(request); + return that.http.getAsync( + that.urlify(path), + that._headers(), + params, + that.timeout, + ); }, /** From b00bef30ad073b5b187958d7f9a9ccdff543fd92 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Thu, 2 Dec 2021 16:08:15 +0530 Subject: [PATCH 42/50] Refactored --- lib/context.js | 35 +++++++++++++++------------- lib/http.js | 19 ++++----------- lib/service.js | 26 +++++---------------- tests/service_tests/configuration.js | 2 +- 4 files changed, 30 insertions(+), 52 deletions(-) diff --git a/lib/context.js b/lib/context.js index 3fc11c0ce..12efada12 100644 --- a/lib/context.js +++ b/lib/context.js @@ -356,29 +356,32 @@ * * @method splunkjs.Context */ - get: function(path, params, callback) { + get: function(path, params, callback, isAsync) { var that = this; - var request = function(callback) { + + if(isAsync) { return that.http.get( that.urlify(path), that._headers(), params, that.timeout, - callback + null, + true ); - }; - - return this._requestWrapper(request, callback); - }, - - getAsync: function(path, params) { - var that = this; - return that.http.getAsync( - that.urlify(path), - that._headers(), - params, - that.timeout, - ); + } + else { + var request = function(callback) { + return that.http.get( + that.urlify(path), + that._headers(), + params, + that.timeout, + callback + ); + }; + + return this._requestWrapper(request, callback); + } }, /** diff --git a/lib/http.js b/lib/http.js index 5a3e1e0de..2fb686da0 100644 --- a/lib/http.js +++ b/lib/http.js @@ -133,7 +133,7 @@ * * @method splunkjs.Http */ - get: function(url, headers, params, timeout, callback) { + get: function(url, headers, params, timeout, callback, isAsync) { var message = { method: "GET", headers: headers, @@ -141,18 +141,7 @@ query: params }; - return this.request(url, message, callback); - }, - - getAsync: function(url, headers, params, timeout) { - var message = { - method: "GET", - headers: headers, - timeout: timeout, - query: params - }; - - return this.request(url, message, true); + return this.request(url, message, callback, isAsync); }, /** @@ -213,7 +202,7 @@ * @method splunkjs.Http * @see makeRequest */ - request: function(url, message, callback) { + request: function(url, message, callback, isAsync) { var that = this; var query = utils.getWithVersion(this.version, queryBuilderMap)(message); var post = message.post || {}; @@ -241,7 +230,7 @@ // Now we can invoke the user-provided HTTP class, // passing in our "wrapped" callback - if(callback && typeof callback === 'boolean') { + if(isAsync) { return this.makeRequestAsync(encodedUrl, options); } else { diff --git a/lib/service.js b/lib/service.js index 64a65d8f4..81809f032 100644 --- a/lib/service.js +++ b/lib/service.js @@ -717,7 +717,7 @@ * * @method splunkjs.Service.Endpoint */ - get: function(relpath, params, callback) { + get: function(relpath, params, callback, isAsync) { var url = this.qualifiedPath; // If we have a relative path, we will append it with a preceding @@ -729,22 +729,8 @@ return this.service.get( url, params, - callback - ); - }, - - getAsync: function(relpath, params) { - var url = this.qualifiedPath; - - // If we have a relative path, we will append it with a preceding - // slash. - if (relpath) { - url = url + "/" + relpath; - } - - return this.service.getAsync( - url, - params, + callback, + isAsync ); }, @@ -1417,7 +1403,7 @@ } var that = this; - var response = await that.getAsync("", options); + var response = await that.get("", options, null, true); that._load(response.body); return that; }, @@ -3125,7 +3111,7 @@ var that = this; // 1. Fetch files list - var response = await this.getAsync("", {__conf: filename}); + var response = await this.get("", {__conf: filename}, null, true); // 2. Filter the files var files = response @@ -3169,7 +3155,7 @@ } }, - createAsync: async function (configs, svc, filename, stanza, keyValueMap, callback) { + createAsync: async function (filename, stanza, keyValueMap, callback) { callback = callback || function() {}; var that = this; diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index 37d715e21..d539e0eec 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -159,7 +159,7 @@ exports.setup = function (svc) { keyValueMap[property1] = value1; keyValueMap[property2] = value2; - configs.createAsync(configs, svc, filename, stanza, keyValueMap, done); + configs.createAsync(filename, stanza, keyValueMap, done); }, async function (done) { var configs = svc.configurations(namespace); From 034e411b692094f00774fdd9caaffb0507907170 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 5 Jan 2022 15:40:55 +0530 Subject: [PATCH 43/50] Structural changes for .conf CRUD functionality 1. Method renamed: doesFileExist --> getConfFile 2. Method renamed: doesStanzaExist --> getStanza 3. try/catch removed to let exception propagate to calling method 4. return file/stanza if found or else return null --- lib/service.js | 95 +++++++++++----------------- tests/service_tests/configuration.js | 24 +++---- 2 files changed, 46 insertions(+), 73 deletions(-) diff --git a/lib/service.js b/lib/service.js index 81809f032..b64eeedfc 100644 --- a/lib/service.js +++ b/lib/service.js @@ -3106,52 +3106,41 @@ return req; }, - doesFileExist: async function(filename) { - try { - var that = this; - - // 1. Fetch files list - var response = await this.get("", {__conf: filename}, null, true); - - // 2. Filter the files - var files = response - && response.body - && response.body.entry - && response.body.entry.filter(f => f.name === filename); - - // 3. Check if the file exists - if(files && files.length == 0) { - return { code:"FILE_NOT_FOUND", message: `File with the name '${filename}' does not exist.`}; - } - - // 4. Create a local instance - var configurationFile = new root.ConfigurationFile(that.service, filename); + getConfFile: async function(filename) { + var that = this; - // 5. Load the file content - var fetchedFile = await configurationFile.fetchAsync(); + // 1. Fetch files list + var response = await this.get("", {__conf: filename}, null, true); - return {file: fetchedFile}; - } - catch(error) { - return { errorCode:"SYSTEM_ERROR", errorMessage: error}; + // 2. Filter the files + var files = response + && response.body + && response.body.entry + && response.body.entry.filter(f => f.name === filename); + + // 3. Check if the file exists + if(files && files.length == 0) { + return null; } + + // 4. Create a local instance + var configurationFile = new root.ConfigurationFile(that.service, filename); + + // 5. Load the file content + var fetchedFile = await configurationFile.fetchAsync(); + + return fetchedFile; }, - doesStanzaExist: async function(file, stanza) { - try { - - // 1. check if the stanza exists - var fetchedStanza = file.item(stanza); - - if(!fetchedStanza) { - return { code:"STANZA_NOT_FOUND", message: `Stanza with the name '${stanza}' does not exist.`}; - } - else { - return {stanza: fetchedStanza}; - } + getStanza: async function(file, stanza) { + // 1. check if the stanza exists + var fetchedStanza = file.item(stanza); + + if(fetchedStanza == undefined) { + return null; } - catch(error) { - return { errorCode:"SYSTEM_ERROR", errorMessage: error}; + else { + return fetchedStanza; } }, @@ -3160,39 +3149,31 @@ var that = this; // 1. Check if the file exists - var doesFileExistResponse = await this.doesFileExist(filename); - var configFile = doesFileExistResponse.file; + var configFile = await this.getConfFile(filename); // 2. If the file doesn't exist, create a new file - if(!configFile) { - console.log(doesFileExistResponse); - console.log("Creating a new configuration file..."); + if(configFile == undefined) { - that.create( { __conf: filename }, - (err, newFile) => console.log(`Configuration File created: ${filename}`) ); + that.create( { __conf: filename }); configFile = new root.ConfigurationFile( that.service, filename ); configFile = await configFile.fetchAsync(); } - // 2. Check if the stanza exists - var doesStanzaExistResponse = await this.doesStanzaExist(configFile, stanza); - var configStanza = doesStanzaExistResponse.stanza; + // 3. Check if the stanza exists + var configStanza = await this.getStanza(configFile, stanza); - // 3. If the stanza doesn't exist, create a new stanza with given keyValueMap - if(!configStanza) { - console.log(doesStanzaExistResponse); - console.log("Creating a new configuration stanza..."); + // 4. If the stanza doesn't exist, create a new stanza with given keyValueMap + if(configStanza == undefined) { configFile.create(stanza, keyValueMap, function (err, newStanza) { - console.log(`Configuration Stanza created: ${stanza}`); callback(); }); } - // 4. If the stanza exists, update it with the keyValueMap + + // 5. If the stanza exists, update it with the keyValueMap else { configStanza.update(keyValueMap, (err, updatedStanza) => { - console.log(`Configuration Stanza updated: ${stanza}`); callback(); }); } diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index d539e0eec..2fb1e04df 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -158,7 +158,6 @@ exports.setup = function (svc) { var keyValueMap = {} keyValueMap[property1] = value1; keyValueMap[property2] = value2; - configs.createAsync(filename, stanza, keyValueMap, done); }, async function (done) { @@ -166,39 +165,32 @@ exports.setup = function (svc) { configs.fetch(); // a. File exists: Positive - var doesFileExistResponse1 = await configs.doesFileExist(filename); - var configFile = doesFileExistResponse1.file; + var configFile = await configs.getConfFile(filename); assert.ok(configFile); // b. Stanza exists: Positive configFile = await configFile.fetchAsync(); - var doesStanzaExistResponse1 = await configs.doesStanzaExist(configFile, stanza); - var configStanza = doesStanzaExistResponse1.stanza; - + var configStanza = await configs.getStanza(configFile, stanza); assert.ok(configStanza); assert.ok(configStanza._properties); assert.strictEqual(configStanza._properties[property1], value1 ); assert.strictEqual(configStanza._properties[property2], value2 ); // c. File exists: Negative - var doesFileExistResponse2 = await configs.doesFileExist("invalid_filename"); - var invalidConfigFile = doesFileExistResponse2.file; - + var invalidConfigFile = await configs.getConfFile("invalid_filename"); assert.ok(!invalidConfigFile); // d. Stanza exists: Positive - var doesStanzaExistResponse2 = await configs.doesStanzaExist(configFile, "invalid_stanza_name"); - var invalidConfigStanza = doesStanzaExistResponse2.stanza; - + var invalidConfigStanza = await configs.getStanza(configFile, "invalid_stanza_name"); assert.ok(!invalidConfigStanza); done(); }, ], - function (err) { - assert.ok(!err); - done(); - }); + function (err) { + assert.ok(!err); + done(); + }); }); it("Callback#can get default stanza", function (done) { From 422d4d637ac373f200d1d92e786bbf341772ac97 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 5 Jan 2022 16:49:18 +0530 Subject: [PATCH 44/50] Update README.md --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 646d863b1..8d5bbe6cf 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,29 @@ Save the file as **.splunkrc** in the current user's home directory. Click **Yes**, then continue creating the file. +### Create/Update a .conf file +```javascript + +Async.chain([ + function (done) { + // Fetch configurations + var configs = svc.configurations(namespace); + configs.fetch(done); + }, + async function (configs, done) { + // Create a key-value map to store under a stanza + var keyValueMap = {} + keyValueMap[property1] = value1; + + // If file/stanza doesn't exist, it will be created + // else it will be updated. + configs.createAsync(filename, stanzaName, keyValueMap, done); + } +], +function (err) { + done(); +}); +``` ### Client-side examples From 7b5465115ce070a0042f32d4ce0639bca409fac3 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Wed, 5 Jan 2022 16:49:53 +0530 Subject: [PATCH 45/50] Refactoring --- lib/service.js | 7 ++++--- tests/service_tests/configuration.js | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/service.js b/lib/service.js index b64eeedfc..7ff14f8f9 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1262,6 +1262,7 @@ this._load = utils.bind(this, this._load); this.fetch = utils.bind(this, this.fetch); this.create = utils.bind(this, this.create); + this.createAsync = utils.bind(this, this.createAsync); this.list = utils.bind(this, this.list); this.item = utils.bind(this, this.item); this.instantiateEntity = utils.bind(this, this.instantiateEntity); @@ -3144,7 +3145,7 @@ } }, - createAsync: async function (filename, stanza, keyValueMap, callback) { + createAsync: async function (filename, stanzaName, keyValueMap, callback) { callback = callback || function() {}; var that = this; @@ -3161,12 +3162,12 @@ } // 3. Check if the stanza exists - var configStanza = await this.getStanza(configFile, stanza); + var configStanza = await this.getStanza(configFile, stanzaName); // 4. If the stanza doesn't exist, create a new stanza with given keyValueMap if(configStanza == undefined) { - configFile.create(stanza, keyValueMap, function (err, newStanza) { + configFile.create(stanzaName, keyValueMap, function (err, newStanza) { callback(); }); } diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index 2fb1e04df..cb08cec5a 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -154,7 +154,7 @@ exports.setup = function (svc) { var configs = svc.configurations(namespace); configs.fetch(done); }, - async function (configs, done) { + function (configs, done) { var keyValueMap = {} keyValueMap[property1] = value1; keyValueMap[property2] = value2; @@ -180,7 +180,7 @@ exports.setup = function (svc) { var invalidConfigFile = await configs.getConfFile("invalid_filename"); assert.ok(!invalidConfigFile); - // d. Stanza exists: Positive + // d. Stanza exists: Negative var invalidConfigStanza = await configs.getStanza(configFile, "invalid_stanza_name"); assert.ok(!invalidConfigStanza); From 5fa52e6254d5eb899f2d19bc2e52e5206fbc9daa Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 7 Jan 2022 15:14:36 +0530 Subject: [PATCH 46/50] README and test updated README and test updated to use actual example for .conf file --- README.md | 5 ++++- tests/service_tests/configuration.js | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8d5bbe6cf..17816f3c3 100644 --- a/README.md +++ b/README.md @@ -230,8 +230,11 @@ Async.chain([ }, async function (configs, done) { // Create a key-value map to store under a stanza + const filename = "app.conf"; + const stanzaName = "install"; var keyValueMap = {} - keyValueMap[property1] = value1; + keyValueMap["state"] = "enabled"; + keyValueMap["python.version"] = "python3"; // If file/stanza doesn't exist, it will be created // else it will be updated. diff --git a/tests/service_tests/configuration.js b/tests/service_tests/configuration.js index cb08cec5a..e62acea1c 100644 --- a/tests/service_tests/configuration.js +++ b/tests/service_tests/configuration.js @@ -143,11 +143,11 @@ exports.setup = function (svc) { var that = this; var namespace = { owner: "nobody", app: "system" }; var filename = "jssdk_file_new_" + getNextId(); - var stanza = "jssdk_stanza" - var property1 = "foo1" - var value1 = "bar1"; - var property2 = "foo2" - var value2 = "bar2"; + var stanza = "install" + var property1 = "state" + var value1 = "enabled"; + var property2 = "python.version" + var value2 = "python3"; Async.chain([ function (done) { From 381f8aab3de75e8fb0bfbb19b1432b4c2bb349ed Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Fri, 7 Jan 2022 18:10:58 +0530 Subject: [PATCH 47/50] Doc string added for new methods --- lib/service.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/lib/service.js b/lib/service.js index 7ff14f8f9..d648d12b7 100644 --- a/lib/service.js +++ b/lib/service.js @@ -1397,6 +1397,22 @@ return req; }, + /** + * It's an asynchronous version of fetch(options, callback) function. + * + * Refreshes the resource by fetching the object from the server and + * loading it. + * + * @param {Object} options A dictionary of collection filtering and pagination options: + * - `count` (_integer_): The maximum number of items to return. + * - `offset` (_integer_): The offset of the first item to return. + * - `search` (_string_): The search query to filter responses. + * - `sort_dir` (_string_): The direction to sort returned items: “asc” or “desc”. + * - `sort_key` (_string_): The field to use for sorting (optional). + * - `sort_mode` (_string_): The collating sequence for sorting returned items: “auto”, “alpha”, “alpha_case”, or “num”. + * + * @method splunkjs.Service.Collection + */ fetchAsync: async function(options) { options = options || {}; if (!options.count) { @@ -3107,6 +3123,15 @@ return req; }, + /** + * Fetch a configuration file. + * + * @param {String} file A name for configuration file. + * @return file, if exists or null + * + * @endpoint properties + * @method splunkjs.Service.Configurations + */ getConfFile: async function(filename) { var that = this; @@ -3133,6 +3158,16 @@ return fetchedFile; }, + /** + * Fetch a configuration stanza. + * + * @param {String} file A configuration file. + * @param {String} stanza A configuration stanza. + * @return stanza, if exists or null + * + * @endpoint properties + * @method splunkjs.Service.Configurations + */ getStanza: async function(file, stanza) { // 1. check if the stanza exists var fetchedStanza = file.item(stanza); @@ -3145,6 +3180,17 @@ } }, + /** + * Creates/Updates a configuration file and stanza. + * + * @param {String} filename A name for this configuration file to be created/updated. + * @param {String} stanzaName A name for the stanza to be created/updated. + * @param {String} keyValueMap A key-value map of properties to be put under the stanza. + * @param {Function} callback A function to call with the new configuration file. + * + * @endpoint properties + * @method splunkjs.Service.Configurations + */ createAsync: async function (filename, stanzaName, keyValueMap, callback) { callback = callback || function() {}; var that = this; From 4978bd31ac1aef6c90b97edf29dd42b3e490a849 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 3 Mar 2022 15:23:38 +0530 Subject: [PATCH 48/50] Dependency updates --- package-lock.json | 1574 +++++++++++++++++++++++---------------------- package.json | 14 +- 2 files changed, 798 insertions(+), 790 deletions(-) diff --git a/package-lock.json b/package-lock.json index baa6eb6a7..e52a4b2c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "7.14.5" } }, "@babel/compat-data": { @@ -25,21 +25,21 @@ "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "@babel/code-frame": "7.14.5", + "@babel/generator": "7.15.0", + "@babel/helper-compilation-targets": "7.15.0", + "@babel/helper-module-transforms": "7.15.0", + "@babel/helpers": "7.15.3", + "@babel/parser": "7.15.3", + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0", + "convert-source-map": "1.8.0", + "debug": "4.3.2", + "gensync": "1.0.0-beta.2", + "json5": "2.2.0", + "semver": "6.3.0", + "source-map": "0.5.7" }, "dependencies": { "convert-source-map": { @@ -48,7 +48,7 @@ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "debug": { @@ -86,9 +86,9 @@ "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "requires": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "7.15.0", + "jsesc": "2.5.2", + "source-map": "0.5.7" } }, "@babel/helper-compilation-targets": { @@ -97,10 +97,10 @@ "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" + "@babel/compat-data": "7.15.0", + "@babel/helper-validator-option": "7.14.5", + "browserslist": "4.16.8", + "semver": "6.3.0" }, "dependencies": { "semver": { @@ -117,9 +117,9 @@ "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "7.14.5", + "@babel/template": "7.14.5", + "@babel/types": "7.15.0" } }, "@babel/helper-get-function-arity": { @@ -128,7 +128,7 @@ "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "7.15.0" } }, "@babel/helper-hoist-variables": { @@ -137,7 +137,7 @@ "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "7.15.0" } }, "@babel/helper-member-expression-to-functions": { @@ -146,7 +146,7 @@ "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", "dev": true, "requires": { - "@babel/types": "^7.15.0" + "@babel/types": "7.15.0" } }, "@babel/helper-module-imports": { @@ -155,7 +155,7 @@ "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "7.15.0" } }, "@babel/helper-module-transforms": { @@ -164,14 +164,14 @@ "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-module-imports": "7.14.5", + "@babel/helper-replace-supers": "7.15.0", + "@babel/helper-simple-access": "7.14.8", + "@babel/helper-split-export-declaration": "7.14.5", + "@babel/helper-validator-identifier": "7.14.9", + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" } }, "@babel/helper-optimise-call-expression": { @@ -180,7 +180,7 @@ "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "7.15.0" } }, "@babel/helper-replace-supers": { @@ -189,10 +189,10 @@ "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "7.15.0", + "@babel/helper-optimise-call-expression": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" } }, "@babel/helper-simple-access": { @@ -201,7 +201,7 @@ "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "7.15.0" } }, "@babel/helper-split-export-declaration": { @@ -210,7 +210,7 @@ "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "7.15.0" } }, "@babel/helper-validator-identifier": { @@ -231,9 +231,9 @@ "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "7.14.5", + "@babel/traverse": "7.15.0", + "@babel/types": "7.15.0" } }, "@babel/highlight": { @@ -242,9 +242,9 @@ "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "7.14.9", + "chalk": "2.4.2", + "js-tokens": "4.0.0" } }, "@babel/parser": { @@ -259,9 +259,9 @@ "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "7.14.5", + "@babel/parser": "7.15.3", + "@babel/types": "7.15.0" } }, "@babel/traverse": { @@ -270,15 +270,15 @@ "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "7.14.5", + "@babel/generator": "7.15.0", + "@babel/helper-function-name": "7.14.5", + "@babel/helper-hoist-variables": "7.14.5", + "@babel/helper-split-export-declaration": "7.14.5", + "@babel/parser": "7.15.3", + "@babel/types": "7.15.0", + "debug": "4.3.2", + "globals": "11.12.0" }, "dependencies": { "debug": { @@ -304,8 +304,8 @@ "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" + "@babel/helper-validator-identifier": "7.14.9", + "to-fast-properties": "2.0.0" } }, "@istanbuljs/load-nyc-config": { @@ -314,11 +314,11 @@ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "camelcase": "5.3.1", + "find-up": "4.1.0", + "get-package-type": "0.1.0", + "js-yaml": "3.13.1", + "resolve-from": "5.0.0" }, "dependencies": { "find-up": { @@ -327,8 +327,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "5.0.0", + "path-exists": "4.0.0" } }, "locate-path": { @@ -337,7 +337,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "4.1.0" } }, "p-locate": { @@ -346,7 +346,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "2.3.0" } }, "path-exists": { @@ -369,8 +369,8 @@ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "jsonparse": "1.3.1", + "through": "2.3.8" } }, "acorn": { @@ -385,9 +385,9 @@ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" + "acorn": "7.4.1", + "acorn-walk": "7.2.0", + "xtend": "4.0.2" } }, "acorn-walk": { @@ -402,8 +402,8 @@ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "clean-stack": "2.2.0", + "indent-string": "4.0.0" } }, "ansi-colors": { @@ -424,7 +424,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { @@ -433,8 +433,8 @@ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "normalize-path": "3.0.0", + "picomatch": "2.3.0" } }, "append-transform": { @@ -443,7 +443,7 @@ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "requires": { - "default-require-extensions": "^3.0.0" + "default-require-extensions": "3.0.0" } }, "archy": { @@ -458,7 +458,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "asn1.js": { @@ -467,10 +467,10 @@ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "bn.js": "4.12.0", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "safer-buffer": "2.1.2" }, "dependencies": { "bn.js": { @@ -487,7 +487,7 @@ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "object-assign": "^4.1.1", + "object-assign": "4.1.1", "util": "0.10.3" }, "dependencies": { @@ -550,7 +550,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.2", "concat-map": "0.0.1" } }, @@ -560,7 +560,7 @@ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "7.0.1" } }, "brorand": { @@ -575,12 +575,12 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" + "JSONStream": "1.3.5", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.2.1", + "through2": "2.0.5", + "umd": "3.0.3" } }, "browser-resolve": { @@ -589,7 +589,7 @@ "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "requires": { - "resolve": "^1.17.0" + "resolve": "1.20.0" } }, "browser-stdout": { @@ -604,54 +604,54 @@ "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.1", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^3.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.2.1", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "^1.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum-object": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^3.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", + "JSONStream": "1.3.5", + "assert": "1.5.0", + "browser-pack": "6.1.0", + "browser-resolve": "2.0.0", + "browserify-zlib": "0.2.0", + "buffer": "5.2.1", + "cached-path-relative": "1.1.0", + "concat-stream": "1.6.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.1", + "domain-browser": "1.2.0", + "duplexer2": "0.1.4", + "events": "3.3.0", + "glob": "7.1.7", + "has": "1.0.3", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.4", + "insert-module-globals": "7.2.1", + "labeled-stream-splicer": "2.0.2", + "mkdirp-classic": "0.5.3", + "module-deps": "6.2.3", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "1.0.1", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.7", + "resolve": "1.20.0", + "shasum-object": "1.0.0", + "shell-quote": "1.7.2", + "stream-browserify": "3.0.0", + "stream-http": "3.2.0", + "string_decoder": "1.3.0", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.5", + "timers-browserify": "1.4.2", "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.12.0", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" + "url": "0.11.0", + "util": "0.12.4", + "vm-browserify": "1.1.2", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { @@ -660,13 +660,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" }, "dependencies": { "string_decoder": { @@ -675,7 +675,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -694,12 +694,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "browserify-cipher": { @@ -708,9 +708,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -719,10 +719,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.1", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "browserify-rsa": { @@ -731,8 +731,8 @@ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "5.2.0", + "randombytes": "2.1.0" } }, "browserify-sign": { @@ -741,15 +741,15 @@ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "bn.js": "5.2.0", + "browserify-rsa": "4.1.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.5.4", + "inherits": "2.0.4", + "parse-asn1": "5.1.6", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" } }, "browserify-zlib": { @@ -758,7 +758,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.11" } }, "browserslist": { @@ -767,11 +767,11 @@ "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "caniuse-lite": "1.0.30001251", + "colorette": "1.3.0", + "electron-to-chromium": "1.3.812", + "escalade": "3.1.1", + "node-releases": "1.1.75" } }, "buffer": { @@ -780,8 +780,8 @@ "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "1.5.1", + "ieee754": "1.2.1" } }, "buffer-from": { @@ -803,8 +803,8 @@ "dev": true }, "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, @@ -814,10 +814,10 @@ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "hasha": "5.2.2", + "make-dir": "3.1.0", + "package-hash": "4.0.0", + "write-file-atomic": "3.0.3" } }, "call-bind": { @@ -826,8 +826,8 @@ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "1.1.1", + "get-intrinsic": "1.1.1" } }, "camelcase": { @@ -843,17 +843,18 @@ "dev": true }, "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "loupe": "2.3.4", + "pathval": "1.1.1", + "type-detect": "4.0.8" } }, "chalk": { @@ -862,9 +863,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" }, "dependencies": { "supports-color": { @@ -873,7 +874,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -890,14 +891,14 @@ "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" + "anymatch": "3.1.2", + "braces": "3.0.2", + "fsevents": "2.1.3", + "glob-parent": "5.1.2", + "is-binary-path": "2.1.0", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "readdirp": "3.2.0" } }, "cipher-base": { @@ -906,8 +907,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "clean-stack": { @@ -923,7 +924,7 @@ "dev": true, "requires": { "exit": "0.1.2", - "glob": "^7.1.1" + "glob": "7.1.7" } }, "cliui": { @@ -932,9 +933,9 @@ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "3.1.0", + "strip-ansi": "5.2.0", + "wrap-ansi": "5.1.0" } }, "color-convert": { @@ -964,10 +965,10 @@ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" } }, "commondir": { @@ -988,10 +989,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "typedarray": "0.0.6" }, "dependencies": { "readable-stream": { @@ -1000,13 +1001,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -1021,7 +1022,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -1061,8 +1062,8 @@ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "bn.js": "4.12.0", + "elliptic": "6.5.4" }, "dependencies": { "bn.js": { @@ -1079,11 +1080,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.4", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -1092,12 +1093,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.4", + "ripemd160": "2.0.2", + "safe-buffer": "5.2.1", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -1106,9 +1107,9 @@ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "path-key": "3.1.1", + "shebang-command": "2.0.0", + "which": "2.0.2" }, "dependencies": { "which": { @@ -1117,7 +1118,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } } } @@ -1128,17 +1129,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.2.1", + "create-ecdh": "4.0.4", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.4", + "pbkdf2": "3.1.2", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" } }, "dash-ast": { @@ -1164,7 +1165,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.3" } }, "decamelize": { @@ -1179,7 +1180,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "^4.0.0" + "type-detect": "4.0.8" } }, "default-require-extensions": { @@ -1188,7 +1189,7 @@ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, "requires": { - "strip-bom": "^4.0.0" + "strip-bom": "4.0.0" } }, "define-properties": { @@ -1197,7 +1198,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.1.1" } }, "defined": { @@ -1212,10 +1213,10 @@ "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" + "JSONStream": "1.3.5", + "shasum-object": "1.0.0", + "subarg": "1.0.0", + "through2": "2.0.5" } }, "des.js": { @@ -1224,8 +1225,8 @@ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" } }, "detective": { @@ -1234,9 +1235,9 @@ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" + "acorn-node": "1.8.2", + "defined": "1.0.0", + "minimist": "1.2.5" } }, "diff": { @@ -1251,9 +1252,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.12.0", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" }, "dependencies": { "bn.js": { @@ -1270,8 +1271,8 @@ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "2.2.0", + "entities": "2.2.0" }, "dependencies": { "domelementtype": { @@ -1306,7 +1307,7 @@ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -1315,8 +1316,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.2.2", + "domelementtype": "1.3.1" } }, "dotenv": { @@ -1330,7 +1331,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { @@ -1339,13 +1340,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -1360,7 +1361,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -1385,13 +1386,13 @@ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "bn.js": "4.12.0", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" }, "dependencies": { "bn.js": { @@ -1420,23 +1421,23 @@ "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "call-bind": "1.0.2", + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "get-intrinsic": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.2", + "internal-slot": "1.0.3", + "is-callable": "1.2.4", + "is-negative-zero": "2.0.1", + "is-regex": "1.1.4", + "is-string": "1.0.7", + "object-inspect": "1.11.0", + "object-keys": "1.1.1", + "object.assign": "4.1.2", + "string.prototype.trimend": "1.0.4", + "string.prototype.trimstart": "1.0.4", + "unbox-primitive": "1.0.1" } }, "es-to-primitive": { @@ -1445,9 +1446,9 @@ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.2.4", + "is-date-object": "1.0.5", + "is-symbol": "1.0.4" } }, "es6-error": { @@ -1492,8 +1493,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.2.1" } }, "exit": { @@ -1514,7 +1515,7 @@ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "to-regex-range": "5.0.1" } }, "find-cache-dir": { @@ -1523,9 +1524,9 @@ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" } }, "find-up": { @@ -1534,7 +1535,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "flat": { @@ -1543,7 +1544,7 @@ "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, "requires": { - "is-buffer": "~2.0.3" + "is-buffer": "2.0.5" }, "dependencies": { "is-buffer": { @@ -1566,8 +1567,8 @@ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "cross-spawn": "7.0.3", + "signal-exit": "3.0.3" } }, "fromentries": { @@ -1582,9 +1583,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.2.8", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, "fs.realpath": { @@ -1642,9 +1643,9 @@ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.2" } }, "get-package-type": { @@ -1659,12 +1660,12 @@ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-parent": { @@ -1673,7 +1674,7 @@ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "4.0.1" } }, "globals": { @@ -1700,7 +1701,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-bigints": { @@ -1727,7 +1728,7 @@ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "1.0.2" } }, "hash-base": { @@ -1736,9 +1737,9 @@ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" } }, "hash.js": { @@ -1747,8 +1748,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" } }, "hasha": { @@ -1757,8 +1758,8 @@ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "is-stream": "2.0.1", + "type-fest": "0.8.1" } }, "he": { @@ -1773,9 +1774,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "html-escaper": { @@ -1796,11 +1797,11 @@ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" + "domelementtype": "1.3.1", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" }, "dependencies": { "isarray": { @@ -1815,10 +1816,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.4", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -1840,7 +1841,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -1867,8 +1868,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1883,7 +1884,7 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "~0.5.3" + "source-map": "0.5.7" } }, "insert-module-globals": { @@ -1892,16 +1893,16 @@ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" + "JSONStream": "1.3.5", + "acorn-node": "1.8.2", + "combine-source-map": "0.8.0", + "concat-stream": "1.6.2", + "is-buffer": "1.1.6", + "path-is-absolute": "1.0.1", + "process": "0.11.10", + "through2": "2.0.5", + "undeclared-identifiers": "1.1.3", + "xtend": "4.0.2" } }, "internal-slot": { @@ -1910,9 +1911,9 @@ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "get-intrinsic": "1.1.1", + "has": "1.0.3", + "side-channel": "1.0.4" } }, "is-arguments": { @@ -1921,8 +1922,8 @@ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" } }, "is-bigint": { @@ -1931,7 +1932,7 @@ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { - "has-bigints": "^1.0.1" + "has-bigints": "1.0.1" } }, "is-binary-path": { @@ -1940,7 +1941,7 @@ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "binary-extensions": "2.2.0" } }, "is-boolean-object": { @@ -1949,8 +1950,8 @@ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" } }, "is-buffer": { @@ -1971,7 +1972,7 @@ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "requires": { - "has": "^1.0.3" + "has": "1.0.3" } }, "is-date-object": { @@ -1980,7 +1981,7 @@ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "has-tostringtag": "1.0.0" } }, "is-extglob": { @@ -2001,7 +2002,7 @@ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "has-tostringtag": "1.0.0" } }, "is-glob": { @@ -2010,7 +2011,7 @@ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-negative-zero": { @@ -2031,7 +2032,7 @@ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "has-tostringtag": "1.0.0" } }, "is-regex": { @@ -2040,8 +2041,8 @@ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "1.0.2", + "has-tostringtag": "1.0.0" } }, "is-stream": { @@ -2056,7 +2057,7 @@ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "has-tostringtag": "1.0.0" } }, "is-symbol": { @@ -2065,7 +2066,7 @@ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "1.0.2" } }, "is-typed-array": { @@ -2074,11 +2075,11 @@ "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "available-typed-arrays": "1.0.4", + "call-bind": "1.0.2", + "es-abstract": "1.18.5", + "foreach": "2.0.5", + "has-tostringtag": "1.0.0" } }, "is-typedarray": { @@ -2117,7 +2118,7 @@ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "append-transform": "^2.0.0" + "append-transform": "2.0.0" } }, "istanbul-lib-instrument": { @@ -2126,10 +2127,10 @@ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "@babel/core": "7.15.0", + "@istanbuljs/schema": "0.1.3", + "istanbul-lib-coverage": "3.0.0", + "semver": "6.3.0" }, "dependencies": { "semver": { @@ -2146,13 +2147,13 @@ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", "dev": true, "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "archy": "1.0.0", + "cross-spawn": "7.0.3", + "istanbul-lib-coverage": "3.0.0", + "make-dir": "3.1.0", + "p-map": "3.0.0", + "rimraf": "3.0.2", + "uuid": "3.4.0" }, "dependencies": { "uuid": { @@ -2169,9 +2170,9 @@ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "istanbul-lib-coverage": "3.0.0", + "make-dir": "3.1.0", + "supports-color": "7.2.0" }, "dependencies": { "has-flag": { @@ -2186,7 +2187,7 @@ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "4.0.0" } } } @@ -2197,9 +2198,9 @@ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "debug": "4.3.2", + "istanbul-lib-coverage": "3.0.0", + "source-map": "0.6.1" }, "dependencies": { "debug": { @@ -2231,8 +2232,8 @@ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "html-escaper": "2.0.2", + "istanbul-lib-report": "3.0.0" } }, "js-tokens": { @@ -2247,8 +2248,8 @@ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "jsesc": { @@ -2263,14 +2264,14 @@ "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", "dev": true, "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "4.17.21", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" }, "dependencies": { "console-browserify": { @@ -2279,7 +2280,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } } } @@ -2296,7 +2297,7 @@ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "1.2.5" } }, "jsonfile": { @@ -2305,7 +2306,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.2.8" } }, "jsonparse": { @@ -2320,8 +2321,8 @@ "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" + "inherits": "2.0.4", + "stream-splicer": "2.0.1" } }, "locate-path": { @@ -2330,8 +2331,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -2382,7 +2383,7 @@ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "2.4.2" } }, "loose-envify": { @@ -2391,7 +2392,16 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "js-tokens": "4.0.0" + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "2.0.0" } }, "make-dir": { @@ -2400,7 +2410,7 @@ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "semver": "^6.0.0" + "semver": "6.3.0" }, "dependencies": { "semver": { @@ -2417,9 +2427,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.1.0", + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "miller-rabin": { @@ -2428,8 +2438,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.12.0", + "brorand": "1.1.0" }, "dependencies": { "bn.js": { @@ -2458,7 +2468,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2473,7 +2483,7 @@ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "1.2.5" } }, "mkdirp-classic": { @@ -2520,12 +2530,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "ms": { @@ -2540,10 +2550,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.2", + "object-keys": "1.1.1" } }, "strip-json-comments": { @@ -2555,27 +2565,27 @@ } }, "mochawesome": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-6.2.2.tgz", - "integrity": "sha512-NuIxYo8zczmL5XWLNFiud21OsAJHXrflt2lcRY2u8a3TilGwglhzTPjUHZCLqJvbqj2CnIHX2ueqOh1ViUNDPw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "diff": "^5.0.0", - "json-stringify-safe": "^5.0.1", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", - "mochawesome-report-generator": "^5.2.0", - "strip-ansi": "^6.0.0", - "uuid": "^8.3.2" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-6.3.1.tgz", + "integrity": "sha512-G2J7Le8ap+0222otJQEUVFs7RYzphiIk21NzaBZE2dbyHJ2+9aai+V2cV7lreEKigDpwQ+SXeiiBH9KQlrkaAQ==", + "dev": true, + "requires": { + "chalk": "4.1.2", + "diff": "5.0.0", + "json-stringify-safe": "5.0.1", + "lodash.isempty": "4.4.0", + "lodash.isfunction": "3.0.9", + "lodash.isobject": "3.0.2", + "lodash.isstring": "4.0.1", + "mochawesome-report-generator": "5.2.0", + "strip-ansi": "6.0.1", + "uuid": "8.3.2" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -2584,7 +2594,7 @@ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "2.0.1" } }, "chalk": { @@ -2593,8 +2603,8 @@ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" } }, "color-convert": { @@ -2603,7 +2613,7 @@ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.4" } }, "color-name": { @@ -2625,12 +2635,12 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "5.0.1" } }, "supports-color": { @@ -2639,7 +2649,7 @@ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "4.0.0" } } } @@ -2650,26 +2660,18 @@ "integrity": "sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "dateformat": "^3.0.2", - "escape-html": "^1.0.3", - "fs-extra": "^7.0.0", - "fsu": "^1.0.2", - "lodash.isfunction": "^3.0.8", - "opener": "^1.5.2", - "prop-types": "^15.7.2", - "tcomb": "^3.2.17", - "tcomb-validation": "^3.3.0", - "validator": "^10.11.0", - "yargs": "^13.2.2" - }, - "dependencies": { - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - } + "chalk": "2.4.2", + "dateformat": "3.0.3", + "escape-html": "1.0.3", + "fs-extra": "7.0.1", + "fsu": "1.1.1", + "lodash.isfunction": "3.0.9", + "opener": "1.5.2", + "prop-types": "15.8.1", + "tcomb": "3.2.29", + "tcomb-validation": "3.4.1", + "validator": "10.11.0", + "yargs": "13.3.2" } }, "module-deps": { @@ -2678,21 +2680,21 @@ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" + "JSONStream": "1.3.5", + "browser-resolve": "2.0.0", + "cached-path-relative": "1.1.0", + "concat-stream": "1.6.2", + "defined": "1.0.0", + "detective": "5.2.0", + "duplexer2": "0.1.4", + "inherits": "2.0.4", + "parents": "1.0.1", + "readable-stream": "2.3.7", + "resolve": "1.20.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.5", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { @@ -2701,13 +2703,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -2722,7 +2724,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -2743,9 +2745,9 @@ "resolved": "https://registry.npmjs.org/needle/-/needle-2.8.0.tgz", "integrity": "sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==", "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "3.2.6", + "iconv-lite": "0.4.24", + "sax": "1.2.4" }, "dependencies": { "sax": { @@ -2761,8 +2763,8 @@ "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", "dev": true, "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" + "object.getownpropertydescriptors": "2.1.2", + "semver": "5.7.1" } }, "node-preload": { @@ -2771,7 +2773,7 @@ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { - "process-on-spawn": "^1.0.0" + "process-on-spawn": "1.0.0" } }, "node-releases": { @@ -2792,33 +2794,33 @@ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" + "@istanbuljs/load-nyc-config": "1.1.0", + "@istanbuljs/schema": "0.1.3", + "caching-transform": "4.0.0", + "convert-source-map": "1.8.0", + "decamelize": "1.2.0", + "find-cache-dir": "3.3.1", + "find-up": "4.1.0", + "foreground-child": "2.0.0", + "get-package-type": "0.1.0", + "glob": "7.1.7", + "istanbul-lib-coverage": "3.0.0", + "istanbul-lib-hook": "3.0.0", + "istanbul-lib-instrument": "4.0.3", + "istanbul-lib-processinfo": "2.0.2", + "istanbul-lib-report": "3.0.0", + "istanbul-lib-source-maps": "4.0.0", + "istanbul-reports": "3.0.2", + "make-dir": "3.1.0", + "node-preload": "0.2.1", + "p-map": "3.0.0", + "process-on-spawn": "1.0.0", + "resolve-from": "5.0.0", + "rimraf": "3.0.2", + "signal-exit": "3.0.3", + "spawn-wrap": "2.0.0", + "test-exclude": "6.0.0", + "yargs": "15.4.1" }, "dependencies": { "ansi-regex": { @@ -2833,7 +2835,7 @@ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "2.0.1" } }, "cliui": { @@ -2842,9 +2844,9 @@ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "string-width": "4.2.2", + "strip-ansi": "6.0.0", + "wrap-ansi": "6.2.0" } }, "color-convert": { @@ -2853,7 +2855,7 @@ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.4" } }, "color-name": { @@ -2868,7 +2870,7 @@ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "emoji-regex": { @@ -2883,8 +2885,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "5.0.0", + "path-exists": "4.0.0" } }, "is-fullwidth-code-point": { @@ -2899,7 +2901,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "4.1.0" } }, "p-locate": { @@ -2908,7 +2910,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "2.3.0" } }, "path-exists": { @@ -2929,9 +2931,9 @@ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" } }, "strip-ansi": { @@ -2940,7 +2942,7 @@ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "5.0.0" } }, "wrap-ansi": { @@ -2949,9 +2951,9 @@ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "4.3.0", + "string-width": "4.2.2", + "strip-ansi": "6.0.0" } }, "yargs": { @@ -2960,17 +2962,17 @@ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "cliui": "6.0.0", + "decamelize": "1.2.0", + "find-up": "4.1.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "4.2.2", + "which-module": "2.0.0", + "y18n": "4.0.3", + "yargs-parser": "18.1.3" } }, "yargs-parser": { @@ -2979,8 +2981,8 @@ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.3.1", + "decamelize": "1.2.0" } } } @@ -3009,10 +3011,10 @@ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "call-bind": "1.0.2", + "define-properties": "1.1.3", + "has-symbols": "1.0.2", + "object-keys": "1.1.1" } }, "object.getownpropertydescriptors": { @@ -3021,9 +3023,9 @@ "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "call-bind": "1.0.2", + "define-properties": "1.1.3", + "es-abstract": "1.18.5" } }, "once": { @@ -3032,9 +3034,15 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -3047,7 +3055,7 @@ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.2.0" } }, "p-locate": { @@ -3056,7 +3064,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.3.0" } }, "p-map": { @@ -3065,7 +3073,7 @@ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "aggregate-error": "3.1.0" } }, "p-try": { @@ -3080,10 +3088,10 @@ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "graceful-fs": "4.2.8", + "hasha": "5.2.2", + "lodash.flattendeep": "4.4.0", + "release-zalgo": "1.0.0" } }, "pako": { @@ -3098,7 +3106,7 @@ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "~0.11.15" + "path-platform": "0.11.15" } }, "parse-asn1": { @@ -3107,11 +3115,11 @@ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "5.4.1", + "browserify-aes": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.1.2", + "safe-buffer": "5.2.1" } }, "path-browserify": { @@ -3162,11 +3170,11 @@ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.2.1", + "sha.js": "2.4.11" } }, "picomatch": { @@ -3181,7 +3189,7 @@ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^4.0.0" + "find-up": "4.1.0" }, "dependencies": { "find-up": { @@ -3190,8 +3198,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "5.0.0", + "path-exists": "4.0.0" } }, "locate-path": { @@ -3200,7 +3208,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "4.1.0" } }, "p-locate": { @@ -3209,7 +3217,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "2.3.0" } }, "path-exists": { @@ -3238,18 +3246,18 @@ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "requires": { - "fromentries": "^1.2.0" + "fromentries": "1.3.2" } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" } }, "public-encrypt": { @@ -3258,12 +3266,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.12.0", + "browserify-rsa": "4.1.0", + "create-hash": "1.2.0", + "parse-asn1": "5.1.6", + "randombytes": "2.1.0", + "safe-buffer": "5.2.1" }, "dependencies": { "bn.js": { @@ -3298,7 +3306,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.2.1" } }, "randomfill": { @@ -3307,8 +3315,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.1.0", + "safe-buffer": "5.2.1" } }, "react-is": { @@ -3323,7 +3331,7 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { @@ -3332,13 +3340,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -3353,7 +3361,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3364,9 +3372,9 @@ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -3375,7 +3383,7 @@ "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "picomatch": "2.3.0" } }, "release-zalgo": { @@ -3384,7 +3392,7 @@ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { - "es6-error": "^4.0.1" + "es6-error": "4.1.1" } }, "require-directory": { @@ -3405,8 +3413,8 @@ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "2.6.0", + "path-parse": "1.0.7" } }, "resolve-from": { @@ -3421,7 +3429,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.7" } }, "ripemd160": { @@ -3430,8 +3438,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.1.0", + "inherits": "2.0.4" } }, "safe-buffer": { @@ -3468,8 +3476,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.4", + "safe-buffer": "5.2.1" } }, "shasum-object": { @@ -3478,7 +3486,7 @@ "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", "dev": true, "requires": { - "fast-safe-stringify": "^2.0.7" + "fast-safe-stringify": "2.0.8" } }, "shebang-command": { @@ -3487,7 +3495,7 @@ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "shebang-regex": "3.0.0" } }, "shebang-regex": { @@ -3514,9 +3522,9 @@ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "1.0.2", + "get-intrinsic": "1.1.1", + "object-inspect": "1.11.0" } }, "signal-exit": { @@ -3543,12 +3551,12 @@ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" + "foreground-child": "2.0.0", + "is-windows": "1.0.2", + "make-dir": "3.1.0", + "rimraf": "3.0.2", + "signal-exit": "3.0.3", + "which": "2.0.2" }, "dependencies": { "which": { @@ -3557,7 +3565,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } } } @@ -3574,8 +3582,8 @@ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" + "inherits": "2.0.4", + "readable-stream": "3.6.0" } }, "stream-combiner2": { @@ -3584,8 +3592,8 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" + "duplexer2": "0.1.4", + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { @@ -3594,13 +3602,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -3615,7 +3623,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3626,10 +3634,10 @@ "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "xtend": "4.0.2" } }, "stream-splicer": { @@ -3638,8 +3646,8 @@ "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.4", + "readable-stream": "2.3.7" }, "dependencies": { "readable-stream": { @@ -3648,13 +3656,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -3669,7 +3677,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3680,9 +3688,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" } }, "string.prototype.trimend": { @@ -3691,8 +3699,8 @@ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "1.0.2", + "define-properties": "1.1.3" } }, "string.prototype.trimstart": { @@ -3701,8 +3709,8 @@ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "1.0.2", + "define-properties": "1.1.3" } }, "string_decoder": { @@ -3711,7 +3719,7 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "5.2.1" } }, "strip-ansi": { @@ -3720,7 +3728,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "4.1.0" } }, "strip-bom": { @@ -3741,7 +3749,7 @@ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "^1.1.0" + "minimist": "1.2.5" } }, "supports-color": { @@ -3750,7 +3758,7 @@ "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "syntax-error": { @@ -3759,7 +3767,7 @@ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn-node": "^1.2.0" + "acorn-node": "1.8.2" } }, "tcomb": { @@ -3774,7 +3782,7 @@ "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "requires": { - "tcomb": "^3.0.0" + "tcomb": "3.2.29" } }, "test-exclude": { @@ -3783,9 +3791,9 @@ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "@istanbuljs/schema": "0.1.3", + "glob": "7.1.7", + "minimatch": "3.0.4" } }, "through": { @@ -3800,8 +3808,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.7", + "xtend": "4.0.2" }, "dependencies": { "readable-stream": { @@ -3810,13 +3818,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "safe-buffer": { @@ -3831,7 +3839,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } } } @@ -3842,7 +3850,7 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "~0.11.0" + "process": "0.11.10" } }, "to-fast-properties": { @@ -3857,7 +3865,7 @@ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "is-number": "7.0.0" } }, "tty-browserify": { @@ -3890,7 +3898,7 @@ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "is-typedarray": "^1.0.0" + "is-typedarray": "1.0.0" } }, "uglify-js": { @@ -3911,10 +3919,10 @@ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "function-bind": "1.1.1", + "has-bigints": "1.0.1", + "has-symbols": "1.0.2", + "which-boxed-primitive": "1.0.2" } }, "undeclared-identifiers": { @@ -3923,11 +3931,11 @@ "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", "dev": true, "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" + "acorn-node": "1.8.2", + "dash-ast": "1.0.0", + "get-assigned-identifiers": "1.2.0", + "simple-concat": "1.0.1", + "xtend": "4.0.2" } }, "universalify": { @@ -3960,12 +3968,12 @@ "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" + "inherits": "2.0.4", + "is-arguments": "1.1.1", + "is-generator-function": "1.0.10", + "is-typed-array": "1.1.7", + "safe-buffer": "5.2.1", + "which-typed-array": "1.1.6" } }, "util-deprecate": { @@ -3998,7 +4006,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-boxed-primitive": { @@ -4007,11 +4015,11 @@ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "1.0.4", + "is-boolean-object": "1.1.2", + "is-number-object": "1.0.6", + "is-string": "1.0.7", + "is-symbol": "1.0.4" } }, "which-module": { @@ -4026,12 +4034,12 @@ "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.6" + "available-typed-arrays": "1.0.4", + "call-bind": "1.0.2", + "es-abstract": "1.18.5", + "foreach": "2.0.5", + "has-tostringtag": "1.0.0", + "is-typed-array": "1.1.7" } }, "wide-align": { @@ -4040,7 +4048,7 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "2.1.1" }, "dependencies": { "ansi-regex": { @@ -4055,8 +4063,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -4065,7 +4073,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -4076,9 +4084,9 @@ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "3.2.1", + "string-width": "3.1.0", + "strip-ansi": "5.2.0" } }, "wrappy": { @@ -4093,10 +4101,10 @@ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "imurmurhash": "0.1.4", + "is-typedarray": "1.0.0", + "signal-exit": "3.0.3", + "typedarray-to-buffer": "3.1.5" } }, "xtend": { @@ -4117,16 +4125,16 @@ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "cliui": "5.0.0", + "find-up": "3.0.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "3.1.0", + "which-module": "2.0.0", + "y18n": "4.0.3", + "yargs-parser": "13.1.2" } }, "yargs-parser": { @@ -4135,8 +4143,8 @@ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.3.1", + "decamelize": "1.2.0" } }, "yargs-unparser": { @@ -4145,9 +4153,9 @@ "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "flat": "4.1.1", + "lodash": "4.17.21", + "yargs": "13.3.2" } } } diff --git a/package.json b/package.json index 85d032a3c..82e324bf2 100644 --- a/package.json +++ b/package.json @@ -24,21 +24,21 @@ "test": "nyc mocha tests/tests.js -t 50000 --allow-uncaught --exit --reporter mochawesome" }, "dependencies": { - "cookie": "0.4.1", - "dotenv": "^10.0.0", + "cookie": "0.4.2", + "dotenv": "16.0.0", "elementtree": "0.1.7", - "needle": "2.8.0" + "needle": "3.0.0" }, "devDependencies": { "browserify": "^17.0.0", - "chai": "^4.3.4", - "jshint": "2.13.1", + "chai": "^4.3.6", + "jshint": "2.13.4", "mocha": "7.2.0", - "mochawesome": "^6.2.2", + "mochawesome": "7.1.0", "mustache": "4.2.0", "nyc": "^15.1.0", "readable-stream": "3.6.0", - "uglify-js": "3.14.1" + "uglify-js": "3.15.2" }, "author": { "name": "Splunk", From c15c80b780c2e0b32056f3d30069f4904aecb2c0 Mon Sep 17 00:00:00 2001 From: Abhi Shah Date: Thu, 3 Mar 2022 15:35:07 +0530 Subject: [PATCH 49/50] package-lock.json updates --- package-lock.json | 236 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 184 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index e52a4b2c9..bfd3438d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1046,9 +1046,9 @@ "dev": true }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "core-util-is": { "version": "1.0.2", @@ -1155,9 +1155,9 @@ "dev": true }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "debug": { @@ -1321,9 +1321,9 @@ } }, "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" }, "duplexer2": { "version": "0.1.4", @@ -1578,14 +1578,14 @@ "dev": true }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "4.2.8", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "jsonfile": "6.1.0", + "universalify": "2.0.0" } }, "fs.realpath": { @@ -2259,9 +2259,9 @@ "dev": true }, "jshint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", - "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz", + "integrity": "sha512-HO3bosL84b2qWqI0q+kpT/OpRJwo0R4ivgmxaO848+bo10rc50SkPnrtwSFXttW0ym4np8jbJvLwk5NziB7jIw==", "dev": true, "requires": { "cli": "1.0.1", @@ -2270,7 +2270,6 @@ "htmlparser2": "3.8.3", "lodash": "4.17.21", "minimatch": "3.0.4", - "shelljs": "0.3.0", "strip-json-comments": "1.0.4" }, "dependencies": { @@ -2301,12 +2300,13 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "4.2.8" + "graceful-fs": "4.2.8", + "universalify": "2.0.0" } }, "jsonparse": { @@ -2565,9 +2565,9 @@ } }, "mochawesome": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-6.3.1.tgz", - "integrity": "sha512-G2J7Le8ap+0222otJQEUVFs7RYzphiIk21NzaBZE2dbyHJ2+9aai+V2cV7lreEKigDpwQ+SXeiiBH9KQlrkaAQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.0.tgz", + "integrity": "sha512-IXKrNpv3VaWCvxP8mB69gBuN9vVMXawoA/9l6voDiCnl7Ih5s3mM6Sy+zEIzjcLMSTfCthbhaySCzMFeCQfmwA==", "dev": true, "requires": { "chalk": "4.1.2", @@ -2577,7 +2577,7 @@ "lodash.isfunction": "3.0.9", "lodash.isobject": "3.0.2", "lodash.isstring": "4.0.1", - "mochawesome-report-generator": "5.2.0", + "mochawesome-report-generator": "6.1.0", "strip-ansi": "6.0.1", "uuid": "8.3.2" }, @@ -2655,23 +2655,161 @@ } }, "mochawesome-report-generator": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-5.2.0.tgz", - "integrity": "sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.1.0.tgz", + "integrity": "sha512-qzSZu7gpddeFzRv1dCEQSFhmePg1sYzKfwXMSd5jSlthw5yDPdRV89yMc3NBpfPY/JjclZiHvDtz5S4HgWZ0Rg==", "dev": true, "requires": { - "chalk": "2.4.2", - "dateformat": "3.0.3", + "chalk": "4.1.2", + "dateformat": "4.6.3", "escape-html": "1.0.3", - "fs-extra": "7.0.1", + "fs-extra": "10.0.1", "fsu": "1.1.1", "lodash.isfunction": "3.0.9", "opener": "1.5.2", "prop-types": "15.8.1", "tcomb": "3.2.29", "tcomb-validation": "3.4.1", - "validator": "10.11.0", - "yargs": "13.3.2" + "validator": "13.7.0", + "yargs": "17.3.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "4.2.3", + "strip-ansi": "6.0.1", + "wrap-ansi": "7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "4.3.0", + "string-width": "4.2.3", + "strip-ansi": "6.0.1" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dev": true, + "requires": { + "cliui": "7.0.4", + "escalade": "3.1.1", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "string-width": "4.2.3", + "y18n": "5.0.8", + "yargs-parser": "21.0.1" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + } } }, "module-deps": { @@ -2741,9 +2879,9 @@ "dev": true }, "needle": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.8.0.tgz", - "integrity": "sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.0.0.tgz", + "integrity": "sha512-eGr0qnfHxAjr+Eptl1zr2lgUQUPC1SZfTkg2kFi0kxr1ChJonHUVYobkug8siBKMlyUVVp56MSkp6CSeXH/jgw==", "requires": { "debug": "3.2.6", "iconv-lite": "0.4.24", @@ -3510,12 +3648,6 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", "dev": true }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -3902,9 +4034,9 @@ } }, "uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", "dev": true }, "umd": { @@ -3939,9 +4071,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "url": { @@ -3989,9 +4121,9 @@ "dev": true }, "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "dev": true }, "vm-browserify": { From 050f39af15efa4fd91dff95a0d6e28f5f69bfbe5 Mon Sep 17 00:00:00 2001 From: vmalaviya Date: Mon, 7 Mar 2022 17:48:48 +0530 Subject: [PATCH 50/50] release/1.11.0 changes --- CHANGELOG.md | 17 +++++++++++++++++ README.md | 2 +- .../github_commits/bin/app/github_commits.js | 2 +- package.json | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c07a3d9dd..619fc30aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Splunk Enterprise SDK for JavaScript Changelog +## v1.11.0 + +### Major changes +* DVPL-9708 apps/local support ([PR#135](https://github.com/splunk/splunk-sdk-javascript/pull/135)) +* .conf CRUD functionality added ([PR#141](https://github.com/splunk/splunk-sdk-javascript/pull/141)) +### Minor changes +* NodeUnit to Mocha Transition for Browser Test Cases ([PR#127](https://github.com/splunk/splunk-sdk-javascript/pull/127)) +* Login example and README.md change ([PR#138](https://github.com/splunk/splunk-sdk-javascript/pull/138)) +* Add pagination support to history calls ([PR#95](https://github.com/splunk/splunk-sdk-javascript/pull/95)) +* Changes for savedsearch history pagination ([PR#139](https://github.com/splunk/splunk-sdk-javascript/pull/139)) +* Add create-react-app browser example ([PR#99](https://github.com/splunk/splunk-sdk-javascript/pull/99)) +* Support added for output_mode for oneShotSearch ([PR#140](https://github.com/splunk/splunk-sdk-javascript/pull/140)) +* Updated Highcharts License. ([PR#119](https://github.com/splunk/splunk-sdk-javascript/pull/119)) +* package-lock.json updated ([PR#137](https://github.com/splunk/splunk-sdk-javascript/pull/137)) +* WIP: Stabilize CI/CD ([PR#115](https://github.com/splunk/splunk-sdk-javascript/pull/115)) +* Dependency updates ([PR#145](https://github.com/splunk/splunk-sdk-javascript/pull/145)) + ## v1.10.0 ### Major changes diff --git a/README.md b/README.md index 17816f3c3..ea09c2947 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Build Status](https://travis-ci.org/splunk/splunk-sdk-javascript.svg?branch=master)](https://travis-ci.org/splunk/splunk-sdk-javascript) # The Splunk Enterprise Software Development Kit for JavaScript -#### Version 1.10.0 +#### Version 1.11.0 The Splunk Enterprise Software Development Kit (SDK) for JavaScript contains library code and examples designed to enable developers to build applications using the Splunk platform and JavaScript. This SDK supports server-side and client-side JavaScript. diff --git a/examples/modularinputs/github_commits/bin/app/github_commits.js b/examples/modularinputs/github_commits/bin/app/github_commits.js index d9a387c8e..5ce0f82d1 100644 --- a/examples/modularinputs/github_commits/bin/app/github_commits.js +++ b/examples/modularinputs/github_commits/bin/app/github_commits.js @@ -26,7 +26,7 @@ var utils = ModularInputs.utils; // The version number should be updated every time a new version of the JavaScript SDK is released. - var SDK_UA_STRING = "splunk-sdk-javascript/1.10.0"; + var SDK_UA_STRING = "splunk-sdk-javascript/1.11.0"; // Create easy to read date format. function getDisplayDate(date) { diff --git a/package.json b/package.json index 82e324bf2..c540f62ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "splunk-sdk", - "version": "1.10.0", + "version": "1.11.0", "description": "SDK for usage with the Splunk REST API", "homepage": "http://dev.splunk.com", "main": "index.js",