formsy-react/build/formsy-react.js

643 lines
135 KiB
JavaScript
Executable File

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"./src/main.js":[function(require,module,exports){
(function (global){
var React = global.React || require('react');
var Formsy = {};
var validationRules = require('./validationRules.js');
var utils = require('./utils.js');
var Mixin = require('./Mixin.js');
var options = {};
Formsy.Mixin = Mixin;
Formsy.defaults = function (passedOptions) {
options = passedOptions;
};
Formsy.addValidationRule = function (name, func) {
validationRules[name] = func;
};
Formsy.Form = React.createClass({displayName: "Form",
getInitialState: function () {
return {
isValid: true,
isSubmitting: false,
canChange: false
};
},
getDefaultProps: function () {
return {
headers: {},
onSuccess: function () {},
onError: function () {},
onSubmit: function () {},
onValidSubmit: function () {},
onInvalidSubmit: function () {},
onSubmitted: function () {},
onValid: function () {},
onInvalid: function () {},
onChange: function () {}
};
},
// Add a map to store the inputs of the form, a model to store
// the values of the form and register child inputs
componentWillMount: function () {
this.inputs = {};
this.model = {};
this.registerInputs(this.props.children);
},
componentDidMount: function () {
this.validateForm();
},
componentWillUpdate: function () {
var inputKeys = Object.keys(this.inputs);
// The updated children array is not available here for some reason,
// we need to wait for next event loop
setTimeout(function () {
// The component might have been unmounted on an
// update
if (this.isMounted()) {
this.registerInputs(this.props.children);
if (this.props.validationErrors) {
this.setInputValidationErrors(this.props.validationErrors);
}
var newInputKeys = Object.keys(this.inputs);
if (utils.arraysDiffer(inputKeys, newInputKeys)) {
this.validateForm();
}
}
}.bind(this), 0);
},
// Update model, submit to url prop and send the model
submit: function (event) {
event.preventDefault();
// Trigger form as not pristine.
// If any inputs have not been touched yet this will make them dirty
// so validation becomes visible (if based on isPristine)
this.setFormPristine(false);
// To support use cases where no async or request operation is needed.
// The "onSubmit" callback is called with the model e.g. {fieldName: "myValue"},
// if wanting to reset the entire form to original state, the second param is a callback for this.
if (!this.props.url) {
this.updateModel();
var model = this.mapModel();
this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);
this.state.isValid ? this.props.onValidSubmit(model, this.resetModel) : this.props.onInvalidSubmit(model, this.resetModel);
return;
}
this.updateModel();
this.setState({
isSubmitting: true
});
this.props.onSubmit(this.mapModel(), this.resetModel, this.updateInputsWithError);
var headers = (Object.keys(this.props.headers).length && this.props.headers) || options.headers || {};
var method = this.props.method && utils.ajax[this.props.method.toLowerCase()] ? this.props.method.toLowerCase() : 'post';
utils.ajax[method](this.props.url, this.mapModel(), this.props.contentType || options.contentType || 'json', headers)
.then(function (response) {
this.props.onSuccess(response);
this.props.onSubmitted();
}.bind(this))
.catch(this.failSubmit);
},
mapModel: function () {
return this.props.mapping ? this.props.mapping(this.model) : this.model;
},
// Goes through all registered components and
// updates the model values
updateModel: function () {
Object.keys(this.inputs).forEach(function (name) {
var component = this.inputs[name];
this.model[name] = component.state._value;
}.bind(this));
},
// Reset each key in the model to the original / initial value
resetModel: function () {
Object.keys(this.inputs).forEach(function (name) {
this.inputs[name].resetValue();
}.bind(this));
this.validateForm();
},
setInputValidationErrors: function (errors) {
Object.keys(this.inputs).forEach(function (name, index) {
var component = this.inputs[name];
var args = [{
_isValid: !(name in errors),
_serverError: errors[name]
}];
component.setState.apply(component, args);
}.bind(this));
},
// Go through errors from server and grab the components
// stored in the inputs map. Change their state to invalid
// and set the serverError message
updateInputsWithError: function (errors) {
Object.keys(errors).forEach(function (name, index) {
var component = this.inputs[name];
if (!component) {
throw new Error('You are trying to update an input that does not exists. Verify errors object with input names. ' + JSON.stringify(errors));
}
var args = [{
_isValid: false,
_serverError: errors[name]
}];
component.setState.apply(component, args);
}.bind(this));
},
failSubmit: function (errors) {
this.updateInputsWithError(errors);
this.setState({
isSubmitting: false
});
this.props.onError(errors);
this.props.onSubmitted();
},
// Traverse the children and children of children to find
// all inputs by checking the name prop. Maybe do a better
// check here
registerInputs: function (children) {
React.Children.forEach(children, function (child) {
if (child && child.props && child.props.name) {
child.props._attachToForm = this.attachToForm;
child.props._detachFromForm = this.detachFromForm;
child.props._validate = this.validate;
child.props._isFormDisabled = this.isFormDisabled;
child.props._isValidValue = this.runValidation;
}
if (child && child.props && child.props.children) {
this.registerInputs(child.props.children);
}
}.bind(this));
},
isFormDisabled: function () {
return this.props.disabled;
},
getCurrentValues: function () {
return Object.keys(this.inputs).reduce(function (data, name) {
var component = this.inputs[name];
data[name] = component.state._value;
return data;
}.bind(this), {});
},
setFormPristine: function (isPristine) {
var inputs = this.inputs;
var inputKeys = Object.keys(inputs);
// Iterate through each component and set it as pristine
// or "dirty".
inputKeys.forEach(function (name, index) {
var component = inputs[name];
component.setState({
_isPristine: isPristine
});
}.bind(this));
},
// Use the binded values and the actual input value to
// validate the input and set its state. Then check the
// state of the form itself
validate: function (component) {
// Trigger onChange
if (this.state.canChange) {
this.props.onChange(this.getCurrentValues());
}
var isValid = true;
if (component.validate) {
isValid = component.validate();
} else if (component.props.required || component._validations) {
isValid = this.runValidation(component);
}
// Run through the validations, split them up and call
// the validator IF there is a value or it is required
component.setState({
_isValid: isValid,
_serverError: null
}, this.validateForm);
},
// Checks validation on current value or a passed value
runValidation: function (component, value) {
var isValid = true;
value = arguments.length === 2 ? value : component.state._value;
if (component._validations.length && (component.props.required || value !== '')) {
component._validations.split(/\,(?![^{\[]*[}\]])/g).forEach(function (validation) {
var args = validation.split(':');
var validateMethod = args.shift();
args = args.map(function (arg) {
try {
return JSON.parse(arg);
} catch (e) {
return arg; // It is a string if it can not parse it
}
});
args = [value].concat(args);
if (!validationRules[validateMethod]) {
throw new Error('Formsy does not have the validation rule: ' + validateMethod);
}
if (!validationRules[validateMethod].apply(this.getCurrentValues(), args)) {
isValid = false;
}
}.bind(this));
}
if (typeof component.checkValidity === "function") {
// the component defines an explicit checkValidity function
isValid = component.checkValidity()
}
return isValid;
},
// Validate the form by going through all child input components
// and check their state
validateForm: function () {
var allIsValid = true;
var inputs = this.inputs;
var inputKeys = Object.keys(inputs);
// We need a callback as we are validating all inputs again. This will
// run when the last component has set its state
var onValidationComplete = function () {
inputKeys.forEach(function (name) {
if (!inputs[name].state._isValid) {
allIsValid = false;
}
}.bind(this));
this.setState({
isValid: allIsValid
});
if (allIsValid) {
this.props.onValid();
} else {
this.props.onInvalid();
}
// Tell the form that it can start to trigger change events
this.setState({
canChange: true
});
}.bind(this);
// Run validation again in case affected by other inputs. The
// last component validated will run the onValidationComplete callback
inputKeys.forEach(function (name, index) {
var component = inputs[name];
var isValid = this.runValidation(component);
component.setState({
_isValid: isValid,
_serverError: null
}, index === inputKeys.length - 1 ? onValidationComplete : null);
}.bind(this));
// If there are no inputs, set state where form is ready to trigger
// change event. New inputs might be added later
if (!inputKeys.length && this.isMounted()) {
this.setState({
canChange: true
});
}
},
// Method put on each input component to register
// itself to the form
attachToForm: function (component) {
this.inputs[component.props.name] = component;
this.model[component.props.name] = component.state._value;
this.validate(component);
},
// Method put on each input component to unregister
// itself from the form
detachFromForm: function (component) {
delete this.inputs[component.props.name];
delete this.model[component.props.name];
},
render: function () {
return React.DOM.form({
onSubmit: this.submit,
className: this.props.className
},
this.props.children
);
}
});
if (!global.exports && !global.module && (!global.define || !global.define.amd)) {
global.Formsy = Formsy;
}
module.exports = Formsy;
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./Mixin.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/Mixin.js","./utils.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/utils.js","./validationRules.js":"/Users/christianalfoni/Documents/dev/formsy-react/src/validationRules.js","react":"react"}],"/Users/christianalfoni/Documents/dev/formsy-react/src/Mixin.js":[function(require,module,exports){
module.exports = {
getInitialState: function () {
var value = 'value' in this.props ? this.props.value : '';
return {
_value: value,
_isValid: true,
_isPristine: true,
_pristineValue: value
};
},
componentWillMount: function () {
var configure = function () {
this.setValidations(this.props.validations, this.props.required);
this.props._attachToForm(this);
}.bind(this);
if (!this.props.name) {
throw new Error('Form Input requires a name property when used');
}
if (!this.props._attachToForm) {
return setTimeout(function () {
if (!this.isMounted()) return;
if (!this.props._attachToForm) {
throw new Error('Form Mixin requires component to be nested in a Form');
}
configure();
}.bind(this), 0);
}
configure();
},
// We have to make the validate method is kept when new props are added
componentWillReceiveProps: function (nextProps) {
nextProps._attachToForm = this.props._attachToForm;
nextProps._detachFromForm = this.props._detachFromForm;
nextProps._validate = this.props._validate;
this.setValidations(nextProps.validations, nextProps.required);
},
componentDidUpdate: function (prevProps, prevState) {
var isValueChanged = function () {
return (
this.props.value !== prevProps.value && (
this.state._value === prevProps.value ||
// Since undefined is converted to empty string we have to
// check that specifically
(this.state._value === '' && prevProps.value === undefined)
)
);
}.bind(this);
// If validations has changed or something outside changes
// the value, set the value again running a validation
if (prevProps.validations !== this.props.validations || isValueChanged()) {
var value = 'value' in this.props ? this.props.value : '';
this.setValue(value);
}
},
// Detach it when component unmounts
componentWillUnmount: function () {
this.props._detachFromForm(this);
},
setValidations: function (validations, required) {
// Add validations to the store itself as the props object can not be modified
this._validations = validations || '';
if (required) {
this._validations = validations ? validations + ',' : '';
this._validations += 'isValue';
}
},
// We validate after the value has been set
setValue: function (value) {
this.setState({
_value: value,
_isPristine: false
}, function () {
this.props._validate(this);
}.bind(this));
},
resetValue: function () {
this.setState({
_value: this.state._pristineValue,
_isPristine: true
}, function () {
this.props._validate(this);
});
},
getValue: function () {
return this.state._value;
},
hasValue: function () {
return this.state._value !== '';
},
getErrorMessage: function () {
return this.isValid() || this.showRequired() ? null : this.state._serverError || this.props.validationError;
},
isFormDisabled: function () {
return this.props._isFormDisabled();
},
isValid: function () {
return this.state._isValid;
},
isPristine: function () {
return this.state._isPristine;
},
isRequired: function () {
return !!this.props.required;
},
showRequired: function () {
return this.isRequired() && this.state._value === '';
},
showError: function () {
return !this.showRequired() && !this.state._isValid;
},
isValidValue: function (value) {
return this.props._isValidValue.call(null, this, value);
}
};
},{}],"/Users/christianalfoni/Documents/dev/formsy-react/src/utils.js":[function(require,module,exports){
var csrfTokenSelector = typeof document != 'undefined' ? document.querySelector('meta[name="csrf-token"]') : null;
var toURLEncoded = function (element, key, list) {
var list = list || [];
if (typeof (element) == 'object') {
for (var idx in element)
toURLEncoded(element[idx], key ? key + '[' + idx + ']' : idx, list);
} else {
list.push(key + '=' + encodeURIComponent(element));
}
return list.join('&');
};
var request = function (method, url, data, contentType, headers) {
var contentType = contentType === 'urlencoded' ? 'application/' + contentType.replace('urlencoded', 'x-www-form-urlencoded') : 'application/json';
data = contentType === 'application/json' ? JSON.stringify(data) : toURLEncoded(data);
return new Promise(function (resolve, reject) {
try {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('Content-Type', contentType);
if (!!csrfTokenSelector && !!csrfTokenSelector.content) {
xhr.setRequestHeader('X-CSRF-Token', csrfTokenSelector.content);
}
// Add passed headers
Object.keys(headers).forEach(function (header) {
xhr.setRequestHeader(header, headers[header]);
});
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
try {
var response = xhr.responseText ? JSON.parse(xhr.responseText) : null;
if (xhr.status >= 200 && xhr.status < 300) {
resolve(response);
} else {
reject(response);
}
} catch (e) {
reject(e);
}
}
};
xhr.send(data);
} catch (e) {
reject(e);
}
});
};
module.exports = {
arraysDiffer: function (arrayA, arrayB) {
var isDifferent = false;
if (arrayA.length !== arrayB.length) {
isDifferent = true;
} else {
arrayA.forEach(function (item, index) {
if (item !== arrayB[index]) {
isDifferent = true;
}
});
}
return isDifferent;
},
ajax: {
post: request.bind(null, 'POST'),
put: request.bind(null, 'PUT')
}
};
},{}],"/Users/christianalfoni/Documents/dev/formsy-react/src/validationRules.js":[function(require,module,exports){
module.exports = {
'isValue': function (value) {
return value !== '';
},
'isEmail': function (value) {
return value.match(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i);
},
'isTrue': function (value) {
return value === true;
},
'isNumeric': function (value) {
if (typeof value === 'number') {
return true;
} else {
var matchResults = value.match(/[-+]?(\d*[.])?\d+/);
if (!! matchResults) {
return matchResults[0] == value;
} else {
return false;
}
}
},
'isAlpha': function (value) {
return value.match(/^[a-zA-Z]+$/);
},
'isWords': function (value) {
return value.match(/^[a-zA-Z\s]+$/);
},
'isSpecialWords': function (value) {
return value.match(/^[a-zA-Z\s\u00C0-\u017F]+$/);
},
isLength: function (value, min, max) {
if (max !== undefined) {
return value.length >= min && value.length <= max;
}
return value.length >= min;
},
equals: function (value, eql) {
return value == eql;
},
equalsField: function (value, field) {
return value == this[field];
}
};
},{}]},{},["./src/main.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvY2hyaXN0aWFuYWxmb25pL0RvY3VtZW50cy9kZXYvZm9ybXN5LXJlYWN0L3NyYy9tYWluLmpzIiwiL1VzZXJzL2NocmlzdGlhbmFsZm9uaS9Eb2N1bWVudHMvZGV2L2Zvcm1zeS1yZWFjdC9zcmMvTWl4aW4uanMiLCIvVXNlcnMvY2hyaXN0aWFuYWxmb25pL0RvY3VtZW50cy9kZXYvZm9ybXN5LXJlYWN0L3NyYy91dGlscy5qcyIsIi9Vc2Vycy9jaHJpc3RpYW5hbGZvbmkvRG9jdW1lbnRzL2Rldi9mb3Jtc3ktcmVhY3Qvc3JjL3ZhbGlkYXRpb25SdWxlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdEQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7O0FBRWpCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztBQUVyQixNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsYUFBYSxFQUFFO0VBQ3pDLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDMUIsQ0FBQyxDQUFDOztBQUVGLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDL0MsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLE1BQU07RUFDbEQsZUFBZSxFQUFFLFlBQVk7SUFDM0IsT0FBTztNQUNMLE9BQU8sRUFBRSxJQUFJO01BQ2IsWUFBWSxFQUFFLEtBQUs7TUFDbkIsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQztHQUNIO0VBQ0QsZUFBZSxFQUFFLFlBQVk7SUFDM0IsT0FBTztNQUNMLE9BQU8sRUFBRSxFQUFFO01BQ1gsU0FBUyxFQUFFLFlBQVksRUFBRTtNQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFO01BQ3ZCLFFBQVEsRUFBRSxZQUFZLEVBQUU7TUFDeEIsYUFBYSxFQUFFLFlBQVksRUFBRTtNQUM3QixlQUFlLEVBQUUsWUFBWSxFQUFFO01BQy9CLFdBQVcsRUFBRSxZQUFZLEVBQUU7TUFDM0IsT0FBTyxFQUFFLFlBQVksRUFBRTtNQUN2QixTQUFTLEVBQUUsWUFBWSxFQUFFO01BQ3pCLFFBQVEsRUFBRSxZQUFZLEVBQUU7S0FDekIsQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBOztFQUVFLGtCQUFrQixFQUFFLFlBQVk7SUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLEdBQUc7O0VBRUQsaUJBQWlCLEVBQUUsWUFBWTtJQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDeEIsR0FBRzs7RUFFRCxtQkFBbUIsRUFBRSxZQUFZO0FBQ25DLElBQUksSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0M7QUFDQTs7QUFFQSxJQUFJLFVBQVUsQ0FBQyxZQUFZO0FBQzNCO0FBQ0E7O0FBRUEsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTs7QUFFNUIsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7O09BRTFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtVQUM5QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3JFLFNBQVM7O1FBRUQsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRTtVQUMvQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDOUIsU0FBUzs7QUFFVCxPQUFPOztLQUVGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDs7RUFFRSxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDM0IsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0I7QUFDQTtBQUNBOztBQUVBLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQztBQUNBO0FBQ0E7O0lBRUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO01BQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztNQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7TUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7TUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQzNILE9BQU87QUFDYixLQUFLOztJQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDO01BQ1osWUFBWSxFQUFFLElBQUk7QUFDeEIsS0FBSyxDQUFDLENBQUM7O0FBRVAsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQzs7QUFFdEYsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7O0lBRXRHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDekgsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUUsT0FBTyxDQUFDO09BQ2xILElBQUksQ0FBQyxVQUFVLFFBQVEsRUFBRTtRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO09BQzFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QixHQUFHOztFQUVELFFBQVEsRUFBRSxZQUFZO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUUsR0FBRztBQUNIO0FBQ0E7O0VBRUUsV0FBVyxFQUFFLFlBQVk7SUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO01BQy9DLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUMzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSDs7RUFFRSxVQUFVLEVBQUUsWUFBWTtJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7TUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNoQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hCLEdBQUc7O0VBRUQsd0JBQXdCLEVBQUUsVUFBVSxNQUFNLEVBQUU7S0FDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRTtNQUN2RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xDLElBQUksSUFBSSxHQUFHLENBQUM7UUFDVixRQUFRLEVBQUUsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDO1FBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO09BQzNCLENBQUMsQ0FBQztNQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0VBRUUscUJBQXFCLEVBQUUsVUFBVSxNQUFNLEVBQUU7SUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3ZELE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7TUFFbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsaUdBQWlHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BKLE9BQU87O01BRUQsSUFBSSxJQUFJLEdBQUcsQ0FBQztRQUNWLFFBQVEsRUFBRSxLQUFLO1FBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7T0FDM0IsQ0FBQyxDQUFDO01BQ0gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEIsR0FBRzs7RUFFRCxVQUFVLEVBQUUsVUFBVSxNQUFNLEVBQUU7SUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDWixZQUFZLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0VBRUUsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFO0FBQ3RDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFOztNQUVoRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzVDLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDOUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsRCxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN2RCxPQUFPOztNQUVELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELE9BQU87O0tBRUYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsQixHQUFHOztFQUVELGNBQWMsRUFBRSxZQUFZO0lBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDL0IsR0FBRzs7RUFFRCxnQkFBZ0IsRUFBRSxZQUFZO0lBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLElBQUksRUFBRTtNQUMzRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztNQUNwQyxPQUFPLElBQUksQ0FBQztLQUNiLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLEdBQUc7O0VBRUQsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFO0lBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDO0FBQ0E7O0lBRUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUU7TUFDdkMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdCLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakIsV0FBVyxFQUFFLFVBQVU7T0FDeEIsQ0FBQyxDQUFDO0tBQ0osQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLEVBQUUsUUFBUSxFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQ2pDOztJQUVJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7TUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUNuRCxLQUFLOztJQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7TUFDdEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUNoQyxNQUFNLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRTtNQUM3RCxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxLQUFLO0FBQ0w7QUFDQTs7SUFFSSxTQUFTLENBQUMsUUFBUSxDQUFDO01BQ2pCLFFBQVEsRUFBRSxPQUFPO01BQ2pCLFlBQVksRUFBRSxJQUFJO0FBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7O0FBRTFCLEdBQUc7QUFDSDs7QUFFQSxFQUFFLGFBQWEsRUFBRSxVQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUU7O0FBRTdDLElBQUksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDOztJQUVuQixLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2hFLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFO01BQy9FLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsVUFBVSxFQUFFO1FBQ2hGLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFO1VBQzdCLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7V0FDeEIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sR0FBRyxDQUFDO1dBQ1o7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsRUFBRTtVQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7VUFDekUsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUNqQjtPQUNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDZjtBQUNMLElBQUksSUFBSSxPQUFPLFNBQVMsQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFOztNQUVqRCxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsRUFBRTtBQUN6QyxLQUFLOztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBOztFQUVFLFlBQVksRUFBRSxZQUFZO0lBQ3hCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCLElBQUksSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QztBQUNBOztJQUVJLElBQUksb0JBQW9CLEdBQUcsWUFBWTtNQUNyQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtVQUNoQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO0FBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztNQUVkLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDWixPQUFPLEVBQUUsVUFBVTtBQUMzQixPQUFPLENBQUMsQ0FBQzs7TUFFSCxJQUFJLFVBQVUsRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7T0FDdEIsTUFBTTtRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDL0IsT0FBTztBQUNQOztNQUVNLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDWixTQUFTLEVBQUUsSUFBSTtBQUN2QixPQUFPLENBQUMsQ0FBQzs7QUFFVCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7O0lBRUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUU7TUFDdkMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7TUFDNUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixRQUFRLEVBQUUsT0FBTztRQUNqQixZQUFZLEVBQUUsSUFBSTtPQUNuQixFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2RSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFDQTs7SUFFSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7TUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLFNBQVMsRUFBRSxJQUFJO09BQ2hCLENBQUMsQ0FBQztLQUNKO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0VBRUUsWUFBWSxFQUFFLFVBQVUsU0FBUyxFQUFFO0lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0E7O0VBRUUsY0FBYyxFQUFFLFVBQVUsU0FBUyxFQUFFO0lBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQ3pDO0FBQ0gsRUFBRSxNQUFNLEVBQUUsWUFBWTs7SUFFbEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07UUFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztPQUNoQztNQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUN6QixLQUFLLENBQUM7O0dBRUg7QUFDSCxDQUFDLENBQUMsQ0FBQzs7QUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtFQUMvRSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixDQUFDOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOztBQUV4Qjs7Ozs7QUNqWEEsTUFBTSxDQUFDLE9BQU8sR0FBRztFQUNmLGVBQWUsRUFBRSxZQUFZO0lBQzNCLElBQUksS0FBSyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMxRCxPQUFPO01BQ0wsTUFBTSxFQUFFLEtBQUs7TUFDYixRQUFRLEVBQUUsSUFBSTtNQUNkLFdBQVcsRUFBRSxJQUFJO01BQ2pCLGNBQWMsRUFBRSxLQUFLO0tBQ3RCLENBQUM7R0FDSDtBQUNILEVBQUUsa0JBQWtCLEVBQUUsWUFBWTs7SUFFOUIsSUFBSSxTQUFTLEdBQUcsWUFBWTtNQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7TUFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFYixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7TUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUs7O0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO01BQzdCLE9BQU8sVUFBVSxDQUFDLFlBQVk7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtVQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDekU7UUFDRCxTQUFTLEVBQUUsQ0FBQztPQUNiLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2xCO0FBQ0wsSUFBSSxTQUFTLEVBQUUsQ0FBQzs7QUFFaEIsR0FBRztBQUNIOztFQUVFLHlCQUF5QixFQUFFLFVBQVUsU0FBUyxFQUFFO0lBQzlDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDbkQsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUN2RCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkUsR0FBRzs7QUFFSCxFQUFFLGtCQUFrQixFQUFFLFVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRTs7QUFFdEQsSUFBSSxJQUFJLGNBQWMsR0FBRyxZQUFZOztNQUUvQjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO0FBQzVDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEtBQUs7QUFDL0M7QUFDQTs7V0FFVyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7U0FDNUQ7QUFDVCxRQUFROztBQUVSLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0lBRUksSUFBSSxTQUFTLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLGNBQWMsRUFBRSxFQUFFO01BQ3hFLElBQUksS0FBSyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztNQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCO0FBQ0wsR0FBRztBQUNIOztFQUVFLG9CQUFvQixFQUFFLFlBQVk7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsR0FBRzs7QUFFSCxFQUFFLGNBQWMsRUFBRSxVQUFVLFdBQVcsRUFBRSxRQUFRLEVBQUU7QUFDbkQ7O0FBRUEsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUM7O0lBRXRDLElBQUksUUFBUSxFQUFFO01BQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7TUFDekQsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUM7QUFDckMsS0FBSzs7QUFFTCxHQUFHO0FBQ0g7O0VBRUUsUUFBUSxFQUFFLFVBQVUsS0FBSyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDWixNQUFNLEVBQUUsS0FBSztNQUNiLFdBQVcsRUFBRSxLQUFLO0tBQ25CLEVBQUUsWUFBWTtNQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7R0FDZjtFQUNELFVBQVUsRUFBRSxZQUFZO0lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUM7TUFDWixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO01BQ2pDLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLEVBQUUsWUFBWTtNQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzVCLENBQUMsQ0FBQztHQUNKO0VBQ0QsUUFBUSxFQUFFLFlBQVk7SUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztHQUMxQjtFQUNELFFBQVEsRUFBRSxZQUFZO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0dBQ2pDO0VBQ0QsZUFBZSxFQUFFLFlBQVk7SUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztHQUM3RztFQUNELGNBQWMsRUFBRSxZQUFZO0lBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztHQUNyQztFQUNELE9BQU8sRUFBRSxZQUFZO0lBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7R0FDNUI7RUFDRCxVQUFVLEVBQUUsWUFBWTtJQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0dBQy9CO0VBQ0QsVUFBVSxFQUFFLFlBQVk7SUFDdEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7R0FDOUI7RUFDRCxZQUFZLEVBQUUsWUFBWTtJQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7R0FDdEQ7RUFDRCxTQUFTLEVBQUUsWUFBWTtJQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7R0FDckQ7RUFDRCxZQUFZLEVBQUUsVUFBVSxLQUFLLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztHQUN6RDtBQUNILENBQUMsQ0FBQzs7QUFFRjs7O0FDdElBLElBQUksaUJBQWlCLEdBQUcsT0FBTyxRQUFRLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUM7O0FBRWxILElBQUksWUFBWSxHQUFHLFVBQVUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7RUFDL0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztFQUN0QixJQUFJLFFBQVEsT0FBTyxDQUFDLElBQUksUUFBUSxFQUFFO0lBQ2hDLEtBQUssSUFBSSxHQUFHLElBQUksT0FBTztNQUNyQixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ3ZFLE1BQU07SUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztHQUNwRDtFQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUM7O0FBRUYsSUFBSSxPQUFPLEdBQUcsVUFBVSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFOztFQUUvRCxJQUFJLFdBQVcsR0FBRyxXQUFXLEtBQUssWUFBWSxHQUFHLGNBQWMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQ3BKLEVBQUUsSUFBSSxHQUFHLFdBQVcsS0FBSyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7RUFFdEYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDNUMsSUFBSTtNQUNGLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7TUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN6RCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7O01BRWxELElBQUksQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7UUFDdEQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4RSxPQUFPO0FBQ1A7O01BRU0sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUU7UUFDN0MsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RCxPQUFPLENBQUMsQ0FBQzs7TUFFSCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsWUFBWTtBQUMzQyxRQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7O1VBRXhCLElBQUk7WUFDRixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN0RSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2NBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNuQixNQUFNO2NBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xCO1dBQ0YsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixXQUFXOztTQUVGO09BQ0YsQ0FBQztNQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEIsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNYO0dBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDOztBQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUc7RUFDZixZQUFZLEVBQUUsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQ3RDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN4QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtNQUNuQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQ3BCLE1BQU07TUFDTCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNwQyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDMUIsV0FBVyxHQUFHLElBQUksQ0FBQztTQUNwQjtPQUNGLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxXQUFXLENBQUM7R0FDcEI7RUFDRCxJQUFJLEVBQUU7SUFDSixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2hDLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7R0FDL0I7QUFDSCxDQUFDLENBQUM7O0FBRUY7OztBQzdFQSxNQUFNLENBQUMsT0FBTyxHQUFHO0VBQ2YsU0FBUyxFQUFFLFVBQVUsS0FBSyxFQUFFO0lBQzFCLE9BQU8sS0FBSyxLQUFLLEVBQUUsQ0FBQztHQUNyQjtFQUNELFNBQVMsRUFBRSxVQUFVLEtBQUssRUFBRTtJQUMxQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMseTRCQUF5NEIsQ0FBQyxDQUFDO0dBQy81QjtFQUNELFFBQVEsRUFBRSxVQUFVLEtBQUssRUFBRTtJQUN6QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUM7R0FDdkI7RUFDRCxXQUFXLEVBQUUsVUFBVSxLQUFLLEVBQUU7SUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0IsT0FBTyxJQUFJLENBQUM7S0FDYixNQUFNO01BQ0wsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO01BQ3BELElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRTtRQUNuQixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7T0FDakMsTUFBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjtHQUNGO0VBQ0QsU0FBUyxFQUFFLFVBQVUsS0FBSyxFQUFFO0lBQzFCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztHQUNuQztFQUNELFNBQVMsRUFBRSxVQUFVLEtBQUssRUFBRTtJQUMxQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7R0FDckM7RUFDRCxnQkFBZ0IsRUFBRSxVQUFVLEtBQUssRUFBRTtJQUNqQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztHQUNsRDtFQUNELFFBQVEsRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtNQUNyQixPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO0tBQ25EO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztHQUM1QjtFQUNELE1BQU0sRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDNUIsT0FBTyxLQUFLLElBQUksR0FBRyxDQUFDO0dBQ3JCO0VBQ0QsV0FBVyxFQUFFLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUNuQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDN0I7QUFDSCxDQUFDLENBQUM7O0FBRUYiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwidmFyIFJlYWN0ID0gZ2xvYmFsLlJlYWN0IHx8IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgRm9ybXN5ID0ge307XG52YXIgdmFsaWRhdGlvblJ1bGVzID0gcmVxdWlyZSgnLi92YWxpZGF0aW9uUnVsZXMuanMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMuanMnKTtcbnZhciBNaXhpbiA9IHJlcXVpcmUoJy4vTWl4aW4uanMnKTtcbnZhciBvcHRpb25zID0ge307XG5cbkZvcm1zeS5NaXhpbiA9IE1peGluO1xuXG5Gb3Jtc3kuZGVmYXVsdHMgPSBmdW5jdGlvbiAocGFzc2VkT3B0aW9ucykge1xuICBvcHRpb25zID0gcGFzc2VkT3B0aW9ucztcbn07XG5cbkZvcm1zeS5hZGRWYWxpZGF0aW9uUnVsZSA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gIHZhbGlkYXRpb25SdWxlc1tuYW1lXSA9IGZ1bmM7XG59O1xuXG5Gb3Jtc3kuRm9ybSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtkaXNwbGF5TmFtZTogXCJGb3JtXCIsXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgIGNhbkNoYW5nZTogZmFsc2VcbiAgICB9O1xuICB9LFxuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczoge30sXG4gICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblN1Ym1pdDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblZhbGlkU3VibWl0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uSW52YWxpZFN1Ym1pdDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblN1Ym1pdHRlZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvblZhbGlkOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uSW52YWxpZDogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKCkge31cbiAgICB9O1xuICB9LFxuXG4gIC8vIEFkZCBhIG1hcCB0byBzdG9yZSB0aGUgaW5wdXRzIG9mIHRoZSBmb3JtLCBhIG1vZGVsIHRvIHN0b3JlXG4gIC8vIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gYW5kIHJlZ2lzdGVyIGNoaWxkIGlucHV0c1xuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlucHV0cyA9IHt9O1xuICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB0aGlzLnJlZ2lzdGVySW5wdXRzKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZvcm0oKTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsVXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXRzKTtcblxuICAgIC8vIFRoZSB1cGRhdGVkIGNoaWxkcmVuIGFycmF5IGlzIG5vdCBhdmFpbGFibGUgaGVyZSBmb3Igc29tZSByZWFzb24sXG4gICAgLy8gd2UgbmVlZCB0byB3YWl0IGZvciBuZXh0IGV2ZW50IGxvb3BcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblxuICAgICAgLy8gVGhlIGNvbXBvbmVudCBtaWdodCBoYXZlIGJlZW4gdW5tb3VudGVkIG9uIGFuXG4gICAgICAvLyB1cGRhdGVcbiAgICAgIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcklucHV0cyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcblxuICAgICAgIGlmICh0aGlzLnByb3BzLnZhbGlkYXRpb25FcnJvcnMpIHtcbiAgICAgICAgICB0aGlzLnNldElucHV0VmFsaWRhdGlvbkVycm9ycyh0aGlzLnByb3BzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5ld0lucHV0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXRzKTtcbiAgICAgICAgaWYgKHV0aWxzLmFycmF5c0RpZmZlcihpbnB1dEtleXMsIG5ld0lucHV0S2V5cykpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybSgpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gIH0sXG5cbiAgLy8gVXBkYXRlIG1vZGVsLCBzdWJtaXQgdG8gdXJsIHByb3AgYW5kIHNlbmQgdGhlIG1vZGVsXG4gIHN1Ym1pdDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIFRyaWdnZXIgZm9ybSBhcyBub3QgcHJpc3RpbmUuXG4gICAgLy8gSWYgYW55IGlucHV0cyBoYXZlIG5vdCBiZWVuIHRvdWNoZWQgeWV0IHRoaXMgd2lsbCBtYWtlIHRoZW0gZGlydHlcbiAgICAvLyBzbyB2YWxpZGF0aW9uIGJlY29tZXMgdmlzaWJsZSAoaWYgYmFzZWQgb24gaXNQcmlzdGluZSlcbiAgICB0aGlzLnNldEZvcm1QcmlzdGluZShmYWxzZSk7XG5cbiAgICAvLyBUbyBzdXBwb3J0IHVzZSBjYXNlcyB3aGVyZSBubyBhc3luYyBvciByZXF1ZXN0IG9wZXJhdGlvbiBpcyBuZWVkZWQuXG4gICAgLy8gVGhlIFwib25TdWJtaXRcIiBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgbW9kZWwgZS5nLiB7ZmllbGROYW1lOiBcIm15VmFsdWVcIn0sXG4gICAgLy8gaWYgd2FudGluZyB0byByZXNldCB0aGUgZW50aXJlIGZvcm0gdG8gb3JpZ2luYWwgc3RhdGUsIHRoZSBzZWNvbmQgcGFyYW0gaXMgYSBjYWxsYmFjayBmb3IgdGhpcy5cbiAgICBpZiAoIXRoaXMucHJvcHMudXJsKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XG4gICAgICB2YXIgbW9kZWwgPSB0aGlzLm1hcE1vZGVsKCk7XG4gICAgICB0aGlzLnByb3BzLm9uU3VibWl0KG1vZGVsLCB0aGlzLnJlc2V0TW9kZWwsIHRoaXMudXBkYXRlSW5wdXRzV2l0aEVycm9yKTtcbiAgICAgIHRoaXMuc3RhdGUuaXNWYWxpZCA/IHRoaXMucHJvcHMub25WYWxpZFN1Ym1pdChtb2RlbCwgdGhpcy5yZXNldE1vZGVsKSA6IHRoaXMucHJvcHMub25JbnZhbGlkU3VibWl0KG1vZGVsLCB0aGlzLnJlc2V0TW9kZWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzU3VibWl0dGluZzogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5vblN1Ym1pdCh0aGlzLm1hcE1vZGVsKCksIHRoaXMucmVzZXRNb2RlbCwgdGhpcy51cGRhdGVJbnB1dHNXaXRoRXJyb3IpO1xuXG4gICAgdmFyIGhlYWRlcnMgPSAoT2JqZWN0LmtleXModGhpcy5wcm9wcy5oZWFkZXJzKS5sZW5ndGggJiYgdGhpcy5wcm9wcy5oZWFkZXJzKSB8fCBvcHRpb25zLmhlYWRlcnMgfHwge307XG5cbiAgICB2YXIgbWV0aG9kID0gdGhpcy5wcm9wcy5tZXRob2QgJiYgdXRpbHMuYWpheFt0aGlzLnByb3BzLm1ldGhvZC50b0xvd2VyQ2FzZSgpXSA/IHRoaXMucHJvcHMubWV0aG9kLnRvTG93ZXJDYXNlKCkgOiAncG9zdCc7XG4gICAgdXRpbHMuYWpheFttZXRob2RdKHRoaXMucHJvcHMudXJsLCB0aGlzLm1hcE1vZGVsKCksIHRoaXMucHJvcHMuY29udGVudFR5cGUgfHwgb3B0aW9ucy5jb250ZW50VHlwZSB8fCAnanNvbicsIGhlYWRlcnMpXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblN1Y2Nlc3MocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnByb3BzLm9uU3VibWl0dGVkKCk7XG4gICAgICB9LmJpbmQodGhpcykpXG4gICAgICAuY2F0Y2godGhpcy5mYWlsU3VibWl0KTtcbiAgfSxcblxuICBtYXBNb2RlbDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1hcHBpbmcgPyB0aGlzLnByb3BzLm1hcHBpbmcodGhpcy5tb2RlbCkgOiB0aGlzLm1vZGVsO1xuICB9LFxuXG4gIC8vIEdvZXMgdGhyb3VnaCBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFuZFxuICAvLyB1cGRhdGVzIHRoZSBtb2RlbCB2YWx1ZXNcbiAgdXBkYXRlTW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmlucHV0cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuaW5wdXRzW25hbWVdO1xuICAgICAgdGhpcy5tb2RlbFtuYW1lXSA9IGNvbXBvbmVudC5zdGF0ZS5fdmFsdWU7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfSxcblxuICAvLyBSZXNldCBlYWNoIGtleSBpbiB0aGUgbW9kZWwgdG8gdGhlIG9yaWdpbmFsIC8gaW5pdGlhbCB2YWx1ZVxuICByZXNldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5pbnB1dHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHRoaXMuaW5wdXRzW25hbWVdLnJlc2V0VmFsdWUoKTtcbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gIH0sXG5cbiAgc2V0SW5wdXRWYWxpZGF0aW9uRXJyb3JzOiBmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgIE9iamVjdC5rZXlzKHRoaXMuaW5wdXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHRoaXMuaW5wdXRzW25hbWVdO1xuICAgICAgdmFyIGFyZ3MgPSBbe1xuICAgICAgICBfaXNWYWxpZDogIShuYW1lIGluIGVycm9ycyksXG4gICAgICAgIF9zZXJ2ZXJFcnJvcjogZXJyb3JzW25hbWVdXG4gICAgICB9XTtcbiAgICAgIGNvbXBvbmVudC5zZXRTdGF0ZS5hcHBseShjb21wb25lbnQsIGFyZ3MpO1xuICAgIH0uYmluZCh0aGlzKSk7ICAgXG4gIH0sXG5cbiAgLy8gR28gdGhyb3VnaCBlcnJvcnMgZnJvbSBzZXJ2ZXIgYW5kIGdyYWIgdGhlIGNvbXBvbmVudHNcbiAgLy8gc3RvcmVkIGluIHRoZSBpbnB1dHMgbWFwLiBDaGFuZ2UgdGhlaXIgc3RhdGUgdG8gaW52YWxpZFxuICAvLyBhbmQgc2V0IHRoZSBzZXJ2ZXJFcnJvciBtZXNzYWdlXG4gIHVwZGF0ZUlucHV0c1dpdGhFcnJvcjogZnVuY3Rpb24gKGVycm9ycykge1xuICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmlucHV0c1tuYW1lXTtcblxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHRyeWluZyB0byB1cGRhdGUgYW4gaW5wdXQgdGhhdCBkb2VzIG5vdCBleGlzdHMuIFZlcmlmeSBlcnJvcnMgb2JqZWN0IHdpdGggaW5wdXQgbmFtZXMuICcgKyBKU09OLnN0cmluZ2lmeShlcnJvcnMpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFyZ3MgPSBbe1xuICAgICAgICBfaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIF9zZXJ2ZXJFcnJvcjogZXJyb3JzW25hbWVdXG4gICAgICB9XTtcbiAgICAgIGNvbXBvbmVudC5zZXRTdGF0ZS5hcHBseShjb21wb25lbnQsIGFyZ3MpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0sXG5cbiAgZmFpbFN1Ym1pdDogZnVuY3Rpb24gKGVycm9ycykge1xuICAgIHRoaXMudXBkYXRlSW5wdXRzV2l0aEVycm9yKGVycm9ycyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc1N1Ym1pdHRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5vbkVycm9yKGVycm9ycyk7XG4gICAgdGhpcy5wcm9wcy5vblN1Ym1pdHRlZCgpO1xuICB9LFxuXG4gIC8vIFRyYXZlcnNlIHRoZSBjaGlsZHJlbiBhbmQgY2hpbGRyZW4gb2YgY2hpbGRyZW4gdG8gZmluZFxuICAvLyBhbGwgaW5wdXRzIGJ5IGNoZWNraW5nIHRoZSBuYW1lIHByb3AuIE1heWJlIGRvIGEgYmV0dGVyXG4gIC8vIGNoZWNrIGhlcmVcbiAgcmVnaXN0ZXJJbnB1dHM6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuXG4gICAgICBpZiAoY2hpbGQgJiYgY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHMubmFtZSkge1xuICAgICAgICBjaGlsZC5wcm9wcy5fYXR0YWNoVG9Gb3JtID0gdGhpcy5hdHRhY2hUb0Zvcm07XG4gICAgICAgIGNoaWxkLnByb3BzLl9kZXRhY2hGcm9tRm9ybSA9IHRoaXMuZGV0YWNoRnJvbUZvcm07XG4gICAgICAgIGNoaWxkLnByb3BzLl92YWxpZGF0ZSA9IHRoaXMudmFsaWRhdGU7XG4gICAgICAgIGNoaWxkLnByb3BzLl9pc0Zvcm1EaXNhYmxlZCA9IHRoaXMuaXNGb3JtRGlzYWJsZWQ7XG4gICAgICAgIGNoaWxkLnByb3BzLl9pc1ZhbGlkVmFsdWUgPSB0aGlzLnJ1blZhbGlkYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5wcm9wcyAmJiBjaGlsZC5wcm9wcy5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnJlZ2lzdGVySW5wdXRzKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0sXG5cbiAgaXNGb3JtRGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXNhYmxlZDtcbiAgfSxcblxuICBnZXRDdXJyZW50VmFsdWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5wdXRzKS5yZWR1Y2UoZnVuY3Rpb24gKGRhdGEsIG5hbWUpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmlucHV0c1tuYW1lXTtcbiAgICAgIGRhdGFbbmFtZV0gPSBjb21wb25lbnQuc3RhdGUuX3ZhbHVlO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfS5iaW5kKHRoaXMpLCB7fSk7XG4gIH0sXG5cbiAgc2V0Rm9ybVByaXN0aW5lOiBmdW5jdGlvbiAoaXNQcmlzdGluZSkge1xuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcbiAgICB2YXIgaW5wdXRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRzKTtcblxuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGNvbXBvbmVudCBhbmQgc2V0IGl0IGFzIHByaXN0aW5lXG4gICAgLy8gb3IgXCJkaXJ0eVwiLlxuICAgIGlucHV0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGlucHV0c1tuYW1lXTtcbiAgICAgIGNvbXBvbmVudC5zZXRTdGF0ZSh7XG4gICAgICAgIF9pc1ByaXN0aW5lOiBpc1ByaXN0aW5lXG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LFxuXG4gIC8vIFVzZSB0aGUgYmluZGVkIHZhbHVlcyBhbmQgdGhlIGFjdHVhbCBpbnB1dCB2YWx1ZSB0b1xuICAvLyB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIHNldCBpdHMgc3RhdGUuIFRoZW4gY2hlY2sgdGhlXG4gIC8vIHN0YXRlIG9mIHRoZSBmb3JtIGl0c2VsZlxuICB2YWxpZGF0ZTogZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuXG4gICAgLy8gVHJpZ2dlciBvbkNoYW5nZVxuICAgIGlmICh0aGlzLnN0YXRlLmNhbkNoYW5nZSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLmdldEN1cnJlbnRWYWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgdmFyIGlzVmFsaWQgPSB0cnVlO1xuICAgIGlmIChjb21wb25lbnQudmFsaWRhdGUpIHtcbiAgICAgIGlzVmFsaWQgPSBjb21wb25lbnQudmFsaWRhdGUoKTtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudC5wcm9wcy5yZXF1aXJlZCB8fCBjb21wb25lbnQuX3ZhbGlkYXRpb25zKSB7XG4gICAgICBpc1ZhbGlkID0gdGhpcy5ydW5WYWxpZGF0aW9uKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLy8gUnVuIHRocm91Z2ggdGhlIHZhbGlkYXRpb25zLCBzcGxpdCB0aGVtIHVwIGFuZCBjYWxsXG4gICAgLy8gdGhlIHZhbGlkYXRvciBJRiB0aGVyZSBpcyBhIHZhbHVlIG9yIGl0IGlzIHJlcXVpcmVkXG4gICAgY29tcG9uZW50LnNldFN0YXRlKHtcbiAgICAgIF9pc1ZhbGlkOiBpc1ZhbGlkLFxuICAgICAgX3NlcnZlckVycm9yOiBudWxsXG4gICAgfSwgdGhpcy52YWxpZGF0ZUZvcm0pO1xuXG4gIH0sXG5cbiAgLy8gQ2hlY2tzIHZhbGlkYXRpb24gb24gY3VycmVudCB2YWx1ZSBvciBhIHBhc3NlZCB2YWx1ZVxuICBydW5WYWxpZGF0aW9uOiBmdW5jdGlvbiAoY29tcG9uZW50LCB2YWx1ZSkge1xuXG4gICAgdmFyIGlzVmFsaWQgPSB0cnVlO1xuICAgIFxuICAgIHZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IHZhbHVlIDogY29tcG9uZW50LnN0YXRlLl92YWx1ZTtcbiAgICBpZiAoY29tcG9uZW50Ll92YWxpZGF0aW9ucy5sZW5ndGggJiYgKGNvbXBvbmVudC5wcm9wcy5yZXF1aXJlZCB8fCB2YWx1ZSAhPT0gJycpKSB7XG4gICAgICBjb21wb25lbnQuX3ZhbGlkYXRpb25zLnNwbGl0KC9cXCwoPyFbXntcXFtdKlt9XFxdXSkvZykuZm9yRWFjaChmdW5jdGlvbiAodmFsaWRhdGlvbikge1xuICAgICAgICB2YXIgYXJncyA9IHZhbGlkYXRpb24uc3BsaXQoJzonKTtcbiAgICAgICAgdmFyIHZhbGlkYXRlTWV0aG9kID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShhcmcpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7IC8vIEl0IGlzIGEgc3RyaW5nIGlmIGl0IGNhbiBub3QgcGFyc2UgaXRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhcmdzID0gW3ZhbHVlXS5jb25jYXQoYXJncyk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvblJ1bGVzW3ZhbGlkYXRlTWV0aG9kXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybXN5IGRvZXMgbm90IGhhdmUgdGhlIHZhbGlkYXRpb24gcnVsZTogJyArIHZhbGlkYXRlTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRpb25SdWxlc1t2YWxpZGF0ZU1ldGhvZF0uYXBwbHkodGhpcy5nZXRDdXJyZW50VmFsdWVzKCksIGFyZ3MpKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5jaGVja1ZhbGlkaXR5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIHRoZSBjb21wb25lbnQgZGVmaW5lcyBhbiBleHBsaWNpdCBjaGVja1ZhbGlkaXR5IGZ1bmN0aW9uXG4gICAgICBpc1ZhbGlkID0gY29tcG9uZW50LmNoZWNrVmFsaWRpdHkoKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9LFxuXG4gIC8vIFZhbGlkYXRlIHRoZSBmb3JtIGJ5IGdvaW5nIHRocm91Z2ggYWxsIGNoaWxkIGlucHV0IGNvbXBvbmVudHNcbiAgLy8gYW5kIGNoZWNrIHRoZWlyIHN0YXRlXG4gIHZhbGlkYXRlRm9ybTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBhbGxJc1ZhbGlkID0gdHJ1ZTtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XG4gICAgdmFyIGlucHV0S2V5cyA9IE9iamVjdC5rZXlzKGlucHV0cyk7XG5cbiAgICAvLyBXZSBuZWVkIGEgY2FsbGJhY2sgYXMgd2UgYXJlIHZhbGlkYXRpbmcgYWxsIGlucHV0cyBhZ2Fpbi4gVGhpcyB3aWxsXG4gICAgLy8gcnVuIHdoZW4gdGhlIGxhc3QgY29tcG9uZW50IGhhcyBzZXQgaXRzIHN0YXRlXG4gICAgdmFyIG9uVmFsaWRhdGlvbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXRLZXlzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCFpbnB1dHNbbmFtZV0uc3RhdGUuX2lzVmFsaWQpIHtcbiAgICAgICAgICBhbGxJc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1ZhbGlkOiBhbGxJc1ZhbGlkXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFsbElzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblZhbGlkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb3BzLm9uSW52YWxpZCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBUZWxsIHRoZSBmb3JtIHRoYXQgaXQgY2FuIHN0YXJ0IHRvIHRyaWdnZXIgY2hhbmdlIGV2ZW50c1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNhbkNoYW5nZTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICB9LmJpbmQodGhpcyk7XG5cbiAgICAvLyBSdW4gdmFsaWRhdGlvbiBhZ2FpbiBpbiBjYXNlIGFmZmVjdGVkIGJ5IG90aGVyIGlucHV0cy4gVGhlXG4gICAgLy8gbGFzdCBjb21wb25lbnQgdmFsaWRhdGVkIHdpbGwgcnVuIHRoZSBvblZhbGlkYXRpb25Db21wbGV0ZSBjYWxsYmFja1xuICAgIGlucHV0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IGlucHV0c1tuYW1lXTtcbiAgICAgIHZhciBpc1ZhbGlkID0gdGhpcy5ydW5WYWxpZGF0aW9uKGNvbXBvbmVudCk7XG4gICAgICBjb21wb25lbnQuc2V0U3RhdGUoe1xuICAgICAgICBfaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgX3NlcnZlckVycm9yOiBudWxsXG4gICAgICB9LCBpbmRleCA9PT0gaW5wdXRLZXlzLmxlbmd0aCAtIDEgPyBvblZhbGlkYXRpb25Db21wbGV0ZSA6IG51bGwpO1xuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gaW5wdXRzLCBzZXQgc3RhdGUgd2hlcmUgZm9ybSBpcyByZWFkeSB0byB0cmlnZ2VyXG4gICAgLy8gY2hhbmdlIGV2ZW50LiBOZXcgaW5wdXRzIG1pZ2h0IGJlIGFkZGVkIGxhdGVyXG4gICAgaWYgKCFpbnB1dEtleXMubGVuZ3RoICYmIHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjYW5DaGFuZ2U6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBNZXRob2QgcHV0IG9uIGVhY2ggaW5wdXQgY29tcG9uZW50IHRvIHJlZ2lzdGVyXG4gIC8vIGl0c2VsZiB0byB0aGUgZm9ybVxuICBhdHRhY2hUb0Zvcm06IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICB0aGlzLmlucHV0c1tjb21wb25lbnQucHJvcHMubmFtZV0gPSBjb21wb25lbnQ7XG4gICAgdGhpcy5tb2RlbFtjb21wb25lbnQucHJvcHMubmFtZV0gPSBjb21wb25lbnQuc3RhdGUuX3ZhbHVlO1xuICAgIHRoaXMudmFsaWRhdGUoY29tcG9uZW50KTtcbiAgfSxcblxuICAvLyBNZXRob2QgcHV0IG9uIGVhY2ggaW5wdXQgY29tcG9uZW50IHRvIHVucmVnaXN0ZXJcbiAgLy8gaXRzZWxmIGZyb20gdGhlIGZvcm1cbiAgZGV0YWNoRnJvbUZvcm06IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICBkZWxldGUgdGhpcy5pbnB1dHNbY29tcG9uZW50LnByb3BzLm5hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsW2NvbXBvbmVudC5wcm9wcy5uYW1lXTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICByZXR1cm4gUmVhY3QuRE9NLmZvcm0oe1xuICAgICAgICBvblN1Ym1pdDogdGhpcy5zdWJtaXQsXG4gICAgICAgIGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jbGFzc05hbWVcbiAgICAgIH0sXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgKTtcblxuICB9XG59KTtcblxuaWYgKCFnbG9iYWwuZXhwb3J0cyAmJiAhZ2xvYmFsLm1vZHVsZSAmJiAoIWdsb2JhbC5kZWZpbmUgfHwgIWdsb2JhbC5kZWZpbmUuYW1kKSkge1xuICBnbG9iYWwuRm9ybXN5ID0gRm9ybXN5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1zeTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pTDFWelpYSnpMMk5vY21semRHbGhibUZzWm05dWFTOUViMk4xYldWdWRITXZaR1YyTDJadmNtMXplUzF5WldGamRDOXpjbU12YldGcGJpNXFjeUlzSW5OdmRYSmpaWE1pT2xzaUwxVnpaWEp6TDJOb2NtbHpkR2xoYm1Gc1ptOXVhUzlFYjJOMWJXVnVkSE12WkdWMkwyWnZjbTF6ZVMxeVpXRmpkQzl6Y21NdmJXRnBiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeEpRVUZKTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhKUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYUVJc1NVRkJTU3hsUVVGbExFZEJRVWNzVDBGQlR5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExFTkJRVU03UVVGRGRFUXNTVUZCU1N4TFFVRkxMRWRCUVVjc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlEyeERMRWxCUVVrc1MwRkJTeXhIUVVGSExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTnNReXhKUVVGSkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUldwQ0xFMUJRVTBzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPenRCUVVWeVFpeE5RVUZOTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZVc1lVRkJZU3hGUVVGRk8wVkJRM3BETEU5QlFVOHNSMEZCUnl4aFFVRmhMRU5CUVVNN1FVRkRNVUlzUTBGQlF5eERRVUZET3p0QlFVVkdMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4VlFVRlZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVU3UlVGREwwTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU12UWl4RFFVRkRMRU5CUVVNN08wRkJSVVlzYVVOQlFXbERMRzlDUVVGQk8wVkJReTlDTEdWQlFXVXNSVUZCUlN4WlFVRlpPMGxCUXpOQ0xFOUJRVTg3VFVGRFRDeFBRVUZQTEVWQlFVVXNTVUZCU1R0TlFVTmlMRmxCUVZrc1JVRkJSU3hMUVVGTE8wMUJRMjVDTEZOQlFWTXNSVUZCUlN4TFFVRkxPMHRCUTJwQ0xFTkJRVU03UjBGRFNEdEZRVU5FTEdWQlFXVXNSVUZCUlN4WlFVRlpPMGxCUXpOQ0xFOUJRVTg3VFVGRFRDeFBRVUZQTEVWQlFVVXNSVUZCUlR0TlFVTllMRk5CUVZNc1JVRkJSU3haUVVGWkxFVkJRVVU3VFVGRGVrSXNUMEZCVHl4RlFVRkZMRmxCUVZrc1JVRkJSVHROUVVOMlFpeFJRVUZSTEVWQlFVVXNXVUZCV1N4RlFVRkZPMDFCUTNoQ0xHRkJRV0VzUlVGQlJTeFpRVUZaTEVWQlFVVTdUVUZETjBJc1pVRkJaU3hGUVVGRkxGbEJRVmtzUlVGQlJUdE5RVU12UWl4WFFVRlhMRVZCUVVVc1dVRkJXU3hGUVVGRk8wMUJRek5DTEU5QlFVOHNSVUZCUlN4WlFVRlpMRVZCUVVVN1RVRkRka0lzVTBGQlV5eEZRVUZGTEZsQlFWa3NSVUZCUlR0TlFVTjZRaXhSUVVGUkxFVkJRVVVzV1VGQldTeEZRVUZGTzB0QlEzcENMRU5CUVVNN1FVRkRUaXhIUVVGSE8wRkJRMGc3UVVGRFFUczdSVUZGUlN4clFrRkJhMElzUlVGQlJTeFpRVUZaTzBsQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEycENMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyaENMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNM1F5eEhRVUZIT3p0RlFVVkVMR2xDUVVGcFFpeEZRVUZGTEZsQlFWazdTVUZETjBJc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETzBGQlEzaENMRWRCUVVjN08wVkJSVVFzYlVKQlFXMUNMRVZCUVVVc1dVRkJXVHRCUVVOdVF5eEpRVUZKTEVsQlFVa3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpkRE8wRkJRMEU3TzBGQlJVRXNTVUZCU1N4VlFVRlZMRU5CUVVNc1dVRkJXVHRCUVVNelFqdEJRVU5CT3p0QlFVVkJMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVTdPMEZCUlRWQ0xGRkJRVkVzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZET3p0UFFVVXhReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3VlVGRE9VSXNTVUZCU1N4RFFVRkRMSGRDUVVGM1FpeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0QlFVTnlSU3hUUVVGVE96dFJRVVZFTEVsQlFVa3NXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpWRExFbEJRVWtzUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4VFFVRlRMRVZCUVVVc1dVRkJXU3hEUVVGRExFVkJRVVU3VlVGREwwTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRE8wRkJRemxDTEZOQlFWTTdPMEZCUlZRc1QwRkJUenM3UzBGRlJpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU55UWl4SFFVRkhPMEZCUTBnN08wVkJSVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNTMEZCU3l4RlFVRkZPMEZCUXpOQ0xFbEJRVWtzUzBGQlN5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUXpOQ08wRkJRMEU3UVVGRFFUczdRVUZGUVN4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYUVNN1FVRkRRVHRCUVVOQk96dEpRVVZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJUdE5RVU51UWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03VFVGRGJrSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzAxQlF6VkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8wMUJRM2hGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenROUVVNelNDeFBRVUZQTzBGQlEySXNTMEZCU3pzN1NVRkZSQ3hKUVVGSkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdTVUZEYmtJc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dE5RVU5hTEZsQlFWa3NSVUZCUlN4SlFVRkpPMEZCUTNoQ0xFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVlFMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdPMEZCUlhSR0xFbEJRVWtzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4TFFVRkxMRTlCUVU4c1EwRkJReXhQUVVGUExFbEJRVWtzUlVGQlJTeERRVUZET3p0SlFVVjBSeXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVkQlFVY3NUVUZCVFN4RFFVRkRPMGxCUTNwSUxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4SlFVRkpMRTlCUVU4c1EwRkJReXhYUVVGWExFbEJRVWtzVFVGQlRTeEZRVUZGTEU5QlFVOHNRMEZCUXp0UFFVTnNTQ3hKUVVGSkxFTkJRVU1zVlVGQlZTeFJRVUZSTEVWQlFVVTdVVUZEZUVJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRMMElzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRQUVVNeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRQUVVOYUxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRPVUlzUjBGQlJ6czdSVUZGUkN4UlFVRlJMRVZCUVVVc1dVRkJXVHRKUVVOd1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUXpWRkxFZEJRVWM3UVVGRFNEdEJRVU5CT3p0RlFVVkZMRmRCUVZjc1JVRkJSU3haUVVGWk8wbEJRM1pDTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRWxCUVVrc1JVRkJSVHROUVVNdlF5eEpRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzAxQlEyeERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UzBGRE0wTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUWl4SFFVRkhPMEZCUTBnN08wVkJSVVVzVlVGQlZTeEZRVUZGTEZsQlFWazdTVUZEZEVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzU1VGQlNTeEZRVUZGTzAxQlF5OURMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVNN1MwRkRhRU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOa0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXp0QlFVTjRRaXhIUVVGSE96dEZRVVZFTEhkQ1FVRjNRaXhGUVVGRkxGVkJRVlVzVFVGQlRTeEZRVUZGTzB0QlEzcERMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFbEJRVWtzUlVGQlJTeExRVUZMTEVWQlFVVTdUVUZEZGtRc1NVRkJTU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenROUVVOc1F5eEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRPMUZCUTFZc1VVRkJVU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEpRVUZKTEUxQlFVMHNRMEZCUXp0UlFVTXpRaXhaUVVGWkxFVkJRVVVzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXp0UFFVTXpRaXhEUVVGRExFTkJRVU03VFVGRFNDeFRRVUZUTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTMEZETTBNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnNRaXhIUVVGSE8wRkJRMGc3UVVGRFFUdEJRVU5CT3p0RlFVVkZMSEZDUVVGeFFpeEZRVUZGTEZWQlFWVXNUVUZCVFN4RlFVRkZPMGxCUTNaRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0QlFVTjJSQ3hOUVVGTkxFbEJRVWtzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzAxQlJXeERMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRFpDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMR2xIUVVGcFJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU53U2l4UFFVRlBPenROUVVWRUxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTTdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRSUVVObUxGbEJRVmtzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRPMDlCUXpOQ0xFTkJRVU1zUTBGQlF6dE5RVU5JTEZOQlFWTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTXpReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTJ4Q0xFZEJRVWM3TzBWQlJVUXNWVUZCVlN4RlFVRkZMRlZCUVZVc1RVRkJUU3hGUVVGRk8wbEJRelZDTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVTnVReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzAxQlExb3NXVUZCV1N4RlFVRkZMRXRCUVVzN1MwRkRjRUlzUTBGQlF5eERRVUZETzBsQlEwZ3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZETTBJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0QlFVTTNRaXhIUVVGSE8wRkJRMGc3UVVGRFFUdEJRVU5CT3p0RlFVVkZMR05CUVdNc1JVRkJSU3hWUVVGVkxGRkJRVkVzUlVGQlJUdEJRVU4wUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSVUZCUlN4VlFVRlZMRXRCUVVzc1JVRkJSVHM3VFVGRmFFUXNTVUZCU1N4TFFVRkxMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSVHRSUVVNMVF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETzFGQlF6bERMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNN1VVRkRiRVFzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU4wUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRPMUZCUTJ4RUxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU03UVVGRGRrUXNUMEZCVHpzN1RVRkZSQ3hKUVVGSkxFdEJRVXNzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeEZRVUZGTzFGQlEyaEVMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVOc1JDeFBRVUZQT3p0TFFVVkdMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEYkVJc1IwRkJSenM3UlVGRlJDeGpRVUZqTEVWQlFVVXNXVUZCV1R0SlFVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRPMEZCUXk5Q0xFZEJRVWM3TzBWQlJVUXNaMEpCUVdkQ0xFVkJRVVVzV1VGQldUdEpRVU0xUWl4UFFVRlBMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVTdUVUZETTBRc1NVRkJTU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenROUVVOc1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdUVUZEY0VNc1QwRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU4wUWl4SFFVRkhPenRGUVVWRUxHVkJRV1VzUlVGQlJTeFZRVUZWTEZWQlFWVXNSVUZCUlR0SlFVTnlReXhKUVVGSkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUXpkQ0xFbEJRVWtzU1VGQlNTeFRRVUZUTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU40UXp0QlFVTkJPenRKUVVWSkxGTkJRVk1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRk8wMUJRM1pETEVsQlFVa3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dE5RVU0zUWl4VFFVRlRMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRMnBDTEZkQlFWY3NSVUZCUlN4VlFVRlZPMDlCUTNoQ0xFTkJRVU1zUTBGQlF6dExRVU5LTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJFSXNSMEZCUnp0QlFVTklPMEZCUTBFN1FVRkRRVHM3UVVGRlFTeEZRVUZGTEZGQlFWRXNSVUZCUlN4VlFVRlZMRk5CUVZNc1JVRkJSVHRCUVVOcVF6czdTVUZGU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEZRVUZGTzAxQlEzaENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEYmtRc1MwRkJTenM3U1VGRlJDeEpRVUZKTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRia0lzU1VGQlNTeFRRVUZUTEVOQlFVTXNVVUZCVVN4RlFVRkZPMDFCUTNSQ0xFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1MwRkRhRU1zVFVGQlRTeEpRVUZKTEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hKUVVGSkxGTkJRVk1zUTBGQlF5eFpRVUZaTEVWQlFVVTdUVUZETjBRc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1FVRkRPVU1zUzBGQlN6dEJRVU5NTzBGQlEwRTdPMGxCUlVrc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF6dE5RVU5xUWl4UlFVRlJMRVZCUVVVc1QwRkJUenROUVVOcVFpeFpRVUZaTEVWQlFVVXNTVUZCU1R0QlFVTjRRaXhMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPenRCUVVVeFFpeEhRVUZITzBGQlEwZzdPMEZCUlVFc1JVRkJSU3hoUVVGaExFVkJRVVVzVlVGQlZTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZPenRCUVVVM1F5eEpRVUZKTEVsQlFVa3NUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenM3U1VGRmJrSXNTMEZCU3l4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUnl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU5vUlN4SlFVRkpMRk5CUVZNc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeExRVUZMTEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hKUVVGSkxFdEJRVXNzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlR0TlFVTXZSU3hUUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRlZCUVZVc1JVRkJSVHRSUVVOb1JpeEpRVUZKTEVsQlFVa3NSMEZCUnl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEycERMRWxCUVVrc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXp0UlFVTnNReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSVHRWUVVNM1FpeEpRVUZKTzFsQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFkQlEzaENMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3V1VGRFZpeFBRVUZQTEVkQlFVY3NRMEZCUXp0WFFVTmFPMU5CUTBZc1EwRkJReXhEUVVGRE8xRkJRMGdzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6VkNMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zWTBGQll5eERRVUZETEVWQlFVVTdWVUZEY0VNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5dzBRMEZCTkVNc1IwRkJSeXhqUVVGakxFTkJRVU1zUTBGQlF6dFRRVU5vUmp0UlFVTkVMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRk8xVkJRM3BGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1UwRkRha0k3VDBGRFJpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRMlk3UVVGRFRDeEpRVUZKTEVsQlFVa3NUMEZCVHl4VFFVRlRMRU5CUVVNc1lVRkJZU3hMUVVGTExGVkJRVlVzUlVGQlJUczdUVUZGYWtRc1QwRkJUeXhIUVVGSExGTkJRVk1zUTBGQlF5eGhRVUZoTEVWQlFVVTdRVUZEZWtNc1MwRkJTenM3U1VGRlJDeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVTnVRaXhIUVVGSE8wRkJRMGc3UVVGRFFUczdSVUZGUlN4WlFVRlpMRVZCUVVVc1dVRkJXVHRKUVVONFFpeEpRVUZKTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkRkRUlzU1VGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVNM1FpeEpRVUZKTEVsQlFVa3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEZUVNN1FVRkRRVHM3U1VGRlNTeEpRVUZKTEc5Q1FVRnZRaXhIUVVGSExGbEJRVms3VFVGRGNrTXNVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFbEJRVWtzUlVGQlJUdFJRVU5vUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRVZCUVVVN1ZVRkRhRU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXp0VFFVTndRanRCUVVOVUxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenM3VFVGRlpDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTFvc1QwRkJUeXhGUVVGRkxGVkJRVlU3UVVGRE0wSXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wMUJSVWdzU1VGQlNTeFZRVUZWTEVWQlFVVTdVVUZEWkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzA5QlEzUkNMRTFCUVUwN1VVRkRUQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMEZCUXk5Q0xFOUJRVTg3UVVGRFVEczdUVUZGVFN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRMW9zVTBGQlV5eEZRVUZGTEVsQlFVazdRVUZEZGtJc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJWUXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU5xUWp0QlFVTkJPenRKUVVWSkxGTkJRVk1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCVlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRk8wMUJRM1pETEVsQlFVa3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dE5RVU0zUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMDFCUXpWRExGTkJRVk1zUTBGQlF5eFJRVUZSTEVOQlFVTTdVVUZEYWtJc1VVRkJVU3hGUVVGRkxFOUJRVTg3VVVGRGFrSXNXVUZCV1N4RlFVRkZMRWxCUVVrN1QwRkRia0lzUlVGQlJTeExRVUZMTEV0QlFVc3NVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFZEJRVWNzYjBKQlFXOUNMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGRrVXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyeENPMEZCUTBFN08wbEJSVWtzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeEZRVUZGTzAxQlEzcERMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRFdpeFRRVUZUTEVWQlFVVXNTVUZCU1R0UFFVTm9RaXhEUVVGRExFTkJRVU03UzBGRFNqdEJRVU5NTEVkQlFVYzdRVUZEU0R0QlFVTkJPenRGUVVWRkxGbEJRVmtzUlVGQlJTeFZRVUZWTEZOQlFWTXNSVUZCUlR0SlFVTnFReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETzBsQlF6bERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTXhSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xFZEJRVWM3UVVGRFNEdEJRVU5CT3p0RlFVVkZMR05CUVdNc1JVRkJSU3hWUVVGVkxGTkJRVk1zUlVGQlJUdEpRVU51UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVONlF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SFFVTjZRenRCUVVOSUxFVkJRVVVzVFVGQlRTeEZRVUZGTEZsQlFWazdPMGxCUld4Q0xFOUJRVThzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRiRUlzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5PMUZCUTNKQ0xGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNN1QwRkRhRU03VFVGRFJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFN1FVRkRla0lzUzBGQlN5eERRVUZET3p0SFFVVklPMEZCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJVZ3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVU3UlVGREwwVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGVrSXNRMEZCUXpzN1FVRkZSQ3hOUVVGTkxFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkluWmhjaUJTWldGamRDQTlJR2RzYjJKaGJDNVNaV0ZqZENCOGZDQnlaWEYxYVhKbEtDZHlaV0ZqZENjcE8xeHVkbUZ5SUVadmNtMXplU0E5SUh0OU8xeHVkbUZ5SUhaaGJHbGtZWFJwYjI1U2RXeGxjeUE5SUhKbGNYVnBjbVVvSnk0dmRtRnNhV1JoZEdsdmJsSjFiR1Z6TG1wekp5azdYRzUyWVhJZ2RYUnBiSE1nUFNCeVpYRjFhWEpsS0NjdUwzVjBhV3h6TG1wekp5azdYRzUyWVhJZ1RXbDRhVzRnUFNCeVpYRjFhWEpsS0NjdUwwMXBlR2x1TG1wekp5azdYRzUyWVhJZ2IzQjBhVzl1Y3lBOUlIdDlPMXh1WEc1R2IzSnRjM2t1VFdsNGFXNGdQU0JOYVhocGJqdGNibHh1Um05eWJYTjVMbVJsWm1GMWJIUnpJRDBnWm5WdVkzUnBiMjRnS0hCaGMzTmxaRTl3ZEdsdmJuTXBJSHRjYmlBZ2IzQjBhVzl1Y3lBOUlIQmhjM05sWkU5d2RHbHZibk03WEc1OU8xeHVYRzVHYjNKdGMza3VZV1JrVm1Gc2FXUmhkR2x2YmxKMWJHVWdQU0JtZFc1amRHbHZiaUFvYm1GdFpTd2dablZ1WXlrZ2UxeHVJQ0IyWVd4cFpHRjBhVzl1VW5Wc1pYTmJibUZ0WlYwZ1BTQm1kVzVqTzF4dWZUdGNibHh1Um05eWJYTjVMa1p2Y20wZ1BTQlNaV0ZqZEM1amNtVmhkR1ZEYkdGemN5aDdYRzRnSUdkbGRFbHVhWFJwWVd4VGRHRjBaVG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0JwYzFaaGJHbGtPaUIwY25WbExGeHVJQ0FnSUNBZ2FYTlRkV0p0YVhSMGFXNW5PaUJtWVd4elpTeGNiaUFnSUNBZ0lHTmhia05vWVc1blpUb2dabUZzYzJWY2JpQWdJQ0I5TzF4dUlDQjlMRnh1SUNCblpYUkVaV1poZFd4MFVISnZjSE02SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnYUdWaFpHVnljem9nZTMwc1hHNGdJQ0FnSUNCdmJsTjFZMk5sYzNNNklHWjFibU4wYVc5dUlDZ3BJSHQ5TEZ4dUlDQWdJQ0FnYjI1RmNuSnZjam9nWm5WdVkzUnBiMjRnS0NrZ2UzMHNYRzRnSUNBZ0lDQnZibE4xWW0xcGREb2dablZ1WTNScGIyNGdLQ2tnZTMwc1hHNGdJQ0FnSUNCdmJsWmhiR2xrVTNWaWJXbDBPaUJtZFc1amRHbHZiaUFvS1NCN2ZTeGNiaUFnSUNBZ0lHOXVTVzUyWVd4cFpGTjFZbTFwZERvZ1puVnVZM1JwYjI0Z0tDa2dlMzBzWEc0Z0lDQWdJQ0J2YmxOMVltMXBkSFJsWkRvZ1puVnVZM1JwYjI0Z0tDa2dlMzBzWEc0Z0lDQWdJQ0J2YmxaaGJHbGtPaUJtZFc1amRHbHZiaUFvS1NCN2ZTeGNiaUFnSUNBZ0lHOXVTVzUyWVd4cFpEb2dablZ1WTNScGIyNGdLQ2tnZTMwc1hHNGdJQ0FnSUNCdmJrTm9ZVzVuWlRvZ1puVnVZM1JwYjI0Z0tDa2dlMzFjYmlBZ0lDQjlPMXh1SUNCOUxGeHVYRzRnSUM4dklFRmtaQ0JoSUcxaGNDQjBieUJ6ZEc5eVpTQjBhR1VnYVc1d2RYUnpJRzltSUhSb1pTQm1iM0p0TENCaElHMXZaR1ZzSUhSdklITjBiM0psWEc0Z0lDOHZJSFJvWlNCMllXeDFaWE1nYjJZZ2RHaGxJR1p2Y20wZ1lXNWtJSEpsWjJsemRHVnlJR05vYVd4a0lHbHVjSFYwYzF4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUTZJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0IwYUdsekxtbHVjSFYwY3lBOUlIdDlPMXh1SUNBZ0lIUm9hWE11Ylc5a1pXd2dQU0I3ZlR0Y2JpQWdJQ0IwYUdsekxuSmxaMmx6ZEdWeVNXNXdkWFJ6S0hSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5TEZ4dVhHNGdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnZEdocGN5NTJZV3hwWkdGMFpVWnZjbTBvS1R0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVlhCa1lYUmxPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnZG1GeUlHbHVjSFYwUzJWNWN5QTlJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXVhVzV3ZFhSektUdGNibHh1SUNBZ0lDOHZJRlJvWlNCMWNHUmhkR1ZrSUdOb2FXeGtjbVZ1SUdGeWNtRjVJR2x6SUc1dmRDQmhkbUZwYkdGaWJHVWdhR1Z5WlNCbWIzSWdjMjl0WlNCeVpXRnpiMjRzWEc0Z0lDQWdMeThnZDJVZ2JtVmxaQ0IwYnlCM1lXbDBJR1p2Y2lCdVpYaDBJR1YyWlc1MElHeHZiM0JjYmlBZ0lDQnpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVJQ2dwSUh0Y2JseHVJQ0FnSUNBZ0x5OGdWR2hsSUdOdmJYQnZibVZ1ZENCdGFXZG9kQ0JvWVhabElHSmxaVzRnZFc1dGIzVnVkR1ZrSUc5dUlHRnVYRzRnSUNBZ0lDQXZMeUIxY0dSaGRHVmNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxtbHpUVzkxYm5SbFpDZ3BLU0I3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV5WldkcGMzUmxja2x1Y0hWMGN5aDBhR2x6TG5CeWIzQnpMbU5vYVd4a2NtVnVLVHRjYmx4dUlDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeWIzQnpMblpoYkdsa1lYUnBiMjVGY25KdmNuTXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbk5sZEVsdWNIVjBWbUZzYVdSaGRHbHZia1Z5Y205eWN5aDBhR2x6TG5CeWIzQnpMblpoYkdsa1lYUnBiMjVGY25KdmNuTXBPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2RtRnlJRzVsZDBsdWNIVjBTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSFJvYVhNdWFXNXdkWFJ6S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFYwYVd4ekxtRnljbUY1YzBScFptWmxjaWhwYm5CMWRFdGxlWE1zSUc1bGQwbHVjSFYwUzJWNWN5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMblpoYkdsa1lYUmxSbTl5YlNncE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1N3Z01DazdYRzRnSUgwc1hHNWNiaUFnTHk4Z1ZYQmtZWFJsSUcxdlpHVnNMQ0J6ZFdKdGFYUWdkRzhnZFhKc0lIQnliM0FnWVc1a0lITmxibVFnZEdobElHMXZaR1ZzWEc0Z0lITjFZbTFwZERvZ1puVnVZM1JwYjI0Z0tHVjJaVzUwS1NCN1hHNGdJQ0FnWlhabGJuUXVjSEpsZG1WdWRFUmxabUYxYkhRb0tUdGNibHh1SUNBZ0lDOHZJRlJ5YVdkblpYSWdabTl5YlNCaGN5QnViM1FnY0hKcGMzUnBibVV1WEc0Z0lDQWdMeThnU1dZZ1lXNTVJR2x1Y0hWMGN5Qm9ZWFpsSUc1dmRDQmlaV1Z1SUhSdmRXTm9aV1FnZVdWMElIUm9hWE1nZDJsc2JDQnRZV3RsSUhSb1pXMGdaR2x5ZEhsY2JpQWdJQ0F2THlCemJ5QjJZV3hwWkdGMGFXOXVJR0psWTI5dFpYTWdkbWx6YVdKc1pTQW9hV1lnWW1GelpXUWdiMjRnYVhOUWNtbHpkR2x1WlNsY2JpQWdJQ0IwYUdsekxuTmxkRVp2Y20xUWNtbHpkR2x1WlNobVlXeHpaU2s3WEc1Y2JpQWdJQ0F2THlCVWJ5QnpkWEJ3YjNKMElIVnpaU0JqWVhObGN5QjNhR1Z5WlNCdWJ5QmhjM2x1WXlCdmNpQnlaWEYxWlhOMElHOXdaWEpoZEdsdmJpQnBjeUJ1WldWa1pXUXVYRzRnSUNBZ0x5OGdWR2hsSUZ3aWIyNVRkV0p0YVhSY0lpQmpZV3hzWW1GamF5QnBjeUJqWVd4c1pXUWdkMmwwYUNCMGFHVWdiVzlrWld3Z1pTNW5MaUI3Wm1sbGJHUk9ZVzFsT2lCY0ltMTVWbUZzZFdWY0luMHNYRzRnSUNBZ0x5OGdhV1lnZDJGdWRHbHVaeUIwYnlCeVpYTmxkQ0IwYUdVZ1pXNTBhWEpsSUdadmNtMGdkRzhnYjNKcFoybHVZV3dnYzNSaGRHVXNJSFJvWlNCelpXTnZibVFnY0dGeVlXMGdhWE1nWVNCallXeHNZbUZqYXlCbWIzSWdkR2hwY3k1Y2JpQWdJQ0JwWmlBb0lYUm9hWE11Y0hKdmNITXVkWEpzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpVMXZaR1ZzS0NrN1hHNGdJQ0FnSUNCMllYSWdiVzlrWld3Z1BTQjBhR2x6TG0xaGNFMXZaR1ZzS0NrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtOXVVM1ZpYldsMEtHMXZaR1ZzTENCMGFHbHpMbkpsYzJWMFRXOWtaV3dzSUhSb2FYTXVkWEJrWVhSbFNXNXdkWFJ6VjJsMGFFVnljbTl5S1R0Y2JpQWdJQ0FnSUhSb2FYTXVjM1JoZEdVdWFYTldZV3hwWkNBL0lIUm9hWE11Y0hKdmNITXViMjVXWVd4cFpGTjFZbTFwZENodGIyUmxiQ3dnZEdocGN5NXlaWE5sZEUxdlpHVnNLU0E2SUhSb2FYTXVjSEp2Y0hNdWIyNUpiblpoYkdsa1UzVmliV2wwS0cxdlpHVnNMQ0IwYUdsekxuSmxjMlYwVFc5a1pXd3BPMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVkWEJrWVhSbFRXOWtaV3dvS1R0Y2JpQWdJQ0IwYUdsekxuTmxkRk4wWVhSbEtIdGNiaUFnSUNBZ0lHbHpVM1ZpYldsMGRHbHVaem9nZEhKMVpWeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2RHaHBjeTV3Y205d2N5NXZibE4xWW0xcGRDaDBhR2x6TG0xaGNFMXZaR1ZzS0Nrc0lIUm9hWE11Y21WelpYUk5iMlJsYkN3Z2RHaHBjeTUxY0dSaGRHVkpibkIxZEhOWGFYUm9SWEp5YjNJcE8xeHVYRzRnSUNBZ2RtRnlJR2hsWVdSbGNuTWdQU0FvVDJKcVpXTjBMbXRsZVhNb2RHaHBjeTV3Y205d2N5NW9aV0ZrWlhKektTNXNaVzVuZEdnZ0ppWWdkR2hwY3k1d2NtOXdjeTVvWldGa1pYSnpLU0I4ZkNCdmNIUnBiMjV6TG1obFlXUmxjbk1nZkh3Z2UzMDdYRzVjYmlBZ0lDQjJZWElnYldWMGFHOWtJRDBnZEdocGN5NXdjbTl3Y3k1dFpYUm9iMlFnSmlZZ2RYUnBiSE11WVdwaGVGdDBhR2x6TG5CeWIzQnpMbTFsZEdodlpDNTBiMHh2ZDJWeVEyRnpaU2dwWFNBL0lIUm9hWE11Y0hKdmNITXViV1YwYUc5a0xuUnZURzkzWlhKRFlYTmxLQ2tnT2lBbmNHOXpkQ2M3WEc0Z0lDQWdkWFJwYkhNdVlXcGhlRnR0WlhSb2IyUmRLSFJvYVhNdWNISnZjSE11ZFhKc0xDQjBhR2x6TG0xaGNFMXZaR1ZzS0Nrc0lIUm9hWE11Y0hKdmNITXVZMjl1ZEdWdWRGUjVjR1VnZkh3Z2IzQjBhVzl1Y3k1amIyNTBaVzUwVkhsd1pTQjhmQ0FuYW5OdmJpY3NJR2hsWVdSbGNuTXBYRzRnSUNBZ0lDQXVkR2hsYmlobWRXNWpkR2x2YmlBb2NtVnpjRzl1YzJVcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2NtOXdjeTV2YmxOMVkyTmxjM01vY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtOXVVM1ZpYldsMGRHVmtLQ2s3WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrcFhHNGdJQ0FnSUNBdVkyRjBZMmdvZEdocGN5NW1ZV2xzVTNWaWJXbDBLVHRjYmlBZ2ZTeGNibHh1SUNCdFlYQk5iMlJsYkRvZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJ5YjNCekxtMWhjSEJwYm1jZ1B5QjBhR2x6TG5CeWIzQnpMbTFoY0hCcGJtY29kR2hwY3k1dGIyUmxiQ2tnT2lCMGFHbHpMbTF2WkdWc08xeHVJQ0I5TEZ4dVhHNGdJQzh2SUVkdlpYTWdkR2h5YjNWbmFDQmhiR3dnY21WbmFYTjBaWEpsWkNCamIyMXdiMjVsYm5SeklHRnVaRnh1SUNBdkx5QjFjR1JoZEdWeklIUm9aU0J0YjJSbGJDQjJZV3gxWlhOY2JpQWdkWEJrWVhSbFRXOWtaV3c2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1sdWNIVjBjeWt1Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvYm1GdFpTa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOdmJYQnZibVZ1ZENBOUlIUm9hWE11YVc1d2RYUnpXMjVoYldWZE8xeHVJQ0FnSUNBZ2RHaHBjeTV0YjJSbGJGdHVZVzFsWFNBOUlHTnZiWEJ2Ym1WdWRDNXpkR0YwWlM1ZmRtRnNkV1U3WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdmU3hjYmx4dUlDQXZMeUJTWlhObGRDQmxZV05vSUd0bGVTQnBiaUIwYUdVZ2JXOWtaV3dnZEc4Z2RHaGxJRzl5YVdkcGJtRnNJQzhnYVc1cGRHbGhiQ0IyWVd4MVpWeHVJQ0J5WlhObGRFMXZaR1ZzT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ1QySnFaV04wTG10bGVYTW9kR2hwY3k1cGJuQjFkSE1wTG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0c1aGJXVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWFXNXdkWFJ6VzI1aGJXVmRMbkpsYzJWMFZtRnNkV1VvS1R0Y2JpQWdJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0FnSUhSb2FYTXVkbUZzYVdSaGRHVkdiM0p0S0NrN1hHNGdJSDBzWEc1Y2JpQWdjMlYwU1c1d2RYUldZV3hwWkdGMGFXOXVSWEp5YjNKek9pQm1kVzVqZEdsdmJpQW9aWEp5YjNKektTQjdYRzRnSUNBZ0lFOWlhbVZqZEM1clpYbHpLSFJvYVhNdWFXNXdkWFJ6S1M1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodVlXMWxMQ0JwYm1SbGVDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOdmJYQnZibVZ1ZENBOUlIUm9hWE11YVc1d2RYUnpXMjVoYldWZE8xeHVJQ0FnSUNBZ2RtRnlJR0Z5WjNNZ1BTQmJlMXh1SUNBZ0lDQWdJQ0JmYVhOV1lXeHBaRG9nSVNodVlXMWxJR2x1SUdWeWNtOXljeWtzWEc0Z0lDQWdJQ0FnSUY5elpYSjJaWEpGY25KdmNqb2daWEp5YjNKelcyNWhiV1ZkWEc0Z0lDQWdJQ0I5WFR0Y2JpQWdJQ0FnSUdOdmJYQnZibVZ1ZEM1elpYUlRkR0YwWlM1aGNIQnNlU2hqYjIxd2IyNWxiblFzSUdGeVozTXBPMXh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3SUNBZ1hHNGdJSDBzWEc1Y2JpQWdMeThnUjI4Z2RHaHliM1ZuYUNCbGNuSnZjbk1nWm5KdmJTQnpaWEoyWlhJZ1lXNWtJR2R5WVdJZ2RHaGxJR052YlhCdmJtVnVkSE5jYmlBZ0x5OGdjM1J2Y21Wa0lHbHVJSFJvWlNCcGJuQjFkSE1nYldGd0xpQkRhR0Z1WjJVZ2RHaGxhWElnYzNSaGRHVWdkRzhnYVc1MllXeHBaRnh1SUNBdkx5QmhibVFnYzJWMElIUm9aU0J6WlhKMlpYSkZjbkp2Y2lCdFpYTnpZV2RsWEc0Z0lIVndaR0YwWlVsdWNIVjBjMWRwZEdoRmNuSnZjam9nWm5WdVkzUnBiMjRnS0dWeWNtOXljeWtnZTF4dUlDQWdJRTlpYW1WamRDNXJaWGx6S0dWeWNtOXljeWt1Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvYm1GdFpTd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCMGFHbHpMbWx1Y0hWMGMxdHVZVzFsWFR0Y2JseHVJQ0FnSUNBZ2FXWWdLQ0ZqYjIxd2IyNWxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkWmIzVWdZWEpsSUhSeWVXbHVaeUIwYnlCMWNHUmhkR1VnWVc0Z2FXNXdkWFFnZEdoaGRDQmtiMlZ6SUc1dmRDQmxlR2x6ZEhNdUlGWmxjbWxtZVNCbGNuSnZjbk1nYjJKcVpXTjBJSGRwZEdnZ2FXNXdkWFFnYm1GdFpYTXVJQ2NnS3lCS1UwOU9Mbk4wY21sdVoybG1lU2hsY25KdmNuTXBLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnZG1GeUlHRnlaM01nUFNCYmUxeHVJQ0FnSUNBZ0lDQmZhWE5XWVd4cFpEb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lGOXpaWEoyWlhKRmNuSnZjam9nWlhKeWIzSnpXMjVoYldWZFhHNGdJQ0FnSUNCOVhUdGNiaUFnSUNBZ0lHTnZiWEJ2Ym1WdWRDNXpaWFJUZEdGMFpTNWhjSEJzZVNoamIyMXdiMjVsYm5Rc0lHRnlaM01wTzF4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSDBzWEc1Y2JpQWdabUZwYkZOMVltMXBkRG9nWm5WdVkzUnBiMjRnS0dWeWNtOXljeWtnZTF4dUlDQWdJSFJvYVhNdWRYQmtZWFJsU1c1d2RYUnpWMmwwYUVWeWNtOXlLR1Z5Y205eWN5azdYRzRnSUNBZ2RHaHBjeTV6WlhSVGRHRjBaU2g3WEc0Z0lDQWdJQ0JwYzFOMVltMXBkSFJwYm1jNklHWmhiSE5sWEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1d2NtOXdjeTV2YmtWeWNtOXlLR1Z5Y205eWN5azdYRzRnSUNBZ2RHaHBjeTV3Y205d2N5NXZibE4xWW0xcGRIUmxaQ2dwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRlJ5WVhabGNuTmxJSFJvWlNCamFHbHNaSEpsYmlCaGJtUWdZMmhwYkdSeVpXNGdiMllnWTJocGJHUnlaVzRnZEc4Z1ptbHVaRnh1SUNBdkx5QmhiR3dnYVc1d2RYUnpJR0o1SUdOb1pXTnJhVzVuSUhSb1pTQnVZVzFsSUhCeWIzQXVJRTFoZVdKbElHUnZJR0VnWW1WMGRHVnlYRzRnSUM4dklHTm9aV05ySUdobGNtVmNiaUFnY21WbmFYTjBaWEpKYm5CMWRITTZJR1oxYm1OMGFXOXVJQ2hqYUdsc1pISmxiaWtnZTF4dUlDQWdJRkpsWVdOMExrTm9hV3hrY21WdUxtWnZja1ZoWTJnb1kyaHBiR1J5Wlc0c0lHWjFibU4wYVc5dUlDaGphR2xzWkNrZ2UxeHVYRzRnSUNBZ0lDQnBaaUFvWTJocGJHUWdKaVlnWTJocGJHUXVjSEp2Y0hNZ0ppWWdZMmhwYkdRdWNISnZjSE11Ym1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JqYUdsc1pDNXdjbTl3Y3k1ZllYUjBZV05vVkc5R2IzSnRJRDBnZEdocGN5NWhkSFJoWTJoVWIwWnZjbTA3WEc0Z0lDQWdJQ0FnSUdOb2FXeGtMbkJ5YjNCekxsOWtaWFJoWTJoR2NtOXRSbTl5YlNBOUlIUm9hWE11WkdWMFlXTm9Sbkp2YlVadmNtMDdYRzRnSUNBZ0lDQWdJR05vYVd4a0xuQnliM0J6TGw5MllXeHBaR0YwWlNBOUlIUm9hWE11ZG1Gc2FXUmhkR1U3WEc0Z0lDQWdJQ0FnSUdOb2FXeGtMbkJ5YjNCekxsOXBjMFp2Y20xRWFYTmhZbXhsWkNBOUlIUm9hWE11YVhOR2IzSnRSR2x6WVdKc1pXUTdYRzRnSUNBZ0lDQWdJR05vYVd4a0xuQnliM0J6TGw5cGMxWmhiR2xrVm1Gc2RXVWdQU0IwYUdsekxuSjFibFpoYkdsa1lYUnBiMjQ3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaGphR2xzWkNBbUppQmphR2xzWkM1d2NtOXdjeUFtSmlCamFHbHNaQzV3Y205d2N5NWphR2xzWkhKbGJpa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuSmxaMmx6ZEdWeVNXNXdkWFJ6S0dOb2FXeGtMbkJ5YjNCekxtTm9hV3hrY21WdUtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lIMHNYRzVjYmlBZ2FYTkdiM0p0UkdsellXSnNaV1E2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXdjbTl3Y3k1a2FYTmhZbXhsWkR0Y2JpQWdmU3hjYmx4dUlDQm5aWFJEZFhKeVpXNTBWbUZzZFdWek9pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLSFJvYVhNdWFXNXdkWFJ6S1M1eVpXUjFZMlVvWm5WdVkzUnBiMjRnS0dSaGRHRXNJRzVoYldVcElIdGNiaUFnSUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCMGFHbHpMbWx1Y0hWMGMxdHVZVzFsWFR0Y2JpQWdJQ0FnSUdSaGRHRmJibUZ0WlYwZ1BTQmpiMjF3YjI1bGJuUXVjM1JoZEdVdVgzWmhiSFZsTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1JoZEdFN1hHNGdJQ0FnZlM1aWFXNWtLSFJvYVhNcExDQjdmU2s3WEc0Z0lIMHNYRzVjYmlBZ2MyVjBSbTl5YlZCeWFYTjBhVzVsT2lCbWRXNWpkR2x2YmlBb2FYTlFjbWx6ZEdsdVpTa2dlMXh1SUNBZ0lIWmhjaUJwYm5CMWRITWdQU0IwYUdsekxtbHVjSFYwY3p0Y2JpQWdJQ0IyWVhJZ2FXNXdkWFJMWlhseklEMGdUMkpxWldOMExtdGxlWE1vYVc1d2RYUnpLVHRjYmx4dUlDQWdJQzh2SUVsMFpYSmhkR1VnZEdoeWIzVm5hQ0JsWVdOb0lHTnZiWEJ2Ym1WdWRDQmhibVFnYzJWMElHbDBJR0Z6SUhCeWFYTjBhVzVsWEc0Z0lDQWdMeThnYjNJZ1hDSmthWEowZVZ3aUxseHVJQ0FnSUdsdWNIVjBTMlY1Y3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNodVlXMWxMQ0JwYm1SbGVDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOdmJYQnZibVZ1ZENBOUlHbHVjSFYwYzF0dVlXMWxYVHRjYmlBZ0lDQWdJR052YlhCdmJtVnVkQzV6WlhSVGRHRjBaU2g3WEc0Z0lDQWdJQ0FnSUY5cGMxQnlhWE4wYVc1bE9pQnBjMUJ5YVhOMGFXNWxYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRlZ6WlNCMGFHVWdZbWx1WkdWa0lIWmhiSFZsY3lCaGJtUWdkR2hsSUdGamRIVmhiQ0JwYm5CMWRDQjJZV3gxWlNCMGIxeHVJQ0F2THlCMllXeHBaR0YwWlNCMGFHVWdhVzV3ZFhRZ1lXNWtJSE5sZENCcGRITWdjM1JoZEdVdUlGUm9aVzRnWTJobFkyc2dkR2hsWEc0Z0lDOHZJSE4wWVhSbElHOW1JSFJvWlNCbWIzSnRJR2wwYzJWc1pseHVJQ0IyWVd4cFpHRjBaVG9nWm5WdVkzUnBiMjRnS0dOdmJYQnZibVZ1ZENrZ2UxeHVYRzRnSUNBZ0x5OGdWSEpwWjJkbGNpQnZia05vWVc1blpWeHVJQ0FnSUdsbUlDaDBhR2x6TG5OMFlYUmxMbU5oYmtOb1lXNW5aU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1dmJrTm9ZVzVuWlNoMGFHbHpMbWRsZEVOMWNuSmxiblJXWVd4MVpYTW9LU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUdselZtRnNhV1FnUFNCMGNuVmxPMXh1SUNBZ0lHbG1JQ2hqYjIxd2IyNWxiblF1ZG1Gc2FXUmhkR1VwSUh0Y2JpQWdJQ0FnSUdselZtRnNhV1FnUFNCamIyMXdiMjVsYm5RdWRtRnNhV1JoZEdVb0tUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHTnZiWEJ2Ym1WdWRDNXdjbTl3Y3k1eVpYRjFhWEpsWkNCOGZDQmpiMjF3YjI1bGJuUXVYM1poYkdsa1lYUnBiMjV6S1NCN1hHNGdJQ0FnSUNCcGMxWmhiR2xrSUQwZ2RHaHBjeTV5ZFc1V1lXeHBaR0YwYVc5dUtHTnZiWEJ2Ym1WdWRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdVblZ1SUhSb2NtOTFaMmdnZEdobElIWmhiR2xrWVhScGIyNXpMQ0J6Y0d4cGRDQjBhR1Z0SUhWd0lHRnVaQ0JqWVd4c1hHNGdJQ0FnTHk4Z2RHaGxJSFpoYkdsa1lYUnZjaUJKUmlCMGFHVnlaU0JwY3lCaElIWmhiSFZsSUc5eUlHbDBJR2x6SUhKbGNYVnBjbVZrWEc0Z0lDQWdZMjl0Y0c5dVpXNTBMbk5sZEZOMFlYUmxLSHRjYmlBZ0lDQWdJRjlwYzFaaGJHbGtPaUJwYzFaaGJHbGtMRnh1SUNBZ0lDQWdYM05sY25abGNrVnljbTl5T2lCdWRXeHNYRzRnSUNBZ2ZTd2dkR2hwY3k1MllXeHBaR0YwWlVadmNtMHBPMXh1WEc0Z0lIMHNYRzVjYmlBZ0x5OGdRMmhsWTJ0eklIWmhiR2xrWVhScGIyNGdiMjRnWTNWeWNtVnVkQ0IyWVd4MVpTQnZjaUJoSUhCaGMzTmxaQ0IyWVd4MVpWeHVJQ0J5ZFc1V1lXeHBaR0YwYVc5dU9pQm1kVzVqZEdsdmJpQW9ZMjl0Y0c5dVpXNTBMQ0IyWVd4MVpTa2dlMXh1WEc0Z0lDQWdkbUZ5SUdselZtRnNhV1FnUFNCMGNuVmxPMXh1SUNBZ0lGeHVJQ0FnSUhaaGJIVmxJRDBnWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0E5UFQwZ01pQS9JSFpoYkhWbElEb2dZMjl0Y0c5dVpXNTBMbk4wWVhSbExsOTJZV3gxWlR0Y2JpQWdJQ0JwWmlBb1kyOXRjRzl1Wlc1MExsOTJZV3hwWkdGMGFXOXVjeTVzWlc1bmRHZ2dKaVlnS0dOdmJYQnZibVZ1ZEM1d2NtOXdjeTV5WlhGMWFYSmxaQ0I4ZkNCMllXeDFaU0FoUFQwZ0p5Y3BLU0I3WEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblF1WDNaaGJHbGtZWFJwYjI1ekxuTndiR2wwS0M5Y1hDd29QeUZiWG50Y1hGdGRLbHQ5WEZ4ZFhTa3ZaeWt1Wm05eVJXRmphQ2htZFc1amRHbHZiaUFvZG1Gc2FXUmhkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWVhKbmN5QTlJSFpoYkdsa1lYUnBiMjR1YzNCc2FYUW9Kem9uS1R0Y2JpQWdJQ0FnSUNBZ2RtRnlJSFpoYkdsa1lYUmxUV1YwYUc5a0lEMGdZWEpuY3k1emFHbG1kQ2dwTzF4dUlDQWdJQ0FnSUNCaGNtZHpJRDBnWVhKbmN5NXRZWEFvWm5WdVkzUnBiMjRnS0dGeVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnU2xOUFRpNXdZWEp6WlNoaGNtY3BPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJoY21jN0lDOHZJRWwwSUdseklHRWdjM1J5YVc1bklHbG1JR2wwSUdOaGJpQnViM1FnY0dGeWMyVWdhWFJjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0JoY21keklEMGdXM1poYkhWbFhTNWpiMjVqWVhRb1lYSm5jeWs3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hkbUZzYVdSaGRHbHZibEoxYkdWelczWmhiR2xrWVhSbFRXVjBhRzlrWFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25SbTl5YlhONUlHUnZaWE1nYm05MElHaGhkbVVnZEdobElIWmhiR2xrWVhScGIyNGdjblZzWlRvZ0p5QXJJSFpoYkdsa1lYUmxUV1YwYUc5a0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb0lYWmhiR2xrWVhScGIyNVNkV3hsYzF0MllXeHBaR0YwWlUxbGRHaHZaRjB1WVhCd2JIa29kR2hwY3k1blpYUkRkWEp5Wlc1MFZtRnNkV1Z6S0Nrc0lHRnlaM01wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhWE5XWVd4cFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052YlhCdmJtVnVkQzVqYUdWamExWmhiR2xrYVhSNUlEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDOHZJSFJvWlNCamIyMXdiMjVsYm5RZ1pHVm1hVzVsY3lCaGJpQmxlSEJzYVdOcGRDQmphR1ZqYTFaaGJHbGthWFI1SUdaMWJtTjBhVzl1WEc0Z0lDQWdJQ0JwYzFaaGJHbGtJRDBnWTI5dGNHOXVaVzUwTG1Ob1pXTnJWbUZzYVdScGRIa29LVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCcGMxWmhiR2xrTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRlpoYkdsa1lYUmxJSFJvWlNCbWIzSnRJR0o1SUdkdmFXNW5JSFJvY205MVoyZ2dZV3hzSUdOb2FXeGtJR2x1Y0hWMElHTnZiWEJ2Ym1WdWRITmNiaUFnTHk4Z1lXNWtJR05vWldOcklIUm9aV2x5SUhOMFlYUmxYRzRnSUhaaGJHbGtZWFJsUm05eWJUb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSFpoY2lCaGJHeEpjMVpoYkdsa0lEMGdkSEoxWlR0Y2JpQWdJQ0IyWVhJZ2FXNXdkWFJ6SUQwZ2RHaHBjeTVwYm5CMWRITTdYRzRnSUNBZ2RtRnlJR2x1Y0hWMFMyVjVjeUE5SUU5aWFtVmpkQzVyWlhsektHbHVjSFYwY3lrN1hHNWNiaUFnSUNBdkx5QlhaU0J1WldWa0lHRWdZMkZzYkdKaFkyc2dZWE1nZDJVZ1lYSmxJSFpoYkdsa1lYUnBibWNnWVd4c0lHbHVjSFYwY3lCaFoyRnBiaTRnVkdocGN5QjNhV3hzWEc0Z0lDQWdMeThnY25WdUlIZG9aVzRnZEdobElHeGhjM1FnWTI5dGNHOXVaVzUwSUdoaGN5QnpaWFFnYVhSeklITjBZWFJsWEc0Z0lDQWdkbUZ5SUc5dVZtRnNhV1JoZEdsdmJrTnZiWEJzWlhSbElEMGdablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJQ0FnYVc1d2RYUkxaWGx6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0c1aGJXVXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnBibkIxZEhOYmJtRnRaVjB1YzNSaGRHVXVYMmx6Vm1Gc2FXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCaGJHeEpjMVpoYkdsa0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVjMlYwVTNSaGRHVW9lMXh1SUNBZ0lDQWdJQ0JwYzFaaGJHbGtPaUJoYkd4SmMxWmhiR2xrWEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2FXWWdLR0ZzYkVselZtRnNhV1FwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3Y205d2N5NXZibFpoYkdsa0tDazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeWIzQnpMbTl1U1c1MllXeHBaQ2dwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QlVaV3hzSUhSb1pTQm1iM0p0SUhSb1lYUWdhWFFnWTJGdUlITjBZWEowSUhSdklIUnlhV2RuWlhJZ1kyaGhibWRsSUdWMlpXNTBjMXh1SUNBZ0lDQWdkR2hwY3k1elpYUlRkR0YwWlNoN1hHNGdJQ0FnSUNBZ0lHTmhia05vWVc1blpUb2dkSEoxWlZ4dUlDQWdJQ0FnZlNrN1hHNWNiaUFnSUNCOUxtSnBibVFvZEdocGN5azdYRzVjYmlBZ0lDQXZMeUJTZFc0Z2RtRnNhV1JoZEdsdmJpQmhaMkZwYmlCcGJpQmpZWE5sSUdGbVptVmpkR1ZrSUdKNUlHOTBhR1Z5SUdsdWNIVjBjeTRnVkdobFhHNGdJQ0FnTHk4Z2JHRnpkQ0JqYjIxd2IyNWxiblFnZG1Gc2FXUmhkR1ZrSUhkcGJHd2djblZ1SUhSb1pTQnZibFpoYkdsa1lYUnBiMjVEYjIxd2JHVjBaU0JqWVd4c1ltRmphMXh1SUNBZ0lHbHVjSFYwUzJWNWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHVZVzFsTENCcGJtUmxlQ2tnZTF4dUlDQWdJQ0FnZG1GeUlHTnZiWEJ2Ym1WdWRDQTlJR2x1Y0hWMGMxdHVZVzFsWFR0Y2JpQWdJQ0FnSUhaaGNpQnBjMVpoYkdsa0lEMGdkR2hwY3k1eWRXNVdZV3hwWkdGMGFXOXVLR052YlhCdmJtVnVkQ2s3WEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblF1YzJWMFUzUmhkR1VvZTF4dUlDQWdJQ0FnSUNCZmFYTldZV3hwWkRvZ2FYTldZV3hwWkN4Y2JpQWdJQ0FnSUNBZ1gzTmxjblpsY2tWeWNtOXlPaUJ1ZFd4c1hHNGdJQ0FnSUNCOUxDQnBibVJsZUNBOVBUMGdhVzV3ZFhSTFpYbHpMbXhsYm1kMGFDQXRJREVnUHlCdmJsWmhiR2xrWVhScGIyNURiMjF3YkdWMFpTQTZJRzUxYkd3cE8xeHVJQ0FnSUgwdVltbHVaQ2gwYUdsektTazdYRzVjYmlBZ0lDQXZMeUJKWmlCMGFHVnlaU0JoY21VZ2JtOGdhVzV3ZFhSekxDQnpaWFFnYzNSaGRHVWdkMmhsY21VZ1ptOXliU0JwY3lCeVpXRmtlU0IwYnlCMGNtbG5aMlZ5WEc0Z0lDQWdMeThnWTJoaGJtZGxJR1YyWlc1MExpQk9aWGNnYVc1d2RYUnpJRzFwWjJoMElHSmxJR0ZrWkdWa0lHeGhkR1Z5WEc0Z0lDQWdhV1lnS0NGcGJuQjFkRXRsZVhNdWJHVnVaM1JvSUNZbUlIUm9hWE11YVhOTmIzVnVkR1ZrS0NrcElIdGNiaUFnSUNBZ0lIUm9hWE11YzJWMFUzUmhkR1VvZTF4dUlDQWdJQ0FnSUNCallXNURhR0Z1WjJVNklIUnlkV1ZjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdkx5Qk5aWFJvYjJRZ2NIVjBJRzl1SUdWaFkyZ2dhVzV3ZFhRZ1kyOXRjRzl1Wlc1MElIUnZJSEpsWjJsemRHVnlYRzRnSUM4dklHbDBjMlZzWmlCMGJ5QjBhR1VnWm05eWJWeHVJQ0JoZEhSaFkyaFViMFp2Y20wNklHWjFibU4wYVc5dUlDaGpiMjF3YjI1bGJuUXBJSHRjYmlBZ0lDQjBhR2x6TG1sdWNIVjBjMXRqYjIxd2IyNWxiblF1Y0hKdmNITXVibUZ0WlYwZ1BTQmpiMjF3YjI1bGJuUTdYRzRnSUNBZ2RHaHBjeTV0YjJSbGJGdGpiMjF3YjI1bGJuUXVjSEp2Y0hNdWJtRnRaVjBnUFNCamIyMXdiMjVsYm5RdWMzUmhkR1V1WDNaaGJIVmxPMXh1SUNBZ0lIUm9hWE11ZG1Gc2FXUmhkR1VvWTI5dGNHOXVaVzUwS1R0Y2JpQWdmU3hjYmx4dUlDQXZMeUJOWlhSb2IyUWdjSFYwSUc5dUlHVmhZMmdnYVc1d2RYUWdZMjl0Y0c5dVpXNTBJSFJ2SUhWdWNtVm5hWE4wWlhKY2JpQWdMeThnYVhSelpXeG1JR1p5YjIwZ2RHaGxJR1p2Y20xY2JpQWdaR1YwWVdOb1JuSnZiVVp2Y20wNklHWjFibU4wYVc5dUlDaGpiMjF3YjI1bGJuUXBJSHRjYmlBZ0lDQmtaV3hsZEdVZ2RHaHBjeTVwYm5CMWRITmJZMjl0Y0c5dVpXNTBMbkJ5YjNCekxtNWhiV1ZkTzF4dUlDQWdJR1JsYkdWMFpTQjBhR2x6TG0xdlpHVnNXMk52YlhCdmJtVnVkQzV3Y205d2N5NXVZVzFsWFR0Y2JpQWdmU3hjYmlBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlBb0tTQjdYRzVjYmlBZ0lDQnlaWFIxY200Z1VtVmhZM1F1UkU5TkxtWnZjbTBvZTF4dUlDQWdJQ0FnSUNCdmJsTjFZbTFwZERvZ2RHaHBjeTV6ZFdKdGFYUXNYRzRnSUNBZ0lDQWdJR05zWVhOelRtRnRaVG9nZEdocGN5NXdjbTl3Y3k1amJHRnpjMDVoYldWY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtTm9hV3hrY21WdVhHNGdJQ0FnS1R0Y2JseHVJQ0I5WEc1OUtUdGNibHh1YVdZZ0tDRm5iRzlpWVd3dVpYaHdiM0owY3lBbUppQWhaMnh2WW1Gc0xtMXZaSFZzWlNBbUppQW9JV2RzYjJKaGJDNWtaV1pwYm1VZ2ZId2dJV2RzYjJKaGJDNWtaV1pwYm1VdVlXMWtLU2tnZTF4dUlDQm5iRzlpWVd3dVJtOXliWE41SUQwZ1JtOXliWE41TzF4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRVp2Y20xemVUdGNiaUpkZlE9PSIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSAndmFsdWUnIGluIHRoaXMucHJvcHMgPyB0aGlzLnByb3BzLnZhbHVlIDogJyc7XG4gICAgcmV0dXJuIHtcbiAgICAgIF92YWx1ZTogdmFsdWUsXG4gICAgICBfaXNWYWxpZDogdHJ1ZSxcbiAgICAgIF9pc1ByaXN0aW5lOiB0cnVlLFxuICAgICAgX3ByaXN0aW5lVmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgfSxcbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9ucyh0aGlzLnByb3BzLnZhbGlkYXRpb25zLCB0aGlzLnByb3BzLnJlcXVpcmVkKTtcbiAgICAgIHRoaXMucHJvcHMuX2F0dGFjaFRvRm9ybSh0aGlzKTtcbiAgICB9LmJpbmQodGhpcyk7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtIElucHV0IHJlcXVpcmVzIGEgbmFtZSBwcm9wZXJ0eSB3aGVuIHVzZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuX2F0dGFjaFRvRm9ybSkge1xuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNNb3VudGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLl9hdHRhY2hUb0Zvcm0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm0gTWl4aW4gcmVxdWlyZXMgY29tcG9uZW50IHRvIGJlIG5lc3RlZCBpbiBhIEZvcm0nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25maWd1cmUoKTtcbiAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZSgpO1xuXG4gIH0sXG5cbiAgLy8gV2UgaGF2ZSB0byBtYWtlIHRoZSB2YWxpZGF0ZSBtZXRob2QgaXMga2VwdCB3aGVuIG5ldyBwcm9wcyBhcmUgYWRkZWRcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24gKG5leHRQcm9wcykge1xuICAgIG5leHRQcm9wcy5fYXR0YWNoVG9Gb3JtID0gdGhpcy5wcm9wcy5fYXR0YWNoVG9Gb3JtO1xuICAgIG5leHRQcm9wcy5fZGV0YWNoRnJvbUZvcm0gPSB0aGlzLnByb3BzLl9kZXRhY2hGcm9tRm9ybTtcbiAgICBuZXh0UHJvcHMuX3ZhbGlkYXRlID0gdGhpcy5wcm9wcy5fdmFsaWRhdGU7XG4gICAgdGhpcy5zZXRWYWxpZGF0aW9ucyhuZXh0UHJvcHMudmFsaWRhdGlvbnMsIG5leHRQcm9wcy5yZXF1aXJlZCk7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbiAocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcblxuICAgIHZhciBpc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlICYmIChcbiAgICAgICAgICB0aGlzLnN0YXRlLl92YWx1ZSA9PT0gcHJldlByb3BzLnZhbHVlIHx8XG5cbiAgICAgICAgICAvLyBTaW5jZSB1bmRlZmluZWQgaXMgY29udmVydGVkIHRvIGVtcHR5IHN0cmluZyB3ZSBoYXZlIHRvXG4gICAgICAgICAgLy8gY2hlY2sgdGhhdCBzcGVjaWZpY2FsbHlcbiAgICAgICAgICAodGhpcy5zdGF0ZS5fdmFsdWUgPT09ICcnICYmIHByZXZQcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgfS5iaW5kKHRoaXMpO1xuXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9ucyBoYXMgY2hhbmdlZCBvciBzb21ldGhpbmcgb3V0c2lkZSBjaGFuZ2VzIFxuICAgIC8vIHRoZSB2YWx1ZSwgc2V0IHRoZSB2YWx1ZSBhZ2FpbiBydW5uaW5nIGEgdmFsaWRhdGlvblxuXG4gICAgaWYgKHByZXZQcm9wcy52YWxpZGF0aW9ucyAhPT0gdGhpcy5wcm9wcy52YWxpZGF0aW9ucyB8fCBpc1ZhbHVlQ2hhbmdlZCgpKSB7XG4gICAgICB2YXIgdmFsdWUgPSAndmFsdWUnIGluIHRoaXMucHJvcHMgPyB0aGlzLnByb3BzLnZhbHVlIDogJyc7XG4gICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gRGV0YWNoIGl0IHdoZW4gY29tcG9uZW50IHVubW91bnRzXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5wcm9wcy5fZGV0YWNoRnJvbUZvcm0odGhpcyk7XG4gIH0sXG5cbiAgc2V0VmFsaWRhdGlvbnM6IGZ1bmN0aW9uICh2YWxpZGF0aW9ucywgcmVxdWlyZWQpIHtcblxuICAgIC8vIEFkZCB2YWxpZGF0aW9ucyB0byB0aGUgc3RvcmUgaXRzZWxmIGFzIHRoZSBwcm9wcyBvYmplY3QgY2FuIG5vdCBiZSBtb2RpZmllZFxuICAgIHRoaXMuX3ZhbGlkYXRpb25zID0gdmFsaWRhdGlvbnMgfHwgJyc7XG5cbiAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25zID0gdmFsaWRhdGlvbnMgPyB2YWxpZGF0aW9ucyArICcsJyA6ICcnO1xuICAgICAgdGhpcy5fdmFsaWRhdGlvbnMgKz0gJ2lzVmFsdWUnO1xuICAgIH1cblxuICB9LFxuXG4gIC8vIFdlIHZhbGlkYXRlIGFmdGVyIHRoZSB2YWx1ZSBoYXMgYmVlbiBzZXRcbiAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgX3ZhbHVlOiB2YWx1ZSxcbiAgICAgIF9pc1ByaXN0aW5lOiBmYWxzZVxuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMucHJvcHMuX3ZhbGlkYXRlKHRoaXMpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0sXG4gIHJlc2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIF92YWx1ZTogdGhpcy5zdGF0ZS5fcHJpc3RpbmVWYWx1ZSxcbiAgICAgIF9pc1ByaXN0aW5lOiB0cnVlXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5wcm9wcy5fdmFsaWRhdGUodGhpcyk7XG4gICAgfSk7XG4gIH0sXG4gIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuX3ZhbHVlO1xuICB9LFxuICBoYXNWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLl92YWx1ZSAhPT0gJyc7XG4gIH0sXG4gIGdldEVycm9yTWVzc2FnZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSB8fCB0aGlzLnNob3dSZXF1aXJlZCgpID8gbnVsbCA6IHRoaXMuc3RhdGUuX3NlcnZlckVycm9yIHx8IHRoaXMucHJvcHMudmFsaWRhdGlvbkVycm9yO1xuICB9LFxuICBpc0Zvcm1EaXNhYmxlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLl9pc0Zvcm1EaXNhYmxlZCgpO1xuICB9LFxuICBpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuX2lzVmFsaWQ7XG4gIH0sXG4gIGlzUHJpc3RpbmU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5faXNQcmlzdGluZTtcbiAgfSxcbiAgaXNSZXF1aXJlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXRoaXMucHJvcHMucmVxdWlyZWQ7XG4gIH0sXG4gIHNob3dSZXF1aXJlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQoKSAmJiB0aGlzLnN0YXRlLl92YWx1ZSA9PT0gJyc7XG4gIH0sXG4gIHNob3dFcnJvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhdGhpcy5zaG93UmVxdWlyZWQoKSAmJiAhdGhpcy5zdGF0ZS5faXNWYWxpZDtcbiAgfSxcbiAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5faXNWYWxpZFZhbHVlLmNhbGwobnVsbCwgdGhpcywgdmFsdWUpO1xuICB9XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lMMVZ6WlhKekwyTm9jbWx6ZEdsaGJtRnNabTl1YVM5RWIyTjFiV1Z1ZEhNdlpHVjJMMlp2Y20xemVTMXlaV0ZqZEM5emNtTXZUV2w0YVc0dWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk5VmMyVnljeTlqYUhKcGMzUnBZVzVoYkdadmJta3ZSRzlqZFcxbGJuUnpMMlJsZGk5bWIzSnRjM2t0Y21WaFkzUXZjM0pqTDAxcGVHbHVMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVYzdSVUZEWml4bFFVRmxMRVZCUVVVc1dVRkJXVHRKUVVNelFpeEpRVUZKTEV0QlFVc3NSMEZCUnl4UFFVRlBMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRE1VUXNUMEZCVHp0TlFVTk1MRTFCUVUwc1JVRkJSU3hMUVVGTE8wMUJRMklzVVVGQlVTeEZRVUZGTEVsQlFVazdUVUZEWkN4WFFVRlhMRVZCUVVVc1NVRkJTVHROUVVOcVFpeGpRVUZqTEVWQlFVVXNTMEZCU3p0TFFVTjBRaXhEUVVGRE8wZEJRMGc3UVVGRFNDeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxGbEJRVms3TzBsQlJUbENMRWxCUVVrc1UwRkJVeXhIUVVGSExGbEJRVms3VFVGRE1VSXNTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzAxQlEycEZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNKRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wbEJSV0lzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRk8wMUJRM0JDTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc0swTkJRU3RETEVOQlFVTXNRMEZCUXp0QlFVTjJSU3hMUVVGTE96dEpRVVZFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHRkJRV0VzUlVGQlJUdE5RVU0zUWl4UFFVRlBMRlZCUVZVc1EwRkJReXhaUVVGWk8xRkJRelZDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzVDBGQlR6dFJRVU01UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGhRVUZoTEVWQlFVVTdWVUZETjBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eHpSRUZCYzBRc1EwRkJReXhEUVVGRE8xTkJRM3BGTzFGQlEwUXNVMEZCVXl4RlFVRkZMRU5CUVVNN1QwRkRZaXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVOc1FqdEJRVU5NTEVsQlFVa3NVMEZCVXl4RlFVRkZMRU5CUVVNN08wRkJSV2hDTEVkQlFVYzdRVUZEU0RzN1JVRkZSU3g1UWtGQmVVSXNSVUZCUlN4VlFVRlZMRk5CUVZNc1JVRkJSVHRKUVVNNVF5eFRRVUZUTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTeERRVUZETzBsQlEyNUVMRk5CUVZNc1EwRkJReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNN1NVRkRka1FzVTBGQlV5eERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU16UXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUTBGQlF5eFhRVUZYTEVWQlFVVXNVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMjVGTEVkQlFVYzdPMEZCUlVnc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4VlFVRlZMRk5CUVZNc1JVRkJSU3hUUVVGVExFVkJRVVU3TzBGQlJYUkVMRWxCUVVrc1NVRkJTU3hqUVVGakxFZEJRVWNzV1VGQldUczdUVUZGTDBJN1VVRkRSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NTMEZCU3l4VFFVRlRMRU5CUVVNc1MwRkJTenRCUVVNMVF5eFZRVUZWTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hMUVVGTExGTkJRVk1zUTBGQlF5eExRVUZMTzBGQlF5OURPMEZCUTBFN08xZEJSVmNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUVVzc1JVRkJSU3hKUVVGSkxGTkJRVk1zUTBGQlF5eExRVUZMTEV0QlFVc3NVMEZCVXl4RFFVRkRPMU5CUXpWRU8wRkJRMVFzVVVGQlVUczdRVUZGVWl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEycENPMEZCUTBFN1FVRkRRVHRCUVVOQk96dEpRVVZKTEVsQlFVa3NVMEZCVXl4RFFVRkRMRmRCUVZjc1MwRkJTeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NTVUZCU1N4alFVRmpMRVZCUVVVc1JVRkJSVHROUVVONFJTeEpRVUZKTEV0QlFVc3NSMEZCUnl4UFFVRlBMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03VFVGRE1VUXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dExRVU4wUWp0QlFVTk1MRWRCUVVjN1FVRkRTRHM3UlVGRlJTeHZRa0ZCYjBJc1JVRkJSU3haUVVGWk8wbEJRMmhETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzSkRMRWRCUVVjN08wRkJSVWdzUlVGQlJTeGpRVUZqTEVWQlFVVXNWVUZCVlN4WFFVRlhMRVZCUVVVc1VVRkJVU3hGUVVGRk8wRkJRMjVFT3p0QlFVVkJMRWxCUVVrc1NVRkJTU3hEUVVGRExGbEJRVmtzUjBGQlJ5eFhRVUZYTEVsQlFVa3NSVUZCUlN4RFFVRkRPenRKUVVWMFF5eEpRVUZKTEZGQlFWRXNSVUZCUlR0TlFVTmFMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzVjBGQlZ5eEhRVUZITEZkQlFWY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8wMUJRM3BFTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWxCUVVrc1UwRkJVeXhEUVVGRE8wRkJRM0pETEV0QlFVczdPMEZCUlV3c1IwRkJSenRCUVVOSU96dEZRVVZGTEZGQlFWRXNSVUZCUlN4VlFVRlZMRXRCUVVzc1JVRkJSVHRKUVVONlFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMDFCUTFvc1RVRkJUU3hGUVVGRkxFdEJRVXM3VFVGRFlpeFhRVUZYTEVWQlFVVXNTMEZCU3p0TFFVTnVRaXhGUVVGRkxGbEJRVms3VFVGRFlpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU0xUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBkQlEyWTdSVUZEUkN4VlFVRlZMRVZCUVVVc1dVRkJXVHRKUVVOMFFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMDFCUTFvc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNZMEZCWXp0TlFVTnFReXhYUVVGWExFVkJRVVVzU1VGQlNUdExRVU5zUWl4RlFVRkZMRmxCUVZrN1RVRkRZaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNMVFpeERRVUZETEVOQlFVTTdSMEZEU2p0RlFVTkVMRkZCUVZFc1JVRkJSU3haUVVGWk8wbEJRM0JDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UjBGRE1VSTdSVUZEUkN4UlFVRlJMRVZCUVVVc1dVRkJXVHRKUVVOd1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hMUVVGTExFVkJRVVVzUTBGQlF6dEhRVU5xUXp0RlFVTkVMR1ZCUVdVc1JVRkJSU3haUVVGWk8wbEJRek5DTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNSMEZCUnl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU03UjBGRE4wYzdSVUZEUkN4alFVRmpMRVZCUVVVc1dVRkJXVHRKUVVNeFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hGUVVGRkxFTkJRVU03UjBGRGNrTTdSVUZEUkN4UFFVRlBMRVZCUVVVc1dVRkJXVHRKUVVOdVFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8wZEJRelZDTzBWQlEwUXNWVUZCVlN4RlFVRkZMRmxCUVZrN1NVRkRkRUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJRenRIUVVNdlFqdEZRVU5FTEZWQlFWVXNSVUZCUlN4WlFVRlpPMGxCUTNSQ0xFOUJRVThzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRE8wZEJRemxDTzBWQlEwUXNXVUZCV1N4RlFVRkZMRmxCUVZrN1NVRkRlRUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NSVUZCUlN4RFFVRkRPMGRCUTNSRU8wVkJRMFFzVTBGQlV5eEZRVUZGTEZsQlFWazdTVUZEY2tJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETzBkQlEzSkVPMFZCUTBRc1dVRkJXU3hGUVVGRkxGVkJRVlVzUzBGQlN5eEZRVUZGTzBsQlF6ZENMRTlCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdSMEZEZWtRN1EwRkRSaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2liVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjdYRzRnSUdkbGRFbHVhWFJwWVd4VGRHRjBaVG9nWm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDZDJZV3gxWlNjZ2FXNGdkR2hwY3k1d2NtOXdjeUEvSUhSb2FYTXVjSEp2Y0hNdWRtRnNkV1VnT2lBbkp6dGNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnWDNaaGJIVmxPaUIyWVd4MVpTeGNiaUFnSUNBZ0lGOXBjMVpoYkdsa09pQjBjblZsTEZ4dUlDQWdJQ0FnWDJselVISnBjM1JwYm1VNklIUnlkV1VzWEc0Z0lDQWdJQ0JmY0hKcGMzUnBibVZXWVd4MVpUb2dkbUZzZFdWY2JpQWdJQ0I5TzF4dUlDQjlMRnh1SUNCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5RNklHWjFibU4wYVc5dUlDZ3BJSHRjYmx4dUlDQWdJSFpoY2lCamIyNW1hV2QxY21VZ1BTQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTmxkRlpoYkdsa1lYUnBiMjV6S0hSb2FYTXVjSEp2Y0hNdWRtRnNhV1JoZEdsdmJuTXNJSFJvYVhNdWNISnZjSE11Y21WeGRXbHlaV1FwTzF4dUlDQWdJQ0FnZEdocGN5NXdjbTl3Y3k1ZllYUjBZV05vVkc5R2IzSnRLSFJvYVhNcE8xeHVJQ0FnSUgwdVltbHVaQ2gwYUdsektUdGNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NXdjbTl3Y3k1dVlXMWxLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFp2Y20wZ1NXNXdkWFFnY21WeGRXbHlaWE1nWVNCdVlXMWxJSEJ5YjNCbGNuUjVJSGRvWlc0Z2RYTmxaQ2NwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTV3Y205d2N5NWZZWFIwWVdOb1ZHOUdiM0p0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYzJWMFZHbHRaVzkxZENobWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaGRHaHBjeTVwYzAxdmRXNTBaV1FvS1NrZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNCcFppQW9JWFJvYVhNdWNISnZjSE11WDJGMGRHRmphRlJ2Um05eWJTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUm05eWJTQk5hWGhwYmlCeVpYRjFhWEpsY3lCamIyMXdiMjVsYm5RZ2RHOGdZbVVnYm1WemRHVmtJR2x1SUdFZ1JtOXliU2NwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibVpwWjNWeVpTZ3BPMXh1SUNBZ0lDQWdmUzVpYVc1a0tIUm9hWE1wTENBd0tUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dVptbG5kWEpsS0NrN1hHNWNiaUFnZlN4Y2JseHVJQ0F2THlCWFpTQm9ZWFpsSUhSdklHMWhhMlVnZEdobElIWmhiR2xrWVhSbElHMWxkR2h2WkNCcGN5QnJaWEIwSUhkb1pXNGdibVYzSUhCeWIzQnpJR0Z5WlNCaFpHUmxaRnh1SUNCamIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6T2lCbWRXNWpkR2x2YmlBb2JtVjRkRkJ5YjNCektTQjdYRzRnSUNBZ2JtVjRkRkJ5YjNCekxsOWhkSFJoWTJoVWIwWnZjbTBnUFNCMGFHbHpMbkJ5YjNCekxsOWhkSFJoWTJoVWIwWnZjbTA3WEc0Z0lDQWdibVY0ZEZCeWIzQnpMbDlrWlhSaFkyaEdjbTl0Um05eWJTQTlJSFJvYVhNdWNISnZjSE11WDJSbGRHRmphRVp5YjIxR2IzSnRPMXh1SUNBZ0lHNWxlSFJRY205d2N5NWZkbUZzYVdSaGRHVWdQU0IwYUdsekxuQnliM0J6TGw5MllXeHBaR0YwWlR0Y2JpQWdJQ0IwYUdsekxuTmxkRlpoYkdsa1lYUnBiMjV6S0c1bGVIUlFjbTl3Y3k1MllXeHBaR0YwYVc5dWN5d2dibVY0ZEZCeWIzQnpMbkpsY1hWcGNtVmtLVHRjYmlBZ2ZTeGNibHh1SUNCamIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVNklHWjFibU4wYVc5dUlDaHdjbVYyVUhKdmNITXNJSEJ5WlhaVGRHRjBaU2tnZTF4dVhHNGdJQ0FnZG1GeUlHbHpWbUZzZFdWRGFHRnVaMlZrSUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdYRzRnSUNBZ0lDQnlaWFIxY200Z0tGeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeWIzQnpMblpoYkhWbElDRTlQU0J3Y21WMlVISnZjSE11ZG1Gc2RXVWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11YzNSaGRHVXVYM1poYkhWbElEMDlQU0J3Y21WMlVISnZjSE11ZG1Gc2RXVWdmSHhjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRk5wYm1ObElIVnVaR1ZtYVc1bFpDQnBjeUJqYjI1MlpYSjBaV1FnZEc4Z1pXMXdkSGtnYzNSeWFXNW5JSGRsSUdoaGRtVWdkRzljYmlBZ0lDQWdJQ0FnSUNBdkx5QmphR1ZqYXlCMGFHRjBJSE53WldOcFptbGpZV3hzZVZ4dUlDQWdJQ0FnSUNBZ0lDaDBhR2x6TG5OMFlYUmxMbDkyWVd4MVpTQTlQVDBnSnljZ0ppWWdjSEpsZGxCeWIzQnpMblpoYkhWbElEMDlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNrN1hHNWNiaUFnSUNCOUxtSnBibVFvZEdocGN5azdYRzVjYmx4dUlDQWdJQzh2SUVsbUlIWmhiR2xrWVhScGIyNXpJR2hoY3lCamFHRnVaMlZrSUc5eUlITnZiV1YwYUdsdVp5QnZkWFJ6YVdSbElHTm9ZVzVuWlhNZ1hHNGdJQ0FnTHk4Z2RHaGxJSFpoYkhWbExDQnpaWFFnZEdobElIWmhiSFZsSUdGbllXbHVJSEoxYm01cGJtY2dZU0IyWVd4cFpHRjBhVzl1WEc1Y2JpQWdJQ0JwWmlBb2NISmxkbEJ5YjNCekxuWmhiR2xrWVhScGIyNXpJQ0U5UFNCMGFHbHpMbkJ5YjNCekxuWmhiR2xrWVhScGIyNXpJSHg4SUdselZtRnNkV1ZEYUdGdVoyVmtLQ2twSUh0Y2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlDZDJZV3gxWlNjZ2FXNGdkR2hwY3k1d2NtOXdjeUEvSUhSb2FYTXVjSEp2Y0hNdWRtRnNkV1VnT2lBbkp6dGNiaUFnSUNBZ0lIUm9hWE11YzJWMFZtRnNkV1VvZG1Gc2RXVXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2THlCRVpYUmhZMmdnYVhRZ2QyaGxiaUJqYjIxd2IyNWxiblFnZFc1dGIzVnVkSE5jYmlBZ1kyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUTZJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0IwYUdsekxuQnliM0J6TGw5a1pYUmhZMmhHY205dFJtOXliU2gwYUdsektUdGNiaUFnZlN4Y2JseHVJQ0J6WlhSV1lXeHBaR0YwYVc5dWN6b2dablZ1WTNScGIyNGdLSFpoYkdsa1lYUnBiMjV6TENCeVpYRjFhWEpsWkNrZ2UxeHVYRzRnSUNBZ0x5OGdRV1JrSUhaaGJHbGtZWFJwYjI1eklIUnZJSFJvWlNCemRHOXlaU0JwZEhObGJHWWdZWE1nZEdobElIQnliM0J6SUc5aWFtVmpkQ0JqWVc0Z2JtOTBJR0psSUcxdlpHbG1hV1ZrWEc0Z0lDQWdkR2hwY3k1ZmRtRnNhV1JoZEdsdmJuTWdQU0IyWVd4cFpHRjBhVzl1Y3lCOGZDQW5KenRjYmx4dUlDQWdJR2xtSUNoeVpYRjFhWEpsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmZG1Gc2FXUmhkR2x2Ym5NZ1BTQjJZV3hwWkdGMGFXOXVjeUEvSUhaaGJHbGtZWFJwYjI1eklDc2dKeXduSURvZ0p5YzdYRzRnSUNBZ0lDQjBhR2x6TGw5MllXeHBaR0YwYVc5dWN5QXJQU0FuYVhOV1lXeDFaU2M3WEc0Z0lDQWdmVnh1WEc0Z0lIMHNYRzVjYmlBZ0x5OGdWMlVnZG1Gc2FXUmhkR1VnWVdaMFpYSWdkR2hsSUhaaGJIVmxJR2hoY3lCaVpXVnVJSE5sZEZ4dUlDQnpaWFJXWVd4MVpUb2dablZ1WTNScGIyNGdLSFpoYkhWbEtTQjdYRzRnSUNBZ2RHaHBjeTV6WlhSVGRHRjBaU2g3WEc0Z0lDQWdJQ0JmZG1Gc2RXVTZJSFpoYkhWbExGeHVJQ0FnSUNBZ1gybHpVSEpwYzNScGJtVTZJR1poYkhObFhHNGdJQ0FnZlN3Z1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2NtOXdjeTVmZG1Gc2FXUmhkR1VvZEdocGN5azdYRzRnSUNBZ2ZTNWlhVzVrS0hSb2FYTXBLVHRjYmlBZ2ZTeGNiaUFnY21WelpYUldZV3gxWlRvZ1puVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lIUm9hWE11YzJWMFUzUmhkR1VvZTF4dUlDQWdJQ0FnWDNaaGJIVmxPaUIwYUdsekxuTjBZWFJsTGw5d2NtbHpkR2x1WlZaaGJIVmxMRnh1SUNBZ0lDQWdYMmx6VUhKcGMzUnBibVU2SUhSeWRXVmNiaUFnSUNCOUxDQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxuQnliM0J6TGw5MllXeHBaR0YwWlNoMGFHbHpLVHRjYmlBZ0lDQjlLVHRjYmlBZ2ZTeGNiaUFnWjJWMFZtRnNkV1U2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXpkR0YwWlM1ZmRtRnNkV1U3WEc0Z0lIMHNYRzRnSUdoaGMxWmhiSFZsT2lCbWRXNWpkR2x2YmlBb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjM1JoZEdVdVgzWmhiSFZsSUNFOVBTQW5KenRjYmlBZ2ZTeGNiaUFnWjJWMFJYSnliM0pOWlhOellXZGxPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFYTldZV3hwWkNncElIeDhJSFJvYVhNdWMyaHZkMUpsY1hWcGNtVmtLQ2tnUHlCdWRXeHNJRG9nZEdocGN5NXpkR0YwWlM1ZmMyVnlkbVZ5UlhKeWIzSWdmSHdnZEdocGN5NXdjbTl3Y3k1MllXeHBaR0YwYVc5dVJYSnliM0k3WEc0Z0lIMHNYRzRnSUdselJtOXliVVJwYzJGaWJHVmtPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNISnZjSE11WDJselJtOXliVVJwYzJGaWJHVmtLQ2s3WEc0Z0lIMHNYRzRnSUdselZtRnNhV1E2SUdaMWJtTjBhVzl1SUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXpkR0YwWlM1ZmFYTldZV3hwWkR0Y2JpQWdmU3hjYmlBZ2FYTlFjbWx6ZEdsdVpUb2dablZ1WTNScGIyNGdLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5OMFlYUmxMbDlwYzFCeWFYTjBhVzVsTzF4dUlDQjlMRnh1SUNCcGMxSmxjWFZwY21Wa09pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlDRWhkR2hwY3k1d2NtOXdjeTV5WlhGMWFYSmxaRHRjYmlBZ2ZTeGNiaUFnYzJodmQxSmxjWFZwY21Wa09pQm1kVzVqZEdsdmJpQW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YVhOU1pYRjFhWEpsWkNncElDWW1JSFJvYVhNdWMzUmhkR1V1WDNaaGJIVmxJRDA5UFNBbkp6dGNiaUFnZlN4Y2JpQWdjMmh2ZDBWeWNtOXlPaUJtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ0YwYUdsekxuTm9iM2RTWlhGMWFYSmxaQ2dwSUNZbUlDRjBhR2x6TG5OMFlYUmxMbDlwYzFaaGJHbGtPMXh1SUNCOUxGeHVJQ0JwYzFaaGJHbGtWbUZzZFdVNklHWjFibU4wYVc5dUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuQnliM0J6TGw5cGMxWmhiR2xrVm1Gc2RXVXVZMkZzYkNodWRXeHNMQ0IwYUdsekxDQjJZV3gxWlNrN1hHNGdJSDFjYm4wN1hHNGlYWDA9IiwidmFyIGNzcmZUb2tlblNlbGVjdG9yID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpIDogbnVsbDtcblxudmFyIHRvVVJMRW5jb2RlZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBrZXksIGxpc3QpIHtcbiAgdmFyIGxpc3QgPSBsaXN0IHx8IFtdO1xuICBpZiAodHlwZW9mIChlbGVtZW50KSA9PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGlkeCBpbiBlbGVtZW50KVxuICAgICAgdG9VUkxFbmNvZGVkKGVsZW1lbnRbaWR4XSwga2V5ID8ga2V5ICsgJ1snICsgaWR4ICsgJ10nIDogaWR4LCBsaXN0KTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0LnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVsZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gbGlzdC5qb2luKCcmJyk7XG59O1xuXG52YXIgcmVxdWVzdCA9IGZ1bmN0aW9uIChtZXRob2QsIHVybCwgZGF0YSwgY29udGVudFR5cGUsIGhlYWRlcnMpIHtcblxuICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50VHlwZSA9PT0gJ3VybGVuY29kZWQnID8gJ2FwcGxpY2F0aW9uLycgKyBjb250ZW50VHlwZS5yZXBsYWNlKCd1cmxlbmNvZGVkJywgJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIDogJ2FwcGxpY2F0aW9uL2pzb24nO1xuICBkYXRhID0gY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJyA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdG9VUkxFbmNvZGVkKGRhdGEpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgIHhoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcblxuICAgICAgaWYgKCEhY3NyZlRva2VuU2VsZWN0b3IgJiYgISFjc3JmVG9rZW5TZWxlY3Rvci5jb250ZW50KSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVG9rZW4nLCBjc3JmVG9rZW5TZWxlY3Rvci5jb250ZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHBhc3NlZCBoZWFkZXJzXG4gICAgICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBoZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgfSk7XG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQgPyBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB4aHIuc2VuZChkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhcnJheXNEaWZmZXI6IGZ1bmN0aW9uIChhcnJheUEsIGFycmF5Qikge1xuICAgIHZhciBpc0RpZmZlcmVudCA9IGZhbHNlO1xuICAgIGlmIChhcnJheUEubGVuZ3RoICE9PSBhcnJheUIubGVuZ3RoKSB7XG4gICAgICBpc0RpZmZlcmVudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5QS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICBpZiAoaXRlbSAhPT0gYXJyYXlCW2luZGV4XSkge1xuICAgICAgICAgIGlzRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0RpZmZlcmVudDtcbiAgfSxcbiAgYWpheDoge1xuICAgIHBvc3Q6IHJlcXVlc3QuYmluZChudWxsLCAnUE9TVCcpLFxuICAgIHB1dDogcmVxdWVzdC5iaW5kKG51bGwsICdQVVQnKVxuICB9XG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lMMVZ6WlhKekwyTm9jbWx6ZEdsaGJtRnNabTl1YVM5RWIyTjFiV1Z1ZEhNdlpHVjJMMlp2Y20xemVTMXlaV0ZqZEM5emNtTXZkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVnpJanBiSWk5VmMyVnljeTlqYUhKcGMzUnBZVzVoYkdadmJta3ZSRzlqZFcxbGJuUnpMMlJsZGk5bWIzSnRjM2t0Y21WaFkzUXZjM0pqTDNWMGFXeHpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFbEJRVWtzYVVKQlFXbENMRWRCUVVjc1QwRkJUeXhSUVVGUkxFbEJRVWtzVjBGQlZ5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc2VVSkJRWGxDTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN08wRkJSV3hJTEVsQlFVa3NXVUZCV1N4SFFVRkhMRlZCUVZVc1QwRkJUeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVTdSVUZETDBNc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXp0RlFVTjBRaXhKUVVGSkxGRkJRVkVzVDBGQlR5eERRVUZETEVsQlFVa3NVVUZCVVN4RlFVRkZPMGxCUTJoRExFdEJRVXNzU1VGQlNTeEhRVUZITEVsQlFVa3NUMEZCVHp0TlFVTnlRaXhaUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBkQlEzWkZMRTFCUVUwN1NVRkRUQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRIUVVOd1JEdEZRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU40UWl4RFFVRkRMRU5CUVVNN08wRkJSVVlzU1VGQlNTeFBRVUZQTEVkQlFVY3NWVUZCVlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFhRVUZYTEVWQlFVVXNUMEZCVHl4RlFVRkZPenRGUVVVdlJDeEpRVUZKTEZkQlFWY3NSMEZCUnl4WFFVRlhMRXRCUVVzc1dVRkJXU3hIUVVGSExHTkJRV01zUjBGQlJ5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4SFFVRkhMR3RDUVVGclFpeERRVUZETzBGQlEzQktMRVZCUVVVc1NVRkJTU3hIUVVGSExGZEJRVmNzUzBGQlN5eHJRa0ZCYTBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdSVUZGZEVZc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZWTEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVN1NVRkROVU1zU1VGQlNUdE5RVU5HTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1kwRkJZeXhGUVVGRkxFTkJRVU03VFVGREwwSXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMDFCUXpWQ0xFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhSUVVGUkxFVkJRVVVzYTBKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVONlJDeE5RVUZOTEVkQlFVY3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eGpRVUZqTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNN08wMUJSV3hFTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2xDUVVGcFFpeEpRVUZKTEVOQlFVTXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eFBRVUZQTEVWQlFVVTdVVUZEZEVRc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMR05CUVdNc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVONFJTeFBRVUZQTzBGQlExQTdPMDFCUlUwc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hOUVVGTkxFVkJRVVU3VVVGRE4wTXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU4wUkN4UFFVRlBMRU5CUVVNc1EwRkJRenM3VFVGRlNDeEhRVUZITEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzV1VGQldUdEJRVU16UXl4UlFVRlJMRWxCUVVrc1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eERRVUZETEVWQlFVVTdPMVZCUlhoQ0xFbEJRVWs3V1VGRFJpeEpRVUZKTEZGQlFWRXNSMEZCUnl4SFFVRkhMRU5CUVVNc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU4wUlN4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhGUVVGRk8yTkJRM3BETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVOdVFpeE5RVUZOTzJOQlEwd3NUVUZCVFN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRMnhDTzFkQlEwWXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRaUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjBRaXhYUVVGWE96dFRRVVZHTzA5QlEwWXNRMEZCUXp0TlFVTkdMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTMEZEYUVJc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdE5RVU5XTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVOWU8wZEJRMFlzUTBGQlF5eERRVUZETzBGQlEwd3NRMEZCUXl4RFFVRkRPenRCUVVWR0xFMUJRVTBzUTBGQlF5eFBRVUZQTEVkQlFVYzdSVUZEWml4WlFVRlpMRVZCUVVVc1ZVRkJWU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTzBsQlEzUkRMRWxCUVVrc1YwRkJWeXhIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU40UWl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlR0TlFVTnVReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETzB0QlEzQkNMRTFCUVUwN1RVRkRUQ3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSVHRSUVVOd1F5eEpRVUZKTEVsQlFVa3NTMEZCU3l4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3VlVGRE1VSXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJRenRUUVVOd1FqdFBRVU5HTEVOQlFVTXNRMEZCUXp0TFFVTktPMGxCUTBRc1QwRkJUeXhYUVVGWExFTkJRVU03UjBGRGNFSTdSVUZEUkN4SlFVRkpMRVZCUVVVN1NVRkRTaXhKUVVGSkxFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRE8wbEJRMmhETEVkQlFVY3NSVUZCUlN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTTdSMEZETDBJN1EwRkRSaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lkbUZ5SUdOemNtWlViMnRsYmxObGJHVmpkRzl5SUQwZ2RIbHdaVzltSUdSdlkzVnRaVzUwSUNFOUlDZDFibVJsWm1sdVpXUW5JRDhnWkc5amRXMWxiblF1Y1hWbGNubFRaV3hsWTNSdmNpZ25iV1YwWVZ0dVlXMWxQVndpWTNOeVppMTBiMnRsYmx3aVhTY3BJRG9nYm5Wc2JEdGNibHh1ZG1GeUlIUnZWVkpNUlc1amIyUmxaQ0E5SUdaMWJtTjBhVzl1SUNobGJHVnRaVzUwTENCclpYa3NJR3hwYzNRcElIdGNiaUFnZG1GeUlHeHBjM1FnUFNCc2FYTjBJSHg4SUZ0ZE8xeHVJQ0JwWmlBb2RIbHdaVzltSUNobGJHVnRaVzUwS1NBOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lHWnZjaUFvZG1GeUlHbGtlQ0JwYmlCbGJHVnRaVzUwS1Z4dUlDQWdJQ0FnZEc5VlVreEZibU52WkdWa0tHVnNaVzFsYm5SYmFXUjRYU3dnYTJWNUlEOGdhMlY1SUNzZ0oxc25JQ3NnYVdSNElDc2dKMTBuSURvZ2FXUjRMQ0JzYVhOMEtUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnNhWE4wTG5CMWMyZ29hMlY1SUNzZ0p6MG5JQ3NnWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwS0dWc1pXMWxiblFwS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYkdsemRDNXFiMmx1S0NjbUp5azdYRzU5TzF4dVhHNTJZWElnY21WeGRXVnpkQ0E5SUdaMWJtTjBhVzl1SUNodFpYUm9iMlFzSUhWeWJDd2daR0YwWVN3Z1kyOXVkR1Z1ZEZSNWNHVXNJR2hsWVdSbGNuTXBJSHRjYmx4dUlDQjJZWElnWTI5dWRHVnVkRlI1Y0dVZ1BTQmpiMjUwWlc1MFZIbHdaU0E5UFQwZ0ozVnliR1Z1WTI5a1pXUW5JRDhnSjJGd2NHeHBZMkYwYVc5dUx5Y2dLeUJqYjI1MFpXNTBWSGx3WlM1eVpYQnNZV05sS0NkMWNteGxibU52WkdWa0p5d2dKM2d0ZDNkM0xXWnZjbTB0ZFhKc1pXNWpiMlJsWkNjcElEb2dKMkZ3Y0d4cFkyRjBhVzl1TDJwemIyNG5PMXh1SUNCa1lYUmhJRDBnWTI5dWRHVnVkRlI1Y0dVZ1BUMDlJQ2RoY0hCc2FXTmhkR2x2Ymk5cWMyOXVKeUEvSUVwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcElEb2dkRzlWVWt4RmJtTnZaR1ZrS0dSaGRHRXBPMXh1WEc0Z0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpQW9jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQjdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJSFpoY2lCNGFISWdQU0J1WlhjZ1dFMU1TSFIwY0ZKbGNYVmxjM1FvS1R0Y2JpQWdJQ0FnSUhob2NpNXZjR1Z1S0cxbGRHaHZaQ3dnZFhKc0xDQjBjblZsS1R0Y2JpQWdJQ0FnSUhob2NpNXpaWFJTWlhGMVpYTjBTR1ZoWkdWeUtDZEJZMk5sY0hRbkxDQW5ZWEJ3YkdsallYUnBiMjR2YW5OdmJpY3BPMXh1SUNBZ0lDQWdlR2h5TG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSjBOdmJuUmxiblF0Vkhsd1pTY3NJR052Ym5SbGJuUlVlWEJsS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLQ0VoWTNOeVpsUnZhMlZ1VTJWc1pXTjBiM0lnSmlZZ0lTRmpjM0ptVkc5clpXNVRaV3hsWTNSdmNpNWpiMjUwWlc1MEtTQjdYRzRnSUNBZ0lDQWdJSGhvY2k1elpYUlNaWEYxWlhOMFNHVmhaR1Z5S0NkWUxVTlRVa1l0Vkc5clpXNG5MQ0JqYzNKbVZHOXJaVzVUWld4bFkzUnZjaTVqYjI1MFpXNTBLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1FXUmtJSEJoYzNObFpDQm9aV0ZrWlhKelhHNGdJQ0FnSUNCUFltcGxZM1F1YTJWNWN5aG9aV0ZrWlhKektTNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaG9aV0ZrWlhJcElIdGNiaUFnSUNBZ0lDQWdlR2h5TG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvYUdWaFpHVnlMQ0JvWldGa1pYSnpXMmhsWVdSbGNsMHBPMXh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUhob2NpNXZibkpsWVdSNWMzUmhkR1ZqYUdGdVoyVWdQU0JtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2g0YUhJdWNtVmhaSGxUZEdGMFpTQTlQVDBnTkNrZ2UxeHVYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQnlaWE53YjI1elpTQTlJSGhvY2k1eVpYTndiMjV6WlZSbGVIUWdQeUJLVTA5T0xuQmhjbk5sS0hob2NpNXlaWE53YjI1elpWUmxlSFFwSURvZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2g0YUhJdWMzUmhkSFZ6SUQ0OUlESXdNQ0FtSmlCNGFISXVjM1JoZEhWeklEd2dNekF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0hKbGMzQnZibk5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCNGFISXVjMlZ1WkNoa1lYUmhLVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0J5WldwbFkzUW9aU2s3WEc0Z0lDQWdmVnh1SUNCOUtUdGNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ2UxeHVJQ0JoY25KaGVYTkVhV1ptWlhJNklHWjFibU4wYVc5dUlDaGhjbkpoZVVFc0lHRnljbUY1UWlrZ2UxeHVJQ0FnSUhaaGNpQnBjMFJwWm1abGNtVnVkQ0E5SUdaaGJITmxPMXh1SUNBZ0lHbG1JQ2hoY25KaGVVRXViR1Z1WjNSb0lDRTlQU0JoY25KaGVVSXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQnBjMFJwWm1abGNtVnVkQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGeWNtRjVRUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVJQ2hwZEdWdExDQnBibVJsZUNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYVhSbGJTQWhQVDBnWVhKeVlYbENXMmx1WkdWNFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdselJHbG1abVZ5Wlc1MElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJwYzBScFptWmxjbVZ1ZER0Y2JpQWdmU3hjYmlBZ1lXcGhlRG9nZTF4dUlDQWdJSEJ2YzNRNklISmxjWFZsYzNRdVltbHVaQ2h1ZFd4c0xDQW5VRTlUVkNjcExGeHVJQ0FnSUhCMWREb2djbVZ4ZFdWemRDNWlhVzVrS0c1MWJHd3NJQ2RRVlZRbktWeHVJQ0I5WEc1OU8xeHVJbDE5IiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gICdpc1ZhbHVlJzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSAnJztcbiAgfSxcbiAgJ2lzRW1haWwnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL14oKChbYS16XXxcXGR8WyEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkrKFxcLihbYS16XXxcXGR8WyEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkrKSopfCgoXFx4MjIpKCgoKFxceDIwfFxceDA5KSooXFx4MGRcXHgwYSkpPyhcXHgyMHxcXHgwOSkrKT8oKFtcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXXxcXHgyMXxbXFx4MjMtXFx4NWJdfFtcXHg1ZC1cXHg3ZV18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfChcXFxcKFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3Zl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkpKigoKFxceDIwfFxceDA5KSooXFx4MGRcXHgwYSkpPyhcXHgyMHxcXHgwOSkrKT8oXFx4MjIpKSlAKCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpJC9pKTtcbiAgfSxcbiAgJ2lzVHJ1ZSc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZTtcbiAgfSxcbiAgJ2lzTnVtZXJpYyc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoUmVzdWx0cyA9IHZhbHVlLm1hdGNoKC9bLStdPyhcXGQqWy5dKT9cXGQrLyk7XG4gICAgICBpZiAoISEgbWF0Y2hSZXN1bHRzKSB7XG4gICAgICAgIHJldHVybiBtYXRjaFJlc3VsdHNbMF0gPT0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAnaXNBbHBoYSc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXRjaCgvXlthLXpBLVpdKyQvKTtcbiAgfSxcbiAgJ2lzV29yZHMnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL15bYS16QS1aXFxzXSskLyk7XG4gIH0sXG4gICdpc1NwZWNpYWxXb3Jkcyc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXRjaCgvXlthLXpBLVpcXHNcXHUwMEMwLVxcdTAxN0ZdKyQvKTtcbiAgfSxcbiAgaXNMZW5ndGg6IGZ1bmN0aW9uICh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPj0gbWluICYmIHZhbHVlLmxlbmd0aCA8PSBtYXg7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPj0gbWluO1xuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uICh2YWx1ZSwgZXFsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IGVxbDtcbiAgfSxcbiAgZXF1YWxzRmllbGQ6IGZ1bmN0aW9uICh2YWx1ZSwgZmllbGQpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gdGhpc1tmaWVsZF07XG4gIH1cbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaUwxVnpaWEp6TDJOb2NtbHpkR2xoYm1Gc1ptOXVhUzlFYjJOMWJXVnVkSE12WkdWMkwyWnZjbTF6ZVMxeVpXRmpkQzl6Y21NdmRtRnNhV1JoZEdsdmJsSjFiR1Z6TG1weklpd2ljMjkxY21ObGN5STZXeUl2VlhObGNuTXZZMmh5YVhOMGFXRnVZV3htYjI1cEwwUnZZM1Z0Wlc1MGN5OWtaWFl2Wm05eWJYTjVMWEpsWVdOMEwzTnlZeTkyWVd4cFpHRjBhVzl1VW5Wc1pYTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1RVRkJUU3hEUVVGRExFOUJRVThzUjBGQlJ6dEZRVU5tTEZOQlFWTXNSVUZCUlN4VlFVRlZMRXRCUVVzc1JVRkJSVHRKUVVNeFFpeFBRVUZQTEV0QlFVc3NTMEZCU3l4RlFVRkZMRU5CUVVNN1IwRkRja0k3UlVGRFJDeFRRVUZUTEVWQlFVVXNWVUZCVlN4TFFVRkxMRVZCUVVVN1NVRkRNVUlzVDBGQlR5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMSGswUWtGQmVUUkNMRU5CUVVNc1EwRkJRenRIUVVNdk5VSTdSVUZEUkN4UlFVRlJMRVZCUVVVc1ZVRkJWU3hMUVVGTExFVkJRVVU3U1VGRGVrSXNUMEZCVHl4TFFVRkxMRXRCUVVzc1NVRkJTU3hEUVVGRE8wZEJRM1pDTzBWQlEwUXNWMEZCVnl4RlFVRkZMRlZCUVZVc1MwRkJTeXhGUVVGRk8wbEJRelZDTEVsQlFVa3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVU3hGUVVGRk8wMUJRemRDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMHRCUTJJc1RVRkJUVHROUVVOTUxFbEJRVWtzV1VGQldTeEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0TlFVTndSQ3hKUVVGSkxFTkJRVU1zUlVGQlJTeFpRVUZaTEVWQlFVVTdVVUZEYmtJc1QwRkJUeXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRPMDlCUTJwRExFMUJRVTA3VVVGRFRDeFBRVUZQTEV0QlFVc3NRMEZCUXp0UFFVTmtPMHRCUTBZN1IwRkRSanRGUVVORUxGTkJRVk1zUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlR0SlFVTXhRaXhQUVVGUExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1IwRkRia003UlVGRFJDeFRRVUZUTEVWQlFVVXNWVUZCVlN4TFFVRkxMRVZCUVVVN1NVRkRNVUlzVDBGQlR5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8wZEJRM0pETzBWQlEwUXNaMEpCUVdkQ0xFVkJRVVVzVlVGQlZTeExRVUZMTEVWQlFVVTdTVUZEYWtNc1QwRkJUeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03UjBGRGJFUTdSVUZEUkN4UlFVRlJMRVZCUVVVc1ZVRkJWU3hMUVVGTExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlR0SlFVTnVReXhKUVVGSkxFZEJRVWNzUzBGQlN5eFRRVUZUTEVWQlFVVTdUVUZEY2tJc1QwRkJUeXhMUVVGTExFTkJRVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF6dExRVU51UkR0SlFVTkVMRTlCUVU4c1MwRkJTeXhEUVVGRExFMUJRVTBzU1VGQlNTeEhRVUZITEVOQlFVTTdSMEZETlVJN1JVRkRSQ3hOUVVGTkxFVkJRVVVzVlVGQlZTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZPMGxCUXpWQ0xFOUJRVThzUzBGQlN5eEpRVUZKTEVkQlFVY3NRMEZCUXp0SFFVTnlRanRGUVVORUxGZEJRVmNzUlVGQlJTeFZRVUZWTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVN1NVRkRia01zVDBGQlR5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wZEJRemRDTzBOQlEwWXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ2UxeHVJQ0FuYVhOV1lXeDFaU2M2SUdaMWJtTjBhVzl1SUNoMllXeDFaU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjJZV3gxWlNBaFBUMGdKeWM3WEc0Z0lIMHNYRzRnSUNkcGMwVnRZV2xzSnpvZ1puVnVZM1JwYjI0Z0tIWmhiSFZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFpoYkhWbExtMWhkR05vS0M5ZUtDZ29XMkV0ZWwxOFhGeGtmRnNoSTF4Y0pDVW1KMXhjS2x4Y0sxeGNMVnhjTHoxY1hEOWNYRjVmWUh0Y1hIeDlmbDE4VzF4Y2RUQXdRVEF0WEZ4MVJEZEdSbHhjZFVZNU1EQXRYRngxUmtSRFJseGNkVVpFUmpBdFhGeDFSa1pGUmwwcEt5aGNYQzRvVzJFdGVsMThYRnhrZkZzaEkxeGNKQ1VtSjF4Y0tseGNLMXhjTFZ4Y0x6MWNYRDljWEY1ZllIdGNYSHg5ZmwxOFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBLeWtxS1h3b0tGeGNlREl5S1Nnb0tDaGNYSGd5TUh4Y1hIZ3dPU2txS0Z4Y2VEQmtYRng0TUdFcEtUOG9YRng0TWpCOFhGeDRNRGtwS3lrL0tDaGJYRng0TURFdFhGeDRNRGhjWEhnd1lseGNlREJqWEZ4NE1HVXRYRng0TVdaY1hIZzNabDE4WEZ4NE1qRjhXMXhjZURJekxWeGNlRFZpWFh4YlhGeDROV1F0WEZ4NE4yVmRmRnRjWEhVd01FRXdMVnhjZFVRM1JrWmNYSFZHT1RBd0xWeGNkVVpFUTBaY1hIVkdSRVl3TFZ4Y2RVWkdSVVpkS1h3b1hGeGNYQ2hiWEZ4NE1ERXRYRng0TURsY1hIZ3dZbHhjZURCalhGeDRNR1F0WEZ4NE4yWmRmRnRjWEhVd01FRXdMVnhjZFVRM1JrWmNYSFZHT1RBd0xWeGNkVVpFUTBaY1hIVkdSRVl3TFZ4Y2RVWkdSVVpkS1NrcEtTb29LQ2hjWEhneU1IeGNYSGd3T1NrcUtGeGNlREJrWEZ4NE1HRXBLVDhvWEZ4NE1qQjhYRng0TURrcEt5ay9LRnhjZURJeUtTa3BRQ2dvS0Z0aExYcGRmRnhjWkh4YlhGeDFNREJCTUMxY1hIVkVOMFpHWEZ4MVJqa3dNQzFjWEhWR1JFTkdYRngxUmtSR01DMWNYSFZHUmtWR1hTbDhLQ2hiWVMxNlhYeGNYR1I4VzF4Y2RUQXdRVEF0WEZ4MVJEZEdSbHhjZFVZNU1EQXRYRngxUmtSRFJseGNkVVpFUmpBdFhGeDFSa1pGUmwwcEtGdGhMWHBkZkZ4Y1pId3RmRnhjTG54ZmZINThXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwS2loYllTMTZYWHhjWEdSOFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBLU2xjWEM0cEt5Z29XMkV0ZWwxOFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBmQ2dvVzJFdGVsMThXMXhjZFRBd1FUQXRYRngxUkRkR1JseGNkVVk1TURBdFhGeDFSa1JEUmx4Y2RVWkVSakF0WEZ4MVJrWkZSbDBwS0Z0aExYcGRmRnhjWkh3dGZGeGNMbnhmZkg1OFcxeGNkVEF3UVRBdFhGeDFSRGRHUmx4Y2RVWTVNREF0WEZ4MVJrUkRSbHhjZFVaRVJqQXRYRngxUmtaRlJsMHBLaWhiWVMxNlhYeGJYRngxTURCQk1DMWNYSFZFTjBaR1hGeDFSamt3TUMxY1hIVkdSRU5HWEZ4MVJrUkdNQzFjWEhWR1JrVkdYU2twS1NRdmFTazdYRzRnSUgwc1hHNGdJQ2RwYzFSeWRXVW5PaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1VnUFQwOUlIUnlkV1U3WEc0Z0lIMHNYRzRnSUNkcGMwNTFiV1Z5YVdNbk9pQm1kVzVqZEdsdmJpQW9kbUZzZFdVcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIWmhjaUJ0WVhSamFGSmxjM1ZzZEhNZ1BTQjJZV3gxWlM1dFlYUmphQ2d2V3kwclhUOG9YRnhrS2xzdVhTay9YRnhrS3k4cE8xeHVJQ0FnSUNBZ2FXWWdLQ0VoSUcxaGRHTm9VbVZ6ZFd4MGN5a2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiV0YwWTJoU1pYTjFiSFJ6V3pCZElEMDlJSFpoYkhWbE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlN4Y2JpQWdKMmx6UVd4d2FHRW5PaUJtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1V1YldGMFkyZ29MMTViWVMxNlFTMWFYU3NrTHlrN1hHNGdJSDBzWEc0Z0lDZHBjMWR2Y21Sekp6b2dablZ1WTNScGIyNGdLSFpoYkhWbEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhaaGJIVmxMbTFoZEdOb0tDOWVXMkV0ZWtFdFdseGNjMTBySkM4cE8xeHVJQ0I5TEZ4dUlDQW5hWE5UY0dWamFXRnNWMjl5WkhNbk9pQm1kVzVqZEdsdmJpQW9kbUZzZFdVcElIdGNiaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVXViV0YwWTJnb0wxNWJZUzE2UVMxYVhGeHpYRngxTURCRE1DMWNYSFV3TVRkR1hTc2tMeWs3WEc0Z0lIMHNYRzRnSUdselRHVnVaM1JvT2lCbWRXNWpkR2x2YmlBb2RtRnNkV1VzSUcxcGJpd2diV0Y0S1NCN1hHNGdJQ0FnYVdZZ0tHMWhlQ0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RtRnNkV1V1YkdWdVozUm9JRDQ5SUcxcGJpQW1KaUIyWVd4MVpTNXNaVzVuZEdnZ1BEMGdiV0Y0TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RtRnNkV1V1YkdWdVozUm9JRDQ5SUcxcGJqdGNiaUFnZlN4Y2JpQWdaWEYxWVd4ek9pQm1kVzVqZEdsdmJpQW9kbUZzZFdVc0lHVnhiQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjJZV3gxWlNBOVBTQmxjV3c3WEc0Z0lIMHNYRzRnSUdWeGRXRnNjMFpwWld4a09pQm1kVzVqZEdsdmJpQW9kbUZzZFdVc0lHWnBaV3hrS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFpoYkhWbElEMDlJSFJvYVhOYlptbGxiR1JkTzF4dUlDQjlYRzU5TzF4dUlsMTkiXX0=