mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
17017 lines
3.4 MiB
17017 lines
3.4 MiB
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||
/* @preserve
|
||
* Leaflet 1.9.3, a JS library for interactive maps. https://leafletjs.com
|
||
* (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
||
*/
|
||
|
||
(function (global, factory) {
|
||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));
|
||
})(this, (function (exports) { 'use strict';
|
||
|
||
var version = "1.9.3";
|
||
|
||
/*
|
||
* @namespace Util
|
||
*
|
||
* Various utility functions, used by Leaflet internally.
|
||
*/
|
||
|
||
// @function extend(dest: Object, src?: Object): Object
|
||
// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.
|
||
function extend(dest) {
|
||
var i, j, len, src;
|
||
|
||
for (j = 1, len = arguments.length; j < len; j++) {
|
||
src = arguments[j];
|
||
for (i in src) {
|
||
dest[i] = src[i];
|
||
}
|
||
}
|
||
return dest;
|
||
}
|
||
|
||
// @function create(proto: Object, properties?: Object): Object
|
||
// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)
|
||
var create$2 = Object.create || (function () {
|
||
function F() {}
|
||
return function (proto) {
|
||
F.prototype = proto;
|
||
return new F();
|
||
};
|
||
})();
|
||
|
||
// @function bind(fn: Function, …): Function
|
||
// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
|
||
// Has a `L.bind()` shortcut.
|
||
function bind(fn, obj) {
|
||
var slice = Array.prototype.slice;
|
||
|
||
if (fn.bind) {
|
||
return fn.bind.apply(fn, slice.call(arguments, 1));
|
||
}
|
||
|
||
var args = slice.call(arguments, 2);
|
||
|
||
return function () {
|
||
return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);
|
||
};
|
||
}
|
||
|
||
// @property lastId: Number
|
||
// Last unique ID used by [`stamp()`](#util-stamp)
|
||
var lastId = 0;
|
||
|
||
// @function stamp(obj: Object): Number
|
||
// Returns the unique ID of an object, assigning it one if it doesn't have it.
|
||
function stamp(obj) {
|
||
if (!('_leaflet_id' in obj)) {
|
||
obj['_leaflet_id'] = ++lastId;
|
||
}
|
||
return obj._leaflet_id;
|
||
}
|
||
|
||
// @function throttle(fn: Function, time: Number, context: Object): Function
|
||
// Returns a function which executes function `fn` with the given scope `context`
|
||
// (so that the `this` keyword refers to `context` inside `fn`'s code). The function
|
||
// `fn` will be called no more than one time per given amount of `time`. The arguments
|
||
// received by the bound function will be any arguments passed when binding the
|
||
// function, followed by any arguments passed when invoking the bound function.
|
||
// Has an `L.throttle` shortcut.
|
||
function throttle(fn, time, context) {
|
||
var lock, args, wrapperFn, later;
|
||
|
||
later = function () {
|
||
// reset lock and call if queued
|
||
lock = false;
|
||
if (args) {
|
||
wrapperFn.apply(context, args);
|
||
args = false;
|
||
}
|
||
};
|
||
|
||
wrapperFn = function () {
|
||
if (lock) {
|
||
// called too soon, queue to call later
|
||
args = arguments;
|
||
|
||
} else {
|
||
// call and lock until later
|
||
fn.apply(context, arguments);
|
||
setTimeout(later, time);
|
||
lock = true;
|
||
}
|
||
};
|
||
|
||
return wrapperFn;
|
||
}
|
||
|
||
// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number
|
||
// Returns the number `num` modulo `range` in such a way so it lies within
|
||
// `range[0]` and `range[1]`. The returned value will be always smaller than
|
||
// `range[1]` unless `includeMax` is set to `true`.
|
||
function wrapNum(x, range, includeMax) {
|
||
var max = range[1],
|
||
min = range[0],
|
||
d = max - min;
|
||
return x === max && includeMax ? x : ((x - min) % d + d) % d + min;
|
||
}
|
||
|
||
// @function falseFn(): Function
|
||
// Returns a function which always returns `false`.
|
||
function falseFn() { return false; }
|
||
|
||
// @function formatNum(num: Number, precision?: Number|false): Number
|
||
// Returns the number `num` rounded with specified `precision`.
|
||
// The default `precision` value is 6 decimal places.
|
||
// `false` can be passed to skip any processing (can be useful to avoid round-off errors).
|
||
function formatNum(num, precision) {
|
||
if (precision === false) { return num; }
|
||
var pow = Math.pow(10, precision === undefined ? 6 : precision);
|
||
return Math.round(num * pow) / pow;
|
||
}
|
||
|
||
// @function trim(str: String): String
|
||
// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
|
||
function trim(str) {
|
||
return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
|
||
}
|
||
|
||
// @function splitWords(str: String): String[]
|
||
// Trims and splits the string on whitespace and returns the array of parts.
|
||
function splitWords(str) {
|
||
return trim(str).split(/\s+/);
|
||
}
|
||
|
||
// @function setOptions(obj: Object, options: Object): Object
|
||
// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.
|
||
function setOptions(obj, options) {
|
||
if (!Object.prototype.hasOwnProperty.call(obj, 'options')) {
|
||
obj.options = obj.options ? create$2(obj.options) : {};
|
||
}
|
||
for (var i in options) {
|
||
obj.options[i] = options[i];
|
||
}
|
||
return obj.options;
|
||
}
|
||
|
||
// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String
|
||
// Converts an object into a parameter URL string, e.g. `{a: "foo", b: "bar"}`
|
||
// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will
|
||
// be appended at the end. If `uppercase` is `true`, the parameter names will
|
||
// be uppercased (e.g. `'?A=foo&B=bar'`)
|
||
function getParamString(obj, existingUrl, uppercase) {
|
||
var params = [];
|
||
for (var i in obj) {
|
||
params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
|
||
}
|
||
return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
|
||
}
|
||
|
||
var templateRe = /\{ *([\w_ -]+) *\}/g;
|
||
|
||
// @function template(str: String, data: Object): String
|
||
// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`
|
||
// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string
|
||
// `('Hello foo, bar')`. You can also specify functions instead of strings for
|
||
// data values — they will be evaluated passing `data` as an argument.
|
||
function template(str, data) {
|
||
return str.replace(templateRe, function (str, key) {
|
||
var value = data[key];
|
||
|
||
if (value === undefined) {
|
||
throw new Error('No value provided for variable ' + str);
|
||
|
||
} else if (typeof value === 'function') {
|
||
value = value(data);
|
||
}
|
||
return value;
|
||
});
|
||
}
|
||
|
||
// @function isArray(obj): Boolean
|
||
// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)
|
||
var isArray = Array.isArray || function (obj) {
|
||
return (Object.prototype.toString.call(obj) === '[object Array]');
|
||
};
|
||
|
||
// @function indexOf(array: Array, el: Object): Number
|
||
// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
|
||
function indexOf(array, el) {
|
||
for (var i = 0; i < array.length; i++) {
|
||
if (array[i] === el) { return i; }
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
// @property emptyImageUrl: String
|
||
// Data URI string containing a base64-encoded empty GIF image.
|
||
// Used as a hack to free memory from unused images on WebKit-powered
|
||
// mobile devices (by setting image `src` to this string).
|
||
var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
|
||
|
||
// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||
|
||
function getPrefixed(name) {
|
||
return window['webkit' + name] || window['moz' + name] || window['ms' + name];
|
||
}
|
||
|
||
var lastTime = 0;
|
||
|
||
// fallback for IE 7-8
|
||
function timeoutDefer(fn) {
|
||
var time = +new Date(),
|
||
timeToCall = Math.max(0, 16 - (time - lastTime));
|
||
|
||
lastTime = time + timeToCall;
|
||
return window.setTimeout(fn, timeToCall);
|
||
}
|
||
|
||
var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;
|
||
var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||
|
||
getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };
|
||
|
||
// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number
|
||
// Schedules `fn` to be executed when the browser repaints. `fn` is bound to
|
||
// `context` if given. When `immediate` is set, `fn` is called immediately if
|
||
// the browser doesn't have native support for
|
||
// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),
|
||
// otherwise it's delayed. Returns a request ID that can be used to cancel the request.
|
||
function requestAnimFrame(fn, context, immediate) {
|
||
if (immediate && requestFn === timeoutDefer) {
|
||
fn.call(context);
|
||
} else {
|
||
return requestFn.call(window, bind(fn, context));
|
||
}
|
||
}
|
||
|
||
// @function cancelAnimFrame(id: Number): undefined
|
||
// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).
|
||
function cancelAnimFrame(id) {
|
||
if (id) {
|
||
cancelFn.call(window, id);
|
||
}
|
||
}
|
||
|
||
var Util = {
|
||
__proto__: null,
|
||
extend: extend,
|
||
create: create$2,
|
||
bind: bind,
|
||
get lastId () { return lastId; },
|
||
stamp: stamp,
|
||
throttle: throttle,
|
||
wrapNum: wrapNum,
|
||
falseFn: falseFn,
|
||
formatNum: formatNum,
|
||
trim: trim,
|
||
splitWords: splitWords,
|
||
setOptions: setOptions,
|
||
getParamString: getParamString,
|
||
template: template,
|
||
isArray: isArray,
|
||
indexOf: indexOf,
|
||
emptyImageUrl: emptyImageUrl,
|
||
requestFn: requestFn,
|
||
cancelFn: cancelFn,
|
||
requestAnimFrame: requestAnimFrame,
|
||
cancelAnimFrame: cancelAnimFrame
|
||
};
|
||
|
||
// @class Class
|
||
// @aka L.Class
|
||
|
||
// @section
|
||
// @uninheritable
|
||
|
||
// Thanks to John Resig and Dean Edwards for inspiration!
|
||
|
||
function Class() {}
|
||
|
||
Class.extend = function (props) {
|
||
|
||
// @function extend(props: Object): Function
|
||
// [Extends the current class](#class-inheritance) given the properties to be included.
|
||
// Returns a Javascript function that is a class constructor (to be called with `new`).
|
||
var NewClass = function () {
|
||
|
||
setOptions(this);
|
||
|
||
// call the constructor
|
||
if (this.initialize) {
|
||
this.initialize.apply(this, arguments);
|
||
}
|
||
|
||
// call all constructor hooks
|
||
this.callInitHooks();
|
||
};
|
||
|
||
var parentProto = NewClass.__super__ = this.prototype;
|
||
|
||
var proto = create$2(parentProto);
|
||
proto.constructor = NewClass;
|
||
|
||
NewClass.prototype = proto;
|
||
|
||
// inherit parent's statics
|
||
for (var i in this) {
|
||
if (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {
|
||
NewClass[i] = this[i];
|
||
}
|
||
}
|
||
|
||
// mix static properties into the class
|
||
if (props.statics) {
|
||
extend(NewClass, props.statics);
|
||
}
|
||
|
||
// mix includes into the prototype
|
||
if (props.includes) {
|
||
checkDeprecatedMixinEvents(props.includes);
|
||
extend.apply(null, [proto].concat(props.includes));
|
||
}
|
||
|
||
// mix given properties into the prototype
|
||
extend(proto, props);
|
||
delete proto.statics;
|
||
delete proto.includes;
|
||
|
||
// merge options
|
||
if (proto.options) {
|
||
proto.options = parentProto.options ? create$2(parentProto.options) : {};
|
||
extend(proto.options, props.options);
|
||
}
|
||
|
||
proto._initHooks = [];
|
||
|
||
// add method for calling all hooks
|
||
proto.callInitHooks = function () {
|
||
|
||
if (this._initHooksCalled) { return; }
|
||
|
||
if (parentProto.callInitHooks) {
|
||
parentProto.callInitHooks.call(this);
|
||
}
|
||
|
||
this._initHooksCalled = true;
|
||
|
||
for (var i = 0, len = proto._initHooks.length; i < len; i++) {
|
||
proto._initHooks[i].call(this);
|
||
}
|
||
};
|
||
|
||
return NewClass;
|
||
};
|
||
|
||
|
||
// @function include(properties: Object): this
|
||
// [Includes a mixin](#class-includes) into the current class.
|
||
Class.include = function (props) {
|
||
var parentOptions = this.prototype.options;
|
||
extend(this.prototype, props);
|
||
if (props.options) {
|
||
this.prototype.options = parentOptions;
|
||
this.mergeOptions(props.options);
|
||
}
|
||
return this;
|
||
};
|
||
|
||
// @function mergeOptions(options: Object): this
|
||
// [Merges `options`](#class-options) into the defaults of the class.
|
||
Class.mergeOptions = function (options) {
|
||
extend(this.prototype.options, options);
|
||
return this;
|
||
};
|
||
|
||
// @function addInitHook(fn: Function): this
|
||
// Adds a [constructor hook](#class-constructor-hooks) to the class.
|
||
Class.addInitHook = function (fn) { // (Function) || (String, args...)
|
||
var args = Array.prototype.slice.call(arguments, 1);
|
||
|
||
var init = typeof fn === 'function' ? fn : function () {
|
||
this[fn].apply(this, args);
|
||
};
|
||
|
||
this.prototype._initHooks = this.prototype._initHooks || [];
|
||
this.prototype._initHooks.push(init);
|
||
return this;
|
||
};
|
||
|
||
function checkDeprecatedMixinEvents(includes) {
|
||
/* global L: true */
|
||
if (typeof L === 'undefined' || !L || !L.Mixin) { return; }
|
||
|
||
includes = isArray(includes) ? includes : [includes];
|
||
|
||
for (var i = 0; i < includes.length; i++) {
|
||
if (includes[i] === L.Mixin.Events) {
|
||
console.warn('Deprecated include of L.Mixin.Events: ' +
|
||
'this property will be removed in future releases, ' +
|
||
'please inherit from L.Evented instead.', new Error().stack);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
* @class Evented
|
||
* @aka L.Evented
|
||
* @inherits Class
|
||
*
|
||
* A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* map.on('click', function(e) {
|
||
* alert(e.latlng);
|
||
* } );
|
||
* ```
|
||
*
|
||
* Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:
|
||
*
|
||
* ```js
|
||
* function onClick(e) { ... }
|
||
*
|
||
* map.on('click', onClick);
|
||
* map.off('click', onClick);
|
||
* ```
|
||
*/
|
||
|
||
var Events = {
|
||
/* @method on(type: String, fn: Function, context?: Object): this
|
||
* Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).
|
||
*
|
||
* @alternative
|
||
* @method on(eventMap: Object): this
|
||
* Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
*/
|
||
on: function (types, fn, context) {
|
||
|
||
// types can be a map of types/handlers
|
||
if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
// we don't process space-separated events here for performance;
|
||
// it's a hot path since Layer uses the on(obj) syntax
|
||
this._on(type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
// types can be a string of space-separated words
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
this._on(types[i], fn, context);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
/* @method off(type: String, fn?: Function, context?: Object): this
|
||
* Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.
|
||
*
|
||
* @alternative
|
||
* @method off(eventMap: Object): this
|
||
* Removes a set of type/listener pairs.
|
||
*
|
||
* @alternative
|
||
* @method off: this
|
||
* Removes all listeners to all events on the object. This includes implicitly attached events.
|
||
*/
|
||
off: function (types, fn, context) {
|
||
|
||
if (!arguments.length) {
|
||
// clear all listeners if called without arguments
|
||
delete this._events;
|
||
|
||
} else if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
this._off(type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
var removeAll = arguments.length === 1;
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
if (removeAll) {
|
||
this._off(types[i]);
|
||
} else {
|
||
this._off(types[i], fn, context);
|
||
}
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// attach listener (without syntactic sugar now)
|
||
_on: function (type, fn, context, _once) {
|
||
if (typeof fn !== 'function') {
|
||
console.warn('wrong listener type: ' + typeof fn);
|
||
return;
|
||
}
|
||
|
||
// check if fn already there
|
||
if (this._listens(type, fn, context) !== false) {
|
||
return;
|
||
}
|
||
|
||
if (context === this) {
|
||
// Less memory footprint.
|
||
context = undefined;
|
||
}
|
||
|
||
var newListener = {fn: fn, ctx: context};
|
||
if (_once) {
|
||
newListener.once = true;
|
||
}
|
||
|
||
this._events = this._events || {};
|
||
this._events[type] = this._events[type] || [];
|
||
this._events[type].push(newListener);
|
||
},
|
||
|
||
_off: function (type, fn, context) {
|
||
var listeners,
|
||
i,
|
||
len;
|
||
|
||
if (!this._events) {
|
||
return;
|
||
}
|
||
|
||
listeners = this._events[type];
|
||
if (!listeners) {
|
||
return;
|
||
}
|
||
|
||
if (arguments.length === 1) { // remove all
|
||
if (this._firingCount) {
|
||
// Set all removed listeners to noop
|
||
// so they are not called if remove happens in fire
|
||
for (i = 0, len = listeners.length; i < len; i++) {
|
||
listeners[i].fn = falseFn;
|
||
}
|
||
}
|
||
// clear all listeners for a type if function isn't specified
|
||
delete this._events[type];
|
||
return;
|
||
}
|
||
|
||
if (typeof fn !== 'function') {
|
||
console.warn('wrong listener type: ' + typeof fn);
|
||
return;
|
||
}
|
||
|
||
// find fn and remove it
|
||
var index = this._listens(type, fn, context);
|
||
if (index !== false) {
|
||
var listener = listeners[index];
|
||
if (this._firingCount) {
|
||
// set the removed listener to noop so that's not called if remove happens in fire
|
||
listener.fn = falseFn;
|
||
|
||
/* copy array in case events are being fired */
|
||
this._events[type] = listeners = listeners.slice();
|
||
}
|
||
listeners.splice(index, 1);
|
||
}
|
||
},
|
||
|
||
// @method fire(type: String, data?: Object, propagate?: Boolean): this
|
||
// Fires an event of the specified type. You can optionally provide a data
|
||
// object — the first argument of the listener function will contain its
|
||
// properties. The event can optionally be propagated to event parents.
|
||
fire: function (type, data, propagate) {
|
||
if (!this.listens(type, propagate)) { return this; }
|
||
|
||
var event = extend({}, data, {
|
||
type: type,
|
||
target: this,
|
||
sourceTarget: data && data.sourceTarget || this
|
||
});
|
||
|
||
if (this._events) {
|
||
var listeners = this._events[type];
|
||
if (listeners) {
|
||
this._firingCount = (this._firingCount + 1) || 1;
|
||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||
var l = listeners[i];
|
||
// off overwrites l.fn, so we need to copy fn to a var
|
||
var fn = l.fn;
|
||
if (l.once) {
|
||
this.off(type, fn, l.ctx);
|
||
}
|
||
fn.call(l.ctx || this, event);
|
||
}
|
||
|
||
this._firingCount--;
|
||
}
|
||
}
|
||
|
||
if (propagate) {
|
||
// propagate the event to parents (set with addEventParent)
|
||
this._propagateEvent(event);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method listens(type: String, propagate?: Boolean): Boolean
|
||
// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean
|
||
// Returns `true` if a particular event type has any listeners attached to it.
|
||
// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.
|
||
listens: function (type, fn, context, propagate) {
|
||
if (typeof type !== 'string') {
|
||
console.warn('"string" type argument expected');
|
||
}
|
||
|
||
// we don't overwrite the input `fn` value, because we need to use it for propagation
|
||
var _fn = fn;
|
||
if (typeof fn !== 'function') {
|
||
propagate = !!fn;
|
||
_fn = undefined;
|
||
context = undefined;
|
||
}
|
||
|
||
var listeners = this._events && this._events[type];
|
||
if (listeners && listeners.length) {
|
||
if (this._listens(type, _fn, context) !== false) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
if (propagate) {
|
||
// also check parents for listeners if event propagates
|
||
for (var id in this._eventParents) {
|
||
if (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
|
||
// returns the index (number) or false
|
||
_listens: function (type, fn, context) {
|
||
if (!this._events) {
|
||
return false;
|
||
}
|
||
|
||
var listeners = this._events[type] || [];
|
||
if (!fn) {
|
||
return !!listeners.length;
|
||
}
|
||
|
||
if (context === this) {
|
||
// Less memory footprint.
|
||
context = undefined;
|
||
}
|
||
|
||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||
if (listeners[i].fn === fn && listeners[i].ctx === context) {
|
||
return i;
|
||
}
|
||
}
|
||
return false;
|
||
|
||
},
|
||
|
||
// @method once(…): this
|
||
// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.
|
||
once: function (types, fn, context) {
|
||
|
||
// types can be a map of types/handlers
|
||
if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
// we don't process space-separated events here for performance;
|
||
// it's a hot path since Layer uses the on(obj) syntax
|
||
this._on(type, types[type], fn, true);
|
||
}
|
||
|
||
} else {
|
||
// types can be a string of space-separated words
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
this._on(types[i], fn, context, true);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method addEventParent(obj: Evented): this
|
||
// Adds an event parent - an `Evented` that will receive propagated events
|
||
addEventParent: function (obj) {
|
||
this._eventParents = this._eventParents || {};
|
||
this._eventParents[stamp(obj)] = obj;
|
||
return this;
|
||
},
|
||
|
||
// @method removeEventParent(obj: Evented): this
|
||
// Removes an event parent, so it will stop receiving propagated events
|
||
removeEventParent: function (obj) {
|
||
if (this._eventParents) {
|
||
delete this._eventParents[stamp(obj)];
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_propagateEvent: function (e) {
|
||
for (var id in this._eventParents) {
|
||
this._eventParents[id].fire(e.type, extend({
|
||
layer: e.target,
|
||
propagatedFrom: e.target
|
||
}, e), true);
|
||
}
|
||
}
|
||
};
|
||
|
||
// aliases; we should ditch those eventually
|
||
|
||
// @method addEventListener(…): this
|
||
// Alias to [`on(…)`](#evented-on)
|
||
Events.addEventListener = Events.on;
|
||
|
||
// @method removeEventListener(…): this
|
||
// Alias to [`off(…)`](#evented-off)
|
||
|
||
// @method clearAllEventListeners(…): this
|
||
// Alias to [`off()`](#evented-off)
|
||
Events.removeEventListener = Events.clearAllEventListeners = Events.off;
|
||
|
||
// @method addOneTimeEventListener(…): this
|
||
// Alias to [`once(…)`](#evented-once)
|
||
Events.addOneTimeEventListener = Events.once;
|
||
|
||
// @method fireEvent(…): this
|
||
// Alias to [`fire(…)`](#evented-fire)
|
||
Events.fireEvent = Events.fire;
|
||
|
||
// @method hasEventListeners(…): Boolean
|
||
// Alias to [`listens(…)`](#evented-listens)
|
||
Events.hasEventListeners = Events.listens;
|
||
|
||
var Evented = Class.extend(Events);
|
||
|
||
/*
|
||
* @class Point
|
||
* @aka L.Point
|
||
*
|
||
* Represents a point with `x` and `y` coordinates in pixels.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var point = L.point(200, 300);
|
||
* ```
|
||
*
|
||
* All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:
|
||
*
|
||
* ```js
|
||
* map.panBy([200, 300]);
|
||
* map.panBy(L.point(200, 300));
|
||
* ```
|
||
*
|
||
* Note that `Point` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function Point(x, y, round) {
|
||
// @property x: Number; The `x` coordinate of the point
|
||
this.x = (round ? Math.round(x) : x);
|
||
// @property y: Number; The `y` coordinate of the point
|
||
this.y = (round ? Math.round(y) : y);
|
||
}
|
||
|
||
var trunc = Math.trunc || function (v) {
|
||
return v > 0 ? Math.floor(v) : Math.ceil(v);
|
||
};
|
||
|
||
Point.prototype = {
|
||
|
||
// @method clone(): Point
|
||
// Returns a copy of the current point.
|
||
clone: function () {
|
||
return new Point(this.x, this.y);
|
||
},
|
||
|
||
// @method add(otherPoint: Point): Point
|
||
// Returns the result of addition of the current and the given points.
|
||
add: function (point) {
|
||
// non-destructive, returns a new point
|
||
return this.clone()._add(toPoint(point));
|
||
},
|
||
|
||
_add: function (point) {
|
||
// destructive, used directly for performance in situations where it's safe to modify existing point
|
||
this.x += point.x;
|
||
this.y += point.y;
|
||
return this;
|
||
},
|
||
|
||
// @method subtract(otherPoint: Point): Point
|
||
// Returns the result of subtraction of the given point from the current.
|
||
subtract: function (point) {
|
||
return this.clone()._subtract(toPoint(point));
|
||
},
|
||
|
||
_subtract: function (point) {
|
||
this.x -= point.x;
|
||
this.y -= point.y;
|
||
return this;
|
||
},
|
||
|
||
// @method divideBy(num: Number): Point
|
||
// Returns the result of division of the current point by the given number.
|
||
divideBy: function (num) {
|
||
return this.clone()._divideBy(num);
|
||
},
|
||
|
||
_divideBy: function (num) {
|
||
this.x /= num;
|
||
this.y /= num;
|
||
return this;
|
||
},
|
||
|
||
// @method multiplyBy(num: Number): Point
|
||
// Returns the result of multiplication of the current point by the given number.
|
||
multiplyBy: function (num) {
|
||
return this.clone()._multiplyBy(num);
|
||
},
|
||
|
||
_multiplyBy: function (num) {
|
||
this.x *= num;
|
||
this.y *= num;
|
||
return this;
|
||
},
|
||
|
||
// @method scaleBy(scale: Point): Point
|
||
// Multiply each coordinate of the current point by each coordinate of
|
||
// `scale`. In linear algebra terms, multiply the point by the
|
||
// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)
|
||
// defined by `scale`.
|
||
scaleBy: function (point) {
|
||
return new Point(this.x * point.x, this.y * point.y);
|
||
},
|
||
|
||
// @method unscaleBy(scale: Point): Point
|
||
// Inverse of `scaleBy`. Divide each coordinate of the current point by
|
||
// each coordinate of `scale`.
|
||
unscaleBy: function (point) {
|
||
return new Point(this.x / point.x, this.y / point.y);
|
||
},
|
||
|
||
// @method round(): Point
|
||
// Returns a copy of the current point with rounded coordinates.
|
||
round: function () {
|
||
return this.clone()._round();
|
||
},
|
||
|
||
_round: function () {
|
||
this.x = Math.round(this.x);
|
||
this.y = Math.round(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method floor(): Point
|
||
// Returns a copy of the current point with floored coordinates (rounded down).
|
||
floor: function () {
|
||
return this.clone()._floor();
|
||
},
|
||
|
||
_floor: function () {
|
||
this.x = Math.floor(this.x);
|
||
this.y = Math.floor(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method ceil(): Point
|
||
// Returns a copy of the current point with ceiled coordinates (rounded up).
|
||
ceil: function () {
|
||
return this.clone()._ceil();
|
||
},
|
||
|
||
_ceil: function () {
|
||
this.x = Math.ceil(this.x);
|
||
this.y = Math.ceil(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method trunc(): Point
|
||
// Returns a copy of the current point with truncated coordinates (rounded towards zero).
|
||
trunc: function () {
|
||
return this.clone()._trunc();
|
||
},
|
||
|
||
_trunc: function () {
|
||
this.x = trunc(this.x);
|
||
this.y = trunc(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method distanceTo(otherPoint: Point): Number
|
||
// Returns the cartesian distance between the current and the given points.
|
||
distanceTo: function (point) {
|
||
point = toPoint(point);
|
||
|
||
var x = point.x - this.x,
|
||
y = point.y - this.y;
|
||
|
||
return Math.sqrt(x * x + y * y);
|
||
},
|
||
|
||
// @method equals(otherPoint: Point): Boolean
|
||
// Returns `true` if the given point has the same coordinates.
|
||
equals: function (point) {
|
||
point = toPoint(point);
|
||
|
||
return point.x === this.x &&
|
||
point.y === this.y;
|
||
},
|
||
|
||
// @method contains(otherPoint: Point): Boolean
|
||
// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).
|
||
contains: function (point) {
|
||
point = toPoint(point);
|
||
|
||
return Math.abs(point.x) <= Math.abs(this.x) &&
|
||
Math.abs(point.y) <= Math.abs(this.y);
|
||
},
|
||
|
||
// @method toString(): String
|
||
// Returns a string representation of the point for debugging purposes.
|
||
toString: function () {
|
||
return 'Point(' +
|
||
formatNum(this.x) + ', ' +
|
||
formatNum(this.y) + ')';
|
||
}
|
||
};
|
||
|
||
// @factory L.point(x: Number, y: Number, round?: Boolean)
|
||
// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.
|
||
|
||
// @alternative
|
||
// @factory L.point(coords: Number[])
|
||
// Expects an array of the form `[x, y]` instead.
|
||
|
||
// @alternative
|
||
// @factory L.point(coords: Object)
|
||
// Expects a plain object of the form `{x: Number, y: Number}` instead.
|
||
function toPoint(x, y, round) {
|
||
if (x instanceof Point) {
|
||
return x;
|
||
}
|
||
if (isArray(x)) {
|
||
return new Point(x[0], x[1]);
|
||
}
|
||
if (x === undefined || x === null) {
|
||
return x;
|
||
}
|
||
if (typeof x === 'object' && 'x' in x && 'y' in x) {
|
||
return new Point(x.x, x.y);
|
||
}
|
||
return new Point(x, y, round);
|
||
}
|
||
|
||
/*
|
||
* @class Bounds
|
||
* @aka L.Bounds
|
||
*
|
||
* Represents a rectangular area in pixel coordinates.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var p1 = L.point(10, 10),
|
||
* p2 = L.point(40, 60),
|
||
* bounds = L.bounds(p1, p2);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
|
||
*
|
||
* ```js
|
||
* otherBounds.intersects([[10, 10], [40, 60]]);
|
||
* ```
|
||
*
|
||
* Note that `Bounds` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function Bounds(a, b) {
|
||
if (!a) { return; }
|
||
|
||
var points = b ? [a, b] : a;
|
||
|
||
for (var i = 0, len = points.length; i < len; i++) {
|
||
this.extend(points[i]);
|
||
}
|
||
}
|
||
|
||
Bounds.prototype = {
|
||
// @method extend(point: Point): this
|
||
// Extends the bounds to contain the given point.
|
||
|
||
// @alternative
|
||
// @method extend(otherBounds: Bounds): this
|
||
// Extend the bounds to contain the given bounds
|
||
extend: function (obj) {
|
||
var min2, max2;
|
||
if (!obj) { return this; }
|
||
|
||
if (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {
|
||
min2 = max2 = toPoint(obj);
|
||
} else {
|
||
obj = toBounds(obj);
|
||
min2 = obj.min;
|
||
max2 = obj.max;
|
||
|
||
if (!min2 || !max2) { return this; }
|
||
}
|
||
|
||
// @property min: Point
|
||
// The top left corner of the rectangle.
|
||
// @property max: Point
|
||
// The bottom right corner of the rectangle.
|
||
if (!this.min && !this.max) {
|
||
this.min = min2.clone();
|
||
this.max = max2.clone();
|
||
} else {
|
||
this.min.x = Math.min(min2.x, this.min.x);
|
||
this.max.x = Math.max(max2.x, this.max.x);
|
||
this.min.y = Math.min(min2.y, this.min.y);
|
||
this.max.y = Math.max(max2.y, this.max.y);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getCenter(round?: Boolean): Point
|
||
// Returns the center point of the bounds.
|
||
getCenter: function (round) {
|
||
return toPoint(
|
||
(this.min.x + this.max.x) / 2,
|
||
(this.min.y + this.max.y) / 2, round);
|
||
},
|
||
|
||
// @method getBottomLeft(): Point
|
||
// Returns the bottom-left point of the bounds.
|
||
getBottomLeft: function () {
|
||
return toPoint(this.min.x, this.max.y);
|
||
},
|
||
|
||
// @method getTopRight(): Point
|
||
// Returns the top-right point of the bounds.
|
||
getTopRight: function () { // -> Point
|
||
return toPoint(this.max.x, this.min.y);
|
||
},
|
||
|
||
// @method getTopLeft(): Point
|
||
// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).
|
||
getTopLeft: function () {
|
||
return this.min; // left, top
|
||
},
|
||
|
||
// @method getBottomRight(): Point
|
||
// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).
|
||
getBottomRight: function () {
|
||
return this.max; // right, bottom
|
||
},
|
||
|
||
// @method getSize(): Point
|
||
// Returns the size of the given bounds
|
||
getSize: function () {
|
||
return this.max.subtract(this.min);
|
||
},
|
||
|
||
// @method contains(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle contains the given one.
|
||
// @alternative
|
||
// @method contains(point: Point): Boolean
|
||
// Returns `true` if the rectangle contains the given point.
|
||
contains: function (obj) {
|
||
var min, max;
|
||
|
||
if (typeof obj[0] === 'number' || obj instanceof Point) {
|
||
obj = toPoint(obj);
|
||
} else {
|
||
obj = toBounds(obj);
|
||
}
|
||
|
||
if (obj instanceof Bounds) {
|
||
min = obj.min;
|
||
max = obj.max;
|
||
} else {
|
||
min = max = obj;
|
||
}
|
||
|
||
return (min.x >= this.min.x) &&
|
||
(max.x <= this.max.x) &&
|
||
(min.y >= this.min.y) &&
|
||
(max.y <= this.max.y);
|
||
},
|
||
|
||
// @method intersects(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle intersects the given bounds. Two bounds
|
||
// intersect if they have at least one point in common.
|
||
intersects: function (bounds) { // (Bounds) -> Boolean
|
||
bounds = toBounds(bounds);
|
||
|
||
var min = this.min,
|
||
max = this.max,
|
||
min2 = bounds.min,
|
||
max2 = bounds.max,
|
||
xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
|
||
yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
|
||
|
||
return xIntersects && yIntersects;
|
||
},
|
||
|
||
// @method overlaps(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle overlaps the given bounds. Two bounds
|
||
// overlap if their intersection is an area.
|
||
overlaps: function (bounds) { // (Bounds) -> Boolean
|
||
bounds = toBounds(bounds);
|
||
|
||
var min = this.min,
|
||
max = this.max,
|
||
min2 = bounds.min,
|
||
max2 = bounds.max,
|
||
xOverlaps = (max2.x > min.x) && (min2.x < max.x),
|
||
yOverlaps = (max2.y > min.y) && (min2.y < max.y);
|
||
|
||
return xOverlaps && yOverlaps;
|
||
},
|
||
|
||
// @method isValid(): Boolean
|
||
// Returns `true` if the bounds are properly initialized.
|
||
isValid: function () {
|
||
return !!(this.min && this.max);
|
||
},
|
||
|
||
|
||
// @method pad(bufferRatio: Number): Bounds
|
||
// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
|
||
// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
|
||
// Negative values will retract the bounds.
|
||
pad: function (bufferRatio) {
|
||
var min = this.min,
|
||
max = this.max,
|
||
heightBuffer = Math.abs(min.x - max.x) * bufferRatio,
|
||
widthBuffer = Math.abs(min.y - max.y) * bufferRatio;
|
||
|
||
|
||
return toBounds(
|
||
toPoint(min.x - heightBuffer, min.y - widthBuffer),
|
||
toPoint(max.x + heightBuffer, max.y + widthBuffer));
|
||
},
|
||
|
||
|
||
// @method equals(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle is equivalent to the given bounds.
|
||
equals: function (bounds) {
|
||
if (!bounds) { return false; }
|
||
|
||
bounds = toBounds(bounds);
|
||
|
||
return this.min.equals(bounds.getTopLeft()) &&
|
||
this.max.equals(bounds.getBottomRight());
|
||
},
|
||
};
|
||
|
||
|
||
// @factory L.bounds(corner1: Point, corner2: Point)
|
||
// Creates a Bounds object from two corners coordinate pairs.
|
||
// @alternative
|
||
// @factory L.bounds(points: Point[])
|
||
// Creates a Bounds object from the given array of points.
|
||
function toBounds(a, b) {
|
||
if (!a || a instanceof Bounds) {
|
||
return a;
|
||
}
|
||
return new Bounds(a, b);
|
||
}
|
||
|
||
/*
|
||
* @class LatLngBounds
|
||
* @aka L.LatLngBounds
|
||
*
|
||
* Represents a rectangular geographical area on a map.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var corner1 = L.latLng(40.712, -74.227),
|
||
* corner2 = L.latLng(40.774, -74.125),
|
||
* bounds = L.latLngBounds(corner1, corner2);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
|
||
*
|
||
* ```js
|
||
* map.fitBounds([
|
||
* [40.712, -74.227],
|
||
* [40.774, -74.125]
|
||
* ]);
|
||
* ```
|
||
*
|
||
* Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.
|
||
*
|
||
* Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])
|
||
if (!corner1) { return; }
|
||
|
||
var latlngs = corner2 ? [corner1, corner2] : corner1;
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
this.extend(latlngs[i]);
|
||
}
|
||
}
|
||
|
||
LatLngBounds.prototype = {
|
||
|
||
// @method extend(latlng: LatLng): this
|
||
// Extend the bounds to contain the given point
|
||
|
||
// @alternative
|
||
// @method extend(otherBounds: LatLngBounds): this
|
||
// Extend the bounds to contain the given bounds
|
||
extend: function (obj) {
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2, ne2;
|
||
|
||
if (obj instanceof LatLng) {
|
||
sw2 = obj;
|
||
ne2 = obj;
|
||
|
||
} else if (obj instanceof LatLngBounds) {
|
||
sw2 = obj._southWest;
|
||
ne2 = obj._northEast;
|
||
|
||
if (!sw2 || !ne2) { return this; }
|
||
|
||
} else {
|
||
return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;
|
||
}
|
||
|
||
if (!sw && !ne) {
|
||
this._southWest = new LatLng(sw2.lat, sw2.lng);
|
||
this._northEast = new LatLng(ne2.lat, ne2.lng);
|
||
} else {
|
||
sw.lat = Math.min(sw2.lat, sw.lat);
|
||
sw.lng = Math.min(sw2.lng, sw.lng);
|
||
ne.lat = Math.max(ne2.lat, ne.lat);
|
||
ne.lng = Math.max(ne2.lng, ne.lng);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method pad(bufferRatio: Number): LatLngBounds
|
||
// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
|
||
// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
|
||
// Negative values will retract the bounds.
|
||
pad: function (bufferRatio) {
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
|
||
widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
|
||
|
||
return new LatLngBounds(
|
||
new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
|
||
new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center point of the bounds.
|
||
getCenter: function () {
|
||
return new LatLng(
|
||
(this._southWest.lat + this._northEast.lat) / 2,
|
||
(this._southWest.lng + this._northEast.lng) / 2);
|
||
},
|
||
|
||
// @method getSouthWest(): LatLng
|
||
// Returns the south-west point of the bounds.
|
||
getSouthWest: function () {
|
||
return this._southWest;
|
||
},
|
||
|
||
// @method getNorthEast(): LatLng
|
||
// Returns the north-east point of the bounds.
|
||
getNorthEast: function () {
|
||
return this._northEast;
|
||
},
|
||
|
||
// @method getNorthWest(): LatLng
|
||
// Returns the north-west point of the bounds.
|
||
getNorthWest: function () {
|
||
return new LatLng(this.getNorth(), this.getWest());
|
||
},
|
||
|
||
// @method getSouthEast(): LatLng
|
||
// Returns the south-east point of the bounds.
|
||
getSouthEast: function () {
|
||
return new LatLng(this.getSouth(), this.getEast());
|
||
},
|
||
|
||
// @method getWest(): Number
|
||
// Returns the west longitude of the bounds
|
||
getWest: function () {
|
||
return this._southWest.lng;
|
||
},
|
||
|
||
// @method getSouth(): Number
|
||
// Returns the south latitude of the bounds
|
||
getSouth: function () {
|
||
return this._southWest.lat;
|
||
},
|
||
|
||
// @method getEast(): Number
|
||
// Returns the east longitude of the bounds
|
||
getEast: function () {
|
||
return this._northEast.lng;
|
||
},
|
||
|
||
// @method getNorth(): Number
|
||
// Returns the north latitude of the bounds
|
||
getNorth: function () {
|
||
return this._northEast.lat;
|
||
},
|
||
|
||
// @method contains(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle contains the given one.
|
||
|
||
// @alternative
|
||
// @method contains (latlng: LatLng): Boolean
|
||
// Returns `true` if the rectangle contains the given point.
|
||
contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
|
||
if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {
|
||
obj = toLatLng(obj);
|
||
} else {
|
||
obj = toLatLngBounds(obj);
|
||
}
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2, ne2;
|
||
|
||
if (obj instanceof LatLngBounds) {
|
||
sw2 = obj.getSouthWest();
|
||
ne2 = obj.getNorthEast();
|
||
} else {
|
||
sw2 = ne2 = obj;
|
||
}
|
||
|
||
return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
|
||
(sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
|
||
},
|
||
|
||
// @method intersects(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.
|
||
intersects: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2 = bounds.getSouthWest(),
|
||
ne2 = bounds.getNorthEast(),
|
||
|
||
latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
|
||
lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
|
||
|
||
return latIntersects && lngIntersects;
|
||
},
|
||
|
||
// @method overlaps(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.
|
||
overlaps: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2 = bounds.getSouthWest(),
|
||
ne2 = bounds.getNorthEast(),
|
||
|
||
latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),
|
||
lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);
|
||
|
||
return latOverlaps && lngOverlaps;
|
||
},
|
||
|
||
// @method toBBoxString(): String
|
||
// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.
|
||
toBBoxString: function () {
|
||
return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
|
||
},
|
||
|
||
// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean
|
||
// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.
|
||
equals: function (bounds, maxMargin) {
|
||
if (!bounds) { return false; }
|
||
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
return this._southWest.equals(bounds.getSouthWest(), maxMargin) &&
|
||
this._northEast.equals(bounds.getNorthEast(), maxMargin);
|
||
},
|
||
|
||
// @method isValid(): Boolean
|
||
// Returns `true` if the bounds are properly initialized.
|
||
isValid: function () {
|
||
return !!(this._southWest && this._northEast);
|
||
}
|
||
};
|
||
|
||
// TODO International date line?
|
||
|
||
// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)
|
||
// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.
|
||
|
||
// @alternative
|
||
// @factory L.latLngBounds(latlngs: LatLng[])
|
||
// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).
|
||
function toLatLngBounds(a, b) {
|
||
if (a instanceof LatLngBounds) {
|
||
return a;
|
||
}
|
||
return new LatLngBounds(a, b);
|
||
}
|
||
|
||
/* @class LatLng
|
||
* @aka L.LatLng
|
||
*
|
||
* Represents a geographical point with a certain latitude and longitude.
|
||
*
|
||
* @example
|
||
*
|
||
* ```
|
||
* var latlng = L.latLng(50.5, 30.5);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:
|
||
*
|
||
* ```
|
||
* map.panTo([50, 30]);
|
||
* map.panTo({lon: 30, lat: 50});
|
||
* map.panTo({lat: 50, lng: 30});
|
||
* map.panTo(L.latLng(50, 30));
|
||
* ```
|
||
*
|
||
* Note that `LatLng` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function LatLng(lat, lng, alt) {
|
||
if (isNaN(lat) || isNaN(lng)) {
|
||
throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
|
||
}
|
||
|
||
// @property lat: Number
|
||
// Latitude in degrees
|
||
this.lat = +lat;
|
||
|
||
// @property lng: Number
|
||
// Longitude in degrees
|
||
this.lng = +lng;
|
||
|
||
// @property alt: Number
|
||
// Altitude in meters (optional)
|
||
if (alt !== undefined) {
|
||
this.alt = +alt;
|
||
}
|
||
}
|
||
|
||
LatLng.prototype = {
|
||
// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean
|
||
// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.
|
||
equals: function (obj, maxMargin) {
|
||
if (!obj) { return false; }
|
||
|
||
obj = toLatLng(obj);
|
||
|
||
var margin = Math.max(
|
||
Math.abs(this.lat - obj.lat),
|
||
Math.abs(this.lng - obj.lng));
|
||
|
||
return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);
|
||
},
|
||
|
||
// @method toString(): String
|
||
// Returns a string representation of the point (for debugging purposes).
|
||
toString: function (precision) {
|
||
return 'LatLng(' +
|
||
formatNum(this.lat, precision) + ', ' +
|
||
formatNum(this.lng, precision) + ')';
|
||
},
|
||
|
||
// @method distanceTo(otherLatLng: LatLng): Number
|
||
// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).
|
||
distanceTo: function (other) {
|
||
return Earth.distance(this, toLatLng(other));
|
||
},
|
||
|
||
// @method wrap(): LatLng
|
||
// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.
|
||
wrap: function () {
|
||
return Earth.wrapLatLng(this);
|
||
},
|
||
|
||
// @method toBounds(sizeInMeters: Number): LatLngBounds
|
||
// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.
|
||
toBounds: function (sizeInMeters) {
|
||
var latAccuracy = 180 * sizeInMeters / 40075017,
|
||
lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);
|
||
|
||
return toLatLngBounds(
|
||
[this.lat - latAccuracy, this.lng - lngAccuracy],
|
||
[this.lat + latAccuracy, this.lng + lngAccuracy]);
|
||
},
|
||
|
||
clone: function () {
|
||
return new LatLng(this.lat, this.lng, this.alt);
|
||
}
|
||
};
|
||
|
||
|
||
|
||
// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng
|
||
// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).
|
||
|
||
// @alternative
|
||
// @factory L.latLng(coords: Array): LatLng
|
||
// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.
|
||
|
||
// @alternative
|
||
// @factory L.latLng(coords: Object): LatLng
|
||
// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.
|
||
|
||
function toLatLng(a, b, c) {
|
||
if (a instanceof LatLng) {
|
||
return a;
|
||
}
|
||
if (isArray(a) && typeof a[0] !== 'object') {
|
||
if (a.length === 3) {
|
||
return new LatLng(a[0], a[1], a[2]);
|
||
}
|
||
if (a.length === 2) {
|
||
return new LatLng(a[0], a[1]);
|
||
}
|
||
return null;
|
||
}
|
||
if (a === undefined || a === null) {
|
||
return a;
|
||
}
|
||
if (typeof a === 'object' && 'lat' in a) {
|
||
return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);
|
||
}
|
||
if (b === undefined) {
|
||
return null;
|
||
}
|
||
return new LatLng(a, b, c);
|
||
}
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Base
|
||
* Object that defines coordinate reference systems for projecting
|
||
* geographical points into pixel (screen) coordinates and back (and to
|
||
* coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See
|
||
* [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).
|
||
*
|
||
* Leaflet defines the most usual CRSs by default. If you want to use a
|
||
* CRS not defined by default, take a look at the
|
||
* [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.
|
||
*
|
||
* Note that the CRS instances do not inherit from Leaflet's `Class` object,
|
||
* and can't be instantiated. Also, new classes can't inherit from them,
|
||
* and methods can't be added to them with the `include` function.
|
||
*/
|
||
|
||
var CRS = {
|
||
// @method latLngToPoint(latlng: LatLng, zoom: Number): Point
|
||
// Projects geographical coordinates into pixel coordinates for a given zoom.
|
||
latLngToPoint: function (latlng, zoom) {
|
||
var projectedPoint = this.projection.project(latlng),
|
||
scale = this.scale(zoom);
|
||
|
||
return this.transformation._transform(projectedPoint, scale);
|
||
},
|
||
|
||
// @method pointToLatLng(point: Point, zoom: Number): LatLng
|
||
// The inverse of `latLngToPoint`. Projects pixel coordinates on a given
|
||
// zoom into geographical coordinates.
|
||
pointToLatLng: function (point, zoom) {
|
||
var scale = this.scale(zoom),
|
||
untransformedPoint = this.transformation.untransform(point, scale);
|
||
|
||
return this.projection.unproject(untransformedPoint);
|
||
},
|
||
|
||
// @method project(latlng: LatLng): Point
|
||
// Projects geographical coordinates into coordinates in units accepted for
|
||
// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).
|
||
project: function (latlng) {
|
||
return this.projection.project(latlng);
|
||
},
|
||
|
||
// @method unproject(point: Point): LatLng
|
||
// Given a projected coordinate returns the corresponding LatLng.
|
||
// The inverse of `project`.
|
||
unproject: function (point) {
|
||
return this.projection.unproject(point);
|
||
},
|
||
|
||
// @method scale(zoom: Number): Number
|
||
// Returns the scale used when transforming projected coordinates into
|
||
// pixel coordinates for a particular zoom. For example, it returns
|
||
// `256 * 2^zoom` for Mercator-based CRS.
|
||
scale: function (zoom) {
|
||
return 256 * Math.pow(2, zoom);
|
||
},
|
||
|
||
// @method zoom(scale: Number): Number
|
||
// Inverse of `scale()`, returns the zoom level corresponding to a scale
|
||
// factor of `scale`.
|
||
zoom: function (scale) {
|
||
return Math.log(scale / 256) / Math.LN2;
|
||
},
|
||
|
||
// @method getProjectedBounds(zoom: Number): Bounds
|
||
// Returns the projection's bounds scaled and transformed for the provided `zoom`.
|
||
getProjectedBounds: function (zoom) {
|
||
if (this.infinite) { return null; }
|
||
|
||
var b = this.projection.bounds,
|
||
s = this.scale(zoom),
|
||
min = this.transformation.transform(b.min, s),
|
||
max = this.transformation.transform(b.max, s);
|
||
|
||
return new Bounds(min, max);
|
||
},
|
||
|
||
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
||
// Returns the distance between two geographical coordinates.
|
||
|
||
// @property code: String
|
||
// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)
|
||
//
|
||
// @property wrapLng: Number[]
|
||
// An array of two numbers defining whether the longitude (horizontal) coordinate
|
||
// axis wraps around a given range and how. Defaults to `[-180, 180]` in most
|
||
// geographical CRSs. If `undefined`, the longitude axis does not wrap around.
|
||
//
|
||
// @property wrapLat: Number[]
|
||
// Like `wrapLng`, but for the latitude (vertical) axis.
|
||
|
||
// wrapLng: [min, max],
|
||
// wrapLat: [min, max],
|
||
|
||
// @property infinite: Boolean
|
||
// If true, the coordinate space will be unbounded (infinite in both axes)
|
||
infinite: false,
|
||
|
||
// @method wrapLatLng(latlng: LatLng): LatLng
|
||
// Returns a `LatLng` where lat and lng has been wrapped according to the
|
||
// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.
|
||
wrapLatLng: function (latlng) {
|
||
var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
|
||
lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,
|
||
alt = latlng.alt;
|
||
|
||
return new LatLng(lat, lng, alt);
|
||
},
|
||
|
||
// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
|
||
// Returns a `LatLngBounds` with the same size as the given one, ensuring
|
||
// that its center is within the CRS's bounds.
|
||
// Only accepts actual `L.LatLngBounds` instances, not arrays.
|
||
wrapLatLngBounds: function (bounds) {
|
||
var center = bounds.getCenter(),
|
||
newCenter = this.wrapLatLng(center),
|
||
latShift = center.lat - newCenter.lat,
|
||
lngShift = center.lng - newCenter.lng;
|
||
|
||
if (latShift === 0 && lngShift === 0) {
|
||
return bounds;
|
||
}
|
||
|
||
var sw = bounds.getSouthWest(),
|
||
ne = bounds.getNorthEast(),
|
||
newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),
|
||
newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);
|
||
|
||
return new LatLngBounds(newSw, newNe);
|
||
}
|
||
};
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Earth
|
||
*
|
||
* Serves as the base for CRS that are global such that they cover the earth.
|
||
* Can only be used as the base for other CRS and cannot be used directly,
|
||
* since it does not have a `code`, `projection` or `transformation`. `distance()` returns
|
||
* meters.
|
||
*/
|
||
|
||
var Earth = extend({}, CRS, {
|
||
wrapLng: [-180, 180],
|
||
|
||
// Mean Earth Radius, as recommended for use by
|
||
// the International Union of Geodesy and Geophysics,
|
||
// see https://rosettacode.org/wiki/Haversine_formula
|
||
R: 6371000,
|
||
|
||
// distance between two geographical points using spherical law of cosines approximation
|
||
distance: function (latlng1, latlng2) {
|
||
var rad = Math.PI / 180,
|
||
lat1 = latlng1.lat * rad,
|
||
lat2 = latlng2.lat * rad,
|
||
sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),
|
||
sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),
|
||
a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,
|
||
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||
return this.R * c;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @projection L.Projection.SphericalMercator
|
||
*
|
||
* Spherical Mercator projection — the most common projection for online maps,
|
||
* used by almost all free and commercial tile providers. Assumes that Earth is
|
||
* a sphere. Used by the `EPSG:3857` CRS.
|
||
*/
|
||
|
||
var earthRadius = 6378137;
|
||
|
||
var SphericalMercator = {
|
||
|
||
R: earthRadius,
|
||
MAX_LATITUDE: 85.0511287798,
|
||
|
||
project: function (latlng) {
|
||
var d = Math.PI / 180,
|
||
max = this.MAX_LATITUDE,
|
||
lat = Math.max(Math.min(max, latlng.lat), -max),
|
||
sin = Math.sin(lat * d);
|
||
|
||
return new Point(
|
||
this.R * latlng.lng * d,
|
||
this.R * Math.log((1 + sin) / (1 - sin)) / 2);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
var d = 180 / Math.PI;
|
||
|
||
return new LatLng(
|
||
(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,
|
||
point.x * d / this.R);
|
||
},
|
||
|
||
bounds: (function () {
|
||
var d = earthRadius * Math.PI;
|
||
return new Bounds([-d, -d], [d, d]);
|
||
})()
|
||
};
|
||
|
||
/*
|
||
* @class Transformation
|
||
* @aka L.Transformation
|
||
*
|
||
* Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`
|
||
* for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing
|
||
* the reverse. Used by Leaflet in its projections code.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var transformation = L.transformation(2, 5, -1, 10),
|
||
* p = L.point(1, 2),
|
||
* p2 = transformation.transform(p), // L.point(7, 8)
|
||
* p3 = transformation.untransform(p2); // L.point(1, 2)
|
||
* ```
|
||
*/
|
||
|
||
|
||
// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)
|
||
// Creates a `Transformation` object with the given coefficients.
|
||
function Transformation(a, b, c, d) {
|
||
if (isArray(a)) {
|
||
// use array properties
|
||
this._a = a[0];
|
||
this._b = a[1];
|
||
this._c = a[2];
|
||
this._d = a[3];
|
||
return;
|
||
}
|
||
this._a = a;
|
||
this._b = b;
|
||
this._c = c;
|
||
this._d = d;
|
||
}
|
||
|
||
Transformation.prototype = {
|
||
// @method transform(point: Point, scale?: Number): Point
|
||
// Returns a transformed point, optionally multiplied by the given scale.
|
||
// Only accepts actual `L.Point` instances, not arrays.
|
||
transform: function (point, scale) { // (Point, Number) -> Point
|
||
return this._transform(point.clone(), scale);
|
||
},
|
||
|
||
// destructive transform (faster)
|
||
_transform: function (point, scale) {
|
||
scale = scale || 1;
|
||
point.x = scale * (this._a * point.x + this._b);
|
||
point.y = scale * (this._c * point.y + this._d);
|
||
return point;
|
||
},
|
||
|
||
// @method untransform(point: Point, scale?: Number): Point
|
||
// Returns the reverse transformation of the given point, optionally divided
|
||
// by the given scale. Only accepts actual `L.Point` instances, not arrays.
|
||
untransform: function (point, scale) {
|
||
scale = scale || 1;
|
||
return new Point(
|
||
(point.x / scale - this._b) / this._a,
|
||
(point.y / scale - this._d) / this._c);
|
||
}
|
||
};
|
||
|
||
// factory L.transformation(a: Number, b: Number, c: Number, d: Number)
|
||
|
||
// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)
|
||
// Instantiates a Transformation object with the given coefficients.
|
||
|
||
// @alternative
|
||
// @factory L.transformation(coefficients: Array): Transformation
|
||
// Expects an coefficients array of the form
|
||
// `[a: Number, b: Number, c: Number, d: Number]`.
|
||
|
||
function toTransformation(a, b, c, d) {
|
||
return new Transformation(a, b, c, d);
|
||
}
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG3857
|
||
*
|
||
* The most common CRS for online maps, used by almost all free and commercial
|
||
* tile providers. Uses Spherical Mercator projection. Set in by default in
|
||
* Map's `crs` option.
|
||
*/
|
||
|
||
var EPSG3857 = extend({}, Earth, {
|
||
code: 'EPSG:3857',
|
||
projection: SphericalMercator,
|
||
|
||
transformation: (function () {
|
||
var scale = 0.5 / (Math.PI * SphericalMercator.R);
|
||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||
}())
|
||
});
|
||
|
||
var EPSG900913 = extend({}, EPSG3857, {
|
||
code: 'EPSG:900913'
|
||
});
|
||
|
||
// @namespace SVG; @section
|
||
// There are several static functions which can be called without instantiating L.SVG:
|
||
|
||
// @function create(name: String): SVGElement
|
||
// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),
|
||
// corresponding to the class name passed. For example, using 'line' will return
|
||
// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).
|
||
function svgCreate(name) {
|
||
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
||
}
|
||
|
||
// @function pointsToPath(rings: Point[], closed: Boolean): String
|
||
// Generates a SVG path string for multiple rings, with each ring turning
|
||
// into "M..L..L.." instructions
|
||
function pointsToPath(rings, closed) {
|
||
var str = '',
|
||
i, j, len, len2, points, p;
|
||
|
||
for (i = 0, len = rings.length; i < len; i++) {
|
||
points = rings[i];
|
||
|
||
for (j = 0, len2 = points.length; j < len2; j++) {
|
||
p = points[j];
|
||
str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
|
||
}
|
||
|
||
// closes the ring for polygons; "x" is VML syntax
|
||
str += closed ? (Browser.svg ? 'z' : 'x') : '';
|
||
}
|
||
|
||
// SVG complains about empty path strings
|
||
return str || 'M0 0';
|
||
}
|
||
|
||
/*
|
||
* @namespace Browser
|
||
* @aka L.Browser
|
||
*
|
||
* A namespace with static properties for browser/feature detection used by Leaflet internally.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* if (L.Browser.ielt9) {
|
||
* alert('Upgrade your browser, dude!');
|
||
* }
|
||
* ```
|
||
*/
|
||
|
||
var style = document.documentElement.style;
|
||
|
||
// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).
|
||
var ie = 'ActiveXObject' in window;
|
||
|
||
// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.
|
||
var ielt9 = ie && !document.addEventListener;
|
||
|
||
// @property edge: Boolean; `true` for the Edge web browser.
|
||
var edge = 'msLaunchUri' in navigator && !('documentMode' in document);
|
||
|
||
// @property webkit: Boolean;
|
||
// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).
|
||
var webkit = userAgentContains('webkit');
|
||
|
||
// @property android: Boolean
|
||
// **Deprecated.** `true` for any browser running on an Android platform.
|
||
var android = userAgentContains('android');
|
||
|
||
// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.
|
||
var android23 = userAgentContains('android 2') || userAgentContains('android 3');
|
||
|
||
/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */
|
||
var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit
|
||
// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)
|
||
var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);
|
||
|
||
// @property opera: Boolean; `true` for the Opera browser
|
||
var opera = !!window.opera;
|
||
|
||
// @property chrome: Boolean; `true` for the Chrome browser.
|
||
var chrome = !edge && userAgentContains('chrome');
|
||
|
||
// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.
|
||
var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;
|
||
|
||
// @property safari: Boolean; `true` for the Safari browser.
|
||
var safari = !chrome && userAgentContains('safari');
|
||
|
||
var phantom = userAgentContains('phantom');
|
||
|
||
// @property opera12: Boolean
|
||
// `true` for the Opera browser supporting CSS transforms (version 12 or later).
|
||
var opera12 = 'OTransition' in style;
|
||
|
||
// @property win: Boolean; `true` when the browser is running in a Windows platform
|
||
var win = navigator.platform.indexOf('Win') === 0;
|
||
|
||
// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.
|
||
var ie3d = ie && ('transition' in style);
|
||
|
||
// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.
|
||
var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;
|
||
|
||
// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.
|
||
var gecko3d = 'MozPerspective' in style;
|
||
|
||
// @property any3d: Boolean
|
||
// `true` for all browsers supporting CSS transforms.
|
||
var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;
|
||
|
||
// @property mobile: Boolean; `true` for all browsers running in a mobile device.
|
||
var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');
|
||
|
||
// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.
|
||
var mobileWebkit = mobile && webkit;
|
||
|
||
// @property mobileWebkit3d: Boolean
|
||
// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.
|
||
var mobileWebkit3d = mobile && webkit3d;
|
||
|
||
// @property msPointer: Boolean
|
||
// `true` for browsers implementing the Microsoft touch events model (notably IE10).
|
||
var msPointer = !window.PointerEvent && window.MSPointerEvent;
|
||
|
||
// @property pointer: Boolean
|
||
// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).
|
||
var pointer = !!(window.PointerEvent || msPointer);
|
||
|
||
// @property touchNative: Boolean
|
||
// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).
|
||
// **This does not necessarily mean** that the browser is running in a computer with
|
||
// a touchscreen, it only means that the browser is capable of understanding
|
||
// touch events.
|
||
var touchNative = 'ontouchstart' in window || !!window.TouchEvent;
|
||
|
||
// @property touch: Boolean
|
||
// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.
|
||
// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.
|
||
var touch = !window.L_NO_TOUCH && (touchNative || pointer);
|
||
|
||
// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.
|
||
var mobileOpera = mobile && opera;
|
||
|
||
// @property mobileGecko: Boolean
|
||
// `true` for gecko-based browsers running in a mobile device.
|
||
var mobileGecko = mobile && gecko;
|
||
|
||
// @property retina: Boolean
|
||
// `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%.
|
||
var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;
|
||
|
||
// @property passiveEvents: Boolean
|
||
// `true` for browsers that support passive events.
|
||
var passiveEvents = (function () {
|
||
var supportsPassiveOption = false;
|
||
try {
|
||
var opts = Object.defineProperty({}, 'passive', {
|
||
get: function () { // eslint-disable-line getter-return
|
||
supportsPassiveOption = true;
|
||
}
|
||
});
|
||
window.addEventListener('testPassiveEventSupport', falseFn, opts);
|
||
window.removeEventListener('testPassiveEventSupport', falseFn, opts);
|
||
} catch (e) {
|
||
// Errors can safely be ignored since this is only a browser support test.
|
||
}
|
||
return supportsPassiveOption;
|
||
}());
|
||
|
||
// @property canvas: Boolean
|
||
// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
|
||
var canvas$1 = (function () {
|
||
return !!document.createElement('canvas').getContext;
|
||
}());
|
||
|
||
// @property svg: Boolean
|
||
// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).
|
||
var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);
|
||
|
||
var inlineSvg = !!svg$1 && (function () {
|
||
var div = document.createElement('div');
|
||
div.innerHTML = '<svg/>';
|
||
return (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';
|
||
})();
|
||
|
||
// @property vml: Boolean
|
||
// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).
|
||
var vml = !svg$1 && (function () {
|
||
try {
|
||
var div = document.createElement('div');
|
||
div.innerHTML = '<v:shape adj="1"/>';
|
||
|
||
var shape = div.firstChild;
|
||
shape.style.behavior = 'url(#default#VML)';
|
||
|
||
return shape && (typeof shape.adj === 'object');
|
||
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
}());
|
||
|
||
|
||
// @property mac: Boolean; `true` when the browser is running in a Mac platform
|
||
var mac = navigator.platform.indexOf('Mac') === 0;
|
||
|
||
// @property mac: Boolean; `true` when the browser is running in a Linux platform
|
||
var linux = navigator.platform.indexOf('Linux') === 0;
|
||
|
||
function userAgentContains(str) {
|
||
return navigator.userAgent.toLowerCase().indexOf(str) >= 0;
|
||
}
|
||
|
||
|
||
var Browser = {
|
||
ie: ie,
|
||
ielt9: ielt9,
|
||
edge: edge,
|
||
webkit: webkit,
|
||
android: android,
|
||
android23: android23,
|
||
androidStock: androidStock,
|
||
opera: opera,
|
||
chrome: chrome,
|
||
gecko: gecko,
|
||
safari: safari,
|
||
phantom: phantom,
|
||
opera12: opera12,
|
||
win: win,
|
||
ie3d: ie3d,
|
||
webkit3d: webkit3d,
|
||
gecko3d: gecko3d,
|
||
any3d: any3d,
|
||
mobile: mobile,
|
||
mobileWebkit: mobileWebkit,
|
||
mobileWebkit3d: mobileWebkit3d,
|
||
msPointer: msPointer,
|
||
pointer: pointer,
|
||
touch: touch,
|
||
touchNative: touchNative,
|
||
mobileOpera: mobileOpera,
|
||
mobileGecko: mobileGecko,
|
||
retina: retina,
|
||
passiveEvents: passiveEvents,
|
||
canvas: canvas$1,
|
||
svg: svg$1,
|
||
vml: vml,
|
||
inlineSvg: inlineSvg,
|
||
mac: mac,
|
||
linux: linux
|
||
};
|
||
|
||
/*
|
||
* Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
|
||
*/
|
||
|
||
var POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';
|
||
var POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';
|
||
var POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';
|
||
var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';
|
||
var pEvent = {
|
||
touchstart : POINTER_DOWN,
|
||
touchmove : POINTER_MOVE,
|
||
touchend : POINTER_UP,
|
||
touchcancel : POINTER_CANCEL
|
||
};
|
||
var handle = {
|
||
touchstart : _onPointerStart,
|
||
touchmove : _handlePointer,
|
||
touchend : _handlePointer,
|
||
touchcancel : _handlePointer
|
||
};
|
||
var _pointers = {};
|
||
var _pointerDocListener = false;
|
||
|
||
// Provides a touch events wrapper for (ms)pointer events.
|
||
// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
|
||
|
||
function addPointerListener(obj, type, handler) {
|
||
if (type === 'touchstart') {
|
||
_addPointerDocListener();
|
||
}
|
||
if (!handle[type]) {
|
||
console.warn('wrong event specified:', type);
|
||
return falseFn;
|
||
}
|
||
handler = handle[type].bind(this, handler);
|
||
obj.addEventListener(pEvent[type], handler, false);
|
||
return handler;
|
||
}
|
||
|
||
function removePointerListener(obj, type, handler) {
|
||
if (!pEvent[type]) {
|
||
console.warn('wrong event specified:', type);
|
||
return;
|
||
}
|
||
obj.removeEventListener(pEvent[type], handler, false);
|
||
}
|
||
|
||
function _globalPointerDown(e) {
|
||
_pointers[e.pointerId] = e;
|
||
}
|
||
|
||
function _globalPointerMove(e) {
|
||
if (_pointers[e.pointerId]) {
|
||
_pointers[e.pointerId] = e;
|
||
}
|
||
}
|
||
|
||
function _globalPointerUp(e) {
|
||
delete _pointers[e.pointerId];
|
||
}
|
||
|
||
function _addPointerDocListener() {
|
||
// need to keep track of what pointers and how many are active to provide e.touches emulation
|
||
if (!_pointerDocListener) {
|
||
// we listen document as any drags that end by moving the touch off the screen get fired there
|
||
document.addEventListener(POINTER_DOWN, _globalPointerDown, true);
|
||
document.addEventListener(POINTER_MOVE, _globalPointerMove, true);
|
||
document.addEventListener(POINTER_UP, _globalPointerUp, true);
|
||
document.addEventListener(POINTER_CANCEL, _globalPointerUp, true);
|
||
|
||
_pointerDocListener = true;
|
||
}
|
||
}
|
||
|
||
function _handlePointer(handler, e) {
|
||
if (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }
|
||
|
||
e.touches = [];
|
||
for (var i in _pointers) {
|
||
e.touches.push(_pointers[i]);
|
||
}
|
||
e.changedTouches = [e];
|
||
|
||
handler(e);
|
||
}
|
||
|
||
function _onPointerStart(handler, e) {
|
||
// IE10 specific: MsTouch needs preventDefault. See #2000
|
||
if (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {
|
||
preventDefault(e);
|
||
}
|
||
_handlePointer(handler, e);
|
||
}
|
||
|
||
/*
|
||
* Extends the event handling code with double tap support for mobile browsers.
|
||
*
|
||
* Note: currently most browsers fire native dblclick, with only a few exceptions
|
||
* (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)
|
||
*/
|
||
|
||
function makeDblclick(event) {
|
||
// in modern browsers `type` cannot be just overridden:
|
||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only
|
||
var newEvent = {},
|
||
prop, i;
|
||
for (i in event) {
|
||
prop = event[i];
|
||
newEvent[i] = prop && prop.bind ? prop.bind(event) : prop;
|
||
}
|
||
event = newEvent;
|
||
newEvent.type = 'dblclick';
|
||
newEvent.detail = 2;
|
||
newEvent.isTrusted = false;
|
||
newEvent._simulated = true; // for debug purposes
|
||
return newEvent;
|
||
}
|
||
|
||
var delay = 200;
|
||
function addDoubleTapListener(obj, handler) {
|
||
// Most browsers handle double tap natively
|
||
obj.addEventListener('dblclick', handler);
|
||
|
||
// On some platforms the browser doesn't fire native dblclicks for touch events.
|
||
// It seems that in all such cases `detail` property of `click` event is always `1`.
|
||
// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.
|
||
var last = 0,
|
||
detail;
|
||
function simDblclick(e) {
|
||
if (e.detail !== 1) {
|
||
detail = e.detail; // keep in sync to avoid false dblclick in some cases
|
||
return;
|
||
}
|
||
|
||
if (e.pointerType === 'mouse' ||
|
||
(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {
|
||
|
||
return;
|
||
}
|
||
|
||
// When clicking on an <input>, the browser generates a click on its
|
||
// <label> (and vice versa) triggering two clicks in quick succession.
|
||
// This ignores clicks on elements which are a label with a 'for'
|
||
// attribute (or children of such a label), but not children of
|
||
// a <input>.
|
||
var path = getPropagationPath(e);
|
||
if (path.some(function (el) {
|
||
return el instanceof HTMLLabelElement && el.attributes.for;
|
||
}) &&
|
||
!path.some(function (el) {
|
||
return (
|
||
el instanceof HTMLInputElement ||
|
||
el instanceof HTMLSelectElement
|
||
);
|
||
})
|
||
) {
|
||
return;
|
||
}
|
||
|
||
var now = Date.now();
|
||
if (now - last <= delay) {
|
||
detail++;
|
||
if (detail === 2) {
|
||
handler(makeDblclick(e));
|
||
}
|
||
} else {
|
||
detail = 1;
|
||
}
|
||
last = now;
|
||
}
|
||
|
||
obj.addEventListener('click', simDblclick);
|
||
|
||
return {
|
||
dblclick: handler,
|
||
simDblclick: simDblclick
|
||
};
|
||
}
|
||
|
||
function removeDoubleTapListener(obj, handlers) {
|
||
obj.removeEventListener('dblclick', handlers.dblclick);
|
||
obj.removeEventListener('click', handlers.simDblclick);
|
||
}
|
||
|
||
/*
|
||
* @namespace DomUtil
|
||
*
|
||
* Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)
|
||
* tree, used by Leaflet internally.
|
||
*
|
||
* Most functions expecting or returning a `HTMLElement` also work for
|
||
* SVG elements. The only difference is that classes refer to CSS classes
|
||
* in HTML and SVG classes in SVG.
|
||
*/
|
||
|
||
|
||
// @property TRANSFORM: String
|
||
// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).
|
||
var TRANSFORM = testProp(
|
||
['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
|
||
|
||
// webkitTransition comes first because some browser versions that drop vendor prefix don't do
|
||
// the same for the transitionend event, in particular the Android 4.1 stock browser
|
||
|
||
// @property TRANSITION: String
|
||
// Vendor-prefixed transition style name.
|
||
var TRANSITION = testProp(
|
||
['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
|
||
|
||
// @property TRANSITION_END: String
|
||
// Vendor-prefixed transitionend event name.
|
||
var TRANSITION_END =
|
||
TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';
|
||
|
||
|
||
// @function get(id: String|HTMLElement): HTMLElement
|
||
// Returns an element given its DOM id, or returns the element itself
|
||
// if it was passed directly.
|
||
function get(id) {
|
||
return typeof id === 'string' ? document.getElementById(id) : id;
|
||
}
|
||
|
||
// @function getStyle(el: HTMLElement, styleAttrib: String): String
|
||
// Returns the value for a certain style attribute on an element,
|
||
// including computed values or values set through CSS.
|
||
function getStyle(el, style) {
|
||
var value = el.style[style] || (el.currentStyle && el.currentStyle[style]);
|
||
|
||
if ((!value || value === 'auto') && document.defaultView) {
|
||
var css = document.defaultView.getComputedStyle(el, null);
|
||
value = css ? css[style] : null;
|
||
}
|
||
return value === 'auto' ? null : value;
|
||
}
|
||
|
||
// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement
|
||
// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.
|
||
function create$1(tagName, className, container) {
|
||
var el = document.createElement(tagName);
|
||
el.className = className || '';
|
||
|
||
if (container) {
|
||
container.appendChild(el);
|
||
}
|
||
return el;
|
||
}
|
||
|
||
// @function remove(el: HTMLElement)
|
||
// Removes `el` from its parent element
|
||
function remove(el) {
|
||
var parent = el.parentNode;
|
||
if (parent) {
|
||
parent.removeChild(el);
|
||
}
|
||
}
|
||
|
||
// @function empty(el: HTMLElement)
|
||
// Removes all of `el`'s children elements from `el`
|
||
function empty(el) {
|
||
while (el.firstChild) {
|
||
el.removeChild(el.firstChild);
|
||
}
|
||
}
|
||
|
||
// @function toFront(el: HTMLElement)
|
||
// Makes `el` the last child of its parent, so it renders in front of the other children.
|
||
function toFront(el) {
|
||
var parent = el.parentNode;
|
||
if (parent && parent.lastChild !== el) {
|
||
parent.appendChild(el);
|
||
}
|
||
}
|
||
|
||
// @function toBack(el: HTMLElement)
|
||
// Makes `el` the first child of its parent, so it renders behind the other children.
|
||
function toBack(el) {
|
||
var parent = el.parentNode;
|
||
if (parent && parent.firstChild !== el) {
|
||
parent.insertBefore(el, parent.firstChild);
|
||
}
|
||
}
|
||
|
||
// @function hasClass(el: HTMLElement, name: String): Boolean
|
||
// Returns `true` if the element's class attribute contains `name`.
|
||
function hasClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
return el.classList.contains(name);
|
||
}
|
||
var className = getClass(el);
|
||
return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
|
||
}
|
||
|
||
// @function addClass(el: HTMLElement, name: String)
|
||
// Adds `name` to the element's class attribute.
|
||
function addClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
var classes = splitWords(name);
|
||
for (var i = 0, len = classes.length; i < len; i++) {
|
||
el.classList.add(classes[i]);
|
||
}
|
||
} else if (!hasClass(el, name)) {
|
||
var className = getClass(el);
|
||
setClass(el, (className ? className + ' ' : '') + name);
|
||
}
|
||
}
|
||
|
||
// @function removeClass(el: HTMLElement, name: String)
|
||
// Removes `name` from the element's class attribute.
|
||
function removeClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
el.classList.remove(name);
|
||
} else {
|
||
setClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));
|
||
}
|
||
}
|
||
|
||
// @function setClass(el: HTMLElement, name: String)
|
||
// Sets the element's class.
|
||
function setClass(el, name) {
|
||
if (el.className.baseVal === undefined) {
|
||
el.className = name;
|
||
} else {
|
||
// in case of SVG element
|
||
el.className.baseVal = name;
|
||
}
|
||
}
|
||
|
||
// @function getClass(el: HTMLElement): String
|
||
// Returns the element's class.
|
||
function getClass(el) {
|
||
// Check if the element is an SVGElementInstance and use the correspondingElement instead
|
||
// (Required for linked SVG elements in IE11.)
|
||
if (el.correspondingElement) {
|
||
el = el.correspondingElement;
|
||
}
|
||
return el.className.baseVal === undefined ? el.className : el.className.baseVal;
|
||
}
|
||
|
||
// @function setOpacity(el: HTMLElement, opacity: Number)
|
||
// Set the opacity of an element (including old IE support).
|
||
// `opacity` must be a number from `0` to `1`.
|
||
function setOpacity(el, value) {
|
||
if ('opacity' in el.style) {
|
||
el.style.opacity = value;
|
||
} else if ('filter' in el.style) {
|
||
_setOpacityIE(el, value);
|
||
}
|
||
}
|
||
|
||
function _setOpacityIE(el, value) {
|
||
var filter = false,
|
||
filterName = 'DXImageTransform.Microsoft.Alpha';
|
||
|
||
// filters collection throws an error if we try to retrieve a filter that doesn't exist
|
||
try {
|
||
filter = el.filters.item(filterName);
|
||
} catch (e) {
|
||
// don't set opacity to 1 if we haven't already set an opacity,
|
||
// it isn't needed and breaks transparent pngs.
|
||
if (value === 1) { return; }
|
||
}
|
||
|
||
value = Math.round(value * 100);
|
||
|
||
if (filter) {
|
||
filter.Enabled = (value !== 100);
|
||
filter.Opacity = value;
|
||
} else {
|
||
el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
|
||
}
|
||
}
|
||
|
||
// @function testProp(props: String[]): String|false
|
||
// Goes through the array of style names and returns the first name
|
||
// that is a valid style name for an element. If no such name is found,
|
||
// it returns false. Useful for vendor-prefixed styles like `transform`.
|
||
function testProp(props) {
|
||
var style = document.documentElement.style;
|
||
|
||
for (var i = 0; i < props.length; i++) {
|
||
if (props[i] in style) {
|
||
return props[i];
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)
|
||
// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels
|
||
// and optionally scaled by `scale`. Does not have an effect if the
|
||
// browser doesn't support 3D CSS transforms.
|
||
function setTransform(el, offset, scale) {
|
||
var pos = offset || new Point(0, 0);
|
||
|
||
el.style[TRANSFORM] =
|
||
(Browser.ie3d ?
|
||
'translate(' + pos.x + 'px,' + pos.y + 'px)' :
|
||
'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +
|
||
(scale ? ' scale(' + scale + ')' : '');
|
||
}
|
||
|
||
// @function setPosition(el: HTMLElement, position: Point)
|
||
// Sets the position of `el` to coordinates specified by `position`,
|
||
// using CSS translate or top/left positioning depending on the browser
|
||
// (used by Leaflet internally to position its layers).
|
||
function setPosition(el, point) {
|
||
|
||
/*eslint-disable */
|
||
el._leaflet_pos = point;
|
||
/* eslint-enable */
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(el, point);
|
||
} else {
|
||
el.style.left = point.x + 'px';
|
||
el.style.top = point.y + 'px';
|
||
}
|
||
}
|
||
|
||
// @function getPosition(el: HTMLElement): Point
|
||
// Returns the coordinates of an element previously positioned with setPosition.
|
||
function getPosition(el) {
|
||
// this method is only used for elements previously positioned using setPosition,
|
||
// so it's safe to cache the position for performance
|
||
|
||
return el._leaflet_pos || new Point(0, 0);
|
||
}
|
||
|
||
// @function disableTextSelection()
|
||
// Prevents the user from generating `selectstart` DOM events, usually generated
|
||
// when the user drags the mouse through a page with text. Used internally
|
||
// by Leaflet to override the behaviour of any click-and-drag interaction on
|
||
// the map. Affects drag interactions on the whole document.
|
||
|
||
// @function enableTextSelection()
|
||
// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).
|
||
var disableTextSelection;
|
||
var enableTextSelection;
|
||
var _userSelect;
|
||
if ('onselectstart' in document) {
|
||
disableTextSelection = function () {
|
||
on(window, 'selectstart', preventDefault);
|
||
};
|
||
enableTextSelection = function () {
|
||
off(window, 'selectstart', preventDefault);
|
||
};
|
||
} else {
|
||
var userSelectProperty = testProp(
|
||
['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
|
||
|
||
disableTextSelection = function () {
|
||
if (userSelectProperty) {
|
||
var style = document.documentElement.style;
|
||
_userSelect = style[userSelectProperty];
|
||
style[userSelectProperty] = 'none';
|
||
}
|
||
};
|
||
enableTextSelection = function () {
|
||
if (userSelectProperty) {
|
||
document.documentElement.style[userSelectProperty] = _userSelect;
|
||
_userSelect = undefined;
|
||
}
|
||
};
|
||
}
|
||
|
||
// @function disableImageDrag()
|
||
// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but
|
||
// for `dragstart` DOM events, usually generated when the user drags an image.
|
||
function disableImageDrag() {
|
||
on(window, 'dragstart', preventDefault);
|
||
}
|
||
|
||
// @function enableImageDrag()
|
||
// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).
|
||
function enableImageDrag() {
|
||
off(window, 'dragstart', preventDefault);
|
||
}
|
||
|
||
var _outlineElement, _outlineStyle;
|
||
// @function preventOutline(el: HTMLElement)
|
||
// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)
|
||
// of the element `el` invisible. Used internally by Leaflet to prevent
|
||
// focusable elements from displaying an outline when the user performs a
|
||
// drag interaction on them.
|
||
function preventOutline(element) {
|
||
while (element.tabIndex === -1) {
|
||
element = element.parentNode;
|
||
}
|
||
if (!element.style) { return; }
|
||
restoreOutline();
|
||
_outlineElement = element;
|
||
_outlineStyle = element.style.outline;
|
||
element.style.outline = 'none';
|
||
on(window, 'keydown', restoreOutline);
|
||
}
|
||
|
||
// @function restoreOutline()
|
||
// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().
|
||
function restoreOutline() {
|
||
if (!_outlineElement) { return; }
|
||
_outlineElement.style.outline = _outlineStyle;
|
||
_outlineElement = undefined;
|
||
_outlineStyle = undefined;
|
||
off(window, 'keydown', restoreOutline);
|
||
}
|
||
|
||
// @function getSizedParentNode(el: HTMLElement): HTMLElement
|
||
// Finds the closest parent node which size (width and height) is not null.
|
||
function getSizedParentNode(element) {
|
||
do {
|
||
element = element.parentNode;
|
||
} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);
|
||
return element;
|
||
}
|
||
|
||
// @function getScale(el: HTMLElement): Object
|
||
// Computes the CSS scale currently applied on the element.
|
||
// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,
|
||
// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
|
||
function getScale(element) {
|
||
var rect = element.getBoundingClientRect(); // Read-only in old browsers.
|
||
|
||
return {
|
||
x: rect.width / element.offsetWidth || 1,
|
||
y: rect.height / element.offsetHeight || 1,
|
||
boundingClientRect: rect
|
||
};
|
||
}
|
||
|
||
var DomUtil = {
|
||
__proto__: null,
|
||
TRANSFORM: TRANSFORM,
|
||
TRANSITION: TRANSITION,
|
||
TRANSITION_END: TRANSITION_END,
|
||
get: get,
|
||
getStyle: getStyle,
|
||
create: create$1,
|
||
remove: remove,
|
||
empty: empty,
|
||
toFront: toFront,
|
||
toBack: toBack,
|
||
hasClass: hasClass,
|
||
addClass: addClass,
|
||
removeClass: removeClass,
|
||
setClass: setClass,
|
||
getClass: getClass,
|
||
setOpacity: setOpacity,
|
||
testProp: testProp,
|
||
setTransform: setTransform,
|
||
setPosition: setPosition,
|
||
getPosition: getPosition,
|
||
get disableTextSelection () { return disableTextSelection; },
|
||
get enableTextSelection () { return enableTextSelection; },
|
||
disableImageDrag: disableImageDrag,
|
||
enableImageDrag: enableImageDrag,
|
||
preventOutline: preventOutline,
|
||
restoreOutline: restoreOutline,
|
||
getSizedParentNode: getSizedParentNode,
|
||
getScale: getScale
|
||
};
|
||
|
||
/*
|
||
* @namespace DomEvent
|
||
* Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.
|
||
*/
|
||
|
||
// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.
|
||
|
||
// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this
|
||
// Adds a listener function (`fn`) to a particular DOM event type of the
|
||
// element `el`. You can optionally specify the context of the listener
|
||
// (object the `this` keyword will point to). You can also pass several
|
||
// space-separated types (e.g. `'click dblclick'`).
|
||
|
||
// @alternative
|
||
// @function on(el: HTMLElement, eventMap: Object, context?: Object): this
|
||
// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
function on(obj, types, fn, context) {
|
||
|
||
if (types && typeof types === 'object') {
|
||
for (var type in types) {
|
||
addOne(obj, type, types[type], fn);
|
||
}
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
addOne(obj, types[i], fn, context);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
var eventsKey = '_leaflet_events';
|
||
|
||
// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this
|
||
// Removes a previously added listener function.
|
||
// Note that if you passed a custom context to on, you must pass the same
|
||
// context to `off` in order to remove the listener.
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement, eventMap: Object, context?: Object): this
|
||
// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement, types: String): this
|
||
// Removes all previously added listeners of given types.
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement): this
|
||
// Removes all previously added listeners from given HTMLElement
|
||
function off(obj, types, fn, context) {
|
||
|
||
if (arguments.length === 1) {
|
||
batchRemove(obj);
|
||
delete obj[eventsKey];
|
||
|
||
} else if (types && typeof types === 'object') {
|
||
for (var type in types) {
|
||
removeOne(obj, type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
if (arguments.length === 2) {
|
||
batchRemove(obj, function (type) {
|
||
return indexOf(types, type) !== -1;
|
||
});
|
||
} else {
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
removeOne(obj, types[i], fn, context);
|
||
}
|
||
}
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
function batchRemove(obj, filterFn) {
|
||
for (var id in obj[eventsKey]) {
|
||
var type = id.split(/\d/)[0];
|
||
if (!filterFn || filterFn(type)) {
|
||
removeOne(obj, type, null, null, id);
|
||
}
|
||
}
|
||
}
|
||
|
||
var mouseSubst = {
|
||
mouseenter: 'mouseover',
|
||
mouseleave: 'mouseout',
|
||
wheel: !('onwheel' in window) && 'mousewheel'
|
||
};
|
||
|
||
function addOne(obj, type, fn, context) {
|
||
var id = type + stamp(fn) + (context ? '_' + stamp(context) : '');
|
||
|
||
if (obj[eventsKey] && obj[eventsKey][id]) { return this; }
|
||
|
||
var handler = function (e) {
|
||
return fn.call(context || obj, e || window.event);
|
||
};
|
||
|
||
var originalHandler = handler;
|
||
|
||
if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
|
||
// Needs DomEvent.Pointer.js
|
||
handler = addPointerListener(obj, type, handler);
|
||
|
||
} else if (Browser.touch && (type === 'dblclick')) {
|
||
handler = addDoubleTapListener(obj, handler);
|
||
|
||
} else if ('addEventListener' in obj) {
|
||
|
||
if (type === 'touchstart' || type === 'touchmove' || type === 'wheel' || type === 'mousewheel') {
|
||
obj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);
|
||
|
||
} else if (type === 'mouseenter' || type === 'mouseleave') {
|
||
handler = function (e) {
|
||
e = e || window.event;
|
||
if (isExternalTarget(obj, e)) {
|
||
originalHandler(e);
|
||
}
|
||
};
|
||
obj.addEventListener(mouseSubst[type], handler, false);
|
||
|
||
} else {
|
||
obj.addEventListener(type, originalHandler, false);
|
||
}
|
||
|
||
} else {
|
||
obj.attachEvent('on' + type, handler);
|
||
}
|
||
|
||
obj[eventsKey] = obj[eventsKey] || {};
|
||
obj[eventsKey][id] = handler;
|
||
}
|
||
|
||
function removeOne(obj, type, fn, context, id) {
|
||
id = id || type + stamp(fn) + (context ? '_' + stamp(context) : '');
|
||
var handler = obj[eventsKey] && obj[eventsKey][id];
|
||
|
||
if (!handler) { return this; }
|
||
|
||
if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
|
||
removePointerListener(obj, type, handler);
|
||
|
||
} else if (Browser.touch && (type === 'dblclick')) {
|
||
removeDoubleTapListener(obj, handler);
|
||
|
||
} else if ('removeEventListener' in obj) {
|
||
|
||
obj.removeEventListener(mouseSubst[type] || type, handler, false);
|
||
|
||
} else {
|
||
obj.detachEvent('on' + type, handler);
|
||
}
|
||
|
||
obj[eventsKey][id] = null;
|
||
}
|
||
|
||
// @function stopPropagation(ev: DOMEvent): this
|
||
// Stop the given event from propagation to parent elements. Used inside the listener functions:
|
||
// ```js
|
||
// L.DomEvent.on(div, 'click', function (ev) {
|
||
// L.DomEvent.stopPropagation(ev);
|
||
// });
|
||
// ```
|
||
function stopPropagation(e) {
|
||
|
||
if (e.stopPropagation) {
|
||
e.stopPropagation();
|
||
} else if (e.originalEvent) { // In case of Leaflet event.
|
||
e.originalEvent._stopped = true;
|
||
} else {
|
||
e.cancelBubble = true;
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
// @function disableScrollPropagation(el: HTMLElement): this
|
||
// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).
|
||
function disableScrollPropagation(el) {
|
||
addOne(el, 'wheel', stopPropagation);
|
||
return this;
|
||
}
|
||
|
||
// @function disableClickPropagation(el: HTMLElement): this
|
||
// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,
|
||
// `'mousedown'` and `'touchstart'` events (plus browser variants).
|
||
function disableClickPropagation(el) {
|
||
on(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);
|
||
el['_leaflet_disable_click'] = true;
|
||
return this;
|
||
}
|
||
|
||
// @function preventDefault(ev: DOMEvent): this
|
||
// Prevents the default action of the DOM Event `ev` from happening (such as
|
||
// following a link in the href of the a element, or doing a POST request
|
||
// with page reload when a `<form>` is submitted).
|
||
// Use it inside listener functions.
|
||
function preventDefault(e) {
|
||
if (e.preventDefault) {
|
||
e.preventDefault();
|
||
} else {
|
||
e.returnValue = false;
|
||
}
|
||
return this;
|
||
}
|
||
|
||
// @function stop(ev: DOMEvent): this
|
||
// Does `stopPropagation` and `preventDefault` at the same time.
|
||
function stop(e) {
|
||
preventDefault(e);
|
||
stopPropagation(e);
|
||
return this;
|
||
}
|
||
|
||
// @function getPropagationPath(ev: DOMEvent): Array
|
||
// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).
|
||
// Returns an array containing the `HTMLElement`s that the given DOM event
|
||
// should propagate to (if not stopped).
|
||
function getPropagationPath(ev) {
|
||
if (ev.composedPath) {
|
||
return ev.composedPath();
|
||
}
|
||
|
||
var path = [];
|
||
var el = ev.target;
|
||
|
||
while (el) {
|
||
path.push(el);
|
||
el = el.parentNode;
|
||
}
|
||
return path;
|
||
}
|
||
|
||
|
||
// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point
|
||
// Gets normalized mouse position from a DOM event relative to the
|
||
// `container` (border excluded) or to the whole page if not specified.
|
||
function getMousePosition(e, container) {
|
||
if (!container) {
|
||
return new Point(e.clientX, e.clientY);
|
||
}
|
||
|
||
var scale = getScale(container),
|
||
offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)
|
||
|
||
return new Point(
|
||
// offset.left/top values are in page scale (like clientX/Y),
|
||
// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).
|
||
(e.clientX - offset.left) / scale.x - container.clientLeft,
|
||
(e.clientY - offset.top) / scale.y - container.clientTop
|
||
);
|
||
}
|
||
|
||
|
||
// except , Safari and
|
||
// We need double the scroll pixels (see #7403 and #4538) for all Browsers
|
||
// except OSX (Mac) -> 3x, Chrome running on Linux 1x
|
||
|
||
var wheelPxFactor =
|
||
(Browser.linux && Browser.chrome) ? window.devicePixelRatio :
|
||
Browser.mac ? window.devicePixelRatio * 3 :
|
||
window.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;
|
||
// @function getWheelDelta(ev: DOMEvent): Number
|
||
// Gets normalized wheel delta from a wheel DOM event, in vertical
|
||
// pixels scrolled (negative if scrolling down).
|
||
// Events from pointing devices without precise scrolling are mapped to
|
||
// a best guess of 60 pixels.
|
||
function getWheelDelta(e) {
|
||
return (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta
|
||
(e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels
|
||
(e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines
|
||
(e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages
|
||
(e.deltaX || e.deltaZ) ? 0 : // Skip horizontal/depth wheel events
|
||
e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels
|
||
(e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines
|
||
e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages
|
||
0;
|
||
}
|
||
|
||
// check if element really left/entered the event target (for mouseenter/mouseleave)
|
||
function isExternalTarget(el, e) {
|
||
|
||
var related = e.relatedTarget;
|
||
|
||
if (!related) { return true; }
|
||
|
||
try {
|
||
while (related && (related !== el)) {
|
||
related = related.parentNode;
|
||
}
|
||
} catch (err) {
|
||
return false;
|
||
}
|
||
return (related !== el);
|
||
}
|
||
|
||
var DomEvent = {
|
||
__proto__: null,
|
||
on: on,
|
||
off: off,
|
||
stopPropagation: stopPropagation,
|
||
disableScrollPropagation: disableScrollPropagation,
|
||
disableClickPropagation: disableClickPropagation,
|
||
preventDefault: preventDefault,
|
||
stop: stop,
|
||
getPropagationPath: getPropagationPath,
|
||
getMousePosition: getMousePosition,
|
||
getWheelDelta: getWheelDelta,
|
||
isExternalTarget: isExternalTarget,
|
||
addListener: on,
|
||
removeListener: off
|
||
};
|
||
|
||
/*
|
||
* @class PosAnimation
|
||
* @aka L.PosAnimation
|
||
* @inherits Evented
|
||
* Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);
|
||
*
|
||
* myPositionMarker.on("click", function() {
|
||
* var pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());
|
||
* pos.y -= 25;
|
||
* var fx = new L.PosAnimation();
|
||
*
|
||
* fx.once('end',function() {
|
||
* pos.y += 25;
|
||
* fx.run(myPositionMarker._icon, pos, 0.8);
|
||
* });
|
||
*
|
||
* fx.run(myPositionMarker._icon, pos, 0.3);
|
||
* });
|
||
*
|
||
* ```
|
||
*
|
||
* @constructor L.PosAnimation()
|
||
* Creates a `PosAnimation` object.
|
||
*
|
||
*/
|
||
|
||
var PosAnimation = Evented.extend({
|
||
|
||
// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)
|
||
// Run an animation of a given element to a new position, optionally setting
|
||
// duration in seconds (`0.25` by default) and easing linearity factor (3rd
|
||
// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),
|
||
// `0.5` by default).
|
||
run: function (el, newPos, duration, easeLinearity) {
|
||
this.stop();
|
||
|
||
this._el = el;
|
||
this._inProgress = true;
|
||
this._duration = duration || 0.25;
|
||
this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);
|
||
|
||
this._startPos = getPosition(el);
|
||
this._offset = newPos.subtract(this._startPos);
|
||
this._startTime = +new Date();
|
||
|
||
// @event start: Event
|
||
// Fired when the animation starts
|
||
this.fire('start');
|
||
|
||
this._animate();
|
||
},
|
||
|
||
// @method stop()
|
||
// Stops the animation (if currently running).
|
||
stop: function () {
|
||
if (!this._inProgress) { return; }
|
||
|
||
this._step(true);
|
||
this._complete();
|
||
},
|
||
|
||
_animate: function () {
|
||
// animation loop
|
||
this._animId = requestAnimFrame(this._animate, this);
|
||
this._step();
|
||
},
|
||
|
||
_step: function (round) {
|
||
var elapsed = (+new Date()) - this._startTime,
|
||
duration = this._duration * 1000;
|
||
|
||
if (elapsed < duration) {
|
||
this._runFrame(this._easeOut(elapsed / duration), round);
|
||
} else {
|
||
this._runFrame(1);
|
||
this._complete();
|
||
}
|
||
},
|
||
|
||
_runFrame: function (progress, round) {
|
||
var pos = this._startPos.add(this._offset.multiplyBy(progress));
|
||
if (round) {
|
||
pos._round();
|
||
}
|
||
setPosition(this._el, pos);
|
||
|
||
// @event step: Event
|
||
// Fired continuously during the animation.
|
||
this.fire('step');
|
||
},
|
||
|
||
_complete: function () {
|
||
cancelAnimFrame(this._animId);
|
||
|
||
this._inProgress = false;
|
||
// @event end: Event
|
||
// Fired when the animation ends.
|
||
this.fire('end');
|
||
},
|
||
|
||
_easeOut: function (t) {
|
||
return 1 - Math.pow(1 - t, this._easeOutPower);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Map
|
||
* @aka L.Map
|
||
* @inherits Evented
|
||
*
|
||
* The central class of the API — it is used to create a map on a page and manipulate it.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // initialize the map on the "map" div with a given center and zoom
|
||
* var map = L.map('map', {
|
||
* center: [51.505, -0.09],
|
||
* zoom: 13
|
||
* });
|
||
* ```
|
||
*
|
||
*/
|
||
|
||
var Map = Evented.extend({
|
||
|
||
options: {
|
||
// @section Map State Options
|
||
// @option crs: CRS = L.CRS.EPSG3857
|
||
// The [Coordinate Reference System](#crs) to use. Don't change this if you're not
|
||
// sure what it means.
|
||
crs: EPSG3857,
|
||
|
||
// @option center: LatLng = undefined
|
||
// Initial geographic center of the map
|
||
center: undefined,
|
||
|
||
// @option zoom: Number = undefined
|
||
// Initial map zoom level
|
||
zoom: undefined,
|
||
|
||
// @option minZoom: Number = *
|
||
// Minimum zoom level of the map.
|
||
// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
|
||
// the lowest of their `minZoom` options will be used instead.
|
||
minZoom: undefined,
|
||
|
||
// @option maxZoom: Number = *
|
||
// Maximum zoom level of the map.
|
||
// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
|
||
// the highest of their `maxZoom` options will be used instead.
|
||
maxZoom: undefined,
|
||
|
||
// @option layers: Layer[] = []
|
||
// Array of layers that will be added to the map initially
|
||
layers: [],
|
||
|
||
// @option maxBounds: LatLngBounds = null
|
||
// When this option is set, the map restricts the view to the given
|
||
// geographical bounds, bouncing the user back if the user tries to pan
|
||
// outside the view. To set the restriction dynamically, use
|
||
// [`setMaxBounds`](#map-setmaxbounds) method.
|
||
maxBounds: undefined,
|
||
|
||
// @option renderer: Renderer = *
|
||
// The default method for drawing vector layers on the map. `L.SVG`
|
||
// or `L.Canvas` by default depending on browser support.
|
||
renderer: undefined,
|
||
|
||
|
||
// @section Animation Options
|
||
// @option zoomAnimation: Boolean = true
|
||
// Whether the map zoom animation is enabled. By default it's enabled
|
||
// in all browsers that support CSS3 Transitions except Android.
|
||
zoomAnimation: true,
|
||
|
||
// @option zoomAnimationThreshold: Number = 4
|
||
// Won't animate zoom if the zoom difference exceeds this value.
|
||
zoomAnimationThreshold: 4,
|
||
|
||
// @option fadeAnimation: Boolean = true
|
||
// Whether the tile fade animation is enabled. By default it's enabled
|
||
// in all browsers that support CSS3 Transitions except Android.
|
||
fadeAnimation: true,
|
||
|
||
// @option markerZoomAnimation: Boolean = true
|
||
// Whether markers animate their zoom with the zoom animation, if disabled
|
||
// they will disappear for the length of the animation. By default it's
|
||
// enabled in all browsers that support CSS3 Transitions except Android.
|
||
markerZoomAnimation: true,
|
||
|
||
// @option transform3DLimit: Number = 2^23
|
||
// Defines the maximum size of a CSS translation transform. The default
|
||
// value should not be changed unless a web browser positions layers in
|
||
// the wrong place after doing a large `panBy`.
|
||
transform3DLimit: 8388608, // Precision limit of a 32-bit float
|
||
|
||
// @section Interaction Options
|
||
// @option zoomSnap: Number = 1
|
||
// Forces the map's zoom level to always be a multiple of this, particularly
|
||
// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.
|
||
// By default, the zoom level snaps to the nearest integer; lower values
|
||
// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`
|
||
// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.
|
||
zoomSnap: 1,
|
||
|
||
// @option zoomDelta: Number = 1
|
||
// Controls how much the map's zoom level will change after a
|
||
// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`
|
||
// or `-` on the keyboard, or using the [zoom controls](#control-zoom).
|
||
// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.
|
||
zoomDelta: 1,
|
||
|
||
// @option trackResize: Boolean = true
|
||
// Whether the map automatically handles browser window resize to update itself.
|
||
trackResize: true
|
||
},
|
||
|
||
initialize: function (id, options) { // (HTMLElement or String, Object)
|
||
options = setOptions(this, options);
|
||
|
||
// Make sure to assign internal flags at the beginning,
|
||
// to avoid inconsistent state in some edge cases.
|
||
this._handlers = [];
|
||
this._layers = {};
|
||
this._zoomBoundLayers = {};
|
||
this._sizeChanged = true;
|
||
|
||
this._initContainer(id);
|
||
this._initLayout();
|
||
|
||
// hack for https://github.com/Leaflet/Leaflet/issues/1980
|
||
this._onResize = bind(this._onResize, this);
|
||
|
||
this._initEvents();
|
||
|
||
if (options.maxBounds) {
|
||
this.setMaxBounds(options.maxBounds);
|
||
}
|
||
|
||
if (options.zoom !== undefined) {
|
||
this._zoom = this._limitZoom(options.zoom);
|
||
}
|
||
|
||
if (options.center && options.zoom !== undefined) {
|
||
this.setView(toLatLng(options.center), options.zoom, {reset: true});
|
||
}
|
||
|
||
this.callInitHooks();
|
||
|
||
// don't animate on browsers without hardware-accelerated transitions or old Android/Opera
|
||
this._zoomAnimated = TRANSITION && Browser.any3d && !Browser.mobileOpera &&
|
||
this.options.zoomAnimation;
|
||
|
||
// zoom transitions run with the same duration for all layers, so if one of transitionend events
|
||
// happens after starting zoom animation (propagating to the map pane), we know that it ended globally
|
||
if (this._zoomAnimated) {
|
||
this._createAnimProxy();
|
||
on(this._proxy, TRANSITION_END, this._catchTransitionEnd, this);
|
||
}
|
||
|
||
this._addLayers(this.options.layers);
|
||
},
|
||
|
||
|
||
// @section Methods for modifying map state
|
||
|
||
// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this
|
||
// Sets the view of the map (geographical center and zoom) with the given
|
||
// animation options.
|
||
setView: function (center, zoom, options) {
|
||
|
||
zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);
|
||
center = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);
|
||
options = options || {};
|
||
|
||
this._stop();
|
||
|
||
if (this._loaded && !options.reset && options !== true) {
|
||
|
||
if (options.animate !== undefined) {
|
||
options.zoom = extend({animate: options.animate}, options.zoom);
|
||
options.pan = extend({animate: options.animate, duration: options.duration}, options.pan);
|
||
}
|
||
|
||
// try animating pan or zoom
|
||
var moved = (this._zoom !== zoom) ?
|
||
this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
|
||
this._tryAnimatedPan(center, options.pan);
|
||
|
||
if (moved) {
|
||
// prevent resize handler call, the view will refresh after animation anyway
|
||
clearTimeout(this._sizeTimer);
|
||
return this;
|
||
}
|
||
}
|
||
|
||
// animation didn't start, just reset the map view
|
||
this._resetView(center, zoom, options.pan && options.pan.noMoveStart);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method setZoom(zoom: Number, options?: Zoom/pan options): this
|
||
// Sets the zoom of the map.
|
||
setZoom: function (zoom, options) {
|
||
if (!this._loaded) {
|
||
this._zoom = zoom;
|
||
return this;
|
||
}
|
||
return this.setView(this.getCenter(), zoom, {zoom: options});
|
||
},
|
||
|
||
// @method zoomIn(delta?: Number, options?: Zoom options): this
|
||
// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
|
||
zoomIn: function (delta, options) {
|
||
delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
|
||
return this.setZoom(this._zoom + delta, options);
|
||
},
|
||
|
||
// @method zoomOut(delta?: Number, options?: Zoom options): this
|
||
// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
|
||
zoomOut: function (delta, options) {
|
||
delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
|
||
return this.setZoom(this._zoom - delta, options);
|
||
},
|
||
|
||
// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this
|
||
// Zooms the map while keeping a specified geographical point on the map
|
||
// stationary (e.g. used internally for scroll zoom and double-click zoom).
|
||
// @alternative
|
||
// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this
|
||
// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.
|
||
setZoomAround: function (latlng, zoom, options) {
|
||
var scale = this.getZoomScale(zoom),
|
||
viewHalf = this.getSize().divideBy(2),
|
||
containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),
|
||
|
||
centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
|
||
newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
|
||
|
||
return this.setView(newCenter, zoom, {zoom: options});
|
||
},
|
||
|
||
_getBoundsCenterZoom: function (bounds, options) {
|
||
|
||
options = options || {};
|
||
bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);
|
||
|
||
var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
|
||
paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
|
||
|
||
zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
|
||
|
||
zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;
|
||
|
||
if (zoom === Infinity) {
|
||
return {
|
||
center: bounds.getCenter(),
|
||
zoom: zoom
|
||
};
|
||
}
|
||
|
||
var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
|
||
|
||
swPoint = this.project(bounds.getSouthWest(), zoom),
|
||
nePoint = this.project(bounds.getNorthEast(), zoom),
|
||
center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
|
||
|
||
return {
|
||
center: center,
|
||
zoom: zoom
|
||
};
|
||
},
|
||
|
||
// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this
|
||
// Sets a map view that contains the given geographical bounds with the
|
||
// maximum zoom level possible.
|
||
fitBounds: function (bounds, options) {
|
||
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
if (!bounds.isValid()) {
|
||
throw new Error('Bounds are not valid.');
|
||
}
|
||
|
||
var target = this._getBoundsCenterZoom(bounds, options);
|
||
return this.setView(target.center, target.zoom, options);
|
||
},
|
||
|
||
// @method fitWorld(options?: fitBounds options): this
|
||
// Sets a map view that mostly contains the whole world with the maximum
|
||
// zoom level possible.
|
||
fitWorld: function (options) {
|
||
return this.fitBounds([[-90, -180], [90, 180]], options);
|
||
},
|
||
|
||
// @method panTo(latlng: LatLng, options?: Pan options): this
|
||
// Pans the map to a given center.
|
||
panTo: function (center, options) { // (LatLng)
|
||
return this.setView(center, this._zoom, {pan: options});
|
||
},
|
||
|
||
// @method panBy(offset: Point, options?: Pan options): this
|
||
// Pans the map by a given number of pixels (animated).
|
||
panBy: function (offset, options) {
|
||
offset = toPoint(offset).round();
|
||
options = options || {};
|
||
|
||
if (!offset.x && !offset.y) {
|
||
return this.fire('moveend');
|
||
}
|
||
// If we pan too far, Chrome gets issues with tiles
|
||
// and makes them disappear or appear in the wrong place (slightly offset) #2602
|
||
if (options.animate !== true && !this.getSize().contains(offset)) {
|
||
this._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());
|
||
return this;
|
||
}
|
||
|
||
if (!this._panAnim) {
|
||
this._panAnim = new PosAnimation();
|
||
|
||
this._panAnim.on({
|
||
'step': this._onPanTransitionStep,
|
||
'end': this._onPanTransitionEnd
|
||
}, this);
|
||
}
|
||
|
||
// don't fire movestart if animating inertia
|
||
if (!options.noMoveStart) {
|
||
this.fire('movestart');
|
||
}
|
||
|
||
// animate pan unless animate: false specified
|
||
if (options.animate !== false) {
|
||
addClass(this._mapPane, 'leaflet-pan-anim');
|
||
|
||
var newPos = this._getMapPanePos().subtract(offset).round();
|
||
this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
|
||
} else {
|
||
this._rawPanBy(offset);
|
||
this.fire('move').fire('moveend');
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
|
||
// Sets the view of the map (geographical center and zoom) performing a smooth
|
||
// pan-zoom animation.
|
||
flyTo: function (targetCenter, targetZoom, options) {
|
||
|
||
options = options || {};
|
||
if (options.animate === false || !Browser.any3d) {
|
||
return this.setView(targetCenter, targetZoom, options);
|
||
}
|
||
|
||
this._stop();
|
||
|
||
var from = this.project(this.getCenter()),
|
||
to = this.project(targetCenter),
|
||
size = this.getSize(),
|
||
startZoom = this._zoom;
|
||
|
||
targetCenter = toLatLng(targetCenter);
|
||
targetZoom = targetZoom === undefined ? startZoom : targetZoom;
|
||
|
||
var w0 = Math.max(size.x, size.y),
|
||
w1 = w0 * this.getZoomScale(startZoom, targetZoom),
|
||
u1 = (to.distanceTo(from)) || 1,
|
||
rho = 1.42,
|
||
rho2 = rho * rho;
|
||
|
||
function r(i) {
|
||
var s1 = i ? -1 : 1,
|
||
s2 = i ? w1 : w0,
|
||
t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,
|
||
b1 = 2 * s2 * rho2 * u1,
|
||
b = t1 / b1,
|
||
sq = Math.sqrt(b * b + 1) - b;
|
||
|
||
// workaround for floating point precision bug when sq = 0, log = -Infinite,
|
||
// thus triggering an infinite loop in flyTo
|
||
var log = sq < 0.000000001 ? -18 : Math.log(sq);
|
||
|
||
return log;
|
||
}
|
||
|
||
function sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }
|
||
function cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }
|
||
function tanh(n) { return sinh(n) / cosh(n); }
|
||
|
||
var r0 = r(0);
|
||
|
||
function w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }
|
||
function u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }
|
||
|
||
function easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }
|
||
|
||
var start = Date.now(),
|
||
S = (r(1) - r0) / rho,
|
||
duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;
|
||
|
||
function frame() {
|
||
var t = (Date.now() - start) / duration,
|
||
s = easeOut(t) * S;
|
||
|
||
if (t <= 1) {
|
||
this._flyToFrame = requestAnimFrame(frame, this);
|
||
|
||
this._move(
|
||
this.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),
|
||
this.getScaleZoom(w0 / w(s), startZoom),
|
||
{flyTo: true});
|
||
|
||
} else {
|
||
this
|
||
._move(targetCenter, targetZoom)
|
||
._moveEnd(true);
|
||
}
|
||
}
|
||
|
||
this._moveStart(true, options.noMoveStart);
|
||
|
||
frame.call(this);
|
||
return this;
|
||
},
|
||
|
||
// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this
|
||
// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),
|
||
// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).
|
||
flyToBounds: function (bounds, options) {
|
||
var target = this._getBoundsCenterZoom(bounds, options);
|
||
return this.flyTo(target.center, target.zoom, options);
|
||
},
|
||
|
||
// @method setMaxBounds(bounds: LatLngBounds): this
|
||
// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).
|
||
setMaxBounds: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
if (this.listens('moveend', this._panInsideMaxBounds)) {
|
||
this.off('moveend', this._panInsideMaxBounds);
|
||
}
|
||
|
||
if (!bounds.isValid()) {
|
||
this.options.maxBounds = null;
|
||
return this;
|
||
}
|
||
|
||
this.options.maxBounds = bounds;
|
||
|
||
if (this._loaded) {
|
||
this._panInsideMaxBounds();
|
||
}
|
||
|
||
return this.on('moveend', this._panInsideMaxBounds);
|
||
},
|
||
|
||
// @method setMinZoom(zoom: Number): this
|
||
// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).
|
||
setMinZoom: function (zoom) {
|
||
var oldZoom = this.options.minZoom;
|
||
this.options.minZoom = zoom;
|
||
|
||
if (this._loaded && oldZoom !== zoom) {
|
||
this.fire('zoomlevelschange');
|
||
|
||
if (this.getZoom() < this.options.minZoom) {
|
||
return this.setZoom(zoom);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method setMaxZoom(zoom: Number): this
|
||
// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).
|
||
setMaxZoom: function (zoom) {
|
||
var oldZoom = this.options.maxZoom;
|
||
this.options.maxZoom = zoom;
|
||
|
||
if (this._loaded && oldZoom !== zoom) {
|
||
this.fire('zoomlevelschange');
|
||
|
||
if (this.getZoom() > this.options.maxZoom) {
|
||
return this.setZoom(zoom);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this
|
||
// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
|
||
panInsideBounds: function (bounds, options) {
|
||
this._enforcingBounds = true;
|
||
var center = this.getCenter(),
|
||
newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));
|
||
|
||
if (!center.equals(newCenter)) {
|
||
this.panTo(newCenter, options);
|
||
}
|
||
|
||
this._enforcingBounds = false;
|
||
return this;
|
||
},
|
||
|
||
// @method panInside(latlng: LatLng, options?: padding options): this
|
||
// Pans the map the minimum amount to make the `latlng` visible. Use
|
||
// padding options to fit the display to more restricted bounds.
|
||
// If `latlng` is already within the (optionally padded) display bounds,
|
||
// the map will not be panned.
|
||
panInside: function (latlng, options) {
|
||
options = options || {};
|
||
|
||
var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
|
||
paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
|
||
pixelCenter = this.project(this.getCenter()),
|
||
pixelPoint = this.project(latlng),
|
||
pixelBounds = this.getPixelBounds(),
|
||
paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),
|
||
paddedSize = paddedBounds.getSize();
|
||
|
||
if (!paddedBounds.contains(pixelPoint)) {
|
||
this._enforcingBounds = true;
|
||
var centerOffset = pixelPoint.subtract(paddedBounds.getCenter());
|
||
var offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);
|
||
pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;
|
||
pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;
|
||
this.panTo(this.unproject(pixelCenter), options);
|
||
this._enforcingBounds = false;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method invalidateSize(options: Zoom/pan options): this
|
||
// Checks if the map container size changed and updates the map if so —
|
||
// call it after you've changed the map size dynamically, also animating
|
||
// pan by default. If `options.pan` is `false`, panning will not occur.
|
||
// If `options.debounceMoveend` is `true`, it will delay `moveend` event so
|
||
// that it doesn't happen often even if the method is called many
|
||
// times in a row.
|
||
|
||
// @alternative
|
||
// @method invalidateSize(animate: Boolean): this
|
||
// Checks if the map container size changed and updates the map if so —
|
||
// call it after you've changed the map size dynamically, also animating
|
||
// pan by default.
|
||
invalidateSize: function (options) {
|
||
if (!this._loaded) { return this; }
|
||
|
||
options = extend({
|
||
animate: false,
|
||
pan: true
|
||
}, options === true ? {animate: true} : options);
|
||
|
||
var oldSize = this.getSize();
|
||
this._sizeChanged = true;
|
||
this._lastCenter = null;
|
||
|
||
var newSize = this.getSize(),
|
||
oldCenter = oldSize.divideBy(2).round(),
|
||
newCenter = newSize.divideBy(2).round(),
|
||
offset = oldCenter.subtract(newCenter);
|
||
|
||
if (!offset.x && !offset.y) { return this; }
|
||
|
||
if (options.animate && options.pan) {
|
||
this.panBy(offset);
|
||
|
||
} else {
|
||
if (options.pan) {
|
||
this._rawPanBy(offset);
|
||
}
|
||
|
||
this.fire('move');
|
||
|
||
if (options.debounceMoveend) {
|
||
clearTimeout(this._sizeTimer);
|
||
this._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200);
|
||
} else {
|
||
this.fire('moveend');
|
||
}
|
||
}
|
||
|
||
// @section Map state change events
|
||
// @event resize: ResizeEvent
|
||
// Fired when the map is resized.
|
||
return this.fire('resize', {
|
||
oldSize: oldSize,
|
||
newSize: newSize
|
||
});
|
||
},
|
||
|
||
// @section Methods for modifying map state
|
||
// @method stop(): this
|
||
// Stops the currently running `panTo` or `flyTo` animation, if any.
|
||
stop: function () {
|
||
this.setZoom(this._limitZoom(this._zoom));
|
||
if (!this.options.zoomSnap) {
|
||
this.fire('viewreset');
|
||
}
|
||
return this._stop();
|
||
},
|
||
|
||
// @section Geolocation methods
|
||
// @method locate(options?: Locate options): this
|
||
// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)
|
||
// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,
|
||
// and optionally sets the map view to the user's location with respect to
|
||
// detection accuracy (or to the world view if geolocation failed).
|
||
// Note that, if your page doesn't use HTTPS, this method will fail in
|
||
// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))
|
||
// See `Locate options` for more details.
|
||
locate: function (options) {
|
||
|
||
options = this._locateOptions = extend({
|
||
timeout: 10000,
|
||
watch: false
|
||
// setView: false
|
||
// maxZoom: <Number>
|
||
// maximumAge: 0
|
||
// enableHighAccuracy: false
|
||
}, options);
|
||
|
||
if (!('geolocation' in navigator)) {
|
||
this._handleGeolocationError({
|
||
code: 0,
|
||
message: 'Geolocation not supported.'
|
||
});
|
||
return this;
|
||
}
|
||
|
||
var onResponse = bind(this._handleGeolocationResponse, this),
|
||
onError = bind(this._handleGeolocationError, this);
|
||
|
||
if (options.watch) {
|
||
this._locationWatchId =
|
||
navigator.geolocation.watchPosition(onResponse, onError, options);
|
||
} else {
|
||
navigator.geolocation.getCurrentPosition(onResponse, onError, options);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method stopLocate(): this
|
||
// Stops watching location previously initiated by `map.locate({watch: true})`
|
||
// and aborts resetting the map view if map.locate was called with
|
||
// `{setView: true}`.
|
||
stopLocate: function () {
|
||
if (navigator.geolocation && navigator.geolocation.clearWatch) {
|
||
navigator.geolocation.clearWatch(this._locationWatchId);
|
||
}
|
||
if (this._locateOptions) {
|
||
this._locateOptions.setView = false;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_handleGeolocationError: function (error) {
|
||
if (!this._container._leaflet_id) { return; }
|
||
|
||
var c = error.code,
|
||
message = error.message ||
|
||
(c === 1 ? 'permission denied' :
|
||
(c === 2 ? 'position unavailable' : 'timeout'));
|
||
|
||
if (this._locateOptions.setView && !this._loaded) {
|
||
this.fitWorld();
|
||
}
|
||
|
||
// @section Location events
|
||
// @event locationerror: ErrorEvent
|
||
// Fired when geolocation (using the [`locate`](#map-locate) method) failed.
|
||
this.fire('locationerror', {
|
||
code: c,
|
||
message: 'Geolocation error: ' + message + '.'
|
||
});
|
||
},
|
||
|
||
_handleGeolocationResponse: function (pos) {
|
||
if (!this._container._leaflet_id) { return; }
|
||
|
||
var lat = pos.coords.latitude,
|
||
lng = pos.coords.longitude,
|
||
latlng = new LatLng(lat, lng),
|
||
bounds = latlng.toBounds(pos.coords.accuracy * 2),
|
||
options = this._locateOptions;
|
||
|
||
if (options.setView) {
|
||
var zoom = this.getBoundsZoom(bounds);
|
||
this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);
|
||
}
|
||
|
||
var data = {
|
||
latlng: latlng,
|
||
bounds: bounds,
|
||
timestamp: pos.timestamp
|
||
};
|
||
|
||
for (var i in pos.coords) {
|
||
if (typeof pos.coords[i] === 'number') {
|
||
data[i] = pos.coords[i];
|
||
}
|
||
}
|
||
|
||
// @event locationfound: LocationEvent
|
||
// Fired when geolocation (using the [`locate`](#map-locate) method)
|
||
// went successfully.
|
||
this.fire('locationfound', data);
|
||
},
|
||
|
||
// TODO Appropriate docs section?
|
||
// @section Other Methods
|
||
// @method addHandler(name: String, HandlerClass: Function): this
|
||
// Adds a new `Handler` to the map, given its name and constructor function.
|
||
addHandler: function (name, HandlerClass) {
|
||
if (!HandlerClass) { return this; }
|
||
|
||
var handler = this[name] = new HandlerClass(this);
|
||
|
||
this._handlers.push(handler);
|
||
|
||
if (this.options[name]) {
|
||
handler.enable();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method remove(): this
|
||
// Destroys the map and clears all related event listeners.
|
||
remove: function () {
|
||
|
||
this._initEvents(true);
|
||
if (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }
|
||
|
||
if (this._containerId !== this._container._leaflet_id) {
|
||
throw new Error('Map container is being reused by another instance');
|
||
}
|
||
|
||
try {
|
||
// throws error in IE6-8
|
||
delete this._container._leaflet_id;
|
||
delete this._containerId;
|
||
} catch (e) {
|
||
/*eslint-disable */
|
||
this._container._leaflet_id = undefined;
|
||
/* eslint-enable */
|
||
this._containerId = undefined;
|
||
}
|
||
|
||
if (this._locationWatchId !== undefined) {
|
||
this.stopLocate();
|
||
}
|
||
|
||
this._stop();
|
||
|
||
remove(this._mapPane);
|
||
|
||
if (this._clearControlPos) {
|
||
this._clearControlPos();
|
||
}
|
||
if (this._resizeRequest) {
|
||
cancelAnimFrame(this._resizeRequest);
|
||
this._resizeRequest = null;
|
||
}
|
||
|
||
this._clearHandlers();
|
||
|
||
if (this._loaded) {
|
||
// @section Map state change events
|
||
// @event unload: Event
|
||
// Fired when the map is destroyed with [remove](#map-remove) method.
|
||
this.fire('unload');
|
||
}
|
||
|
||
var i;
|
||
for (i in this._layers) {
|
||
this._layers[i].remove();
|
||
}
|
||
for (i in this._panes) {
|
||
remove(this._panes[i]);
|
||
}
|
||
|
||
this._layers = [];
|
||
this._panes = [];
|
||
delete this._mapPane;
|
||
delete this._renderer;
|
||
|
||
return this;
|
||
},
|
||
|
||
// @section Other Methods
|
||
// @method createPane(name: String, container?: HTMLElement): HTMLElement
|
||
// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,
|
||
// then returns it. The pane is created as a child of `container`, or
|
||
// as a child of the main map pane if not set.
|
||
createPane: function (name, container) {
|
||
var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),
|
||
pane = create$1('div', className, container || this._mapPane);
|
||
|
||
if (name) {
|
||
this._panes[name] = pane;
|
||
}
|
||
return pane;
|
||
},
|
||
|
||
// @section Methods for Getting Map State
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the geographical center of the map view
|
||
getCenter: function () {
|
||
this._checkIfLoaded();
|
||
|
||
if (this._lastCenter && !this._moved()) {
|
||
return this._lastCenter.clone();
|
||
}
|
||
return this.layerPointToLatLng(this._getCenterLayerPoint());
|
||
},
|
||
|
||
// @method getZoom(): Number
|
||
// Returns the current zoom level of the map view
|
||
getZoom: function () {
|
||
return this._zoom;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the geographical bounds visible in the current map view
|
||
getBounds: function () {
|
||
var bounds = this.getPixelBounds(),
|
||
sw = this.unproject(bounds.getBottomLeft()),
|
||
ne = this.unproject(bounds.getTopRight());
|
||
|
||
return new LatLngBounds(sw, ne);
|
||
},
|
||
|
||
// @method getMinZoom(): Number
|
||
// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.
|
||
getMinZoom: function () {
|
||
return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;
|
||
},
|
||
|
||
// @method getMaxZoom(): Number
|
||
// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).
|
||
getMaxZoom: function () {
|
||
return this.options.maxZoom === undefined ?
|
||
(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :
|
||
this.options.maxZoom;
|
||
},
|
||
|
||
// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number
|
||
// Returns the maximum zoom level on which the given bounds fit to the map
|
||
// view in its entirety. If `inside` (optional) is set to `true`, the method
|
||
// instead returns the minimum zoom level on which the map view fits into
|
||
// the given bounds in its entirety.
|
||
getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
|
||
bounds = toLatLngBounds(bounds);
|
||
padding = toPoint(padding || [0, 0]);
|
||
|
||
var zoom = this.getZoom() || 0,
|
||
min = this.getMinZoom(),
|
||
max = this.getMaxZoom(),
|
||
nw = bounds.getNorthWest(),
|
||
se = bounds.getSouthEast(),
|
||
size = this.getSize().subtract(padding),
|
||
boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),
|
||
snap = Browser.any3d ? this.options.zoomSnap : 1,
|
||
scalex = size.x / boundsSize.x,
|
||
scaley = size.y / boundsSize.y,
|
||
scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);
|
||
|
||
zoom = this.getScaleZoom(scale, zoom);
|
||
|
||
if (snap) {
|
||
zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level
|
||
zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;
|
||
}
|
||
|
||
return Math.max(min, Math.min(max, zoom));
|
||
},
|
||
|
||
// @method getSize(): Point
|
||
// Returns the current size of the map container (in pixels).
|
||
getSize: function () {
|
||
if (!this._size || this._sizeChanged) {
|
||
this._size = new Point(
|
||
this._container.clientWidth || 0,
|
||
this._container.clientHeight || 0);
|
||
|
||
this._sizeChanged = false;
|
||
}
|
||
return this._size.clone();
|
||
},
|
||
|
||
// @method getPixelBounds(): Bounds
|
||
// Returns the bounds of the current map view in projected pixel
|
||
// coordinates (sometimes useful in layer and overlay implementations).
|
||
getPixelBounds: function (center, zoom) {
|
||
var topLeftPoint = this._getTopLeftPoint(center, zoom);
|
||
return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
|
||
},
|
||
|
||
// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to
|
||
// the map pane? "left point of the map layer" can be confusing, specially
|
||
// since there can be negative offsets.
|
||
// @method getPixelOrigin(): Point
|
||
// Returns the projected pixel coordinates of the top left point of
|
||
// the map layer (useful in custom layer and overlay implementations).
|
||
getPixelOrigin: function () {
|
||
this._checkIfLoaded();
|
||
return this._pixelOrigin;
|
||
},
|
||
|
||
// @method getPixelWorldBounds(zoom?: Number): Bounds
|
||
// Returns the world's bounds in pixel coordinates for zoom level `zoom`.
|
||
// If `zoom` is omitted, the map's current zoom level is used.
|
||
getPixelWorldBounds: function (zoom) {
|
||
return this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);
|
||
},
|
||
|
||
// @section Other Methods
|
||
|
||
// @method getPane(pane: String|HTMLElement): HTMLElement
|
||
// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).
|
||
getPane: function (pane) {
|
||
return typeof pane === 'string' ? this._panes[pane] : pane;
|
||
},
|
||
|
||
// @method getPanes(): Object
|
||
// Returns a plain object containing the names of all [panes](#map-pane) as keys and
|
||
// the panes as values.
|
||
getPanes: function () {
|
||
return this._panes;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTML element that contains the map.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
|
||
// @section Conversion Methods
|
||
|
||
// @method getZoomScale(toZoom: Number, fromZoom: Number): Number
|
||
// Returns the scale factor to be applied to a map transition from zoom level
|
||
// `fromZoom` to `toZoom`. Used internally to help with zoom animations.
|
||
getZoomScale: function (toZoom, fromZoom) {
|
||
// TODO replace with universal implementation after refactoring projections
|
||
var crs = this.options.crs;
|
||
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
||
return crs.scale(toZoom) / crs.scale(fromZoom);
|
||
},
|
||
|
||
// @method getScaleZoom(scale: Number, fromZoom: Number): Number
|
||
// Returns the zoom level that the map would end up at, if it is at `fromZoom`
|
||
// level and everything is scaled by a factor of `scale`. Inverse of
|
||
// [`getZoomScale`](#map-getZoomScale).
|
||
getScaleZoom: function (scale, fromZoom) {
|
||
var crs = this.options.crs;
|
||
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
||
var zoom = crs.zoom(scale * crs.scale(fromZoom));
|
||
return isNaN(zoom) ? Infinity : zoom;
|
||
},
|
||
|
||
// @method project(latlng: LatLng, zoom: Number): Point
|
||
// Projects a geographical coordinate `LatLng` according to the projection
|
||
// of the map's CRS, then scales it according to `zoom` and the CRS's
|
||
// `Transformation`. The result is pixel coordinate relative to
|
||
// the CRS origin.
|
||
project: function (latlng, zoom) {
|
||
zoom = zoom === undefined ? this._zoom : zoom;
|
||
return this.options.crs.latLngToPoint(toLatLng(latlng), zoom);
|
||
},
|
||
|
||
// @method unproject(point: Point, zoom: Number): LatLng
|
||
// Inverse of [`project`](#map-project).
|
||
unproject: function (point, zoom) {
|
||
zoom = zoom === undefined ? this._zoom : zoom;
|
||
return this.options.crs.pointToLatLng(toPoint(point), zoom);
|
||
},
|
||
|
||
// @method layerPointToLatLng(point: Point): LatLng
|
||
// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
|
||
// returns the corresponding geographical coordinate (for the current zoom level).
|
||
layerPointToLatLng: function (point) {
|
||
var projectedPoint = toPoint(point).add(this.getPixelOrigin());
|
||
return this.unproject(projectedPoint);
|
||
},
|
||
|
||
// @method latLngToLayerPoint(latlng: LatLng): Point
|
||
// Given a geographical coordinate, returns the corresponding pixel coordinate
|
||
// relative to the [origin pixel](#map-getpixelorigin).
|
||
latLngToLayerPoint: function (latlng) {
|
||
var projectedPoint = this.project(toLatLng(latlng))._round();
|
||
return projectedPoint._subtract(this.getPixelOrigin());
|
||
},
|
||
|
||
// @method wrapLatLng(latlng: LatLng): LatLng
|
||
// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the
|
||
// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the
|
||
// CRS's bounds.
|
||
// By default this means longitude is wrapped around the dateline so its
|
||
// value is between -180 and +180 degrees.
|
||
wrapLatLng: function (latlng) {
|
||
return this.options.crs.wrapLatLng(toLatLng(latlng));
|
||
},
|
||
|
||
// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
|
||
// Returns a `LatLngBounds` with the same size as the given one, ensuring that
|
||
// its center is within the CRS's bounds.
|
||
// By default this means the center longitude is wrapped around the dateline so its
|
||
// value is between -180 and +180 degrees, and the majority of the bounds
|
||
// overlaps the CRS's bounds.
|
||
wrapLatLngBounds: function (latlng) {
|
||
return this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));
|
||
},
|
||
|
||
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
||
// Returns the distance between two geographical coordinates according to
|
||
// the map's CRS. By default this measures distance in meters.
|
||
distance: function (latlng1, latlng2) {
|
||
return this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));
|
||
},
|
||
|
||
// @method containerPointToLayerPoint(point: Point): Point
|
||
// Given a pixel coordinate relative to the map container, returns the corresponding
|
||
// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).
|
||
containerPointToLayerPoint: function (point) { // (Point)
|
||
return toPoint(point).subtract(this._getMapPanePos());
|
||
},
|
||
|
||
// @method layerPointToContainerPoint(point: Point): Point
|
||
// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
|
||
// returns the corresponding pixel coordinate relative to the map container.
|
||
layerPointToContainerPoint: function (point) { // (Point)
|
||
return toPoint(point).add(this._getMapPanePos());
|
||
},
|
||
|
||
// @method containerPointToLatLng(point: Point): LatLng
|
||
// Given a pixel coordinate relative to the map container, returns
|
||
// the corresponding geographical coordinate (for the current zoom level).
|
||
containerPointToLatLng: function (point) {
|
||
var layerPoint = this.containerPointToLayerPoint(toPoint(point));
|
||
return this.layerPointToLatLng(layerPoint);
|
||
},
|
||
|
||
// @method latLngToContainerPoint(latlng: LatLng): Point
|
||
// Given a geographical coordinate, returns the corresponding pixel coordinate
|
||
// relative to the map container.
|
||
latLngToContainerPoint: function (latlng) {
|
||
return this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));
|
||
},
|
||
|
||
// @method mouseEventToContainerPoint(ev: MouseEvent): Point
|
||
// Given a MouseEvent object, returns the pixel coordinate relative to the
|
||
// map container where the event took place.
|
||
mouseEventToContainerPoint: function (e) {
|
||
return getMousePosition(e, this._container);
|
||
},
|
||
|
||
// @method mouseEventToLayerPoint(ev: MouseEvent): Point
|
||
// Given a MouseEvent object, returns the pixel coordinate relative to
|
||
// the [origin pixel](#map-getpixelorigin) where the event took place.
|
||
mouseEventToLayerPoint: function (e) {
|
||
return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
|
||
},
|
||
|
||
// @method mouseEventToLatLng(ev: MouseEvent): LatLng
|
||
// Given a MouseEvent object, returns geographical coordinate where the
|
||
// event took place.
|
||
mouseEventToLatLng: function (e) { // (MouseEvent)
|
||
return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
|
||
},
|
||
|
||
|
||
// map initialization methods
|
||
|
||
_initContainer: function (id) {
|
||
var container = this._container = get(id);
|
||
|
||
if (!container) {
|
||
throw new Error('Map container not found.');
|
||
} else if (container._leaflet_id) {
|
||
throw new Error('Map container is already initialized.');
|
||
}
|
||
|
||
on(container, 'scroll', this._onScroll, this);
|
||
this._containerId = stamp(container);
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var container = this._container;
|
||
|
||
this._fadeAnimated = this.options.fadeAnimation && Browser.any3d;
|
||
|
||
addClass(container, 'leaflet-container' +
|
||
(Browser.touch ? ' leaflet-touch' : '') +
|
||
(Browser.retina ? ' leaflet-retina' : '') +
|
||
(Browser.ielt9 ? ' leaflet-oldie' : '') +
|
||
(Browser.safari ? ' leaflet-safari' : '') +
|
||
(this._fadeAnimated ? ' leaflet-fade-anim' : ''));
|
||
|
||
var position = getStyle(container, 'position');
|
||
|
||
if (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {
|
||
container.style.position = 'relative';
|
||
}
|
||
|
||
this._initPanes();
|
||
|
||
if (this._initControlPos) {
|
||
this._initControlPos();
|
||
}
|
||
},
|
||
|
||
_initPanes: function () {
|
||
var panes = this._panes = {};
|
||
this._paneRenderers = {};
|
||
|
||
// @section
|
||
//
|
||
// Panes are DOM elements used to control the ordering of layers on the map. You
|
||
// can access panes with [`map.getPane`](#map-getpane) or
|
||
// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the
|
||
// [`map.createPane`](#map-createpane) method.
|
||
//
|
||
// Every map has the following default panes that differ only in zIndex.
|
||
//
|
||
// @pane mapPane: HTMLElement = 'auto'
|
||
// Pane that contains all other map panes
|
||
|
||
this._mapPane = this.createPane('mapPane', this._container);
|
||
setPosition(this._mapPane, new Point(0, 0));
|
||
|
||
// @pane tilePane: HTMLElement = 200
|
||
// Pane for `GridLayer`s and `TileLayer`s
|
||
this.createPane('tilePane');
|
||
// @pane overlayPane: HTMLElement = 400
|
||
// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s
|
||
this.createPane('overlayPane');
|
||
// @pane shadowPane: HTMLElement = 500
|
||
// Pane for overlay shadows (e.g. `Marker` shadows)
|
||
this.createPane('shadowPane');
|
||
// @pane markerPane: HTMLElement = 600
|
||
// Pane for `Icon`s of `Marker`s
|
||
this.createPane('markerPane');
|
||
// @pane tooltipPane: HTMLElement = 650
|
||
// Pane for `Tooltip`s.
|
||
this.createPane('tooltipPane');
|
||
// @pane popupPane: HTMLElement = 700
|
||
// Pane for `Popup`s.
|
||
this.createPane('popupPane');
|
||
|
||
if (!this.options.markerZoomAnimation) {
|
||
addClass(panes.markerPane, 'leaflet-zoom-hide');
|
||
addClass(panes.shadowPane, 'leaflet-zoom-hide');
|
||
}
|
||
},
|
||
|
||
|
||
// private methods that modify map state
|
||
|
||
// @section Map state change events
|
||
_resetView: function (center, zoom, noMoveStart) {
|
||
setPosition(this._mapPane, new Point(0, 0));
|
||
|
||
var loading = !this._loaded;
|
||
this._loaded = true;
|
||
zoom = this._limitZoom(zoom);
|
||
|
||
this.fire('viewprereset');
|
||
|
||
var zoomChanged = this._zoom !== zoom;
|
||
this
|
||
._moveStart(zoomChanged, noMoveStart)
|
||
._move(center, zoom)
|
||
._moveEnd(zoomChanged);
|
||
|
||
// @event viewreset: Event
|
||
// Fired when the map needs to redraw its content (this usually happens
|
||
// on map zoom or load). Very useful for creating custom overlays.
|
||
this.fire('viewreset');
|
||
|
||
// @event load: Event
|
||
// Fired when the map is initialized (when its center and zoom are set
|
||
// for the first time).
|
||
if (loading) {
|
||
this.fire('load');
|
||
}
|
||
},
|
||
|
||
_moveStart: function (zoomChanged, noMoveStart) {
|
||
// @event zoomstart: Event
|
||
// Fired when the map zoom is about to change (e.g. before zoom animation).
|
||
// @event movestart: Event
|
||
// Fired when the view of the map starts changing (e.g. user starts dragging the map).
|
||
if (zoomChanged) {
|
||
this.fire('zoomstart');
|
||
}
|
||
if (!noMoveStart) {
|
||
this.fire('movestart');
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_move: function (center, zoom, data, supressEvent) {
|
||
if (zoom === undefined) {
|
||
zoom = this._zoom;
|
||
}
|
||
var zoomChanged = this._zoom !== zoom;
|
||
|
||
this._zoom = zoom;
|
||
this._lastCenter = center;
|
||
this._pixelOrigin = this._getNewPixelOrigin(center);
|
||
|
||
if (!supressEvent) {
|
||
// @event zoom: Event
|
||
// Fired repeatedly during any change in zoom level,
|
||
// including zoom and fly animations.
|
||
if (zoomChanged || (data && data.pinch)) { // Always fire 'zoom' if pinching because #3530
|
||
this.fire('zoom', data);
|
||
}
|
||
|
||
// @event move: Event
|
||
// Fired repeatedly during any movement of the map,
|
||
// including pan and fly animations.
|
||
this.fire('move', data);
|
||
} else if (data && data.pinch) { // Always fire 'zoom' if pinching because #3530
|
||
this.fire('zoom', data);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_moveEnd: function (zoomChanged) {
|
||
// @event zoomend: Event
|
||
// Fired when the map zoom changed, after any animations.
|
||
if (zoomChanged) {
|
||
this.fire('zoomend');
|
||
}
|
||
|
||
// @event moveend: Event
|
||
// Fired when the center of the map stops changing
|
||
// (e.g. user stopped dragging the map or after non-centered zoom).
|
||
return this.fire('moveend');
|
||
},
|
||
|
||
_stop: function () {
|
||
cancelAnimFrame(this._flyToFrame);
|
||
if (this._panAnim) {
|
||
this._panAnim.stop();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_rawPanBy: function (offset) {
|
||
setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
|
||
},
|
||
|
||
_getZoomSpan: function () {
|
||
return this.getMaxZoom() - this.getMinZoom();
|
||
},
|
||
|
||
_panInsideMaxBounds: function () {
|
||
if (!this._enforcingBounds) {
|
||
this.panInsideBounds(this.options.maxBounds);
|
||
}
|
||
},
|
||
|
||
_checkIfLoaded: function () {
|
||
if (!this._loaded) {
|
||
throw new Error('Set map center and zoom first.');
|
||
}
|
||
},
|
||
|
||
// DOM event handling
|
||
|
||
// @section Interaction events
|
||
_initEvents: function (remove) {
|
||
this._targets = {};
|
||
this._targets[stamp(this._container)] = this;
|
||
|
||
var onOff = remove ? off : on;
|
||
|
||
// @event click: MouseEvent
|
||
// Fired when the user clicks (or taps) the map.
|
||
// @event dblclick: MouseEvent
|
||
// Fired when the user double-clicks (or double-taps) the map.
|
||
// @event mousedown: MouseEvent
|
||
// Fired when the user pushes the mouse button on the map.
|
||
// @event mouseup: MouseEvent
|
||
// Fired when the user releases the mouse button on the map.
|
||
// @event mouseover: MouseEvent
|
||
// Fired when the mouse enters the map.
|
||
// @event mouseout: MouseEvent
|
||
// Fired when the mouse leaves the map.
|
||
// @event mousemove: MouseEvent
|
||
// Fired while the mouse moves over the map.
|
||
// @event contextmenu: MouseEvent
|
||
// Fired when the user pushes the right mouse button on the map, prevents
|
||
// default browser context menu from showing if there are listeners on
|
||
// this event. Also fired on mobile when the user holds a single touch
|
||
// for a second (also called long press).
|
||
// @event keypress: KeyboardEvent
|
||
// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.
|
||
// @event keydown: KeyboardEvent
|
||
// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,
|
||
// the `keydown` event is fired for keys that produce a character value and for keys
|
||
// that do not produce a character value.
|
||
// @event keyup: KeyboardEvent
|
||
// Fired when the user releases a key from the keyboard while the map is focused.
|
||
onOff(this._container, 'click dblclick mousedown mouseup ' +
|
||
'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);
|
||
|
||
if (this.options.trackResize) {
|
||
onOff(window, 'resize', this._onResize, this);
|
||
}
|
||
|
||
if (Browser.any3d && this.options.transform3DLimit) {
|
||
(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);
|
||
}
|
||
},
|
||
|
||
_onResize: function () {
|
||
cancelAnimFrame(this._resizeRequest);
|
||
this._resizeRequest = requestAnimFrame(
|
||
function () { this.invalidateSize({debounceMoveend: true}); }, this);
|
||
},
|
||
|
||
_onScroll: function () {
|
||
this._container.scrollTop = 0;
|
||
this._container.scrollLeft = 0;
|
||
},
|
||
|
||
_onMoveEnd: function () {
|
||
var pos = this._getMapPanePos();
|
||
if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {
|
||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have
|
||
// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/
|
||
this._resetView(this.getCenter(), this.getZoom());
|
||
}
|
||
},
|
||
|
||
_findEventTargets: function (e, type) {
|
||
var targets = [],
|
||
target,
|
||
isHover = type === 'mouseout' || type === 'mouseover',
|
||
src = e.target || e.srcElement,
|
||
dragging = false;
|
||
|
||
while (src) {
|
||
target = this._targets[stamp(src)];
|
||
if (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {
|
||
// Prevent firing click after you just dragged an object.
|
||
dragging = true;
|
||
break;
|
||
}
|
||
if (target && target.listens(type, true)) {
|
||
if (isHover && !isExternalTarget(src, e)) { break; }
|
||
targets.push(target);
|
||
if (isHover) { break; }
|
||
}
|
||
if (src === this._container) { break; }
|
||
src = src.parentNode;
|
||
}
|
||
if (!targets.length && !dragging && !isHover && this.listens(type, true)) {
|
||
targets = [this];
|
||
}
|
||
return targets;
|
||
},
|
||
|
||
_isClickDisabled: function (el) {
|
||
while (el && el !== this._container) {
|
||
if (el['_leaflet_disable_click']) { return true; }
|
||
el = el.parentNode;
|
||
}
|
||
},
|
||
|
||
_handleDOMEvent: function (e) {
|
||
var el = (e.target || e.srcElement);
|
||
if (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {
|
||
return;
|
||
}
|
||
|
||
var type = e.type;
|
||
|
||
if (type === 'mousedown') {
|
||
// prevents outline when clicking on keyboard-focusable element
|
||
preventOutline(el);
|
||
}
|
||
|
||
this._fireDOMEvent(e, type);
|
||
},
|
||
|
||
_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],
|
||
|
||
_fireDOMEvent: function (e, type, canvasTargets) {
|
||
|
||
if (e.type === 'click') {
|
||
// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).
|
||
// @event preclick: MouseEvent
|
||
// Fired before mouse click on the map (sometimes useful when you
|
||
// want something to happen on click before any existing click
|
||
// handlers start running).
|
||
var synth = extend({}, e);
|
||
synth.type = 'preclick';
|
||
this._fireDOMEvent(synth, synth.type, canvasTargets);
|
||
}
|
||
|
||
// Find the layer the event is propagating from and its parents.
|
||
var targets = this._findEventTargets(e, type);
|
||
|
||
if (canvasTargets) {
|
||
var filtered = []; // pick only targets with listeners
|
||
for (var i = 0; i < canvasTargets.length; i++) {
|
||
if (canvasTargets[i].listens(type, true)) {
|
||
filtered.push(canvasTargets[i]);
|
||
}
|
||
}
|
||
targets = filtered.concat(targets);
|
||
}
|
||
|
||
if (!targets.length) { return; }
|
||
|
||
if (type === 'contextmenu') {
|
||
preventDefault(e);
|
||
}
|
||
|
||
var target = targets[0];
|
||
var data = {
|
||
originalEvent: e
|
||
};
|
||
|
||
if (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {
|
||
var isMarker = target.getLatLng && (!target._radius || target._radius <= 10);
|
||
data.containerPoint = isMarker ?
|
||
this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);
|
||
data.layerPoint = this.containerPointToLayerPoint(data.containerPoint);
|
||
data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);
|
||
}
|
||
|
||
for (i = 0; i < targets.length; i++) {
|
||
targets[i].fire(type, data, true);
|
||
if (data.originalEvent._stopped ||
|
||
(targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; }
|
||
}
|
||
},
|
||
|
||
_draggableMoved: function (obj) {
|
||
obj = obj.dragging && obj.dragging.enabled() ? obj : this;
|
||
return (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());
|
||
},
|
||
|
||
_clearHandlers: function () {
|
||
for (var i = 0, len = this._handlers.length; i < len; i++) {
|
||
this._handlers[i].disable();
|
||
}
|
||
},
|
||
|
||
// @section Other Methods
|
||
|
||
// @method whenReady(fn: Function, context?: Object): this
|
||
// Runs the given function `fn` when the map gets initialized with
|
||
// a view (center and zoom) and at least one layer, or immediately
|
||
// if it's already initialized, optionally passing a function context.
|
||
whenReady: function (callback, context) {
|
||
if (this._loaded) {
|
||
callback.call(context || this, {target: this});
|
||
} else {
|
||
this.on('load', callback, context);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
|
||
// private methods for getting map state
|
||
|
||
_getMapPanePos: function () {
|
||
return getPosition(this._mapPane) || new Point(0, 0);
|
||
},
|
||
|
||
_moved: function () {
|
||
var pos = this._getMapPanePos();
|
||
return pos && !pos.equals([0, 0]);
|
||
},
|
||
|
||
_getTopLeftPoint: function (center, zoom) {
|
||
var pixelOrigin = center && zoom !== undefined ?
|
||
this._getNewPixelOrigin(center, zoom) :
|
||
this.getPixelOrigin();
|
||
return pixelOrigin.subtract(this._getMapPanePos());
|
||
},
|
||
|
||
_getNewPixelOrigin: function (center, zoom) {
|
||
var viewHalf = this.getSize()._divideBy(2);
|
||
return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();
|
||
},
|
||
|
||
_latLngToNewLayerPoint: function (latlng, zoom, center) {
|
||
var topLeft = this._getNewPixelOrigin(center, zoom);
|
||
return this.project(latlng, zoom)._subtract(topLeft);
|
||
},
|
||
|
||
_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {
|
||
var topLeft = this._getNewPixelOrigin(center, zoom);
|
||
return toBounds([
|
||
this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)
|
||
]);
|
||
},
|
||
|
||
// layer point of the current center
|
||
_getCenterLayerPoint: function () {
|
||
return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
|
||
},
|
||
|
||
// offset of the specified place to the current center in pixels
|
||
_getCenterOffset: function (latlng) {
|
||
return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
|
||
},
|
||
|
||
// adjust center for view to get inside bounds
|
||
_limitCenter: function (center, zoom, bounds) {
|
||
|
||
if (!bounds) { return center; }
|
||
|
||
var centerPoint = this.project(center, zoom),
|
||
viewHalf = this.getSize().divideBy(2),
|
||
viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
|
||
offset = this._getBoundsOffset(viewBounds, bounds, zoom);
|
||
|
||
// If offset is less than a pixel, ignore.
|
||
// This prevents unstable projections from getting into
|
||
// an infinite loop of tiny offsets.
|
||
if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {
|
||
return center;
|
||
}
|
||
|
||
return this.unproject(centerPoint.add(offset), zoom);
|
||
},
|
||
|
||
// adjust offset for view to get inside bounds
|
||
_limitOffset: function (offset, bounds) {
|
||
if (!bounds) { return offset; }
|
||
|
||
var viewBounds = this.getPixelBounds(),
|
||
newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
|
||
|
||
return offset.add(this._getBoundsOffset(newBounds, bounds));
|
||
},
|
||
|
||
// returns offset needed for pxBounds to get inside maxBounds at a specified zoom
|
||
_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
|
||
var projectedMaxBounds = toBounds(
|
||
this.project(maxBounds.getNorthEast(), zoom),
|
||
this.project(maxBounds.getSouthWest(), zoom)
|
||
),
|
||
minOffset = projectedMaxBounds.min.subtract(pxBounds.min),
|
||
maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),
|
||
|
||
dx = this._rebound(minOffset.x, -maxOffset.x),
|
||
dy = this._rebound(minOffset.y, -maxOffset.y);
|
||
|
||
return new Point(dx, dy);
|
||
},
|
||
|
||
_rebound: function (left, right) {
|
||
return left + right > 0 ?
|
||
Math.round(left - right) / 2 :
|
||
Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));
|
||
},
|
||
|
||
_limitZoom: function (zoom) {
|
||
var min = this.getMinZoom(),
|
||
max = this.getMaxZoom(),
|
||
snap = Browser.any3d ? this.options.zoomSnap : 1;
|
||
if (snap) {
|
||
zoom = Math.round(zoom / snap) * snap;
|
||
}
|
||
return Math.max(min, Math.min(max, zoom));
|
||
},
|
||
|
||
_onPanTransitionStep: function () {
|
||
this.fire('move');
|
||
},
|
||
|
||
_onPanTransitionEnd: function () {
|
||
removeClass(this._mapPane, 'leaflet-pan-anim');
|
||
this.fire('moveend');
|
||
},
|
||
|
||
_tryAnimatedPan: function (center, options) {
|
||
// difference between the new and current centers in pixels
|
||
var offset = this._getCenterOffset(center)._trunc();
|
||
|
||
// don't animate too far unless animate: true specified in options
|
||
if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
|
||
|
||
this.panBy(offset, options);
|
||
|
||
return true;
|
||
},
|
||
|
||
_createAnimProxy: function () {
|
||
|
||
var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');
|
||
this._panes.mapPane.appendChild(proxy);
|
||
|
||
this.on('zoomanim', function (e) {
|
||
var prop = TRANSFORM,
|
||
transform = this._proxy.style[prop];
|
||
|
||
setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));
|
||
|
||
// workaround for case when transform is the same and so transitionend event is not fired
|
||
if (transform === this._proxy.style[prop] && this._animatingZoom) {
|
||
this._onZoomTransitionEnd();
|
||
}
|
||
}, this);
|
||
|
||
this.on('load moveend', this._animMoveEnd, this);
|
||
|
||
this._on('unload', this._destroyAnimProxy, this);
|
||
},
|
||
|
||
_destroyAnimProxy: function () {
|
||
remove(this._proxy);
|
||
this.off('load moveend', this._animMoveEnd, this);
|
||
delete this._proxy;
|
||
},
|
||
|
||
_animMoveEnd: function () {
|
||
var c = this.getCenter(),
|
||
z = this.getZoom();
|
||
setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));
|
||
},
|
||
|
||
_catchTransitionEnd: function (e) {
|
||
if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {
|
||
this._onZoomTransitionEnd();
|
||
}
|
||
},
|
||
|
||
_nothingToAnimate: function () {
|
||
return !this._container.getElementsByClassName('leaflet-zoom-animated').length;
|
||
},
|
||
|
||
_tryAnimatedZoom: function (center, zoom, options) {
|
||
|
||
if (this._animatingZoom) { return true; }
|
||
|
||
options = options || {};
|
||
|
||
// don't animate if disabled, not supported or zoom difference is too large
|
||
if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||
|
||
Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
|
||
|
||
// offset is the pixel coords of the zoom origin relative to the current center
|
||
var scale = this.getZoomScale(zoom),
|
||
offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);
|
||
|
||
// don't animate if the zoom origin isn't within one screen from the current center, unless forced
|
||
if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
|
||
|
||
requestAnimFrame(function () {
|
||
this
|
||
._moveStart(true, false)
|
||
._animateZoom(center, zoom, true);
|
||
}, this);
|
||
|
||
return true;
|
||
},
|
||
|
||
_animateZoom: function (center, zoom, startAnim, noUpdate) {
|
||
if (!this._mapPane) { return; }
|
||
|
||
if (startAnim) {
|
||
this._animatingZoom = true;
|
||
|
||
// remember what center/zoom to set after animation
|
||
this._animateToCenter = center;
|
||
this._animateToZoom = zoom;
|
||
|
||
addClass(this._mapPane, 'leaflet-zoom-anim');
|
||
}
|
||
|
||
// @section Other Events
|
||
// @event zoomanim: ZoomAnimEvent
|
||
// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.
|
||
this.fire('zoomanim', {
|
||
center: center,
|
||
zoom: zoom,
|
||
noUpdate: noUpdate
|
||
});
|
||
|
||
if (!this._tempFireZoomEvent) {
|
||
this._tempFireZoomEvent = this._zoom !== this._animateToZoom;
|
||
}
|
||
|
||
this._move(this._animateToCenter, this._animateToZoom, undefined, true);
|
||
|
||
// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693
|
||
setTimeout(bind(this._onZoomTransitionEnd, this), 250);
|
||
},
|
||
|
||
_onZoomTransitionEnd: function () {
|
||
if (!this._animatingZoom) { return; }
|
||
|
||
if (this._mapPane) {
|
||
removeClass(this._mapPane, 'leaflet-zoom-anim');
|
||
}
|
||
|
||
this._animatingZoom = false;
|
||
|
||
this._move(this._animateToCenter, this._animateToZoom, undefined, true);
|
||
|
||
if (this._tempFireZoomEvent) {
|
||
this.fire('zoom');
|
||
}
|
||
delete this._tempFireZoomEvent;
|
||
|
||
this.fire('move');
|
||
|
||
this._moveEnd(true);
|
||
}
|
||
});
|
||
|
||
// @section
|
||
|
||
// @factory L.map(id: String, options?: Map options)
|
||
// Instantiates a map object given the DOM ID of a `<div>` element
|
||
// and optionally an object literal with `Map options`.
|
||
//
|
||
// @alternative
|
||
// @factory L.map(el: HTMLElement, options?: Map options)
|
||
// Instantiates a map object given an instance of a `<div>` HTML element
|
||
// and optionally an object literal with `Map options`.
|
||
function createMap(id, options) {
|
||
return new Map(id, options);
|
||
}
|
||
|
||
/*
|
||
* @class Control
|
||
* @aka L.Control
|
||
* @inherits Class
|
||
*
|
||
* L.Control is a base class for implementing map controls. Handles positioning.
|
||
* All other controls extend from this class.
|
||
*/
|
||
|
||
var Control = Class.extend({
|
||
// @section
|
||
// @aka Control Options
|
||
options: {
|
||
// @option position: String = 'topright'
|
||
// The position of the control (one of the map corners). Possible values are `'topleft'`,
|
||
// `'topright'`, `'bottomleft'` or `'bottomright'`
|
||
position: 'topright'
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
/* @section
|
||
* Classes extending L.Control will inherit the following methods:
|
||
*
|
||
* @method getPosition: string
|
||
* Returns the position of the control.
|
||
*/
|
||
getPosition: function () {
|
||
return this.options.position;
|
||
},
|
||
|
||
// @method setPosition(position: string): this
|
||
// Sets the position of the control.
|
||
setPosition: function (position) {
|
||
var map = this._map;
|
||
|
||
if (map) {
|
||
map.removeControl(this);
|
||
}
|
||
|
||
this.options.position = position;
|
||
|
||
if (map) {
|
||
map.addControl(this);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTMLElement that contains the control.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method addTo(map: Map): this
|
||
// Adds the control to the given map.
|
||
addTo: function (map) {
|
||
this.remove();
|
||
this._map = map;
|
||
|
||
var container = this._container = this.onAdd(map),
|
||
pos = this.getPosition(),
|
||
corner = map._controlCorners[pos];
|
||
|
||
addClass(container, 'leaflet-control');
|
||
|
||
if (pos.indexOf('bottom') !== -1) {
|
||
corner.insertBefore(container, corner.firstChild);
|
||
} else {
|
||
corner.appendChild(container);
|
||
}
|
||
|
||
this._map.on('unload', this.remove, this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method remove: this
|
||
// Removes the control from the map it is currently active on.
|
||
remove: function () {
|
||
if (!this._map) {
|
||
return this;
|
||
}
|
||
|
||
remove(this._container);
|
||
|
||
if (this.onRemove) {
|
||
this.onRemove(this._map);
|
||
}
|
||
|
||
this._map.off('unload', this.remove, this);
|
||
this._map = null;
|
||
|
||
return this;
|
||
},
|
||
|
||
_refocusOnMap: function (e) {
|
||
// if map exists and event is not a keyboard event
|
||
if (this._map && e && e.screenX > 0 && e.screenY > 0) {
|
||
this._map.getContainer().focus();
|
||
}
|
||
}
|
||
});
|
||
|
||
var control = function (options) {
|
||
return new Control(options);
|
||
};
|
||
|
||
/* @section Extension methods
|
||
* @uninheritable
|
||
*
|
||
* Every control should extend from `L.Control` and (re-)implement the following methods.
|
||
*
|
||
* @method onAdd(map: Map): HTMLElement
|
||
* Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).
|
||
*
|
||
* @method onRemove(map: Map)
|
||
* Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).
|
||
*/
|
||
|
||
/* @namespace Map
|
||
* @section Methods for Layers and Controls
|
||
*/
|
||
Map.include({
|
||
// @method addControl(control: Control): this
|
||
// Adds the given control to the map
|
||
addControl: function (control) {
|
||
control.addTo(this);
|
||
return this;
|
||
},
|
||
|
||
// @method removeControl(control: Control): this
|
||
// Removes the given control from the map
|
||
removeControl: function (control) {
|
||
control.remove();
|
||
return this;
|
||
},
|
||
|
||
_initControlPos: function () {
|
||
var corners = this._controlCorners = {},
|
||
l = 'leaflet-',
|
||
container = this._controlContainer =
|
||
create$1('div', l + 'control-container', this._container);
|
||
|
||
function createCorner(vSide, hSide) {
|
||
var className = l + vSide + ' ' + l + hSide;
|
||
|
||
corners[vSide + hSide] = create$1('div', className, container);
|
||
}
|
||
|
||
createCorner('top', 'left');
|
||
createCorner('top', 'right');
|
||
createCorner('bottom', 'left');
|
||
createCorner('bottom', 'right');
|
||
},
|
||
|
||
_clearControlPos: function () {
|
||
for (var i in this._controlCorners) {
|
||
remove(this._controlCorners[i]);
|
||
}
|
||
remove(this._controlContainer);
|
||
delete this._controlCorners;
|
||
delete this._controlContainer;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Control.Layers
|
||
* @aka L.Control.Layers
|
||
* @inherits Control
|
||
*
|
||
* The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var baseLayers = {
|
||
* "Mapbox": mapbox,
|
||
* "OpenStreetMap": osm
|
||
* };
|
||
*
|
||
* var overlays = {
|
||
* "Marker": marker,
|
||
* "Roads": roadsLayer
|
||
* };
|
||
*
|
||
* L.control.layers(baseLayers, overlays).addTo(map);
|
||
* ```
|
||
*
|
||
* The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:
|
||
*
|
||
* ```js
|
||
* {
|
||
* "<someName1>": layer1,
|
||
* "<someName2>": layer2
|
||
* }
|
||
* ```
|
||
*
|
||
* The layer names can contain HTML, which allows you to add additional styling to the items:
|
||
*
|
||
* ```js
|
||
* {"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>": myLayer}
|
||
* ```
|
||
*/
|
||
|
||
var Layers = Control.extend({
|
||
// @section
|
||
// @aka Control.Layers options
|
||
options: {
|
||
// @option collapsed: Boolean = true
|
||
// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.
|
||
collapsed: true,
|
||
position: 'topright',
|
||
|
||
// @option autoZIndex: Boolean = true
|
||
// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.
|
||
autoZIndex: true,
|
||
|
||
// @option hideSingleBase: Boolean = false
|
||
// If `true`, the base layers in the control will be hidden when there is only one.
|
||
hideSingleBase: false,
|
||
|
||
// @option sortLayers: Boolean = false
|
||
// Whether to sort the layers. When `false`, layers will keep the order
|
||
// in which they were added to the control.
|
||
sortLayers: false,
|
||
|
||
// @option sortFunction: Function = *
|
||
// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
|
||
// that will be used for sorting the layers, when `sortLayers` is `true`.
|
||
// The function receives both the `L.Layer` instances and their names, as in
|
||
// `sortFunction(layerA, layerB, nameA, nameB)`.
|
||
// By default, it sorts layers alphabetically by their name.
|
||
sortFunction: function (layerA, layerB, nameA, nameB) {
|
||
return nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);
|
||
}
|
||
},
|
||
|
||
initialize: function (baseLayers, overlays, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layerControlInputs = [];
|
||
this._layers = [];
|
||
this._lastZIndex = 0;
|
||
this._handlingClick = false;
|
||
|
||
for (var i in baseLayers) {
|
||
this._addLayer(baseLayers[i], i);
|
||
}
|
||
|
||
for (i in overlays) {
|
||
this._addLayer(overlays[i], i, true);
|
||
}
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._initLayout();
|
||
this._update();
|
||
|
||
this._map = map;
|
||
map.on('zoomend', this._checkDisabledLayers, this);
|
||
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
this._layers[i].layer.on('add remove', this._onLayerChange, this);
|
||
}
|
||
|
||
return this._container;
|
||
},
|
||
|
||
addTo: function (map) {
|
||
Control.prototype.addTo.call(this, map);
|
||
// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.
|
||
return this._expandIfNotCollapsed();
|
||
},
|
||
|
||
onRemove: function () {
|
||
this._map.off('zoomend', this._checkDisabledLayers, this);
|
||
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
this._layers[i].layer.off('add remove', this._onLayerChange, this);
|
||
}
|
||
},
|
||
|
||
// @method addBaseLayer(layer: Layer, name: String): this
|
||
// Adds a base layer (radio button entry) with the given name to the control.
|
||
addBaseLayer: function (layer, name) {
|
||
this._addLayer(layer, name);
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method addOverlay(layer: Layer, name: String): this
|
||
// Adds an overlay (checkbox entry) with the given name to the control.
|
||
addOverlay: function (layer, name) {
|
||
this._addLayer(layer, name, true);
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Remove the given layer from the control.
|
||
removeLayer: function (layer) {
|
||
layer.off('add remove', this._onLayerChange, this);
|
||
|
||
var obj = this._getLayer(stamp(layer));
|
||
if (obj) {
|
||
this._layers.splice(this._layers.indexOf(obj), 1);
|
||
}
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method expand(): this
|
||
// Expand the control container if collapsed.
|
||
expand: function () {
|
||
addClass(this._container, 'leaflet-control-layers-expanded');
|
||
this._section.style.height = null;
|
||
var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);
|
||
if (acceptableHeight < this._section.clientHeight) {
|
||
addClass(this._section, 'leaflet-control-layers-scrollbar');
|
||
this._section.style.height = acceptableHeight + 'px';
|
||
} else {
|
||
removeClass(this._section, 'leaflet-control-layers-scrollbar');
|
||
}
|
||
this._checkDisabledLayers();
|
||
return this;
|
||
},
|
||
|
||
// @method collapse(): this
|
||
// Collapse the control container if expanded.
|
||
collapse: function () {
|
||
removeClass(this._container, 'leaflet-control-layers-expanded');
|
||
return this;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var className = 'leaflet-control-layers',
|
||
container = this._container = create$1('div', className),
|
||
collapsed = this.options.collapsed;
|
||
|
||
// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released
|
||
container.setAttribute('aria-haspopup', true);
|
||
|
||
disableClickPropagation(container);
|
||
disableScrollPropagation(container);
|
||
|
||
var section = this._section = create$1('section', className + '-list');
|
||
|
||
if (collapsed) {
|
||
this._map.on('click', this.collapse, this);
|
||
|
||
on(container, {
|
||
mouseenter: this._expandSafely,
|
||
mouseleave: this.collapse
|
||
}, this);
|
||
}
|
||
|
||
var link = this._layersLink = create$1('a', className + '-toggle', container);
|
||
link.href = '#';
|
||
link.title = 'Layers';
|
||
link.setAttribute('role', 'button');
|
||
|
||
on(link, {
|
||
keydown: function (e) {
|
||
if (e.keyCode === 13) {
|
||
this._expandSafely();
|
||
}
|
||
},
|
||
// Certain screen readers intercept the key event and instead send a click event
|
||
click: function (e) {
|
||
preventDefault(e);
|
||
this._expandSafely();
|
||
}
|
||
}, this);
|
||
|
||
if (!collapsed) {
|
||
this.expand();
|
||
}
|
||
|
||
this._baseLayersList = create$1('div', className + '-base', section);
|
||
this._separator = create$1('div', className + '-separator', section);
|
||
this._overlaysList = create$1('div', className + '-overlays', section);
|
||
|
||
container.appendChild(section);
|
||
},
|
||
|
||
_getLayer: function (id) {
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
|
||
if (this._layers[i] && stamp(this._layers[i].layer) === id) {
|
||
return this._layers[i];
|
||
}
|
||
}
|
||
},
|
||
|
||
_addLayer: function (layer, name, overlay) {
|
||
if (this._map) {
|
||
layer.on('add remove', this._onLayerChange, this);
|
||
}
|
||
|
||
this._layers.push({
|
||
layer: layer,
|
||
name: name,
|
||
overlay: overlay
|
||
});
|
||
|
||
if (this.options.sortLayers) {
|
||
this._layers.sort(bind(function (a, b) {
|
||
return this.options.sortFunction(a.layer, b.layer, a.name, b.name);
|
||
}, this));
|
||
}
|
||
|
||
if (this.options.autoZIndex && layer.setZIndex) {
|
||
this._lastZIndex++;
|
||
layer.setZIndex(this._lastZIndex);
|
||
}
|
||
|
||
this._expandIfNotCollapsed();
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._container) { return this; }
|
||
|
||
empty(this._baseLayersList);
|
||
empty(this._overlaysList);
|
||
|
||
this._layerControlInputs = [];
|
||
var baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;
|
||
|
||
for (i = 0; i < this._layers.length; i++) {
|
||
obj = this._layers[i];
|
||
this._addItem(obj);
|
||
overlaysPresent = overlaysPresent || obj.overlay;
|
||
baseLayersPresent = baseLayersPresent || !obj.overlay;
|
||
baseLayersCount += !obj.overlay ? 1 : 0;
|
||
}
|
||
|
||
// Hide base layers section if there's only one layer.
|
||
if (this.options.hideSingleBase) {
|
||
baseLayersPresent = baseLayersPresent && baseLayersCount > 1;
|
||
this._baseLayersList.style.display = baseLayersPresent ? '' : 'none';
|
||
}
|
||
|
||
this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
|
||
|
||
return this;
|
||
},
|
||
|
||
_onLayerChange: function (e) {
|
||
if (!this._handlingClick) {
|
||
this._update();
|
||
}
|
||
|
||
var obj = this._getLayer(stamp(e.target));
|
||
|
||
// @namespace Map
|
||
// @section Layer events
|
||
// @event baselayerchange: LayersControlEvent
|
||
// Fired when the base layer is changed through the [layers control](#control-layers).
|
||
// @event overlayadd: LayersControlEvent
|
||
// Fired when an overlay is selected through the [layers control](#control-layers).
|
||
// @event overlayremove: LayersControlEvent
|
||
// Fired when an overlay is deselected through the [layers control](#control-layers).
|
||
// @namespace Control.Layers
|
||
var type = obj.overlay ?
|
||
(e.type === 'add' ? 'overlayadd' : 'overlayremove') :
|
||
(e.type === 'add' ? 'baselayerchange' : null);
|
||
|
||
if (type) {
|
||
this._map.fire(type, obj);
|
||
}
|
||
},
|
||
|
||
// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)
|
||
_createRadioElement: function (name, checked) {
|
||
|
||
var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' +
|
||
name + '"' + (checked ? ' checked="checked"' : '') + '/>';
|
||
|
||
var radioFragment = document.createElement('div');
|
||
radioFragment.innerHTML = radioHtml;
|
||
|
||
return radioFragment.firstChild;
|
||
},
|
||
|
||
_addItem: function (obj) {
|
||
var label = document.createElement('label'),
|
||
checked = this._map.hasLayer(obj.layer),
|
||
input;
|
||
|
||
if (obj.overlay) {
|
||
input = document.createElement('input');
|
||
input.type = 'checkbox';
|
||
input.className = 'leaflet-control-layers-selector';
|
||
input.defaultChecked = checked;
|
||
} else {
|
||
input = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked);
|
||
}
|
||
|
||
this._layerControlInputs.push(input);
|
||
input.layerId = stamp(obj.layer);
|
||
|
||
on(input, 'click', this._onInputClick, this);
|
||
|
||
var name = document.createElement('span');
|
||
name.innerHTML = ' ' + obj.name;
|
||
|
||
// Helps from preventing layer control flicker when checkboxes are disabled
|
||
// https://github.com/Leaflet/Leaflet/issues/2771
|
||
var holder = document.createElement('span');
|
||
|
||
label.appendChild(holder);
|
||
holder.appendChild(input);
|
||
holder.appendChild(name);
|
||
|
||
var container = obj.overlay ? this._overlaysList : this._baseLayersList;
|
||
container.appendChild(label);
|
||
|
||
this._checkDisabledLayers();
|
||
return label;
|
||
},
|
||
|
||
_onInputClick: function () {
|
||
var inputs = this._layerControlInputs,
|
||
input, layer;
|
||
var addedLayers = [],
|
||
removedLayers = [];
|
||
|
||
this._handlingClick = true;
|
||
|
||
for (var i = inputs.length - 1; i >= 0; i--) {
|
||
input = inputs[i];
|
||
layer = this._getLayer(input.layerId).layer;
|
||
|
||
if (input.checked) {
|
||
addedLayers.push(layer);
|
||
} else if (!input.checked) {
|
||
removedLayers.push(layer);
|
||
}
|
||
}
|
||
|
||
// Bugfix issue 2318: Should remove all old layers before readding new ones
|
||
for (i = 0; i < removedLayers.length; i++) {
|
||
if (this._map.hasLayer(removedLayers[i])) {
|
||
this._map.removeLayer(removedLayers[i]);
|
||
}
|
||
}
|
||
for (i = 0; i < addedLayers.length; i++) {
|
||
if (!this._map.hasLayer(addedLayers[i])) {
|
||
this._map.addLayer(addedLayers[i]);
|
||
}
|
||
}
|
||
|
||
this._handlingClick = false;
|
||
|
||
this._refocusOnMap();
|
||
},
|
||
|
||
_checkDisabledLayers: function () {
|
||
var inputs = this._layerControlInputs,
|
||
input,
|
||
layer,
|
||
zoom = this._map.getZoom();
|
||
|
||
for (var i = inputs.length - 1; i >= 0; i--) {
|
||
input = inputs[i];
|
||
layer = this._getLayer(input.layerId).layer;
|
||
input.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||
|
||
(layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);
|
||
|
||
}
|
||
},
|
||
|
||
_expandIfNotCollapsed: function () {
|
||
if (this._map && !this.options.collapsed) {
|
||
this.expand();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_expandSafely: function () {
|
||
var section = this._section;
|
||
on(section, 'click', preventDefault);
|
||
this.expand();
|
||
setTimeout(function () {
|
||
off(section, 'click', preventDefault);
|
||
});
|
||
}
|
||
|
||
});
|
||
|
||
|
||
// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)
|
||
// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.
|
||
var layers = function (baseLayers, overlays, options) {
|
||
return new Layers(baseLayers, overlays, options);
|
||
};
|
||
|
||
/*
|
||
* @class Control.Zoom
|
||
* @aka L.Control.Zoom
|
||
* @inherits Control
|
||
*
|
||
* A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.
|
||
*/
|
||
|
||
var Zoom = Control.extend({
|
||
// @section
|
||
// @aka Control.Zoom options
|
||
options: {
|
||
position: 'topleft',
|
||
|
||
// @option zoomInText: String = '<span aria-hidden="true">+</span>'
|
||
// The text set on the 'zoom in' button.
|
||
zoomInText: '<span aria-hidden="true">+</span>',
|
||
|
||
// @option zoomInTitle: String = 'Zoom in'
|
||
// The title set on the 'zoom in' button.
|
||
zoomInTitle: 'Zoom in',
|
||
|
||
// @option zoomOutText: String = '<span aria-hidden="true">−</span>'
|
||
// The text set on the 'zoom out' button.
|
||
zoomOutText: '<span aria-hidden="true">−</span>',
|
||
|
||
// @option zoomOutTitle: String = 'Zoom out'
|
||
// The title set on the 'zoom out' button.
|
||
zoomOutTitle: 'Zoom out'
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
var zoomName = 'leaflet-control-zoom',
|
||
container = create$1('div', zoomName + ' leaflet-bar'),
|
||
options = this.options;
|
||
|
||
this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,
|
||
zoomName + '-in', container, this._zoomIn);
|
||
this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,
|
||
zoomName + '-out', container, this._zoomOut);
|
||
|
||
this._updateDisabled();
|
||
map.on('zoomend zoomlevelschange', this._updateDisabled, this);
|
||
|
||
return container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off('zoomend zoomlevelschange', this._updateDisabled, this);
|
||
},
|
||
|
||
disable: function () {
|
||
this._disabled = true;
|
||
this._updateDisabled();
|
||
return this;
|
||
},
|
||
|
||
enable: function () {
|
||
this._disabled = false;
|
||
this._updateDisabled();
|
||
return this;
|
||
},
|
||
|
||
_zoomIn: function (e) {
|
||
if (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {
|
||
this._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
|
||
}
|
||
},
|
||
|
||
_zoomOut: function (e) {
|
||
if (!this._disabled && this._map._zoom > this._map.getMinZoom()) {
|
||
this._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
|
||
}
|
||
},
|
||
|
||
_createButton: function (html, title, className, container, fn) {
|
||
var link = create$1('a', className, container);
|
||
link.innerHTML = html;
|
||
link.href = '#';
|
||
link.title = title;
|
||
|
||
/*
|
||
* Will force screen readers like VoiceOver to read this as "Zoom in - button"
|
||
*/
|
||
link.setAttribute('role', 'button');
|
||
link.setAttribute('aria-label', title);
|
||
|
||
disableClickPropagation(link);
|
||
on(link, 'click', stop);
|
||
on(link, 'click', fn, this);
|
||
on(link, 'click', this._refocusOnMap, this);
|
||
|
||
return link;
|
||
},
|
||
|
||
_updateDisabled: function () {
|
||
var map = this._map,
|
||
className = 'leaflet-disabled';
|
||
|
||
removeClass(this._zoomInButton, className);
|
||
removeClass(this._zoomOutButton, className);
|
||
this._zoomInButton.setAttribute('aria-disabled', 'false');
|
||
this._zoomOutButton.setAttribute('aria-disabled', 'false');
|
||
|
||
if (this._disabled || map._zoom === map.getMinZoom()) {
|
||
addClass(this._zoomOutButton, className);
|
||
this._zoomOutButton.setAttribute('aria-disabled', 'true');
|
||
}
|
||
if (this._disabled || map._zoom === map.getMaxZoom()) {
|
||
addClass(this._zoomInButton, className);
|
||
this._zoomInButton.setAttribute('aria-disabled', 'true');
|
||
}
|
||
}
|
||
});
|
||
|
||
// @namespace Map
|
||
// @section Control options
|
||
// @option zoomControl: Boolean = true
|
||
// Whether a [zoom control](#control-zoom) is added to the map by default.
|
||
Map.mergeOptions({
|
||
zoomControl: true
|
||
});
|
||
|
||
Map.addInitHook(function () {
|
||
if (this.options.zoomControl) {
|
||
// @section Controls
|
||
// @property zoomControl: Control.Zoom
|
||
// The default zoom control (only available if the
|
||
// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).
|
||
this.zoomControl = new Zoom();
|
||
this.addControl(this.zoomControl);
|
||
}
|
||
});
|
||
|
||
// @namespace Control.Zoom
|
||
// @factory L.control.zoom(options: Control.Zoom options)
|
||
// Creates a zoom control
|
||
var zoom = function (options) {
|
||
return new Zoom(options);
|
||
};
|
||
|
||
/*
|
||
* @class Control.Scale
|
||
* @aka L.Control.Scale
|
||
* @inherits Control
|
||
*
|
||
* A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.control.scale().addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Scale = Control.extend({
|
||
// @section
|
||
// @aka Control.Scale options
|
||
options: {
|
||
position: 'bottomleft',
|
||
|
||
// @option maxWidth: Number = 100
|
||
// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).
|
||
maxWidth: 100,
|
||
|
||
// @option metric: Boolean = True
|
||
// Whether to show the metric scale line (m/km).
|
||
metric: true,
|
||
|
||
// @option imperial: Boolean = True
|
||
// Whether to show the imperial scale line (mi/ft).
|
||
imperial: true
|
||
|
||
// @option updateWhenIdle: Boolean = false
|
||
// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
var className = 'leaflet-control-scale',
|
||
container = create$1('div', className),
|
||
options = this.options;
|
||
|
||
this._addScales(options, className + '-line', container);
|
||
|
||
map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
|
||
map.whenReady(this._update, this);
|
||
|
||
return container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
|
||
},
|
||
|
||
_addScales: function (options, className, container) {
|
||
if (options.metric) {
|
||
this._mScale = create$1('div', className, container);
|
||
}
|
||
if (options.imperial) {
|
||
this._iScale = create$1('div', className, container);
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
var map = this._map,
|
||
y = map.getSize().y / 2;
|
||
|
||
var maxMeters = map.distance(
|
||
map.containerPointToLatLng([0, y]),
|
||
map.containerPointToLatLng([this.options.maxWidth, y]));
|
||
|
||
this._updateScales(maxMeters);
|
||
},
|
||
|
||
_updateScales: function (maxMeters) {
|
||
if (this.options.metric && maxMeters) {
|
||
this._updateMetric(maxMeters);
|
||
}
|
||
if (this.options.imperial && maxMeters) {
|
||
this._updateImperial(maxMeters);
|
||
}
|
||
},
|
||
|
||
_updateMetric: function (maxMeters) {
|
||
var meters = this._getRoundNum(maxMeters),
|
||
label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
|
||
|
||
this._updateScale(this._mScale, label, meters / maxMeters);
|
||
},
|
||
|
||
_updateImperial: function (maxMeters) {
|
||
var maxFeet = maxMeters * 3.2808399,
|
||
maxMiles, miles, feet;
|
||
|
||
if (maxFeet > 5280) {
|
||
maxMiles = maxFeet / 5280;
|
||
miles = this._getRoundNum(maxMiles);
|
||
this._updateScale(this._iScale, miles + ' mi', miles / maxMiles);
|
||
|
||
} else {
|
||
feet = this._getRoundNum(maxFeet);
|
||
this._updateScale(this._iScale, feet + ' ft', feet / maxFeet);
|
||
}
|
||
},
|
||
|
||
_updateScale: function (scale, text, ratio) {
|
||
scale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';
|
||
scale.innerHTML = text;
|
||
},
|
||
|
||
_getRoundNum: function (num) {
|
||
var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
|
||
d = num / pow10;
|
||
|
||
d = d >= 10 ? 10 :
|
||
d >= 5 ? 5 :
|
||
d >= 3 ? 3 :
|
||
d >= 2 ? 2 : 1;
|
||
|
||
return pow10 * d;
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.control.scale(options?: Control.Scale options)
|
||
// Creates an scale control with the given options.
|
||
var scale = function (options) {
|
||
return new Scale(options);
|
||
};
|
||
|
||
var ukrainianFlag = '<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg>';
|
||
|
||
|
||
/*
|
||
* @class Control.Attribution
|
||
* @aka L.Control.Attribution
|
||
* @inherits Control
|
||
*
|
||
* The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.
|
||
*/
|
||
|
||
var Attribution = Control.extend({
|
||
// @section
|
||
// @aka Control.Attribution options
|
||
options: {
|
||
position: 'bottomright',
|
||
|
||
// @option prefix: String|false = 'Leaflet'
|
||
// The HTML text shown before the attributions. Pass `false` to disable.
|
||
prefix: '<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
|
||
this._attributions = {};
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
map.attributionControl = this;
|
||
this._container = create$1('div', 'leaflet-control-attribution');
|
||
disableClickPropagation(this._container);
|
||
|
||
// TODO ugly, refactor
|
||
for (var i in map._layers) {
|
||
if (map._layers[i].getAttribution) {
|
||
this.addAttribution(map._layers[i].getAttribution());
|
||
}
|
||
}
|
||
|
||
this._update();
|
||
|
||
map.on('layeradd', this._addAttribution, this);
|
||
|
||
return this._container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off('layeradd', this._addAttribution, this);
|
||
},
|
||
|
||
_addAttribution: function (ev) {
|
||
if (ev.layer.getAttribution) {
|
||
this.addAttribution(ev.layer.getAttribution());
|
||
ev.layer.once('remove', function () {
|
||
this.removeAttribution(ev.layer.getAttribution());
|
||
}, this);
|
||
}
|
||
},
|
||
|
||
// @method setPrefix(prefix: String|false): this
|
||
// The HTML text shown before the attributions. Pass `false` to disable.
|
||
setPrefix: function (prefix) {
|
||
this.options.prefix = prefix;
|
||
this._update();
|
||
return this;
|
||
},
|
||
|
||
// @method addAttribution(text: String): this
|
||
// Adds an attribution text (e.g. `'© OpenStreetMap contributors'`).
|
||
addAttribution: function (text) {
|
||
if (!text) { return this; }
|
||
|
||
if (!this._attributions[text]) {
|
||
this._attributions[text] = 0;
|
||
}
|
||
this._attributions[text]++;
|
||
|
||
this._update();
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeAttribution(text: String): this
|
||
// Removes an attribution text.
|
||
removeAttribution: function (text) {
|
||
if (!text) { return this; }
|
||
|
||
if (this._attributions[text]) {
|
||
this._attributions[text]--;
|
||
this._update();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
var attribs = [];
|
||
|
||
for (var i in this._attributions) {
|
||
if (this._attributions[i]) {
|
||
attribs.push(i);
|
||
}
|
||
}
|
||
|
||
var prefixAndAttribs = [];
|
||
|
||
if (this.options.prefix) {
|
||
prefixAndAttribs.push(this.options.prefix);
|
||
}
|
||
if (attribs.length) {
|
||
prefixAndAttribs.push(attribs.join(', '));
|
||
}
|
||
|
||
this._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden="true">|</span> ');
|
||
}
|
||
});
|
||
|
||
// @namespace Map
|
||
// @section Control options
|
||
// @option attributionControl: Boolean = true
|
||
// Whether a [attribution control](#control-attribution) is added to the map by default.
|
||
Map.mergeOptions({
|
||
attributionControl: true
|
||
});
|
||
|
||
Map.addInitHook(function () {
|
||
if (this.options.attributionControl) {
|
||
new Attribution().addTo(this);
|
||
}
|
||
});
|
||
|
||
// @namespace Control.Attribution
|
||
// @factory L.control.attribution(options: Control.Attribution options)
|
||
// Creates an attribution control.
|
||
var attribution = function (options) {
|
||
return new Attribution(options);
|
||
};
|
||
|
||
Control.Layers = Layers;
|
||
Control.Zoom = Zoom;
|
||
Control.Scale = Scale;
|
||
Control.Attribution = Attribution;
|
||
|
||
control.layers = layers;
|
||
control.zoom = zoom;
|
||
control.scale = scale;
|
||
control.attribution = attribution;
|
||
|
||
/*
|
||
L.Handler is a base class for handler classes that are used internally to inject
|
||
interaction features like dragging to classes like Map and Marker.
|
||
*/
|
||
|
||
// @class Handler
|
||
// @aka L.Handler
|
||
// Abstract class for map interaction handlers
|
||
|
||
var Handler = Class.extend({
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
},
|
||
|
||
// @method enable(): this
|
||
// Enables the handler
|
||
enable: function () {
|
||
if (this._enabled) { return this; }
|
||
|
||
this._enabled = true;
|
||
this.addHooks();
|
||
return this;
|
||
},
|
||
|
||
// @method disable(): this
|
||
// Disables the handler
|
||
disable: function () {
|
||
if (!this._enabled) { return this; }
|
||
|
||
this._enabled = false;
|
||
this.removeHooks();
|
||
return this;
|
||
},
|
||
|
||
// @method enabled(): Boolean
|
||
// Returns `true` if the handler is enabled
|
||
enabled: function () {
|
||
return !!this._enabled;
|
||
}
|
||
|
||
// @section Extension methods
|
||
// Classes inheriting from `Handler` must implement the two following methods:
|
||
// @method addHooks()
|
||
// Called when the handler is enabled, should add event hooks.
|
||
// @method removeHooks()
|
||
// Called when the handler is disabled, should remove the event hooks added previously.
|
||
});
|
||
|
||
// @section There is static function which can be called without instantiating L.Handler:
|
||
// @function addTo(map: Map, name: String): this
|
||
// Adds a new Handler to the given map with the given name.
|
||
Handler.addTo = function (map, name) {
|
||
map.addHandler(name, this);
|
||
return this;
|
||
};
|
||
|
||
var Mixin = {Events: Events};
|
||
|
||
/*
|
||
* @class Draggable
|
||
* @aka L.Draggable
|
||
* @inherits Evented
|
||
*
|
||
* A class for making DOM elements draggable (including touch support).
|
||
* Used internally for map and marker dragging. Only works for elements
|
||
* that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var draggable = new L.Draggable(elementToDrag);
|
||
* draggable.enable();
|
||
* ```
|
||
*/
|
||
|
||
var START = Browser.touch ? 'touchstart mousedown' : 'mousedown';
|
||
|
||
var Draggable = Evented.extend({
|
||
|
||
options: {
|
||
// @section
|
||
// @aka Draggable options
|
||
// @option clickTolerance: Number = 3
|
||
// The max number of pixels a user can shift the mouse pointer during a click
|
||
// for it to be considered a valid click (as opposed to a mouse drag).
|
||
clickTolerance: 3
|
||
},
|
||
|
||
// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)
|
||
// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).
|
||
initialize: function (element, dragStartTarget, preventOutline, options) {
|
||
setOptions(this, options);
|
||
|
||
this._element = element;
|
||
this._dragStartTarget = dragStartTarget || element;
|
||
this._preventOutline = preventOutline;
|
||
},
|
||
|
||
// @method enable()
|
||
// Enables the dragging ability
|
||
enable: function () {
|
||
if (this._enabled) { return; }
|
||
|
||
on(this._dragStartTarget, START, this._onDown, this);
|
||
|
||
this._enabled = true;
|
||
},
|
||
|
||
// @method disable()
|
||
// Disables the dragging ability
|
||
disable: function () {
|
||
if (!this._enabled) { return; }
|
||
|
||
// If we're currently dragging this draggable,
|
||
// disabling it counts as first ending the drag.
|
||
if (Draggable._dragging === this) {
|
||
this.finishDrag(true);
|
||
}
|
||
|
||
off(this._dragStartTarget, START, this._onDown, this);
|
||
|
||
this._enabled = false;
|
||
this._moved = false;
|
||
},
|
||
|
||
_onDown: function (e) {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
|
||
this._moved = false;
|
||
|
||
if (hasClass(this._element, 'leaflet-zoom-anim')) { return; }
|
||
|
||
if (e.touches && e.touches.length !== 1) {
|
||
// Finish dragging to avoid conflict with touchZoom
|
||
if (Draggable._dragging === this) {
|
||
this.finishDrag();
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
|
||
Draggable._dragging = this; // Prevent dragging multiple objects at once.
|
||
|
||
if (this._preventOutline) {
|
||
preventOutline(this._element);
|
||
}
|
||
|
||
disableImageDrag();
|
||
disableTextSelection();
|
||
|
||
if (this._moving) { return; }
|
||
|
||
// @event down: Event
|
||
// Fired when a drag is about to start.
|
||
this.fire('down');
|
||
|
||
var first = e.touches ? e.touches[0] : e,
|
||
sizedParent = getSizedParentNode(this._element);
|
||
|
||
this._startPoint = new Point(first.clientX, first.clientY);
|
||
this._startPos = getPosition(this._element);
|
||
|
||
// Cache the scale, so that we can continuously compensate for it during drag (_onMove).
|
||
this._parentScale = getScale(sizedParent);
|
||
|
||
var mouseevent = e.type === 'mousedown';
|
||
on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);
|
||
on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);
|
||
},
|
||
|
||
_onMove: function (e) {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
|
||
if (e.touches && e.touches.length > 1) {
|
||
this._moved = true;
|
||
return;
|
||
}
|
||
|
||
var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
|
||
offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);
|
||
|
||
if (!offset.x && !offset.y) { return; }
|
||
if (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }
|
||
|
||
// We assume that the parent container's position, border and scale do not change for the duration of the drag.
|
||
// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)
|
||
// and we can use the cached value for the scale.
|
||
offset.x /= this._parentScale.x;
|
||
offset.y /= this._parentScale.y;
|
||
|
||
preventDefault(e);
|
||
|
||
if (!this._moved) {
|
||
// @event dragstart: Event
|
||
// Fired when a drag starts
|
||
this.fire('dragstart');
|
||
|
||
this._moved = true;
|
||
|
||
addClass(document.body, 'leaflet-dragging');
|
||
|
||
this._lastTarget = e.target || e.srcElement;
|
||
// IE and Edge do not give the <use> element, so fetch it
|
||
// if necessary
|
||
if (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {
|
||
this._lastTarget = this._lastTarget.correspondingUseElement;
|
||
}
|
||
addClass(this._lastTarget, 'leaflet-drag-target');
|
||
}
|
||
|
||
this._newPos = this._startPos.add(offset);
|
||
this._moving = true;
|
||
|
||
this._lastEvent = e;
|
||
this._updatePosition();
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
var e = {originalEvent: this._lastEvent};
|
||
|
||
// @event predrag: Event
|
||
// Fired continuously during dragging *before* each corresponding
|
||
// update of the element's position.
|
||
this.fire('predrag', e);
|
||
setPosition(this._element, this._newPos);
|
||
|
||
// @event drag: Event
|
||
// Fired continuously during dragging.
|
||
this.fire('drag', e);
|
||
},
|
||
|
||
_onUp: function () {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
this.finishDrag();
|
||
},
|
||
|
||
finishDrag: function (noInertia) {
|
||
removeClass(document.body, 'leaflet-dragging');
|
||
|
||
if (this._lastTarget) {
|
||
removeClass(this._lastTarget, 'leaflet-drag-target');
|
||
this._lastTarget = null;
|
||
}
|
||
|
||
off(document, 'mousemove touchmove', this._onMove, this);
|
||
off(document, 'mouseup touchend touchcancel', this._onUp, this);
|
||
|
||
enableImageDrag();
|
||
enableTextSelection();
|
||
|
||
if (this._moved && this._moving) {
|
||
|
||
// @event dragend: DragEndEvent
|
||
// Fired when the drag ends.
|
||
this.fire('dragend', {
|
||
noInertia: noInertia,
|
||
distance: this._newPos.distanceTo(this._startPos)
|
||
});
|
||
}
|
||
|
||
this._moving = false;
|
||
Draggable._dragging = false;
|
||
}
|
||
|
||
});
|
||
|
||
/*
|
||
* @namespace LineUtil
|
||
*
|
||
* Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.
|
||
*/
|
||
|
||
// Simplify polyline with vertex reduction and Douglas-Peucker simplification.
|
||
// Improves rendering performance dramatically by lessening the number of points to draw.
|
||
|
||
// @function simplify(points: Point[], tolerance: Number): Point[]
|
||
// Dramatically reduces the number of points in a polyline while retaining
|
||
// its shape and returns a new array of simplified points, using the
|
||
// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).
|
||
// Used for a huge performance boost when processing/displaying Leaflet polylines for
|
||
// each zoom level and also reducing visual noise. tolerance affects the amount of
|
||
// simplification (lesser value means higher quality but slower and with more points).
|
||
// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).
|
||
function simplify(points, tolerance) {
|
||
if (!tolerance || !points.length) {
|
||
return points.slice();
|
||
}
|
||
|
||
var sqTolerance = tolerance * tolerance;
|
||
|
||
// stage 1: vertex reduction
|
||
points = _reducePoints(points, sqTolerance);
|
||
|
||
// stage 2: Douglas-Peucker simplification
|
||
points = _simplifyDP(points, sqTolerance);
|
||
|
||
return points;
|
||
}
|
||
|
||
// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number
|
||
// Returns the distance between point `p` and segment `p1` to `p2`.
|
||
function pointToSegmentDistance(p, p1, p2) {
|
||
return Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));
|
||
}
|
||
|
||
// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number
|
||
// Returns the closest point from a point `p` on a segment `p1` to `p2`.
|
||
function closestPointOnSegment(p, p1, p2) {
|
||
return _sqClosestPointOnSegment(p, p1, p2);
|
||
}
|
||
|
||
// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
|
||
function _simplifyDP(points, sqTolerance) {
|
||
|
||
var len = points.length,
|
||
ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
|
||
markers = new ArrayConstructor(len);
|
||
|
||
markers[0] = markers[len - 1] = 1;
|
||
|
||
_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
|
||
|
||
var i,
|
||
newPoints = [];
|
||
|
||
for (i = 0; i < len; i++) {
|
||
if (markers[i]) {
|
||
newPoints.push(points[i]);
|
||
}
|
||
}
|
||
|
||
return newPoints;
|
||
}
|
||
|
||
function _simplifyDPStep(points, markers, sqTolerance, first, last) {
|
||
|
||
var maxSqDist = 0,
|
||
index, i, sqDist;
|
||
|
||
for (i = first + 1; i <= last - 1; i++) {
|
||
sqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);
|
||
|
||
if (sqDist > maxSqDist) {
|
||
index = i;
|
||
maxSqDist = sqDist;
|
||
}
|
||
}
|
||
|
||
if (maxSqDist > sqTolerance) {
|
||
markers[index] = 1;
|
||
|
||
_simplifyDPStep(points, markers, sqTolerance, first, index);
|
||
_simplifyDPStep(points, markers, sqTolerance, index, last);
|
||
}
|
||
}
|
||
|
||
// reduce points that are too close to each other to a single point
|
||
function _reducePoints(points, sqTolerance) {
|
||
var reducedPoints = [points[0]];
|
||
|
||
for (var i = 1, prev = 0, len = points.length; i < len; i++) {
|
||
if (_sqDist(points[i], points[prev]) > sqTolerance) {
|
||
reducedPoints.push(points[i]);
|
||
prev = i;
|
||
}
|
||
}
|
||
if (prev < len - 1) {
|
||
reducedPoints.push(points[len - 1]);
|
||
}
|
||
return reducedPoints;
|
||
}
|
||
|
||
var _lastCode;
|
||
|
||
// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean
|
||
// Clips the segment a to b by rectangular bounds with the
|
||
// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)
|
||
// (modifying the segment points directly!). Used by Leaflet to only show polyline
|
||
// points that are on the screen or near, increasing performance.
|
||
function clipSegment(a, b, bounds, useLastCode, round) {
|
||
var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),
|
||
codeB = _getBitCode(b, bounds),
|
||
|
||
codeOut, p, newCode;
|
||
|
||
// save 2nd code to avoid calculating it on the next segment
|
||
_lastCode = codeB;
|
||
|
||
while (true) {
|
||
// if a,b is inside the clip window (trivial accept)
|
||
if (!(codeA | codeB)) {
|
||
return [a, b];
|
||
}
|
||
|
||
// if a,b is outside the clip window (trivial reject)
|
||
if (codeA & codeB) {
|
||
return false;
|
||
}
|
||
|
||
// other cases
|
||
codeOut = codeA || codeB;
|
||
p = _getEdgeIntersection(a, b, codeOut, bounds, round);
|
||
newCode = _getBitCode(p, bounds);
|
||
|
||
if (codeOut === codeA) {
|
||
a = p;
|
||
codeA = newCode;
|
||
} else {
|
||
b = p;
|
||
codeB = newCode;
|
||
}
|
||
}
|
||
}
|
||
|
||
function _getEdgeIntersection(a, b, code, bounds, round) {
|
||
var dx = b.x - a.x,
|
||
dy = b.y - a.y,
|
||
min = bounds.min,
|
||
max = bounds.max,
|
||
x, y;
|
||
|
||
if (code & 8) { // top
|
||
x = a.x + dx * (max.y - a.y) / dy;
|
||
y = max.y;
|
||
|
||
} else if (code & 4) { // bottom
|
||
x = a.x + dx * (min.y - a.y) / dy;
|
||
y = min.y;
|
||
|
||
} else if (code & 2) { // right
|
||
x = max.x;
|
||
y = a.y + dy * (max.x - a.x) / dx;
|
||
|
||
} else if (code & 1) { // left
|
||
x = min.x;
|
||
y = a.y + dy * (min.x - a.x) / dx;
|
||
}
|
||
|
||
return new Point(x, y, round);
|
||
}
|
||
|
||
function _getBitCode(p, bounds) {
|
||
var code = 0;
|
||
|
||
if (p.x < bounds.min.x) { // left
|
||
code |= 1;
|
||
} else if (p.x > bounds.max.x) { // right
|
||
code |= 2;
|
||
}
|
||
|
||
if (p.y < bounds.min.y) { // bottom
|
||
code |= 4;
|
||
} else if (p.y > bounds.max.y) { // top
|
||
code |= 8;
|
||
}
|
||
|
||
return code;
|
||
}
|
||
|
||
// square distance (to avoid unnecessary Math.sqrt calls)
|
||
function _sqDist(p1, p2) {
|
||
var dx = p2.x - p1.x,
|
||
dy = p2.y - p1.y;
|
||
return dx * dx + dy * dy;
|
||
}
|
||
|
||
// return closest point on segment or distance to that point
|
||
function _sqClosestPointOnSegment(p, p1, p2, sqDist) {
|
||
var x = p1.x,
|
||
y = p1.y,
|
||
dx = p2.x - x,
|
||
dy = p2.y - y,
|
||
dot = dx * dx + dy * dy,
|
||
t;
|
||
|
||
if (dot > 0) {
|
||
t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
|
||
|
||
if (t > 1) {
|
||
x = p2.x;
|
||
y = p2.y;
|
||
} else if (t > 0) {
|
||
x += dx * t;
|
||
y += dy * t;
|
||
}
|
||
}
|
||
|
||
dx = p.x - x;
|
||
dy = p.y - y;
|
||
|
||
return sqDist ? dx * dx + dy * dy : new Point(x, y);
|
||
}
|
||
|
||
|
||
// @function isFlat(latlngs: LatLng[]): Boolean
|
||
// Returns true if `latlngs` is a flat array, false is nested.
|
||
function isFlat(latlngs) {
|
||
return !isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');
|
||
}
|
||
|
||
function _flat(latlngs) {
|
||
console.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');
|
||
return isFlat(latlngs);
|
||
}
|
||
|
||
/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng
|
||
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.
|
||
*/
|
||
function polylineCenter(latlngs, crs) {
|
||
var i, halfDist, segDist, dist, p1, p2, ratio, center;
|
||
|
||
if (!latlngs || latlngs.length === 0) {
|
||
throw new Error('latlngs not passed');
|
||
}
|
||
|
||
if (!isFlat(latlngs)) {
|
||
console.warn('latlngs are not flat! Only the first ring will be used');
|
||
latlngs = latlngs[0];
|
||
}
|
||
|
||
var points = [];
|
||
for (var j in latlngs) {
|
||
points.push(crs.project(toLatLng(latlngs[j])));
|
||
}
|
||
|
||
var len = points.length;
|
||
|
||
for (i = 0, halfDist = 0; i < len - 1; i++) {
|
||
halfDist += points[i].distanceTo(points[i + 1]) / 2;
|
||
}
|
||
|
||
// The line is so small in the current view that all points are on the same pixel.
|
||
if (halfDist === 0) {
|
||
center = points[0];
|
||
} else {
|
||
for (i = 0, dist = 0; i < len - 1; i++) {
|
||
p1 = points[i];
|
||
p2 = points[i + 1];
|
||
segDist = p1.distanceTo(p2);
|
||
dist += segDist;
|
||
|
||
if (dist > halfDist) {
|
||
ratio = (dist - halfDist) / segDist;
|
||
center = [
|
||
p2.x - ratio * (p2.x - p1.x),
|
||
p2.y - ratio * (p2.y - p1.y)
|
||
];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return crs.unproject(toPoint(center));
|
||
}
|
||
|
||
var LineUtil = {
|
||
__proto__: null,
|
||
simplify: simplify,
|
||
pointToSegmentDistance: pointToSegmentDistance,
|
||
closestPointOnSegment: closestPointOnSegment,
|
||
clipSegment: clipSegment,
|
||
_getEdgeIntersection: _getEdgeIntersection,
|
||
_getBitCode: _getBitCode,
|
||
_sqClosestPointOnSegment: _sqClosestPointOnSegment,
|
||
isFlat: isFlat,
|
||
_flat: _flat,
|
||
polylineCenter: polylineCenter
|
||
};
|
||
|
||
/*
|
||
* @namespace PolyUtil
|
||
* Various utility functions for polygon geometries.
|
||
*/
|
||
|
||
/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]
|
||
* Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).
|
||
* Used by Leaflet to only show polygon points that are on the screen or near, increasing
|
||
* performance. Note that polygon points needs different algorithm for clipping
|
||
* than polyline, so there's a separate method for it.
|
||
*/
|
||
function clipPolygon(points, bounds, round) {
|
||
var clippedPoints,
|
||
edges = [1, 4, 2, 8],
|
||
i, j, k,
|
||
a, b,
|
||
len, edge, p;
|
||
|
||
for (i = 0, len = points.length; i < len; i++) {
|
||
points[i]._code = _getBitCode(points[i], bounds);
|
||
}
|
||
|
||
// for each edge (left, bottom, right, top)
|
||
for (k = 0; k < 4; k++) {
|
||
edge = edges[k];
|
||
clippedPoints = [];
|
||
|
||
for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
|
||
a = points[i];
|
||
b = points[j];
|
||
|
||
// if a is inside the clip window
|
||
if (!(a._code & edge)) {
|
||
// if b is outside the clip window (a->b goes out of screen)
|
||
if (b._code & edge) {
|
||
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
||
p._code = _getBitCode(p, bounds);
|
||
clippedPoints.push(p);
|
||
}
|
||
clippedPoints.push(a);
|
||
|
||
// else if b is inside the clip window (a->b enters the screen)
|
||
} else if (!(b._code & edge)) {
|
||
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
||
p._code = _getBitCode(p, bounds);
|
||
clippedPoints.push(p);
|
||
}
|
||
}
|
||
points = clippedPoints;
|
||
}
|
||
|
||
return points;
|
||
}
|
||
|
||
/* @function polygonCenter(latlngs: LatLng[] crs: CRS): LatLng
|
||
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.
|
||
*/
|
||
function polygonCenter(latlngs, crs) {
|
||
var i, j, p1, p2, f, area, x, y, center;
|
||
|
||
if (!latlngs || latlngs.length === 0) {
|
||
throw new Error('latlngs not passed');
|
||
}
|
||
|
||
if (!isFlat(latlngs)) {
|
||
console.warn('latlngs are not flat! Only the first ring will be used');
|
||
latlngs = latlngs[0];
|
||
}
|
||
|
||
var points = [];
|
||
for (var k in latlngs) {
|
||
points.push(crs.project(toLatLng(latlngs[k])));
|
||
}
|
||
|
||
var len = points.length;
|
||
area = x = y = 0;
|
||
|
||
// polygon centroid algorithm;
|
||
for (i = 0, j = len - 1; i < len; j = i++) {
|
||
p1 = points[i];
|
||
p2 = points[j];
|
||
|
||
f = p1.y * p2.x - p2.y * p1.x;
|
||
x += (p1.x + p2.x) * f;
|
||
y += (p1.y + p2.y) * f;
|
||
area += f * 3;
|
||
}
|
||
|
||
if (area === 0) {
|
||
// Polygon is so small that all points are on same pixel.
|
||
center = points[0];
|
||
} else {
|
||
center = [x / area, y / area];
|
||
}
|
||
return crs.unproject(toPoint(center));
|
||
}
|
||
|
||
var PolyUtil = {
|
||
__proto__: null,
|
||
clipPolygon: clipPolygon,
|
||
polygonCenter: polygonCenter
|
||
};
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @section
|
||
* Leaflet comes with a set of already defined Projections out of the box:
|
||
*
|
||
* @projection L.Projection.LonLat
|
||
*
|
||
* Equirectangular, or Plate Carree projection — the most simple projection,
|
||
* mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as
|
||
* latitude. Also suitable for flat worlds, e.g. game maps. Used by the
|
||
* `EPSG:4326` and `Simple` CRS.
|
||
*/
|
||
|
||
var LonLat = {
|
||
project: function (latlng) {
|
||
return new Point(latlng.lng, latlng.lat);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
return new LatLng(point.y, point.x);
|
||
},
|
||
|
||
bounds: new Bounds([-180, -90], [180, 90])
|
||
};
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @projection L.Projection.Mercator
|
||
*
|
||
* Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.
|
||
*/
|
||
|
||
var Mercator = {
|
||
R: 6378137,
|
||
R_MINOR: 6356752.314245179,
|
||
|
||
bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),
|
||
|
||
project: function (latlng) {
|
||
var d = Math.PI / 180,
|
||
r = this.R,
|
||
y = latlng.lat * d,
|
||
tmp = this.R_MINOR / r,
|
||
e = Math.sqrt(1 - tmp * tmp),
|
||
con = e * Math.sin(y);
|
||
|
||
var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);
|
||
y = -r * Math.log(Math.max(ts, 1E-10));
|
||
|
||
return new Point(latlng.lng * d * r, y);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
var d = 180 / Math.PI,
|
||
r = this.R,
|
||
tmp = this.R_MINOR / r,
|
||
e = Math.sqrt(1 - tmp * tmp),
|
||
ts = Math.exp(-point.y / r),
|
||
phi = Math.PI / 2 - 2 * Math.atan(ts);
|
||
|
||
for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {
|
||
con = e * Math.sin(phi);
|
||
con = Math.pow((1 - con) / (1 + con), e / 2);
|
||
dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;
|
||
phi += dphi;
|
||
}
|
||
|
||
return new LatLng(phi * d, point.x * d / r);
|
||
}
|
||
};
|
||
|
||
/*
|
||
* @class Projection
|
||
|
||
* An object with methods for projecting geographical coordinates of the world onto
|
||
* a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).
|
||
|
||
* @property bounds: Bounds
|
||
* The bounds (specified in CRS units) where the projection is valid
|
||
|
||
* @method project(latlng: LatLng): Point
|
||
* Projects geographical coordinates into a 2D point.
|
||
* Only accepts actual `L.LatLng` instances, not arrays.
|
||
|
||
* @method unproject(point: Point): LatLng
|
||
* The inverse of `project`. Projects a 2D point into a geographical location.
|
||
* Only accepts actual `L.Point` instances, not arrays.
|
||
|
||
* Note that the projection instances do not inherit from Leaflet's `Class` object,
|
||
* and can't be instantiated. Also, new classes can't inherit from them,
|
||
* and methods can't be added to them with the `include` function.
|
||
|
||
*/
|
||
|
||
var index = {
|
||
__proto__: null,
|
||
LonLat: LonLat,
|
||
Mercator: Mercator,
|
||
SphericalMercator: SphericalMercator
|
||
};
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG3395
|
||
*
|
||
* Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.
|
||
*/
|
||
var EPSG3395 = extend({}, Earth, {
|
||
code: 'EPSG:3395',
|
||
projection: Mercator,
|
||
|
||
transformation: (function () {
|
||
var scale = 0.5 / (Math.PI * Mercator.R);
|
||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||
}())
|
||
});
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG4326
|
||
*
|
||
* A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.
|
||
*
|
||
* Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),
|
||
* which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`
|
||
* with this CRS, ensure that there are two 256x256 pixel tiles covering the
|
||
* whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),
|
||
* or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.
|
||
*/
|
||
|
||
var EPSG4326 = extend({}, Earth, {
|
||
code: 'EPSG:4326',
|
||
projection: LonLat,
|
||
transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)
|
||
});
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Simple
|
||
*
|
||
* A simple CRS that maps longitude and latitude into `x` and `y` directly.
|
||
* May be used for maps of flat surfaces (e.g. game maps). Note that the `y`
|
||
* axis should still be inverted (going from bottom to top). `distance()` returns
|
||
* simple euclidean distance.
|
||
*/
|
||
|
||
var Simple = extend({}, CRS, {
|
||
projection: LonLat,
|
||
transformation: toTransformation(1, 0, -1, 0),
|
||
|
||
scale: function (zoom) {
|
||
return Math.pow(2, zoom);
|
||
},
|
||
|
||
zoom: function (scale) {
|
||
return Math.log(scale) / Math.LN2;
|
||
},
|
||
|
||
distance: function (latlng1, latlng2) {
|
||
var dx = latlng2.lng - latlng1.lng,
|
||
dy = latlng2.lat - latlng1.lat;
|
||
|
||
return Math.sqrt(dx * dx + dy * dy);
|
||
},
|
||
|
||
infinite: true
|
||
});
|
||
|
||
CRS.Earth = Earth;
|
||
CRS.EPSG3395 = EPSG3395;
|
||
CRS.EPSG3857 = EPSG3857;
|
||
CRS.EPSG900913 = EPSG900913;
|
||
CRS.EPSG4326 = EPSG4326;
|
||
CRS.Simple = Simple;
|
||
|
||
/*
|
||
* @class Layer
|
||
* @inherits Evented
|
||
* @aka L.Layer
|
||
* @aka ILayer
|
||
*
|
||
* A set of methods from the Layer base class that all Leaflet layers use.
|
||
* Inherits all methods, options and events from `L.Evented`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var layer = L.marker(latlng).addTo(map);
|
||
* layer.addTo(map);
|
||
* layer.remove();
|
||
* ```
|
||
*
|
||
* @event add: Event
|
||
* Fired after the layer is added to a map
|
||
*
|
||
* @event remove: Event
|
||
* Fired after the layer is removed from a map
|
||
*/
|
||
|
||
|
||
var Layer = Evented.extend({
|
||
|
||
// Classes extending `L.Layer` will inherit the following options:
|
||
options: {
|
||
// @option pane: String = 'overlayPane'
|
||
// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.
|
||
pane: 'overlayPane',
|
||
|
||
// @option attribution: String = null
|
||
// String to be shown in the attribution control, e.g. "© OpenStreetMap contributors". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.
|
||
attribution: null,
|
||
|
||
bubblingMouseEvents: true
|
||
},
|
||
|
||
/* @section
|
||
* Classes extending `L.Layer` will inherit the following methods:
|
||
*
|
||
* @method addTo(map: Map|LayerGroup): this
|
||
* Adds the layer to the given map or layer group.
|
||
*/
|
||
addTo: function (map) {
|
||
map.addLayer(this);
|
||
return this;
|
||
},
|
||
|
||
// @method remove: this
|
||
// Removes the layer from the map it is currently active on.
|
||
remove: function () {
|
||
return this.removeFrom(this._map || this._mapToAdd);
|
||
},
|
||
|
||
// @method removeFrom(map: Map): this
|
||
// Removes the layer from the given map
|
||
//
|
||
// @alternative
|
||
// @method removeFrom(group: LayerGroup): this
|
||
// Removes the layer from the given `LayerGroup`
|
||
removeFrom: function (obj) {
|
||
if (obj) {
|
||
obj.removeLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getPane(name? : String): HTMLElement
|
||
// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.
|
||
getPane: function (name) {
|
||
return this._map.getPane(name ? (this.options[name] || name) : this.options.pane);
|
||
},
|
||
|
||
addInteractiveTarget: function (targetEl) {
|
||
this._map._targets[stamp(targetEl)] = this;
|
||
return this;
|
||
},
|
||
|
||
removeInteractiveTarget: function (targetEl) {
|
||
delete this._map._targets[stamp(targetEl)];
|
||
return this;
|
||
},
|
||
|
||
// @method getAttribution: String
|
||
// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).
|
||
getAttribution: function () {
|
||
return this.options.attribution;
|
||
},
|
||
|
||
_layerAdd: function (e) {
|
||
var map = e.target;
|
||
|
||
// check in case layer gets added and then removed before the map is ready
|
||
if (!map.hasLayer(this)) { return; }
|
||
|
||
this._map = map;
|
||
this._zoomAnimated = map._zoomAnimated;
|
||
|
||
if (this.getEvents) {
|
||
var events = this.getEvents();
|
||
map.on(events, this);
|
||
this.once('remove', function () {
|
||
map.off(events, this);
|
||
}, this);
|
||
}
|
||
|
||
this.onAdd(map);
|
||
|
||
this.fire('add');
|
||
map.fire('layeradd', {layer: this});
|
||
}
|
||
});
|
||
|
||
/* @section Extension methods
|
||
* @uninheritable
|
||
*
|
||
* Every layer should extend from `L.Layer` and (re-)implement the following methods.
|
||
*
|
||
* @method onAdd(map: Map): this
|
||
* Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).
|
||
*
|
||
* @method onRemove(map: Map): this
|
||
* Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).
|
||
*
|
||
* @method getEvents(): Object
|
||
* This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.
|
||
*
|
||
* @method getAttribution(): String
|
||
* This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.
|
||
*
|
||
* @method beforeAdd(map: Map): this
|
||
* Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.
|
||
*/
|
||
|
||
|
||
/* @namespace Map
|
||
* @section Layer events
|
||
*
|
||
* @event layeradd: LayerEvent
|
||
* Fired when a new layer is added to the map.
|
||
*
|
||
* @event layerremove: LayerEvent
|
||
* Fired when some layer is removed from the map
|
||
*
|
||
* @section Methods for Layers and Controls
|
||
*/
|
||
Map.include({
|
||
// @method addLayer(layer: Layer): this
|
||
// Adds the given layer to the map
|
||
addLayer: function (layer) {
|
||
if (!layer._layerAdd) {
|
||
throw new Error('The provided object is not a Layer.');
|
||
}
|
||
|
||
var id = stamp(layer);
|
||
if (this._layers[id]) { return this; }
|
||
this._layers[id] = layer;
|
||
|
||
layer._mapToAdd = this;
|
||
|
||
if (layer.beforeAdd) {
|
||
layer.beforeAdd(this);
|
||
}
|
||
|
||
this.whenReady(layer._layerAdd, layer);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Removes the given layer from the map.
|
||
removeLayer: function (layer) {
|
||
var id = stamp(layer);
|
||
|
||
if (!this._layers[id]) { return this; }
|
||
|
||
if (this._loaded) {
|
||
layer.onRemove(this);
|
||
}
|
||
|
||
delete this._layers[id];
|
||
|
||
if (this._loaded) {
|
||
this.fire('layerremove', {layer: layer});
|
||
layer.fire('remove');
|
||
}
|
||
|
||
layer._map = layer._mapToAdd = null;
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method hasLayer(layer: Layer): Boolean
|
||
// Returns `true` if the given layer is currently added to the map
|
||
hasLayer: function (layer) {
|
||
return stamp(layer) in this._layers;
|
||
},
|
||
|
||
/* @method eachLayer(fn: Function, context?: Object): this
|
||
* Iterates over the layers of the map, optionally specifying context of the iterator function.
|
||
* ```
|
||
* map.eachLayer(function(layer){
|
||
* layer.bindPopup('Hello');
|
||
* });
|
||
* ```
|
||
*/
|
||
eachLayer: function (method, context) {
|
||
for (var i in this._layers) {
|
||
method.call(context, this._layers[i]);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_addLayers: function (layers) {
|
||
layers = layers ? (isArray(layers) ? layers : [layers]) : [];
|
||
|
||
for (var i = 0, len = layers.length; i < len; i++) {
|
||
this.addLayer(layers[i]);
|
||
}
|
||
},
|
||
|
||
_addZoomLimit: function (layer) {
|
||
if (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {
|
||
this._zoomBoundLayers[stamp(layer)] = layer;
|
||
this._updateZoomLevels();
|
||
}
|
||
},
|
||
|
||
_removeZoomLimit: function (layer) {
|
||
var id = stamp(layer);
|
||
|
||
if (this._zoomBoundLayers[id]) {
|
||
delete this._zoomBoundLayers[id];
|
||
this._updateZoomLevels();
|
||
}
|
||
},
|
||
|
||
_updateZoomLevels: function () {
|
||
var minZoom = Infinity,
|
||
maxZoom = -Infinity,
|
||
oldZoomSpan = this._getZoomSpan();
|
||
|
||
for (var i in this._zoomBoundLayers) {
|
||
var options = this._zoomBoundLayers[i].options;
|
||
|
||
minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);
|
||
maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);
|
||
}
|
||
|
||
this._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;
|
||
this._layersMinZoom = minZoom === Infinity ? undefined : minZoom;
|
||
|
||
// @section Map state change events
|
||
// @event zoomlevelschange: Event
|
||
// Fired when the number of zoomlevels on the map is changed due
|
||
// to adding or removing a layer.
|
||
if (oldZoomSpan !== this._getZoomSpan()) {
|
||
this.fire('zoomlevelschange');
|
||
}
|
||
|
||
if (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {
|
||
this.setZoom(this._layersMaxZoom);
|
||
}
|
||
if (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {
|
||
this.setZoom(this._layersMinZoom);
|
||
}
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class LayerGroup
|
||
* @aka L.LayerGroup
|
||
* @inherits Interactive layer
|
||
*
|
||
* Used to group several layers and handle them as one. If you add it to the map,
|
||
* any layers added or removed from the group will be added/removed on the map as
|
||
* well. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.layerGroup([marker1, marker2])
|
||
* .addLayer(polyline)
|
||
* .addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var LayerGroup = Layer.extend({
|
||
|
||
initialize: function (layers, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layers = {};
|
||
|
||
var i, len;
|
||
|
||
if (layers) {
|
||
for (i = 0, len = layers.length; i < len; i++) {
|
||
this.addLayer(layers[i]);
|
||
}
|
||
}
|
||
},
|
||
|
||
// @method addLayer(layer: Layer): this
|
||
// Adds the given layer to the group.
|
||
addLayer: function (layer) {
|
||
var id = this.getLayerId(layer);
|
||
|
||
this._layers[id] = layer;
|
||
|
||
if (this._map) {
|
||
this._map.addLayer(layer);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Removes the given layer from the group.
|
||
// @alternative
|
||
// @method removeLayer(id: Number): this
|
||
// Removes the layer with the given internal ID from the group.
|
||
removeLayer: function (layer) {
|
||
var id = layer in this._layers ? layer : this.getLayerId(layer);
|
||
|
||
if (this._map && this._layers[id]) {
|
||
this._map.removeLayer(this._layers[id]);
|
||
}
|
||
|
||
delete this._layers[id];
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method hasLayer(layer: Layer): Boolean
|
||
// Returns `true` if the given layer is currently added to the group.
|
||
// @alternative
|
||
// @method hasLayer(id: Number): Boolean
|
||
// Returns `true` if the given internal ID is currently added to the group.
|
||
hasLayer: function (layer) {
|
||
var layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);
|
||
return layerId in this._layers;
|
||
},
|
||
|
||
// @method clearLayers(): this
|
||
// Removes all the layers from the group.
|
||
clearLayers: function () {
|
||
return this.eachLayer(this.removeLayer, this);
|
||
},
|
||
|
||
// @method invoke(methodName: String, …): this
|
||
// Calls `methodName` on every layer contained in this group, passing any
|
||
// additional parameters. Has no effect if the layers contained do not
|
||
// implement `methodName`.
|
||
invoke: function (methodName) {
|
||
var args = Array.prototype.slice.call(arguments, 1),
|
||
i, layer;
|
||
|
||
for (i in this._layers) {
|
||
layer = this._layers[i];
|
||
|
||
if (layer[methodName]) {
|
||
layer[methodName].apply(layer, args);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this.eachLayer(map.addLayer, map);
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
this.eachLayer(map.removeLayer, map);
|
||
},
|
||
|
||
// @method eachLayer(fn: Function, context?: Object): this
|
||
// Iterates over the layers of the group, optionally specifying context of the iterator function.
|
||
// ```js
|
||
// group.eachLayer(function (layer) {
|
||
// layer.bindPopup('Hello');
|
||
// });
|
||
// ```
|
||
eachLayer: function (method, context) {
|
||
for (var i in this._layers) {
|
||
method.call(context, this._layers[i]);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getLayer(id: Number): Layer
|
||
// Returns the layer with the given internal ID.
|
||
getLayer: function (id) {
|
||
return this._layers[id];
|
||
},
|
||
|
||
// @method getLayers(): Layer[]
|
||
// Returns an array of all the layers added to the group.
|
||
getLayers: function () {
|
||
var layers = [];
|
||
this.eachLayer(layers.push, layers);
|
||
return layers;
|
||
},
|
||
|
||
// @method setZIndex(zIndex: Number): this
|
||
// Calls `setZIndex` on every layer contained in this group, passing the z-index.
|
||
setZIndex: function (zIndex) {
|
||
return this.invoke('setZIndex', zIndex);
|
||
},
|
||
|
||
// @method getLayerId(layer: Layer): Number
|
||
// Returns the internal ID for a layer
|
||
getLayerId: function (layer) {
|
||
return stamp(layer);
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.layerGroup(layers?: Layer[], options?: Object)
|
||
// Create a layer group, optionally given an initial set of layers and an `options` object.
|
||
var layerGroup = function (layers, options) {
|
||
return new LayerGroup(layers, options);
|
||
};
|
||
|
||
/*
|
||
* @class FeatureGroup
|
||
* @aka L.FeatureGroup
|
||
* @inherits LayerGroup
|
||
*
|
||
* Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:
|
||
* * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))
|
||
* * Events are propagated to the `FeatureGroup`, so if the group has an event
|
||
* handler, it will handle events from any of the layers. This includes mouse events
|
||
* and custom events.
|
||
* * Has `layeradd` and `layerremove` events
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.featureGroup([marker1, marker2, polyline])
|
||
* .bindPopup('Hello world!')
|
||
* .on('click', function() { alert('Clicked on a member of the group!'); })
|
||
* .addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var FeatureGroup = LayerGroup.extend({
|
||
|
||
addLayer: function (layer) {
|
||
if (this.hasLayer(layer)) {
|
||
return this;
|
||
}
|
||
|
||
layer.addEventParent(this);
|
||
|
||
LayerGroup.prototype.addLayer.call(this, layer);
|
||
|
||
// @event layeradd: LayerEvent
|
||
// Fired when a layer is added to this `FeatureGroup`
|
||
return this.fire('layeradd', {layer: layer});
|
||
},
|
||
|
||
removeLayer: function (layer) {
|
||
if (!this.hasLayer(layer)) {
|
||
return this;
|
||
}
|
||
if (layer in this._layers) {
|
||
layer = this._layers[layer];
|
||
}
|
||
|
||
layer.removeEventParent(this);
|
||
|
||
LayerGroup.prototype.removeLayer.call(this, layer);
|
||
|
||
// @event layerremove: LayerEvent
|
||
// Fired when a layer is removed from this `FeatureGroup`
|
||
return this.fire('layerremove', {layer: layer});
|
||
},
|
||
|
||
// @method setStyle(style: Path options): this
|
||
// Sets the given path options to each layer of the group that has a `setStyle` method.
|
||
setStyle: function (style) {
|
||
return this.invoke('setStyle', style);
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer group to the top of all other layers
|
||
bringToFront: function () {
|
||
return this.invoke('bringToFront');
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer group to the back of all other layers
|
||
bringToBack: function () {
|
||
return this.invoke('bringToBack');
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
|
||
getBounds: function () {
|
||
var bounds = new LatLngBounds();
|
||
|
||
for (var id in this._layers) {
|
||
var layer = this._layers[id];
|
||
bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());
|
||
}
|
||
return bounds;
|
||
}
|
||
});
|
||
|
||
// @factory L.featureGroup(layers?: Layer[], options?: Object)
|
||
// Create a feature group, optionally given an initial set of layers and an `options` object.
|
||
var featureGroup = function (layers, options) {
|
||
return new FeatureGroup(layers, options);
|
||
};
|
||
|
||
/*
|
||
* @class Icon
|
||
* @aka L.Icon
|
||
*
|
||
* Represents an icon to provide when creating a marker.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var myIcon = L.icon({
|
||
* iconUrl: 'my-icon.png',
|
||
* iconRetinaUrl: 'my-icon@2x.png',
|
||
* iconSize: [38, 95],
|
||
* iconAnchor: [22, 94],
|
||
* popupAnchor: [-3, -76],
|
||
* shadowUrl: 'my-icon-shadow.png',
|
||
* shadowRetinaUrl: 'my-icon-shadow@2x.png',
|
||
* shadowSize: [68, 95],
|
||
* shadowAnchor: [22, 94]
|
||
* });
|
||
*
|
||
* L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
|
||
* ```
|
||
*
|
||
* `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.
|
||
*
|
||
*/
|
||
|
||
var Icon = Class.extend({
|
||
|
||
/* @section
|
||
* @aka Icon options
|
||
*
|
||
* @option iconUrl: String = null
|
||
* **(required)** The URL to the icon image (absolute or relative to your script path).
|
||
*
|
||
* @option iconRetinaUrl: String = null
|
||
* The URL to a retina sized version of the icon image (absolute or relative to your
|
||
* script path). Used for Retina screen devices.
|
||
*
|
||
* @option iconSize: Point = null
|
||
* Size of the icon image in pixels.
|
||
*
|
||
* @option iconAnchor: Point = null
|
||
* The coordinates of the "tip" of the icon (relative to its top left corner). The icon
|
||
* will be aligned so that this point is at the marker's geographical location. Centered
|
||
* by default if size is specified, also can be set in CSS with negative margins.
|
||
*
|
||
* @option popupAnchor: Point = [0, 0]
|
||
* The coordinates of the point from which popups will "open", relative to the icon anchor.
|
||
*
|
||
* @option tooltipAnchor: Point = [0, 0]
|
||
* The coordinates of the point from which tooltips will "open", relative to the icon anchor.
|
||
*
|
||
* @option shadowUrl: String = null
|
||
* The URL to the icon shadow image. If not specified, no shadow image will be created.
|
||
*
|
||
* @option shadowRetinaUrl: String = null
|
||
*
|
||
* @option shadowSize: Point = null
|
||
* Size of the shadow image in pixels.
|
||
*
|
||
* @option shadowAnchor: Point = null
|
||
* The coordinates of the "tip" of the shadow (relative to its top left corner) (the same
|
||
* as iconAnchor if not specified).
|
||
*
|
||
* @option className: String = ''
|
||
* A custom class name to assign to both icon and shadow images. Empty by default.
|
||
*/
|
||
|
||
options: {
|
||
popupAnchor: [0, 0],
|
||
tooltipAnchor: [0, 0],
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
// @method createIcon(oldIcon?: HTMLElement): HTMLElement
|
||
// Called internally when the icon has to be shown, returns a `<img>` HTML element
|
||
// styled according to the options.
|
||
createIcon: function (oldIcon) {
|
||
return this._createIcon('icon', oldIcon);
|
||
},
|
||
|
||
// @method createShadow(oldIcon?: HTMLElement): HTMLElement
|
||
// As `createIcon`, but for the shadow beneath it.
|
||
createShadow: function (oldIcon) {
|
||
return this._createIcon('shadow', oldIcon);
|
||
},
|
||
|
||
_createIcon: function (name, oldIcon) {
|
||
var src = this._getIconUrl(name);
|
||
|
||
if (!src) {
|
||
if (name === 'icon') {
|
||
throw new Error('iconUrl not set in Icon options (see the docs).');
|
||
}
|
||
return null;
|
||
}
|
||
|
||
var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);
|
||
this._setIconStyles(img, name);
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
return img;
|
||
},
|
||
|
||
_setIconStyles: function (img, name) {
|
||
var options = this.options;
|
||
var sizeOption = options[name + 'Size'];
|
||
|
||
if (typeof sizeOption === 'number') {
|
||
sizeOption = [sizeOption, sizeOption];
|
||
}
|
||
|
||
var size = toPoint(sizeOption),
|
||
anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||
|
||
size && size.divideBy(2, true));
|
||
|
||
img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');
|
||
|
||
if (anchor) {
|
||
img.style.marginLeft = (-anchor.x) + 'px';
|
||
img.style.marginTop = (-anchor.y) + 'px';
|
||
}
|
||
|
||
if (size) {
|
||
img.style.width = size.x + 'px';
|
||
img.style.height = size.y + 'px';
|
||
}
|
||
},
|
||
|
||
_createImg: function (src, el) {
|
||
el = el || document.createElement('img');
|
||
el.src = src;
|
||
return el;
|
||
},
|
||
|
||
_getIconUrl: function (name) {
|
||
return Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.icon(options: Icon options)
|
||
// Creates an icon instance with the given options.
|
||
function icon(options) {
|
||
return new Icon(options);
|
||
}
|
||
|
||
/*
|
||
* @miniclass Icon.Default (Icon)
|
||
* @aka L.Icon.Default
|
||
* @section
|
||
*
|
||
* A trivial subclass of `Icon`, represents the icon to use in `Marker`s when
|
||
* no icon is specified. Points to the blue marker image distributed with Leaflet
|
||
* releases.
|
||
*
|
||
* In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`
|
||
* (which is a set of `Icon options`).
|
||
*
|
||
* If you want to _completely_ replace the default icon, override the
|
||
* `L.Marker.prototype.options.icon` with your own icon instead.
|
||
*/
|
||
|
||
var IconDefault = Icon.extend({
|
||
|
||
options: {
|
||
iconUrl: 'marker-icon.png',
|
||
iconRetinaUrl: 'marker-icon-2x.png',
|
||
shadowUrl: 'marker-shadow.png',
|
||
iconSize: [25, 41],
|
||
iconAnchor: [12, 41],
|
||
popupAnchor: [1, -34],
|
||
tooltipAnchor: [16, -28],
|
||
shadowSize: [41, 41]
|
||
},
|
||
|
||
_getIconUrl: function (name) {
|
||
if (typeof IconDefault.imagePath !== 'string') { // Deprecated, backwards-compatibility only
|
||
IconDefault.imagePath = this._detectIconPath();
|
||
}
|
||
|
||
// @option imagePath: String
|
||
// `Icon.Default` will try to auto-detect the location of the
|
||
// blue icon images. If you are placing these images in a non-standard
|
||
// way, set this option to point to the right path.
|
||
return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);
|
||
},
|
||
|
||
_stripUrl: function (path) { // separate function to use in tests
|
||
var strip = function (str, re, idx) {
|
||
var match = re.exec(str);
|
||
return match && match[idx];
|
||
};
|
||
path = strip(path, /^url\((['"])?(.+)\1\)$/, 2);
|
||
return path && strip(path, /^(.*)marker-icon\.png$/, 1);
|
||
},
|
||
|
||
_detectIconPath: function () {
|
||
var el = create$1('div', 'leaflet-default-icon-path', document.body);
|
||
var path = getStyle(el, 'background-image') ||
|
||
getStyle(el, 'backgroundImage'); // IE8
|
||
|
||
document.body.removeChild(el);
|
||
path = this._stripUrl(path);
|
||
if (path) { return path; }
|
||
var link = document.querySelector('link[href$="leaflet.css"]');
|
||
if (!link) { return ''; }
|
||
return link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
|
||
*/
|
||
|
||
|
||
/* @namespace Marker
|
||
* @section Interaction handlers
|
||
*
|
||
* Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:
|
||
*
|
||
* ```js
|
||
* marker.dragging.disable();
|
||
* ```
|
||
*
|
||
* @property dragging: Handler
|
||
* Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).
|
||
*/
|
||
|
||
var MarkerDrag = Handler.extend({
|
||
initialize: function (marker) {
|
||
this._marker = marker;
|
||
},
|
||
|
||
addHooks: function () {
|
||
var icon = this._marker._icon;
|
||
|
||
if (!this._draggable) {
|
||
this._draggable = new Draggable(icon, icon, true);
|
||
}
|
||
|
||
this._draggable.on({
|
||
dragstart: this._onDragStart,
|
||
predrag: this._onPreDrag,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this).enable();
|
||
|
||
addClass(icon, 'leaflet-marker-draggable');
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._draggable.off({
|
||
dragstart: this._onDragStart,
|
||
predrag: this._onPreDrag,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this).disable();
|
||
|
||
if (this._marker._icon) {
|
||
removeClass(this._marker._icon, 'leaflet-marker-draggable');
|
||
}
|
||
},
|
||
|
||
moved: function () {
|
||
return this._draggable && this._draggable._moved;
|
||
},
|
||
|
||
_adjustPan: function (e) {
|
||
var marker = this._marker,
|
||
map = marker._map,
|
||
speed = this._marker.options.autoPanSpeed,
|
||
padding = this._marker.options.autoPanPadding,
|
||
iconPos = getPosition(marker._icon),
|
||
bounds = map.getPixelBounds(),
|
||
origin = map.getPixelOrigin();
|
||
|
||
var panBounds = toBounds(
|
||
bounds.min._subtract(origin).add(padding),
|
||
bounds.max._subtract(origin).subtract(padding)
|
||
);
|
||
|
||
if (!panBounds.contains(iconPos)) {
|
||
// Compute incremental movement
|
||
var movement = toPoint(
|
||
(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -
|
||
(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),
|
||
|
||
(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -
|
||
(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)
|
||
).multiplyBy(speed);
|
||
|
||
map.panBy(movement, {animate: false});
|
||
|
||
this._draggable._newPos._add(movement);
|
||
this._draggable._startPos._add(movement);
|
||
|
||
setPosition(marker._icon, this._draggable._newPos);
|
||
this._onDrag(e);
|
||
|
||
this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
|
||
}
|
||
},
|
||
|
||
_onDragStart: function () {
|
||
// @section Dragging events
|
||
// @event dragstart: Event
|
||
// Fired when the user starts dragging the marker.
|
||
|
||
// @event movestart: Event
|
||
// Fired when the marker starts moving (because of dragging).
|
||
|
||
this._oldLatLng = this._marker.getLatLng();
|
||
|
||
// When using ES6 imports it could not be set when `Popup` was not imported as well
|
||
this._marker.closePopup && this._marker.closePopup();
|
||
|
||
this._marker
|
||
.fire('movestart')
|
||
.fire('dragstart');
|
||
},
|
||
|
||
_onPreDrag: function (e) {
|
||
if (this._marker.options.autoPan) {
|
||
cancelAnimFrame(this._panRequest);
|
||
this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
|
||
}
|
||
},
|
||
|
||
_onDrag: function (e) {
|
||
var marker = this._marker,
|
||
shadow = marker._shadow,
|
||
iconPos = getPosition(marker._icon),
|
||
latlng = marker._map.layerPointToLatLng(iconPos);
|
||
|
||
// update shadow position
|
||
if (shadow) {
|
||
setPosition(shadow, iconPos);
|
||
}
|
||
|
||
marker._latlng = latlng;
|
||
e.latlng = latlng;
|
||
e.oldLatLng = this._oldLatLng;
|
||
|
||
// @event drag: Event
|
||
// Fired repeatedly while the user drags the marker.
|
||
marker
|
||
.fire('move', e)
|
||
.fire('drag', e);
|
||
},
|
||
|
||
_onDragEnd: function (e) {
|
||
// @event dragend: DragEndEvent
|
||
// Fired when the user stops dragging the marker.
|
||
|
||
cancelAnimFrame(this._panRequest);
|
||
|
||
// @event moveend: Event
|
||
// Fired when the marker stops moving (because of dragging).
|
||
delete this._oldLatLng;
|
||
this._marker
|
||
.fire('moveend')
|
||
.fire('dragend', e);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Marker
|
||
* @inherits Interactive layer
|
||
* @aka L.Marker
|
||
* L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.marker([50.5, 30.5]).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Marker = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Marker options
|
||
options: {
|
||
// @option icon: Icon = *
|
||
// Icon instance to use for rendering the marker.
|
||
// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.
|
||
// If not specified, a common instance of `L.Icon.Default` is used.
|
||
icon: new IconDefault(),
|
||
|
||
// Option inherited from "Interactive layer" abstract class
|
||
interactive: true,
|
||
|
||
// @option keyboard: Boolean = true
|
||
// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.
|
||
keyboard: true,
|
||
|
||
// @option title: String = ''
|
||
// Text for the browser tooltip that appear on marker hover (no tooltip by default).
|
||
// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
|
||
title: '',
|
||
|
||
// @option alt: String = 'Marker'
|
||
// Text for the `alt` attribute of the icon image.
|
||
// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
|
||
alt: 'Marker',
|
||
|
||
// @option zIndexOffset: Number = 0
|
||
// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).
|
||
zIndexOffset: 0,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// The opacity of the marker.
|
||
opacity: 1,
|
||
|
||
// @option riseOnHover: Boolean = false
|
||
// If `true`, the marker will get on top of others when you hover the mouse over it.
|
||
riseOnHover: false,
|
||
|
||
// @option riseOffset: Number = 250
|
||
// The z-index offset used for the `riseOnHover` feature.
|
||
riseOffset: 250,
|
||
|
||
// @option pane: String = 'markerPane'
|
||
// `Map pane` where the markers icon will be added.
|
||
pane: 'markerPane',
|
||
|
||
// @option shadowPane: String = 'shadowPane'
|
||
// `Map pane` where the markers shadow will be added.
|
||
shadowPane: 'shadowPane',
|
||
|
||
// @option bubblingMouseEvents: Boolean = false
|
||
// When `true`, a mouse event on this marker will trigger the same event on the map
|
||
// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
|
||
bubblingMouseEvents: false,
|
||
|
||
// @option autoPanOnFocus: Boolean = true
|
||
// When `true`, the map will pan whenever the marker is focused (via
|
||
// e.g. pressing `tab` on the keyboard) to ensure the marker is
|
||
// visible within the map's bounds
|
||
autoPanOnFocus: true,
|
||
|
||
// @section Draggable marker options
|
||
// @option draggable: Boolean = false
|
||
// Whether the marker is draggable with mouse/touch or not.
|
||
draggable: false,
|
||
|
||
// @option autoPan: Boolean = false
|
||
// Whether to pan the map when dragging this marker near its edge or not.
|
||
autoPan: false,
|
||
|
||
// @option autoPanPadding: Point = Point(50, 50)
|
||
// Distance (in pixels to the left/right and to the top/bottom) of the
|
||
// map edge to start panning the map.
|
||
autoPanPadding: [50, 50],
|
||
|
||
// @option autoPanSpeed: Number = 10
|
||
// Number of pixels the map should pan by.
|
||
autoPanSpeed: 10
|
||
},
|
||
|
||
/* @section
|
||
*
|
||
* In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:
|
||
*/
|
||
|
||
initialize: function (latlng, options) {
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;
|
||
|
||
if (this._zoomAnimated) {
|
||
map.on('zoomanim', this._animateZoom, this);
|
||
}
|
||
|
||
this._initIcon();
|
||
this.update();
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
if (this.dragging && this.dragging.enabled()) {
|
||
this.options.draggable = true;
|
||
this.dragging.removeHooks();
|
||
}
|
||
delete this.dragging;
|
||
|
||
if (this._zoomAnimated) {
|
||
map.off('zoomanim', this._animateZoom, this);
|
||
}
|
||
|
||
this._removeIcon();
|
||
this._removeShadow();
|
||
},
|
||
|
||
getEvents: function () {
|
||
return {
|
||
zoom: this.update,
|
||
viewreset: this.update
|
||
};
|
||
},
|
||
|
||
// @method getLatLng: LatLng
|
||
// Returns the current geographical position of the marker.
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setLatLng(latlng: LatLng): this
|
||
// Changes the marker position to the given point.
|
||
setLatLng: function (latlng) {
|
||
var oldLatLng = this._latlng;
|
||
this._latlng = toLatLng(latlng);
|
||
this.update();
|
||
|
||
// @event move: Event
|
||
// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.
|
||
return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
|
||
},
|
||
|
||
// @method setZIndexOffset(offset: Number): this
|
||
// Changes the [zIndex offset](#marker-zindexoffset) of the marker.
|
||
setZIndexOffset: function (offset) {
|
||
this.options.zIndexOffset = offset;
|
||
return this.update();
|
||
},
|
||
|
||
// @method getIcon: Icon
|
||
// Returns the current icon used by the marker
|
||
getIcon: function () {
|
||
return this.options.icon;
|
||
},
|
||
|
||
// @method setIcon(icon: Icon): this
|
||
// Changes the marker icon.
|
||
setIcon: function (icon) {
|
||
|
||
this.options.icon = icon;
|
||
|
||
if (this._map) {
|
||
this._initIcon();
|
||
this.update();
|
||
}
|
||
|
||
if (this._popup) {
|
||
this.bindPopup(this._popup, this._popup.options);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
getElement: function () {
|
||
return this._icon;
|
||
},
|
||
|
||
update: function () {
|
||
|
||
if (this._icon && this._map) {
|
||
var pos = this._map.latLngToLayerPoint(this._latlng).round();
|
||
this._setPos(pos);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_initIcon: function () {
|
||
var options = this.options,
|
||
classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
|
||
|
||
var icon = options.icon.createIcon(this._icon),
|
||
addIcon = false;
|
||
|
||
// if we're not reusing the icon, remove the old one and init new one
|
||
if (icon !== this._icon) {
|
||
if (this._icon) {
|
||
this._removeIcon();
|
||
}
|
||
addIcon = true;
|
||
|
||
if (options.title) {
|
||
icon.title = options.title;
|
||
}
|
||
|
||
if (icon.tagName === 'IMG') {
|
||
icon.alt = options.alt || '';
|
||
}
|
||
}
|
||
|
||
addClass(icon, classToAdd);
|
||
|
||
if (options.keyboard) {
|
||
icon.tabIndex = '0';
|
||
icon.setAttribute('role', 'button');
|
||
}
|
||
|
||
this._icon = icon;
|
||
|
||
if (options.riseOnHover) {
|
||
this.on({
|
||
mouseover: this._bringToFront,
|
||
mouseout: this._resetZIndex
|
||
});
|
||
}
|
||
|
||
if (this.options.autoPanOnFocus) {
|
||
on(icon, 'focus', this._panOnFocus, this);
|
||
}
|
||
|
||
var newShadow = options.icon.createShadow(this._shadow),
|
||
addShadow = false;
|
||
|
||
if (newShadow !== this._shadow) {
|
||
this._removeShadow();
|
||
addShadow = true;
|
||
}
|
||
|
||
if (newShadow) {
|
||
addClass(newShadow, classToAdd);
|
||
newShadow.alt = '';
|
||
}
|
||
this._shadow = newShadow;
|
||
|
||
|
||
if (options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
|
||
if (addIcon) {
|
||
this.getPane().appendChild(this._icon);
|
||
}
|
||
this._initInteraction();
|
||
if (newShadow && addShadow) {
|
||
this.getPane(options.shadowPane).appendChild(this._shadow);
|
||
}
|
||
},
|
||
|
||
_removeIcon: function () {
|
||
if (this.options.riseOnHover) {
|
||
this.off({
|
||
mouseover: this._bringToFront,
|
||
mouseout: this._resetZIndex
|
||
});
|
||
}
|
||
|
||
if (this.options.autoPanOnFocus) {
|
||
off(this._icon, 'focus', this._panOnFocus, this);
|
||
}
|
||
|
||
remove(this._icon);
|
||
this.removeInteractiveTarget(this._icon);
|
||
|
||
this._icon = null;
|
||
},
|
||
|
||
_removeShadow: function () {
|
||
if (this._shadow) {
|
||
remove(this._shadow);
|
||
}
|
||
this._shadow = null;
|
||
},
|
||
|
||
_setPos: function (pos) {
|
||
|
||
if (this._icon) {
|
||
setPosition(this._icon, pos);
|
||
}
|
||
|
||
if (this._shadow) {
|
||
setPosition(this._shadow, pos);
|
||
}
|
||
|
||
this._zIndex = pos.y + this.options.zIndexOffset;
|
||
|
||
this._resetZIndex();
|
||
},
|
||
|
||
_updateZIndex: function (offset) {
|
||
if (this._icon) {
|
||
this._icon.style.zIndex = this._zIndex + offset;
|
||
}
|
||
},
|
||
|
||
_animateZoom: function (opt) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
|
||
|
||
this._setPos(pos);
|
||
},
|
||
|
||
_initInteraction: function () {
|
||
|
||
if (!this.options.interactive) { return; }
|
||
|
||
addClass(this._icon, 'leaflet-interactive');
|
||
|
||
this.addInteractiveTarget(this._icon);
|
||
|
||
if (MarkerDrag) {
|
||
var draggable = this.options.draggable;
|
||
if (this.dragging) {
|
||
draggable = this.dragging.enabled();
|
||
this.dragging.disable();
|
||
}
|
||
|
||
this.dragging = new MarkerDrag(this);
|
||
|
||
if (draggable) {
|
||
this.dragging.enable();
|
||
}
|
||
}
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Changes the opacity of the marker.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
if (this._map) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
var opacity = this.options.opacity;
|
||
|
||
if (this._icon) {
|
||
setOpacity(this._icon, opacity);
|
||
}
|
||
|
||
if (this._shadow) {
|
||
setOpacity(this._shadow, opacity);
|
||
}
|
||
},
|
||
|
||
_bringToFront: function () {
|
||
this._updateZIndex(this.options.riseOffset);
|
||
},
|
||
|
||
_resetZIndex: function () {
|
||
this._updateZIndex(0);
|
||
},
|
||
|
||
_panOnFocus: function () {
|
||
var map = this._map;
|
||
if (!map) { return; }
|
||
|
||
var iconOpts = this.options.icon.options;
|
||
var size = iconOpts.iconSize ? toPoint(iconOpts.iconSize) : toPoint(0, 0);
|
||
var anchor = iconOpts.iconAnchor ? toPoint(iconOpts.iconAnchor) : toPoint(0, 0);
|
||
|
||
map.panInside(this._latlng, {
|
||
paddingTopLeft: anchor,
|
||
paddingBottomRight: size.subtract(anchor)
|
||
});
|
||
},
|
||
|
||
_getPopupAnchor: function () {
|
||
return this.options.icon.options.popupAnchor;
|
||
},
|
||
|
||
_getTooltipAnchor: function () {
|
||
return this.options.icon.options.tooltipAnchor;
|
||
}
|
||
});
|
||
|
||
|
||
// factory L.marker(latlng: LatLng, options? : Marker options)
|
||
|
||
// @factory L.marker(latlng: LatLng, options? : Marker options)
|
||
// Instantiates a Marker object given a geographical point and optionally an options object.
|
||
function marker(latlng, options) {
|
||
return new Marker(latlng, options);
|
||
}
|
||
|
||
/*
|
||
* @class Path
|
||
* @aka L.Path
|
||
* @inherits Interactive layer
|
||
*
|
||
* An abstract class that contains options and constants shared between vector
|
||
* overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.
|
||
*/
|
||
|
||
var Path = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Path options
|
||
options: {
|
||
// @option stroke: Boolean = true
|
||
// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.
|
||
stroke: true,
|
||
|
||
// @option color: String = '#3388ff'
|
||
// Stroke color
|
||
color: '#3388ff',
|
||
|
||
// @option weight: Number = 3
|
||
// Stroke width in pixels
|
||
weight: 3,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// Stroke opacity
|
||
opacity: 1,
|
||
|
||
// @option lineCap: String= 'round'
|
||
// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.
|
||
lineCap: 'round',
|
||
|
||
// @option lineJoin: String = 'round'
|
||
// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.
|
||
lineJoin: 'round',
|
||
|
||
// @option dashArray: String = null
|
||
// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
|
||
dashArray: null,
|
||
|
||
// @option dashOffset: String = null
|
||
// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
|
||
dashOffset: null,
|
||
|
||
// @option fill: Boolean = depends
|
||
// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.
|
||
fill: false,
|
||
|
||
// @option fillColor: String = *
|
||
// Fill color. Defaults to the value of the [`color`](#path-color) option
|
||
fillColor: null,
|
||
|
||
// @option fillOpacity: Number = 0.2
|
||
// Fill opacity.
|
||
fillOpacity: 0.2,
|
||
|
||
// @option fillRule: String = 'evenodd'
|
||
// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.
|
||
fillRule: 'evenodd',
|
||
|
||
// className: '',
|
||
|
||
// Option inherited from "Interactive layer" abstract class
|
||
interactive: true,
|
||
|
||
// @option bubblingMouseEvents: Boolean = true
|
||
// When `true`, a mouse event on this path will trigger the same event on the map
|
||
// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
|
||
bubblingMouseEvents: true
|
||
},
|
||
|
||
beforeAdd: function (map) {
|
||
// Renderer is set here because we need to call renderer.getEvents
|
||
// before this.getEvents.
|
||
this._renderer = map.getRenderer(this);
|
||
},
|
||
|
||
onAdd: function () {
|
||
this._renderer._initPath(this);
|
||
this._reset();
|
||
this._renderer._addPath(this);
|
||
},
|
||
|
||
onRemove: function () {
|
||
this._renderer._removePath(this);
|
||
},
|
||
|
||
// @method redraw(): this
|
||
// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.
|
||
redraw: function () {
|
||
if (this._map) {
|
||
this._renderer._updatePath(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setStyle(style: Path options): this
|
||
// Changes the appearance of a Path based on the options in the `Path options` object.
|
||
setStyle: function (style) {
|
||
setOptions(this, style);
|
||
if (this._renderer) {
|
||
this._renderer._updateStyle(this);
|
||
if (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {
|
||
this._updateBounds();
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer to the top of all path layers.
|
||
bringToFront: function () {
|
||
if (this._renderer) {
|
||
this._renderer._bringToFront(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer to the bottom of all path layers.
|
||
bringToBack: function () {
|
||
if (this._renderer) {
|
||
this._renderer._bringToBack(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getElement: function () {
|
||
return this._path;
|
||
},
|
||
|
||
_reset: function () {
|
||
// defined in child classes
|
||
this._project();
|
||
this._update();
|
||
},
|
||
|
||
_clickTolerance: function () {
|
||
// used when doing hit detection for Canvas layers
|
||
return (this.options.stroke ? this.options.weight / 2 : 0) +
|
||
(this._renderer.options.tolerance || 0);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class CircleMarker
|
||
* @aka L.CircleMarker
|
||
* @inherits Path
|
||
*
|
||
* A circle of a fixed size with radius specified in pixels. Extends `Path`.
|
||
*/
|
||
|
||
var CircleMarker = Path.extend({
|
||
|
||
// @section
|
||
// @aka CircleMarker options
|
||
options: {
|
||
fill: true,
|
||
|
||
// @option radius: Number = 10
|
||
// Radius of the circle marker, in pixels
|
||
radius: 10
|
||
},
|
||
|
||
initialize: function (latlng, options) {
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
this._radius = this.options.radius;
|
||
},
|
||
|
||
// @method setLatLng(latLng: LatLng): this
|
||
// Sets the position of a circle marker to a new location.
|
||
setLatLng: function (latlng) {
|
||
var oldLatLng = this._latlng;
|
||
this._latlng = toLatLng(latlng);
|
||
this.redraw();
|
||
|
||
// @event move: Event
|
||
// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.
|
||
return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
|
||
},
|
||
|
||
// @method getLatLng(): LatLng
|
||
// Returns the current geographical position of the circle marker
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setRadius(radius: Number): this
|
||
// Sets the radius of a circle marker. Units are in pixels.
|
||
setRadius: function (radius) {
|
||
this.options.radius = this._radius = radius;
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method getRadius(): Number
|
||
// Returns the current radius of the circle
|
||
getRadius: function () {
|
||
return this._radius;
|
||
},
|
||
|
||
setStyle : function (options) {
|
||
var radius = options && options.radius || this._radius;
|
||
Path.prototype.setStyle.call(this, options);
|
||
this.setRadius(radius);
|
||
return this;
|
||
},
|
||
|
||
_project: function () {
|
||
this._point = this._map.latLngToLayerPoint(this._latlng);
|
||
this._updateBounds();
|
||
},
|
||
|
||
_updateBounds: function () {
|
||
var r = this._radius,
|
||
r2 = this._radiusY || r,
|
||
w = this._clickTolerance(),
|
||
p = [r + w, r2 + w];
|
||
this._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map) {
|
||
this._updatePath();
|
||
}
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updateCircle(this);
|
||
},
|
||
|
||
_empty: function () {
|
||
return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p) {
|
||
return p.distanceTo(this._point) <= this._radius + this._clickTolerance();
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)
|
||
// Instantiates a circle marker object given a geographical point, and an optional options object.
|
||
function circleMarker(latlng, options) {
|
||
return new CircleMarker(latlng, options);
|
||
}
|
||
|
||
/*
|
||
* @class Circle
|
||
* @aka L.Circle
|
||
* @inherits CircleMarker
|
||
*
|
||
* A class for drawing circle overlays on a map. Extends `CircleMarker`.
|
||
*
|
||
* It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.circle([50.5, 30.5], {radius: 200}).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Circle = CircleMarker.extend({
|
||
|
||
initialize: function (latlng, options, legacyOptions) {
|
||
if (typeof options === 'number') {
|
||
// Backwards compatibility with 0.7.x factory (latlng, radius, options?)
|
||
options = extend({}, legacyOptions, {radius: options});
|
||
}
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
|
||
if (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }
|
||
|
||
// @section
|
||
// @aka Circle options
|
||
// @option radius: Number; Radius of the circle, in meters.
|
||
this._mRadius = this.options.radius;
|
||
},
|
||
|
||
// @method setRadius(radius: Number): this
|
||
// Sets the radius of a circle. Units are in meters.
|
||
setRadius: function (radius) {
|
||
this._mRadius = radius;
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method getRadius(): Number
|
||
// Returns the current radius of a circle. Units are in meters.
|
||
getRadius: function () {
|
||
return this._mRadius;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the `LatLngBounds` of the path.
|
||
getBounds: function () {
|
||
var half = [this._radius, this._radiusY || this._radius];
|
||
|
||
return new LatLngBounds(
|
||
this._map.layerPointToLatLng(this._point.subtract(half)),
|
||
this._map.layerPointToLatLng(this._point.add(half)));
|
||
},
|
||
|
||
setStyle: Path.prototype.setStyle,
|
||
|
||
_project: function () {
|
||
|
||
var lng = this._latlng.lng,
|
||
lat = this._latlng.lat,
|
||
map = this._map,
|
||
crs = map.options.crs;
|
||
|
||
if (crs.distance === Earth.distance) {
|
||
var d = Math.PI / 180,
|
||
latR = (this._mRadius / Earth.R) / d,
|
||
top = map.project([lat + latR, lng]),
|
||
bottom = map.project([lat - latR, lng]),
|
||
p = top.add(bottom).divideBy(2),
|
||
lat2 = map.unproject(p).lat,
|
||
lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /
|
||
(Math.cos(lat * d) * Math.cos(lat2 * d))) / d;
|
||
|
||
if (isNaN(lngR) || lngR === 0) {
|
||
lngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425
|
||
}
|
||
|
||
this._point = p.subtract(map.getPixelOrigin());
|
||
this._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;
|
||
this._radiusY = p.y - top.y;
|
||
|
||
} else {
|
||
var latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));
|
||
|
||
this._point = map.latLngToLayerPoint(this._latlng);
|
||
this._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;
|
||
}
|
||
|
||
this._updateBounds();
|
||
}
|
||
});
|
||
|
||
// @factory L.circle(latlng: LatLng, options?: Circle options)
|
||
// Instantiates a circle object given a geographical point, and an options object
|
||
// which contains the circle radius.
|
||
// @alternative
|
||
// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)
|
||
// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.
|
||
// Do not use in new applications or plugins.
|
||
function circle(latlng, options, legacyOptions) {
|
||
return new Circle(latlng, options, legacyOptions);
|
||
}
|
||
|
||
/*
|
||
* @class Polyline
|
||
* @aka L.Polyline
|
||
* @inherits Path
|
||
*
|
||
* A class for drawing polyline overlays on a map. Extends `Path`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // create a red polyline from an array of LatLng points
|
||
* var latlngs = [
|
||
* [45.51, -122.68],
|
||
* [37.77, -122.43],
|
||
* [34.04, -118.2]
|
||
* ];
|
||
*
|
||
* var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
|
||
*
|
||
* // zoom the map to the polyline
|
||
* map.fitBounds(polyline.getBounds());
|
||
* ```
|
||
*
|
||
* You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:
|
||
*
|
||
* ```js
|
||
* // create a red polyline from an array of arrays of LatLng points
|
||
* var latlngs = [
|
||
* [[45.51, -122.68],
|
||
* [37.77, -122.43],
|
||
* [34.04, -118.2]],
|
||
* [[40.78, -73.91],
|
||
* [41.83, -87.62],
|
||
* [32.76, -96.72]]
|
||
* ];
|
||
* ```
|
||
*/
|
||
|
||
|
||
var Polyline = Path.extend({
|
||
|
||
// @section
|
||
// @aka Polyline options
|
||
options: {
|
||
// @option smoothFactor: Number = 1.0
|
||
// How much to simplify the polyline on each zoom level. More means
|
||
// better performance and smoother look, and less means more accurate representation.
|
||
smoothFactor: 1.0,
|
||
|
||
// @option noClip: Boolean = false
|
||
// Disable polyline clipping.
|
||
noClip: false
|
||
},
|
||
|
||
initialize: function (latlngs, options) {
|
||
setOptions(this, options);
|
||
this._setLatLngs(latlngs);
|
||
},
|
||
|
||
// @method getLatLngs(): LatLng[]
|
||
// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.
|
||
getLatLngs: function () {
|
||
return this._latlngs;
|
||
},
|
||
|
||
// @method setLatLngs(latlngs: LatLng[]): this
|
||
// Replaces all the points in the polyline with the given array of geographical points.
|
||
setLatLngs: function (latlngs) {
|
||
this._setLatLngs(latlngs);
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method isEmpty(): Boolean
|
||
// Returns `true` if the Polyline has no LatLngs.
|
||
isEmpty: function () {
|
||
return !this._latlngs.length;
|
||
},
|
||
|
||
// @method closestLayerPoint(p: Point): Point
|
||
// Returns the point closest to `p` on the Polyline.
|
||
closestLayerPoint: function (p) {
|
||
var minDistance = Infinity,
|
||
minPoint = null,
|
||
closest = _sqClosestPointOnSegment,
|
||
p1, p2;
|
||
|
||
for (var j = 0, jLen = this._parts.length; j < jLen; j++) {
|
||
var points = this._parts[j];
|
||
|
||
for (var i = 1, len = points.length; i < len; i++) {
|
||
p1 = points[i - 1];
|
||
p2 = points[i];
|
||
|
||
var sqDist = closest(p, p1, p2, true);
|
||
|
||
if (sqDist < minDistance) {
|
||
minDistance = sqDist;
|
||
minPoint = closest(p, p1, p2);
|
||
}
|
||
}
|
||
}
|
||
if (minPoint) {
|
||
minPoint.distance = Math.sqrt(minDistance);
|
||
}
|
||
return minPoint;
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.
|
||
getCenter: function () {
|
||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||
if (!this._map) {
|
||
throw new Error('Must add layer to map before using getCenter()');
|
||
}
|
||
return polylineCenter(this._defaultShape(), this._map.options.crs);
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the `LatLngBounds` of the path.
|
||
getBounds: function () {
|
||
return this._bounds;
|
||
},
|
||
|
||
// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this
|
||
// Adds a given point to the polyline. By default, adds to the first ring of
|
||
// the polyline in case of a multi-polyline, but can be overridden by passing
|
||
// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).
|
||
addLatLng: function (latlng, latlngs) {
|
||
latlngs = latlngs || this._defaultShape();
|
||
latlng = toLatLng(latlng);
|
||
latlngs.push(latlng);
|
||
this._bounds.extend(latlng);
|
||
return this.redraw();
|
||
},
|
||
|
||
_setLatLngs: function (latlngs) {
|
||
this._bounds = new LatLngBounds();
|
||
this._latlngs = this._convertLatLngs(latlngs);
|
||
},
|
||
|
||
_defaultShape: function () {
|
||
return isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];
|
||
},
|
||
|
||
// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
|
||
_convertLatLngs: function (latlngs) {
|
||
var result = [],
|
||
flat = isFlat(latlngs);
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
if (flat) {
|
||
result[i] = toLatLng(latlngs[i]);
|
||
this._bounds.extend(result[i]);
|
||
} else {
|
||
result[i] = this._convertLatLngs(latlngs[i]);
|
||
}
|
||
}
|
||
|
||
return result;
|
||
},
|
||
|
||
_project: function () {
|
||
var pxBounds = new Bounds();
|
||
this._rings = [];
|
||
this._projectLatlngs(this._latlngs, this._rings, pxBounds);
|
||
|
||
if (this._bounds.isValid() && pxBounds.isValid()) {
|
||
this._rawPxBounds = pxBounds;
|
||
this._updateBounds();
|
||
}
|
||
},
|
||
|
||
_updateBounds: function () {
|
||
var w = this._clickTolerance(),
|
||
p = new Point(w, w);
|
||
|
||
if (!this._rawPxBounds) {
|
||
return;
|
||
}
|
||
|
||
this._pxBounds = new Bounds([
|
||
this._rawPxBounds.min.subtract(p),
|
||
this._rawPxBounds.max.add(p)
|
||
]);
|
||
},
|
||
|
||
// recursively turns latlngs into a set of rings with projected coordinates
|
||
_projectLatlngs: function (latlngs, result, projectedBounds) {
|
||
var flat = latlngs[0] instanceof LatLng,
|
||
len = latlngs.length,
|
||
i, ring;
|
||
|
||
if (flat) {
|
||
ring = [];
|
||
for (i = 0; i < len; i++) {
|
||
ring[i] = this._map.latLngToLayerPoint(latlngs[i]);
|
||
projectedBounds.extend(ring[i]);
|
||
}
|
||
result.push(ring);
|
||
} else {
|
||
for (i = 0; i < len; i++) {
|
||
this._projectLatlngs(latlngs[i], result, projectedBounds);
|
||
}
|
||
}
|
||
},
|
||
|
||
// clip polyline by renderer bounds so that we have less to render for performance
|
||
_clipPoints: function () {
|
||
var bounds = this._renderer._bounds;
|
||
|
||
this._parts = [];
|
||
if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
|
||
return;
|
||
}
|
||
|
||
if (this.options.noClip) {
|
||
this._parts = this._rings;
|
||
return;
|
||
}
|
||
|
||
var parts = this._parts,
|
||
i, j, k, len, len2, segment, points;
|
||
|
||
for (i = 0, k = 0, len = this._rings.length; i < len; i++) {
|
||
points = this._rings[i];
|
||
|
||
for (j = 0, len2 = points.length; j < len2 - 1; j++) {
|
||
segment = clipSegment(points[j], points[j + 1], bounds, j, true);
|
||
|
||
if (!segment) { continue; }
|
||
|
||
parts[k] = parts[k] || [];
|
||
parts[k].push(segment[0]);
|
||
|
||
// if segment goes out of screen, or it's the last one, it's the end of the line part
|
||
if ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {
|
||
parts[k].push(segment[1]);
|
||
k++;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
// simplify each clipped part of the polyline for performance
|
||
_simplifyPoints: function () {
|
||
var parts = this._parts,
|
||
tolerance = this.options.smoothFactor;
|
||
|
||
for (var i = 0, len = parts.length; i < len; i++) {
|
||
parts[i] = simplify(parts[i], tolerance);
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
this._clipPoints();
|
||
this._simplifyPoints();
|
||
this._updatePath();
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updatePoly(this);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p, closed) {
|
||
var i, j, k, len, len2, part,
|
||
w = this._clickTolerance();
|
||
|
||
if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
|
||
|
||
// hit detection for polylines
|
||
for (i = 0, len = this._parts.length; i < len; i++) {
|
||
part = this._parts[i];
|
||
|
||
for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
|
||
if (!closed && (j === 0)) { continue; }
|
||
|
||
if (pointToSegmentDistance(p, part[k], part[j]) <= w) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
});
|
||
|
||
// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)
|
||
// Instantiates a polyline object given an array of geographical points and
|
||
// optionally an options object. You can create a `Polyline` object with
|
||
// multiple separate lines (`MultiPolyline`) by passing an array of arrays
|
||
// of geographic points.
|
||
function polyline(latlngs, options) {
|
||
return new Polyline(latlngs, options);
|
||
}
|
||
|
||
// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.
|
||
Polyline._flat = _flat;
|
||
|
||
/*
|
||
* @class Polygon
|
||
* @aka L.Polygon
|
||
* @inherits Polyline
|
||
*
|
||
* A class for drawing polygon overlays on a map. Extends `Polyline`.
|
||
*
|
||
* Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.
|
||
*
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // create a red polygon from an array of LatLng points
|
||
* var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
|
||
*
|
||
* var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
|
||
*
|
||
* // zoom the map to the polygon
|
||
* map.fitBounds(polygon.getBounds());
|
||
* ```
|
||
*
|
||
* You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:
|
||
*
|
||
* ```js
|
||
* var latlngs = [
|
||
* [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
|
||
* [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
|
||
* ];
|
||
* ```
|
||
*
|
||
* Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.
|
||
*
|
||
* ```js
|
||
* var latlngs = [
|
||
* [ // first polygon
|
||
* [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
|
||
* [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
|
||
* ],
|
||
* [ // second polygon
|
||
* [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]
|
||
* ]
|
||
* ];
|
||
* ```
|
||
*/
|
||
|
||
var Polygon = Polyline.extend({
|
||
|
||
options: {
|
||
fill: true
|
||
},
|
||
|
||
isEmpty: function () {
|
||
return !this._latlngs.length || !this._latlngs[0].length;
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.
|
||
getCenter: function () {
|
||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||
if (!this._map) {
|
||
throw new Error('Must add layer to map before using getCenter()');
|
||
}
|
||
return polygonCenter(this._defaultShape(), this._map.options.crs);
|
||
},
|
||
|
||
_convertLatLngs: function (latlngs) {
|
||
var result = Polyline.prototype._convertLatLngs.call(this, latlngs),
|
||
len = result.length;
|
||
|
||
// remove last point if it equals first one
|
||
if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {
|
||
result.pop();
|
||
}
|
||
return result;
|
||
},
|
||
|
||
_setLatLngs: function (latlngs) {
|
||
Polyline.prototype._setLatLngs.call(this, latlngs);
|
||
if (isFlat(this._latlngs)) {
|
||
this._latlngs = [this._latlngs];
|
||
}
|
||
},
|
||
|
||
_defaultShape: function () {
|
||
return isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
|
||
},
|
||
|
||
_clipPoints: function () {
|
||
// polygons need a different clipping algorithm so we redefine that
|
||
|
||
var bounds = this._renderer._bounds,
|
||
w = this.options.weight,
|
||
p = new Point(w, w);
|
||
|
||
// increase clip padding by stroke width to avoid stroke on clip edges
|
||
bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));
|
||
|
||
this._parts = [];
|
||
if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
|
||
return;
|
||
}
|
||
|
||
if (this.options.noClip) {
|
||
this._parts = this._rings;
|
||
return;
|
||
}
|
||
|
||
for (var i = 0, len = this._rings.length, clipped; i < len; i++) {
|
||
clipped = clipPolygon(this._rings[i], bounds, true);
|
||
if (clipped.length) {
|
||
this._parts.push(clipped);
|
||
}
|
||
}
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updatePoly(this, true);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p) {
|
||
var inside = false,
|
||
part, p1, p2, i, j, k, len, len2;
|
||
|
||
if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
|
||
|
||
// ray casting algorithm for detecting if point is in polygon
|
||
for (i = 0, len = this._parts.length; i < len; i++) {
|
||
part = this._parts[i];
|
||
|
||
for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
|
||
p1 = part[j];
|
||
p2 = part[k];
|
||
|
||
if (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
|
||
inside = !inside;
|
||
}
|
||
}
|
||
}
|
||
|
||
// also check if it's on polygon stroke
|
||
return inside || Polyline.prototype._containsPoint.call(this, p, true);
|
||
}
|
||
|
||
});
|
||
|
||
|
||
// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)
|
||
function polygon(latlngs, options) {
|
||
return new Polygon(latlngs, options);
|
||
}
|
||
|
||
/*
|
||
* @class GeoJSON
|
||
* @aka L.GeoJSON
|
||
* @inherits FeatureGroup
|
||
*
|
||
* Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse
|
||
* GeoJSON data and display it on the map. Extends `FeatureGroup`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.geoJSON(data, {
|
||
* style: function (feature) {
|
||
* return {color: feature.properties.color};
|
||
* }
|
||
* }).bindPopup(function (layer) {
|
||
* return layer.feature.properties.description;
|
||
* }).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var GeoJSON = FeatureGroup.extend({
|
||
|
||
/* @section
|
||
* @aka GeoJSON options
|
||
*
|
||
* @option pointToLayer: Function = *
|
||
* A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally
|
||
* called when data is added, passing the GeoJSON point feature and its `LatLng`.
|
||
* The default is to spawn a default `Marker`:
|
||
* ```js
|
||
* function(geoJsonPoint, latlng) {
|
||
* return L.marker(latlng);
|
||
* }
|
||
* ```
|
||
*
|
||
* @option style: Function = *
|
||
* A `Function` defining the `Path options` for styling GeoJSON lines and polygons,
|
||
* called internally when data is added.
|
||
* The default value is to not override any defaults:
|
||
* ```js
|
||
* function (geoJsonFeature) {
|
||
* return {}
|
||
* }
|
||
* ```
|
||
*
|
||
* @option onEachFeature: Function = *
|
||
* A `Function` that will be called once for each created `Feature`, after it has
|
||
* been created and styled. Useful for attaching events and popups to features.
|
||
* The default is to do nothing with the newly created layers:
|
||
* ```js
|
||
* function (feature, layer) {}
|
||
* ```
|
||
*
|
||
* @option filter: Function = *
|
||
* A `Function` that will be used to decide whether to include a feature or not.
|
||
* The default is to include all features:
|
||
* ```js
|
||
* function (geoJsonFeature) {
|
||
* return true;
|
||
* }
|
||
* ```
|
||
* Note: dynamically changing the `filter` option will have effect only on newly
|
||
* added data. It will _not_ re-evaluate already included features.
|
||
*
|
||
* @option coordsToLatLng: Function = *
|
||
* A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.
|
||
* The default is the `coordsToLatLng` static method.
|
||
*
|
||
* @option markersInheritOptions: Boolean = false
|
||
* Whether default Markers for "Point" type Features inherit from group options.
|
||
*/
|
||
|
||
initialize: function (geojson, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layers = {};
|
||
|
||
if (geojson) {
|
||
this.addData(geojson);
|
||
}
|
||
},
|
||
|
||
// @method addData( <GeoJSON> data ): this
|
||
// Adds a GeoJSON object to the layer.
|
||
addData: function (geojson) {
|
||
var features = isArray(geojson) ? geojson : geojson.features,
|
||
i, len, feature;
|
||
|
||
if (features) {
|
||
for (i = 0, len = features.length; i < len; i++) {
|
||
// only add this if geometry or geometries are set and not null
|
||
feature = features[i];
|
||
if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {
|
||
this.addData(feature);
|
||
}
|
||
}
|
||
return this;
|
||
}
|
||
|
||
var options = this.options;
|
||
|
||
if (options.filter && !options.filter(geojson)) { return this; }
|
||
|
||
var layer = geometryToLayer(geojson, options);
|
||
if (!layer) {
|
||
return this;
|
||
}
|
||
layer.feature = asFeature(geojson);
|
||
|
||
layer.defaultOptions = layer.options;
|
||
this.resetStyle(layer);
|
||
|
||
if (options.onEachFeature) {
|
||
options.onEachFeature(geojson, layer);
|
||
}
|
||
|
||
return this.addLayer(layer);
|
||
},
|
||
|
||
// @method resetStyle( <Path> layer? ): this
|
||
// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.
|
||
// If `layer` is omitted, the style of all features in the current layer is reset.
|
||
resetStyle: function (layer) {
|
||
if (layer === undefined) {
|
||
return this.eachLayer(this.resetStyle, this);
|
||
}
|
||
// reset any custom styles
|
||
layer.options = extend({}, layer.defaultOptions);
|
||
this._setLayerStyle(layer, this.options.style);
|
||
return this;
|
||
},
|
||
|
||
// @method setStyle( <Function> style ): this
|
||
// Changes styles of GeoJSON vector layers with the given style function.
|
||
setStyle: function (style) {
|
||
return this.eachLayer(function (layer) {
|
||
this._setLayerStyle(layer, style);
|
||
}, this);
|
||
},
|
||
|
||
_setLayerStyle: function (layer, style) {
|
||
if (layer.setStyle) {
|
||
if (typeof style === 'function') {
|
||
style = style(layer.feature);
|
||
}
|
||
layer.setStyle(style);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section
|
||
// There are several static functions which can be called without instantiating L.GeoJSON:
|
||
|
||
// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer
|
||
// Creates a `Layer` from a given GeoJSON feature. Can use a custom
|
||
// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)
|
||
// functions if provided as options.
|
||
function geometryToLayer(geojson, options) {
|
||
|
||
var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
|
||
coords = geometry ? geometry.coordinates : null,
|
||
layers = [],
|
||
pointToLayer = options && options.pointToLayer,
|
||
_coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,
|
||
latlng, latlngs, i, len;
|
||
|
||
if (!coords && !geometry) {
|
||
return null;
|
||
}
|
||
|
||
switch (geometry.type) {
|
||
case 'Point':
|
||
latlng = _coordsToLatLng(coords);
|
||
return _pointToLayer(pointToLayer, geojson, latlng, options);
|
||
|
||
case 'MultiPoint':
|
||
for (i = 0, len = coords.length; i < len; i++) {
|
||
latlng = _coordsToLatLng(coords[i]);
|
||
layers.push(_pointToLayer(pointToLayer, geojson, latlng, options));
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
case 'LineString':
|
||
case 'MultiLineString':
|
||
latlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);
|
||
return new Polyline(latlngs, options);
|
||
|
||
case 'Polygon':
|
||
case 'MultiPolygon':
|
||
latlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);
|
||
return new Polygon(latlngs, options);
|
||
|
||
case 'GeometryCollection':
|
||
for (i = 0, len = geometry.geometries.length; i < len; i++) {
|
||
var geoLayer = geometryToLayer({
|
||
geometry: geometry.geometries[i],
|
||
type: 'Feature',
|
||
properties: geojson.properties
|
||
}, options);
|
||
|
||
if (geoLayer) {
|
||
layers.push(geoLayer);
|
||
}
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
case 'FeatureCollection':
|
||
for (i = 0, len = geometry.features.length; i < len; i++) {
|
||
var featureLayer = geometryToLayer(geometry.features[i], options);
|
||
|
||
if (featureLayer) {
|
||
layers.push(featureLayer);
|
||
}
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
default:
|
||
throw new Error('Invalid GeoJSON object.');
|
||
}
|
||
}
|
||
|
||
function _pointToLayer(pointToLayerFn, geojson, latlng, options) {
|
||
return pointToLayerFn ?
|
||
pointToLayerFn(geojson, latlng) :
|
||
new Marker(latlng, options && options.markersInheritOptions && options);
|
||
}
|
||
|
||
// @function coordsToLatLng(coords: Array): LatLng
|
||
// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)
|
||
// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.
|
||
function coordsToLatLng(coords) {
|
||
return new LatLng(coords[1], coords[0], coords[2]);
|
||
}
|
||
|
||
// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array
|
||
// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.
|
||
// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).
|
||
// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.
|
||
function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {
|
||
var latlngs = [];
|
||
|
||
for (var i = 0, len = coords.length, latlng; i < len; i++) {
|
||
latlng = levelsDeep ?
|
||
coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :
|
||
(_coordsToLatLng || coordsToLatLng)(coords[i]);
|
||
|
||
latlngs.push(latlng);
|
||
}
|
||
|
||
return latlngs;
|
||
}
|
||
|
||
// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array
|
||
// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
|
||
function latLngToCoords(latlng, precision) {
|
||
latlng = toLatLng(latlng);
|
||
return latlng.alt !== undefined ?
|
||
[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] :
|
||
[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)];
|
||
}
|
||
|
||
// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array
|
||
// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)
|
||
// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
|
||
function latLngsToCoords(latlngs, levelsDeep, closed, precision) {
|
||
var coords = [];
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion
|
||
coords.push(levelsDeep ?
|
||
latLngsToCoords(latlngs[i], isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :
|
||
latLngToCoords(latlngs[i], precision));
|
||
}
|
||
|
||
if (!levelsDeep && closed) {
|
||
coords.push(coords[0].slice());
|
||
}
|
||
|
||
return coords;
|
||
}
|
||
|
||
function getFeature(layer, newGeometry) {
|
||
return layer.feature ?
|
||
extend({}, layer.feature, {geometry: newGeometry}) :
|
||
asFeature(newGeometry);
|
||
}
|
||
|
||
// @function asFeature(geojson: Object): Object
|
||
// Normalize GeoJSON geometries/features into GeoJSON features.
|
||
function asFeature(geojson) {
|
||
if (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {
|
||
return geojson;
|
||
}
|
||
|
||
return {
|
||
type: 'Feature',
|
||
properties: {},
|
||
geometry: geojson
|
||
};
|
||
}
|
||
|
||
var PointToGeoJSON = {
|
||
toGeoJSON: function (precision) {
|
||
return getFeature(this, {
|
||
type: 'Point',
|
||
coordinates: latLngToCoords(this.getLatLng(), precision)
|
||
});
|
||
}
|
||
};
|
||
|
||
// @namespace Marker
|
||
// @section Other methods
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).
|
||
Marker.include(PointToGeoJSON);
|
||
|
||
// @namespace CircleMarker
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).
|
||
Circle.include(PointToGeoJSON);
|
||
CircleMarker.include(PointToGeoJSON);
|
||
|
||
|
||
// @namespace Polyline
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).
|
||
Polyline.include({
|
||
toGeoJSON: function (precision) {
|
||
var multi = !isFlat(this._latlngs);
|
||
|
||
var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);
|
||
|
||
return getFeature(this, {
|
||
type: (multi ? 'Multi' : '') + 'LineString',
|
||
coordinates: coords
|
||
});
|
||
}
|
||
});
|
||
|
||
// @namespace Polygon
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).
|
||
Polygon.include({
|
||
toGeoJSON: function (precision) {
|
||
var holes = !isFlat(this._latlngs),
|
||
multi = holes && !isFlat(this._latlngs[0]);
|
||
|
||
var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);
|
||
|
||
if (!holes) {
|
||
coords = [coords];
|
||
}
|
||
|
||
return getFeature(this, {
|
||
type: (multi ? 'Multi' : '') + 'Polygon',
|
||
coordinates: coords
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
// @namespace LayerGroup
|
||
LayerGroup.include({
|
||
toMultiPoint: function (precision) {
|
||
var coords = [];
|
||
|
||
this.eachLayer(function (layer) {
|
||
coords.push(layer.toGeoJSON(precision).geometry.coordinates);
|
||
});
|
||
|
||
return getFeature(this, {
|
||
type: 'MultiPoint',
|
||
coordinates: coords
|
||
});
|
||
},
|
||
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).
|
||
toGeoJSON: function (precision) {
|
||
|
||
var type = this.feature && this.feature.geometry && this.feature.geometry.type;
|
||
|
||
if (type === 'MultiPoint') {
|
||
return this.toMultiPoint(precision);
|
||
}
|
||
|
||
var isGeometryCollection = type === 'GeometryCollection',
|
||
jsons = [];
|
||
|
||
this.eachLayer(function (layer) {
|
||
if (layer.toGeoJSON) {
|
||
var json = layer.toGeoJSON(precision);
|
||
if (isGeometryCollection) {
|
||
jsons.push(json.geometry);
|
||
} else {
|
||
var feature = asFeature(json);
|
||
// Squash nested feature collections
|
||
if (feature.type === 'FeatureCollection') {
|
||
jsons.push.apply(jsons, feature.features);
|
||
} else {
|
||
jsons.push(feature);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
if (isGeometryCollection) {
|
||
return getFeature(this, {
|
||
geometries: jsons,
|
||
type: 'GeometryCollection'
|
||
});
|
||
}
|
||
|
||
return {
|
||
type: 'FeatureCollection',
|
||
features: jsons
|
||
};
|
||
}
|
||
});
|
||
|
||
// @namespace GeoJSON
|
||
// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)
|
||
// Creates a GeoJSON layer. Optionally accepts an object in
|
||
// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map
|
||
// (you can alternatively add it later with `addData` method) and an `options` object.
|
||
function geoJSON(geojson, options) {
|
||
return new GeoJSON(geojson, options);
|
||
}
|
||
|
||
// Backward compatibility.
|
||
var geoJson = geoJSON;
|
||
|
||
/*
|
||
* @class ImageOverlay
|
||
* @aka L.ImageOverlay
|
||
* @inherits Interactive layer
|
||
*
|
||
* Used to load and display a single image over specific bounds of the map. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
|
||
* imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];
|
||
* L.imageOverlay(imageUrl, imageBounds).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var ImageOverlay = Layer.extend({
|
||
|
||
// @section
|
||
// @aka ImageOverlay options
|
||
options: {
|
||
// @option opacity: Number = 1.0
|
||
// The opacity of the image overlay.
|
||
opacity: 1,
|
||
|
||
// @option alt: String = ''
|
||
// Text for the `alt` attribute of the image (useful for accessibility).
|
||
alt: '',
|
||
|
||
// @option interactive: Boolean = false
|
||
// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.
|
||
interactive: false,
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the image.
|
||
// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false,
|
||
|
||
// @option errorOverlayUrl: String = ''
|
||
// URL to the overlay image to show in place of the overlay that failed to load.
|
||
errorOverlayUrl: '',
|
||
|
||
// @option zIndex: Number = 1
|
||
// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.
|
||
zIndex: 1,
|
||
|
||
// @option className: String = ''
|
||
// A custom class name to assign to the image. Empty by default.
|
||
className: ''
|
||
},
|
||
|
||
initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
|
||
this._url = url;
|
||
this._bounds = toLatLngBounds(bounds);
|
||
|
||
setOptions(this, options);
|
||
},
|
||
|
||
onAdd: function () {
|
||
if (!this._image) {
|
||
this._initImage();
|
||
|
||
if (this.options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
}
|
||
|
||
if (this.options.interactive) {
|
||
addClass(this._image, 'leaflet-interactive');
|
||
this.addInteractiveTarget(this._image);
|
||
}
|
||
|
||
this.getPane().appendChild(this._image);
|
||
this._reset();
|
||
},
|
||
|
||
onRemove: function () {
|
||
remove(this._image);
|
||
if (this.options.interactive) {
|
||
this.removeInteractiveTarget(this._image);
|
||
}
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Sets the opacity of the overlay.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
|
||
if (this._image) {
|
||
this._updateOpacity();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
setStyle: function (styleOpts) {
|
||
if (styleOpts.opacity) {
|
||
this.setOpacity(styleOpts.opacity);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer to the top of all overlays.
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._image);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer to the bottom of all overlays.
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._image);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setUrl(url: String): this
|
||
// Changes the URL of the image.
|
||
setUrl: function (url) {
|
||
this._url = url;
|
||
|
||
if (this._image) {
|
||
this._image.src = url;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setBounds(bounds: LatLngBounds): this
|
||
// Update the bounds that this ImageOverlay covers
|
||
setBounds: function (bounds) {
|
||
this._bounds = toLatLngBounds(bounds);
|
||
|
||
if (this._map) {
|
||
this._reset();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
zoom: this._reset,
|
||
viewreset: this._reset
|
||
};
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
// @method setZIndex(value: Number): this
|
||
// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.
|
||
setZIndex: function (value) {
|
||
this.options.zIndex = value;
|
||
this._updateZIndex();
|
||
return this;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Get the bounds that this ImageOverlay covers
|
||
getBounds: function () {
|
||
return this._bounds;
|
||
},
|
||
|
||
// @method getElement(): HTMLElement
|
||
// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)
|
||
// used by this overlay.
|
||
getElement: function () {
|
||
return this._image;
|
||
},
|
||
|
||
_initImage: function () {
|
||
var wasElementSupplied = this._url.tagName === 'IMG';
|
||
var img = this._image = wasElementSupplied ? this._url : create$1('img');
|
||
|
||
addClass(img, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(img, this.options.className); }
|
||
|
||
img.onselectstart = falseFn;
|
||
img.onmousemove = falseFn;
|
||
|
||
// @event load: Event
|
||
// Fired when the ImageOverlay layer has loaded its image
|
||
img.onload = bind(this.fire, this, 'load');
|
||
img.onerror = bind(this._overlayOnError, this, 'error');
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
if (this.options.zIndex) {
|
||
this._updateZIndex();
|
||
}
|
||
|
||
if (wasElementSupplied) {
|
||
this._url = img.src;
|
||
return;
|
||
}
|
||
|
||
img.src = this._url;
|
||
img.alt = this.options.alt;
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var scale = this._map.getZoomScale(e.zoom),
|
||
offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;
|
||
|
||
setTransform(this._image, offset, scale);
|
||
},
|
||
|
||
_reset: function () {
|
||
var image = this._image,
|
||
bounds = new Bounds(
|
||
this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
|
||
this._map.latLngToLayerPoint(this._bounds.getSouthEast())),
|
||
size = bounds.getSize();
|
||
|
||
setPosition(image, bounds.min);
|
||
|
||
image.style.width = size.x + 'px';
|
||
image.style.height = size.y + 'px';
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
setOpacity(this._image, this.options.opacity);
|
||
},
|
||
|
||
_updateZIndex: function () {
|
||
if (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {
|
||
this._image.style.zIndex = this.options.zIndex;
|
||
}
|
||
},
|
||
|
||
_overlayOnError: function () {
|
||
// @event error: Event
|
||
// Fired when the ImageOverlay layer fails to load its image
|
||
this.fire('error');
|
||
|
||
var errorUrl = this.options.errorOverlayUrl;
|
||
if (errorUrl && this._url !== errorUrl) {
|
||
this._url = errorUrl;
|
||
this._image.src = errorUrl;
|
||
}
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center of the ImageOverlay.
|
||
getCenter: function () {
|
||
return this._bounds.getCenter();
|
||
}
|
||
});
|
||
|
||
// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)
|
||
// Instantiates an image overlay object given the URL of the image and the
|
||
// geographical bounds it is tied to.
|
||
var imageOverlay = function (url, bounds, options) {
|
||
return new ImageOverlay(url, bounds, options);
|
||
};
|
||
|
||
/*
|
||
* @class VideoOverlay
|
||
* @aka L.VideoOverlay
|
||
* @inherits ImageOverlay
|
||
*
|
||
* Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.
|
||
*
|
||
* A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)
|
||
* HTML5 element.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
|
||
* videoBounds = [[ 32, -130], [ 13, -100]];
|
||
* L.videoOverlay(videoUrl, videoBounds ).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var VideoOverlay = ImageOverlay.extend({
|
||
|
||
// @section
|
||
// @aka VideoOverlay options
|
||
options: {
|
||
// @option autoplay: Boolean = true
|
||
// Whether the video starts playing automatically when loaded.
|
||
// On some browsers autoplay will only work with `muted: true`
|
||
autoplay: true,
|
||
|
||
// @option loop: Boolean = true
|
||
// Whether the video will loop back to the beginning when played.
|
||
loop: true,
|
||
|
||
// @option keepAspectRatio: Boolean = true
|
||
// Whether the video will save aspect ratio after the projection.
|
||
// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)
|
||
keepAspectRatio: true,
|
||
|
||
// @option muted: Boolean = false
|
||
// Whether the video starts on mute when loaded.
|
||
muted: false,
|
||
|
||
// @option playsInline: Boolean = true
|
||
// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.
|
||
playsInline: true
|
||
},
|
||
|
||
_initImage: function () {
|
||
var wasElementSupplied = this._url.tagName === 'VIDEO';
|
||
var vid = this._image = wasElementSupplied ? this._url : create$1('video');
|
||
|
||
addClass(vid, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(vid, this.options.className); }
|
||
|
||
vid.onselectstart = falseFn;
|
||
vid.onmousemove = falseFn;
|
||
|
||
// @event load: Event
|
||
// Fired when the video has finished loading the first frame
|
||
vid.onloadeddata = bind(this.fire, this, 'load');
|
||
|
||
if (wasElementSupplied) {
|
||
var sourceElements = vid.getElementsByTagName('source');
|
||
var sources = [];
|
||
for (var j = 0; j < sourceElements.length; j++) {
|
||
sources.push(sourceElements[j].src);
|
||
}
|
||
|
||
this._url = (sourceElements.length > 0) ? sources : [vid.src];
|
||
return;
|
||
}
|
||
|
||
if (!isArray(this._url)) { this._url = [this._url]; }
|
||
|
||
if (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {
|
||
vid.style['objectFit'] = 'fill';
|
||
}
|
||
vid.autoplay = !!this.options.autoplay;
|
||
vid.loop = !!this.options.loop;
|
||
vid.muted = !!this.options.muted;
|
||
vid.playsInline = !!this.options.playsInline;
|
||
for (var i = 0; i < this._url.length; i++) {
|
||
var source = create$1('source');
|
||
source.src = this._url[i];
|
||
vid.appendChild(source);
|
||
}
|
||
}
|
||
|
||
// @method getElement(): HTMLVideoElement
|
||
// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)
|
||
// used by this overlay.
|
||
});
|
||
|
||
|
||
// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)
|
||
// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the
|
||
// geographical bounds it is tied to.
|
||
|
||
function videoOverlay(video, bounds, options) {
|
||
return new VideoOverlay(video, bounds, options);
|
||
}
|
||
|
||
/*
|
||
* @class SVGOverlay
|
||
* @aka L.SVGOverlay
|
||
* @inherits ImageOverlay
|
||
*
|
||
* Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.
|
||
*
|
||
* An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||
* svgElement.setAttribute('xmlns', "http://www.w3.org/2000/svg");
|
||
* svgElement.setAttribute('viewBox', "0 0 200 200");
|
||
* svgElement.innerHTML = '<rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/>';
|
||
* var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];
|
||
* L.svgOverlay(svgElement, svgElementBounds).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var SVGOverlay = ImageOverlay.extend({
|
||
_initImage: function () {
|
||
var el = this._image = this._url;
|
||
|
||
addClass(el, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(el, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(el, this.options.className); }
|
||
|
||
el.onselectstart = falseFn;
|
||
el.onmousemove = falseFn;
|
||
}
|
||
|
||
// @method getElement(): SVGElement
|
||
// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)
|
||
// used by this overlay.
|
||
});
|
||
|
||
|
||
// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)
|
||
// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.
|
||
// A viewBox attribute is required on the SVG element to zoom in and out properly.
|
||
|
||
function svgOverlay(el, bounds, options) {
|
||
return new SVGOverlay(el, bounds, options);
|
||
}
|
||
|
||
/*
|
||
* @class DivOverlay
|
||
* @inherits Interactive layer
|
||
* @aka L.DivOverlay
|
||
* Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.
|
||
*/
|
||
|
||
// @namespace DivOverlay
|
||
var DivOverlay = Layer.extend({
|
||
|
||
// @section
|
||
// @aka DivOverlay options
|
||
options: {
|
||
// @option interactive: Boolean = false
|
||
// If true, the popup/tooltip will listen to the mouse events.
|
||
interactive: false,
|
||
|
||
// @option offset: Point = Point(0, 0)
|
||
// The offset of the overlay position.
|
||
offset: [0, 0],
|
||
|
||
// @option className: String = ''
|
||
// A custom CSS class name to assign to the overlay.
|
||
className: '',
|
||
|
||
// @option pane: String = undefined
|
||
// `Map pane` where the overlay will be added.
|
||
pane: undefined,
|
||
|
||
// @option content: String|HTMLElement|Function = ''
|
||
// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be
|
||
// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.
|
||
content: ''
|
||
},
|
||
|
||
initialize: function (options, source) {
|
||
if (options && (options instanceof LatLng || isArray(options))) {
|
||
this._latlng = toLatLng(options);
|
||
setOptions(this, source);
|
||
} else {
|
||
setOptions(this, options);
|
||
this._source = source;
|
||
}
|
||
if (this.options.content) {
|
||
this._content = this.options.content;
|
||
}
|
||
},
|
||
|
||
// @method openOn(map: Map): this
|
||
// Adds the overlay to the map.
|
||
// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.
|
||
openOn: function (map) {
|
||
map = arguments.length ? map : this._source._map; // experimental, not the part of public api
|
||
if (!map.hasLayer(this)) {
|
||
map.addLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method close(): this
|
||
// Closes the overlay.
|
||
// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`
|
||
// and `layer.closePopup()`/`.closeTooltip()`.
|
||
close: function () {
|
||
if (this._map) {
|
||
this._map.removeLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method toggle(layer?: Layer): this
|
||
// Opens or closes the overlay bound to layer depending on its current state.
|
||
// Argument may be omitted only for overlay bound to layer.
|
||
// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.
|
||
toggle: function (layer) {
|
||
if (this._map) {
|
||
this.close();
|
||
} else {
|
||
if (arguments.length) {
|
||
this._source = layer;
|
||
} else {
|
||
layer = this._source;
|
||
}
|
||
this._prepareOpen();
|
||
|
||
// open the overlay on the map
|
||
this.openOn(layer._map);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._zoomAnimated = map._zoomAnimated;
|
||
|
||
if (!this._container) {
|
||
this._initLayout();
|
||
}
|
||
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 0);
|
||
}
|
||
|
||
clearTimeout(this._removeTimeout);
|
||
this.getPane().appendChild(this._container);
|
||
this.update();
|
||
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 1);
|
||
}
|
||
|
||
this.bringToFront();
|
||
|
||
if (this.options.interactive) {
|
||
addClass(this._container, 'leaflet-interactive');
|
||
this.addInteractiveTarget(this._container);
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 0);
|
||
this._removeTimeout = setTimeout(bind(remove, undefined, this._container), 200);
|
||
} else {
|
||
remove(this._container);
|
||
}
|
||
|
||
if (this.options.interactive) {
|
||
removeClass(this._container, 'leaflet-interactive');
|
||
this.removeInteractiveTarget(this._container);
|
||
}
|
||
},
|
||
|
||
// @namespace DivOverlay
|
||
// @method getLatLng: LatLng
|
||
// Returns the geographical point of the overlay.
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setLatLng(latlng: LatLng): this
|
||
// Sets the geographical point where the overlay will open.
|
||
setLatLng: function (latlng) {
|
||
this._latlng = toLatLng(latlng);
|
||
if (this._map) {
|
||
this._updatePosition();
|
||
this._adjustPan();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getContent: String|HTMLElement
|
||
// Returns the content of the overlay.
|
||
getContent: function () {
|
||
return this._content;
|
||
},
|
||
|
||
// @method setContent(htmlContent: String|HTMLElement|Function): this
|
||
// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.
|
||
// The function should return a `String` or `HTMLElement` to be used in the overlay.
|
||
setContent: function (content) {
|
||
this._content = content;
|
||
this.update();
|
||
return this;
|
||
},
|
||
|
||
// @method getElement: String|HTMLElement
|
||
// Returns the HTML container of the overlay.
|
||
getElement: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method update: null
|
||
// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.
|
||
update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
this._container.style.visibility = 'hidden';
|
||
|
||
this._updateContent();
|
||
this._updateLayout();
|
||
this._updatePosition();
|
||
|
||
this._container.style.visibility = '';
|
||
|
||
this._adjustPan();
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
zoom: this._updatePosition,
|
||
viewreset: this._updatePosition
|
||
};
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
return events;
|
||
},
|
||
|
||
// @method isOpen: Boolean
|
||
// Returns `true` when the overlay is visible on the map.
|
||
isOpen: function () {
|
||
return !!this._map && this._map.hasLayer(this);
|
||
},
|
||
|
||
// @method bringToFront: this
|
||
// Brings this overlay in front of other overlays (in the same map pane).
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._container);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack: this
|
||
// Brings this overlay to the back of other overlays (in the same map pane).
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._container);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)
|
||
_prepareOpen: function (latlng) {
|
||
var source = this._source;
|
||
if (!source._map) { return false; }
|
||
|
||
if (source instanceof FeatureGroup) {
|
||
source = null;
|
||
var layers = this._source._layers;
|
||
for (var id in layers) {
|
||
if (layers[id]._map) {
|
||
source = layers[id];
|
||
break;
|
||
}
|
||
}
|
||
if (!source) { return false; } // Unable to get source layer.
|
||
|
||
// set overlay source to this layer
|
||
this._source = source;
|
||
}
|
||
|
||
if (!latlng) {
|
||
if (source.getCenter) {
|
||
latlng = source.getCenter();
|
||
} else if (source.getLatLng) {
|
||
latlng = source.getLatLng();
|
||
} else if (source.getBounds) {
|
||
latlng = source.getBounds().getCenter();
|
||
} else {
|
||
throw new Error('Unable to get source layer LatLng.');
|
||
}
|
||
}
|
||
this.setLatLng(latlng);
|
||
|
||
if (this._map) {
|
||
// update the overlay (content, layout, etc...)
|
||
this.update();
|
||
}
|
||
|
||
return true;
|
||
},
|
||
|
||
_updateContent: function () {
|
||
if (!this._content) { return; }
|
||
|
||
var node = this._contentNode;
|
||
var content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;
|
||
|
||
if (typeof content === 'string') {
|
||
node.innerHTML = content;
|
||
} else {
|
||
while (node.hasChildNodes()) {
|
||
node.removeChild(node.firstChild);
|
||
}
|
||
node.appendChild(content);
|
||
}
|
||
|
||
// @namespace DivOverlay
|
||
// @section DivOverlay events
|
||
// @event contentupdate: Event
|
||
// Fired when the content of the overlay is updated
|
||
this.fire('contentupdate');
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
if (!this._map) { return; }
|
||
|
||
var pos = this._map.latLngToLayerPoint(this._latlng),
|
||
offset = toPoint(this.options.offset),
|
||
anchor = this._getAnchor();
|
||
|
||
if (this._zoomAnimated) {
|
||
setPosition(this._container, pos.add(anchor));
|
||
} else {
|
||
offset = offset.add(pos).add(anchor);
|
||
}
|
||
|
||
var bottom = this._containerBottom = -offset.y,
|
||
left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;
|
||
|
||
// bottom position the overlay in case the height of the overlay changes (images loading etc)
|
||
this._container.style.bottom = bottom + 'px';
|
||
this._container.style.left = left + 'px';
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
return [0, 0];
|
||
}
|
||
|
||
});
|
||
|
||
Map.include({
|
||
_initOverlay: function (OverlayClass, content, latlng, options) {
|
||
var overlay = content;
|
||
if (!(overlay instanceof OverlayClass)) {
|
||
overlay = new OverlayClass(options).setContent(content);
|
||
}
|
||
if (latlng) {
|
||
overlay.setLatLng(latlng);
|
||
}
|
||
return overlay;
|
||
}
|
||
});
|
||
|
||
|
||
Layer.include({
|
||
_initOverlay: function (OverlayClass, old, content, options) {
|
||
var overlay = content;
|
||
if (overlay instanceof OverlayClass) {
|
||
setOptions(overlay, options);
|
||
overlay._source = this;
|
||
} else {
|
||
overlay = (old && !options) ? old : new OverlayClass(options, this);
|
||
overlay.setContent(content);
|
||
}
|
||
return overlay;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Popup
|
||
* @inherits DivOverlay
|
||
* @aka L.Popup
|
||
* Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to
|
||
* open popups while making sure that only one popup is open at one time
|
||
* (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.
|
||
*
|
||
* @example
|
||
*
|
||
* If you want to just bind a popup to marker click and then open it, it's really easy:
|
||
*
|
||
* ```js
|
||
* marker.bindPopup(popupContent).openPopup();
|
||
* ```
|
||
* Path overlays like polylines also have a `bindPopup` method.
|
||
*
|
||
* A popup can be also standalone:
|
||
*
|
||
* ```js
|
||
* var popup = L.popup()
|
||
* .setLatLng(latlng)
|
||
* .setContent('<p>Hello world!<br />This is a nice popup.</p>')
|
||
* .openOn(map);
|
||
* ```
|
||
* or
|
||
* ```js
|
||
* var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')
|
||
* .openOn(map);
|
||
* ```
|
||
*/
|
||
|
||
|
||
// @namespace Popup
|
||
var Popup = DivOverlay.extend({
|
||
|
||
// @section
|
||
// @aka Popup options
|
||
options: {
|
||
// @option pane: String = 'popupPane'
|
||
// `Map pane` where the popup will be added.
|
||
pane: 'popupPane',
|
||
|
||
// @option offset: Point = Point(0, 7)
|
||
// The offset of the popup position.
|
||
offset: [0, 7],
|
||
|
||
// @option maxWidth: Number = 300
|
||
// Max width of the popup, in pixels.
|
||
maxWidth: 300,
|
||
|
||
// @option minWidth: Number = 50
|
||
// Min width of the popup, in pixels.
|
||
minWidth: 50,
|
||
|
||
// @option maxHeight: Number = null
|
||
// If set, creates a scrollable container of the given height
|
||
// inside a popup if its content exceeds it.
|
||
// The scrollable container can be styled using the
|
||
// `leaflet-popup-scrolled` CSS class selector.
|
||
maxHeight: null,
|
||
|
||
// @option autoPan: Boolean = true
|
||
// Set it to `false` if you don't want the map to do panning animation
|
||
// to fit the opened popup.
|
||
autoPan: true,
|
||
|
||
// @option autoPanPaddingTopLeft: Point = null
|
||
// The margin between the popup and the top left corner of the map
|
||
// view after autopanning was performed.
|
||
autoPanPaddingTopLeft: null,
|
||
|
||
// @option autoPanPaddingBottomRight: Point = null
|
||
// The margin between the popup and the bottom right corner of the map
|
||
// view after autopanning was performed.
|
||
autoPanPaddingBottomRight: null,
|
||
|
||
// @option autoPanPadding: Point = Point(5, 5)
|
||
// Equivalent of setting both top left and bottom right autopan padding to the same value.
|
||
autoPanPadding: [5, 5],
|
||
|
||
// @option keepInView: Boolean = false
|
||
// Set it to `true` if you want to prevent users from panning the popup
|
||
// off of the screen while it is open.
|
||
keepInView: false,
|
||
|
||
// @option closeButton: Boolean = true
|
||
// Controls the presence of a close button in the popup.
|
||
closeButton: true,
|
||
|
||
// @option autoClose: Boolean = true
|
||
// Set it to `false` if you want to override the default behavior of
|
||
// the popup closing when another popup is opened.
|
||
autoClose: true,
|
||
|
||
// @option closeOnEscapeKey: Boolean = true
|
||
// Set it to `false` if you want to override the default behavior of
|
||
// the ESC key for closing of the popup.
|
||
closeOnEscapeKey: true,
|
||
|
||
// @option closeOnClick: Boolean = *
|
||
// Set it if you want to override the default behavior of the popup closing when user clicks
|
||
// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.
|
||
|
||
// @option className: String = ''
|
||
// A custom CSS class name to assign to the popup.
|
||
className: ''
|
||
},
|
||
|
||
// @namespace Popup
|
||
// @method openOn(map: Map): this
|
||
// Alternative to `map.openPopup(popup)`.
|
||
// Adds the popup to the map and closes the previous one.
|
||
openOn: function (map) {
|
||
map = arguments.length ? map : this._source._map; // experimental, not the part of public api
|
||
|
||
if (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {
|
||
map.removeLayer(map._popup);
|
||
}
|
||
map._popup = this;
|
||
|
||
return DivOverlay.prototype.openOn.call(this, map);
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
DivOverlay.prototype.onAdd.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event popupopen: PopupEvent
|
||
// Fired when a popup is opened in the map
|
||
map.fire('popupopen', {popup: this});
|
||
|
||
if (this._source) {
|
||
// @namespace Layer
|
||
// @section Popup events
|
||
// @event popupopen: PopupEvent
|
||
// Fired when a popup bound to this layer is opened
|
||
this._source.fire('popupopen', {popup: this}, true);
|
||
// For non-path layers, we toggle the popup when clicking
|
||
// again the layer, so prevent the map to reopen it.
|
||
if (!(this._source instanceof Path)) {
|
||
this._source.on('preclick', stopPropagation);
|
||
}
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
DivOverlay.prototype.onRemove.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event popupclose: PopupEvent
|
||
// Fired when a popup in the map is closed
|
||
map.fire('popupclose', {popup: this});
|
||
|
||
if (this._source) {
|
||
// @namespace Layer
|
||
// @section Popup events
|
||
// @event popupclose: PopupEvent
|
||
// Fired when a popup bound to this layer is closed
|
||
this._source.fire('popupclose', {popup: this}, true);
|
||
if (!(this._source instanceof Path)) {
|
||
this._source.off('preclick', stopPropagation);
|
||
}
|
||
}
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = DivOverlay.prototype.getEvents.call(this);
|
||
|
||
if (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
|
||
events.preclick = this.close;
|
||
}
|
||
|
||
if (this.options.keepInView) {
|
||
events.moveend = this._adjustPan;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var prefix = 'leaflet-popup',
|
||
container = this._container = create$1('div',
|
||
prefix + ' ' + (this.options.className || '') +
|
||
' leaflet-zoom-animated');
|
||
|
||
var wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);
|
||
this._contentNode = create$1('div', prefix + '-content', wrapper);
|
||
|
||
disableClickPropagation(container);
|
||
disableScrollPropagation(this._contentNode);
|
||
on(container, 'contextmenu', stopPropagation);
|
||
|
||
this._tipContainer = create$1('div', prefix + '-tip-container', container);
|
||
this._tip = create$1('div', prefix + '-tip', this._tipContainer);
|
||
|
||
if (this.options.closeButton) {
|
||
var closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);
|
||
closeButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399
|
||
closeButton.setAttribute('aria-label', 'Close popup');
|
||
closeButton.href = '#close';
|
||
closeButton.innerHTML = '<span aria-hidden="true">×</span>';
|
||
|
||
on(closeButton, 'click', function (ev) {
|
||
preventDefault(ev);
|
||
this.close();
|
||
}, this);
|
||
}
|
||
},
|
||
|
||
_updateLayout: function () {
|
||
var container = this._contentNode,
|
||
style = container.style;
|
||
|
||
style.width = '';
|
||
style.whiteSpace = 'nowrap';
|
||
|
||
var width = container.offsetWidth;
|
||
width = Math.min(width, this.options.maxWidth);
|
||
width = Math.max(width, this.options.minWidth);
|
||
|
||
style.width = (width + 1) + 'px';
|
||
style.whiteSpace = '';
|
||
|
||
style.height = '';
|
||
|
||
var height = container.offsetHeight,
|
||
maxHeight = this.options.maxHeight,
|
||
scrolledClass = 'leaflet-popup-scrolled';
|
||
|
||
if (maxHeight && height > maxHeight) {
|
||
style.height = maxHeight + 'px';
|
||
addClass(container, scrolledClass);
|
||
} else {
|
||
removeClass(container, scrolledClass);
|
||
}
|
||
|
||
this._containerWidth = this._container.offsetWidth;
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),
|
||
anchor = this._getAnchor();
|
||
setPosition(this._container, pos.add(anchor));
|
||
},
|
||
|
||
_adjustPan: function () {
|
||
if (!this.options.autoPan) { return; }
|
||
if (this._map._panAnim) { this._map._panAnim.stop(); }
|
||
|
||
// We can endlessly recurse if keepInView is set and the view resets.
|
||
// Let's guard against that by exiting early if we're responding to our own autopan.
|
||
if (this._autopanning) {
|
||
this._autopanning = false;
|
||
return;
|
||
}
|
||
|
||
var map = this._map,
|
||
marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,
|
||
containerHeight = this._container.offsetHeight + marginBottom,
|
||
containerWidth = this._containerWidth,
|
||
layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);
|
||
|
||
layerPos._add(getPosition(this._container));
|
||
|
||
var containerPos = map.layerPointToContainerPoint(layerPos),
|
||
padding = toPoint(this.options.autoPanPadding),
|
||
paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),
|
||
paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),
|
||
size = map.getSize(),
|
||
dx = 0,
|
||
dy = 0;
|
||
|
||
if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right
|
||
dx = containerPos.x + containerWidth - size.x + paddingBR.x;
|
||
}
|
||
if (containerPos.x - dx - paddingTL.x < 0) { // left
|
||
dx = containerPos.x - paddingTL.x;
|
||
}
|
||
if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom
|
||
dy = containerPos.y + containerHeight - size.y + paddingBR.y;
|
||
}
|
||
if (containerPos.y - dy - paddingTL.y < 0) { // top
|
||
dy = containerPos.y - paddingTL.y;
|
||
}
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event autopanstart: Event
|
||
// Fired when the map starts autopanning when opening a popup.
|
||
if (dx || dy) {
|
||
// Track that we're autopanning, as this function will be re-ran on moveend
|
||
if (this.options.keepInView) {
|
||
this._autopanning = true;
|
||
}
|
||
|
||
map
|
||
.fire('autopanstart')
|
||
.panBy([dx, dy]);
|
||
}
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
// Where should we anchor the popup on the source layer?
|
||
return toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);
|
||
}
|
||
|
||
});
|
||
|
||
// @namespace Popup
|
||
// @factory L.popup(options?: Popup options, source?: Layer)
|
||
// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.
|
||
// @alternative
|
||
// @factory L.popup(latlng: LatLng, options?: Popup options)
|
||
// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.
|
||
var popup = function (options, source) {
|
||
return new Popup(options, source);
|
||
};
|
||
|
||
|
||
/* @namespace Map
|
||
* @section Interaction Options
|
||
* @option closePopupOnClick: Boolean = true
|
||
* Set it to `false` if you don't want popups to close when user clicks the map.
|
||
*/
|
||
Map.mergeOptions({
|
||
closePopupOnClick: true
|
||
});
|
||
|
||
|
||
// @namespace Map
|
||
// @section Methods for Layers and Controls
|
||
Map.include({
|
||
// @method openPopup(popup: Popup): this
|
||
// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).
|
||
// @alternative
|
||
// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this
|
||
// Creates a popup with the specified content and options and opens it in the given point on a map.
|
||
openPopup: function (popup, latlng, options) {
|
||
this._initOverlay(Popup, popup, latlng, options)
|
||
.openOn(this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method closePopup(popup?: Popup): this
|
||
// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).
|
||
closePopup: function (popup) {
|
||
popup = arguments.length ? popup : this._popup;
|
||
if (popup) {
|
||
popup.close();
|
||
}
|
||
return this;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @namespace Layer
|
||
* @section Popup methods example
|
||
*
|
||
* All layers share a set of methods convenient for binding popups to it.
|
||
*
|
||
* ```js
|
||
* var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);
|
||
* layer.openPopup();
|
||
* layer.closePopup();
|
||
* ```
|
||
*
|
||
* Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.
|
||
*/
|
||
|
||
// @section Popup methods
|
||
Layer.include({
|
||
|
||
// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this
|
||
// Binds a popup to the layer with the passed `content` and sets up the
|
||
// necessary event listeners. If a `Function` is passed it will receive
|
||
// the layer as the first argument and should return a `String` or `HTMLElement`.
|
||
bindPopup: function (content, options) {
|
||
this._popup = this._initOverlay(Popup, this._popup, content, options);
|
||
if (!this._popupHandlersAdded) {
|
||
this.on({
|
||
click: this._openPopup,
|
||
keypress: this._onKeyPress,
|
||
remove: this.closePopup,
|
||
move: this._movePopup
|
||
});
|
||
this._popupHandlersAdded = true;
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method unbindPopup(): this
|
||
// Removes the popup previously bound with `bindPopup`.
|
||
unbindPopup: function () {
|
||
if (this._popup) {
|
||
this.off({
|
||
click: this._openPopup,
|
||
keypress: this._onKeyPress,
|
||
remove: this.closePopup,
|
||
move: this._movePopup
|
||
});
|
||
this._popupHandlersAdded = false;
|
||
this._popup = null;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method openPopup(latlng?: LatLng): this
|
||
// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.
|
||
openPopup: function (latlng) {
|
||
if (this._popup) {
|
||
if (!(this instanceof FeatureGroup)) {
|
||
this._popup._source = this;
|
||
}
|
||
if (this._popup._prepareOpen(latlng || this._latlng)) {
|
||
// open the popup on the map
|
||
this._popup.openOn(this._map);
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method closePopup(): this
|
||
// Closes the popup bound to this layer if it is open.
|
||
closePopup: function () {
|
||
if (this._popup) {
|
||
this._popup.close();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method togglePopup(): this
|
||
// Opens or closes the popup bound to this layer depending on its current state.
|
||
togglePopup: function () {
|
||
if (this._popup) {
|
||
this._popup.toggle(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method isPopupOpen(): boolean
|
||
// Returns `true` if the popup bound to this layer is currently open.
|
||
isPopupOpen: function () {
|
||
return (this._popup ? this._popup.isOpen() : false);
|
||
},
|
||
|
||
// @method setPopupContent(content: String|HTMLElement|Popup): this
|
||
// Sets the content of the popup bound to this layer.
|
||
setPopupContent: function (content) {
|
||
if (this._popup) {
|
||
this._popup.setContent(content);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getPopup(): Popup
|
||
// Returns the popup bound to this layer.
|
||
getPopup: function () {
|
||
return this._popup;
|
||
},
|
||
|
||
_openPopup: function (e) {
|
||
if (!this._popup || !this._map) {
|
||
return;
|
||
}
|
||
// prevent map click
|
||
stop(e);
|
||
|
||
var target = e.layer || e.target;
|
||
if (this._popup._source === target && !(target instanceof Path)) {
|
||
// treat it like a marker and figure out
|
||
// if we should toggle it open/closed
|
||
if (this._map.hasLayer(this._popup)) {
|
||
this.closePopup();
|
||
} else {
|
||
this.openPopup(e.latlng);
|
||
}
|
||
return;
|
||
}
|
||
this._popup._source = target;
|
||
this.openPopup(e.latlng);
|
||
},
|
||
|
||
_movePopup: function (e) {
|
||
this._popup.setLatLng(e.latlng);
|
||
},
|
||
|
||
_onKeyPress: function (e) {
|
||
if (e.originalEvent.keyCode === 13) {
|
||
this._openPopup(e);
|
||
}
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Tooltip
|
||
* @inherits DivOverlay
|
||
* @aka L.Tooltip
|
||
* Used to display small texts on top of map layers.
|
||
*
|
||
* @example
|
||
* If you want to just bind a tooltip to marker:
|
||
*
|
||
* ```js
|
||
* marker.bindTooltip("my tooltip text").openTooltip();
|
||
* ```
|
||
* Path overlays like polylines also have a `bindTooltip` method.
|
||
*
|
||
* A tooltip can be also standalone:
|
||
*
|
||
* ```js
|
||
* var tooltip = L.tooltip()
|
||
* .setLatLng(latlng)
|
||
* .setContent('Hello world!<br />This is a nice tooltip.')
|
||
* .addTo(map);
|
||
* ```
|
||
* or
|
||
* ```js
|
||
* var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})
|
||
* .addTo(map);
|
||
* ```
|
||
*
|
||
*
|
||
* Note about tooltip offset. Leaflet takes two options in consideration
|
||
* for computing tooltip offsetting:
|
||
* - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.
|
||
* Add a positive x offset to move the tooltip to the right, and a positive y offset to
|
||
* move it to the bottom. Negatives will move to the left and top.
|
||
* - the `tooltipAnchor` Icon option: this will only be considered for Marker. You
|
||
* should adapt this value if you use a custom icon.
|
||
*/
|
||
|
||
|
||
// @namespace Tooltip
|
||
var Tooltip = DivOverlay.extend({
|
||
|
||
// @section
|
||
// @aka Tooltip options
|
||
options: {
|
||
// @option pane: String = 'tooltipPane'
|
||
// `Map pane` where the tooltip will be added.
|
||
pane: 'tooltipPane',
|
||
|
||
// @option offset: Point = Point(0, 0)
|
||
// Optional offset of the tooltip position.
|
||
offset: [0, 0],
|
||
|
||
// @option direction: String = 'auto'
|
||
// Direction where to open the tooltip. Possible values are: `right`, `left`,
|
||
// `top`, `bottom`, `center`, `auto`.
|
||
// `auto` will dynamically switch between `right` and `left` according to the tooltip
|
||
// position on the map.
|
||
direction: 'auto',
|
||
|
||
// @option permanent: Boolean = false
|
||
// Whether to open the tooltip permanently or only on mouseover.
|
||
permanent: false,
|
||
|
||
// @option sticky: Boolean = false
|
||
// If true, the tooltip will follow the mouse instead of being fixed at the feature center.
|
||
sticky: false,
|
||
|
||
// @option opacity: Number = 0.9
|
||
// Tooltip container opacity.
|
||
opacity: 0.9
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
DivOverlay.prototype.onAdd.call(this, map);
|
||
this.setOpacity(this.options.opacity);
|
||
|
||
// @namespace Map
|
||
// @section Tooltip events
|
||
// @event tooltipopen: TooltipEvent
|
||
// Fired when a tooltip is opened in the map.
|
||
map.fire('tooltipopen', {tooltip: this});
|
||
|
||
if (this._source) {
|
||
this.addEventParent(this._source);
|
||
|
||
// @namespace Layer
|
||
// @section Tooltip events
|
||
// @event tooltipopen: TooltipEvent
|
||
// Fired when a tooltip bound to this layer is opened.
|
||
this._source.fire('tooltipopen', {tooltip: this}, true);
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
DivOverlay.prototype.onRemove.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Tooltip events
|
||
// @event tooltipclose: TooltipEvent
|
||
// Fired when a tooltip in the map is closed.
|
||
map.fire('tooltipclose', {tooltip: this});
|
||
|
||
if (this._source) {
|
||
this.removeEventParent(this._source);
|
||
|
||
// @namespace Layer
|
||
// @section Tooltip events
|
||
// @event tooltipclose: TooltipEvent
|
||
// Fired when a tooltip bound to this layer is closed.
|
||
this._source.fire('tooltipclose', {tooltip: this}, true);
|
||
}
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = DivOverlay.prototype.getEvents.call(this);
|
||
|
||
if (!this.options.permanent) {
|
||
events.preclick = this.close;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var prefix = 'leaflet-tooltip',
|
||
className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
|
||
|
||
this._contentNode = this._container = create$1('div', className);
|
||
|
||
this._container.setAttribute('role', 'tooltip');
|
||
this._container.setAttribute('id', 'leaflet-tooltip-' + stamp(this));
|
||
},
|
||
|
||
_updateLayout: function () {},
|
||
|
||
_adjustPan: function () {},
|
||
|
||
_setPosition: function (pos) {
|
||
var subX, subY,
|
||
map = this._map,
|
||
container = this._container,
|
||
centerPoint = map.latLngToContainerPoint(map.getCenter()),
|
||
tooltipPoint = map.layerPointToContainerPoint(pos),
|
||
direction = this.options.direction,
|
||
tooltipWidth = container.offsetWidth,
|
||
tooltipHeight = container.offsetHeight,
|
||
offset = toPoint(this.options.offset),
|
||
anchor = this._getAnchor();
|
||
|
||
if (direction === 'top') {
|
||
subX = tooltipWidth / 2;
|
||
subY = tooltipHeight;
|
||
} else if (direction === 'bottom') {
|
||
subX = tooltipWidth / 2;
|
||
subY = 0;
|
||
} else if (direction === 'center') {
|
||
subX = tooltipWidth / 2;
|
||
subY = tooltipHeight / 2;
|
||
} else if (direction === 'right') {
|
||
subX = 0;
|
||
subY = tooltipHeight / 2;
|
||
} else if (direction === 'left') {
|
||
subX = tooltipWidth;
|
||
subY = tooltipHeight / 2;
|
||
} else if (tooltipPoint.x < centerPoint.x) {
|
||
direction = 'right';
|
||
subX = 0;
|
||
subY = tooltipHeight / 2;
|
||
} else {
|
||
direction = 'left';
|
||
subX = tooltipWidth + (offset.x + anchor.x) * 2;
|
||
subY = tooltipHeight / 2;
|
||
}
|
||
|
||
pos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);
|
||
|
||
removeClass(container, 'leaflet-tooltip-right');
|
||
removeClass(container, 'leaflet-tooltip-left');
|
||
removeClass(container, 'leaflet-tooltip-top');
|
||
removeClass(container, 'leaflet-tooltip-bottom');
|
||
addClass(container, 'leaflet-tooltip-' + direction);
|
||
setPosition(container, pos);
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
var pos = this._map.latLngToLayerPoint(this._latlng);
|
||
this._setPosition(pos);
|
||
},
|
||
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
|
||
if (this._container) {
|
||
setOpacity(this._container, opacity);
|
||
}
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);
|
||
this._setPosition(pos);
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
// Where should we anchor the tooltip on the source layer?
|
||
return toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
||
}
|
||
|
||
});
|
||
|
||
// @namespace Tooltip
|
||
// @factory L.tooltip(options?: Tooltip options, source?: Layer)
|
||
// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.
|
||
// @alternative
|
||
// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)
|
||
// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.
|
||
var tooltip = function (options, source) {
|
||
return new Tooltip(options, source);
|
||
};
|
||
|
||
// @namespace Map
|
||
// @section Methods for Layers and Controls
|
||
Map.include({
|
||
|
||
// @method openTooltip(tooltip: Tooltip): this
|
||
// Opens the specified tooltip.
|
||
// @alternative
|
||
// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this
|
||
// Creates a tooltip with the specified content and options and open it.
|
||
openTooltip: function (tooltip, latlng, options) {
|
||
this._initOverlay(Tooltip, tooltip, latlng, options)
|
||
.openOn(this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method closeTooltip(tooltip: Tooltip): this
|
||
// Closes the tooltip given as parameter.
|
||
closeTooltip: function (tooltip) {
|
||
tooltip.close();
|
||
return this;
|
||
}
|
||
|
||
});
|
||
|
||
/*
|
||
* @namespace Layer
|
||
* @section Tooltip methods example
|
||
*
|
||
* All layers share a set of methods convenient for binding tooltips to it.
|
||
*
|
||
* ```js
|
||
* var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);
|
||
* layer.openTooltip();
|
||
* layer.closeTooltip();
|
||
* ```
|
||
*/
|
||
|
||
// @section Tooltip methods
|
||
Layer.include({
|
||
|
||
// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this
|
||
// Binds a tooltip to the layer with the passed `content` and sets up the
|
||
// necessary event listeners. If a `Function` is passed it will receive
|
||
// the layer as the first argument and should return a `String` or `HTMLElement`.
|
||
bindTooltip: function (content, options) {
|
||
|
||
if (this._tooltip && this.isTooltipOpen()) {
|
||
this.unbindTooltip();
|
||
}
|
||
|
||
this._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);
|
||
this._initTooltipInteractions();
|
||
|
||
if (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {
|
||
this.openTooltip();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method unbindTooltip(): this
|
||
// Removes the tooltip previously bound with `bindTooltip`.
|
||
unbindTooltip: function () {
|
||
if (this._tooltip) {
|
||
this._initTooltipInteractions(true);
|
||
this.closeTooltip();
|
||
this._tooltip = null;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_initTooltipInteractions: function (remove) {
|
||
if (!remove && this._tooltipHandlersAdded) { return; }
|
||
var onOff = remove ? 'off' : 'on',
|
||
events = {
|
||
remove: this.closeTooltip,
|
||
move: this._moveTooltip
|
||
};
|
||
if (!this._tooltip.options.permanent) {
|
||
events.mouseover = this._openTooltip;
|
||
events.mouseout = this.closeTooltip;
|
||
events.click = this._openTooltip;
|
||
if (this._map) {
|
||
this._addFocusListeners();
|
||
} else {
|
||
events.add = this._addFocusListeners;
|
||
}
|
||
} else {
|
||
events.add = this._openTooltip;
|
||
}
|
||
if (this._tooltip.options.sticky) {
|
||
events.mousemove = this._moveTooltip;
|
||
}
|
||
this[onOff](events);
|
||
this._tooltipHandlersAdded = !remove;
|
||
},
|
||
|
||
// @method openTooltip(latlng?: LatLng): this
|
||
// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.
|
||
openTooltip: function (latlng) {
|
||
if (this._tooltip) {
|
||
if (!(this instanceof FeatureGroup)) {
|
||
this._tooltip._source = this;
|
||
}
|
||
if (this._tooltip._prepareOpen(latlng)) {
|
||
// open the tooltip on the map
|
||
this._tooltip.openOn(this._map);
|
||
|
||
if (this.getElement) {
|
||
this._setAriaDescribedByOnLayer(this);
|
||
} else if (this.eachLayer) {
|
||
this.eachLayer(this._setAriaDescribedByOnLayer, this);
|
||
}
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method closeTooltip(): this
|
||
// Closes the tooltip bound to this layer if it is open.
|
||
closeTooltip: function () {
|
||
if (this._tooltip) {
|
||
return this._tooltip.close();
|
||
}
|
||
},
|
||
|
||
// @method toggleTooltip(): this
|
||
// Opens or closes the tooltip bound to this layer depending on its current state.
|
||
toggleTooltip: function () {
|
||
if (this._tooltip) {
|
||
this._tooltip.toggle(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method isTooltipOpen(): boolean
|
||
// Returns `true` if the tooltip bound to this layer is currently open.
|
||
isTooltipOpen: function () {
|
||
return this._tooltip.isOpen();
|
||
},
|
||
|
||
// @method setTooltipContent(content: String|HTMLElement|Tooltip): this
|
||
// Sets the content of the tooltip bound to this layer.
|
||
setTooltipContent: function (content) {
|
||
if (this._tooltip) {
|
||
this._tooltip.setContent(content);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getTooltip(): Tooltip
|
||
// Returns the tooltip bound to this layer.
|
||
getTooltip: function () {
|
||
return this._tooltip;
|
||
},
|
||
|
||
_addFocusListeners: function () {
|
||
if (this.getElement) {
|
||
this._addFocusListenersOnLayer(this);
|
||
} else if (this.eachLayer) {
|
||
this.eachLayer(this._addFocusListenersOnLayer, this);
|
||
}
|
||
},
|
||
|
||
_addFocusListenersOnLayer: function (layer) {
|
||
var el = layer.getElement();
|
||
if (el) {
|
||
on(el, 'focus', function () {
|
||
this._tooltip._source = layer;
|
||
this.openTooltip();
|
||
}, this);
|
||
on(el, 'blur', this.closeTooltip, this);
|
||
}
|
||
},
|
||
|
||
_setAriaDescribedByOnLayer: function (layer) {
|
||
var el = layer.getElement();
|
||
if (el) {
|
||
el.setAttribute('aria-describedby', this._tooltip._container.id);
|
||
}
|
||
},
|
||
|
||
|
||
_openTooltip: function (e) {
|
||
if (!this._tooltip || !this._map || (this._map.dragging && this._map.dragging.moving())) {
|
||
return;
|
||
}
|
||
this._tooltip._source = e.layer || e.target;
|
||
|
||
this.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);
|
||
},
|
||
|
||
_moveTooltip: function (e) {
|
||
var latlng = e.latlng, containerPoint, layerPoint;
|
||
if (this._tooltip.options.sticky && e.originalEvent) {
|
||
containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);
|
||
layerPoint = this._map.containerPointToLayerPoint(containerPoint);
|
||
latlng = this._map.layerPointToLatLng(layerPoint);
|
||
}
|
||
this._tooltip.setLatLng(latlng);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class DivIcon
|
||
* @aka L.DivIcon
|
||
* @inherits Icon
|
||
*
|
||
* Represents a lightweight icon for markers that uses a simple `<div>`
|
||
* element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var myIcon = L.divIcon({className: 'my-div-icon'});
|
||
* // you can set .my-div-icon styles in CSS
|
||
*
|
||
* L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
|
||
* ```
|
||
*
|
||
* By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.
|
||
*/
|
||
|
||
var DivIcon = Icon.extend({
|
||
options: {
|
||
// @section
|
||
// @aka DivIcon options
|
||
iconSize: [12, 12], // also can be set through CSS
|
||
|
||
// iconAnchor: (Point),
|
||
// popupAnchor: (Point),
|
||
|
||
// @option html: String|HTMLElement = ''
|
||
// Custom HTML code to put inside the div element, empty by default. Alternatively,
|
||
// an instance of `HTMLElement`.
|
||
html: false,
|
||
|
||
// @option bgPos: Point = [0, 0]
|
||
// Optional relative position of the background, in pixels
|
||
bgPos: null,
|
||
|
||
className: 'leaflet-div-icon'
|
||
},
|
||
|
||
createIcon: function (oldIcon) {
|
||
var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
|
||
options = this.options;
|
||
|
||
if (options.html instanceof Element) {
|
||
empty(div);
|
||
div.appendChild(options.html);
|
||
} else {
|
||
div.innerHTML = options.html !== false ? options.html : '';
|
||
}
|
||
|
||
if (options.bgPos) {
|
||
var bgPos = toPoint(options.bgPos);
|
||
div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';
|
||
}
|
||
this._setIconStyles(div, 'icon');
|
||
|
||
return div;
|
||
},
|
||
|
||
createShadow: function () {
|
||
return null;
|
||
}
|
||
});
|
||
|
||
// @factory L.divIcon(options: DivIcon options)
|
||
// Creates a `DivIcon` instance with the given options.
|
||
function divIcon(options) {
|
||
return new DivIcon(options);
|
||
}
|
||
|
||
Icon.Default = IconDefault;
|
||
|
||
/*
|
||
* @class GridLayer
|
||
* @inherits Layer
|
||
* @aka L.GridLayer
|
||
*
|
||
* Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.
|
||
* GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.
|
||
*
|
||
*
|
||
* @section Synchronous usage
|
||
* @example
|
||
*
|
||
* To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.
|
||
*
|
||
* ```js
|
||
* var CanvasLayer = L.GridLayer.extend({
|
||
* createTile: function(coords){
|
||
* // create a <canvas> element for drawing
|
||
* var tile = L.DomUtil.create('canvas', 'leaflet-tile');
|
||
*
|
||
* // setup tile width and height according to the options
|
||
* var size = this.getTileSize();
|
||
* tile.width = size.x;
|
||
* tile.height = size.y;
|
||
*
|
||
* // get a canvas context and draw something on it using coords.x, coords.y and coords.z
|
||
* var ctx = tile.getContext('2d');
|
||
*
|
||
* // return the tile so it can be rendered on screen
|
||
* return tile;
|
||
* }
|
||
* });
|
||
* ```
|
||
*
|
||
* @section Asynchronous usage
|
||
* @example
|
||
*
|
||
* Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.
|
||
*
|
||
* ```js
|
||
* var CanvasLayer = L.GridLayer.extend({
|
||
* createTile: function(coords, done){
|
||
* var error;
|
||
*
|
||
* // create a <canvas> element for drawing
|
||
* var tile = L.DomUtil.create('canvas', 'leaflet-tile');
|
||
*
|
||
* // setup tile width and height according to the options
|
||
* var size = this.getTileSize();
|
||
* tile.width = size.x;
|
||
* tile.height = size.y;
|
||
*
|
||
* // draw something asynchronously and pass the tile to the done() callback
|
||
* setTimeout(function() {
|
||
* done(error, tile);
|
||
* }, 1000);
|
||
*
|
||
* return tile;
|
||
* }
|
||
* });
|
||
* ```
|
||
*
|
||
* @section
|
||
*/
|
||
|
||
|
||
var GridLayer = Layer.extend({
|
||
|
||
// @section
|
||
// @aka GridLayer options
|
||
options: {
|
||
// @option tileSize: Number|Point = 256
|
||
// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.
|
||
tileSize: 256,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// Opacity of the tiles. Can be used in the `createTile()` function.
|
||
opacity: 1,
|
||
|
||
// @option updateWhenIdle: Boolean = (depends)
|
||
// Load new tiles only when panning ends.
|
||
// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.
|
||
// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the
|
||
// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.
|
||
updateWhenIdle: Browser.mobile,
|
||
|
||
// @option updateWhenZooming: Boolean = true
|
||
// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.
|
||
updateWhenZooming: true,
|
||
|
||
// @option updateInterval: Number = 200
|
||
// Tiles will not update more than once every `updateInterval` milliseconds when panning.
|
||
updateInterval: 200,
|
||
|
||
// @option zIndex: Number = 1
|
||
// The explicit zIndex of the tile layer.
|
||
zIndex: 1,
|
||
|
||
// @option bounds: LatLngBounds = undefined
|
||
// If set, tiles will only be loaded inside the set `LatLngBounds`.
|
||
bounds: null,
|
||
|
||
// @option minZoom: Number = 0
|
||
// The minimum zoom level down to which this layer will be displayed (inclusive).
|
||
minZoom: 0,
|
||
|
||
// @option maxZoom: Number = undefined
|
||
// The maximum zoom level up to which this layer will be displayed (inclusive).
|
||
maxZoom: undefined,
|
||
|
||
// @option maxNativeZoom: Number = undefined
|
||
// Maximum zoom number the tile source has available. If it is specified,
|
||
// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded
|
||
// from `maxNativeZoom` level and auto-scaled.
|
||
maxNativeZoom: undefined,
|
||
|
||
// @option minNativeZoom: Number = undefined
|
||
// Minimum zoom number the tile source has available. If it is specified,
|
||
// the tiles on all zoom levels lower than `minNativeZoom` will be loaded
|
||
// from `minNativeZoom` level and auto-scaled.
|
||
minNativeZoom: undefined,
|
||
|
||
// @option noWrap: Boolean = false
|
||
// Whether the layer is wrapped around the antimeridian. If `true`, the
|
||
// GridLayer will only be displayed once at low zoom levels. Has no
|
||
// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used
|
||
// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting
|
||
// tiles outside the CRS limits.
|
||
noWrap: false,
|
||
|
||
// @option pane: String = 'tilePane'
|
||
// `Map pane` where the grid layer will be added.
|
||
pane: 'tilePane',
|
||
|
||
// @option className: String = ''
|
||
// A custom class name to assign to the tile layer. Empty by default.
|
||
className: '',
|
||
|
||
// @option keepBuffer: Number = 2
|
||
// When panning the map, keep this many rows and columns of tiles before unloading them.
|
||
keepBuffer: 2
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
onAdd: function () {
|
||
this._initContainer();
|
||
|
||
this._levels = {};
|
||
this._tiles = {};
|
||
|
||
this._resetView(); // implicit _update() call
|
||
},
|
||
|
||
beforeAdd: function (map) {
|
||
map._addZoomLimit(this);
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
this._removeAllTiles();
|
||
remove(this._container);
|
||
map._removeZoomLimit(this);
|
||
this._container = null;
|
||
this._tileZoom = undefined;
|
||
},
|
||
|
||
// @method bringToFront: this
|
||
// Brings the tile layer to the top of all tile layers.
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._container);
|
||
this._setAutoZIndex(Math.max);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack: this
|
||
// Brings the tile layer to the bottom of all tile layers.
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._container);
|
||
this._setAutoZIndex(Math.min);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTML element that contains the tiles for this layer.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Changes the [opacity](#gridlayer-opacity) of the grid layer.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
this._updateOpacity();
|
||
return this;
|
||
},
|
||
|
||
// @method setZIndex(zIndex: Number): this
|
||
// Changes the [zIndex](#gridlayer-zindex) of the grid layer.
|
||
setZIndex: function (zIndex) {
|
||
this.options.zIndex = zIndex;
|
||
this._updateZIndex();
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method isLoading: Boolean
|
||
// Returns `true` if any tile in the grid layer has not finished loading.
|
||
isLoading: function () {
|
||
return this._loading;
|
||
},
|
||
|
||
// @method redraw: this
|
||
// Causes the layer to clear all the tiles and request them again.
|
||
redraw: function () {
|
||
if (this._map) {
|
||
this._removeAllTiles();
|
||
var tileZoom = this._clampZoom(this._map.getZoom());
|
||
if (tileZoom !== this._tileZoom) {
|
||
this._tileZoom = tileZoom;
|
||
this._updateLevels();
|
||
}
|
||
this._update();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
viewprereset: this._invalidateAll,
|
||
viewreset: this._resetView,
|
||
zoom: this._resetView,
|
||
moveend: this._onMoveEnd
|
||
};
|
||
|
||
if (!this.options.updateWhenIdle) {
|
||
// update tiles on move, but not more often than once per given interval
|
||
if (!this._onMove) {
|
||
this._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this);
|
||
}
|
||
|
||
events.move = this._onMove;
|
||
}
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
// @section Extension methods
|
||
// Layers extending `GridLayer` shall reimplement the following method.
|
||
// @method createTile(coords: Object, done?: Function): HTMLElement
|
||
// Called only internally, must be overridden by classes extending `GridLayer`.
|
||
// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback
|
||
// is specified, it must be called when the tile has finished loading and drawing.
|
||
createTile: function () {
|
||
return document.createElement('div');
|
||
},
|
||
|
||
// @section
|
||
// @method getTileSize: Point
|
||
// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.
|
||
getTileSize: function () {
|
||
var s = this.options.tileSize;
|
||
return s instanceof Point ? s : new Point(s, s);
|
||
},
|
||
|
||
_updateZIndex: function () {
|
||
if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {
|
||
this._container.style.zIndex = this.options.zIndex;
|
||
}
|
||
},
|
||
|
||
_setAutoZIndex: function (compare) {
|
||
// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)
|
||
|
||
var layers = this.getPane().children,
|
||
edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min
|
||
|
||
for (var i = 0, len = layers.length, zIndex; i < len; i++) {
|
||
|
||
zIndex = layers[i].style.zIndex;
|
||
|
||
if (layers[i] !== this._container && zIndex) {
|
||
edgeZIndex = compare(edgeZIndex, +zIndex);
|
||
}
|
||
}
|
||
|
||
if (isFinite(edgeZIndex)) {
|
||
this.options.zIndex = edgeZIndex + compare(-1, 1);
|
||
this._updateZIndex();
|
||
}
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
if (!this._map) { return; }
|
||
|
||
// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles
|
||
if (Browser.ielt9) { return; }
|
||
|
||
setOpacity(this._container, this.options.opacity);
|
||
|
||
var now = +new Date(),
|
||
nextFrame = false,
|
||
willPrune = false;
|
||
|
||
for (var key in this._tiles) {
|
||
var tile = this._tiles[key];
|
||
if (!tile.current || !tile.loaded) { continue; }
|
||
|
||
var fade = Math.min(1, (now - tile.loaded) / 200);
|
||
|
||
setOpacity(tile.el, fade);
|
||
if (fade < 1) {
|
||
nextFrame = true;
|
||
} else {
|
||
if (tile.active) {
|
||
willPrune = true;
|
||
} else {
|
||
this._onOpaqueTile(tile);
|
||
}
|
||
tile.active = true;
|
||
}
|
||
}
|
||
|
||
if (willPrune && !this._noPrune) { this._pruneTiles(); }
|
||
|
||
if (nextFrame) {
|
||
cancelAnimFrame(this._fadeFrame);
|
||
this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
|
||
}
|
||
},
|
||
|
||
_onOpaqueTile: falseFn,
|
||
|
||
_initContainer: function () {
|
||
if (this._container) { return; }
|
||
|
||
this._container = create$1('div', 'leaflet-layer ' + (this.options.className || ''));
|
||
this._updateZIndex();
|
||
|
||
if (this.options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
this.getPane().appendChild(this._container);
|
||
},
|
||
|
||
_updateLevels: function () {
|
||
|
||
var zoom = this._tileZoom,
|
||
maxZoom = this.options.maxZoom;
|
||
|
||
if (zoom === undefined) { return undefined; }
|
||
|
||
for (var z in this._levels) {
|
||
z = Number(z);
|
||
if (this._levels[z].el.children.length || z === zoom) {
|
||
this._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);
|
||
this._onUpdateLevel(z);
|
||
} else {
|
||
remove(this._levels[z].el);
|
||
this._removeTilesAtZoom(z);
|
||
this._onRemoveLevel(z);
|
||
delete this._levels[z];
|
||
}
|
||
}
|
||
|
||
var level = this._levels[zoom],
|
||
map = this._map;
|
||
|
||
if (!level) {
|
||
level = this._levels[zoom] = {};
|
||
|
||
level.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);
|
||
level.el.style.zIndex = maxZoom;
|
||
|
||
level.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();
|
||
level.zoom = zoom;
|
||
|
||
this._setZoomTransform(level, map.getCenter(), map.getZoom());
|
||
|
||
// force the browser to consider the newly added element for transition
|
||
falseFn(level.el.offsetWidth);
|
||
|
||
this._onCreateLevel(level);
|
||
}
|
||
|
||
this._level = level;
|
||
|
||
return level;
|
||
},
|
||
|
||
_onUpdateLevel: falseFn,
|
||
|
||
_onRemoveLevel: falseFn,
|
||
|
||
_onCreateLevel: falseFn,
|
||
|
||
_pruneTiles: function () {
|
||
if (!this._map) {
|
||
return;
|
||
}
|
||
|
||
var key, tile;
|
||
|
||
var zoom = this._map.getZoom();
|
||
if (zoom > this.options.maxZoom ||
|
||
zoom < this.options.minZoom) {
|
||
this._removeAllTiles();
|
||
return;
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
tile = this._tiles[key];
|
||
tile.retain = tile.current;
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
tile = this._tiles[key];
|
||
if (tile.current && !tile.active) {
|
||
var coords = tile.coords;
|
||
if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {
|
||
this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);
|
||
}
|
||
}
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
if (!this._tiles[key].retain) {
|
||
this._removeTile(key);
|
||
}
|
||
}
|
||
},
|
||
|
||
_removeTilesAtZoom: function (zoom) {
|
||
for (var key in this._tiles) {
|
||
if (this._tiles[key].coords.z !== zoom) {
|
||
continue;
|
||
}
|
||
this._removeTile(key);
|
||
}
|
||
},
|
||
|
||
_removeAllTiles: function () {
|
||
for (var key in this._tiles) {
|
||
this._removeTile(key);
|
||
}
|
||
},
|
||
|
||
_invalidateAll: function () {
|
||
for (var z in this._levels) {
|
||
remove(this._levels[z].el);
|
||
this._onRemoveLevel(Number(z));
|
||
delete this._levels[z];
|
||
}
|
||
this._removeAllTiles();
|
||
|
||
this._tileZoom = undefined;
|
||
},
|
||
|
||
_retainParent: function (x, y, z, minZoom) {
|
||
var x2 = Math.floor(x / 2),
|
||
y2 = Math.floor(y / 2),
|
||
z2 = z - 1,
|
||
coords2 = new Point(+x2, +y2);
|
||
coords2.z = +z2;
|
||
|
||
var key = this._tileCoordsToKey(coords2),
|
||
tile = this._tiles[key];
|
||
|
||
if (tile && tile.active) {
|
||
tile.retain = true;
|
||
return true;
|
||
|
||
} else if (tile && tile.loaded) {
|
||
tile.retain = true;
|
||
}
|
||
|
||
if (z2 > minZoom) {
|
||
return this._retainParent(x2, y2, z2, minZoom);
|
||
}
|
||
|
||
return false;
|
||
},
|
||
|
||
_retainChildren: function (x, y, z, maxZoom) {
|
||
|
||
for (var i = 2 * x; i < 2 * x + 2; i++) {
|
||
for (var j = 2 * y; j < 2 * y + 2; j++) {
|
||
|
||
var coords = new Point(i, j);
|
||
coords.z = z + 1;
|
||
|
||
var key = this._tileCoordsToKey(coords),
|
||
tile = this._tiles[key];
|
||
|
||
if (tile && tile.active) {
|
||
tile.retain = true;
|
||
continue;
|
||
|
||
} else if (tile && tile.loaded) {
|
||
tile.retain = true;
|
||
}
|
||
|
||
if (z + 1 < maxZoom) {
|
||
this._retainChildren(i, j, z + 1, maxZoom);
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
_resetView: function (e) {
|
||
var animating = e && (e.pinch || e.flyTo);
|
||
this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
this._setView(e.center, e.zoom, true, e.noUpdate);
|
||
},
|
||
|
||
_clampZoom: function (zoom) {
|
||
var options = this.options;
|
||
|
||
if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {
|
||
return options.minNativeZoom;
|
||
}
|
||
|
||
if (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {
|
||
return options.maxNativeZoom;
|
||
}
|
||
|
||
return zoom;
|
||
},
|
||
|
||
_setView: function (center, zoom, noPrune, noUpdate) {
|
||
var tileZoom = Math.round(zoom);
|
||
if ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||
|
||
(this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {
|
||
tileZoom = undefined;
|
||
} else {
|
||
tileZoom = this._clampZoom(tileZoom);
|
||
}
|
||
|
||
var tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);
|
||
|
||
if (!noUpdate || tileZoomChanged) {
|
||
|
||
this._tileZoom = tileZoom;
|
||
|
||
if (this._abortLoading) {
|
||
this._abortLoading();
|
||
}
|
||
|
||
this._updateLevels();
|
||
this._resetGrid();
|
||
|
||
if (tileZoom !== undefined) {
|
||
this._update(center);
|
||
}
|
||
|
||
if (!noPrune) {
|
||
this._pruneTiles();
|
||
}
|
||
|
||
// Flag to prevent _updateOpacity from pruning tiles during
|
||
// a zoom anim or a pinch gesture
|
||
this._noPrune = !!noPrune;
|
||
}
|
||
|
||
this._setZoomTransforms(center, zoom);
|
||
},
|
||
|
||
_setZoomTransforms: function (center, zoom) {
|
||
for (var i in this._levels) {
|
||
this._setZoomTransform(this._levels[i], center, zoom);
|
||
}
|
||
},
|
||
|
||
_setZoomTransform: function (level, center, zoom) {
|
||
var scale = this._map.getZoomScale(zoom, level.zoom),
|
||
translate = level.origin.multiplyBy(scale)
|
||
.subtract(this._map._getNewPixelOrigin(center, zoom)).round();
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(level.el, translate, scale);
|
||
} else {
|
||
setPosition(level.el, translate);
|
||
}
|
||
},
|
||
|
||
_resetGrid: function () {
|
||
var map = this._map,
|
||
crs = map.options.crs,
|
||
tileSize = this._tileSize = this.getTileSize(),
|
||
tileZoom = this._tileZoom;
|
||
|
||
var bounds = this._map.getPixelWorldBounds(this._tileZoom);
|
||
if (bounds) {
|
||
this._globalTileRange = this._pxBoundsToTileRange(bounds);
|
||
}
|
||
|
||
this._wrapX = crs.wrapLng && !this.options.noWrap && [
|
||
Math.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),
|
||
Math.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)
|
||
];
|
||
this._wrapY = crs.wrapLat && !this.options.noWrap && [
|
||
Math.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),
|
||
Math.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)
|
||
];
|
||
},
|
||
|
||
_onMoveEnd: function () {
|
||
if (!this._map || this._map._animatingZoom) { return; }
|
||
|
||
this._update();
|
||
},
|
||
|
||
_getTiledPixelBounds: function (center) {
|
||
var map = this._map,
|
||
mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),
|
||
scale = map.getZoomScale(mapZoom, this._tileZoom),
|
||
pixelCenter = map.project(center, this._tileZoom).floor(),
|
||
halfSize = map.getSize().divideBy(scale * 2);
|
||
|
||
return new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));
|
||
},
|
||
|
||
// Private method to load tiles in the grid's active zoom level according to map bounds
|
||
_update: function (center) {
|
||
var map = this._map;
|
||
if (!map) { return; }
|
||
var zoom = this._clampZoom(map.getZoom());
|
||
|
||
if (center === undefined) { center = map.getCenter(); }
|
||
if (this._tileZoom === undefined) { return; } // if out of minzoom/maxzoom
|
||
|
||
var pixelBounds = this._getTiledPixelBounds(center),
|
||
tileRange = this._pxBoundsToTileRange(pixelBounds),
|
||
tileCenter = tileRange.getCenter(),
|
||
queue = [],
|
||
margin = this.options.keepBuffer,
|
||
noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),
|
||
tileRange.getTopRight().add([margin, -margin]));
|
||
|
||
// Sanity check: panic if the tile range contains Infinity somewhere.
|
||
if (!(isFinite(tileRange.min.x) &&
|
||
isFinite(tileRange.min.y) &&
|
||
isFinite(tileRange.max.x) &&
|
||
isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }
|
||
|
||
for (var key in this._tiles) {
|
||
var c = this._tiles[key].coords;
|
||
if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {
|
||
this._tiles[key].current = false;
|
||
}
|
||
}
|
||
|
||
// _update just loads more tiles. If the tile zoom level differs too much
|
||
// from the map's, let _setView reset levels and prune old tiles.
|
||
if (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }
|
||
|
||
// create a queue of coordinates to load tiles from
|
||
for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {
|
||
for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {
|
||
var coords = new Point(i, j);
|
||
coords.z = this._tileZoom;
|
||
|
||
if (!this._isValidTile(coords)) { continue; }
|
||
|
||
var tile = this._tiles[this._tileCoordsToKey(coords)];
|
||
if (tile) {
|
||
tile.current = true;
|
||
} else {
|
||
queue.push(coords);
|
||
}
|
||
}
|
||
}
|
||
|
||
// sort tile queue to load tiles in order of their distance to center
|
||
queue.sort(function (a, b) {
|
||
return a.distanceTo(tileCenter) - b.distanceTo(tileCenter);
|
||
});
|
||
|
||
if (queue.length !== 0) {
|
||
// if it's the first batch of tiles to load
|
||
if (!this._loading) {
|
||
this._loading = true;
|
||
// @event loading: Event
|
||
// Fired when the grid layer starts loading tiles.
|
||
this.fire('loading');
|
||
}
|
||
|
||
// create DOM fragment to append tiles in one batch
|
||
var fragment = document.createDocumentFragment();
|
||
|
||
for (i = 0; i < queue.length; i++) {
|
||
this._addTile(queue[i], fragment);
|
||
}
|
||
|
||
this._level.el.appendChild(fragment);
|
||
}
|
||
},
|
||
|
||
_isValidTile: function (coords) {
|
||
var crs = this._map.options.crs;
|
||
|
||
if (!crs.infinite) {
|
||
// don't load tile if it's out of bounds and not wrapped
|
||
var bounds = this._globalTileRange;
|
||
if ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||
|
||
(!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }
|
||
}
|
||
|
||
if (!this.options.bounds) { return true; }
|
||
|
||
// don't load tile if it doesn't intersect the bounds in options
|
||
var tileBounds = this._tileCoordsToBounds(coords);
|
||
return toLatLngBounds(this.options.bounds).overlaps(tileBounds);
|
||
},
|
||
|
||
_keyToBounds: function (key) {
|
||
return this._tileCoordsToBounds(this._keyToTileCoords(key));
|
||
},
|
||
|
||
_tileCoordsToNwSe: function (coords) {
|
||
var map = this._map,
|
||
tileSize = this.getTileSize(),
|
||
nwPoint = coords.scaleBy(tileSize),
|
||
sePoint = nwPoint.add(tileSize),
|
||
nw = map.unproject(nwPoint, coords.z),
|
||
se = map.unproject(sePoint, coords.z);
|
||
return [nw, se];
|
||
},
|
||
|
||
// converts tile coordinates to its geographical bounds
|
||
_tileCoordsToBounds: function (coords) {
|
||
var bp = this._tileCoordsToNwSe(coords),
|
||
bounds = new LatLngBounds(bp[0], bp[1]);
|
||
|
||
if (!this.options.noWrap) {
|
||
bounds = this._map.wrapLatLngBounds(bounds);
|
||
}
|
||
return bounds;
|
||
},
|
||
// converts tile coordinates to key for the tile cache
|
||
_tileCoordsToKey: function (coords) {
|
||
return coords.x + ':' + coords.y + ':' + coords.z;
|
||
},
|
||
|
||
// converts tile cache key to coordinates
|
||
_keyToTileCoords: function (key) {
|
||
var k = key.split(':'),
|
||
coords = new Point(+k[0], +k[1]);
|
||
coords.z = +k[2];
|
||
return coords;
|
||
},
|
||
|
||
_removeTile: function (key) {
|
||
var tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
remove(tile.el);
|
||
|
||
delete this._tiles[key];
|
||
|
||
// @event tileunload: TileEvent
|
||
// Fired when a tile is removed (e.g. when a tile goes off the screen).
|
||
this.fire('tileunload', {
|
||
tile: tile.el,
|
||
coords: this._keyToTileCoords(key)
|
||
});
|
||
},
|
||
|
||
_initTile: function (tile) {
|
||
addClass(tile, 'leaflet-tile');
|
||
|
||
var tileSize = this.getTileSize();
|
||
tile.style.width = tileSize.x + 'px';
|
||
tile.style.height = tileSize.y + 'px';
|
||
|
||
tile.onselectstart = falseFn;
|
||
tile.onmousemove = falseFn;
|
||
|
||
// update opacity on tiles in IE7-8 because of filter inheritance problems
|
||
if (Browser.ielt9 && this.options.opacity < 1) {
|
||
setOpacity(tile, this.options.opacity);
|
||
}
|
||
},
|
||
|
||
_addTile: function (coords, container) {
|
||
var tilePos = this._getTilePos(coords),
|
||
key = this._tileCoordsToKey(coords);
|
||
|
||
var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));
|
||
|
||
this._initTile(tile);
|
||
|
||
// if createTile is defined with a second argument ("done" callback),
|
||
// we know that tile is async and will be ready later; otherwise
|
||
if (this.createTile.length < 2) {
|
||
// mark tile as ready, but delay one frame for opacity animation to happen
|
||
requestAnimFrame(bind(this._tileReady, this, coords, null, tile));
|
||
}
|
||
|
||
setPosition(tile, tilePos);
|
||
|
||
// save tile in cache
|
||
this._tiles[key] = {
|
||
el: tile,
|
||
coords: coords,
|
||
current: true
|
||
};
|
||
|
||
container.appendChild(tile);
|
||
// @event tileloadstart: TileEvent
|
||
// Fired when a tile is requested and starts loading.
|
||
this.fire('tileloadstart', {
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
},
|
||
|
||
_tileReady: function (coords, err, tile) {
|
||
if (err) {
|
||
// @event tileerror: TileErrorEvent
|
||
// Fired when there is an error loading a tile.
|
||
this.fire('tileerror', {
|
||
error: err,
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
}
|
||
|
||
var key = this._tileCoordsToKey(coords);
|
||
|
||
tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
tile.loaded = +new Date();
|
||
if (this._map._fadeAnimated) {
|
||
setOpacity(tile.el, 0);
|
||
cancelAnimFrame(this._fadeFrame);
|
||
this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
|
||
} else {
|
||
tile.active = true;
|
||
this._pruneTiles();
|
||
}
|
||
|
||
if (!err) {
|
||
addClass(tile.el, 'leaflet-tile-loaded');
|
||
|
||
// @event tileload: TileEvent
|
||
// Fired when a tile loads.
|
||
this.fire('tileload', {
|
||
tile: tile.el,
|
||
coords: coords
|
||
});
|
||
}
|
||
|
||
if (this._noTilesToLoad()) {
|
||
this._loading = false;
|
||
// @event load: Event
|
||
// Fired when the grid layer loaded all visible tiles.
|
||
this.fire('load');
|
||
|
||
if (Browser.ielt9 || !this._map._fadeAnimated) {
|
||
requestAnimFrame(this._pruneTiles, this);
|
||
} else {
|
||
// Wait a bit more than 0.2 secs (the duration of the tile fade-in)
|
||
// to trigger a pruning.
|
||
setTimeout(bind(this._pruneTiles, this), 250);
|
||
}
|
||
}
|
||
},
|
||
|
||
_getTilePos: function (coords) {
|
||
return coords.scaleBy(this.getTileSize()).subtract(this._level.origin);
|
||
},
|
||
|
||
_wrapCoords: function (coords) {
|
||
var newCoords = new Point(
|
||
this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x,
|
||
this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);
|
||
newCoords.z = coords.z;
|
||
return newCoords;
|
||
},
|
||
|
||
_pxBoundsToTileRange: function (bounds) {
|
||
var tileSize = this.getTileSize();
|
||
return new Bounds(
|
||
bounds.min.unscaleBy(tileSize).floor(),
|
||
bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));
|
||
},
|
||
|
||
_noTilesToLoad: function () {
|
||
for (var key in this._tiles) {
|
||
if (!this._tiles[key].loaded) { return false; }
|
||
}
|
||
return true;
|
||
}
|
||
});
|
||
|
||
// @factory L.gridLayer(options?: GridLayer options)
|
||
// Creates a new instance of GridLayer with the supplied options.
|
||
function gridLayer(options) {
|
||
return new GridLayer(options);
|
||
}
|
||
|
||
/*
|
||
* @class TileLayer
|
||
* @inherits GridLayer
|
||
* @aka L.TileLayer
|
||
* Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(map);
|
||
* ```
|
||
*
|
||
* @section URL template
|
||
* @example
|
||
*
|
||
* A string of the following form:
|
||
*
|
||
* ```
|
||
* 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'
|
||
* ```
|
||
*
|
||
* `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add "@2x" to the URL to load retina tiles.
|
||
*
|
||
* You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:
|
||
*
|
||
* ```
|
||
* L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});
|
||
* ```
|
||
*/
|
||
|
||
|
||
var TileLayer = GridLayer.extend({
|
||
|
||
// @section
|
||
// @aka TileLayer options
|
||
options: {
|
||
// @option minZoom: Number = 0
|
||
// The minimum zoom level down to which this layer will be displayed (inclusive).
|
||
minZoom: 0,
|
||
|
||
// @option maxZoom: Number = 18
|
||
// The maximum zoom level up to which this layer will be displayed (inclusive).
|
||
maxZoom: 18,
|
||
|
||
// @option subdomains: String|String[] = 'abc'
|
||
// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.
|
||
subdomains: 'abc',
|
||
|
||
// @option errorTileUrl: String = ''
|
||
// URL to the tile image to show in place of the tile that failed to load.
|
||
errorTileUrl: '',
|
||
|
||
// @option zoomOffset: Number = 0
|
||
// The zoom number used in tile URLs will be offset with this value.
|
||
zoomOffset: 0,
|
||
|
||
// @option tms: Boolean = false
|
||
// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).
|
||
tms: false,
|
||
|
||
// @option zoomReverse: Boolean = false
|
||
// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)
|
||
zoomReverse: false,
|
||
|
||
// @option detectRetina: Boolean = false
|
||
// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.
|
||
detectRetina: false,
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false,
|
||
|
||
// @option referrerPolicy: Boolean|String = false
|
||
// Whether the referrerPolicy attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.
|
||
// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer
|
||
// (e.g. to validate an API token).
|
||
// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.
|
||
referrerPolicy: false
|
||
},
|
||
|
||
initialize: function (url, options) {
|
||
|
||
this._url = url;
|
||
|
||
options = setOptions(this, options);
|
||
|
||
// detecting retina displays, adjusting tileSize and zoom levels
|
||
if (options.detectRetina && Browser.retina && options.maxZoom > 0) {
|
||
|
||
options.tileSize = Math.floor(options.tileSize / 2);
|
||
|
||
if (!options.zoomReverse) {
|
||
options.zoomOffset++;
|
||
options.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);
|
||
} else {
|
||
options.zoomOffset--;
|
||
options.minZoom = Math.min(options.maxZoom, options.minZoom + 1);
|
||
}
|
||
|
||
options.minZoom = Math.max(0, options.minZoom);
|
||
} else if (!options.zoomReverse) {
|
||
// make sure maxZoom is gte minZoom
|
||
options.maxZoom = Math.max(options.minZoom, options.maxZoom);
|
||
} else {
|
||
// make sure minZoom is lte maxZoom
|
||
options.minZoom = Math.min(options.maxZoom, options.minZoom);
|
||
}
|
||
|
||
if (typeof options.subdomains === 'string') {
|
||
options.subdomains = options.subdomains.split('');
|
||
}
|
||
|
||
this.on('tileunload', this._onTileRemove);
|
||
},
|
||
|
||
// @method setUrl(url: String, noRedraw?: Boolean): this
|
||
// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).
|
||
// If the URL does not change, the layer will not be redrawn unless
|
||
// the noRedraw parameter is set to false.
|
||
setUrl: function (url, noRedraw) {
|
||
if (this._url === url && noRedraw === undefined) {
|
||
noRedraw = true;
|
||
}
|
||
|
||
this._url = url;
|
||
|
||
if (!noRedraw) {
|
||
this.redraw();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method createTile(coords: Object, done?: Function): HTMLElement
|
||
// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)
|
||
// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`
|
||
// callback is called when the tile has been loaded.
|
||
createTile: function (coords, done) {
|
||
var tile = document.createElement('img');
|
||
|
||
on(tile, 'load', bind(this._tileOnLoad, this, done, tile));
|
||
on(tile, 'error', bind(this._tileOnError, this, done, tile));
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
// for this new option we follow the documented behavior
|
||
// more closely by only setting the property when string
|
||
if (typeof this.options.referrerPolicy === 'string') {
|
||
tile.referrerPolicy = this.options.referrerPolicy;
|
||
}
|
||
|
||
// The alt attribute is set to the empty string,
|
||
// allowing screen readers to ignore the decorative image tiles.
|
||
// https://www.w3.org/WAI/tutorials/images/decorative/
|
||
// https://www.w3.org/TR/html-aria/#el-img-empty-alt
|
||
tile.alt = '';
|
||
|
||
tile.src = this.getTileUrl(coords);
|
||
|
||
return tile;
|
||
},
|
||
|
||
// @section Extension methods
|
||
// @uninheritable
|
||
// Layers extending `TileLayer` might reimplement the following method.
|
||
// @method getTileUrl(coords: Object): String
|
||
// Called only internally, returns the URL for a tile given its coordinates.
|
||
// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.
|
||
getTileUrl: function (coords) {
|
||
var data = {
|
||
r: Browser.retina ? '@2x' : '',
|
||
s: this._getSubdomain(coords),
|
||
x: coords.x,
|
||
y: coords.y,
|
||
z: this._getZoomForUrl()
|
||
};
|
||
if (this._map && !this._map.options.crs.infinite) {
|
||
var invertedY = this._globalTileRange.max.y - coords.y;
|
||
if (this.options.tms) {
|
||
data['y'] = invertedY;
|
||
}
|
||
data['-y'] = invertedY;
|
||
}
|
||
|
||
return template(this._url, extend(data, this.options));
|
||
},
|
||
|
||
_tileOnLoad: function (done, tile) {
|
||
// For https://github.com/Leaflet/Leaflet/issues/3332
|
||
if (Browser.ielt9) {
|
||
setTimeout(bind(done, this, null, tile), 0);
|
||
} else {
|
||
done(null, tile);
|
||
}
|
||
},
|
||
|
||
_tileOnError: function (done, tile, e) {
|
||
var errorUrl = this.options.errorTileUrl;
|
||
if (errorUrl && tile.getAttribute('src') !== errorUrl) {
|
||
tile.src = errorUrl;
|
||
}
|
||
done(e, tile);
|
||
},
|
||
|
||
_onTileRemove: function (e) {
|
||
e.tile.onload = null;
|
||
},
|
||
|
||
_getZoomForUrl: function () {
|
||
var zoom = this._tileZoom,
|
||
maxZoom = this.options.maxZoom,
|
||
zoomReverse = this.options.zoomReverse,
|
||
zoomOffset = this.options.zoomOffset;
|
||
|
||
if (zoomReverse) {
|
||
zoom = maxZoom - zoom;
|
||
}
|
||
|
||
return zoom + zoomOffset;
|
||
},
|
||
|
||
_getSubdomain: function (tilePoint) {
|
||
var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
|
||
return this.options.subdomains[index];
|
||
},
|
||
|
||
// stops loading all tiles in the background layer
|
||
_abortLoading: function () {
|
||
var i, tile;
|
||
for (i in this._tiles) {
|
||
if (this._tiles[i].coords.z !== this._tileZoom) {
|
||
tile = this._tiles[i].el;
|
||
|
||
tile.onload = falseFn;
|
||
tile.onerror = falseFn;
|
||
|
||
if (!tile.complete) {
|
||
tile.src = emptyImageUrl;
|
||
var coords = this._tiles[i].coords;
|
||
remove(tile);
|
||
delete this._tiles[i];
|
||
// @event tileabort: TileEvent
|
||
// Fired when a tile was loading but is now not wanted.
|
||
this.fire('tileabort', {
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
_removeTile: function (key) {
|
||
var tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
// Cancels any pending http requests associated with the tile
|
||
tile.el.setAttribute('src', emptyImageUrl);
|
||
|
||
return GridLayer.prototype._removeTile.call(this, key);
|
||
},
|
||
|
||
_tileReady: function (coords, err, tile) {
|
||
if (!this._map || (tile && tile.getAttribute('src') === emptyImageUrl)) {
|
||
return;
|
||
}
|
||
|
||
return GridLayer.prototype._tileReady.call(this, coords, err, tile);
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)
|
||
// Instantiates a tile layer object given a `URL template` and optionally an options object.
|
||
|
||
function tileLayer(url, options) {
|
||
return new TileLayer(url, options);
|
||
}
|
||
|
||
/*
|
||
* @class TileLayer.WMS
|
||
* @inherits TileLayer
|
||
* @aka L.TileLayer.WMS
|
||
* Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
|
||
* layers: 'nexrad-n0r-900913',
|
||
* format: 'image/png',
|
||
* transparent: true,
|
||
* attribution: "Weather data © 2012 IEM Nexrad"
|
||
* });
|
||
* ```
|
||
*/
|
||
|
||
var TileLayerWMS = TileLayer.extend({
|
||
|
||
// @section
|
||
// @aka TileLayer.WMS options
|
||
// If any custom options not documented here are used, they will be sent to the
|
||
// WMS server as extra parameters in each request URL. This can be useful for
|
||
// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).
|
||
defaultWmsParams: {
|
||
service: 'WMS',
|
||
request: 'GetMap',
|
||
|
||
// @option layers: String = ''
|
||
// **(required)** Comma-separated list of WMS layers to show.
|
||
layers: '',
|
||
|
||
// @option styles: String = ''
|
||
// Comma-separated list of WMS styles.
|
||
styles: '',
|
||
|
||
// @option format: String = 'image/jpeg'
|
||
// WMS image format (use `'image/png'` for layers with transparency).
|
||
format: 'image/jpeg',
|
||
|
||
// @option transparent: Boolean = false
|
||
// If `true`, the WMS service will return images with transparency.
|
||
transparent: false,
|
||
|
||
// @option version: String = '1.1.1'
|
||
// Version of the WMS service to use
|
||
version: '1.1.1'
|
||
},
|
||
|
||
options: {
|
||
// @option crs: CRS = null
|
||
// Coordinate Reference System to use for the WMS requests, defaults to
|
||
// map CRS. Don't change this if you're not sure what it means.
|
||
crs: null,
|
||
|
||
// @option uppercase: Boolean = false
|
||
// If `true`, WMS request parameter keys will be uppercase.
|
||
uppercase: false
|
||
},
|
||
|
||
initialize: function (url, options) {
|
||
|
||
this._url = url;
|
||
|
||
var wmsParams = extend({}, this.defaultWmsParams);
|
||
|
||
// all keys that are not TileLayer options go to WMS params
|
||
for (var i in options) {
|
||
if (!(i in this.options)) {
|
||
wmsParams[i] = options[i];
|
||
}
|
||
}
|
||
|
||
options = setOptions(this, options);
|
||
|
||
var realRetina = options.detectRetina && Browser.retina ? 2 : 1;
|
||
var tileSize = this.getTileSize();
|
||
wmsParams.width = tileSize.x * realRetina;
|
||
wmsParams.height = tileSize.y * realRetina;
|
||
|
||
this.wmsParams = wmsParams;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
|
||
this._crs = this.options.crs || map.options.crs;
|
||
this._wmsVersion = parseFloat(this.wmsParams.version);
|
||
|
||
var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
|
||
this.wmsParams[projectionKey] = this._crs.code;
|
||
|
||
TileLayer.prototype.onAdd.call(this, map);
|
||
},
|
||
|
||
getTileUrl: function (coords) {
|
||
|
||
var tileBounds = this._tileCoordsToNwSe(coords),
|
||
crs = this._crs,
|
||
bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),
|
||
min = bounds.min,
|
||
max = bounds.max,
|
||
bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?
|
||
[min.y, min.x, max.y, max.x] :
|
||
[min.x, min.y, max.x, max.y]).join(','),
|
||
url = TileLayer.prototype.getTileUrl.call(this, coords);
|
||
return url +
|
||
getParamString(this.wmsParams, url, this.options.uppercase) +
|
||
(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;
|
||
},
|
||
|
||
// @method setParams(params: Object, noRedraw?: Boolean): this
|
||
// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).
|
||
setParams: function (params, noRedraw) {
|
||
|
||
extend(this.wmsParams, params);
|
||
|
||
if (!noRedraw) {
|
||
this.redraw();
|
||
}
|
||
|
||
return this;
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)
|
||
// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.
|
||
function tileLayerWMS(url, options) {
|
||
return new TileLayerWMS(url, options);
|
||
}
|
||
|
||
TileLayer.WMS = TileLayerWMS;
|
||
tileLayer.wms = tileLayerWMS;
|
||
|
||
/*
|
||
* @class Renderer
|
||
* @inherits Layer
|
||
* @aka L.Renderer
|
||
*
|
||
* Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the
|
||
* DOM container of the renderer, its bounds, and its zoom animation.
|
||
*
|
||
* A `Renderer` works as an implicit layer group for all `Path`s - the renderer
|
||
* itself can be added or removed to the map. All paths use a renderer, which can
|
||
* be implicit (the map will decide the type of renderer and use it automatically)
|
||
* or explicit (using the [`renderer`](#path-renderer) option of the path).
|
||
*
|
||
* Do not use this class directly, use `SVG` and `Canvas` instead.
|
||
*
|
||
* @event update: Event
|
||
* Fired when the renderer updates its bounds, center and zoom, for example when
|
||
* its map has moved
|
||
*/
|
||
|
||
var Renderer = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Renderer options
|
||
options: {
|
||
// @option padding: Number = 0.1
|
||
// How much to extend the clip area around the map view (relative to its size)
|
||
// e.g. 0.1 would be 10% of map view in each direction
|
||
padding: 0.1
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
stamp(this);
|
||
this._layers = this._layers || {};
|
||
},
|
||
|
||
onAdd: function () {
|
||
if (!this._container) {
|
||
this._initContainer(); // defined by renderer implementations
|
||
|
||
if (this._zoomAnimated) {
|
||
addClass(this._container, 'leaflet-zoom-animated');
|
||
}
|
||
}
|
||
|
||
this.getPane().appendChild(this._container);
|
||
this._update();
|
||
this.on('update', this._updatePaths, this);
|
||
},
|
||
|
||
onRemove: function () {
|
||
this.off('update', this._updatePaths, this);
|
||
this._destroyContainer();
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
viewreset: this._reset,
|
||
zoom: this._onZoom,
|
||
moveend: this._update,
|
||
zoomend: this._onZoomEnd
|
||
};
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._onAnimZoom;
|
||
}
|
||
return events;
|
||
},
|
||
|
||
_onAnimZoom: function (ev) {
|
||
this._updateTransform(ev.center, ev.zoom);
|
||
},
|
||
|
||
_onZoom: function () {
|
||
this._updateTransform(this._map.getCenter(), this._map.getZoom());
|
||
},
|
||
|
||
_updateTransform: function (center, zoom) {
|
||
var scale = this._map.getZoomScale(zoom, this._zoom),
|
||
viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),
|
||
currentCenterPoint = this._map.project(this._center, zoom),
|
||
|
||
topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)
|
||
.subtract(this._map._getNewPixelOrigin(center, zoom));
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(this._container, topLeftOffset, scale);
|
||
} else {
|
||
setPosition(this._container, topLeftOffset);
|
||
}
|
||
},
|
||
|
||
_reset: function () {
|
||
this._update();
|
||
this._updateTransform(this._center, this._zoom);
|
||
|
||
for (var id in this._layers) {
|
||
this._layers[id]._reset();
|
||
}
|
||
},
|
||
|
||
_onZoomEnd: function () {
|
||
for (var id in this._layers) {
|
||
this._layers[id]._project();
|
||
}
|
||
},
|
||
|
||
_updatePaths: function () {
|
||
for (var id in this._layers) {
|
||
this._layers[id]._update();
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
|
||
// Subclasses are responsible of firing the 'update' event.
|
||
var p = this.options.padding,
|
||
size = this._map.getSize(),
|
||
min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
|
||
|
||
this._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());
|
||
|
||
this._center = this._map.getCenter();
|
||
this._zoom = this._map.getZoom();
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Canvas
|
||
* @inherits Renderer
|
||
* @aka L.Canvas
|
||
*
|
||
* Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
|
||
* Inherits `Renderer`.
|
||
*
|
||
* Due to [technical limitations](https://caniuse.com/canvas), Canvas is not
|
||
* available in all web browsers, notably IE8, and overlapping geometries might
|
||
* not display properly in some edge cases.
|
||
*
|
||
* @example
|
||
*
|
||
* Use Canvas by default for all paths in the map:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map', {
|
||
* renderer: L.canvas()
|
||
* });
|
||
* ```
|
||
*
|
||
* Use a Canvas renderer with extra padding for specific vector geometries:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map');
|
||
* var myRenderer = L.canvas({ padding: 0.5 });
|
||
* var line = L.polyline( coordinates, { renderer: myRenderer } );
|
||
* var circle = L.circle( center, { renderer: myRenderer } );
|
||
* ```
|
||
*/
|
||
|
||
var Canvas = Renderer.extend({
|
||
|
||
// @section
|
||
// @aka Canvas options
|
||
options: {
|
||
// @option tolerance: Number = 0
|
||
// How much to extend the click tolerance around a path/object on the map.
|
||
tolerance: 0
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = Renderer.prototype.getEvents.call(this);
|
||
events.viewprereset = this._onViewPreReset;
|
||
return events;
|
||
},
|
||
|
||
_onViewPreReset: function () {
|
||
// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once
|
||
this._postponeUpdatePaths = true;
|
||
},
|
||
|
||
onAdd: function () {
|
||
Renderer.prototype.onAdd.call(this);
|
||
|
||
// Redraw vectors since canvas is cleared upon removal,
|
||
// in case of removing the renderer itself from the map.
|
||
this._draw();
|
||
},
|
||
|
||
_initContainer: function () {
|
||
var container = this._container = document.createElement('canvas');
|
||
|
||
on(container, 'mousemove', this._onMouseMove, this);
|
||
on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);
|
||
on(container, 'mouseout', this._handleMouseOut, this);
|
||
container['_leaflet_disable_events'] = true;
|
||
|
||
this._ctx = container.getContext('2d');
|
||
},
|
||
|
||
_destroyContainer: function () {
|
||
cancelAnimFrame(this._redrawRequest);
|
||
delete this._ctx;
|
||
remove(this._container);
|
||
off(this._container);
|
||
delete this._container;
|
||
},
|
||
|
||
_updatePaths: function () {
|
||
if (this._postponeUpdatePaths) { return; }
|
||
|
||
var layer;
|
||
this._redrawBounds = null;
|
||
for (var id in this._layers) {
|
||
layer = this._layers[id];
|
||
layer._update();
|
||
}
|
||
this._redraw();
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom && this._bounds) { return; }
|
||
|
||
Renderer.prototype._update.call(this);
|
||
|
||
var b = this._bounds,
|
||
container = this._container,
|
||
size = b.getSize(),
|
||
m = Browser.retina ? 2 : 1;
|
||
|
||
setPosition(container, b.min);
|
||
|
||
// set canvas size (also clearing it); use double size on retina
|
||
container.width = m * size.x;
|
||
container.height = m * size.y;
|
||
container.style.width = size.x + 'px';
|
||
container.style.height = size.y + 'px';
|
||
|
||
if (Browser.retina) {
|
||
this._ctx.scale(2, 2);
|
||
}
|
||
|
||
// translate so we use the same path coordinates after canvas element moves
|
||
this._ctx.translate(-b.min.x, -b.min.y);
|
||
|
||
// Tell paths to redraw themselves
|
||
this.fire('update');
|
||
},
|
||
|
||
_reset: function () {
|
||
Renderer.prototype._reset.call(this);
|
||
|
||
if (this._postponeUpdatePaths) {
|
||
this._postponeUpdatePaths = false;
|
||
this._updatePaths();
|
||
}
|
||
},
|
||
|
||
_initPath: function (layer) {
|
||
this._updateDashArray(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
|
||
var order = layer._order = {
|
||
layer: layer,
|
||
prev: this._drawLast,
|
||
next: null
|
||
};
|
||
if (this._drawLast) { this._drawLast.next = order; }
|
||
this._drawLast = order;
|
||
this._drawFirst = this._drawFirst || this._drawLast;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
var order = layer._order;
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else {
|
||
this._drawLast = prev;
|
||
}
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else {
|
||
this._drawFirst = next;
|
||
}
|
||
|
||
delete layer._order;
|
||
|
||
delete this._layers[stamp(layer)];
|
||
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updatePath: function (layer) {
|
||
// Redraw the union of the layer's old pixel
|
||
// bounds and the new pixel bounds.
|
||
this._extendRedrawBounds(layer);
|
||
layer._project();
|
||
layer._update();
|
||
// The redraw will extend the redraw bounds
|
||
// with the new pixel bounds.
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
this._updateDashArray(layer);
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updateDashArray: function (layer) {
|
||
if (typeof layer.options.dashArray === 'string') {
|
||
var parts = layer.options.dashArray.split(/[, ]+/),
|
||
dashArray = [],
|
||
dashValue,
|
||
i;
|
||
for (i = 0; i < parts.length; i++) {
|
||
dashValue = Number(parts[i]);
|
||
// Ignore dash array containing invalid lengths
|
||
if (isNaN(dashValue)) { return; }
|
||
dashArray.push(dashValue);
|
||
}
|
||
layer.options._dashArray = dashArray;
|
||
} else {
|
||
layer.options._dashArray = layer.options.dashArray;
|
||
}
|
||
},
|
||
|
||
_requestRedraw: function (layer) {
|
||
if (!this._map) { return; }
|
||
|
||
this._extendRedrawBounds(layer);
|
||
this._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this);
|
||
},
|
||
|
||
_extendRedrawBounds: function (layer) {
|
||
if (layer._pxBounds) {
|
||
var padding = (layer.options.weight || 0) + 1;
|
||
this._redrawBounds = this._redrawBounds || new Bounds();
|
||
this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));
|
||
this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));
|
||
}
|
||
},
|
||
|
||
_redraw: function () {
|
||
this._redrawRequest = null;
|
||
|
||
if (this._redrawBounds) {
|
||
this._redrawBounds.min._floor();
|
||
this._redrawBounds.max._ceil();
|
||
}
|
||
|
||
this._clear(); // clear layers in redraw bounds
|
||
this._draw(); // draw layers
|
||
|
||
this._redrawBounds = null;
|
||
},
|
||
|
||
_clear: function () {
|
||
var bounds = this._redrawBounds;
|
||
if (bounds) {
|
||
var size = bounds.getSize();
|
||
this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);
|
||
} else {
|
||
this._ctx.save();
|
||
this._ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||
this._ctx.clearRect(0, 0, this._container.width, this._container.height);
|
||
this._ctx.restore();
|
||
}
|
||
},
|
||
|
||
_draw: function () {
|
||
var layer, bounds = this._redrawBounds;
|
||
this._ctx.save();
|
||
if (bounds) {
|
||
var size = bounds.getSize();
|
||
this._ctx.beginPath();
|
||
this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);
|
||
this._ctx.clip();
|
||
}
|
||
|
||
this._drawing = true;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {
|
||
layer._updatePath();
|
||
}
|
||
}
|
||
|
||
this._drawing = false;
|
||
|
||
this._ctx.restore(); // Restore state before clipping.
|
||
},
|
||
|
||
_updatePoly: function (layer, closed) {
|
||
if (!this._drawing) { return; }
|
||
|
||
var i, j, len2, p,
|
||
parts = layer._parts,
|
||
len = parts.length,
|
||
ctx = this._ctx;
|
||
|
||
if (!len) { return; }
|
||
|
||
ctx.beginPath();
|
||
|
||
for (i = 0; i < len; i++) {
|
||
for (j = 0, len2 = parts[i].length; j < len2; j++) {
|
||
p = parts[i][j];
|
||
ctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);
|
||
}
|
||
if (closed) {
|
||
ctx.closePath();
|
||
}
|
||
}
|
||
|
||
this._fillStroke(ctx, layer);
|
||
|
||
// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
|
||
if (!this._drawing || layer._empty()) { return; }
|
||
|
||
var p = layer._point,
|
||
ctx = this._ctx,
|
||
r = Math.max(Math.round(layer._radius), 1),
|
||
s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;
|
||
|
||
if (s !== 1) {
|
||
ctx.save();
|
||
ctx.scale(1, s);
|
||
}
|
||
|
||
ctx.beginPath();
|
||
ctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);
|
||
|
||
if (s !== 1) {
|
||
ctx.restore();
|
||
}
|
||
|
||
this._fillStroke(ctx, layer);
|
||
},
|
||
|
||
_fillStroke: function (ctx, layer) {
|
||
var options = layer.options;
|
||
|
||
if (options.fill) {
|
||
ctx.globalAlpha = options.fillOpacity;
|
||
ctx.fillStyle = options.fillColor || options.color;
|
||
ctx.fill(options.fillRule || 'evenodd');
|
||
}
|
||
|
||
if (options.stroke && options.weight !== 0) {
|
||
if (ctx.setLineDash) {
|
||
ctx.setLineDash(layer.options && layer.options._dashArray || []);
|
||
}
|
||
ctx.globalAlpha = options.opacity;
|
||
ctx.lineWidth = options.weight;
|
||
ctx.strokeStyle = options.color;
|
||
ctx.lineCap = options.lineCap;
|
||
ctx.lineJoin = options.lineJoin;
|
||
ctx.stroke();
|
||
}
|
||
},
|
||
|
||
// Canvas obviously doesn't have mouse events for individual drawn objects,
|
||
// so we emulate that by calculating what's under the mouse on mousemove/click manually
|
||
|
||
_onClick: function (e) {
|
||
var point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (layer.options.interactive && layer._containsPoint(point)) {
|
||
if (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {
|
||
clickedLayer = layer;
|
||
}
|
||
}
|
||
}
|
||
this._fireEvent(clickedLayer ? [clickedLayer] : false, e);
|
||
},
|
||
|
||
_onMouseMove: function (e) {
|
||
if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }
|
||
|
||
var point = this._map.mouseEventToLayerPoint(e);
|
||
this._handleMouseHover(e, point);
|
||
},
|
||
|
||
|
||
_handleMouseOut: function (e) {
|
||
var layer = this._hoveredLayer;
|
||
if (layer) {
|
||
// if we're leaving the layer, fire mouseout
|
||
removeClass(this._container, 'leaflet-interactive');
|
||
this._fireEvent([layer], e, 'mouseout');
|
||
this._hoveredLayer = null;
|
||
this._mouseHoverThrottled = false;
|
||
}
|
||
},
|
||
|
||
_handleMouseHover: function (e, point) {
|
||
if (this._mouseHoverThrottled) {
|
||
return;
|
||
}
|
||
|
||
var layer, candidateHoveredLayer;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (layer.options.interactive && layer._containsPoint(point)) {
|
||
candidateHoveredLayer = layer;
|
||
}
|
||
}
|
||
|
||
if (candidateHoveredLayer !== this._hoveredLayer) {
|
||
this._handleMouseOut(e);
|
||
|
||
if (candidateHoveredLayer) {
|
||
addClass(this._container, 'leaflet-interactive'); // change cursor
|
||
this._fireEvent([candidateHoveredLayer], e, 'mouseover');
|
||
this._hoveredLayer = candidateHoveredLayer;
|
||
}
|
||
}
|
||
|
||
this._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);
|
||
|
||
this._mouseHoverThrottled = true;
|
||
setTimeout(bind(function () {
|
||
this._mouseHoverThrottled = false;
|
||
}, this), 32);
|
||
},
|
||
|
||
_fireEvent: function (layers, e, type) {
|
||
this._map._fireDOMEvent(e, type || e.type, layers);
|
||
},
|
||
|
||
_bringToFront: function (layer) {
|
||
var order = layer._order;
|
||
|
||
if (!order) { return; }
|
||
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else {
|
||
// Already last
|
||
return;
|
||
}
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else if (next) {
|
||
// Update first entry unless this is the
|
||
// single entry
|
||
this._drawFirst = next;
|
||
}
|
||
|
||
order.prev = this._drawLast;
|
||
this._drawLast.next = order;
|
||
|
||
order.next = null;
|
||
this._drawLast = order;
|
||
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
var order = layer._order;
|
||
|
||
if (!order) { return; }
|
||
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else {
|
||
// Already first
|
||
return;
|
||
}
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else if (prev) {
|
||
// Update last entry unless this is the
|
||
// single entry
|
||
this._drawLast = prev;
|
||
}
|
||
|
||
order.prev = null;
|
||
|
||
order.next = this._drawFirst;
|
||
this._drawFirst.prev = order;
|
||
this._drawFirst = order;
|
||
|
||
this._requestRedraw(layer);
|
||
}
|
||
});
|
||
|
||
// @factory L.canvas(options?: Renderer options)
|
||
// Creates a Canvas renderer with the given options.
|
||
function canvas(options) {
|
||
return Browser.canvas ? new Canvas(options) : null;
|
||
}
|
||
|
||
/*
|
||
* Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
|
||
*/
|
||
|
||
|
||
var vmlCreate = (function () {
|
||
try {
|
||
document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
|
||
return function (name) {
|
||
return document.createElement('<lvml:' + name + ' class="lvml">');
|
||
};
|
||
} catch (e) {
|
||
// Do not return fn from catch block so `e` can be garbage collected
|
||
// See https://github.com/Leaflet/Leaflet/pull/7279
|
||
}
|
||
return function (name) {
|
||
return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
|
||
};
|
||
})();
|
||
|
||
|
||
/*
|
||
* @class SVG
|
||
*
|
||
*
|
||
* VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility
|
||
* with old versions of Internet Explorer.
|
||
*/
|
||
|
||
// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences
|
||
var vmlMixin = {
|
||
|
||
_initContainer: function () {
|
||
this._container = create$1('div', 'leaflet-vml-container');
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom) { return; }
|
||
Renderer.prototype._update.call(this);
|
||
this.fire('update');
|
||
},
|
||
|
||
_initPath: function (layer) {
|
||
var container = layer._container = vmlCreate('shape');
|
||
|
||
addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));
|
||
|
||
container.coordsize = '1 1';
|
||
|
||
layer._path = vmlCreate('path');
|
||
container.appendChild(layer._path);
|
||
|
||
this._updateStyle(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
var container = layer._container;
|
||
this._container.appendChild(container);
|
||
|
||
if (layer.options.interactive) {
|
||
layer.addInteractiveTarget(container);
|
||
}
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
var container = layer._container;
|
||
remove(container);
|
||
layer.removeInteractiveTarget(container);
|
||
delete this._layers[stamp(layer)];
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
var stroke = layer._stroke,
|
||
fill = layer._fill,
|
||
options = layer.options,
|
||
container = layer._container;
|
||
|
||
container.stroked = !!options.stroke;
|
||
container.filled = !!options.fill;
|
||
|
||
if (options.stroke) {
|
||
if (!stroke) {
|
||
stroke = layer._stroke = vmlCreate('stroke');
|
||
}
|
||
container.appendChild(stroke);
|
||
stroke.weight = options.weight + 'px';
|
||
stroke.color = options.color;
|
||
stroke.opacity = options.opacity;
|
||
|
||
if (options.dashArray) {
|
||
stroke.dashStyle = isArray(options.dashArray) ?
|
||
options.dashArray.join(' ') :
|
||
options.dashArray.replace(/( *, *)/g, ' ');
|
||
} else {
|
||
stroke.dashStyle = '';
|
||
}
|
||
stroke.endcap = options.lineCap.replace('butt', 'flat');
|
||
stroke.joinstyle = options.lineJoin;
|
||
|
||
} else if (stroke) {
|
||
container.removeChild(stroke);
|
||
layer._stroke = null;
|
||
}
|
||
|
||
if (options.fill) {
|
||
if (!fill) {
|
||
fill = layer._fill = vmlCreate('fill');
|
||
}
|
||
container.appendChild(fill);
|
||
fill.color = options.fillColor || options.color;
|
||
fill.opacity = options.fillOpacity;
|
||
|
||
} else if (fill) {
|
||
container.removeChild(fill);
|
||
layer._fill = null;
|
||
}
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
var p = layer._point.round(),
|
||
r = Math.round(layer._radius),
|
||
r2 = Math.round(layer._radiusY || r);
|
||
|
||
this._setPath(layer, layer._empty() ? 'M0 0' :
|
||
'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));
|
||
},
|
||
|
||
_setPath: function (layer, path) {
|
||
layer._path.v = path;
|
||
},
|
||
|
||
_bringToFront: function (layer) {
|
||
toFront(layer._container);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
toBack(layer._container);
|
||
}
|
||
};
|
||
|
||
var create = Browser.vml ? vmlCreate : svgCreate;
|
||
|
||
/*
|
||
* @class SVG
|
||
* @inherits Renderer
|
||
* @aka L.SVG
|
||
*
|
||
* Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).
|
||
* Inherits `Renderer`.
|
||
*
|
||
* Due to [technical limitations](https://caniuse.com/svg), SVG is not
|
||
* available in all web browsers, notably Android 2.x and 3.x.
|
||
*
|
||
* Although SVG is not available on IE7 and IE8, these browsers support
|
||
* [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)
|
||
* (a now deprecated technology), and the SVG renderer will fall back to VML in
|
||
* this case.
|
||
*
|
||
* @example
|
||
*
|
||
* Use SVG by default for all paths in the map:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map', {
|
||
* renderer: L.svg()
|
||
* });
|
||
* ```
|
||
*
|
||
* Use a SVG renderer with extra padding for specific vector geometries:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map');
|
||
* var myRenderer = L.svg({ padding: 0.5 });
|
||
* var line = L.polyline( coordinates, { renderer: myRenderer } );
|
||
* var circle = L.circle( center, { renderer: myRenderer } );
|
||
* ```
|
||
*/
|
||
|
||
var SVG = Renderer.extend({
|
||
|
||
_initContainer: function () {
|
||
this._container = create('svg');
|
||
|
||
// makes it possible to click through svg root; we'll reset it back in individual paths
|
||
this._container.setAttribute('pointer-events', 'none');
|
||
|
||
this._rootGroup = create('g');
|
||
this._container.appendChild(this._rootGroup);
|
||
},
|
||
|
||
_destroyContainer: function () {
|
||
remove(this._container);
|
||
off(this._container);
|
||
delete this._container;
|
||
delete this._rootGroup;
|
||
delete this._svgSize;
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom && this._bounds) { return; }
|
||
|
||
Renderer.prototype._update.call(this);
|
||
|
||
var b = this._bounds,
|
||
size = b.getSize(),
|
||
container = this._container;
|
||
|
||
// set size of svg-container if changed
|
||
if (!this._svgSize || !this._svgSize.equals(size)) {
|
||
this._svgSize = size;
|
||
container.setAttribute('width', size.x);
|
||
container.setAttribute('height', size.y);
|
||
}
|
||
|
||
// movement: update container viewBox so that we don't have to change coordinates of individual layers
|
||
setPosition(container, b.min);
|
||
container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));
|
||
|
||
this.fire('update');
|
||
},
|
||
|
||
// methods below are called by vector layers implementations
|
||
|
||
_initPath: function (layer) {
|
||
var path = layer._path = create('path');
|
||
|
||
// @namespace Path
|
||
// @option className: String = null
|
||
// Custom class name set on an element. Only for SVG renderer.
|
||
if (layer.options.className) {
|
||
addClass(path, layer.options.className);
|
||
}
|
||
|
||
if (layer.options.interactive) {
|
||
addClass(path, 'leaflet-interactive');
|
||
}
|
||
|
||
this._updateStyle(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
if (!this._rootGroup) { this._initContainer(); }
|
||
this._rootGroup.appendChild(layer._path);
|
||
layer.addInteractiveTarget(layer._path);
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
remove(layer._path);
|
||
layer.removeInteractiveTarget(layer._path);
|
||
delete this._layers[stamp(layer)];
|
||
},
|
||
|
||
_updatePath: function (layer) {
|
||
layer._project();
|
||
layer._update();
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
var path = layer._path,
|
||
options = layer.options;
|
||
|
||
if (!path) { return; }
|
||
|
||
if (options.stroke) {
|
||
path.setAttribute('stroke', options.color);
|
||
path.setAttribute('stroke-opacity', options.opacity);
|
||
path.setAttribute('stroke-width', options.weight);
|
||
path.setAttribute('stroke-linecap', options.lineCap);
|
||
path.setAttribute('stroke-linejoin', options.lineJoin);
|
||
|
||
if (options.dashArray) {
|
||
path.setAttribute('stroke-dasharray', options.dashArray);
|
||
} else {
|
||
path.removeAttribute('stroke-dasharray');
|
||
}
|
||
|
||
if (options.dashOffset) {
|
||
path.setAttribute('stroke-dashoffset', options.dashOffset);
|
||
} else {
|
||
path.removeAttribute('stroke-dashoffset');
|
||
}
|
||
} else {
|
||
path.setAttribute('stroke', 'none');
|
||
}
|
||
|
||
if (options.fill) {
|
||
path.setAttribute('fill', options.fillColor || options.color);
|
||
path.setAttribute('fill-opacity', options.fillOpacity);
|
||
path.setAttribute('fill-rule', options.fillRule || 'evenodd');
|
||
} else {
|
||
path.setAttribute('fill', 'none');
|
||
}
|
||
},
|
||
|
||
_updatePoly: function (layer, closed) {
|
||
this._setPath(layer, pointsToPath(layer._parts, closed));
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
var p = layer._point,
|
||
r = Math.max(Math.round(layer._radius), 1),
|
||
r2 = Math.max(Math.round(layer._radiusY), 1) || r,
|
||
arc = 'a' + r + ',' + r2 + ' 0 1,0 ';
|
||
|
||
// drawing a circle with two half-arcs
|
||
var d = layer._empty() ? 'M0 0' :
|
||
'M' + (p.x - r) + ',' + p.y +
|
||
arc + (r * 2) + ',0 ' +
|
||
arc + (-r * 2) + ',0 ';
|
||
|
||
this._setPath(layer, d);
|
||
},
|
||
|
||
_setPath: function (layer, path) {
|
||
layer._path.setAttribute('d', path);
|
||
},
|
||
|
||
// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements
|
||
_bringToFront: function (layer) {
|
||
toFront(layer._path);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
toBack(layer._path);
|
||
}
|
||
});
|
||
|
||
if (Browser.vml) {
|
||
SVG.include(vmlMixin);
|
||
}
|
||
|
||
// @namespace SVG
|
||
// @factory L.svg(options?: Renderer options)
|
||
// Creates a SVG renderer with the given options.
|
||
function svg(options) {
|
||
return Browser.svg || Browser.vml ? new SVG(options) : null;
|
||
}
|
||
|
||
Map.include({
|
||
// @namespace Map; @method getRenderer(layer: Path): Renderer
|
||
// Returns the instance of `Renderer` that should be used to render the given
|
||
// `Path`. It will ensure that the `renderer` options of the map and paths
|
||
// are respected, and that the renderers do exist on the map.
|
||
getRenderer: function (layer) {
|
||
// @namespace Path; @option renderer: Renderer
|
||
// Use this specific instance of `Renderer` for this path. Takes
|
||
// precedence over the map's [default renderer](#map-renderer).
|
||
var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
|
||
|
||
if (!renderer) {
|
||
renderer = this._renderer = this._createRenderer();
|
||
}
|
||
|
||
if (!this.hasLayer(renderer)) {
|
||
this.addLayer(renderer);
|
||
}
|
||
return renderer;
|
||
},
|
||
|
||
_getPaneRenderer: function (name) {
|
||
if (name === 'overlayPane' || name === undefined) {
|
||
return false;
|
||
}
|
||
|
||
var renderer = this._paneRenderers[name];
|
||
if (renderer === undefined) {
|
||
renderer = this._createRenderer({pane: name});
|
||
this._paneRenderers[name] = renderer;
|
||
}
|
||
return renderer;
|
||
},
|
||
|
||
_createRenderer: function (options) {
|
||
// @namespace Map; @option preferCanvas: Boolean = false
|
||
// Whether `Path`s should be rendered on a `Canvas` renderer.
|
||
// By default, all `Path`s are rendered in a `SVG` renderer.
|
||
return (this.options.preferCanvas && canvas(options)) || svg(options);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
|
||
*/
|
||
|
||
/*
|
||
* @class Rectangle
|
||
* @aka L.Rectangle
|
||
* @inherits Polygon
|
||
*
|
||
* A class for drawing rectangle overlays on a map. Extends `Polygon`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // define rectangle geographical bounds
|
||
* var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
|
||
*
|
||
* // create an orange rectangle
|
||
* L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
|
||
*
|
||
* // zoom the map to the rectangle bounds
|
||
* map.fitBounds(bounds);
|
||
* ```
|
||
*
|
||
*/
|
||
|
||
|
||
var Rectangle = Polygon.extend({
|
||
initialize: function (latLngBounds, options) {
|
||
Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
|
||
},
|
||
|
||
// @method setBounds(latLngBounds: LatLngBounds): this
|
||
// Redraws the rectangle with the passed bounds.
|
||
setBounds: function (latLngBounds) {
|
||
return this.setLatLngs(this._boundsToLatLngs(latLngBounds));
|
||
},
|
||
|
||
_boundsToLatLngs: function (latLngBounds) {
|
||
latLngBounds = toLatLngBounds(latLngBounds);
|
||
return [
|
||
latLngBounds.getSouthWest(),
|
||
latLngBounds.getNorthWest(),
|
||
latLngBounds.getNorthEast(),
|
||
latLngBounds.getSouthEast()
|
||
];
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)
|
||
function rectangle(latLngBounds, options) {
|
||
return new Rectangle(latLngBounds, options);
|
||
}
|
||
|
||
SVG.create = create;
|
||
SVG.pointsToPath = pointsToPath;
|
||
|
||
GeoJSON.geometryToLayer = geometryToLayer;
|
||
GeoJSON.coordsToLatLng = coordsToLatLng;
|
||
GeoJSON.coordsToLatLngs = coordsToLatLngs;
|
||
GeoJSON.latLngToCoords = latLngToCoords;
|
||
GeoJSON.latLngsToCoords = latLngsToCoords;
|
||
GeoJSON.getFeature = getFeature;
|
||
GeoJSON.asFeature = asFeature;
|
||
|
||
/*
|
||
* L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map
|
||
* (zoom to a selected bounding box), enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @option boxZoom: Boolean = true
|
||
// Whether the map can be zoomed to a rectangular area specified by
|
||
// dragging the mouse while pressing the shift key.
|
||
boxZoom: true
|
||
});
|
||
|
||
var BoxZoom = Handler.extend({
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
this._container = map._container;
|
||
this._pane = map._panes.overlayPane;
|
||
this._resetStateTimeout = 0;
|
||
map.on('unload', this._destroy, this);
|
||
},
|
||
|
||
addHooks: function () {
|
||
on(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
|
||
moved: function () {
|
||
return this._moved;
|
||
},
|
||
|
||
_destroy: function () {
|
||
remove(this._pane);
|
||
delete this._pane;
|
||
},
|
||
|
||
_resetState: function () {
|
||
this._resetStateTimeout = 0;
|
||
this._moved = false;
|
||
},
|
||
|
||
_clearDeferredResetState: function () {
|
||
if (this._resetStateTimeout !== 0) {
|
||
clearTimeout(this._resetStateTimeout);
|
||
this._resetStateTimeout = 0;
|
||
}
|
||
},
|
||
|
||
_onMouseDown: function (e) {
|
||
if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
|
||
|
||
// Clear the deferred resetState if it hasn't executed yet, otherwise it
|
||
// will interrupt the interaction and orphan a box element in the container.
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
|
||
disableTextSelection();
|
||
disableImageDrag();
|
||
|
||
this._startPoint = this._map.mouseEventToContainerPoint(e);
|
||
|
||
on(document, {
|
||
contextmenu: stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
|
||
_onMouseMove: function (e) {
|
||
if (!this._moved) {
|
||
this._moved = true;
|
||
|
||
this._box = create$1('div', 'leaflet-zoom-box', this._container);
|
||
addClass(this._container, 'leaflet-crosshair');
|
||
|
||
this._map.fire('boxzoomstart');
|
||
}
|
||
|
||
this._point = this._map.mouseEventToContainerPoint(e);
|
||
|
||
var bounds = new Bounds(this._point, this._startPoint),
|
||
size = bounds.getSize();
|
||
|
||
setPosition(this._box, bounds.min);
|
||
|
||
this._box.style.width = size.x + 'px';
|
||
this._box.style.height = size.y + 'px';
|
||
},
|
||
|
||
_finish: function () {
|
||
if (this._moved) {
|
||
remove(this._box);
|
||
removeClass(this._container, 'leaflet-crosshair');
|
||
}
|
||
|
||
enableTextSelection();
|
||
enableImageDrag();
|
||
|
||
off(document, {
|
||
contextmenu: stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
|
||
_onMouseUp: function (e) {
|
||
if ((e.which !== 1) && (e.button !== 1)) { return; }
|
||
|
||
this._finish();
|
||
|
||
if (!this._moved) { return; }
|
||
// Postpone to next JS tick so internal click event handling
|
||
// still see it as "moved".
|
||
this._clearDeferredResetState();
|
||
this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);
|
||
|
||
var bounds = new LatLngBounds(
|
||
this._map.containerPointToLatLng(this._startPoint),
|
||
this._map.containerPointToLatLng(this._point));
|
||
|
||
this._map
|
||
.fitBounds(bounds)
|
||
.fire('boxzoomend', {boxZoomBounds: bounds});
|
||
},
|
||
|
||
_onKeyDown: function (e) {
|
||
if (e.keyCode === 27) {
|
||
this._finish();
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property boxZoom: Handler
|
||
// Box (shift-drag with mouse) zoom handler.
|
||
Map.addInitHook('addHandler', 'boxZoom', BoxZoom);
|
||
|
||
/*
|
||
* L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
|
||
Map.mergeOptions({
|
||
// @option doubleClickZoom: Boolean|String = true
|
||
// Whether the map can be zoomed in by double clicking on it and
|
||
// zoomed out by double clicking while holding shift. If passed
|
||
// `'center'`, double-click zoom will zoom to the center of the
|
||
// view regardless of where the mouse was.
|
||
doubleClickZoom: true
|
||
});
|
||
|
||
var DoubleClickZoom = Handler.extend({
|
||
addHooks: function () {
|
||
this._map.on('dblclick', this._onDoubleClick, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._map.off('dblclick', this._onDoubleClick, this);
|
||
},
|
||
|
||
_onDoubleClick: function (e) {
|
||
var map = this._map,
|
||
oldZoom = map.getZoom(),
|
||
delta = map.options.zoomDelta,
|
||
zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;
|
||
|
||
if (map.options.doubleClickZoom === 'center') {
|
||
map.setZoom(zoom);
|
||
} else {
|
||
map.setZoomAround(e.containerPoint, zoom);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
//
|
||
// Map properties include interaction handlers that allow you to control
|
||
// interaction behavior in runtime, enabling or disabling certain features such
|
||
// as dragging or touch zoom (see `Handler` methods). For example:
|
||
//
|
||
// ```js
|
||
// map.doubleClickZoom.disable();
|
||
// ```
|
||
//
|
||
// @property doubleClickZoom: Handler
|
||
// Double click zoom handler.
|
||
Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);
|
||
|
||
/*
|
||
* L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @option dragging: Boolean = true
|
||
// Whether the map is draggable with mouse/touch or not.
|
||
dragging: true,
|
||
|
||
// @section Panning Inertia Options
|
||
// @option inertia: Boolean = *
|
||
// If enabled, panning of the map will have an inertia effect where
|
||
// the map builds momentum while dragging and continues moving in
|
||
// the same direction for some time. Feels especially nice on touch
|
||
// devices. Enabled by default.
|
||
inertia: true,
|
||
|
||
// @option inertiaDeceleration: Number = 3000
|
||
// The rate with which the inertial movement slows down, in pixels/second².
|
||
inertiaDeceleration: 3400, // px/s^2
|
||
|
||
// @option inertiaMaxSpeed: Number = Infinity
|
||
// Max speed of the inertial movement, in pixels/second.
|
||
inertiaMaxSpeed: Infinity, // px/s
|
||
|
||
// @option easeLinearity: Number = 0.2
|
||
easeLinearity: 0.2,
|
||
|
||
// TODO refactor, move to CRS
|
||
// @option worldCopyJump: Boolean = false
|
||
// With this option enabled, the map tracks when you pan to another "copy"
|
||
// of the world and seamlessly jumps to the original one so that all overlays
|
||
// like markers and vector layers are still visible.
|
||
worldCopyJump: false,
|
||
|
||
// @option maxBoundsViscosity: Number = 0.0
|
||
// If `maxBounds` is set, this option will control how solid the bounds
|
||
// are when dragging the map around. The default value of `0.0` allows the
|
||
// user to drag outside the bounds at normal speed, higher values will
|
||
// slow down map dragging outside bounds, and `1.0` makes the bounds fully
|
||
// solid, preventing the user from dragging outside the bounds.
|
||
maxBoundsViscosity: 0.0
|
||
});
|
||
|
||
var Drag = Handler.extend({
|
||
addHooks: function () {
|
||
if (!this._draggable) {
|
||
var map = this._map;
|
||
|
||
this._draggable = new Draggable(map._mapPane, map._container);
|
||
|
||
this._draggable.on({
|
||
dragstart: this._onDragStart,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this);
|
||
|
||
this._draggable.on('predrag', this._onPreDragLimit, this);
|
||
if (map.options.worldCopyJump) {
|
||
this._draggable.on('predrag', this._onPreDragWrap, this);
|
||
map.on('zoomend', this._onZoomEnd, this);
|
||
|
||
map.whenReady(this._onZoomEnd, this);
|
||
}
|
||
}
|
||
addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');
|
||
this._draggable.enable();
|
||
this._positions = [];
|
||
this._times = [];
|
||
},
|
||
|
||
removeHooks: function () {
|
||
removeClass(this._map._container, 'leaflet-grab');
|
||
removeClass(this._map._container, 'leaflet-touch-drag');
|
||
this._draggable.disable();
|
||
},
|
||
|
||
moved: function () {
|
||
return this._draggable && this._draggable._moved;
|
||
},
|
||
|
||
moving: function () {
|
||
return this._draggable && this._draggable._moving;
|
||
},
|
||
|
||
_onDragStart: function () {
|
||
var map = this._map;
|
||
|
||
map._stop();
|
||
if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {
|
||
var bounds = toLatLngBounds(this._map.options.maxBounds);
|
||
|
||
this._offsetLimit = toBounds(
|
||
this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),
|
||
this._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)
|
||
.add(this._map.getSize()));
|
||
|
||
this._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));
|
||
} else {
|
||
this._offsetLimit = null;
|
||
}
|
||
|
||
map
|
||
.fire('movestart')
|
||
.fire('dragstart');
|
||
|
||
if (map.options.inertia) {
|
||
this._positions = [];
|
||
this._times = [];
|
||
}
|
||
},
|
||
|
||
_onDrag: function (e) {
|
||
if (this._map.options.inertia) {
|
||
var time = this._lastTime = +new Date(),
|
||
pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;
|
||
|
||
this._positions.push(pos);
|
||
this._times.push(time);
|
||
|
||
this._prunePositions(time);
|
||
}
|
||
|
||
this._map
|
||
.fire('move', e)
|
||
.fire('drag', e);
|
||
},
|
||
|
||
_prunePositions: function (time) {
|
||
while (this._positions.length > 1 && time - this._times[0] > 50) {
|
||
this._positions.shift();
|
||
this._times.shift();
|
||
}
|
||
},
|
||
|
||
_onZoomEnd: function () {
|
||
var pxCenter = this._map.getSize().divideBy(2),
|
||
pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
|
||
|
||
this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
|
||
this._worldWidth = this._map.getPixelWorldBounds().getSize().x;
|
||
},
|
||
|
||
_viscousLimit: function (value, threshold) {
|
||
return value - (value - threshold) * this._viscosity;
|
||
},
|
||
|
||
_onPreDragLimit: function () {
|
||
if (!this._viscosity || !this._offsetLimit) { return; }
|
||
|
||
var offset = this._draggable._newPos.subtract(this._draggable._startPos);
|
||
|
||
var limit = this._offsetLimit;
|
||
if (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }
|
||
if (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }
|
||
if (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }
|
||
if (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }
|
||
|
||
this._draggable._newPos = this._draggable._startPos.add(offset);
|
||
},
|
||
|
||
_onPreDragWrap: function () {
|
||
// TODO refactor to be able to adjust map pane position after zoom
|
||
var worldWidth = this._worldWidth,
|
||
halfWidth = Math.round(worldWidth / 2),
|
||
dx = this._initialWorldOffset,
|
||
x = this._draggable._newPos.x,
|
||
newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
|
||
newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
|
||
newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
|
||
|
||
this._draggable._absPos = this._draggable._newPos.clone();
|
||
this._draggable._newPos.x = newX;
|
||
},
|
||
|
||
_onDragEnd: function (e) {
|
||
var map = this._map,
|
||
options = map.options,
|
||
|
||
noInertia = !options.inertia || e.noInertia || this._times.length < 2;
|
||
|
||
map.fire('dragend', e);
|
||
|
||
if (noInertia) {
|
||
map.fire('moveend');
|
||
|
||
} else {
|
||
this._prunePositions(+new Date());
|
||
|
||
var direction = this._lastPos.subtract(this._positions[0]),
|
||
duration = (this._lastTime - this._times[0]) / 1000,
|
||
ease = options.easeLinearity,
|
||
|
||
speedVector = direction.multiplyBy(ease / duration),
|
||
speed = speedVector.distanceTo([0, 0]),
|
||
|
||
limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
|
||
limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
|
||
|
||
decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
|
||
offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
|
||
|
||
if (!offset.x && !offset.y) {
|
||
map.fire('moveend');
|
||
|
||
} else {
|
||
offset = map._limitOffset(offset, map.options.maxBounds);
|
||
|
||
requestAnimFrame(function () {
|
||
map.panBy(offset, {
|
||
duration: decelerationDuration,
|
||
easeLinearity: ease,
|
||
noMoveStart: true,
|
||
animate: true
|
||
});
|
||
});
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property dragging: Handler
|
||
// Map dragging handler (by both mouse and touch).
|
||
Map.addInitHook('addHandler', 'dragging', Drag);
|
||
|
||
/*
|
||
* L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Keyboard Navigation Options
|
||
Map.mergeOptions({
|
||
// @option keyboard: Boolean = true
|
||
// Makes the map focusable and allows users to navigate the map with keyboard
|
||
// arrows and `+`/`-` keys.
|
||
keyboard: true,
|
||
|
||
// @option keyboardPanDelta: Number = 80
|
||
// Amount of pixels to pan when pressing an arrow key.
|
||
keyboardPanDelta: 80
|
||
});
|
||
|
||
var Keyboard = Handler.extend({
|
||
|
||
keyCodes: {
|
||
left: [37],
|
||
right: [39],
|
||
down: [40],
|
||
up: [38],
|
||
zoomIn: [187, 107, 61, 171],
|
||
zoomOut: [189, 109, 54, 173]
|
||
},
|
||
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
|
||
this._setPanDelta(map.options.keyboardPanDelta);
|
||
this._setZoomDelta(map.options.zoomDelta);
|
||
},
|
||
|
||
addHooks: function () {
|
||
var container = this._map._container;
|
||
|
||
// make the container focusable by tabbing
|
||
if (container.tabIndex <= 0) {
|
||
container.tabIndex = '0';
|
||
}
|
||
|
||
on(container, {
|
||
focus: this._onFocus,
|
||
blur: this._onBlur,
|
||
mousedown: this._onMouseDown
|
||
}, this);
|
||
|
||
this._map.on({
|
||
focus: this._addHooks,
|
||
blur: this._removeHooks
|
||
}, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._removeHooks();
|
||
|
||
off(this._map._container, {
|
||
focus: this._onFocus,
|
||
blur: this._onBlur,
|
||
mousedown: this._onMouseDown
|
||
}, this);
|
||
|
||
this._map.off({
|
||
focus: this._addHooks,
|
||
blur: this._removeHooks
|
||
}, this);
|
||
},
|
||
|
||
_onMouseDown: function () {
|
||
if (this._focused) { return; }
|
||
|
||
var body = document.body,
|
||
docEl = document.documentElement,
|
||
top = body.scrollTop || docEl.scrollTop,
|
||
left = body.scrollLeft || docEl.scrollLeft;
|
||
|
||
this._map._container.focus();
|
||
|
||
window.scrollTo(left, top);
|
||
},
|
||
|
||
_onFocus: function () {
|
||
this._focused = true;
|
||
this._map.fire('focus');
|
||
},
|
||
|
||
_onBlur: function () {
|
||
this._focused = false;
|
||
this._map.fire('blur');
|
||
},
|
||
|
||
_setPanDelta: function (panDelta) {
|
||
var keys = this._panKeys = {},
|
||
codes = this.keyCodes,
|
||
i, len;
|
||
|
||
for (i = 0, len = codes.left.length; i < len; i++) {
|
||
keys[codes.left[i]] = [-1 * panDelta, 0];
|
||
}
|
||
for (i = 0, len = codes.right.length; i < len; i++) {
|
||
keys[codes.right[i]] = [panDelta, 0];
|
||
}
|
||
for (i = 0, len = codes.down.length; i < len; i++) {
|
||
keys[codes.down[i]] = [0, panDelta];
|
||
}
|
||
for (i = 0, len = codes.up.length; i < len; i++) {
|
||
keys[codes.up[i]] = [0, -1 * panDelta];
|
||
}
|
||
},
|
||
|
||
_setZoomDelta: function (zoomDelta) {
|
||
var keys = this._zoomKeys = {},
|
||
codes = this.keyCodes,
|
||
i, len;
|
||
|
||
for (i = 0, len = codes.zoomIn.length; i < len; i++) {
|
||
keys[codes.zoomIn[i]] = zoomDelta;
|
||
}
|
||
for (i = 0, len = codes.zoomOut.length; i < len; i++) {
|
||
keys[codes.zoomOut[i]] = -zoomDelta;
|
||
}
|
||
},
|
||
|
||
_addHooks: function () {
|
||
on(document, 'keydown', this._onKeyDown, this);
|
||
},
|
||
|
||
_removeHooks: function () {
|
||
off(document, 'keydown', this._onKeyDown, this);
|
||
},
|
||
|
||
_onKeyDown: function (e) {
|
||
if (e.altKey || e.ctrlKey || e.metaKey) { return; }
|
||
|
||
var key = e.keyCode,
|
||
map = this._map,
|
||
offset;
|
||
|
||
if (key in this._panKeys) {
|
||
if (!map._panAnim || !map._panAnim._inProgress) {
|
||
offset = this._panKeys[key];
|
||
if (e.shiftKey) {
|
||
offset = toPoint(offset).multiplyBy(3);
|
||
}
|
||
|
||
if (map.options.maxBounds) {
|
||
offset = map._limitOffset(toPoint(offset), map.options.maxBounds);
|
||
}
|
||
|
||
if (map.options.worldCopyJump) {
|
||
var newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));
|
||
map.panTo(newLatLng);
|
||
} else {
|
||
map.panBy(offset);
|
||
}
|
||
}
|
||
} else if (key in this._zoomKeys) {
|
||
map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);
|
||
|
||
} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {
|
||
map.closePopup();
|
||
|
||
} else {
|
||
return;
|
||
}
|
||
|
||
stop(e);
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @section Handlers
|
||
// @property keyboard: Handler
|
||
// Keyboard navigation handler.
|
||
Map.addInitHook('addHandler', 'keyboard', Keyboard);
|
||
|
||
/*
|
||
* L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Mouse wheel options
|
||
// @option scrollWheelZoom: Boolean|String = true
|
||
// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,
|
||
// it will zoom to the center of the view regardless of where the mouse was.
|
||
scrollWheelZoom: true,
|
||
|
||
// @option wheelDebounceTime: Number = 40
|
||
// Limits the rate at which a wheel can fire (in milliseconds). By default
|
||
// user can't zoom via wheel more often than once per 40 ms.
|
||
wheelDebounceTime: 40,
|
||
|
||
// @option wheelPxPerZoomLevel: Number = 60
|
||
// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))
|
||
// mean a change of one full zoom level. Smaller values will make wheel-zooming
|
||
// faster (and vice versa).
|
||
wheelPxPerZoomLevel: 60
|
||
});
|
||
|
||
var ScrollWheelZoom = Handler.extend({
|
||
addHooks: function () {
|
||
on(this._map._container, 'wheel', this._onWheelScroll, this);
|
||
|
||
this._delta = 0;
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._map._container, 'wheel', this._onWheelScroll, this);
|
||
},
|
||
|
||
_onWheelScroll: function (e) {
|
||
var delta = getWheelDelta(e);
|
||
|
||
var debounce = this._map.options.wheelDebounceTime;
|
||
|
||
this._delta += delta;
|
||
this._lastMousePos = this._map.mouseEventToContainerPoint(e);
|
||
|
||
if (!this._startTime) {
|
||
this._startTime = +new Date();
|
||
}
|
||
|
||
var left = Math.max(debounce - (+new Date() - this._startTime), 0);
|
||
|
||
clearTimeout(this._timer);
|
||
this._timer = setTimeout(bind(this._performZoom, this), left);
|
||
|
||
stop(e);
|
||
},
|
||
|
||
_performZoom: function () {
|
||
var map = this._map,
|
||
zoom = map.getZoom(),
|
||
snap = this._map.options.zoomSnap || 0;
|
||
|
||
map._stop(); // stop panning and fly animations if any
|
||
|
||
// map the delta with a sigmoid function to -4..4 range leaning on -1..1
|
||
var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),
|
||
d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,
|
||
d4 = snap ? Math.ceil(d3 / snap) * snap : d3,
|
||
delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;
|
||
|
||
this._delta = 0;
|
||
this._startTime = null;
|
||
|
||
if (!delta) { return; }
|
||
|
||
if (map.options.scrollWheelZoom === 'center') {
|
||
map.setZoom(zoom + delta);
|
||
} else {
|
||
map.setZoomAround(this._lastMousePos, zoom + delta);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property scrollWheelZoom: Handler
|
||
// Scroll wheel zoom handler.
|
||
Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);
|
||
|
||
/*
|
||
* L.Map.TapHold is used to simulate `contextmenu` event on long hold,
|
||
* which otherwise is not fired by mobile Safari.
|
||
*/
|
||
|
||
var tapHoldDelay = 600;
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Touch interaction options
|
||
// @option tapHold: Boolean
|
||
// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.
|
||
tapHold: Browser.touchNative && Browser.safari && Browser.mobile,
|
||
|
||
// @option tapTolerance: Number = 15
|
||
// The max number of pixels a user can shift his finger during touch
|
||
// for it to be considered a valid tap.
|
||
tapTolerance: 15
|
||
});
|
||
|
||
var TapHold = Handler.extend({
|
||
addHooks: function () {
|
||
on(this._map._container, 'touchstart', this._onDown, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._map._container, 'touchstart', this._onDown, this);
|
||
},
|
||
|
||
_onDown: function (e) {
|
||
clearTimeout(this._holdTimeout);
|
||
if (e.touches.length !== 1) { return; }
|
||
|
||
var first = e.touches[0];
|
||
this._startPos = this._newPos = new Point(first.clientX, first.clientY);
|
||
|
||
this._holdTimeout = setTimeout(bind(function () {
|
||
this._cancel();
|
||
if (!this._isTapValid()) { return; }
|
||
|
||
// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events
|
||
on(document, 'touchend', preventDefault);
|
||
on(document, 'touchend touchcancel', this._cancelClickPrevent);
|
||
this._simulateEvent('contextmenu', first);
|
||
}, this), tapHoldDelay);
|
||
|
||
on(document, 'touchend touchcancel contextmenu', this._cancel, this);
|
||
on(document, 'touchmove', this._onMove, this);
|
||
},
|
||
|
||
_cancelClickPrevent: function cancelClickPrevent() {
|
||
off(document, 'touchend', preventDefault);
|
||
off(document, 'touchend touchcancel', cancelClickPrevent);
|
||
},
|
||
|
||
_cancel: function () {
|
||
clearTimeout(this._holdTimeout);
|
||
off(document, 'touchend touchcancel contextmenu', this._cancel, this);
|
||
off(document, 'touchmove', this._onMove, this);
|
||
},
|
||
|
||
_onMove: function (e) {
|
||
var first = e.touches[0];
|
||
this._newPos = new Point(first.clientX, first.clientY);
|
||
},
|
||
|
||
_isTapValid: function () {
|
||
return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
|
||
},
|
||
|
||
_simulateEvent: function (type, e) {
|
||
var simulatedEvent = new MouseEvent(type, {
|
||
bubbles: true,
|
||
cancelable: true,
|
||
view: window,
|
||
// detail: 1,
|
||
screenX: e.screenX,
|
||
screenY: e.screenY,
|
||
clientX: e.clientX,
|
||
clientY: e.clientY,
|
||
// button: 2,
|
||
// buttons: 2
|
||
});
|
||
|
||
simulatedEvent._simulated = true;
|
||
|
||
e.target.dispatchEvent(simulatedEvent);
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property tapHold: Handler
|
||
// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).
|
||
Map.addInitHook('addHandler', 'tapHold', TapHold);
|
||
|
||
/*
|
||
* L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Touch interaction options
|
||
// @option touchZoom: Boolean|String = *
|
||
// Whether the map can be zoomed by touch-dragging with two fingers. If
|
||
// passed `'center'`, it will zoom to the center of the view regardless of
|
||
// where the touch events (fingers) were. Enabled for touch-capable web
|
||
// browsers.
|
||
touchZoom: Browser.touch,
|
||
|
||
// @option bounceAtZoomLimits: Boolean = true
|
||
// Set it to false if you don't want the map to zoom beyond min/max zoom
|
||
// and then bounce back when pinch-zooming.
|
||
bounceAtZoomLimits: true
|
||
});
|
||
|
||
var TouchZoom = Handler.extend({
|
||
addHooks: function () {
|
||
addClass(this._map._container, 'leaflet-touch-zoom');
|
||
on(this._map._container, 'touchstart', this._onTouchStart, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
removeClass(this._map._container, 'leaflet-touch-zoom');
|
||
off(this._map._container, 'touchstart', this._onTouchStart, this);
|
||
},
|
||
|
||
_onTouchStart: function (e) {
|
||
var map = this._map;
|
||
if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
|
||
|
||
var p1 = map.mouseEventToContainerPoint(e.touches[0]),
|
||
p2 = map.mouseEventToContainerPoint(e.touches[1]);
|
||
|
||
this._centerPoint = map.getSize()._divideBy(2);
|
||
this._startLatLng = map.containerPointToLatLng(this._centerPoint);
|
||
if (map.options.touchZoom !== 'center') {
|
||
this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));
|
||
}
|
||
|
||
this._startDist = p1.distanceTo(p2);
|
||
this._startZoom = map.getZoom();
|
||
|
||
this._moved = false;
|
||
this._zooming = true;
|
||
|
||
map._stop();
|
||
|
||
on(document, 'touchmove', this._onTouchMove, this);
|
||
on(document, 'touchend touchcancel', this._onTouchEnd, this);
|
||
|
||
preventDefault(e);
|
||
},
|
||
|
||
_onTouchMove: function (e) {
|
||
if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
|
||
|
||
var map = this._map,
|
||
p1 = map.mouseEventToContainerPoint(e.touches[0]),
|
||
p2 = map.mouseEventToContainerPoint(e.touches[1]),
|
||
scale = p1.distanceTo(p2) / this._startDist;
|
||
|
||
this._zoom = map.getScaleZoom(scale, this._startZoom);
|
||
|
||
if (!map.options.bounceAtZoomLimits && (
|
||
(this._zoom < map.getMinZoom() && scale < 1) ||
|
||
(this._zoom > map.getMaxZoom() && scale > 1))) {
|
||
this._zoom = map._limitZoom(this._zoom);
|
||
}
|
||
|
||
if (map.options.touchZoom === 'center') {
|
||
this._center = this._startLatLng;
|
||
if (scale === 1) { return; }
|
||
} else {
|
||
// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng
|
||
var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
|
||
if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }
|
||
this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);
|
||
}
|
||
|
||
if (!this._moved) {
|
||
map._moveStart(true, false);
|
||
this._moved = true;
|
||
}
|
||
|
||
cancelAnimFrame(this._animRequest);
|
||
|
||
var moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);
|
||
this._animRequest = requestAnimFrame(moveFn, this, true);
|
||
|
||
preventDefault(e);
|
||
},
|
||
|
||
_onTouchEnd: function () {
|
||
if (!this._moved || !this._zooming) {
|
||
this._zooming = false;
|
||
return;
|
||
}
|
||
|
||
this._zooming = false;
|
||
cancelAnimFrame(this._animRequest);
|
||
|
||
off(document, 'touchmove', this._onTouchMove, this);
|
||
off(document, 'touchend touchcancel', this._onTouchEnd, this);
|
||
|
||
// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.
|
||
if (this._map.options.zoomAnimation) {
|
||
this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);
|
||
} else {
|
||
this._map._resetView(this._center, this._map._limitZoom(this._zoom));
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property touchZoom: Handler
|
||
// Touch zoom handler.
|
||
Map.addInitHook('addHandler', 'touchZoom', TouchZoom);
|
||
|
||
Map.BoxZoom = BoxZoom;
|
||
Map.DoubleClickZoom = DoubleClickZoom;
|
||
Map.Drag = Drag;
|
||
Map.Keyboard = Keyboard;
|
||
Map.ScrollWheelZoom = ScrollWheelZoom;
|
||
Map.TapHold = TapHold;
|
||
Map.TouchZoom = TouchZoom;
|
||
|
||
exports.Bounds = Bounds;
|
||
exports.Browser = Browser;
|
||
exports.CRS = CRS;
|
||
exports.Canvas = Canvas;
|
||
exports.Circle = Circle;
|
||
exports.CircleMarker = CircleMarker;
|
||
exports.Class = Class;
|
||
exports.Control = Control;
|
||
exports.DivIcon = DivIcon;
|
||
exports.DivOverlay = DivOverlay;
|
||
exports.DomEvent = DomEvent;
|
||
exports.DomUtil = DomUtil;
|
||
exports.Draggable = Draggable;
|
||
exports.Evented = Evented;
|
||
exports.FeatureGroup = FeatureGroup;
|
||
exports.GeoJSON = GeoJSON;
|
||
exports.GridLayer = GridLayer;
|
||
exports.Handler = Handler;
|
||
exports.Icon = Icon;
|
||
exports.ImageOverlay = ImageOverlay;
|
||
exports.LatLng = LatLng;
|
||
exports.LatLngBounds = LatLngBounds;
|
||
exports.Layer = Layer;
|
||
exports.LayerGroup = LayerGroup;
|
||
exports.LineUtil = LineUtil;
|
||
exports.Map = Map;
|
||
exports.Marker = Marker;
|
||
exports.Mixin = Mixin;
|
||
exports.Path = Path;
|
||
exports.Point = Point;
|
||
exports.PolyUtil = PolyUtil;
|
||
exports.Polygon = Polygon;
|
||
exports.Polyline = Polyline;
|
||
exports.Popup = Popup;
|
||
exports.PosAnimation = PosAnimation;
|
||
exports.Projection = index;
|
||
exports.Rectangle = Rectangle;
|
||
exports.Renderer = Renderer;
|
||
exports.SVG = SVG;
|
||
exports.SVGOverlay = SVGOverlay;
|
||
exports.TileLayer = TileLayer;
|
||
exports.Tooltip = Tooltip;
|
||
exports.Transformation = Transformation;
|
||
exports.Util = Util;
|
||
exports.VideoOverlay = VideoOverlay;
|
||
exports.bind = bind;
|
||
exports.bounds = toBounds;
|
||
exports.canvas = canvas;
|
||
exports.circle = circle;
|
||
exports.circleMarker = circleMarker;
|
||
exports.control = control;
|
||
exports.divIcon = divIcon;
|
||
exports.extend = extend;
|
||
exports.featureGroup = featureGroup;
|
||
exports.geoJSON = geoJSON;
|
||
exports.geoJson = geoJson;
|
||
exports.gridLayer = gridLayer;
|
||
exports.icon = icon;
|
||
exports.imageOverlay = imageOverlay;
|
||
exports.latLng = toLatLng;
|
||
exports.latLngBounds = toLatLngBounds;
|
||
exports.layerGroup = layerGroup;
|
||
exports.map = createMap;
|
||
exports.marker = marker;
|
||
exports.point = toPoint;
|
||
exports.polygon = polygon;
|
||
exports.polyline = polyline;
|
||
exports.popup = popup;
|
||
exports.rectangle = rectangle;
|
||
exports.setOptions = setOptions;
|
||
exports.stamp = stamp;
|
||
exports.svg = svg;
|
||
exports.svgOverlay = svgOverlay;
|
||
exports.tileLayer = tileLayer;
|
||
exports.tooltip = tooltip;
|
||
exports.transformation = toTransformation;
|
||
exports.version = version;
|
||
exports.videoOverlay = videoOverlay;
|
||
|
||
var oldL = window.L;
|
||
exports.noConflict = function() {
|
||
window.L = oldL;
|
||
return this;
|
||
}
|
||
// Always export us to window global (see #2364)
|
||
window.L = exports;
|
||
|
||
}));
|
||
|
||
|
||
},{}],2:[function(require,module,exports){
|
||
(function (process){(function (){
|
||
/**!
|
||
* @license
|
||
* The MIT License (MIT)
|
||
*
|
||
* Copyright (c) 2017 Måns Beckman - www.spatialillusions.com
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
* of this software and associated documentation files (the "Software"), to deal
|
||
* in the Software without restriction, including without limitation the rights
|
||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
* copies of the Software, and to permit persons to whom the Software is
|
||
* furnished to do so, subject to the following conditions:
|
||
*
|
||
* The above copyright notice and this permission notice shall be included in all
|
||
* copies or substantial portions of the Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
* SOFTWARE.
|
||
*
|
||
* More information can be found at www.spatialillusions.com
|
||
*/
|
||
!function(I,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("milsymbol",t):I.ms=t()}(this,function(){"use strict";var t={Black:{Civilian:"black",Friend:"black",Hostile:"black",Neutral:"black",Unknown:"black"},Dark:{Civilian:"rgb(80,0,80)",Friend:"rgb(0,107,140)",Hostile:"rgb(200,0,0)",Neutral:"rgb(0,160,0)",Unknown:"rgb(225,220,0)"},FrameColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},IconColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},Light:{Civilian:"rgb(255,161,255)",Friend:"rgb(128,224,255)",Hostile:"rgb(255,128,128)",Neutral:"rgb(170,255,170)",Unknown:"rgb(255,255,128)"},Medium:{Civilian:"rgb(128,0,128)",Friend:"rgb(0,168,220)",Hostile:"rgb(255,48,49)",Neutral:"rgb(0,226,110)",Unknown:"rgb(255,255,0)"},None:{Civilian:!1,Friend:!1,Hostile:!1,Neutral:!1,Unknown:!1},OffWhite:{Civilian:"rgb(239, 239, 239)",Friend:"rgb(239, 239, 239)",Hostile:"rgb(239, 239, 239)",Neutral:"rgb(239, 239, 239)",Unknown:"rgb(239, 239, 239)"},White:{Civilian:"white",Friend:"white",Hostile:"white",Neutral:"white",Unknown:"white"}};function E(I){var t,E=[],R=[],e=this.colors.frameColor[this.metadata.affiliation];if(!this.metadata.frame&&this.style.icon||void 0===this.metadata.baseGeometry.g.type)return{pre:E,post:R,bbox:this.metadata.baseGeometry.bbox};var A,C={type:this.metadata.baseGeometry.g.type};switch(C.type){case"path":C.d=this.metadata.baseGeometry.g.d;break;case"circle":C.cx=this.metadata.baseGeometry.g.cx,C.cy=this.metadata.baseGeometry.g.cy,C.r=this.metadata.baseGeometry.g.r}(C.fill=this.colors.fillColor[this.metadata.affiliation],C.fillopacity=this.style.fillOpacity,C.stroke=e,C.strokewidth=10<=this.style.size?this.style.strokeWidth:10,this.style.frame&&0<this.style.outlineWidth)&&("path"==C.type&&this.metadata.fill&&!this.style.monoColor?((A={type:this.metadata.baseGeometry.g.type}).d=this.metadata.baseGeometry.g.d+" Z",A.strokewidth=10<=this.style.size?this.style.strokeWidth:10):A=C,E.push(I.outline(A,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)));if(""==this.style.monoColor&&this.style.fill||!this.metadata.notpresent||(C.strokedasharray=this.metadata.notpresent),R.push(C),this.metadata.space&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"M 100,30 C 90,30 80,35 68.65625,50 l 62.6875,0 C 120,35 110,30 100,30"},Hostile:{type:"path",stroke:!1,fill:e,d:"M67,50 L100,20 133,50 z"},Neutral:{type:"path",stroke:!1,fill:e,d:"M45,50 l0,-20 110,0 0,20 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 100 22.5 C 85 22.5 70 31.669211 66 50 L 134 50 C 130 31.669204 115 22.5 100 22.5 z"}},R.push(t[this.metadata.affiliation])),this.metadata.activity&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"m 160,135 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z m 135,-85 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z"},Hostile:{type:"path",stroke:!1,fill:e,d:"M 100 28 L 89.40625 38.59375 L 100 49.21875 L 110.59375 38.59375 L 100 28 z M 38.6875 89.3125 L 28.0625 99.9375 L 38.6875 110.53125 L 49.28125 99.9375 L 38.6875 89.3125 z M 161.40625 89.40625 L 150.78125 100 L 161.40625 110.59375 L 172 100 L 161.40625 89.40625 z M 99.9375 150.71875 L 89.3125 161.3125 L 99.9375 171.9375 L 110.53125 161.3125 L 99.9375 150.71875"},Neutral:{type:"path",stroke:!1,fill:e,d:"m 140,140 15,0 0,15 -15,0 z m -80,0 0,15 -15,0 0,-15 z m 80,-80 0,-15 15,0 0,15 z m -80,0 -15,0 0,-15 15,0 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 107.96875 31.46875 L 92.03125 31.71875 L 92.03125 46.4375 L 107.71875 46.4375 L 107.96875 31.46875 z M 47.03125 92.5 L 31.09375 92.75 L 31.09375 107.5 L 46.78125 107.5 L 47.03125 92.5 z M 168.4375 92.5 L 152.5 92.75 L 152.5 107.5 L 168.1875 107.5 L 168.4375 92.5 z M 107.96875 153.5625 L 92.03125 153.8125 L 92.03125 168.53125 L 107.71875 168.53125 L 107.96875 153.5625 z"}},R.push(t[this.metadata.affiliation])),this.metadata.cyberspace&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"m 135,150 40,-40 0,40 z"},Hostile:{type:"path",stroke:!1,fill:e,d:"m 150,78 0,44 22,-22 z"},Neutral:{type:"path",stroke:!1,fill:e,d:"m 115,155 40,-40 0,40 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 150 65.7 L 150 134 C 176 123 176 77.2 150 65.7 z"}},R.push(t[this.metadata.affiliation])),this.style.fill&&this.style.frame&&this.metadata.notpresent&&!this.metadata.unframed){switch((C={type:this.metadata.baseGeometry.g.type}).type){case"path":C.d=this.metadata.baseGeometry.g.d;break;case"circle":C.cx=this.metadata.baseGeometry.g.cx,C.cy=this.metadata.baseGeometry.g.cy,C.r=this.metadata.baseGeometry.g.r}C.fill=!1,C.stroke=this.colors.white[this.metadata.affiliation],C.strokewidth=parseFloat(this.style.strokeWidth)+1,C.strokedasharray=this.metadata.notpresent,R.push(C)}return{pre:E,post:R,bbox:this.metadata.baseGeometry.bbox}}function R(I){var t,E,R=[],e=[],A=new I.BBox({x1:50,x2:150,y1:50,y2:150}),C=[],T=[],S=[],N=[];if(this.style.icon){var O=this.colors.fillColor[this.metadata.affiliation],G=this.colors.fillColor.Neutral;E=this.colors.iconColor[this.metadata.affiliation];var o=this.colors.iconFillColor[this.metadata.affiliation],M=this.colors.none[this.metadata.affiliation],i=this.colors.black[this.metadata.affiliation],L=this.colors.white[this.metadata.affiliation],s=(this.metadata.STD2525?"2525":"APP6")+","+this.metadata.dimension+this.metadata.affiliation+this.metadata.notpresent+this.metadata.numberSIDC+",frame:"+this.style.frame+",alternateMedal:"+this.style.alternateMedal+",colors:{fillcolor:"+O+",neutralColor"+G+",iconColor:"+E+",iconFillColor:"+o+",none:"+M+",black:"+i+",white:"+L+"}";if(C=I._iconCache.hasOwnProperty(s)?I._iconCache[s].iconParts:(I._iconCache[s]={},I._iconCache[s].iconParts=I._getIconParts(this.metadata,this.colors,this.metadata.STD2525,this.style.monoColor,this.style.alternateMedal)),this.metadata.numberSIDC||(-1!=["WMGX--","WMMX--","WMFX--","WMX---","WMSX--"].indexOf(this.metadata.functionid)&&(A.y1=10,"Unknown"!=this.metadata.affiliation&&(A.x2=this.metadata.baseGeometry.bbox.x2+20)),I._iconCache[s].hasOwnProperty("letterSIDC")?(t=I._iconCache[s].letterSIDC.icons,N=I._iconCache[s].letterSIDC.bbox):"function"==typeof I._getIcons.letter?(I._iconCache[s].letterSIDC=I._getIcons.letter(I,C,this.metadata.STD2525),t=I._iconCache[s].letterSIDC.icons,N=I._iconCache[s].letterSIDC.bbox):console.warn("ms._getIcons.letter() is not present, you will need to load functionality for letter based SIDCs")),this.metadata.numberSIDC){var n=String(this.options.sidc).substr(4,2);I._iconCache[s].hasOwnProperty("numberSIDC")?I._iconCache[s].numberSIDC.symbolSet.hasOwnProperty(n)?(t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):"function"==typeof I._getIcons.number?(I._iconCache[s].numberSIDC.symbolSet[n]=I._getIcons.number(I,n,C,this.metadata.STD2525),t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):console.warn("ms._getIcons.number() is not present, you will need to load functionality for number based SIDCs"):(I._iconCache[s].numberSIDC={},I._iconCache[s].numberSIDC.symbolSet={},"function"==typeof I._getIcons.number?(I._iconCache[s].numberSIDC.symbolSet[n]=I._getIcons.number(I,n,C,this.metadata.STD2525),t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):console.warn("ms._getIcons.number() is not present, you will need to load functionality for number based SIDCs"))}var a=[{type:"path",stroke:!1,fill:E=this.colors.iconColor[this.metadata.affiliation],d:"m 94.8206,78.1372 c -0.4542,6.8983 0.6532,14.323 5.3424,19.6985 4.509,5.6933 11.309,9.3573 14.98,15.7283 3.164,6.353 -0.09,14.245 -5.903,17.822 -7.268,4.817 -18.6219,2.785 -22.7328,-5.249 -1.5511,-2.796 -2.3828,-5.931 -2.8815,-9.071 -3.5048,0.416 -7.0093,0.835 -10.5142,1.252 0.8239,8.555 5.2263,17.287 13.2544,21.111 7.8232,3.736 17.1891,3.783 25.3291,1.052 8.846,-3.103 15.737,-11.958 15.171,-21.537 0.05,-6.951 -4.272,-12.85 -9.134,-17.403 -4.526,-4.6949 -11.048,-8.3862 -12.401,-15.2748 -1.215,-2.3639 -0.889,-8.129 -0.889,-8.129 z m -0.6253,-20.5177 0,11.6509 11.6527,0 0,-11.6509 z"}];if(this.metadata.numberSIDC){var l=t[this.metadata.functionid.substr(0,6)];if(void 0===l&&95<=this.metadata.functionid.substr(4,2)&&(l=t[this.metadata.functionid.substr(0,4)+"00"]),void 0===l)"000000"!=this.metadata.functionid.substr(0,6)&&""!=this.metadata.functionid.substr(0,6)&&(e.push(a),this.validIcon=!1);else{var r=Number(this.metadata.functionid.substr(0,6));this.metadata.dismounted&&110301<=r&&r<=110403&&("00"!=this.metadata.functionid.substr(6,2)&&"00"!=this.metadata.functionid.substr(8,2)&&(l=[I._scale(.5,l)]),"00"==this.metadata.functionid.substr(6,2)&&"00"!=this.metadata.functionid.substr(8,2)&&(l=[I._translate(0,-10,I._scale(.7,l))]),"00"!=this.metadata.functionid.substr(6,2)&&"00"==this.metadata.functionid.substr(8,2)&&(l=[I._translate(0,10,I._scale(.7,l))])),e.push(l)}if(N.hasOwnProperty(this.metadata.functionid.substr(0,6))&&(A=new I.BBox(N[this.metadata.functionid.substr(0,6)])),"95"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]),"96"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.DIVISION AND BELOW SUPPORT"]),"97"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.CORPS SUPPORT"]),"98"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.THEATRE SUPPORT"]),"00"!=this.metadata.functionid.substr(6,2)){var P=T[this.metadata.functionid.substr(6,2)];void 0===P?this.validIcon=!1:e.push(P)}if("00"!=this.metadata.functionid.substr(8,2)){var y=S[this.metadata.functionid.substr(8,2)];void 0===y?this.validIcon=!1:e.push(y)}}else{var c=this.options.sidc.substr(0,1)+"-"+this.options.sidc.substr(2,1)+"-"+this.options.sidc.substr(4,6);t.hasOwnProperty(c)?e.push(t[c]):"------"!=this.options.sidc.substr(4,6)&&""!=this.options.sidc.substr(4,6)&&(e.push(a),this.validIcon=!1),N[c]&&(A=new I.BBox(N[c]))}}return this.style.frame&&this.metadata.fill&&!this.style.monoColor&&!this.metadata.controlMeasure||0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:A}}function e(I){var t,E=[],R=[],e=new I.BBox(this.metadata.baseGeometry.bbox),A=this.style.frameColor?this.style.frameColor[this.metadata.affiliation]:this.colors.iconColor[this.metadata.affiliation],C=new I.BBox,T=Number(this.style.hqStaffLength||I._hqStaffLength);if(this.metadata.headquarters&&0<T){var S=100;-1<["AirFriend","AirNeutral","GroundFriend","GroundNeutral","SeaNeutral","SubsurfaceNeutral"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(S=e.y2),this.metadata.dimensionType+this.metadata.affiliationType=="SubsurfaceFriend"&&(S=e.y1),t={type:"path",d:"M"+e.x1+","+S+" L"+e.x1+","+(e.y2+T)},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.y2=e.y2+T}if(this.metadata.taskForce){var N={"Corps/MEF":110,Army:145,"Army Group/front":180,"Region/Theater":215};t={type:"path",d:"M"+(100-(N=N[this.metadata.echelon]||90)/2)+","+e.y1+" L"+(100-N/2)+","+(e.y1-40)+" "+(100+N/2)+","+(e.y1-40)+" "+(100+N/2)+","+e.y1},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.x1=Math.min(e.x1,100-N/2),C.x2=Math.max(e.x2,100+N/2),C.y1=e.y1-40}if(this.metadata.installation){var O=0;-1<["AirHostile","GroundHostile","SeaHostile"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(O=14),-1<["AirUnknown","GroundUnknown","SeaUnknown","AirFriend","SeaFriend"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(O=2),t={type:"path",fill:A,d:"M85,"+(e.y1+O-this.style.strokeWidth/2)+" 85,"+(e.y1-10)+" 115,"+(e.y1-10)+" 115,"+(e.y1+O-this.style.strokeWidth/2)+" 100,"+(e.y1-this.style.strokeWidth)+" Z"},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.merge({y1:e.y1-10})}if(this.metadata.feintDummy){var G=e.y1-0-e.width()/2;t={type:"path",strokedasharray:I._dashArrays.feintDummy,d:"M100,"+G+" L"+e.x1+","+(e.y1-0)+" M100,"+G+" L"+e.x2+","+(e.y1-0)},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.merge({y1:G})}if(this.metadata.echelon){var o=this.metadata.installation?15:0,M={"Team/Crew":{g:[{type:"circle",cx:100,cy:e.y1-20,r:15},{type:"path",d:"M80,"+(e.y1-10)+"L120,"+(e.y1-30)}],bbox:{y1:e.y1-40-o}},Squad:{g:[{type:"circle",fill:A,cx:100,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},Section:{g:[{type:"circle",fill:A,cx:115,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:85,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},"Platoon/detachment":{g:[{type:"circle",fill:A,cx:100,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:70,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:130,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},"Company/battery/troop":{g:[{type:"path",d:"M100,"+(e.y1-10)+"L100,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},"Battalion/squadron":{g:[{type:"path",d:"M90,"+(e.y1-10)+"L90,"+(e.y1-35)},{type:"path",d:"M110,"+(e.y1-10)+"L110,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},"Regiment/group":{g:[{type:"path",d:"M100,"+(e.y1-10)+"L100,"+(e.y1-35)},{type:"path",d:"M120,"+(e.y1-10)+"L120,"+(e.y1-35)},{type:"path",d:"M80,"+(e.y1-10)+"L80,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},Brigade:{g:[{type:"path",d:"M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o}},Division:{g:[{type:"path",d:"M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:70,x2:130}},"Corps/MEF":{g:[{type:"path",d:"M52.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:52.5,x2:147.5}},Army:{g:[{type:"path",d:"M35,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:35,x2:165}},"Army Group/front":{g:[{type:"path",d:"M17.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M52.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M157.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:17.5,x2:182.5}},"Region/Theater":{g:[{type:"path",d:"M0,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M35,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M175,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:0,x2:200}},Command:{g:[{type:"path",d:"M70,"+(e.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25 M105,"+(e.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25"}],bbox:{y1:e.y1-15-25-o,x1:70,x2:130}}};M.hasOwnProperty(this.metadata.echelon)&&(t=M[this.metadata.echelon].g,0<this.style.outlineWidth&&E.push(I.outline({type:"translate",x:0,y:-o,draw:t},this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push({type:"translate",x:0,y:-o,draw:t}),C.merge(M[this.metadata.echelon].bbox))}if(this.metadata.mobility){this.style.frame||(e.y2=this.bbox.y2),"Neutral"==this.metadata.affiliation&&("Towed"!=this.metadata.mobility&&"Short towed array"!=this.metadata.mobility&&"Long towed Array"!=this.metadata.mobility||(e.y2+=8),"Over snow (prime mover)"!=this.metadata.mobility&&"Sled"!=this.metadata.mobility||(e.y2+=13));var i={"Wheeled limited cross country":{g:[{type:"path",d:"M 53,1 l 94,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8}],bbox:{y2:e.y2+16}},"Wheeled cross country":{g:[{type:"path",d:"M 53,1 l 94,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8},{type:"circle",cx:100,cy:8,r:8}],bbox:{y2:e.y2+16}},Tracked:{g:[{type:"path",d:"M 53,1 l 100,0 c15,0 15,15 0,15 l -100,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+18,x1:42,x2:168}},"Wheeled and tracked combination":{g:[{type:"circle",cx:58,cy:8,r:8},{type:"path",d:"M 83,1 l 70,0 c15,0 15,15 0,15 l -70,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+16,x2:168}},Towed:{g:[{type:"path",d:"M 63,1 l 74,0"},{type:"circle",cx:58,cy:3,r:8},{type:"circle",cx:142,cy:3,r:8}],bbox:{y2:e.y2+10}},Rail:{g:[{type:"path",d:"M 53,1 l 96,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:73,cy:8,r:8},{type:"circle",cx:127,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8}],bbox:{y2:e.y2+16}},"Over snow (prime mover)":{g:[{type:"path",d:"M 50,-9 l10,10 90,0"}],bbox:{y2:e.y2+9}},Sled:{g:[{type:"path",d:"M 145,-12 c15,0 15,15 0,15 l -90,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+15,x1:42,x2:168}},"Pack animals":{g:[{type:"path",d:"M 80,20 l 10,-20 10,20 10,-20 10,20"}],bbox:{y2:e.y2+20}},Barge:{g:[{type:"path",d:"M 50,1 l 100,0 c0,10 -100,10 -100,0"}],bbox:{y2:e.y2+10}},Amphibious:{g:[{type:"path",d:"M 65,10 c 0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0"}],bbox:{y2:e.y2+20}},"Short towed array":{g:[{type:"path",fill:A,d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M100,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:e.y2+10}},"Long towed Array":{g:[{type:"path",fill:A,d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M105,0 l-10,0 0,10 10,0 z M75,0 l5,5 -5,5 -5,-5 z M125,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:e.y2+10}}};i.hasOwnProperty(this.metadata.mobility)&&(t=i[this.metadata.mobility].g,0<this.style.outlineWidth&&E.push(I.outline({type:"translate",x:0,y:e.y2,draw:t},this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push({type:"translate",x:0,y:e.y2,draw:t}),C.merge(i[this.metadata.mobility].bbox))}if(this.metadata.leadership){var L={Friend:{type:"path",d:"m 45,60 55,-25 55,25"}}[this.metadata.affiliation];L&&(E.push(L),C.merge({y1:e.y1-20}))}for(var s=0;s<E.length;s++)E[s].hasOwnProperty("fill")||(E[s].fill=!1),E[s].hasOwnProperty("stroke")||(E[s].stroke=A),E[s].hasOwnProperty("strokewidth")||(E[s].strokewidth=this.style.strokeWidth);for(s=0;s<R.length;s++)R[s].hasOwnProperty("fill")||(R[s].fill=!1),R[s].hasOwnProperty("stroke")||(R[s].stroke=A),R[s].hasOwnProperty("strokewidth")||(R[s].strokewidth=this.style.strokeWidth);return{pre:E,post:R,bbox:C}}function A(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox,e=R.y1,A=R.y2;if(this.metadata.condition)if(this.metadata.fill&&""===this.style.monoColor&&!this.style.simpleStatusModifier){!this.metadata.frame&&this.metadata.iconBottom&&(A=this.metadata.iconBottom),this.options.headquartersElement&&(A+=35),A+=this.metadata.mobility?25:5,E.push({type:"path",strokewidth:this.style.strokeWidth,fill:{FullyCapable:"rgb(0,255,0)",Damaged:"rgb(255,255,0)",Destroyed:"rgb(255,0,0)",FullToCapacity:"rgb(0, 180, 240)"}[this.metadata.condition],stroke:this.colors.frameColor[this.metadata.affiliation],d:"M"+R.x1+","+A+" l"+R.width()+",0 0,25 -"+R.width()+",0 z"}),A+=25,0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}else"Damaged"!=this.metadata.condition&&"Destroyed"!=this.metadata.condition||(E.push({type:"path",d:"M150,20 L50,180",strokewidth:2*this.style.strokeWidth,stroke:this.colors.frameColor[this.metadata.affiliation]}),e=20,A=180),"Destroyed"==this.metadata.condition&&E.push({type:"path",d:"M50,20 L150,180",strokewidth:2*this.style.strokeWidth,stroke:this.colors.frameColor[this.metadata.affiliation]}),0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor));return{pre:t,post:E,bbox:{y1:e,y2:A}}}function C(I){var t=[],E=[],R=this.bbox,e=R.x1,A=R.x2,C=R.y1,T=R.y2;if(""!==this.options.engagementBar){C-=6;var S=this.style.fontfamily,N=this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend;E.push({type:"text",text:this.options.engagementBar,x:100,y:R.y1-11,textanchor:"middle",fontsize:22,fontfamily:S,fontweight:"bold",fill:N,stroke:!1});var O=!1;if(this.metadata.fill&&""===this.style.monoColor){O={TARGET:"rgb(255, 0, 0)","NON-TARGET":"rgb(255, 255, 255)",EXPIRED:"rgb(255, 120, 0)"}[this.options.engagementType.toUpperCase()]||this.colors.fillColor[this.metadata.affiliation]}var G,o=Math.max(R.width(),16*this.options.engagementBar.length);if(e=Math.min(e,100-o/2),A=Math.max(A,100+o/2),E.unshift({type:"path",strokewidth:this.style.strokeWidth,fill:O,stroke:this.colors.frameColor[this.metadata.affiliation],d:"M"+(100-o/2)+","+C+" l"+o+",0 0,-25 -"+o+",0 z"}),C-=25,0<this.style.outlineWidth)G=this.metadata.fill&&""===this.style.monoColor?E[0]:E,t.push(I.outline(G,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:t,post:E,bbox:{x1:e,x2:A,y1:C,y2:T}}}function T(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox,e=this.colors.frameColor[this.metadata.affiliation];if(this.metadata.dimensionUnknown&&e&&E.push({type:"text",text:"?",x:100,y:127,fill:e,fontfamily:this.style.fontfamily,fontsize:80,fontweight:"bold",textanchor:"middle"}),this.metadata.baseGeometry.g&&e){var A=10;("Unknown"==this.metadata.affiliation||"Hostile"==this.metadata.affiliation&&"Subsurface"!=this.metadata.dimension)&&(A=-10),"Exercise"==this.metadata.context&&(this.metadata.joker||this.metadata.faker||E.push({type:"text",text:"X",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),this.metadata.joker&&E.push({type:"text",text:"J",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),this.metadata.faker&&E.push({type:"text",text:"K",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),R={x2:R.x2+A+22,y1:35}),"Simulation"==this.metadata.context&&(E.push({type:"text",text:"S",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),R=new I.BBox({x2:R.x2+A+22,y1:35}))}return 0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:t,post:E,bbox:R}}function S(I){var t,E,R=[],e=[],A=this.metadata.baseGeometry.bbox,S=("object"==typeof this.style.infoColor?this.style.infoColor[this.metadata.affiliation]:this.style.infoColor)||this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend,N=this.style.fontfamily,O=this.style.infoSize,C="object"==typeof this.style.infoBackground?this.style.infoBackground[this.metadata.affiliation]:this.style.infoBackground,T="object"==typeof this.style.infoBackground?this.style.infoBackground[this.metadata.affiliation]:this.style.infoBackground,G=new I.BBox,o=20;function M(I){var t,E=[];for(var R in I)if(this.options.hasOwnProperty(R)&&""!=this.options[R]){if(!I.hasOwnProperty(R))continue;for(var e=0;e<(I[R].length||1);e++){var A;if(t={y2:(A=Array.isArray(I[R])?I[R][e]:I[R]).y,y1:A.y-A.fontsize},"start"==A.textanchor&&(t.x1=A.x,t.x2=A.x+i(this.options[R])*(A.fontsize/O)),"middle"==A.textanchor){var C=i(this.options[R])*(A.fontsize/O);t.x1=A.x-C/2,t.x2=A.x+C/2}"end"==A.textanchor&&(t.x1=A.x-i(this.options[R])*(A.fontsize/O),t.x2=A.x),G.merge(t);var T={type:"text",fontfamily:N,fill:S};A.hasOwnProperty("fill")&&(T.fill=A.fill),A.hasOwnProperty("stroke")&&(T.stroke=A.stroke),A.hasOwnProperty("textanchor")&&(T.textanchor=A.textanchor),A.hasOwnProperty("fontsize")&&(T.fontsize=A.fontsize),A.hasOwnProperty("fontweight")&&(T.fontweight=A.fontweight),T.x=A.x,T.y=A.y,T.text=this.options[R],E.push(T)}}return E}function i(I){if(0==I.length)return 0;for(var t={" ":9,"!":10,'"':15,"#":17,$:17,"%":27,"&":22,"'":8,"(":10,")":10,"*":12,"+":18,",":9,"-":10,".":9,"/":9,0:17,1:17,2:17,3:17,4:17,5:17,6:17,7:17,8:17,9:17,":":10,";":10,"<":18,"=":18,">":18,"?":19,"@":30,A:22,B:22,C:22,D:22,E:21,F:19,G:24,H:22,I:9,J:17,K:22,L:19,M:25,N:22,O:24,P:21,Q:24,R:22,S:21,T:19,U:22,V:21,W:29,X:21,Y:21,Z:19,"[":10,"]":10,"^":18,_:17,"`":10,a:17,b:19,c:17,d:19,e:17,f:10,g:19,h:19,i:9,j:9,k:17,l:9,m:27,n:19,o:19,p:19,q:19,r:12,s:17,t:10,u:19,v:17,w:24,x:17,y:17,z:15,"{":12,"|":9,"}":12,"~":18},E=0,R=0;R<I.length;R++)E+=O/30*(t[I[R]]?t[I[R]]:28.5);return E+=o}if(this.metadata.numberSIDC){if(!I._labelCache.hasOwnProperty("number"))for(t in I._labelCache.number={},I._labelOverrides.number)I._labelOverrides.number.hasOwnProperty(t)&&I._labelOverrides.number[t].call(this,I._labelCache.number);if(E=this.metadata.functionid.substr(0,6),this.metadata.controlMeasure&&I._labelCache.number.hasOwnProperty(E))return e.push(M.call(this,I._labelCache.number[E])),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:G}}else{if(!I._labelCache.hasOwnProperty("letter"))for(t in I._labelCache.letter={},I._labelOverrides.letter)I._labelOverrides.letter.hasOwnProperty(t)&&I._labelOverrides.letter[t].call(this,I._labelCache.letter);if(E=this.options.sidc.substr(0,1)+"-"+this.options.sidc.substr(2,1)+"-"+this.options.sidc.substr(4,6),I._labelCache.letter.hasOwnProperty(E))return e.push(M.call(this,I._labelCache.letter[E])),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:G}}var L,s,n,a=this.options.quantity||this.options.reinforcedReduced||this.options.staffComments||this.options.additionalInformation||this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.higherFormation||this.options.hostile||this.options.iffSif||this.options.sigint||this.options.uniqueDesignation||this.options.type||this.options.dtg||this.options.altitudeDepth||this.options.location||this.options.speed||this.options.specialHeadquarters||this.options.platformType||this.options.equipmentTeardownTime||this.options.commonIdentifier||this.options.auxiliaryEquipmentIndicator||this.options.headquartersElement||this.options.installationComposition||this.options.guardedUnit||this.options.specialDesignator;if(this.style.infoFields&&a){this.options.specialHeadquarters&&e.push((L=this.options.specialHeadquarters,s=42,n=115,1==L.length&&(s=45,n=115),3==L.length&&(s=35,n=110),4<=L.length&&(s=32,n=110),{type:"text",text:L,x:100,y:n,textanchor:"middle",fontsize:s,fontfamily:N,fill:S,stroke:!1,fontweight:"bold"})),this.options.quantity&&!this.metadata.dismounted&&(e.push({type:"text",text:this.options.quantity,x:100,y:A.y1-10,textanchor:"middle",fontsize:O,fontfamily:N,fill:S,stroke:!1}),G.y1=A.y1-10-O),this.options.headquartersElement&&(e.push({type:"text",text:this.options.headquartersElement,x:100,y:A.y2+35,textanchor:"middle",fontsize:35,fontfamily:N,fontweight:"bold",fill:S,stroke:!1}),G.y2=A.y2+35);var l,r={L1:"",L2:"",L3:"",L4:"",L5:"",R1:"",R2:"",R3:"",R4:"",R5:""};if(isNaN(this.options.sidc)||"Air"!=this.metadata.baseDimension||(r.R1=this.options.uniqueDesignation,r.R2=this.options.iffSif,r.R3=this.options.type,(this.options.speed||this.options.altitudeDepth)&&(l=[],this.options.speed&&l.push(this.options.speed),this.options.altitudeDepth&&l.push(this.options.altitudeDepth),r.R4=l.join("/")),(this.options.staffComments||this.options.additionalInformation)&&(l=[],this.options.staffComments&&l.push(this.options.staffComments),this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R5=l.join("/"))),(isNaN(this.options.sidc)||"Ground"==this.metadata.baseDimension)&&(r.L1=this.options.dtg,(this.options.altitudeDepth||this.options.location)&&(l=[],this.options.altitudeDepth&&l.push(this.options.altitudeDepth),this.options.location&&l.push(this.options.location),r.L2=l.join("/")),r.L4=this.options.uniqueDesignation,r.L5=this.options.speed,r.R2=this.options.staffComments,r.R4=this.options.higherFormation,(this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.hostile||this.options.iffSif)&&(l=[],this.options.evaluationRating&&l.push(this.options.evaluationRating),this.options.combatEffectiveness&&l.push(this.options.combatEffectiveness),this.options.signatureEquipment&&l.push(this.options.signatureEquipment),this.options.hostile&&l.push(this.options.hostile),this.options.iffSif&&l.push(this.options.iffSif),r.R5=l.join("/")),isNaN(this.options.sidc)||this.metadata.unit?((this.options.type||this.options.platformType||this.options.equipmentTeardownTime)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.equipmentTeardownTime&&l.push(this.options.equipmentTeardownTime),r.L3=l.join("/")),r.R1=this.options.reinforcedReduced,this.metadata.activity&&(r.R1=this.options.country),(this.options.additionalInformation||this.options.commonIdentifier)&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),r.R3=l.join("/"))):((this.options.type||this.options.platformType||this.options.commonIdentifier||this.options.installationComposition)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),this.options.installationComposition&&l.push(this.options.installationComposition),r.L3=l.join("/")),r.R1=this.options.country,(this.options.additionalInformation||this.options.equipmentTeardownTime)&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),this.options.equipmentTeardownTime&&l.push(this.options.equipmentTeardownTime),r.R3=l.join("/")))),this.metadata.dismounted&&(this.options.quantity&&(e.push({type:"text",text:this.options.quantity,x:100,y:A.y2+O,textanchor:"middle",fontsize:O,fontfamily:N,fill:S,stroke:!1}),G.y2=A.y2+O),r.L1=this.options.dtg,(this.options.altitudeDepth||this.options.location)&&(l=[],this.options.altitudeDepth&&l.push(this.options.altitudeDepth),this.options.location&&l.push(this.options.location),r.L2=l.join("/")),(this.options.type||this.options.platformType||this.options.commonIdentifier)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),r.L3=l.join("/")),r.L4=this.options.uniqueDesignation,r.L5=this.options.speed,r.R1=this.options.country,r.R2=this.options.staffComments,this.options.additionalInformation&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R3=l.join("/")),r.R4=this.options.higherFormation,(this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.hostile||this.options.iffSif)&&(l=[],this.options.evaluationRating&&l.push(this.options.evaluationRating),this.options.combatEffectiveness&&l.push(this.options.combatEffectiveness),this.options.signatureEquipment&&l.push(this.options.signatureEquipment),this.options.hostile&&l.push(this.options.hostile),this.options.iffSif&&l.push(this.options.iffSif),r.R5=l.join("/"))),isNaN(this.options.sidc)||"Sea"!=this.metadata.baseDimension||((this.options.guardedUnit||this.options.specialDesignator)&&(l=[],this.options.guardedUnit&&l.push(this.options.guardedUnit),this.options.specialDesignator&&l.push(this.options.specialDesignator),r.L1=l.join("/")),r.R1=this.options.uniqueDesignation,r.R2=this.options.type,r.R3=this.options.iffSif,(this.options.staffComments||this.options.additionalInformation)&&(l=[],this.options.staffComments&&l.push(this.options.staffComments),this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R4=l.join("/")),(this.options.location||this.options.speed)&&(l=[],this.options.location&&l.push(this.options.location),this.options.speed&&l.push(this.options.speed),r.R5=l.join("/"))),isNaN(this.options.sidc)||"Subsurface"!=this.metadata.baseDimension||(r.L1=this.options.specialDesignator,r.R1=this.options.uniqueDesignation,r.R2=this.options.type,r.R3=this.options.altitudeDepth,r.R4=this.options.staffComments,r.R5=this.options.additionalInformation),G.x1=A.x1-Math.max(this.options.specialHeadquarters?(i(this.options.specialHeadquarters)-this.metadata.baseGeometry.bbox.width())/2:0,this.options.quantity?(i(this.options.quantity)-this.metadata.baseGeometry.bbox.width())/2:0,i(r.L1),i(r.L2),i(r.L3),i(r.L4),i(r.L5)),G.x2=A.x2+Math.max(this.options.specialHeadquarters?(i(this.options.specialHeadquarters)-this.metadata.baseGeometry.bbox.width())/2:0,this.options.quantity?(i(this.options.quantity)-this.metadata.baseGeometry.bbox.width())/2:0,i(r.R1),i(r.R2),i(r.R3),i(r.R4),i(r.R5)),(r.L1||r.R1)&&(G.y1=Math.min(G.y1,100-2.5*O)),(r.L2||r.R2)&&(G.y1=Math.min(G.y1,100-1.5*O)),(r.L4||r.R4)&&(G.y2=Math.max(G.y2,100+1.7*O)),(r.L5||r.R5)&&(G.y2=Math.max(G.y2,100+2.7*O)),this.style.infoBackground){var P={x1:100,y1:1e3,y2:0},y={x2:100,y1:1e3,y2:0};r.L1&&(P={x1:Math.min(P.x1,A.x1-i(r.L1)),x2:A.x1-o/2,y1:Math.min(P.y1,100-2.5*O),y2:Math.max(P.y2,100-1.5*O+o/2)}),r.L2&&(P={x1:Math.min(P.x1,A.x1-i(r.L2)),x2:A.x1-o/2,y1:Math.min(P.y1,100-1.5*O),y2:Math.max(P.y2,100-.5*O+o/2)}),r.L3&&(P={x1:Math.min(P.x1,A.x1-i(r.L3)),x2:A.x1-o/2,y1:Math.min(P.y1,100-.5*O),y2:Math.max(P.y2,100+.5*O+o/2)}),r.L4&&(P={x1:Math.min(P.x1,A.x1-i(r.L4)),x2:A.x1-o/2,y1:Math.min(P.y1,100+.5*O),y2:Math.max(P.y2,100+1.5*O+o/2)}),r.L5&&(P={x1:Math.min(P.x1,A.x1-i(r.L5)),x2:A.x1-o/2,y1:Math.min(P.y1,100+1.5*O),y2:Math.max(P.y2,100+2.5*O+o/2)}),P.hasOwnProperty("x2")&&(G.x1-=O/2,e.push({type:"path",d:"M "+(P.x1-O/2)+","+(P.y1+O/2)+" "+P.x1+","+P.y1+" "+P.x2+","+P.y1+" "+P.x2+","+P.y2+" "+(P.x1-O/2)+","+P.y2+"z",fill:C,stroke:T||!1})),r.R1&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R1)),y1:Math.min(y.y1,100-2.5*O),y2:Math.max(y.y2,100-1.5*O+o/2)}),r.R2&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R2)),y1:Math.min(y.y1,100-1.5*O),y2:Math.max(y.y2,100-.5*O+o/2)}),r.R3&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R3)),y1:Math.min(y.y1,100-.5*O),y2:Math.max(y.y2,100+.5*O+o/2)}),r.R4&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R4)),y1:Math.min(y.y1,100+.5*O),y2:Math.max(y.y2,100+1.5*O+o/2)}),r.R5&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R5)),y1:Math.min(y.y1,100+1.5*O),y2:Math.max(y.y2,100+2.5*O+o/2)}),y.hasOwnProperty("x1")&&(G.x2+=O/2,e.push({type:"path",d:"M "+y.x1+","+y.y1+" "+(y.x2+O/2)+","+y.y1+" "+(y.x2+O/2)+","+(y.y2-O/2)+" "+y.x2+","+y.y2+" "+y.x1+","+y.y2+"z",fill:C,stroke:T||!1}))}r.L1&&e.push({type:"text",text:r.L1,x:A.x1-o,y:100-1.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L2&&e.push({type:"text",text:r.L2,x:A.x1-o,y:100-.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L3&&e.push({type:"text",text:r.L3,x:A.x1-o,y:100+.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L4&&e.push({type:"text",text:r.L4,x:A.x1-o,y:100+1.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L5&&e.push({type:"text",text:r.L5,x:A.x1-o,y:100+2.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R1&&e.push({type:"text",text:r.R1,x:A.x2+o,y:100-1.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R2&&e.push({type:"text",text:r.R2,x:A.x2+o,y:100-.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R3&&e.push({type:"text",text:r.R3,x:A.x2+o,y:100+.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R4&&e.push({type:"text",text:r.R4,x:A.x2+o,y:100+1.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R5&&e.push({type:"text",text:r.R5,x:A.x2+o,y:100+2.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:R,post:e,bbox:G}}function N(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox;""==this.metadata.baseGeometry.g&&(R=this.bbox);var e,A=new I.BBox,C=this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend;if(this.style.infoFields&&""!==this.options.direction){if(0==this.options.speedLeader){e=[{type:"rotate",degree:this.options.direction,x:100,y:100,draw:[{type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M100,100 l0,-75 -5,3 5,-15 5,15 -5,-3"}]}],A.y1=Math.min(100-95*Math.cos(this.options.direction/360*Math.PI*2),100),A.y2=Math.max(100-95*Math.cos(this.options.direction/360*Math.PI*2),100),A.x1=Math.min(100+95*Math.sin(this.options.direction/360*Math.PI*2),100),A.x2=Math.max(100+95*Math.sin(this.options.direction/360*Math.PI*2),100),"Ground"!=this.metadata.baseDimension&&""!=this.metadata.baseDimension||(this.metadata.headquarters?(e=[{type:"translate",x:R.x1-100,y:R.y2-(100-(this.style.hqStaffLength||I._hqStaffLength)),draw:e}],A.x1+=R.x1-100,A.x2+=R.x1-100):e=[{type:"translate",x:0,y:R.y2,draw:e},{type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M 100,"+R.y2+"l0,100"}]),A.y2+=R.y2+parseFloat(this.style.strokeWidth),E.push(e)}else{var T=this.options.speedLeader*(100/this.style.size),S=this.options.direction*Math.PI/180,N=-T*Math.cos(S),O=T*Math.sin(S);A.x1=Math.min(100,100+O),A.x2=Math.max(100,100+O),A.y1=Math.min(100,100+N),A.y2=Math.max(100,100+N),e={type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M 100,100 l"+O+","+N},t.push(e)}0<this.style.outlineWidth&&t.unshift(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:t,post:E,bbox:A}}function I(I){return void 0===I&&(I={}),{x1:void 0!==I.x1?I.x1:100,y1:void 0!==I.y1?I.y1:100,x2:void 0!==I.x2?I.x2:100,y2:void 0!==I.y2?I.y2:100,width:function(){return this.x2-this.x1},height:function(){return this.y2-this.y1},getSize:function(){return{height:this.y2-this.y1,width:this.x2-this.x1}},merge:function(I){return this.x1=I.x1<=this.x1?I.x1:this.x1,this.y1=I.y1<=this.y1?I.y1:this.y1,this.x2=I.x2>=this.x2?I.x2:this.x2,this.y2=I.y2>=this.y2?I.y2:this.y2,this}}}var O={AirHostile:{g:{type:"path",d:"M 45,150 L45,70 100,20 155,70 155,150"},bbox:new I({x1:45,y1:20,x2:155,y2:150})},AirFriend:{g:{type:"path",d:"M 155,150 C 155,50 115,30 100,30 85,30 45,50 45,150"},bbox:new I({x1:45,y1:30,x2:155,y2:150})},AirNeutral:{g:{type:"path",d:"M 45,150 L 45,30,155,30,155,150"},bbox:new I({x1:45,y1:30,x2:155,y2:150})},AirUnknown:{g:{type:"path",d:"M 65,150 c -55,0 -50,-90 0,-90 0,-50 70,-50 70,0 50,0 55,90 0,90"},bbox:new I({x1:25,y1:20,x2:175,y2:150})},GroundHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},GroundFriend:{g:{type:"path",d:"M25,50 l150,0 0,100 -150,0 z"},bbox:new I({x1:25,y1:50,x2:175,y2:150})},GroundNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},GroundUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},LandDismountedIndividualHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},LandDismountedIndividualFriend:{g:{type:"path",d:"m 100,45 55,25 0,60 -55,25 -55,-25 0,-60 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SeaHostile:{g:{type:"path",d:"M100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},SeaFriend:{g:{type:"circle",cx:100,cy:100,r:60},bbox:new I({x1:40,y1:40,x2:160,y2:160})},SeaNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},SeaUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SubsurfaceHostile:{g:{type:"path",d:"M45,50 L45,130 100,180 155,130 155,50"},bbox:new I({x1:45,y1:50,x2:155,y2:180})},SubsurfaceFriend:{g:{type:"path",d:"m 45,50 c 0,100 40,120 55,120 15,0 55,-20 55,-120"},bbox:new I({x1:45,y1:50,x2:155,y2:170})},SubsurfaceNeutral:{g:{type:"path",d:"M45,50 L45,170 155,170 155,50"},bbox:new I({x1:45,y1:50,x2:155,y2:170})},SubsurfaceUnknown:{g:{type:"path",d:"m 65,50 c -55,0 -50,90 0,90 0,50 70,50 70,0 50,0 55,-90 0,-90"},bbox:new I({x1:25,y1:50,x2:175,y2:180})},PositionMarker:{g:{type:"circle",cx:100,cy:100,r:15},bbox:new I({x1:85,y1:85,x2:115,y2:115})}},s=new function(){this._autoValidation=!1,this.version="2.0.0","object"==typeof console&&"object"!=typeof process&&console.info("milsymbol.js "+this.version+" - Copyright (c) 2018 M"+String.fromCharCode(229)+"ns Beckman http://www.spatialillusions.com")};function G(){this.bbox=new I,this.colors={},this.metadata={},this.octagonAnchor={x:50,y:50},this.options={},this.options.quantity="",this.options.reinforcedReduced="",this.options.staffComments="",this.options.additionalInformation="",this.options.evaluationRating="",this.options.combatEffectiveness="",this.options.signatureEquipment="",this.options.higherFormation="",this.options.hostile="",this.options.iffSif="",this.options.direction="",this.options.sigint="",this.options.uniqueDesignation="",this.options.type="",this.options.dtg="",this.options.altitudeDepth="",this.options.location="",this.options.speed="",this.options.speedLeader=0,this.options.specialHeadquarters="",this.options.country="",this.options.platformType="",this.options.equipmentTeardownTime="",this.options.commonIdentifier="",this.options.auxiliaryEquipmentIndicator="",this.options.headquartersElement="",this.options.installationComposition="",this.options.engagementBar="",this.options.engagementType="",this.options.guardedUnit="",this.options.specialDesignator="",this.style={},this.style.alternateMedal=!1,this.style.civilianColor=!0,this.style.colorMode="Light",this.style.fill=!0,this.style.fillOpacity=1,this.style.fontfamily="Arial",this.style.frame=!0,this.style.frameColor="",this.style.hqStaffLength=0,this.style.icon=!0,this.style.iconColor="",this.style.infoBackground="",this.style.infoBackgroundFrame="",this.style.infoColor="",this.style.infoFields=!0,this.style.infoSize=40,this.style.monoColor="",this.style.outlineColor="rgb(239, 239, 239)",this.style.outlineWidth=0,this.style.padding=0,this.style.simpleStatusModifier=!1,this.style.size=100,this.style.square=!1,this.style.standard="",this.style.strokeWidth=4,this.symbolAnchor={x:50,y:50},this.validIcon=!0,0<arguments.length&&this.setOptions.apply(this,arguments)}function o(I,t,E){this.options.sidc=this.options.sidc.toUpperCase();var R=""!=this.options.sidc.charAt(0)?this.options.sidc.charAt(0):"-",e=""!=this.options.sidc.charAt(1)?this.options.sidc.charAt(1):"-",A=""!=this.options.sidc.charAt(2)?this.options.sidc.charAt(2):"-",C=""!=this.options.sidc.charAt(3)?this.options.sidc.charAt(3):"-",T=t.functionid=""!=this.options.sidc.substr(4,6)?this.options.sidc.substr(4,6):"------",S=""!=this.options.sidc.charAt(10)?this.options.sidc.charAt(10):"-",N=""!=this.options.sidc.charAt(11)?this.options.sidc.charAt(11):"-";if(-1<["H","S","J","K"].indexOf(e)&&(t.affiliation=E.affiliation[0]),-1<["F","A","D","M"].indexOf(e)&&(t.affiliation=E.affiliation[1]),-1<["N","L"].indexOf(e)&&(t.affiliation=E.affiliation[2]),-1<["P","U","G","W","O"].indexOf(e)&&(t.affiliation=E.affiliation[3]),-1<["P","A"].indexOf(A)&&(t.dimension=E.dimension[0]),-1<["G","Z","F","X"].indexOf(A)&&(t.dimension=E.dimension[1]),-1<["S"].indexOf(A)&&(t.dimension=E.dimension[2]),-1<["U"].indexOf(A)&&(t.dimension=E.dimension[3]),"P"==A&&"O"!=R&&(t.space=!0),"O"==R&&-1<["V","O","R"].indexOf(A)&&(t.activity=!0),"G"==R&&(t.controlMeasure=!0),"H"==S&&(t.installation=!0),this.style.frame&&"A"==C&&(t.notpresent=I._dashArrays.anticipated),this.style.frame&&-1<["P","A","S","G","M"].indexOf(e)&&(t.notpresent=I._dashArrays.pending),"C"==C&&(t.condition=E.status[2]),"D"==C&&(t.condition=E.status[3]),"X"==C&&(t.condition=E.status[4]),"F"==C&&(t.condition=E.status[5]),-1<["G","W","D","L","M","J","K"].indexOf(e)&&(t.context=E.context[1]),"O"==R&&(t.dimension=E.dimension[1]),"E"==R&&(t.dimension=E.dimension[1]),t.baseDimension=t.dimension,t.baseAffilation=t.affiliation,"J"==e&&(t.joker=!0),"K"==e&&(t.faker=!0),(t.joker||t.faker)&&(t.affiliation=E.affiliation[1]),"S"==R&&"G"==A&&"E"==T.charAt(0)&&(t.dimension=E.dimension[2]),"I"==R&&"G"==A&&(t.dimension=E.dimension[2]),"E"==R&&("O"==A&&-1<["AB----","AE----","AF----","BB----","CB----","CC----","DB----","DDB---","DEB---","DFB---","DGB---","DHB---","DIB---","DJB---","DLB---","DMB---","DOB---","EA----","EB----","EC----","ED----","EE----"].indexOf(T)||"F"==A&&-1<["BA----","MA----","MC----"].indexOf(T))&&(t.dimension=E.dimension[2]),(-1<["F","G","C","D"].indexOf(S)||"H"==S&&"B"==N)&&(t.feintDummy=!0),-1<["A","B","C","D"].indexOf(S)&&(t.headquarters=!0),"G"==A&&"UH----"==T&&(t.headquarters=!0),-1<["E","B","G","D"].indexOf(S)&&(t.taskForce=!0),"A"==N&&(t.echelon=E.echelonMobility[11]),"B"==N&&"H"!=S&&(t.echelon=E.echelonMobility[12]),"C"==N&&(t.echelon=E.echelonMobility[13]),"D"==N&&(t.echelon=E.echelonMobility[14]),"E"==N&&(t.echelon=E.echelonMobility[15]),"F"==N&&(t.echelon=E.echelonMobility[16]),"G"==N&&(t.echelon=E.echelonMobility[17]),"H"==N&&(t.echelon=E.echelonMobility[18]),"I"==N&&(t.echelon=E.echelonMobility[21]),"J"==N&&(t.echelon=E.echelonMobility[22]),"K"==N&&(t.echelon=E.echelonMobility[23]),"L"==N&&"N"!=S&&(t.echelon=E.echelonMobility[24]),"M"==N&&(t.echelon=E.echelonMobility[25]),"N"==N&&(t.echelon=E.echelonMobility[26]),"M"==S)switch(N){case"O":t.mobility=E.echelonMobility[31];break;case"P":t.mobility=E.echelonMobility[32];break;case"Q":t.mobility=E.echelonMobility[33];break;case"R":t.mobility=E.echelonMobility[34];break;case"S":t.mobility=E.echelonMobility[35];break;case"T":t.mobility=E.echelonMobility[36];break;case"U":t.mobility=E.echelonMobility[41];break;case"V":t.mobility=E.echelonMobility[42];break;case"W":t.mobility=E.echelonMobility[37];break;case"Y":t.mobility=E.echelonMobility[51];break;case"Z":t.mobility=E.echelonMobility[52];break;default:t.mobility=void 0}if("N"==S)switch(N){case"S":t.mobility=E.echelonMobility[61];break;case"L":t.mobility=E.echelonMobility[62];break;default:t.mobility=void 0}return("A"==A&&"C"==T.charAt(0)||"G"==A&&"EVC"==T.substring(0,3)||"S"==A&&"X"==T.charAt(0))&&(t.civilian=!0),"Z"!=A&&"X"!=A||(-1<["P","U","F","N","H","A","S","G","W"].indexOf(e)&&(t.dimensionUnknown=!0),-1<["F","A"].indexOf(e)&&(t.dimension="Sea"),-1<["D","L","M","J","K"].indexOf(e)&&(t.affiliation="none")),"S"==A&&-1<["O-----","ED----","EP----","EV----","ZM----","ZN----","ZI----"].indexOf(T)&&(t.frame=!1),"E"==R&&"N"==A&&-1<["AA----","AB----","AC----","AD----","AE----","AG----","BB----","BC----","BF----","BM----","-C-----","CA----","CB----","CC----","CD----","CE----"].indexOf(T)&&(t.frame=!1),"W"==R&&"S"==A&&-1<["WSVE--","WSD-LI","WSFGSO","WSGRL-","WSR-LI","WSDSLM","WSS-LI","WSTMH-","WST-FC","WSTSS-"].indexOf(T)&&(t.frame=!1),"U"==A&&-1<["WM----","WMD---","WMG---","WMGD--","WMGX--","WMGE--","WMGC--","WMGR--","WMGO--","WMM---","WMMD--","WMMX--","WMME--","WMMC--","WMMR--","WMMO--","WMF---","WMFD--","WMFX--","WMFE--","WMFC--","WMFR--","WMFO--","WMO---","WMOD--","WMX---","WME---","WMA---","WMC---","WMR---","WMB---","WMBD--","WMN---","WMS---","WMSX--","WMSD--","WD----","WDM---","WDMG--","WDMM--","ND----","E-----","V-----","X-----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(T)&&(t.STD2525?(t.fill=!1,"WD----"==T&&(t.fill=!0),-1<["ND----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(T)&&(t.fill=!0,t.frame=!1)):(t.frame=!1,-1<["E-----","V-----","X-----"].indexOf(T)&&(t.fill=!1,t.frame=!1))),"WAS"!=this.options.sidc.substr(0,3)&&"WOS"!=this.options.sidc.substr(0,3)&&"G"!=R||(t.frame=!1),"G"==R&&"O"==A&&-1<["V","L","P","I"].indexOf(T.charAt(0))&&(t.frame=!0,t.dimension=E.dimension[1]),t}function M(I,t,E){var R={},e={};for(var A in I._iconSIDC.letter)I._iconSIDC.letter.hasOwnProperty(A)&&I._iconSIDC.letter[A].call(this,R,e,t,E);return{icons:R,bbox:e}}function n(I,t){if("object"==typeof I){if(Array.isArray(I)){for(var E=0;E<I.length;E++)n.call(this,I[E],t);return}return I.icon=!0,"text"==I.type&&(I.hasOwnProperty("fontfamily")||(I.fontfamily="Arial"),I.hasOwnProperty("fontweight")||(I.fontweight="bold"),I.hasOwnProperty("textanchor")||(I.textanchor="middle"),I.hasOwnProperty("stroke")||(I.stroke=!1)),I.hasOwnProperty("fill")||(I.fill=t),void(I.hasOwnProperty("stroke")||(I.stroke=t))}}function a(I){var t=42,E=115;return 1==I.length&&(t=45,E=115),3==I.length&&(t=35,E=110),4<=I.length&&(t=32,E=110),{type:"text",stroke:!1,textanchor:"middle",x:100,y:E,fontsize:t,text:I}}function l(I){var t=30;return 3==I.length&&(t=25),4<=I.length&&(t=22),{type:"text",stroke:!1,textanchor:"middle",x:100,y:77,fontsize:t,text:I}}function r(I){var t=30,E=145;return 3==I.length&&(t=25,E=140),4<=I.length&&(t=20,E=135),{type:"text",stroke:!1,textanchor:"middle",x:100,y:E,fontsize:t,text:I}}function i(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=t.frame,S=t.numberSIDC,N=E.iconColor[C],O=E.iconFillColor[C],G=E.none[C],o=E.black[C],M={"SP.I.ANTISATELLITE WEAPON":{type:"path",d:"m 100,110 0,9 m 0,-34 0,5 m 0,-9 -2,4 4,0 z m -10,9 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},"SP.I.ASTRONOMICAL SATELLITE":{type:"path",d:"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},"SP.I.BIOSATELLITE":{type:"path",d:"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"},"SP.I.CAPSULE":{type:"path",d:"m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"}};for(var i in M["SP.I.CIVILIAN ASTRONOMICAL SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN BIOSATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"},M["SP.I.CIVILIAN CAPSULE"]={type:"path",fill:R?O:!T&&O,d:"m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"},M["SP.I.CIVILIAN COMMUNICATIONS SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 100,90 0,9 M 75,81 c 16,12 34,12 50,0"}],M["SP.I.CIVILIAN EARTH OBSERVATION SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},{type:"path",fill:!1,d:"m 88,107 c 8,-9 16,-9 24,0"}],M["SP.I.CIVILIAN MINIATURIZED SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"},{type:"path",fill:!1,d:"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"}],M["SP.I.CIVILIAN NAVIGATIONAL SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"}],M["SP.I.CIVILIAN ORBITER SHUTTLE"]={type:"path",fill:R?O:!T&&O,d:"m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"},M["SP.I.CIVILIAN SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN SPACE STATION"]={type:"path",fill:R?O:!T&&O,d:"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"},M["SP.I.CIVILIAN TETHERED SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN WEATHER SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:25,text:"WX"}],M["SP.I.CIVILIAN"]=a("CIV"),M["SP.I.CIVILIAN"].fill=R||S?O:!T&&O,M["SP.I.CIVILIAN"].stroke=o,M["SP.I.CIVILIAN"].strokewidth=3,M["SP.I.COMMUNICATIONS SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 100,90 0,9 M 75,81 c 16,12 34,12 50,0"}],M["SP.M1.CYBERSPACE"]=l("CYB"),M["SP.M2.CYBERSPACE"]=r("CYB"),M["SP.I.EARTH OBSERVATION SATELLITE"]=[{type:"path",d:"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},{type:"path",fill:!1,d:"m 88,107 c 8,-9 16,-9 24,0"}],M["SP.I.FF.CREWED SPACE VEHICLE"]={type:"path",stroke:!1,d:"m 100.3,62.4 c -1.8,-0 -4.3,3.7 -4.5,5.4 -2.5,11.3 -3.4,23.1 -6.2,33.4 -2.9,6.7 -6.8,8.3 -9.9,12.1 -3,3.6 -8.5,10.4 -8.5,10.4 l 0,6.4 c 0,0 5.9,0.9 8.9,1.2 3,0.2 8.7,0.1 8.7,0.1 l 0.3,4.3 4.3,0.2 0.2,3.1 5.8,0 0.9,6.5 0.9,-6.4 5.8,0 0.2,-3.1 4.3,-0.2 0.3,-4.3 c 0,0 5.7,0.1 8.7,-0.1 3,-0.2 8.9,-1.2 8.9,-1.2 l 0,-6.4 c 0,0 -5.5,-6.7 -8.5,-10.3 -3.1,-3.8 -7,-5.4 -9.9,-12.1 -2.8,-10.4 -3.7,-22.2 -6.2,-33.4 -0.3,-2.9 -2.7,-5.5 -4.5,-5.5 z"},M["SP.I.FF.SATELLITE"]=[{type:"path",stroke:!1,d:"m 115,70 20,0 0,55 -20,0 z m -25,5 20,0 0,45 -20,0 z m -25,-5 20,0 0,55 -20,0 z"},{type:"path",fill:!1,d:"M80,135 c10,-10 30,-10 40,0 M100,127 L100,100 M70,100 L130,100"}],M["SP.I.FF.SPACE STATION"]=[{type:"path",d:"m 103.1,97.4 c -12.4,0.3 -25.7,0.1 -36.7,6.7 -4.1,2.1 -8.5,5.9 -7.8,11 0.2,3.7 0.3,7.4 0.5,11.1 6.2,7.8 16.6,10.4 26,11.8 14,1.8 28.5,1.2 42.1,-3 5.2,-1.7 10.4,-4.3 14.2,-8.3 0.3,-5.1 -0.3,-10.4 0.7,-15.3 -1.2,-4.3 -5.9,-6.4 -9.7,-8.2 -9.2,-4 -19.3,-5.4 -29.2,-5.6 z m -3.2,9.6 c 10.1,-0.2 20.5,1.9 29.1,7.4 -13,8.4 -29.6,9.7 -44.3,6.1 -4.9,-1.3 -9.7,-3.3 -13.7,-6.4 8.8,-4.9 18.9,-6.9 28.9,-7.2 z",fill:R?O:G},{type:"path",fill:!1,stroke:"black",d:"m 96.9,107 c 0.7,-8.1 1.4,-16.3 2.1,-24.4 M 89.3,121.8 c 3.1,-13.2 6.2,-26.3 9.3,-39.5 4.9,12.7 9.7,25.5 14.6,38.2 m 27.8,-5.3 c -0.1,3.9 -0.2,7.8 -0.3,11.6 M 58.6,113.3 c 0.2,4.5 0.3,9 0.5,13.5 m -0.5,-1.2 c 3.5,6.3 11,8.6 17.6,10.5 16.4,4.1 33.9,3.9 50.1,-0.8 5.5,-1.8 11.8,-4.3 14.7,-9.7 m 0.5,-13 c -0.5,5.4 -6.1,8.1 -10.5,10 -15.4,5.7 -32.4,6.1 -48.5,3.6 -7.9,-1.4 -16.3,-3.4 -22.2,-9.2 -3.6,-3.9 -0.9,-9.6 3.4,-11.7 8.3,-5.2 18.3,-6.6 27.9,-7.5 13.5,-1 27.5,0 40.2,5.1 4.2,1.8 9.3,4.6 9.7,9.7 z m -13.3,1.6 c -8.2,-5.9 -18.8,-6.8 -28.6,-7 -9.5,0.1 -19.5,1.2 -27.6,6.4 l -0.6,0.5 m 58.9,-2.6 c -0.8,4.8 -6.1,6.4 -10,7.8 -13.2,3.7 -27.4,3.7 -40.5,-0 -3.8,-1.2 -8.1,-2.8 -9.8,-6.7 -0.7,-4.9 5,-7.1 8.7,-8.5 12.7,-4 26.6,-4 39.5,-1 4.4,1.2 9.8,2.8 11.9,7.3 l 0.1,0.5 0,0.5 z"},{type:"path",fill:"black",stroke:!1,d:"M 75.2,93.1 C 88.9,87 102.6,80.8 116.3,74.7 c 2.3,1.3 4.7,2.6 7,3.9 -13.7,6 -27.3,12 -41,18 -2.4,-1.2 -4.8,-2.3 -7.2,-3.5 z"}],M["SP.I.MANUAL TRACK"]=a("MAN"),M["SP.I.MILITARY"]=a("MIL"),M["SP.I.MINIATURIZED SATELLITE"]=[{type:"path",d:"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"},{type:"path",fill:!1,d:"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"}],M["SP.I.NAVIGATIONAL SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"}],M["SP.I.ORBITER SHUTTLE"]={type:"path",d:"m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"},M["SP.I.RE-ENTRY VEHICLE"]=a("RV"),M["SP.I.RECONNAISSANCE SATELLITE"]={type:"path",d:"m 106,100 9,20 m -21,-20 -9,20 m 17,-20 3,20 m -7,-20 -3,20 m 15,-30 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.SATELLITE, GENERAL"]=a("SAT"),M["SP.I.SATELLITE"]={type:"path",d:"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"},M["SP.I.SPACE LAUNCH VEHICLE"]=a("SLV"),M["SP.I.SPACE STATION"]={type:"path",d:"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"},M["SP.I.SPACE VEHICLE"]=a("SV"),M["SP.I.TETHERED SATELLITE"]={type:"path",d:"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.WEATHER SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:100,fontsize:25,text:"WX"}],M["SP.M1.GEOSTATIONARY ORBIT (GO)"]=l("GO"),M["SP.M1.GEOSYNCHRONOUS ORBIT (GSO)"]=l("GSO"),M["SP.M1.HIGH EARTH ORBIT (HEO)"]=l("HEO"),M["SP.M1.LOW EARTH ORBIT (LEO)"]=l("LEO"),M["SP.M1.MEDIUM EARTH ORBIT (MEO)"]=l("MEO"),M["SP.M1.MOLNIYA ORBIT (MO)"]=l("MO"),M["SP.M2.INFRARED"]=r("IR"),M["SP.M2.OPTICAL"]=r("O"),M["SP.M2.RADAR"]=r("R"),M["SP.M2.SIGNALS INTELLIGENCE (SIGINT)"]=r("SI"),M["SPACE.MISSILE.ICON"]={type:"path",d:"M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"},(R||S)&&(M["SPACE.MISSILE.ICON"].fill=T?E.fillColor.Unknown:E.iconFillColor.Unknown),M["SPACE.MISSILE.M1.BALLISTIC"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"B"},M["SPACE.MISSILE.M1.INTERCEPTOR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"I"},M["SPACE.MISSILE.M1.SPACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"P"}],M["SPACE.MISSILE.M2.ARROW"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"A"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.GROUND-BASED INTERCEPTOR (GBI)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"G"},M["SPACE.MISSILE.M2.INTERCONTINENTAL"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"C"}],M["SPACE.MISSILE.M2.INTERMEDIATE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.LONG RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"L"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.MEDIUM RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"M"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.PATRIOT"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"P"},M["SPACE.MISSILE.M2.SHORT RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.SPACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"P"}],M["SPACE.MISSILE.M2.STANDARD MISSILE - 3 (SM-3)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"3"}],M["SPACE.MISSILE.M2.STANDARD MISSILE - TERMINAL PHASE (SM-T)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"T"}],M["SPACE.MISSILE.M2.TERMINAL HIGH-ALTITUDE AREA DEFENSE (THAAD)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"T"},M["SPACE.MISSILE.M2.CLOSE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"C"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.DEBRIS"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"D"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"B"}],M["SPACE.MISSILE.M2.UNKNOWN"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"U"},M["SPACE.PLANET LANDER"]=a("PL"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}s.setColorMode=function(I,t){return this._colorModes[I]={},this._colorModes[I].Hostile=t.Hostile,this._colorModes[I].Friend=t.Friend,this._colorModes[I].Neutral=t.Neutral,this._colorModes[I].Unknown=t.Unknown,this._colorModes[I].Civilian=t.Civilian,this._colorModes[I]},s.addSymbolPart=function(I){if("function"==typeof I){var t=s.getSymbolParts();-1==t.indexOf(I)&&s.setSymbolParts(t.concat(I))}return s},s.getSymbolParts=function(){return this._symbolParts.slice(0)},s.setSymbolParts=function(I){return this._symbolParts=I,s},s.reset=function(){for(var I in this._brokenPath2D=void 0,this._colorModes={},t)s.setColorMode(I,t[I]);this._dashArrays={pending:"4,4",anticipated:"8,12",feintDummy:"8,8"},this._getIcons={},this._getMetadata={},this._hqStaffLength=100,this._iconCache={},this._iconParts=[],this._labelCache={},this._labelOverrides={},this._iconSIDC={},this._iconSIDC.letter=[],this._iconSIDC.number=[],this._STD2525=!0,this._svgNS="http://www.w3.org/2000/svg",this._symbolParts=[],s.addSymbolPart(E),s.addSymbolPart(R),s.addSymbolPart(e),s.addSymbolPart(A),s.addSymbolPart(C),s.addSymbolPart(T),s.addSymbolPart(S),s.addSymbolPart(N)},s.reset(),s.BBox=I,s.ColorMode=function(I,t,E,R,e){var A={};return A.Civilian=I,A.Friend=t,A.Hostile=E,A.Neutral=R,A.Unknown=e,A},s.setBrokenPath2D=function(I){s._brokenPath2D=I},s._getIconParts=function(I,t,E,R,e){var A={};for(var C in this._iconParts)this._iconParts.hasOwnProperty(C)&&this._iconParts[C].call(this,A,I,t,E,R,e);return A},s._scale=function(I,t){return{type:"translate",x:100-100*I,y:100-100*I,draw:[{type:"scale",factor:I,draw:[t]}]}},s._translate=function(I,t,E){return{type:"translate",x:I,y:t,draw:[E]}},s.addIconParts=function(I){Array.isArray(I)||(I=[I]);for(var t=0;t<I.length;t++)"function"==typeof I[t]&&-1==this._iconParts.indexOf(I[t])&&(this._iconParts=this._iconParts.concat(I[t]));return s},s.addLabelOverrides=function(I,t){return this._labelCache={},"function"==typeof I&&(this._labelOverrides.hasOwnProperty(t)||(this._labelOverrides[t]=[]),this._labelOverrides[t]=this._labelOverrides[t].concat(I)),s},s.addIcons=function(I){this._iconCache={},Array.isArray(I)||(I=[I]);for(var t=0;t<I.length;t++)I[t].hasOwnProperty("getMetadata")&&(s._getMetadata[I[t].type]=I[t].getMetadata),I[t].hasOwnProperty("getIcons")&&(s._getIcons[I[t].type]=I[t].getIcons),I[t].hasOwnProperty("iconParts")&&s.addIconParts(I[t].iconParts),I[t].hasOwnProperty("labels")&&s.addLabelOverrides(I[t].labels,I[t].type),I[t].hasOwnProperty("icons")&&s.addSIDCicons(I[t].icons,I[t].type)},s.addSIDCicons=function(I,t){return"function"==typeof I&&-1==this._iconSIDC[t].indexOf(I)&&(this._iconSIDC[t]=this._iconSIDC[t].concat(I)),s},s.getColorMode=function(I){var t=this._colorModes[I];return new s.ColorMode(t.Civilian,t.Friend,t.Hostile,t.Neutral,t.Unknown)},s.getDashArrays=function(){return this._dashArrays},s.getHqStaffLength=function(){return this._hqStaffLength},s.getVersion=function(){return this.version},s.outline=function(I,t,E,R){return function I(t,E,R,e){var A;if(Array.isArray(t))for(var C in A=[],t)A.push(I(t[C],E,R,e));else{for(var T in A={},t)-1==["fill","fillopacity"].indexOf(T)&&(A[T]=t[T]);if("translate"==t.type||"rotate"==t.type||"scale"==t.type)for(var S in A.draw=[],t.draw)A.draw.push(I(t.draw[S],E,R,e));else A.strokewidth=!1!==A.stroke?Number(A.strokewidth||R)+2*E:2*E,A.stroke=e,A.fill=!1,A.linecap="round"}return A}(I,t,E,R)},s.setDashArrays=function(I,t,E){return this._dashArrays.pending=I,this._dashArrays.anticipated=t,this._dashArrays.feintDummy=E,this._dashArrays},s.setHqStaffLength=function(I){return this._hqStaffLength=I,this._hqStaffLength},s.setStandard=function(I){return"2525"==I?this._STD2525=!0:"APP6"==I&&!(this._STD2525=!1)},s._symbolGeometries=O,G.prototype.asCanvas=function(I){if(void 0===s._brokenPath2D)if("undefined"==typeof Path2D)s.setBrokenPath2D(!0);else{var t=document.createElement("canvas");t.widht=1,t.height=1;var E=t.getContext("2d"),R=new Path2D("M0 0 h 10 v 10 h -10 Z");E.fill(R);var e=E.getImageData(0,0,1,1).data.join();s.setBrokenPath2D(!("0,0,0,255"==e))}var A=document.createElement("canvas");I=I||1,A.width=this.width*I,A.height=this.height*I;var C=A.getContext("2d");return C.scale(I*this.style.size/100,I*this.style.size/100),C.translate(-(this.bbox.x1-this.style.strokeWidth-this.style.outlineWidth),-(this.bbox.y1-this.style.strokeWidth-this.style.outlineWidth)),this.canvasDraw.call(this,C,this.drawInstructions),A},G.prototype.canvasDraw=function I(t,E){for(var R=0;R<E.length;R++)if(Array.isArray(E[R]))E[R].length&&I.call(this,t,E[R]);else if("object"==typeof E[R]){switch(t.lineWidth=E[R].strokewidth||this.style.strokeWidth,void 0!==E[R].stroke&&(E[R].stroke?t.strokeStyle=E[R].stroke:t.strokeStyle="rgba(0,0,0,0)"),E[R].strokedasharray?t.setLineDash(E[R].strokedasharray.split(",")):0!=t.getLineDash().length&&t.setLineDash([]),E[R].linecap&&(t.lineCap=E[R].linecap,t.lineJoin=E[R].linecap),E[R].fill&&(t.fillStyle=E[R].fill),E[R].fill||(t.fillStyle="rgba(0,0,0,0)"),void 0!==E[R].fillopacity&&(t.globalAlpha=E[R].fillopacity),E[R].type){case"path":if(s._brokenPath2D)"function"==typeof s.Path2D?(s.Path2D(t,E[R].d),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(),1!=t.globalAlpha&&(t.globalAlpha=1),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke()):console.warn("ms.Path2D() is not present, you will need to load functionality for using Canvas in older version of Internet Explorer.");else{var e=new Path2D(E[R].d);E[R].hasOwnProperty("clipPath")&&(t.save(),t.clip(new Path2D(E[R].clipPath),"nonzero")),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(e),E[R].hasOwnProperty("clipPath")&&t.restore(),1!=t.globalAlpha&&(t.globalAlpha=1),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke(e)}break;case"circle":E[R].hasOwnProperty("clipPath")&&(t.save(),t.clip(new Path2D(E[R].clipPath),"nonzero")),t.beginPath(),t.arc(E[R].cx,E[R].cy,E[R].r,0,2*Math.PI,!1),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(),E[R].hasOwnProperty("clipPath")&&t.restore(),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke();break;case"text":t.font=(void 0!==E[R].fontweight?E[R].fontweight+" ":"")+E[R].fontsize+"px "+E[R].fontfamily,t.textAlign="middle"==E[R].textanchor?"center":E[R].textanchor,t.fillText(E[R].text,E[R].x,E[R].y),E[R].stroke&&t.strokeText(E[R].text,E[R].x,E[R].y);break;case"translate":t.save(),t.translate(E[R].x,E[R].y),I.call(this,t,E[R].draw),t.restore();break;case"rotate":var A=E[R].x,C=E[R].y;t.save(),t.translate(A,C),t.rotate(E[R].degree*Math.PI/180),t.translate(-A,-C),I.call(this,t,E[R].draw),t.restore();break;case"scale":t.save(),t.scale(E[R].factor,E[R].factor),I.call(this,t,E[R].draw),t.restore()}E[R].linecap&&(t.lineCap="butt",t.lineJoin="miter"),void 0!==E[R].fillopacity&&(t.globalAlpha=1)}},G.prototype.asDOM=function(){var I=document,t=(new DOMParser).parseFromString(this.asSVG(),"text/xml");return I.adoptNode(t.documentElement)},G.prototype.asSVG=function(){var I='<svg xmlns="'+s._svgNS+'" version="1.2" baseProfile="tiny" width="'+this.width+'" height="'+this.height+'" viewBox="'+(this.bbox.x1-this.style.strokeWidth-this.style.outlineWidth)+" "+(this.bbox.y1-this.style.strokeWidth-this.style.outlineWidth)+" "+this.baseWidth+" "+this.baseHeight+'">';return I+=function I(t){for(var E="",R=0;R<t.length;R++)if(Array.isArray(t[R]))t[R].length&&(E+=I.call(this,t[R]));else if("object"==typeof t[R]){var e="";if("svg"==t[R].type)e+=t[R].svg;else{switch(t[R].hasOwnProperty("clipPath")&&(e+='<clipPath id="clip">',e+='<path d="'+t[R].clipPath+'" clip-rule="nonzero" />',e+="</clipPath>"),t[R].type){case"path":e+='<path d="'+t[R].d+'" ',t[R].hasOwnProperty("clipPath")&&(e+='clip-path="url(#clip)" ');break;case"circle":e+='<circle cx="'+t[R].cx+'" cy="'+t[R].cy+'" r="'+t[R].r+'" ',t[R].hasOwnProperty("clipPath")&&(e+='clip-path="url(#clip)" ');break;case"text":e+='<text x="'+t[R].x+'" y="'+t[R].y+'" text-anchor="'+t[R].textanchor+'" font-size="'+t[R].fontsize+'" font-family="'+t[R].fontfamily+'" ',t[R].fontweight&&(e+='font-weight="'+t[R].fontweight+'" ');break;case"translate":e+='<g transform="translate('+t[R].x+","+t[R].y+')" ';break;case"rotate":e+='<g transform="rotate('+t[R].degree+","+t[R].x+","+t[R].y+')" ';break;case"scale":e+='<g transform="scale('+t[R].factor+')" '}switch(void 0!==t[R].stroke&&(e+='stroke-width="'+(t[R].strokewidth||this.style.strokeWidth)+'" ',t[R].strokedasharray&&(e+='stroke-dasharray="'+t[R].strokedasharray+'" '),t[R].linecap&&(e+='stroke-linecap="'+t[R].linecap+'" ',e+='stroke-linejoin="'+t[R].linecap+'" '),t[R].stroke?e+='stroke="'+t[R].stroke+'" ':e+='stroke="none" '),void 0!==t[R].fill&&(e+='fill="'+(t[R].fill?t[R].fill:"none")+'" '),void 0!==t[R].fillopacity&&(e+='fill-opacity="'+t[R].fillopacity+'" '),e+=">",t[R].type){case"path":e+="</path>";break;case"circle":e+="</circle>";break;case"text":e+=String(t[R].text).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")+"</text>";break;case"translate":case"rotate":case"scale":e+=I.call(this,t[R].draw),e+="</g>"}}E+=e}return E}.call(this,this.drawInstructions),I+="</svg>",this.XML=I},G.prototype.getAnchor=function(){return this.symbolAnchor},G.prototype.getColors=function(){var I="object"==typeof this.style.colorMode?this.style.colorMode:s.getColorMode(this.style.colorMode),t="object"==typeof this.style.frameColor?this.style.frameColor:s.getColorMode("FrameColor"),E="object"==typeof this.style.iconColor?this.style.iconColor:s.getColorMode("IconColor"),R=I,e=s.getColorMode("Black"),A=s.getColorMode("White"),C=s.getColorMode("OffWhite"),T=s.getColorMode("None");this.style.civilianColor&&this.metadata.civilian&&(I.Friend=I.Neutral=I.Unknown=I.Civilian,t.Friend=t.Neutral=t.Unknown=t.Civilian,E.Friend=E.Neutral=E.Unknown=E.Civilian),(this.metadata.joker||this.metadata.faker)&&(I.Friend=I.Hostile,t.Friend=t.Hostile,E.Friend=E.Hostile),""!=this.style.monoColor&&(t.Friend=t.Neutral=t.Hostile=t.Unknown=t.Civilian=this.style.monoColor,e=t,A=I=T);var S={fillColor:I,frameColor:t,iconColor:E,iconFillColor:R,none:T,black:e,white:A};return this.metadata.frame?S.frameColor="object"==typeof this.style.frameColor?this.style.frameColor:e:S.frameColor=T,this.metadata.fill?(S.fillColor=this.metadata.frame||!this.metadata.frame&&!this.style.icon?I:T,S.iconColor="object"==typeof this.style.iconColor?this.style.iconColor:e,S.iconFillColor=this.metadata.frame?C:I,S.white=C):(S.fillColor=T,S.frameColor=this.metadata.frame?t:T,S.iconColor=t,S.iconFillColor=T,this.metadata.frame||this.metadata.fill||this.style.icon||(S.frameColor=e,S.fillColor=e)),S},G.prototype.getOctagonAnchor=function(){return this.octagonAnchor},G.prototype.getMetadata=function(){var I={activity:!1,affiliation:"undefined",baseAffilation:"",baseDimension:"",baseGeometry:{g:"",bbox:{}},civilian:!1,condition:"",context:"",dimension:"undefined",dimensionUnknown:!1,echelon:"",faker:!1,fenintDummy:!1,fill:this.style.fill,frame:this.style.frame,functionid:"",headquarters:!1,installation:!1,joker:!1,mobility:"",notpresent:"",numberSIDC:!1,space:!1,STD2525:s._STD2525,taskForce:!1,unit:!1},t={context:["Reality","Exercise","Simulation"],status:["Present","Planned","FullyCapable","Damaged","Destroyed","FullToCapacity"],echelonMobility:{11:"Team/Crew",12:"Squad",13:"Section",14:"Platoon/detachment",15:"Company/battery/troop",16:"Battalion/squadron",17:"Regiment/group",18:"Brigade",21:"Division",22:"Corps/MEF",23:"Army",24:"Army Group/front",25:"Region/Theater",26:"Command",31:"Wheeled limited cross country",32:"Wheeled cross country",33:"Tracked",34:"Wheeled and tracked combination",35:"Towed",36:"Rail",37:"Pack animals",41:"Over snow (prime mover)",42:"Sled",51:"Barge",52:"Amphibious",61:"Short towed array",62:"Long towed Array",71:"Leader Individual",72:"Deputy Individual"},affiliation:["Hostile","Friend","Neutral","Unknown"],dimension:["Air","Ground","Sea","Subsurface"]};return I.context=t.context[0],this.style.standard&&(I.STD2525="APP6"!=this.style.standard),""!=this.style.monoColor&&(I.fill=!1),this.options.sidc=String(this.options.sidc).replace(/\*/g,"-").replace(/ /g,""),I.numberSIDC=!isNaN(this.options.sidc),I.numberSIDC?"function"==typeof s._getMetadata.number?I=s._getMetadata.number.call(this,s,I,t):console.warn("ms._getMetadata.number() is not present, you will need to load functionality for number based SIDCs"):"function"==typeof s._getMetadata.letter?I=s._getMetadata.letter.call(this,s,I,t):console.warn("ms._getMetadata.letter() is not present, you will need to load functionality for letter based SIDCs"),s._symbolGeometries.hasOwnProperty(I.dimension+I.affiliation)?I.baseGeometry=s._symbolGeometries[I.dimension+I.affiliation]:I.baseGeometry.bbox=new s.BBox,this.style.frame||this.style.icon||(I.baseGeometry=s._symbolGeometries.PositionMarker),I},G.prototype.getOptions=function(I){var t,E={};for(t in this.options)this.options.hasOwnProperty(t)&&(E[t]=this.options[t]);if(I||void 0===I)for(t in this.style)this.style.hasOwnProperty(t)&&(E[t]=this.style[t]);return E},G.prototype.getSize=function(){return void 0!==this.width&&void 0!==this.height||this.updateSymbol(),{width:this.width,height:this.height}},G.prototype.getStyle=function(){var I,t={};for(I in this.style)this.style.hasOwnProperty(I)&&(t[I]=this.style[I]);return t},G.prototype.isValid=function(I){var t=-1==JSON.stringify(this.drawInstructions).indexOf("null");return I?{affiliation:this.metadata.affiliation,dimension:this.metadata.dimension,dimensionUnknown:this.metadata.dimensionUnknown,drawInstructions:t,icon:this.validIcon,mobility:null!=this.metadata.mobility}:!("undefined"==this.metadata.affiliation||"undefined"==this.metadata.dimension&&!this.metadata.controlMeasure)&&t&&this.validIcon&&null!=this.metadata.mobility},G.prototype.setOptions=function(){var I;for(I=0;I<arguments.length;I++){var t=arguments[I];if("object"==typeof t)for(var E in t)t.hasOwnProperty(E)&&("SIDC"!==E?this.style.hasOwnProperty(E)?this.style[E]=t[E]:this.options[E]=t[E]:this.options.sidc=t[E]);else this.options.sidc=t}for(I in this.validIcon=!0,this.metadata=this.getMetadata(),this.colors=this.getColors(),this.drawInstructions=[],this.bbox=new s.BBox,s._symbolParts)if(s._symbolParts.hasOwnProperty(I)){var R=s._symbolParts[I].call(this,s),e=0<R.pre.length||0<R.post.length;if(R.pre){if(0<R.pre.length){for(;1==R.pre.length;)R.pre=R.pre[0];0!=R.pre.length&&(this.drawInstructions=[].concat(R.pre,this.drawInstructions))}if(0<R.post.length){for(;1==R.post.length&&(R.post=R.post[0],void 0!==R.post););void 0!==R.post&&0==R.post.length||(this.drawInstructions=this.drawInstructions.concat(R.post))}"object"==typeof R.bbox&&e&&this.bbox.merge(R.bbox)}}this.style.padding&&(this.bbox.x1-=this.style.padding,this.bbox.x2+=this.style.padding,this.bbox.y1-=this.style.padding,this.bbox.y2+=this.style.padding);var A={x:100,y:100};if(this.octagonAnchor={x:(A.x-this.bbox.x1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100,y:(A.y-this.bbox.y1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100},this.metadata.headquarters){var C=this.style.hqStaffLength||s._hqStaffLength;A={x:this.metadata.baseGeometry.bbox.x1,y:this.metadata.baseGeometry.bbox.y2+C}}if(this.style.square){var T=Math.max(A.x-this.bbox.x1,this.bbox.x2-A.x),S=Math.max(A.y-this.bbox.y1,this.bbox.y2-A.y),N=Math.max(T,S);this.bbox.x1=A.x-N,this.bbox.y1=A.y-N,this.bbox.x2=A.x+N,this.bbox.y2=A.y+N}return this.baseWidth=this.bbox.width()+Number(2*this.style.strokeWidth)+Number(2*this.style.outlineWidth),this.baseHeight=this.bbox.height()+Number(2*this.style.strokeWidth)+Number(2*this.style.outlineWidth),this.width=this.baseWidth*this.style.size/100,this.height=this.baseHeight*this.style.size/100,this.symbolAnchor={x:(A.x-this.bbox.x1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100,y:(A.y-this.bbox.y1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100},s._autoValidation&&(this.isValid()||(console.warn("Error in symbol: "+this.options.sidc),console.warn(this.isValid(!0)))),this},G.prototype.toDataURL=function(){return"data:image/svg+xml;base64,"+window.btoa(this.asSVG())},s.Symbol=G;var L={type:"letter",getMetadata:o,getIcons:M,iconParts:[i],icons:function(I,t,E,R){I["S-P-------"]=[],I["S-P-S-----"]=[E["SP.I.FF.SATELLITE"]],I["S-P-V-----"]=[E["SP.I.FF.CREWED SPACE VEHICLE"]],I["S-P-T-----"]=[E["SP.I.FF.SPACE STATION"]],I["S-P-L-----"]=[E["SP.I.SPACE LAUNCH VEHICLE"]]}};function P(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.numberSIDC,N=E.iconColor[T],O=E.iconFillColor[T],G=E.black[T],o={};for(var M in o["AR.I.MILITARY"]=a("MIL"),o["AR.I.CIVILIAN"]=a("CIV"),o["AR.I.CIVILIAN"].fill=R||S?O:!C&&O,o["AR.I.CIVILIAN"].stroke=G,o["AR.I.CIVILIAN"].strokewidth=3,o["AR.I.MILITARY FIXED WING"]={type:"path",d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.CIVILIAN FIXED WING"]={type:"path",fill:!1,d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.FF.CIVILIAN FIXED WING"]={type:"path",stroke:G,d:"M62,80 l30,0 0,-10 16,0 0,10 30,0 0,15 -30,0 0,25 10,0 0,5 -36,0 0,-5 10,0 0,-25 -30,0 Z M95,70 l0,-5 10,0 0,5",fill:!!R&&O},o["AR.I.MILITARY ROTARY WING"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.CIVILIAN ROTARY WING"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.FF.CIVILIAN ROTARY WING"]=[{type:"path",stroke:G,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:G,fill:!!R&&O,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"}],o["AR.I.MILITARY BALLOON"]=[{type:"circle",cx:100,cy:95,r:15},{type:"path",d:"M95,110 l0,10 10,0 0,-10 z"}],o["AR.I.FF.MILITARY BALLOON"]=[{type:"path",d:"M90,115 l20,0 0,20 -20,0 z"},{type:"circle",cx:100,cy:90,r:35}],o["AR.I.CIVILIAN BALLOON"]=[{type:"circle",fill:!(!R&&!S)&&O,stroke:G,cx:100,cy:95,r:15},{type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M95,110 l0,10 10,0 0,-10 z"}],o["AR.I.FF.CIVILIAN BALLOON"]=[{type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M90,125 l20,0 0,10 -20,0 z"},{type:"circle",fill:!(!R&&!S)&&O,stroke:G,cx:100,cy:90,r:35}],o["AR.I.MILITARY AIRSHIP"]={type:"path",d:"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"},o["AR.I.CIVILIAN AIRSHIP"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"},o["AR.I.UNMANNED AERIAL VEHICLE"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},o["AR.I.AIR DECOY"]={type:"path",d:"M65,95 l15,-15 0,30 Z M92.5,95 l15,-15 0,30 Z M120,95 l15,-15 0,30 Z M65,120 l70,0 0,-5 -70,0 Z"},o["SU.IC.AIR DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},o["AR.I.MEDICAL EVACUATION"]={type:"path",d:"M93,83 l14,0 0,10 10,0 0,14 -10,0 0,10 -14,0 0,-10 -10,0 0,-14 10,0 Z"},o["AR.I.ATTACK/STRIKE"]=a("A"),o["AR.I.BOMBER"]=a("B"),o["AR.I.CARGO"]=a("C"),o["AR.I.ESCORT"]=a("E"),o["AR.I.FIGHTER"]=a("F"),o["AR.I.FIGHTER INTERCEPTOR"]=a("I"),o["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]=a("J"),o["AR.I.TANKER"]=a("K"),o["AR.I.PATROL"]=a("P"),o["AR.I.RECONNAISSANCE"]=a("R"),o["AR.I.2525 PHOTOGRAPHIC"]=a("X"),o["AR.I.TRAINER"]=a("T"),o["AR.I.UTILITY"]=a("U"),o["AR.I.VSTOL"]=a(R&&!S?"L":"V"),o["AR.I.AIRBORNE COMMAND POST"]=a(R&&!S?"D":"ACP"),o["AR.I.AIRBORNE EARLY WARNING"]=a(R&&!S?"W":"AEW"),o["AR.I.ANTISURFACE WARFARE"]=a(R&&!S?"N":"ASUW"),o["AR.I.ANTISUBMARINE WARFARE"]=a(R&&!S?"S":"ASW"),o["AR.I.COMMUNICATIONS"]=a(R&&!S?"Y":"COM"),o["AR.I.COMBAT SEARCH AND RESCUE"]=a("CSAR"),o["AR.I.ELECTRONIC SUPPORT MEASURES"]=a(R?"Z":"ESM"),o["AR.I.GOVERNMENT"]=a("GOV"),o["AR.I.MINE COUNTERMEASURES"]=a("MCM"),o["AR.I.PERSONNEL RECOVERY"]=a(R?"H":"PRO"),o["AR.I.PASSENGER"]=a("PX"),o["AR.I.SEARCH AND RESCUE"]=a("SAR"),o["AR.I.SUPRESSION OF ENEMY AIR DEFENCE"]=a("SEAD"),o["AR.I.SPECIAL OPERATIONS FORCES"]=a("SOF"),o["AR.I.ULTRA LIGHT"]=a("UL"),o["AR.I.VIP"]=a("VIP"),o["AR.I.FF.MILITARY FIXED WING"]={type:"path",d:"m 99.2,58.2 c -3,0.8 -2.5,5.8 -2.5,5.8 l -0.3,16 -37.2,36.5 1.3,4.6 L 96.7,96.6 97,128.6 l -8.5,8.2 0,4.6 9.3,-4.2 c 0.7,0.6 1.8,1.7 1.8,1.7 0,0 1.2,-1.1 1.9,-1.7 l 9.3,4.2 0,-4.6 -8.5,-8.2 0.3,-32 36.2,24.5 1.3,-4.6 -37.2,-36.5 -0.3,-16 c 0,0 0.5,-5 -2.5,-5.8 -0.4,-0.1 -0.7,-0.1 -1.1,0 z",stroke:!1},o["AR.I.FIXED-WING DSymbol"]={type:"path",d:R?"M 99.4 80.8 C 97.9 81.1 98.1 83.4 98.1 83.4 L 98 90.7 L 78.6 107.4 L 79.3 109.4 L 98.1 98.3 L 98.3 112.9 L 93.9 116.6 L 93.9 118.7 L 98.8 116.8 C 99.1 117 99.7 117.5 99.7 117.5 C 99.7 117.5 100.4 117 100.7 116.8 L 105.6 118.7 L 105.6 116.6 L 101.1 112.9 L 101.3 98.3 L 120.2 109.4 L 120.9 107.4 L 101.5 90.7 L 101.3 83.4 C 101.3 83.4 101.6 81.1 100 80.8 C 99.8 80.8 99.6 80.8 99.4 80.8 z":"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.CIVILIAN FIXED-WING DSymbol"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:R?"m 75.1,90.3 19.6,0 0,-6.5 10.5,0 0,6.5 19.6,0 0,9.7 -19.6,0 0,16.2 6.5,0 0,3.2 -23.6,0 0,-3.2 6.5,0 0,-16.2 -19.6,0 z m 21.6,-6.5 0,-3.2 6.5,0 0,3.2":"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.FIGHTER/BOMBER"]=a("F/B"),o["AR.I.ELECTRONIC SUPPORT"]=a(R?"ES":"ESM"),o["AR.I.PERSONNEL RECOVERY DSymbol"]=a("PR"),o["AR.I.PHOTOGRAPHIC RECONNAISSANCE"]=a("PH"),o["AR.I.ELECTRONIC ATTACK (EA)"]=a("EA"),o["AR.I.VERTICAL-TAKEOFF UAV (VT-UAV)"]={type:"path",d:"m 70,85 30,10 30,-10 0,-5 -30,5 -30,-5 z m -10,5 40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.TETHERED LIGHTER THAN AIR"]={type:"path",d:"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"},o["AR.I.CIVILIAN TETHERED LIGHTER THAN AIR"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"},o["AR.I.CIVILIAN UNMANNED AERIAL VEHICLE"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},o["AR.I.WEAPON"]=a("WPN"),o["AR.I.UNDERWATER DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},o["AR.I.BOMB"]=a("BOMB"),o["AR.I.MANUAL TRACK"]=a("MAN"),o["AIR.M1.ATTACK"]=l("A"),o["AIR.M1.BOMBER"]=l("B"),o["AIR.M1.CARGO"]=l("C"),o["AIR.M1.FIGHTER"]=l("F"),o["AIR.M1.INTERCEPTOR"]=l("I"),o["AIR.M1.TANKER"]=l("K"),o["AIR.M1.UTILITY"]=l("U"),o["AIR.M1.VSTOL"]=l(R&&!S?"L":"V"),o["AIR.M1.PASSENGER"]=l("PX"),o["AIR.M1.ULTRA LIGHT"]=l("UL"),o["AIR.M1.AIRBORNE COMMAND POST"]=l(R&&!S?"D":"ACP"),o["AIR.M1.ANTISURFACE WARFARE"]=l(R&&!S?"N":"ASUW"),o["AIR.M1.AIRBORNE EARLY WARNING"]=l(R&&!S?"W":"AEW"),o["AIR.M1.GOVERNMENT"]=l("GOV"),o["AIR.M1.MEDEVAC"]={type:"path",stroke:!1,d:"M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},o["AIR.M1.ESCORT"]=l("E"),o["AIR.M1.INTENSIVE CARE"]=l("IC"),o["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]=l("J"),o["AIR.M1.PATROL"]=l("P"),o["AIR.M1.RECONNAISSANCE"]=l("R"),o["AIR.M1.TRAINER"]=l("T"),o["AIR.M1.PHOTOGRAPHIC"]=l(R&&!S?"X":"PH"),o["AIR.M1.PERSONNEL RECOVERY"]=l("PR"),o["AIR.M1.ANTISUBMARINE WARFARE"]=l(R&&!S?"S":"ASW"),o["AIR.M1.COMMUNICATIONS"]=l(R&&!S?"Y":"COM"),o["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"]=l(R?"Z":"ESM"),o["AIR.M1.MINE COUNTERMEASURES"]=l("MCM"),o["AIR.M1.SEARCH AND RESCUE"]=l("SAR"),o["AIR.M1.SPECIAL OPERATIONS FORCES"]=l("SOF"),o["AIR.M1.SURFACE WARFARE"]=l("SUW"),o["AIR.M1.VIP"]=l("VIP"),o["AIR.M1.COMBAT SEARCH AND RESCUE"]=l(R&&!S?"H":"CSAR"),o["AIR.M1.SUPRESSION OF ENEMY AIR DEFENCE"]=l("SEAD"),o["AIR.M1.UNMANNED AERIAL VEHICLE"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},o["AIR.M1.BOOM-ONLY"]=l("B"),o["AIR.M1.DROUGE-ONLY"]=l("D"),o["AIR.M1.ELECTRONIC SUPPORT (ES)"]=l(R?"ES":"ESM"),o["AIR.M1.HIJACKER"]=l("HJ"),o["AIR.M1.CYBERSPACE"]=l("CYB"),o["AIR.M1.FIGHTER/BOMBER"]=l("F/B"),o["AIR.M1.ELECTRONIC ATTACK (EA)"]=l("EA"),o["AIR.M1.MULTIMISSION"]=l("MM"),o["AIR.M1.HIJACKING"]=l("H"),o["AIR.M1.ASW HELO-LAMPS"]=l("LP"),o["AIR.M1.ASW HELO - SH-60R"]=l("60R"),o["AIR.M2.HEAVY"]=r("H"),o["AIR.M2.MEDIUM"]=r("M"),o["AIR.M2.LIGHT"]=r("L"),o["AIR.M2.BOOM-ONLY"]=r("B"),o["AIR.M2.DROUGE-ONLY"]=r("D"),o["AIR.M2.BOOM AND DROUGE"]=r("B/D"),o["AIR.M2.CLOSE RANGE"]=r("CR"),o["AIR.M2.SHORT RANGE"]=r("SR"),o["AIR.M2.MEDIUM RANGE"]=r("MR"),o["AIR.M2.LONG RANGE"]=r("LR"),o["AIR.M2.PHOTOGRAPHIC"]=r("P"),o["AIR.M2.CYBERSPACE"]=r("CYB"),o["AIR.M2.DOWNLINKED"]={type:"text",stroke:!1,x:100,y:140,fontsize:25,text:"DL"},o["AIR.MISSILE.ICON"]={type:"path",d:"M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"},(R||S)&&(o["AIR.MISSILE.ICON"].fill=C?E.fillColor.Unknown:E.iconFillColor.Unknown),o["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"]={type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"ABM"},o["AIR.MISSILE.IC.BOMB"]={type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"BOMB"},o["AIR.MISSILE.M1.AIR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"A"},o["AIR.MISSILE.M1.SURFACE"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"S"},o["AIR.MISSILE.M1.SUBSURFACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"U"}],o["AIR.MISSILE.M1.SPACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"P"}],o["AIR.MISSILE.M1.ANTI-BALLISTIC"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"A"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"B"}],o["AIR.MISSILE.M1.BALLISTIC"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"B"},o["AIR.MISSILE.M1.CRUISE"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"C"},o["AIR.MISSILE.M1.LAND"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"L"},o["AIR.MISSILE.M1.INTERCEPTOR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"I"},o["AIR.MISSILE.M2.AIR"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"A"},o["AIR.MISSILE.M2.SURFACE"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"S"},o["AIR.MISSILE.M2.SUBSURFACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"U"}],o["AIR.MISSILE.M2.SPACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"P"}],o["AIR.MISSILE.M2.LAUNCHED"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"L"},o["AIR.MISSILE.M2.MISSILE"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"M"},o["AIR.MISSILE.M2.PATRIOT"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"P"},o["AIR.MISSILE.M2.STANDARD MISSILE - 2 (SM-2)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"2"}],o["AIR.MISSILE.M2.STANDARD MISSILE - 6 (SM-6)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"6"}],o["AIR.MISSILE.M2.EVOLVED SEA SPARROW MISSILE (ESSM)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"S"}],o["AIR.MISSILE.M2.ROLLING AIRFRAME MISSILE (RAM)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"R"},o["AIR.MISSILE.M2.SHORT RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.MEDIUM RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"M"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.INTERMEDIATE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.LONG RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"L"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.INTERCONTINENTAL"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"C"}],o)o.hasOwnProperty(M)&&(I.hasOwnProperty(M)&&console.warn("Override of: "+M),n.call(this,o[M],N),I[M]=o[M])}var y={type:"letter",getMetadata:o,getIcons:M,iconParts:[P],icons:function(I,t,E,R){I["S-A-------"]=[],I["S-A-M-----"]=[E["AR.I.MILITARY"]],I["S-A-MF----"]=[E["AR.I.FF.MILITARY FIXED WING"]],I["S-A-MFB---"]=[E["AR.I.BOMBER"]],I["S-A-MFF---"]=[E["AR.I.FIGHTER"]],I["S-A-MFFI--"]=[E["AR.I.FIGHTER INTERCEPTOR"]],I["S-A-MFT---"]=[E["AR.I.TRAINER"]],I["S-A-MFA---"]=[E["AR.I.ATTACK/STRIKE"]],I["S-A-MFL---"]=[E["AR.I.VSTOL"]],I["S-A-MFK---"]=[E["AR.I.TANKER"]],I["S-A-MFKB--"]=[E["AR.I.TANKER"],E["AIR.M1.BOOM-ONLY"]],I["S-A-MFKD--"]=[E["AR.I.TANKER"],E["AIR.M1.DROUGE-ONLY"]],I["S-A-MFC---"]=[E["AR.I.CARGO"]],I["S-A-MFCL--"]=[E["AR.I.CARGO"],E["AIR.M2.LIGHT"]],I["S-A-MFCM--"]=[E["AR.I.CARGO"],E["AIR.M2.MEDIUM"]],I["S-A-MFCH--"]=[E["AR.I.CARGO"],E["AIR.M2.HEAVY"]],I["S-A-MFJ---"]=[E["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-MFO---"]=[E["AR.I.MEDICAL EVACUATION"]],I["S-A-MFR---"]=[E["AR.I.RECONNAISSANCE"]],I["S-A-MFRW--"]=[E["AR.I.AIRBORNE EARLY WARNING"]],I["S-A-MFRZ--"]=[E["AR.I.ELECTRONIC SUPPORT MEASURES"]],I["S-A-MFRX--"]=R?[E["AR.I.2525 PHOTOGRAPHIC"]]:[E["AR.I.RECONNAISSANCE"],E["AIR.M2.PHOTOGRAPHIC"]],I["S-A-MFP---"]=[E["AR.I.PATROL"]],I["S-A-MFPN--"]=[E["AR.I.ANTISURFACE WARFARE"]],I["S-A-MFPM--"]=[E["AR.I.MINE COUNTERMEASURES"]],I["S-A-MFU---"]=[E["AR.I.UTILITY"]],I["S-A-MFUL--"]=[E["AR.I.UTILITY"],E["AIR.M2.LIGHT"]],I["S-A-MFUM--"]=[E["AR.I.UTILITY"],E["AIR.M2.MEDIUM"]],I["S-A-MFUH--"]=[E["AR.I.UTILITY"],E["AIR.M2.HEAVY"]],I["S-A-MFY---"]=[E["AR.I.COMMUNICATIONS"]],I["S-A-MFH---"]=[E["AR.I.PERSONNEL RECOVERY"]],I["S-A-MFD---"]=[E["AR.I.AIRBORNE COMMAND POST"]],I["S-A-MFQ---"]=[E["AR.I.UNMANNED AERIAL VEHICLE"]],I["S-A-MFQA--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ATTACK"]],I["S-A-MFQB--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.BOMBER"]],I["S-A-MFQC--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.CARGO"]],I["S-A-MFQD--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.AIRBORNE COMMAND POST"]],I["S-A-MFQF--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.FIGHTER"]],I["S-A-MFQH--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.COMBAT SEARCH AND RESCUE"]],I["S-A-MFQJ--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-MFQK--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.TANKER"]],I["S-A-MFQL--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.VSTOL"]],I["S-A-MFQM--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-A-MFQI--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.MINE COUNTERMEASURES"]],I["S-A-MFQN--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ANTISURFACE WARFARE"]],I["S-A-MFQP--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.PATROL"]],I["S-A-MFQR--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.RECONNAISSANCE"]],I["S-A-MFQRW-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.AIRBORNE EARLY WARNING"]],I["S-A-MFQRZ-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"]],I["S-A-MFQRX-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.PHOTOGRAPHIC"]],I["S-A-MFQS--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ANTISUBMARINE WARFARE"]],I["S-A-MFQT--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.TRAINER"]],I["S-A-MFQU--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.UTILITY"]],I["S-A-MFQY--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.COMMUNICATIONS"]],I["S-A-MFQO--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.MEDEVAC"]],I["S-A-MFS---"]=[E["AR.I.ANTISUBMARINE WARFARE"]],I["S-A-MFM---"]=[E["AR.I.SPECIAL OPERATIONS FORCES"]],I["S-A-MH----"]=[E["AR.I.MILITARY ROTARY WING"]],I["S-A-MHA---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.ATTACK"]],I["S-A-MHS---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.ANTISUBMARINE WARFARE"]],I["S-A-MHU---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"]],I["S-A-MHUL--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.LIGHT"]],I["S-A-MHUM--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.MEDIUM"]],I["S-A-MHUH--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.HEAVY"]],I["S-A-MHI---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.MINE COUNTERMEASURES"]],I["S-A-MHH---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.COMBAT SEARCH AND RESCUE"]],I["S-A-MHR---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.RECONNAISSANCE"]],I["S-A-MHQ---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UNMANNED AERIAL VEHICLE"]],I["S-A-MHC---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"]],I["S-A-MHCL--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.LIGHT"]],I["S-A-MHCM--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.MEDIUM"]],I["S-A-MHCH--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.HEAVY"]],I["S-A-MHT---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.TRAINER"]],I["S-A-MHO---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.MEDEVAC"]],I["S-A-MHM---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-A-MHD---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.AIRBORNE COMMAND POST"]],I["S-A-MHK---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.TANKER"]],I["S-A-MHJ---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-ML----"]=[E["AR.I.FF.MILITARY BALLOON"]],I["S-A-MV----"]=[E["AR.I.VIP"]],I["S-A-ME----"]=[E["AR.I.ESCORT"]],I["S-A-W-----"]=[E["AIR.MISSILE.ICON"]],I["S-A-WM----"]=[E["AIR.MISSILE.ICON"]],I["S-A-WMS---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.LAUNCHED"]],I["S-A-WMSS--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WMSA--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMSU--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.SUBSURFACE"]],I["S-A-WMSB--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"]],I["S-A-WMA---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.LAUNCHED"]],I["S-A-WMAS--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WMAA--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMAP--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.SPACE"]],I["S-A-WMU---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SUBSURFACE"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WML---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.LAND"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMCM--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.CRUISE"],E["AIR.MISSILE.M2.MISSILE"]],I["S-A-WMB---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.BALLISTIC"],E["AIR.MISSILE.M2.MISSILE"]],I["S-A-WB----"]=[E["AIR.MISSILE.IC.BOMB"]],I["S-A-WD----"]=[E["AR.I.AIR DECOY"]],I["S-A-C-----"]=[E["AR.I.CIVILIAN"]],I["S-A-CF----"]=[E["AR.I.FF.CIVILIAN FIXED WING"]],I["S-A-CH----"]=[E["AR.I.FF.CIVILIAN ROTARY WING"]],I["S-A-CL----"]=[E["AR.I.FF.CIVILIAN BALLOON"]]}};function c(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.baseGeometry,N=t.numberSIDC,O=E.iconColor[T],G=E.iconFillColor[T],o=E.black[T],M=E.white[T],i={};for(var L in i["GR.IC.MILITARY"]=a("MIL"),i["GR.I.GOVERNMENT"]=a("GOV"),i["GR.IC.SUBMARINE NUCLEAR PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},i["GR.IC.FERRY"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"FE":"F"}],i["GR.IC.ADMINISTRATIVE"]=a("ADM"),i["GR.IC.MANUAL TRACK"]=a("MAN"),i["GR.IC.AIR DEFENSE CHAPARRAL"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"C"}],i["GR.IC.AIR DEFENSE COMPOSITE"]={type:"path",d:"M85,120 C85,110 115,110 115,120 M90,115 L90,90 C90,80 110,80 110,90 L110,115 M100,112 l0,-30",fill:!1},i["GR.IC.AIR DEFENSE H/MAD"]=a("HMD"),i["GR.IC.AIR DEFENSE H/MAD HAWK"]={type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"H"},i["GR.IC.AIR DEFENSE H/MAD PATRIOT"]={type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"P"},i["GR.IC.AIR DEFENSE MISSILE"]={type:"path",d:"M90,120 L90,90 C90,80 110,80 110,90 L110,120",fill:!1},i["GR.IC.FLOATING CRAFT"]={type:"path",d:"m 90,75 20,0 0,-10 -5,0 0,-10 -10,0 0,10 -5,0 z",stroke:!1},i["GR.IC.AIR AND MISSILE DEFENSE"]=a("MD"),i["GR.IC.MILITARY HISTORY"]=a("MH"),i["GR.IC.AIR DEFENSE TARGETING UNIT"]=[{type:"path",d:"M80,100 l20,-15 0,15 20,-15 M75,80 C75,100 85,115 105,115",fill:!1},{type:"circle",cx:75,cy:110,r:5}],i["GR.IC.AIR DEFENSE THEATER MISSILE DEFENSE UNIT"]=a("TMD"),i["GR.IC.AIR DEFENSE SHORT RANGE"]=a("SRD"),i["GR.IC.AIR DEFENSE STINGER"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"S"}],i["GR.IC.AIR DEFENSE VULCAN"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"V"}],i["GR.IC.AIR DEFENSE GUN UNIT"]={type:"path",d:"M100,80 L100,120 M92,90 l0,20 M108,90 l0,20",fill:!1},i["GR.IC.AIR TRAFFIC SERVICES"]={type:"path",d:"m 100,95 0,25 m 7.5,-32.5 c 0,4.1 -3.4,7.5 -7.5,7.5 -4.1,0 -7.5,-3.4 -7.5,-7.5 0,-4.1 3.4,-7.5 7.5,-7.5 4.1,0 7.5,3.4 7.5,7.5 z M 60,85 l 40,15 40,-15 0,30 -40,-15 -40,15 z"},i["GR.IC.AIRPORT OF DEBARKATION"]=[{type:"path",fill:!1,d:"M80,70 l40,0 M80,80 l25,-25 M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1}],i["GR.IC.ALLIED COMMAND EUROPE RAPID REACTION CORPS (ARRC)"]=a("ARRC"),i["GR.IC.ALLIED COMMAND OPERATIONS"]=a("ACO"),i["GR.IC.AMMUNITION"]={type:"path",d:"m 90,117 0,-25 c 0,-15 20,-15 20,0 l 0,25 m -25,0 30,0",fill:!1},i["GR.IC.ARMOUR"]={type:"path",d:"M125,80 C150,80 150,120 125,120 L75,120 C50,120 50,80 75,80 Z",fill:!1},i["GR.IC.ARMOR, WHEELED"]=[{type:"path",d:"m 120,80 c 25,0 25,30 0,30 l -40,0 C 55,110 55,80 80,80 Z",fill:!1},{type:"circle",cx:70,cy:115,r:5,fill:!1},{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"circle",cx:130,cy:115,r:5,fill:!1}],i["GR.IC.AVIATION ROTARY WING"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},i["GR.IC.AVIATION ROTARY WING 2525C"]={type:"path",d:"M100,100 L100,140"},i["GR.IC.AVIATION FIXED WING"]={type:"path",d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},i["GR.IC.COMBATANT"]=[{type:"path",d:"m 86.9,110 c -3.6,2 -7.2,3.9 -10.8,5.9 2.1,2.9 6.7,3.9 10,2.1 2.6,-0.9 4.7,-3.8 3.1,-6.1 -0.8,-0.6 -1.5,-1.3 -2.3,-1.9 z m 26.3,0.1 c 3.6,2 7.2,3.9 10.8,5.9 -2.1,2.9 -6.7,3.9 -10,2.1 -2.6,-0.9 -4.7,-3.8 -3.1,-6.1 0.8,-0.6 1.5,-1.3 2.3,-1.9 z",fill:!1},{type:"path",d:"m 112.9,110 c -5.6,-4 -11.3,-7.9 -16.1,-12.5 -4.2,-4.5 -7,-9.8 -9.2,-15.1 -0.8,4.4 -0.9,9.3 2.4,13.2 3.6,4.5 8.6,8.1 13.5,11.8 2.3,1.7 4.7,3.3 7.1,4.8 0.8,-0.7 1.5,-1.5 2.3,-2.2 m -25.7,0 c 5.6,-4 11.3,-7.9 16.1,-12.5 4.2,-4.5 7,-9.8 9.2,-15.1 0.8,4.4 0.9,9.3 -2.4,13.2 -3.6,4.5 -8.6,8.1 -13.5,11.8 -2.3,1.7 -4.7,3.3 -7.1,4.8 -0.8,-0.7 -1.5,-1.5 -2.3,-2.2",fill:M,strokewidth:2}],i["GR.IC.AVIATION COMPOSITE"]={type:"path",d:"m 100,100 15.7,7.9 c 11.8,0 11.8,-15.7 0,-15.7 z m 0,0 -15.7,-7.9 c -11.8,0 -11.8,15.7 0,15.7 z m -10,-20 10,20 -10,20 20,0 -10,-20 10,-20 z"},i["GR.IC.AVIATION TACTICAL AIR CONTROL PARTY"]=a("TACP"),i["GR.IC.AVIATION FORWARD AIR CONTROLLER"]=a("FAC"),i["GR.IC.SPECIAL TROOPS"]=a("ST"),i["GR.IC.RANGER"]=a("RGR"),i["GR.IC.BAND"]=a("BAND"),i["GR.IC.ARMY MUSIC"]={type:"path",d:"m 99.6,110.5 c -4.8,-1.4 -10.9,2.2 -10.4,7.7 1,2.5 6.2,2.4 9.6,-0.2 1.9,-1.5 2.7,-3.8 2.3,-6.9 l -0.1,-21.3 c 12.7,5.8 7.6,14.8 5.6,20.7 4.7,-4.9 5.8,-13.2 1.5,-17.9 -4.4,-4.6 -5,-7 -8.4,-13 z",stroke:!1},i["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]=a("ATF"),i["GR.IC.CBRN"]=[{type:"path",d:"m 80,120 c 0,-20 10,-32 50,-35 m -10,35 C 120,100 110,88 70,85",fill:!1},{type:"circle",cx:75,cy:90,r:6},{type:"circle",cx:125,cy:90,r:6}],i["GR.CHEMICAL, BIOLOGICAL, RADIOLOGICAL, NUCLEAR, AND HIGH-YIELD EXPLOSIVES"]=[{type:"path",d:"m 90,80 20,0 10,20 -10,20 -20,0 -10,-20 z",fill:G},a("E")],i["GR.IC.SPACE"]=[{type:"path",d:"m 100,80 -1.25,16.5 -4.2,-3.3 2.5,4.9 -5.5,1.7 -0.4,-0 0.2,0 -0.2,0 0.4,-0 5.4,2.3 -1.8,4.6 3.6,-3.5 1.3,16.5 1.3,-16.5 4.2,3.3 -2.5,-4.9 5.5,-1.7 0.4,0 -0.2,-0 0.2,0 -0.4,0 -5.3,-1.7 2.5,-4.6 -4,3.2 z",stroke:!1}],i["GR.IC.CIVIL AFFAIRS"]=a("CA"),i["GR.IC.CIVIL-MILITARY-COOPERATION"]={type:"path",d:"m 60,80 80,0 0,20 c 0,25 -80,25 -80,0 z",fill:!1},i["GR.I.CIVILIAN"]=a("CIV"),i["GR.I.CIVILIAN"].fill=R||N?G:!C&&G,i["GR.I.CIVILIAN"].stroke=o,i["GR.I.CIVILIAN"].strokewidth=3,i["GR.IC.COMMAND AND CONTROL"]=a("C2"),i["GR.IC.COMBAT"]=a("CBT"),i["GR.IC.COMBAT SERVICE SUPPORT"]=a("CSS"),i["GR.IC.COMBAT SUPPORT"]=a("CS"),i["GR.IC.COMBAT SUPPORT (MANOEUVRE ENHANCEMENT)"]={type:"path",d:"m 85,80 0,25 15,15 15,-15 0,-25 z"},i["GR.IC.COMBINED ARMS"]={type:"path",d:"m 70,80 60,40 m 0,-40 -60,40 m 55,-40 c 25,0 25,40 0,40 l -50,0 C 50,120 50,80 75,80 z",fill:!1},i["GR.IC.COUNTER-INTELLIGENCE"]=a("CI"),i["GR.IC.CRIMINAL INVESTIGATION DIVISION"]=a("CID"),i["GR.IC.DIVING"]=[],i["GR.IC.DOG"]=a("DOG"),i["GR.IC.DRILLING"]={type:"path",d:"m 85,80 5,40 20,0 5,-40 z"},i["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]=a("DEA"),i["GR.IC.ELECTRONIC RANGING"]={type:"path",d:"M120,130 c-40,20 -80,-45 -40,-70 z M100,95 L140,75",fill:!!R&&G},i["GR.IC.ELECTRONIC WARFARE"]=a("EW"),i["GR.IC.EMERGENCY MEDICAL OPERATION"]={type:"path",d:"m 90,60 0,22.7 -19.7,-11.3 -10,17.3 L 80,100 l -19.7,11.3 10,17.3 L 90,117.3 90,140 l 20,0 0,-22.7 19.7,11.3 10,-17.3 L 120,100 l 19.7,-11.3 -10,-17.3 L 110,82.7 110,60 90,60 z"},i["GR.IC.ENGINEER"]={type:"path",fill:!1,d:"M60,120 L60,80 140,80 140,120 M100,80 L100,110"},i["GR.IC.ENGINEER MECHANIZED"]={type:"path",fill:!1,d:"m 100,90 0,15 m -25,5 0,-20 50,0 0,20 m 0,-30 c 25,0 25,40 0,40 l -50,0 C 50,120 50,80 75,80 Z"},i["GR.IC.ENGINEER UTILITY VEHICLE"]={type:"path",fill:!1,d:"m 100,100 0,10 m -15,5 0,-15 30,0 0,15 M 70,80 c 0,15 60,15 60,0 l 0,40 -60,0 z"},i["GR.IC.ENVIRONMENTAL PROTECTION"]={type:"path",d:"m 100,80 -10,15 5,0 -10,10 5,0 -10,10 15,0 0,5 10,0 0,-5 15,0 -10,-10 5,0 -10,-10 5,0 z",fill:!1},i["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]=a("EOD"),i["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]=a("FBI"),i["GR.IC.FIELD ARTILLERY"]={type:"circle",cx:100,cy:100,r:15},i["GR.IC.FIELD ARTILLERY OBSERVER"]=[{type:"circle",cx:100,cy:108,r:5},{type:"path",d:"m 80,120 30,-20 m -30,20 20,-40 20,40 z",fill:!1}],i["GR.IC.FIELD CAMP CONSTRUCTION"]=[i["GR.IC.ENGINEER"],{type:"text",stroke:!1,x:100,y:77,fontsize:25,text:"CAMP"}],i["GR.IC.FINANCE"]={type:"path",d:"m 80,95 10,-10 20,0 10,10 m -40,0 0,20 40,0 0,-20 z",fill:!1},i["GR.IC.FIRE PROTECTION"]={type:"path",d:"m 120,90 -5,5 -10,-10 5,-5 -20,0 5,5 -10,10 -5,-5 0,20 5,-5 10,10 -5,5 20,0 -5,-5 10,-10 5,5 z"},i["GR.IC.FIXED WING MISO"]=[{type:"path",fill:!!R&&G,stroke:o,d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},{type:"path",d:"M 78.8 61.5 C 68.1 61.5 68.1 78.5 78.8 78.5 L 100 70 L 78.8 61.5 z M 100 70 L 121.3 78.5 C 131.9 78.5 131.9 61.5 121.3 61.5 L 100 70 z"}],i["GR.IC.GEOSPATIAL SUPPORT"]=a("GEO"),i["GR.IC.GOVERNMENT ORGANIZATION"]=a("GO"),i["GR.IC.INFORMATION OPERATIONS"]=a(R&&!N?"IW":"IO"),i["GR.IC.INTERNATIONAL SECURITY ASSISTANCE FORCE (ISAF)"]=a("ISAF"),i["GR.IC.INTERROGATION"]=a("IPW"),i["GR.IC.JOINT FIRE SUPPORT"]=a("JFS"),i["GR.IC.JOINT INFORMATION BUREAU"]=a("JIB"),i["GR.IC.JOINT INTELLIGENCE CENTRE"]=a("JIC"),i["GR.IC.JUDGE ADVOCATE GENERAL"]=a("JAG"),i["GR.IC.LABOUR"]={type:"path",d:"m 90,85 20,0 m -10,0 0,25 -10,0 10,10 10,-10 -10,0",fill:!1},i["GR.IC.LAUNDRY/BATH"]={type:"path",d:"m 95,80 10,10 0,30 m 0,-30 -10,0 m 10,0 -10,10",fill:!1},i["GR.IC.LAW ENFORCEMENT"]={type:"path",d:"M 100,118 C 76,109 85,95 82,82 c 6,7 12,7 18,0 6,7 12,7 18,0 -3,13 6,27 -18,36 z",fill:!1},i["GR.IC.LAW ENFORCEMENT VESSEL"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],i["GR.IC.LIAISON"]=a("LO"),i["GR.IC.MAINTENANCE"]={type:"path",d:"M70,90 c10,0 10,20 0,20 m10,-10 l40,0 m10,-10 c-10,0 -10,20 0,20",fill:!1},i["GR.IC.MATERIEL"]=a("MAT"),i["GR.IC.MEDICAL EVACUATION HELICOPTER"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},i["GR.IC.MESSENGER"]=a("M"),i["GR.IC.METEOROLOGICAL"]=a("MET"),i["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"]={type:"path",d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},i["GR.IC.MILITARY INTELLIGENCE"]=a("MI"),i["GR.IC.MILITARY POLICE"]=a("MP"),i["GR.IC.MINE"]={type:"path",d:"m 120,100 c 0,5.5 -9,10 -20,10 -11,0 -20,-4.5 -20,-10 0,-5.5 9,-10 20,-10 11,0 20,4.5 20,10 z m -5,-20 -30,40 m 0,-40 30,40 m -15,-40 0,40"},i["GR.IC.MINE CLEARING"]=[i["GR.IC.MINE"],{type:"text",stroke:!1,x:100,y:77,fontsize:25,text:"CLR"}],i["GR.IC.MINE LAUNCHING"]=[i["GR.IC.MINE"],{type:"path",d:"m 80,125 0,10 40,0 0,-10 z"}],i["GR.IC.MINE LAYING"]=[i["GR.IC.MINE"],{type:"path",d:"m 80,65 0,10 40,0 0,-10 z"}],i["GR.IC.MISSILE"]={type:"path",d:"M90,120 L90,90 C90,80 110,80 110,90 L110,120 M100,120 L100,80",fill:!1},i["GR.IC.MISSILE.LIGHT"]={type:"path",d:"M90,90 L110,90"},i["GR.IC.MISSILE.MEDIUM"]={type:"path",d:"M90,90 L110,90 M90,97 L110,97"},i["GR.IC.MISSILE.HEAVY"]={type:"path",d:"M90,90 L110,90 M90,97 L110,97 M90,104 L110,104"},i["GR.IC.MORALE, WELFARE, AND RECREATION"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MWR"},i["GR.IC.MORTAR"]=[{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"path",d:"M100,111 l0,-30 M90,90 l10,-10 10,10",fill:!1}],i["GR.IC.MORTUARY AFFAIRS"]={type:"path",d:"m 90,95 20,0 m -10,-10 0,30 m -15,-35 30,0 0,40 -30,0 z",fill:!1},i["GR.IC.MULTINATIONAL (MN)"]=a("MN"),i["GR.IC.NAVAL"]=[{type:"path",d:"m 105,85 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -20,5 30,0 m -15,0 0,30",fill:!1},{type:"path",d:"M 82.3 102.6 C 82.3 113.9 84.2 115.9 84.2 115.9 L 86.5 114.1 C 90.2 117.8 94.8 120.8 99.9 120.9 L 100.5 120.9 L 101 120.9 C 106.2 120.8 110.8 117.8 114.4 114.1 L 116.7 115.9 C 116.7 115.9 118.6 113.9 118.7 102.6 C 113.9 106.8 108.9 109 108.9 109 L 110.9 110.7 C 110.9 110.7 106.8 115.2 100.5 115.2 L 100.5 115.2 C 100.5 115.2 100.4 115.2 100.4 115.2 C 94.2 115.2 90 110.7 90 110.7 L 92 109 C 92 109 87 106.8 82.3 102.6 z",stroke:!1}],i["GR.IC.OBSERVER/OBSERVATION"]={type:"path",d:"m 100,80 -25,40 50,0 z",fill:!1},i["GR.IC.ORDNANCE"]={type:"path",d:"M 90,97 83,83 m 27,14 7,-14 M 95,95 90,81 m 15,14 5,-14 m 10,26.5 c 0,6.9 -9,12.5 -20,12.5 -11,0 -20,-5.6 -20,-12.5 0,-6.9 9,-12.5 20,-12.5 11,0 20,5.6 20,12.5 z",fill:!1},i["GR.IC.PERSONNEL SERVICES"]=a("PS"),i["GR.IC.PETROLEUM OIL LUBRICANTS"]={type:"path",d:"m 100,119 0,-24 m 0,0 C 99,95 85,81 85,81 l 30,0 z",fill:!1},i["GR.IC.PIPELINE"]={type:"path",d:"m 115,110 15,0 m -15,-15 15,0 m -45,15 -15,0 M 85,95 70,95 m 30,-15 0,10 -15,0 0,25 30,0 0,-25 -15,0 m -10,-10 20,0",fill:!1},i["GR.IC.POSTAL"]={type:"path",d:"m 80,80 30,0 c -1.4,15.5 0,25 10,35 -20,0 -40,-20 -40,-35 z",fill:!1},i["GR.IC.PUBLIC AFFAIRS"]=a("PA"),i["GR.IC.PUBLIC AFFAIRS BROADCAST"]=a("BPAD"),i["GR.IC.PSYCHOLOGICAL OPERATIONS"]={type:"path",fill:!!R&&G,stroke:o,d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},i["GR.IC.QUARTERMASTER"]={type:"path",fill:!1,d:"m 115,95 c 0,15 15,15 15,0 0,-15 -15,-15 -15,0 z m 0,0 -45,0 0,10 10,0 0,-10"},i["GR.IC.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},i["GR.IC.RADIO"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",fill:!1,d:"M100,120 l0,-60 M70,70 l10,-10 10,10 10,-10 10,10 10,-10 10,10"}],i["GR.IC.RADIO RELAY"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",fill:!1,d:"M100,120 l-15,-40 15,0 0,-20 M70,60 l60,0"}],i["GR.IC.RADIO TELETYPE CENTRE"]=[{type:"text",stroke:!1,x:100,y:135,fontsize:30,text:"C"},{type:"path",fill:!1,d:"M100,140 l0,-80 M70,60 l60,0 M80,70 l40,0"}],i["GR.IC.RAILHEAD"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1},s._translate(0,-50,[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}])],i["GR.IC.RELIGIOUS SUPPORT"]=a("REL"),i["GR.IC.REPLACEMENT HOLDING UNIT"]=a("RHU"),i["GR.IC.SEA-AIR-LAND"]=a("SEAL"),i["GR.IC.SUPPORT"]=a("SPT"),i["GR.IC.ARMY FIELD SUPPORT"]=a("AFS"),i["GR.IC.CONTRACTING SERVICES"]=a("KS"),i["GR.IC.SEAPORT OF DEBARKATION"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1},s._translate(0,-35,s._scale(.6,i["GR.IC.NAVAL"]))],i["GR.IC.SECURITY"]=a("SEC"),i["GR.IC.SECURITY POLICE (AIR)"]=[a("SP"),{type:"path",d:"M 78.8 121.5 C 68.1 121.5 68.1 138.5 78.8 138.5 L 100 130 L 78.8 121.5 z M 100 130 L 121.3 138.5 C 131.9 138.5 131.9 121.5 121.3 121.5 L 100 130 z"}],i["GR.IC.SENSOR"]={type:"path",d:"m 100,80 c 0,7.5 12.5,20 20,20 -7.5,0 -20,12.5 -20,20 0,-7.5 -12.5,-20 -20,-20 7.5,0 20,-12.5 20,-20 z"},i["GR.IC.SHORE PATROL"]=a("SP"),i["GR.IC.SNIPER"]={type:"path",fill:!1,d:"M 60 85 L 90 85 L 60 85 z M 110 85 L 140 85 L 110 85 z M 100 90 L 100 115 L 100 90 z"},i["GR.IC.PARACHUTE RIGGER"]={type:"path",fill:!1,d:"m 120,100 -20,20 -20,-20 m 0,0 c 0,-25 40,-25 40,0 l -40,0"},i["GR.IC.SPECIAL FORCES"]=a("SF"),i["GR.IC.SPECIAL OPERATIONS FORCES"]=a("SOF"),i["GR.IC.SURVEILLANCE"]={type:"path",d:"m 100,80 -25,40 50,0 z"},i["GR.IC.SURVEY"]=[{type:"path",d:"M85,120 l15,-15 15,15 ",fill:!1},{type:"path",d:"M100,105 l0,-25 20,12.5 z",fill:!!R&&G}],i["GR.IC.SUSTAINMENT"]=a("SUST"),i["GR.IC.TELEPHONE SWITCH"]=[{type:"text",stroke:!1,x:100,y:135,fontsize:30,text:"C"},{type:"path",fill:!1,d:"M100,140 l0,-80 M70,60 l60,0"}],i["GR.IC.TOPOGRAPHIC"]={type:"path",fill:!1,d:"m 85,105 c 10,5 20,5 30,0 m -15,-15 15,30 m -30,0 15,-30 0,-10"},i["GR.IC.TRANSPORTATION"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1}],i["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]=a("TSA"),i["GR.IC.UNMANNED SYSTEMS"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},i["GR.IC.SEARCH AND RESCUE"]=a("SAR"),i["GR.IC.DIVER, CIVILIAN"]={type:"path",fill:G,d:"M 114.3,94 C 114.3,102.3 107.9,109 100,109 c -7.9,0 -14.2,-6.7 -14.2,-15 0,-8.3 6.4,-15 14.2,-15 7.9,0 14.3,6.7 14.3,15 z m 0,27 14.3,15 -57,0 14.3,-15 M 125.7,79 l 14.3,0 0,30 -14.3,0 m -51.3,0 -14.3,0 0,-30 14.3,0 m 54.2,15 c 0,16.6 -12.8,30 -28.5,30 -15.7,0 -28.5,-13.4 -28.5,-30 C 71.5,77.4 84.3,64 100,64 115.7,64 128.5,77.4 128.5,94 z"},i["GR.IC.VIDEO IMAGERY"]={type:"path",fill:!1,d:"m 140,110 -26,0 m 7,-20 19,0 m -15,-10 -65,0 0,40 50,0 z m 15,5 0,30"},i["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]=a("USSS"),i["GR.IC.WATER"]={type:"path",d:"m 65,90 50,0 c 10,0 20,10 20,20 m -40,-30 20,0 m -10,0 0,10",fill:!1},i["GR.IC.WATER PURIFICATION"]=[i["GR.IC.WATER"],{type:"text",stroke:!1,x:90,y:110,fontsize:20,text:"PURE"}],i["GR.IC.FF.AIR ASSAULT WITH ORGANIC LIFT"]={Unknown:{type:"path",d:"M35,120 L 90,120 l10,10 10,-10 L165,120",fill:!1},Friend:{type:"path",d:"M25,120 L 90,120 l10,10 10,-10 L175,120",fill:!1},Neutral:{type:"path",d:"M45,120 L 90,120 l10,10 10,-10 L155,120",fill:!1},Hostile:{type:"path",d:"M50,120 L 90,120 l10,10 10,-10 L150,120",fill:!1}}[T],i["GR.IC.FF.AIR DEFENCE"]={Unknown:{type:"path",d:"m 55,135 c 10,-20 80,-20 90,0",fill:!1},Friend:{type:"path",d:"M25,150 C25,110 175,110 175,150",fill:!1},Neutral:{type:"path",d:"M45,150 C45,110 155,110 155,150",fill:!1},Hostile:{type:"path",d:"M70,140 C70,115 130,115 130,140",fill:!1}}[T],i["GR.IC.FF.AIR AND NAVAL GUNFIRE LIAISON COMPANY"]=[],i["GR.IC.FF.AMPHIBIOUS"]={Unknown:{type:"path",d:"m 30,95 c 10,0 0,15 13.5,15 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 13.5,0 3.5,-15 13.5,-15",fill:!1},Friend:{type:"path",d:"m 25,90 c 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 20,-20",fill:!1},Neutral:{type:"path",d:"m 45,110 c 18.8,0 0,-20 18,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18,20",fill:!1},Hostile:{type:"path",d:"m 32,95 c 10,0 0,15 11.5,15 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 11.5,0 1.5,-15 11.5,-15",fill:!1}}[T],i["GR.IC.FF.ANALYSIS"]={type:"path",d:"m 100,120 0,-65 m 0,90 -30,-25 60,0 z",fill:!1},i["GR.IC.FF.ANTITANK/ANTIARMOUR"]={Unknown:{type:"path",fill:!1,d:"M55,135 L100,33 145,135"},Friend:{type:"path",fill:!1,d:"M25,150 L100,52 175,150"},Neutral:{type:"path",fill:!1,d:"M45,150 L100,47 155,150"},Hostile:{type:"path",fill:!1,d:"M60,132 L100,30 140,132"}}[T],i["GR.IC.FF.BORDER PATROL"]=[{type:"path",stroke:!1,d:"M 122.8 66.8 C 119.9 66.8 117.4 68.6 117.4 71.6 L 117.4 73.1 L 128.7 73.1 L 128.7 72.4 C 128.7 68.8 126.5 66.8 122.8 66.8 z M 108.6 74.8 L 108.6 76 L 117.6 76 L 117.5 77.5 L 118 80.8 C 119.1 81.5 118.9 82.5 120.8 83.5 C 122.1 84.1 124 84 125.2 83.4 C 127.5 82.4 129 79.2 128.3 76 L 137.5 76 L 137.5 74.8 L 108.6 74.8 z M 94.8 82.1 C 93.3 82.1 92 83.5 92 85 L 92 85.2 C 92 86.6 96 91.3 97 92.6 C 98.2 94.3 100.8 98.8 103.2 98.8 C 104.5 98.8 111.1 93.7 112.6 92.8 L 112.6 106.2 L 126.4 85.6 C 123 85.6 114.9 85.2 112.2 85.9 C 110.2 86.4 105 91.6 103.6 91.7 C 103.4 91 100.6 87.5 100 86.5 C 99.2 85.4 97.2 82.1 95.6 82.1 L 94.8 82.1 z M 130.4 85.6 C 129.6 85.6 117.5 104.1 116.3 106.2 L 128.1 106.2 L 128.1 110.6 L 112.5 110.6 L 112.5 133.2 L 120.7 133.2 L 122 117.5 L 124.3 117.5 L 125.6 133.2 L 133.5 133.2 L 133.5 87.9 C 133.5 87.2 131.2 85.6 130.4 85.6 z M 66.9 90.7 C 66.5 91.4 62.5 96.9 62.5 96.9 C 62.5 97.8 76.7 107.2 78.5 108.3 C 81.4 110.2 83.9 112.1 86.7 114 C 88.2 115 89.4 115.9 90.8 116.8 C 92.1 117.7 94.1 118.5 94.1 120.4 L 94.1 133.2 L 105.5 133.2 L 105.5 121.7 C 105.5 120.6 107.2 119 107.2 118.8 C 107.2 117.6 106.1 118.6 105.6 116.9 C 105.2 115.4 105.4 115.6 104.5 114.5 C 103.5 113.1 101.9 112 99.8 112 C 96.8 112 97.6 111.8 95.3 110.3 C 93.9 109.3 92.5 108.4 91.2 107.4 C 88.7 105.5 85.8 103.5 83.2 101.8 C 80.9 100.3 68.2 91 66.9 90.7 z M 67.9 92.6 L 72.7 95.7 L 72.8 103 L 67.9 99.9 L 67.9 92.6 z M 77.8 99.3 L 82.6 102.6 L 82.6 110 L 77.8 106.6 L 77.8 99.3 z M 87.4 106.2 L 92.5 109.5 L 92.4 116.9 L 87.4 113.5 L 87.4 106.2 z"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 117.4 73.1 L 117.4 74.8 L 128.7 74.8 L 128.7 73.1 L 117.4 73.1 z M 126.4 85.6 L 112.6 106.2 L 112.6 110.6 L 128.1 110.6 L 128.1 106.2 L 116.4 106.2 C 117.5 104.1 129.6 85.6 130.4 85.6 L 126.4 85.6 z M 67.9 92.6 L 67.9 99.9 L 72.8 103 L 72.7 95.7 L 67.9 92.6 z M 77.8 99.3 L 77.8 106.6 L 82.6 110 L 82.6 102.6 L 77.8 99.3 z M 87.4 106.2 L 87.4 113.5 L 92.4 116.9 L 92.5 109.5 L 87.4 106.2 z "}],i["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]={type:"path",fill:!1,d:"m 80,60 20,20 20,-20 m -20,0 0,80"},i["GR.IC.FF.CORPS SUPPORT"]={Unknown:{type:"path",d:"M160,75 l-15,25 15,25",fill:!1},Friend:{type:"path",d:"M175,50 l-30,50 30,50",fill:!1},Neutral:{type:"path",d:"M155,50 l-20,50 20,50",fill:!1},Hostile:{type:"path",d:"M150,80 l-15,20 15,20",fill:!1}}[T],i["GR.IC.FF.CUSTOMS SERVICE"]=[{type:"path",stroke:!1,d:"M 115.5 69.8 C 115.8 70.4 116.9 72.9 117.5 72.9 L 128.3 72.9 L 128.3 69.8 L 115.5 69.8 z M 117.3 74.7 C 116.8 74.7 116 75.7 115.8 76.1 L 117.2 76.1 L 117.2 76.8 C 117.2 79.6 119.8 81.8 122.8 81.8 C 126.5 81.8 128.3 78.6 128.3 74.7 L 117.3 74.7 z M 111.3 83.6 C 110.5 83.6 99.4 91.8 97.8 92.9 C 95.6 94.4 93 96.1 91 97.7 C 89.1 99.2 85.4 100.5 85.4 103.6 L 85.4 104 C 85.4 104.7 87.1 106.7 88.2 106.7 L 88.8 106.7 C 90.2 106.7 108 93.4 111.3 91.7 L 111.3 105.3 L 126 83.6 L 111.3 83.6 z M 75.3 83.6 C 74.5 83.6 73.4 84.4 73.4 85 L 73.4 108.9 C 73.4 109.8 73.9 110.2 74.4 110.5 L 78.5 110.5 L 78.5 83.6 L 75.3 83.6 z M 78.5 110.5 L 78.5 135.2 L 105.6 135.2 L 105.6 110.5 L 78.5 110.5 z M 130.5 83.6 C 129.6 83.6 123.8 92.9 122.9 94.2 C 121.9 95.7 115.7 104.5 115.5 105.3 L 127.6 105.3 L 127.6 110.3 L 111.5 110.3 L 111.5 134.8 L 119.6 134.8 C 120.6 134.8 121.1 127.9 121.3 126.6 C 121.7 123.9 122.4 120.4 122.6 117.8 L 122.9 117.8 L 125.4 134.8 L 133.9 134.8 L 133.9 86.7 C 133.9 85.6 131.9 83.6 130.7 83.6 L 130.5 83.6"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 117.5 72.9 L 117.3 74.7 L 128.3 74.7 L 128.3 72.9 L 117.5 72.9 z M 126 83.7 L 111.3 105.3 L 111.5 110.3 L 127.7 110.3 L 127.7 105.3 L 115.5 105.3 C 115.7 104.5 121.9 95.7 122.9 94.3 C 123.8 92.9 129.6 83.7 130.5 83.7 L 126 83.7 z "}],i["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]={type:"path",stroke:!1,d:"M 100.2 62.3 C 100.1 63.2 99 66.3 98.7 67.4 C 97.8 69.9 99.4 70 99.4 72.3 L 99.4 73 C 99.4 73.7 98.9 73.5 98.3 73.8 C 96.6 72.4 94.2 71 91.3 71 L 90 71 C 84.2 71 80 75.5 74.6 75.5 L 73.9 75.5 C 72.3 75.5 71.5 74.1 71.3 75.8 L 74.3 77.2 C 71.8 82.4 69.9 89.7 67.5 95.5 C 66.3 98.6 65.3 101.6 64.1 104.7 C 63.5 106.3 63.1 107.7 62.5 109.3 C 62 110.5 61.8 113.1 60.2 113.2 C 62.4 116.4 68 120.5 73.3 120.5 L 76 120.5 C 81.6 120.5 87.3 116.6 89.5 113.2 L 88.2 113.2 L 75.4 77.2 L 74.5 77.2 L 74.5 77 L 75.4 77.2 L 78.6 77.7 L 79.3 77.7 L 89.3 76.2 L 90.4 76.3 C 93.7 76.3 93.8 80.2 94.7 80.2 L 97.7 80.2 L 97.7 129.2 L 86.1 129.2 L 86.1 131.5 L 81.4 131.5 L 81.4 134.1 L 77.5 134.1 L 77.5 138.2 L 123.3 138.2 L 123.3 133.9 L 119.3 133.9 L 119.3 131.6 L 114.5 131.6 L 114.5 129.2 L 102.6 129.2 L 102.6 80.2 L 106 80.2 C 107 80.2 106.6 76.4 110.7 76.4 L 111.3 76.4 L 121.2 77.7 L 122.2 77.7 L 125.4 77.3 C 124.3 79.7 123.1 83.8 122.1 86.4 C 120.9 89.6 119.9 92.6 118.7 95.8 C 117.5 98.9 116.6 101.9 115.4 105 C 114.9 106.4 114.2 108.1 113.7 109.6 C 113.4 110.4 113.1 111.1 112.9 111.9 C 112.5 113.2 112.8 113.2 111.2 113.2 C 113.3 116.4 119.2 120.5 124.6 120.5 L 127.2 120.5 C 132.6 120.5 138.8 116.4 140.9 113.2 L 139.8 113.2 L 126.4 77.1 C 127.4 76.9 129.3 76.2 129.3 75.3 C 129.3 74.5 127.8 75.5 126.7 75.5 L 126.3 75.5 C 120.8 75.5 116.6 71 110.9 71 L 109.6 71 C 106.7 71 104.2 72.4 102.6 73.8 C 101.8 73.4 101.3 73.6 101.3 72.3 C 101.3 71.9 102.4 68.8 102.5 68.5 L 100.6 62.3 L 100.2 62.3 z M 126.1 80.8 L 137.8 113.2 L 114.1 113.2 L 126.1 80.8 z M 74.8 80.8 L 86.5 113.2 L 63.1 113.1 L 74.8 80.8 z"},i["GR.IC.FF.DIRECTION FINDING"]={type:"path",d:"M100,140 l0,-80 M80,80 l20,-20 20,20",fill:!1},i["GR.IC.FF.DIVISION AND BELOW SUPPORT"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50",fill:!1},Neutral:{type:"path",d:"M45,50 l20,50 -20,50",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20",fill:!1}}[T],i["GR.IC.FF.EMERGENCY OPERATION"]=[{type:"path",d:"M 100 65 L 115.2 91.3 L 130.3 117.5 C 133.3 112.4 135 106.4 135 100 C 135 80.7 119.3 65 100 65 z M 100 65 C 80.7 65 65 80.7 65 100 C 65 106.4 66.7 112.4 69.7 117.5 L 84.8 91.3 L 100 65 z M 69.7 117.5 C 75.7 128 87 135 100 135 C 113 135 124.3 128 130.3 117.5 L 100 117.5 L 69.7 117.5 z"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 69.7,117.5 100,65 l 30.3,52.5 z"}],i["GR.IC.FF.FIELD ARTILLERY ROCKET"]={type:"path",d:"M100,150 l0,-97 M85,130 l0,-50 M115,130 l0,-50 M85,73 l15,-20 15,20",fill:!1},i["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]={Unknown:{type:"path",d:"M35,80 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,80 l150,0 ",fill:!1},Neutral:{type:"path",d:"M45,80 l110,0 ",fill:!1},Hostile:{type:"path",d:"M50,80 l100,0 ",fill:!1}}[T],i["GR.IC.FF.HORSE"]={type:"path",d:"m 129,72.8 c 0,0 -6.3,2 -9,2.6 -3.4,0.7 -4.9,1.8 -7.7,3.1 -4.2,1.9 -6.8,3.6 -11.3,4.3 -3.3,0.5 -7.7,1.7 -11,1 -3.9,-0.9 -6.1,-2.9 -10.1,-2.9 -3.7,-0 -7.4,-0.6 -10.6,1.3 -2.6,1.6 -4.7,4.2 -5.8,7.1 -2.3,5.4 -0.8,12.5 -1.2,18.4 -0.2,3.1 -0.4,9.3 -0.6,10.2 0,0 1.6,-0 3.4,-2.5 0.9,-1.2 1.7,-3.4 1.9,-4.9 0.5,-3.1 -0.7,-7.5 -0.4,-10 1.1,-0.3 2.4,2.8 2.6,4.7 0.2,2 -1,3.3 -1.4,5.2 -0.5,3 0.3,5 0.6,8.3 0.1,1.6 0.8,3.9 0.5,6 -0.2,2 -0.2,4.3 -0.2,4.3 l 6.9,0 -0.4,-3.8 c 0,0 -1.8,-2.5 -2.1,-4.3 -0.5,-2.7 -0.5,-5.4 0.2,-8 0.5,-2 3.1,-4.3 4.1,-6.1 1.8,-3.1 3.1,-7.1 3.1,-7.1 0,0 5.1,3.4 9.1,4.2 3.8,0.8 11.6,1.4 11.6,1.4 0,0 -0.2,7.3 0.1,12.4 -0,0.1 0.3,3.9 0.3,3.1 -1.4,3.2 -0,8.2 -0,8.2 0,0 2.9,0 6.3,-0 l -0.3,-3.4 c 0,0 -1.5,-3.5 -1.5,-5.3 0,-3.1 0.1,-5.9 0.9,-8.9 0.4,-1.2 0.7,-2.9 1.3,-4 1.4,-2.2 3.1,-3.8 4.2,-6.1 1.1,-2.6 2.3,-5.3 3.6,-7.9 1.6,-3.3 7.8,-7.3 7.8,-7.3 0,0 5,2.9 8.4,4.9 1.2,0.7 3,0.1 3.7,-1 0.7,-1.1 0.8,-2.2 0.3,-3.3 -3.2,-6.7 -7.8,-9.4 -7.8,-9.4 z",stroke:!1},i["GR.IC.FF.INFANTRY"]={Unknown:{type:"path",d:"M50,65L150,135M50,135L150,65"},Friend:{type:"path",d:"M25,50 L175,150 M25,150 L175,50"},Neutral:{type:"path",d:"M45,45L155,155M45,155L155,45"},Hostile:{type:"path",d:"M60,70L140,130M60,130L140,70"}}[T],i["GR.IC.FF.INFANTRY DISMOUNTED"]={Unknown:{type:"path",d:"M50,65L150,135M50,135L150,65"},Friend:{type:"path",d:"m 45,70 110,60 M 45,130 155,70"},Neutral:{type:"path",d:"M45,45L155,155M45,155L155,45"},Hostile:{type:"path",d:"M60,70L140,130M60,130L140,70"}}[T],i["GR.IC.FF.INTERCEPT"]={type:"path",d:"M100,120 l0,-60 M80,120 l20,20 20,-20"},i["GR.IC.FF.JAMMING"]={Unknown:{type:"path",d:"M63,60 c10,0 0,10 7,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 7,-10 M40,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10",fill:!1},Friend:{type:"path",d:"M25,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 M25,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10",fill:!1},Neutral:{type:"path",d:"M45,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 M45,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10",fill:!1},Hostile:{type:"path",d:"M67,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 13,10 M52,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 7,-10",fill:!1}}[T],i["GR.IC.FF.LAW ENFORCEMENT"]={type:"path",d:"m 99.6,51 c -2.8,0 -5,2.3 -5,5.3 0,2.1 1.2,3.9 2.8,4.7 L 87.8,78.3 69.5,78.4 c -0.1,-2.8 -2.3,-5.1 -5,-5.1 -2.8,0 -5,2.3 -5,5.3 0,2.9 2.2,5.3 5,5.3 0.7,0 1.4,-0.2 2,-0.4 l 9.2,16.8 -9.4,17.2 c -0.6,-0.2 -1.2,-0.4 -1.8,-0.4 -2.8,0 -5,2.4 -5,5.3 0,2.9 2.2,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-0.1 -0,-0.2 -0,-0.3 l 18.3,0.1 9.5,17.1 c -1.6,0.9 -2.7,2.6 -2.7,4.6 0,2.9 2.3,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-1.9 -0.9,-3.5 -2.3,-4.4 l 9.6,-17.3 18.7,-0.1 c -0,0.1 -0,0.2 -0,0.3 0,2.9 2.3,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-2.9 -2.2,-5.3 -5,-5.3 -0.8,0 -1.5,0.2 -2.1,0.5 l -9.5,-17.4 9.5,-17.4 c 0.6,0.3 1.4,0.5 2.1,0.5 2.8,0 5,-2.4 5,-5.3 0,-2.9 -2.2,-5.3 -5,-5.3 -2.8,0 -5,2.3 -5,5.3 0,0.1 0,0.2 0,0.3 L 111.8,78.3 102.1,60.8 c 1.5,-0.9 2.5,-2.6 2.5,-4.5 0,-2.9 -2.2,-5.3 -5,-5.3 z"},i["GR.IC.FF.MAIN GUN SYSTEM"]={Unknown:{type:"path",d:"M55,65L55,135"},Friend:{type:"path",d:"M55,50L55,150"},Neutral:{type:"path",d:"M55,45L55,155"},Hostile:{type:"path",d:"M55,72L55,128"}}[T],i["GR.IC.FF.MEDICAL"]={type:"path",d:"M100,"+S.bbox.y1+"L100,"+S.bbox.y2+"M"+S.bbox.x1+",100L"+S.bbox.x2+",100"},i["GR.IC.FF.MEDICAL THEATER"]={Unknown:{type:"path",d:"M100,170 l0,-140 M40,75 l15,25 -15,25 M160,75 l-15,25 15,25 M55,100 l90,0",fill:!1},Friend:{type:"path",d:"M100,150 l0,-100 M25,50 l30,50 -30,50 M175,50 l-30,50 30,50 M55,100 l90,0",fill:!1},Neutral:{type:"path",d:"M100,155 l0,-110 M45,50 l20,50 -20,50 M155,50 l-20,50 20,50 M65,100 l70,0",fill:!1},Hostile:{type:"path",d:"M100,172 l0,-144 M50,80 l15,20 -15,20 M150,80 l-15,20 15,20 M65,100 l70,0",fill:!1}}[T],i["GR.IC.FF.MEDICAL CORPS"]={Unknown:{type:"path",d:"M100,170 l0,-140 M160,75 l-15,25 15,25 M30,100 l115,0",fill:!1},Friend:{type:"path",d:"M100,150 l0,-100 M175,50 l-30,50 30,50 M25,100 l120,0",fill:!1},Neutral:{type:"path",d:"M100,155 l0,-110 M155,50 l-20,50 20,50 M45,100 l90,0",fill:!1},Hostile:{type:"path",d:"M100,172 l0,-144 M150,80 l-15,20 15,20 M28,100 l110,0",fill:!1}}[T],i["GR.IC.FF.MEDICAL TREATMENT FACILITY"]=[i["GR.IC.FF.MEDICAL"],{type:"path",fill:!1,d:"M70,90 l0,20 M130,90 l0,20"}],i["GR.IC.FF.MILITARY POLICE"]={type:"path",d:"M 100,140 C 53.7465,122.654 71.0916,95.6737 65.3099,70.6197 c 11.5634,13.4906 23.1267,13.4906 34.6901,0 11.564,13.4906 23.126,13.4906 34.69,0 C 128.908,95.6737 146.254,122.654 100,140 Z",fill:!1},i["GR.IC.FF.MOTORIZED"]={type:"path",d:"M100,"+S.bbox.y1+"L100,"+S.bbox.y2},i["GR.IC.FF.NAVAL"]=[{type:"path",d:"M 100,145 100,65",fill:!1},{type:"path",d:"m 70,70 60,0",fill:!1},{type:"path",d:"m 57.8,105.5 c -2.2,0.1 1.3,20.6 2.8,22.1 0.8,0.8 3.5,-3.8 4.6,-2.6 17.4,20.2 33,19.7 34.7,19.6 0,0 0.2,-0 0.3,0 1.7,0.1 17.3,0.5 34.7,-19.6 1,-1.2 3.7,3.4 4.6,2.6 1.4,-1.5 4.9,-21.9 2.8,-22.1 -2.2,-0.1 -4,4.2 -6.7,6.4 -3,2.4 -7.5,3.4 -7.7,4.5 -0.1,0.8 4.9,3.5 3.9,4.9 -5.1,6.3 -15.1,16.6 -31.3,17 l -0.3,4.3 -0.3,-4.3 c -16.2,-0.4 -26.3,-10.7 -31.3,-17 -1.1,-1.3 4,-4.1 3.9,-4.9 -0.2,-1 -4.7,-2 -7.7,-4.5 -2.7,-2.3 -4.5,-6.6 -6.7,-6.4 z",stroke:!1},{type:"circle",cx:100,cy:60,r:5,fill:!1}],i["GR.IC.FF.PRISON"]={type:"path",stroke:!1,d:"M 62.5 67.9 L 62.5 73.4 L 69.9 73.4 L 69.9 106 C 66.8 106.7 64.4 109.6 64.4 113.4 C 64.4 116 65.8 116.9 65.9 118.4 C 66 120.4 65.6 122.5 65.6 124.7 L 65.6 126.6 L 62.5 126.6 L 62.5 132.1 L 137.5 132.1 L 137.5 126.6 L 136 126.6 L 135.6 117.5 C 138.3 113.4 135.8 107 131.5 106 L 131.5 73.4 L 137.5 73.4 L 137.5 67.9 L 62.5 67.9 z M 74.5 73.4 L 87.2 73.4 L 87.2 108.4 C 87.2 109.2 84.8 109.7 83.9 110.6 C 83.1 111.3 82.2 112.7 81.6 113.6 C 80.5 115.2 78.6 118.7 78.6 121.1 L 76.1 117 C 76.5 116.4 76.9 114.6 76.9 113.7 L 76.9 112.2 C 76.9 109.5 74.5 107.9 74.5 106.5 L 74.5 73.4 z M 91.5 73.4 L 110.2 73.4 L 110.2 90.9 C 109 89.6 108.8 87.8 106.8 85.7 C 105.4 84.3 103.5 83 100.8 83 L 100.3 83 C 98.2 83 96.1 83.6 94.9 84.5 C 94.3 85 93.6 85.4 93.1 86 C 92.4 86.6 92.2 87.3 91.5 87.8 L 91.5 73.4 z M 114.3 73.4 L 127.2 73.4 L 127.2 106.5 C 127.2 106.9 124.8 109.2 124.4 111.1 C 123.7 114.2 124.5 114.6 125 117 L 123.3 120.2 C 122.7 118.3 120.7 115 119.7 113.5 C 118.3 111.4 117.3 109.1 114.3 108.9 L 114.3 73.4 z M 99.7 84.9 L 100.6 84.9 C 104.8 84.9 108.5 90.4 108.5 94.7 L 108.5 96.4 C 108.5 100.4 105 106.2 101.3 106.2 L 99.4 106.2 C 94.9 106.2 91.4 100.2 91.6 95.5 C 91.8 90.7 94.9 84.9 99.7 84.9 z M 110.3 100.5 L 110.2 106.9 L 106.7 106.3 L 110.3 100.5 z M 91.5 103.6 L 94.3 106.8 L 91.5 107.4 L 91.5 103.6 z M 70.7 107.9 C 72.9 107.9 74.7 110.4 74.7 112.7 L 74.7 113.4 C 74.7 117.9 70 120.2 67.6 116.7 C 65.7 113.8 66.9 107.9 70.7 107.9 z M 130.6 107.9 C 132.8 107.9 134.4 110.8 134.4 113.2 L 134.4 113.4 C 134.4 116.7 133 116.7 132 118.2 L 128.9 118.3 L 126.7 115.4 L 126.5 113.2 C 126.1 111 128.2 107.9 130.6 107.9 z M 105.9 108.2 C 107.2 108.2 108.9 109 110.2 109.3 L 110.2 126.6 L 91.5 126.6 L 91.5 110.1 C 91.5 108.6 96.6 108.9 98.4 108.9 C 101.1 108.9 104 108.2 105.9 108.2 z M 114.3 110.8 C 117.2 112.3 117.4 113.4 119 116.4 C 120.1 118.5 121.7 120.9 121.7 124 C 121.9 124.2 122.3 124.9 122.7 124.9 C 124 124.9 125.5 119.8 126.7 118.9 L 126.7 119.4 L 127.2 119.4 L 127.2 126.6 L 114.3 126.6 L 114.3 110.8 z M 87.2 111.3 L 87.2 126.6 L 74.5 126.6 L 74.5 118.9 C 75.8 119.4 77.4 125.4 78.6 125.4 C 80.6 125.4 80.7 119.6 81.9 117.5 C 83.2 115.3 84.4 111.9 87.2 111.3 z M 133.6 119.7 L 133.9 126.6 L 131.5 126.6 L 131.5 120.4 L 133.6 119.7 z M 68.1 119.9 C 68.6 120.1 69.9 120.3 69.9 121.1 L 69.9 126.6 L 67.7 126.6 L 68.1 119.9 z"},i["GR.IC.FF.JAIL BREAK"]=[i["GR.IC.FF.PRISON"],{type:"path",strokewidth:5,d:"m 70,130 L130,70",fill:!1}],i["GR.IC.FF.RECONNAISSANCE"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M25,150L175,50"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.RECONNAISSANCE DISMOUNTED"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M 45,130 155,70"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.RECONNAISSANCE EQUPIMENT"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M 50.6 132.9 L 149.3 67"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.SEARCH"]={type:"path",d:"m 100,145 0,-90 m 30,65 -30,25 -30,-25",fill:!1},i["GR.IC.FF.SENSOR"]=[{type:"path",d:"M"+S.bbox.x1+",100 L75,100 M"+(200-S.bbox.x1)+",100 L125,100"},{type:"path",d:"M65,85 l70,0 -15,30 -40,0 z",fill:!!R&&G}],i["GR.IC.FF.SIGNAL"]={Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 100,110 100,90 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T],i["GR.IC.FF.SIGNAL DISMOUNTED"]={Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M 52,66.8 100,110 l 0,-20 47.9,43.1"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T],i["GR.IC.FF.SOUND"]=[{type:"path",d:"M"+S.bbox.x1+",100 L75,100 M"+(200-S.bbox.x1)+",100 L125,100"},{type:"path",d:"M65,85 l70,0 -15,30 -40,0 z",fill:!!R&&G},{type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"S"}],i["GR.IC.FF.SUPPLY"]={Unknown:{type:"path",d:"M35,120 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,120 l150,0",fill:!1},Neutral:{type:"path",d:"M45,120 l110,0",fill:!1},Hostile:{type:"path",d:"M50,120 l100,0 ",fill:!1}}[T],i["GR.IC.FF.SUPPLY CORPS"]={Unknown:{type:"path",d:"M160,75 l-15,25 15,25 M35,120 l120,0",fill:!1},Friend:{type:"path",d:"M175,50 l-30,50 30,50 M25,120 l135,0",fill:!1},Neutral:{type:"path",d:"M155,50 l-20,50 20,50 M45,120 l100,0",fill:!1},Hostile:{type:"path",d:"M150,80 l-15,20 15,20 M50,120 l100,0",fill:!1}}[T],i["GR.IC.FF.SUPPLY DIVISION AND BELOW"]={Unknown:{type:"path",d:"m 45,120 120,0 M 40,75 55,100 40,125",fill:!1},Friend:{type:"path",d:"m 45,120 130,0 M 25,50 55,100 25,150",fill:!1},Neutral:{type:"path",d:"m 57,120 98,0 M 45,50 65,100 45,150",fill:!1},Hostile:{type:"path",d:"m 50,120 100,0 M 50,80 65,100 50,120",fill:!1}}[T],i["GR.IC.FF.SUPPLY THEATER"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25 M160,75 l-15,25 15,25 M45,120 l110,0 ",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50 M175,50 l-30,50 30,50 M40,120 l120,0 ",fill:!1},Neutral:{type:"path",d:" M45,50 l20,50 -20,50 M155,50 l-20,50 20,50 M55,120 l90,0 ",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20 M150,80 l-15,20 15,20 M50,120 l100,0",fill:!1}}[T],i["GR.IC.FF.CLASS ALL"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"ALL"},i["GR.IC.FF.CLASS MULTIPLE"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MULT"},i["GR.IC.FF.CLASS I"]={type:"path",d:"m 105,85 c -5,10 -5,20 0,30 m 0,-30 c -20,0 -20,30 0,30",fill:!1},i["GR.IC.FF.NATO SUPPLY CLASS I"]=a("I"),i["GR.IC.FF.CLASS II"]=i["GR.IC.QUARTERMASTER"],i["GR.IC.FF.NATO SUPPLY CLASS II"]=a("II"),i["GR.IC.FF.CLASS III"]={type:"path",d:"m 100,120 0,-20 -15,-20 30,0 -15,20 ",fill:!1},i["GR.IC.FF.CLASS IV"]=i["GR.IC.ENGINEER"],i["GR.IC.FF.NATO SUPPLY CLASS IV"]=a("IV"),i["GR.IC.FF.CLASS V"]={type:"path",d:"m 90,115 0,-25 c 0,-10 20,-10 20,0 l 0,25 m -25,0 30,0",fill:!1},i["GR.IC.INTERPRETER/TRANSLATOR"]=[{type:"path",d:"m 65,90 15,0 0,-10 20,20 -20,20 0,-10 -15,0 z",fill:G},{type:"path",d:"m 135,90 -15,0 0,-10 -20,20 20,20 0,-10 15,0 z"}],i["GR.IC.FF.NATO SUPPLY CLASS ALL"]=a("ALL"),i["GR.IC.FF.CLASS VI"]=[{type:"circle",cx:100,cy:85,r:5,fill:!1},{type:"path",d:"m 85,95 30,0 m -15,15 0,-20 m -10,30 10,-10 10,10",fill:!1}],i["GR.IC.FF.CLASS VII"]=[{type:"circle",cx:75,cy:100,r:7},{type:"circle",cx:125,cy:100,r:7},{type:"path",d:"M75,100 c0,-20 50,-20 50,0",fill:!1}],i["GR.IC.FF.CLASS VIII"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M165,80 l-130,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M175,80 l-150,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M155,80 l-110,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS VIII.THEATER"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M155,80 l-110,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M155,80 l-110,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M145,80 l-90,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS VIII.CORPS"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M155,80 l-120,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M155,80 l-130,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M145,80 l-100,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS IX"]=[{type:"circle",cx:100,cy:100,r:10,fill:!1},{type:"path",d:"m 100,110 0,10 m 0,-30 0,-10 m 8.7,14.2 8.4,-4.8 m -8.4,15.9 8,5.4 m -25.4,-5.4 -8.2,5.4 m 8.2,-16.3 -8,-5.4",fill:!1}],i["GR.IC.EQUIPMENT MANUFACTURE"]=[{type:"circle",cx:100,cy:100,r:20,fill:!1},{type:"path",d:"m 100,120 0,20 m 0,-60 0,-20 m 18.1,28.4 16,-9.6 m -16,31.2 16,12 M 82.5,110 66.1,122 M 82.5,88.8 66.5,78",fill:!1}],i["GR.IC.FF.CLASS X"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"CA"},i["GR.IC.FF.THEATRE SUPPORT"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25 M160,75 l-15,25 15,25",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50 M175,50 l-30,50 30,50",fill:!1},Neutral:{type:"path",d:"M45,50 l20,50 -20,50 M155,50 l-20,50 20,50",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20 M150,80 l-15,20 15,20",fill:!1}}[T],i["GR.IC.FF.US MARSHALS SERVICE"]={type:"path",d:"m 100,70 7.1,20.3 21.5,0.4 -17.1,13 6.2,20.6 L 100,112 82.4,124.3 88.6,103.7 71.5,90.7 92.9,90.3 z m 0,-5 c -19.3,0 -35,15.7 -35,35 0,19.3 15.7,35 35,35 19.3,0 35,-15.7 35,-35 0,-19.3 -15.7,-35 -35,-35 z m 0,5 c 16.6,0 30,13.4 30,30 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 z"},i["GR.M1.ACCIDENT"]=l("ACC"),i["GR.M1.AIRMOBILE/AIR ASSAULT"]={type:"path",fill:!1,d:"M85,55 L100,75 115,55"},i["GR.M1.ARMORED"]={type:"path",fill:!1,d:"m 90,60 20,0 c 10,0 10,15 0,15 L 90,75 C 80,75 80,60 90,60"},i["GR.M1.CARGO"]={type:"path",fill:!1,d:"m 100,60 0,15 -15,0 0,-15 30,0 0,15 -15,0"},i["GR.M1.AMMUNITION"]={type:"path",d:"M95,75 L95,60 C95,55 105,55 105,60 L105,75 M90,75 L110,75",fill:!1},i["GR.M1.AMPHIBIOUS WARFARE SHIP "]={type:"path",d:"M 113,75 100,75 90,64.3 95,65 l 0,-8 10,0 0,8 5.5,-0.6 L 100,75"},i["GR.M1.ANTISUBMARINE WARFARE"]=l("P"),i["GR.M1.AREA"]=l("AREA"),i["GR.M1.ARMY"]=l("XXXX"),i["GR.M1.ATTACK"]=l("A"),i["GR.M1.AVIATION"]={type:"path",d:"m 75,60 0,15 50,-15 0,15 z"},i["GR.M1.BATTALION"]=l("II"),i["GR.M1.BIOLOGICAL"]=l("B"),i["GR.M1.BORDER"]=l("BOR"),i["GR.M1.BRIDGING"]={type:"path",fill:!1,d:"m 80,80 5,-5 30,0 5,5 m -40,-20 5,5 30,0 5,-5"},i["GR.M1.BRIGADE"]=l("X"),i["GR.M1.CHEMICAL"]=l("C"),i["GR.M1.INTRUSION"]=l("I"),i["GR.M1.CHEMICAL SURVEILLANCE"]=l("RS"),i["GR.M1.CIVILIAN"]=l("CIV"),i["GR.M1.CLOSE PROTECTION"]=l("CLP"),i["GR.M1.COMBAT"]=l("CBT"),i["GR.M1.COMMAND AND CONTROL"]=l("C2"),i["GR.M1.COMMAND AND CONTROL ROTARY WING"]=l(R?"Y":"C2"),i["GR.M1.TILT-ROTOR"]=l("TR"),i["GR.M1.COMMAND POST NODE"]=l("CPN"),i["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]=l("CCP"),i["GR.M1.CONSTRUCTION"]={type:"text",stroke:!1,x:100,y:75,fontsize:20,text:"CONST"},i["GR.M1.COMPANY"]=l("I"),i["GR.M1.CORPS"]=l("XXX"),i["GR.M1.CROSS CULTURAL COMMUNICATION"]=l("CCC"),i["GR.M1.CROWD AND RIOT CONTROL"]=l("CRC"),i["GR.M1.DECONTAMINATION"]=l("D"),i["GR.M1.DETENTION"]=l("DET"),i["GR.M1.DEPUTY"]=l("DEP"),i["GR.M1.DIRECT COMMUNICATIONS"]={type:"path",fill:!1,d:"m 95,65 -5,5 5,5 m 10,-10 5,5 -5,5 M 90,70 c 20,0 20,0 20,0 m 15,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -40,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z"},i["GR.M1.DIVING"]={type:"path",fill:!1,d:"m 104.6,64.8 c 0,2.7 -2.1,4.8 -4.6,4.8 -2.5,0 -4.6,-2.2 -4.6,-4.8 0,-2.7 2.1,-4.8 4.6,-4.8 2.5,0 4.6,2.2 4.6,4.8 z m 0,8.7 4.6,4.8 -18.3,0 4.6,-4.8 M 108.3,60 l 4.6,0 0,9.6 -4.6,0 m -16.5,0 -4.6,0 0,-9.6 4.6,0 m 17.4,4.8 c 0,5.3 -4.1,9.6 -9.2,9.6 -5.1,0 -9.2,-4.3 -9.2,-9.6 0,-5.3 4.1,-9.6 9.2,-9.6 5.1,0 9.2,4.3 9.2,9.6 z"},i["GR.M1.DIVISION"]=l("XX"),i["GR.M1.MARINE DIVISION"]=l("D"),i["GR.M1.DOG"]=l("DOG"),i["GR.M1.DRILLING"]={type:"path",d:"m 90,60 5,15 10,0 5,-15 z"},i["GR.M1.ELECTRO-OPTICAL"]=l("EO"),i["GR.M1.ENHANCED"]=l("ENH"),i["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]=l("EOD"),i["GR.M1.EARLY WARNING RADAR"]=l("EWR"),i["GR.M1.FIRE DIRECTION CENTRE"]=l("FDC"),i["GR.M1.FORCE"]=l("F"),i["GR.M1.FORWARD"]=l("FWD"),i["GR.M1.GROUND STATION MODULE"]=l("GSM"),i["GR.M1.HIJACKING"]=l("H"),i["GR.M1.INDIVIDUAL"]={type:"path",fill:!1,d:"M85,65 l30,0"},i["GR.M1.INTRUSION"]=l("I"),i["GR.M1.J1"]=l("J1"),i["GR.M1.J2"]=l("J2"),i["GR.M1.J3"]=l("J3"),i["GR.M1.J4"]=l("J4"),i["GR.M1.J5"]=l("J5"),i["GR.M1.J6"]=l("J6"),i["GR.M1.J7"]=l("J7"),i["GR.M1.J8"]=l("J8"),i["GR.M1.J9"]=l("J9"),i["GR.M1.JOINT NETWORK NODE"]=l("JNN"),i["GR.M1.LANDING SUPPORT"]=l("LS"),i["GR.M1.LARGE COMMUNICATIONS CONTINGENCY PACKAGE"]=l("LCCP"),i["GR.M1.LARGE EXTENSION NODE"]=l("LEN"),i["GR.M1.LOAD HANDLING SYSTEM"]=l("LHS"),i["GR.M1.MAINTENANCE"]={type:"path",fill:!1,d:"m 84,70 32,0 m 4,-5 c -5,0 -5,10 0,10 M 80,65 c 5,0 5,10 0,10"},i["GR.M1.MEDEVAC"]={type:"path",stroke:!1,d:"M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},i["GR.M1.METEOROLOGICAL"]=l("MET"),i["GR.M1.MINE COUNTERMEASURE"]=l("MCM"),i["GR.M1.MISSILE"]={type:"path",d:"M95,80 L95,60 C95,55 105,55 105,60 L105,80 M100,80 L100,55",fill:!1},i["GR.M1.(MOBILE) ADVISOR AND SUPPORT"]={type:"path",d:"m 105,65 5,5 -5,5 M 90,70 c 20,0 20,0 20,0 m 15,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -40,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z",fill:!1},i["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]=l("MSE"),i["GR.M1.MOBILITY ASSAULT"]=l("MA"),i["GR.M1.MOBILITY SUPPORT"]=l("MS"),i["GR.M1.MOVEMENT CONTROL CENTRE"]=l("MCC"),i["GR.M1.MULTINATIONAL"]=l("MN"),i["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]=l("MSU"),i["GR.M1.MULTIPLE ROCKET LAUNCHER"]={type:"path",d:"M85,75 l15,-15 15,15 M85,67 l15,-15 15,15",fill:!1},i["GR.M1.NATO MEDICAL ROLE 1"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"1"},i["GR.M1.NATO MEDICAL ROLE 2"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"2"},i["GR.M1.NATO MEDICAL ROLE 3"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"3"},i["GR.M1.NATO MEDICAL ROLE 4"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"4"},i["GR.M1.NAVAL"]=s._translate(0,-35,s._scale(.6,i["GR.IC.NAVAL"])),i["GR.M1.NODE CENTRE"]=l("NC"),i["GR.M1.NUCLEAR"]=l("N"),i["GR.M1.OF-1"]=l("OF-1"),i["GR.M1.OF-2"]=l("OF-2"),i["GR.M1.OF-3"]=l("OF-3"),i["GR.M1.OF-4"]=l("OF-4"),i["GR.M1.OF-5"]=l("OF-5"),i["GR.M1.OF-6"]=l("OF-6"),i["GR.M1.OF-7"]=l("OF-7"),i["GR.M1.OF-8"]=l("OF-8"),i["GR.M1.OF-9"]=l("OF-9"),i["GR.M1.OF-10"]=l("OF-10"),i["GR.M1.OF-D"]=l("OF-D"),i["GR.M1.OPERATIONS"]=l("OPS"),i["GR.M1.OPTICAL"]=l("OPT"),i["GR.M1.OR-1"]=l("OR-1"),i["GR.M1.OR-2"]=l("OR-2"),i["GR.M1.OR-3"]=l("OR-3"),i["GR.M1.OR-4"]=l("OR-4"),i["GR.M1.OR-5"]=l("OR-5"),i["GR.M1.OR-6"]=l("OR-6"),i["GR.M1.OR-7"]=l("OR-7"),i["GR.M1.OR-8"]=l("OR-8"),i["GR.M1.OR-9"]=l("OR-9"),i["GR.M1.OTHER"]=l("OTH"),i["GR.M1.PALLETIZED LOAD SYSTEM"]=l("PLS"),i["GR.M1.PERSONNEL RECOVERY"]=l("H"),i["GR.M1.PLATOON"]=[{type:"circle",stroke:!1,cx:80,cy:68,r:8},{type:"circle",stroke:!1,cx:100,cy:68,r:8},{type:"circle",stroke:!1,cx:120,cy:68,r:8}],i["GR.M1.RADAR"]={type:"path",fill:!1,d:"m 85,55 c 0.1,21.4 11.7,24.6 25,25 M 116,55 101,67.5 101,55 86.6,66.9"},i["GR.M1.RADIO FREQUENCY IDENTIFICATION (RFID) INTERROGATOR/ SENSOR"]=l("RF"),i["GR.M1.RAILROAD"]=s._translate(0,-50,[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}]),i["GR.M1.RADIOLOGICAL"]=l("RAD"),i["GR.M1.RANGER"]=l("RGR"),i["GR.M1.RECON"]=l("R"),i["GR.M1.REGIMENT"]=l("III"),i["GR.M1.RETRANSMISSION SITE"]=l("RTNS"),i["GR.M1.ROBOTIC"]={type:"path",d:"m 100,52.7 14.9,14.8 c 0.4,-0.3 0.9,-0.4 1.4,-0.4 1.5,0 2.7,1.2 2.7,2.7 0,1.4 -1.2,2.7 -2.7,2.7 -1.5,0 -2.7,-1.3 -2.7,-2.7 0,-0.4 0.1,-0.7 0.2,-1 l -10.4,-5.2 -2.5,8.6 c 0.2,0.1 0.4,0.2 0.6,0.3 0.7,0.5 1.2,1.3 1.2,2.3 0,1.5 -1.2,2.7 -2.7,2.7 -0.55,0 -1.06,-0.2 -1.49,-0.5 -0.73,-0.4 -1.22,-1.3 -1.22,-2.2 0,-1.2 0.77,-2.2 1.85,-2.6 l -2.53,-8.6 -10.42,5.2 c 0.12,0.3 0.18,0.6 0.18,1 0,1.5 -1.21,2.7 -2.7,2.7 -1.49,0 -2.7,-1.2 -2.7,-2.7 0,-1.5 1.21,-2.7 2.7,-2.7 0.52,0 1.01,0.1 1.42,0.4 l 14.9,-14.8 0,0 0,0 z",stroke:!1},i["GR.M1.ASSAULT"]=l("ASLT"),i["GR.M1.WEAPON"]=l("WPN"),i["GR.M1.WEAPONS"]=l("W"),i["GR.M1.CRIMINAL INVESTIGATION DIVISION"]=l("CID"),i["GR.M1.DIGITAL"]=l("DIG"),i["GR.M1.NETWORK OR NETWORK OPERATIONS"]=l("NET"),i["GR.M1.AIRFIELD, AERIAL PORT OF DEBARKATION, OR AERIAL PORT OF EMBARKATION"]={type:"path",d:"m 80,70 40,0 M 80,80 111,55",fill:!1},i["GR.M1.PIPELINE"]={type:"path",d:"m 92,66 -12,0 m 12,8 -12,0 m 28,0 12,0 m -12,-8 12,0 m -20,-11 0,7 m -5,-7 10,0 m -13,7 0,16 16,0 0,-16 -16,0",fill:!1},i["GR.M1.POSTAL"]={type:"path",d:"m 90,60 15,0 c 0,5 0,10 10,15 -15,0 -20,0 -25,-15",fill:!1},i["GR.M1.WATER"]={type:"path",d:"m 90,55 20,0 m -10,10 0,-10 m -25,10 40,0 c 10,0 15,5 15,10",fill:!1},i["GR.M1.INDEPENDENT COMMAND"]={type:"path",d:"m 111.8,59.2 0,15.8 m -7.9,-7.9 15.8,0 m -31.6,-7.9 0,15.8 m 7.9,-7.9 -15.8,0",fill:!1},i["GR.M1.MULTI-PURPOSE BLADE"]={type:"path",d:"m 80,65 20,-10 20,10 m -20,15 0,-25",fill:!1},i["GR.M1.TANK-WIDTH MINE PLOW"]={type:"path",d:"m 80,65 5,-2.5 m 5,-2.5 5,-2.5 m 10,0 5,2.5 m 5,2.5 5,2.5 m -20,15 0,-20",fill:!1},i["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"]=l("RRC"),i["GR.M1.SEARCH AND RESCUE"]=l("SAR"),i["GR.M1.SECTION"]=[{type:"circle",stroke:!1,cx:90,cy:68,r:8},{type:"circle",stroke:!1,cx:110,cy:68,r:8}],i["GR.M1.SECURITY"]=l("SEC"),i["GR.M1.SENSOR"]={type:"path",d:"m 100,55 c -2,5 -5,8 -10,10 5,2 8,5 10,10 2,-5 5,-8 10,-10 -5,-2 -8,-5 -10,-10 z"},i["GR.M1.SENSOR CONTROL MODULE"]=l("SCM"),i["GR.M1.SIGNALS INTELLIGENCE"]={type:"path",fill:!1,d:"m 100,55 0,23 m -15,-18 5,-5 5,5 5,-5 5,5 5,-5 5,5"},i["GR.M1.SIGNAL SUPPORT"]=l("SPT"),i["GR.M1.SINGLE SHELTER SWITCH"]=l("SSS"),i["GR.M1.SINGLE ROCKET LAUNCHER"]={type:"path",d:"M85,75 l15,-15 15,15",fill:!1},i["GR.M1.SMALL EXTENSION NODE"]=l("SEN"),i["GR.M1.SMOKE"]=l("S"),i["GR.M1.SMOKE/DECON"]=l("SD"),i["GR.M1.SNIPER"]={type:"path",d:"M75,60 l20,0 M100,76 l0,-18 M125,60 l-20,0",fill:!1},i["GR.M1.SOUND RANGING"]=l("SDR"),i["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]=l("SOF"),i["GR.M1.SPECIAL WEAPONS AND TACTICS"]={type:"text",stroke:!1,x:100,y:77,fontsize:23,text:"SWAT"},i["GR.M1.SQUAD"]={type:"circle",stroke:!1,cx:100,cy:68,r:8},i["GR.M1.SUPPORT"]=l("SPT"),i["GR.M1.SURVEY"]={type:"path",d:"m 108,78 -8,-8 m 0,0 -8,8 m 8,-8 0,-15 15,8 z"},i["GR.M1.TACTICAL EXPLOITATION"]=l("TE"),i["GR.M1.TARGET ACQUISITION"]=l("TA"),i["GR.M1.TEAM"]=[{type:"circle",fill:!1,cx:100,cy:65,r:10},{type:"path",d:"m 90,75 l20,-20"}],i["GR.M1.THEATRE"]=l("XXXXX"),i["GR.M1.TOPOGRAPHIC"]={type:"path",fill:!1,d:"m 92,65 c 6,3 10,3 16,0 m -18,13 10,-23 10,23"},i["GR.M1.TRAINING CAMP"]=l("TNG"),i["GR.M1.HIJACKER"]=l("HJ"),i["GR.M1.UNMANNED AERIAL VEHICLE"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},i["GR.M1.UPGRADED EARLY WARNING RADAR"]=l("UEW"),i["GR.M1.UTILITY"]=l("U"),i["GR.M1.VIDEO IMAGERY"]={type:"path",fill:!1,d:"m 120,65 -11,0 m 11,10 -14,0 m 4,-14 -30,0 0,18 25,0 z m 10,2 0,14"},i["GR.M1.WO-1"]=l("WO-1"),i["GR.M1.WO-2"]=l("WO-2"),i["GR.M1.WO-3"]=l("WO-3"),i["GR.M1.WO-4"]=l("WO-4"),i["GR.M1.WO-5"]=l("WO-5"),i["GR.M1.YARD"]=l("YRD"),i["GR.M2.AIRBORNE"]={type:"path",d:"M75,140 C75,125 100,125 100,140 C100,125 125,125 125,140",fill:!1},i["GR.M2.ARCTIC"]={type:"path",d:"M115,125 C125,125 125,135 115,135 L85,135 C75,135 75,125 85,125",fill:!1},i["GR.M2.ATTACK"]=r("A"),i["GR.M2.LANDING CRAFT"]=r("LC"),i["GR.M2.LANDING SHIP"]=r("LS"),i["GR.M2.SERVICE CRAFT/YARD"]=r("YY"),i["GR.M2.TUG HARBOR"]=r("YT"),i["GR.M2.OCEAN GOING TUG BOAT"]=r("AT"),i["GR.M2.SURFACE DEPLOYMENT AND DISTRIBUTION COMMAND"]=r("SDDC"),i["GR.M2.COMPOSITE"]=r("COMP"),i["GR.M2.LIGHT AND MEDIUM"]=r("L/M"),i["GR.M2.BATTLE DAMAGE REPAIR"]=r("BDR"),i["GR.M2.BICYCLE EQUIPPED"]={type:"circle",cx:100,cy:132,r:11,fill:!1},i["GR.M2.CASUALTY STAGING"]=r("CS"),i["GR.M2.CLEARING"]=r("CLR"),i["GR.M2.CLOSE RANGE"]=r("CR"),i["GR.M2.COMBAT SEARCH AND RESCUE"]=r("CSAR"),i["GR.M2.CONTROL"]={type:"path",d:"m 98,130 2,-4 2,4 m -8,8 -4,-2 4,-2 m 8,8 -2,4 -2,-4 m 8,-8 4,2 -4,2 m -14,-2 16,0 m -8,-8 0,16",fill:!1},i["GR.M2.NONCOMBATANT GENERIC VESSEL"]={type:"path",d:"m 95,135 0,-10 10,0 0,10 5,0 0,10 -20,0 0,-10 z",stroke:!1},i["GR.M2.SHELTER"]={type:"path",d:"m 85,140 30,0 -5,-15 -10,-5 -10,5 z",stroke:!1},i["GR.M2.SELF-PROPELLED"]={type:"path",d:"m 85,125 30,0 c 10,0 10,15 0,15 l -30,0 c -10,0 -10,-15 0,-15",fill:!1},i["GR.M2.CROSS-COUNTRY TRUCK"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:100,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.CAVALRY"]={type:"text",stroke:!1,x:110,y:140,fontsize:25,text:"CAV"},i["GR.M2.DECONTAMINATION"]=r("D"),i["GR.M2.DEMOLITION"]=r("DEM"),i["GR.M2.DENTAL"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"D"},i["GR.M2.DIGITAL"]=r("DIG"),i["GR.M2.ENHANCED POSITION LOCATION REPORTING SYSTEM"]={type:"path",d:"m 87,142 13,-12 13,12 m -13,-20 0,20 0,0",fill:!1},i["GR.M2.EQUIPMENT"]=r("E"),i["GR.M2.EQUIMENT/TROOP"]=r("E/T"),i["GR.M2.HEAVY"]=r("H"),i["GR.M2.HIGH ALTITUDE"]=r("HA"),i["GR.M2.HIGH TO MEDIUM ALTITUDE"]=r("HMA"),i["GR.M2.HIGH TO LOW ALTITUDE"]=r("HLA"),i["GR.M1.CYBERSPACE"]=l("CYB"),i["GR.M2.AIR ASSAULT"]={type:"path",fill:!1,d:"m 85,125 15,20 15,-20"},i["GR.M2.VERY HEAVY"]=r("VH"),i["GR.M2.CYBERSPACE"]=r("CYB"),i["GR.M2.NAVY BARGE, SELF-PROPELLED"]=r("YS"),i["GR.M2.NAVY BARGE, NOT SELF-PROPELLED"]=r("YB"),i["GR.M2.LAUNCH"]=r("YFT"),i["GR.M1.TACTICAL SATELLITE COMMUNICATIONS"]=[{type:"path",d:"m 105,65 10,0 m -30,0 10,0 M 85,77 c 10,-7 20,-7 30,0",fill:!1},{type:"path",d:"m 75.4,60.9 0,9.1 13.1,0 0,-9.1 z m 36,0 0,9.1 13.1,0 0,-9.1 z m -18,0 0,9.1 13.1,0 0,-9.1 z",stroke:!1}],i["GR.M2.INTERMODAL"]={type:"path",d:"m 80,125 40,0 0,-4 8,9 -8,9 0,-4 -40,0 0,4 -8,-9 8,-9 z",fill:!1},i["GR.M2.INTENSIVE CARE"]=r("IC"),i["GR.M2.J1"]=r("J1"),i["GR.M2.J2"]=r("J2"),i["GR.M2.J3"]=r("J3"),i["GR.M2.J4"]=r("J4"),i["GR.M2.J5"]=r("J5"),i["GR.M2.J6"]=r("J6"),i["GR.M2.J7"]=r("J7"),i["GR.M2.J8"]=r("J8"),i["GR.M2.J9"]=r("J9"),i["GR.M2.LIGHT"]=r("L"),i["GR.M2.LABORATORY"]=r("LAB"),i["GR.M2.LAUNCHER"]={type:"path",fill:!1,d:"M80,140 L115,120 120,140"},i["GR.M2.LONG RANGE"]=r("LR"),i["GR.M2.LONG RANGE SURVEILLANCE"]={type:"text",stroke:!1,x:110,y:140,fontsize:25,text:"LRS"},i["GR.M2.LOW ALTITUDE"]=r("LA"),i["GR.M2.MEDIUM"]=r("M"),i["GR.M2.MEDIUM ALTITUDE"]=r("MA"),i["GR.M2.MEDIUM TO LOW ALTITUDE"]=r("MLA"),i["GR.M2.MEDIUM RANGE"]=r("MR"),i["GR.M2.MOUNTAIN"]={type:"path",stroke:!1,d:"M90,140 L100,120 110,140"},i["GR.M2.MULTIPLE ALTITUDES"]=r("H/MA"),i["GR.M2.MULTI-CHANNEL"]=r("MC"),i["GR.M2.OF-1"]=r("OF-1"),i["GR.M2.OF-2"]=r("OF-2"),i["GR.M2.OF-3"]=r("OF-3"),i["GR.M2.OF-4"]=r("OF-4"),i["GR.M2.OF-5"]=r("OF-5"),i["GR.M2.OF-6"]=r("OF-6"),i["GR.M2.OF-7"]=r("OF-7"),i["GR.M2.OF-8"]=r("OF-8"),i["GR.M2.OF-9"]=r("OF-9"),i["GR.M2.OF-10"]=r("OF-10"),i["GR.M2.OF-D"]=r("OF-D"),i["GR.M2.OPTICAL"]=r("OPT"),i["GR.M2.OR-1"]=r("OR-1"),i["GR.M2.OR-2"]=r("OR-2"),i["GR.M2.OR-3"]=r("OR-3"),i["GR.M2.OR-4"]=r("OR-4"),i["GR.M2.OR-5"]=r("OR-5"),i["GR.M2.OR-6"]=r("OR-6"),i["GR.M2.OR-7"]=r("OR-7"),i["GR.M2.OR-8"]=r("OR-8"),i["GR.M2.OR-9"]=r("OR-9"),i["GR.M2.GUERILLA"]=r("G"),i["GR.M2.AMPHIBIOUS"]={Unknown:{type:"path",d:"M 64 144.9 C 80.4 143.9 63.1 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 137.1 125 120.2 143.6 135.9 144.9",fill:!1},Friend:{type:"path",d:"m 25,145 c 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 20,20",fill:!1},Neutral:{type:"path",d:"M 45 125 C 61.7 125.9 44.2 145 62.6 145 C 81.4 145 62.6 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 137.8 125 119 145 137.8 145 C 155.9 145 138.9 126.2 154.8 125 ",fill:!1},Hostile:{type:"path",d:"M 70.4 142.4 C 74.8 137 66.8 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 133.3 125 125.7 136.6 129.7 142.1 ",fill:!1}}[T],i["GR.M2.PACK ANIMAL"]={type:"path",d:"m 84,140 9,-15 7,15 7,-15 9,15",fill:!1},i["GR.M2.PATIENT EVACUATION COORDINATION"]=r("PEC"),i["GR.M2.PREVENTIVE MAINTENANCE"]=r("PM"),i["GR.M2.PSYCHOLOGICAL"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"P"},i["GR.M2.RADIO RELAY LINE OF SIGHT"]=[{type:"circle",cx:100,cy:132,r:11,fill:!1},{type:"path",d:"M 90.8 128.2 C 90.3 129.3 90 130.6 90 132 C 90 133.4 90.3 134.7 90.8 135.8 L 100 132 L 90.8 128.2 z M 100 132 L 109.3 135.8 C 109.7 134.7 110 133.4 110 132 C 110 130.6 109.7 129.3 109.3 128.2 L 100 132 z"}],i["GR.M2.RAILROAD"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.TRACTOR TRAILER"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.RECOVERY (UNMANNED SYSTEMS)"]={type:"path",d:"m 70,125 c0,20 60,20 60,0",fill:!1},i["GR.M2.RECOVERY (MAINTENANCE)"]={type:"path",fill:!1,d:"M75,125 c8,0 8,16 0,16 m8,-8 l35,0 m8,-8 c-8,0 -8,16 0,16"},i["GR.M2.REFUEL"]=r("K"),i["GR.M2.RESCUE COORDINATION CENTRE"]=r("RCC"),i["GR.M2.RIVERINE"]={type:"path",d:"m 80,125 c 0,10 40,10 40,0 z",fill:!1},i["GR.M2.ROBOTIC"]={type:"path",d:"M100,121.68L114.895,136.459C115.309,136.201 115.798,136.052 116.321,136.052C117.812,136.052 119.022,137.262 119.022,138.753C119.022,140.243 117.812,141.454 116.321,141.454C114.831,141.454 113.62,140.243 113.62,138.753C113.62,138.407 113.686,138.076 113.805,137.772L103.378,132.6L100.851,141.224C101.072,141.298 101.28,141.4 101.471,141.526C102.211,142.008 102.701,142.843 102.701,143.791C102.701,145.281 101.491,146.492 100,146.492C99.451,146.492 98.939,146.327 98.512,146.045C97.776,145.562 97.29,144.73 97.29,143.785C97.29,142.592 98.064,141.579 99.138,141.222L96.613,132.606L86.186,137.778C86.305,138.082 86.37,138.413 86.37,138.759C86.37,140.25 85.16,141.46 83.669,141.46C82.179,141.46 80.969,140.25 80.969,138.759C80.969,137.268 82.179,136.058 83.669,136.058C84.193,136.058 84.681,136.207 85.095,136.465L99.991,121.671L100,121.662L100,121.68Z",stroke:!1},i["GR.M2.SECURITY FORCE ASSISTANCE"]=r("SFA"),i["GR.M2.SINGLE CHANNEL"]=r("SC"),i["GR.M2.SKI"]={type:"path",d:"m 95,145 -9,-8 m 28,0 -9,8 m -15,-24 20,20 m 0,-20 -20,20",fill:!1},i["GR.M2.SHORT RANGE"]=r("SR"),i["GR.M2.STRATEGIC"]=r("STR"),i["GR.M2.STRATEGIC MISSILE"]=r("S"),i["GR.M2.SUPPORT"]=r("SPT"),i["GR.M2.TACTICAL"]=r("TAC"),i["GR.M2.TACTICAL MISSILE"]=r("T"),i["GR.M2.TARGET ACQUISITION"]=r("TA"),i["GR.M2.TOWED"]=[{type:"path",d:"M70,120 l60,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:120,r:5},{type:"circle",fill:!1,cx:135,cy:120,r:5}],i["GR.M2.TROOP"]=r("T"),i["GR.M2.TRACKED"]={type:"path",d:"M 70,120 l 60,0 c10,0 10,10 0,10 l -60,0 c-10,0 -10,-10 0,-10",fill:!1},i["GR.M2.TRUCK"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.UTILITY"]=r("U"),i["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]={type:"text",stroke:!1,x:100,y:135,fontsize:20,text:"VSTOL"},i["GR.M2.VETERINARY"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"V"},i["GR.M2.WHEELED"]=[{type:"circle",cx:70,cy:125,r:5,fill:!1},{type:"circle",cx:100,cy:125,r:5,fill:!1},{type:"circle",cx:130,cy:125,r:5,fill:!1}],i["GR.M2.WHEELED LIMITED"]=[{type:"circle",cx:70,cy:125,r:5,fill:!1},{type:"circle",cx:130,cy:125,r:5,fill:!1}],i["GR.M2.WO-1"]=r("WO-1"),i["GR.M2.WO-2"]=r("WO-2"),i["GR.M2.WO-3"]=r("WO-3"),i["GR.M2.WO-4"]=r("WO-4"),i["GR.M2.WO-5"]=r("WO-5"),i["GR.EQ.SHORT RANGE"]={type:"path",d:"m 85,100 30,0",fill:!1},i["GR.EQ.INTERMEDIATE RANGE"]={type:"path",d:"m 85,105 30,0 m -30,-10 30,0",fill:!1},i["GR.EQ.LONG RANGE"]={type:"path",d:"m 85,110 30,0 m -30,-20 30,0 m -30,10 30,0",fill:!1},i["GR.EQ.WEAPON"]={type:"path",d:"m 100,60 0,80",fill:!1},i["GR.EQ.RIFLE"]={type:"path",d:"m 100,60 0,80 M 85,75 100,60 115,75",fill:!1},i["GR.EQ.RIFLE DISMOUNTED1"]={type:"path",d:"m 90,90 10,-10 10,10 m -10,-10 0,40",fill:!1},i["GR.EQ.MACHINE GUN"]={type:"path",d:"m 100,60 0,80 M 85,75 100,60 115,75 M 80,140 120,140",fill:!1},i["GR.EQ.GRENADE LAUNCHER"]=[i["GR.EQ.RIFLE"],{type:"circle",cx:100,cy:90,r:15,fill:!1}],i["GR.EQ.FLAME THROWER"]={type:"path",fill:!1,d:"m 90,135 0,-70 c 0,-15 20,-15 20,0"},i["GR.EQ.AIR DEFENCE GUN"]=[{type:"path",d:"m 85,140 30,0 c 0,-20 -30,-20 -30,0 z m 15,-80 0,65 m 15,-45 0,40 m -30,-40 0,40",fill:!1}],R||N||i["GR.EQ.AIR DEFENCE GUN"].push({type:"path",d:"M 85,75 100,60 115,75",fill:!1}),i["GR.EQ.ANTITANK GUN"]={type:"path",d:"m 85,140 15,-15 15,15 m -15,-80 0,65 m -15,-45 0,40 m 30,-40 0,40",fill:!1},i["GR.EQ.DIRECT FIRE GUN"]={type:"path",d:"m 100,60 0,80 m 15,-60 0,40 m -30,-40 0,40",fill:!1},i["GR.EQ.RECOILLESS GUN"]={type:"path",d:"m 85,75 15,-15 15,15 m 0,5 0,40 m -30,-40 0,40 m 15,-60 0,80",fill:!1},i["GR.EQ.HOWITZER"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",d:"m 115,80 0,40 m -30,-40 0,40 m 15,-60 0,60",fill:!1}],R||i["GR.EQ.HOWITZER"].push({type:"path",d:"M 85,75 100,60 115,75",fill:!1}),i["GR.EQ.HOWITZER TRACKED"]={type:"path",d:"M 70,120 l 60,0 c10,0 10,10 0,10 l -60,0 c-10,0 -10,-10 0,-10",fill:!1},i["GR.EQ.MISSILE LAUNCHER"]={type:"path",d:"m 100,140 0,-80 m -15,80 0,-65 c 0,-20 30,-20 30,0 l 0,65",fill:!1},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]={type:"path",d:"m 85,140 30,0 c 0,-20 -30,-20 -30,0 z m 15,-15 0,-65 m -15,80 0,-65 c 0,-20 30,-20 30,0 l 0,65",fill:!1},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"R"},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]=[{type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"E"},{type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"R"}],i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"]={type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"T"},i["GR.EQ.ANTITANK MISSILE LAUNCHER"]={type:"path",d:"m 85,140 15,-15 15,15 M 85,120 85,75 c 0,-20 30,-20 30,0 l 0,45 m -15,5 0,-65",fill:!1},i["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]=[i["GR.EQ.MISSILE LAUNCHER"]],R&&i["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"].push({type:"path",d:"m 85,140 30,0",fill:!1}),i["GR.EQ.MORTAR"]=[{type:"path",d:"m 100,60 0,60 M 85,75 100,60 115,75",fill:!1},{type:"circle",cx:100,cy:130,r:10,fill:!1}],i["GR.EQ.SINGLE ROCKET LAUNCHER"]={type:"path",d:"m 85,75 15,-15 15,15 m -15,-5 0,70 M 85,85 100,70 115,85",fill:!1},i["GR.EQ.MULTIPLE ROCKET LAUNCHER"]={type:"path",d:"m 115,90 0,40 m -30,-40 0,40 m 0,-55 15,-15 15,15 m -15,-5 0,70 M 85,85 100,70 115,85",fill:!1},i["GR.EQ.ANTITANK ROCKET LAUNCHER"]={type:"path",d:"m 85,140 15,-15 15,15 M 85,85 100,70 115,85 m -15,-15 0,55 M 85,75 100,60 115,75",fill:!1},i["GR.EQ.NON-LETHAL WEAPON"]={type:"path",d:"m 100,60 0,80 M 80,60 l40,0",fill:!1},i["GR.EQ.NON-LETHAL GRENADE LAUNCHER"]=[i["GR.EQ.NON-LETHAL WEAPON"],{type:"circle",cx:100,cy:90,r:15,fill:!1}],i["GR.EQ.TASER"]=[i["GR.EQ.NON-LETHAL WEAPON"],a("Z")],i["GR.EQ.WATER CANNON"]=[i["GR.EQ.NON-LETHAL WEAPON"],a("W")],i["GR.EQ.LIMITED CROSS-COUNTRY"]=[{type:"path",d:"m 70,130 60,0",fill:!1},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.CROSS-COUNTRY"]=[{type:"path",d:"m 70,130 60,0",fill:!1},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:100,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.ARMOURED FIGHTING VEHICLE"]={type:"path",d:"m 70,100 30,-30 30,30 -30,30 z m 60,-30 0,60 m -60,-60 0,60 0,0",fill:!1},i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]=[i["GR.EQ.ARMOURED FIGHTING VEHICLE"]],N?i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"].push({type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"C2"}):i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"].push({type:"path",d:"m 80,90 20,15 0,-10 20,15",fill:!1}),i["GR.EQ.ARMOURED PERSONNEL CARRIER"]={type:"path",fill:!1,d:"m 70,80 30,-10 30,10 m -60,-10 0,60 60,0 0,-60"},i["GR.EQ.ARMOURED PERSONNEL CARRIER COMBAT SERVICE SUPPORT VEHICLE"]=[i["GR.EQ.ARMOURED PERSONNEL CARRIER"],{type:"path",d:"m 70,120 60,0",fill:!1}],i["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]={type:"path",fill:!1,d:"M 130,80 70,130"},i["GR.EQ.COMBAT SERVICE SUPPORT VEHICLE"]={type:"path",fill:!1,d:"M 70,120 130,120"},i["GR.EQ.ARMOURED MEDICAL PERSONNEL CARRIER"]={type:"path",fill:!1,d:"m 70,100 60,0 m -30,-30 0,60"},i["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]=[{type:"path",d:"m 60,120 80,0 M 120,80 c 25,0.2 25,40 0,40 l -40,0 C 55,120 55,80 80,80 Z",fill:!1},i["GR.M2.WHEELED LIMITED"]],i["GR.EQ.ARMOURED VEHICLE"]=a("A"),i["GR.EQ.ARMORED CARRIER WITH VOLCANO"]=a("V"),i["GR.EQ.TANK"]={type:"path",fill:!1,d:"m 70,80 60,0 m -60,40 60,0 m -60,-50 0,60 0,0 m 60,-60 0,60"},i["GR.EQ.ASSAULT BREACHER VEHICLE (ABV) WITH COMBAT DOZER BLADE"]={type:"path",fill:!1,d:"m 100,95 30,25 m -30,-60 0,35 -30,25 m 10,-60 40,0 m -50,20 60,0 m -60,40 60,0 m -60,-50 0,60 0,0 m 60,-60 0,60"},i["GR.EQ.LIGHT TANK"]={type:"path",fill:!1,d:"m 100,80 0,40"},i["GR.EQ.MEDIUM TANK"]={type:"path",fill:!1,d:"m 105,80 0,40 m -10,-40 0,40"},i["GR.EQ.HEAVY TANK"]={type:"path",fill:!1,d:"m 110,80 0,40 m -20,-40 0,40 m 10,-40 0,40"},i["GR.EQ.TANK RECOVERY VEHICLE"]={type:"path",fill:!1,d:"m 85,100 30,0 m 10,-10 c -13.1,0 -12.4,20 0,20 M 75,90 c 12.7,0.3 12.7,20.3 0,20"},i["GR.EQ.BRIDGE"]={type:"path",d:"m 115,75 -10,10 0,30 10,10 m -30,-50 10,10 0,30 -10,10 m -15,-55 60,0 0,60 -60,0 0,-60",fill:!1},i["GR.EQ.FIXED BRIDGE"]={type:"path",d:"M 100,70 100,130",fill:!1},i["GR.EQ.FOLDING GIRDER BRIDGE"]={type:"path",d:"M 110, 80 90,80 90,120 110,120",fill:!1},i["GR.EQ.HOLLOW DECK BRIDGE"]={type:"path",d:"M 110, 80 90,80 90,120 110,120 z",fill:!1},i["GR.EQ.DRILL"]=i["GR.IC.DRILLING"],i["GR.EQ.DOZER"]={type:"path",d:"m 90,60 20,0 m -10,0 0,20 m -30,0 60,0 m -60,-10 0,60 0,0 m 60,-60 0,60 m -60,-10 60,0",fill:!1},i["GR.EQ.DOZER ARMORED"]={type:"path",d:"m 70,130 60,0 m -30,-70 0,10 m -30,10 30,-10 30,10 m 0,-10 0,60 m -60,-60 0,60 0,0 m 20,-70 20,0",fill:!1},i["GR.EQ.EARTHMOVER"]={type:"path",d:"m 100,60 0,20 m -25,-15 5,-5 40,0 5,5 m -55,15 60,0 m -60,40 60,0 m 0,-50 0,60 m -60,-60 0,60 0,0",fill:!1},i["GR.EQ.MULTIFUNCTIONAL EARTHMOVER/DIGGER"]=[i["GR.EQ.EARTHMOVER"],a("MF")],i["GR.EQ.MINE CLEARING EQUIPMENT"]={type:"path",d:"m 100,80 0,15 -30,25 60,0 -30,-25",fill:!1},i["GR.EQ.MINE LAYING VEHICLE"]=[{type:"path",d:"m 90,85 20,30 m 0,-30 -20,30 m 10,-30 0,30",fill:!1},{type:"circle",cx:100,cy:100,r:10}],i["GR.EQ.MINE SCATTERABLE"]=[a("S"),{type:"circle",cx:85,cy:115,r:5,fill:!1},{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"circle",cx:115,cy:115,r:5,fill:!1}],i["GR.EQ.UTILITY VEHICLE"]={type:"path",fill:!1,d:"m 70,65 c 0,15 60,15 60,0 l 0,65 -60,0 z"},i["GR.EQ.UTILITY VEHICLE BACKHOE"]=[{type:"path",fill:!1,d:"M 130,130 100,80 75,95 75,95"},{type:"path",d:"M 75,105 85,95 75,95 z"}],i["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]={type:"path",fill:!1,d:"m 75,100 c 15,15 35,15 50,0 z"},i["GR.EQ.UTILITY VEHICLE LIGHT"]={type:"path",fill:!1,d:"M 100,78.3 100,130"},i["GR.EQ.UTILITY VEHICLE MEDIUM"]={type:"path",fill:!1,d:"m 105,130 0,-52 M 95,130 l0,-52"},i["GR.EQ.UTILITY VEHICLE HEAVY"]={type:"path",fill:!1,d:"m 110,130 0,-53 m -20,50 0,-53 m 10,1.3 0,52"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]={type:"path",fill:!1,d:"m 130,130 -40,-40 0,25 c 0,5 -10,5 -10,0"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]={type:"path",fill:!1,d:"m 105,115 10,-10"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]={type:"path",fill:!1,d:"m 120,110 -10,10 m -10,-10 10,-10 m -5,15 10,-10"},i["GR.EQ.MEDICAL VEHICLE"]={type:"path",fill:!1,d:"m 70,100 l 60,0 M 100,78.3 100,130"},i["GR.EQ.MEDICAL EVACUATION"]={type:"path",d:"m 95,85 10,0 0,10 10,0 0,10 -10,0 0,10 -10,0 0,-10 -10,0 0,-10 10,0 z"},i["GR.EQ.MOBILE EMERGENCY PHYSICIAN"]={type:"path",fill:!1,d:"m 70,100 l 60,0 M 100,78.3 100,130 M 85,85 115,85"},i["GR.EQ.BUS"]=[i["GR.EQ.UTILITY VEHICLE"],a("B")],i["GR.EQ.SEMI-TRAILER TRUCK"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"path",fill:!1,d:"m 140,90 0,20 m -10,-10 10,0"},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:85,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.WATER VEHICLE"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"path",fill:!1,d:"m 70,95 c 10,0 0,10 10,10 10,0 0,-10 10,-10 10,0 0,10 10,10 10,0 0,-10 10,-10 10,0 0,10 10,10 10,0 0,-10 10,-10"},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.TRAIN LOCOMOTIVE"]={type:"path",fill:!1,d:"m 70,70 0,60 60,0 0,-30 -30,0 0,-30 z"},i["GR.EQ.RAILCAR"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"circle",fill:!1,cx:75,cy:135,r:5},{type:"circle",fill:!1,cx:85,cy:135,r:5},{type:"circle",fill:!1,cx:115,cy:135,r:5},{type:"circle",fill:!1,cx:125,cy:135,r:5}],i["GR.EQ.CBRN EQUIPMENT"]=[{type:"path",d:"M80,140 c0,-20 10,-60 50,-63 m-10,63 c0,-20 -10,-60 -50,-63 ",fill:!1},{type:"circle",cx:70,cy:85,r:8},{type:"circle",cx:130,cy:85,r:8}],i["GR.EQ.COMPUTER SYSTEM"]={type:"path",d:"m 100,132 0,-10 -35,0 0,-50 70,0 0,50 -35,0 m -25,10 50,0",fill:!1},i["GR.EQ.COMMAND LAUNCH EQUIPMENT (CLE)"]=a("CLE"),i["GR.EQ.GENERATOR SET"]=a("G"),i["GR.EQ.GROUND-BASED MIDCOURSE DEFENSE (GMD) FIRE CONTROL (GFC) CENTER"]=a("GFC"),i["GR.EQ.IN-FLIGHT INTERCEPTOR COMMUNICATIONS SYSTEM (IFICS) DATA TERMINAL (IDT)"]={type:"path",fill:!1,d:"m 80,82.4 45,-2 -4,37 m -6,-1 0,-35 -34,9 m 12,21 0,8 M 80,82.4 c 0,25 16,35 41,35"},i["GR.EQ.LASER"]={type:"path",fill:!1,d:"m 100,55 0,25 10,5 -20,5 20,5 -20,5 10,5 0,15 10,5 -20,5 20,5 -20,5 20,5 M 90,65 100,55 110,65"},i["GR.EQ.TENT"]={type:"path",fill:!1,d:"m 65,124.4 10,-37 25,-10 25,10 10,37 z"},i["GR.EQ.TENT CIVILIAN"]={type:"path",fill:!1,d:"m 75,120 10,-30 15,-10 15,10 10,30 z"},i["GR.EQ.TENT MILITARY"]={type:"path",d:"m 75,120 10,-30 15,-10 15,10 10,30 z"},i["GR.EQ.UNIT DEPLOYMENT SHIPMENTS"]=a("DPLY"),i["GR.EQ.CIVILIAN VEHICLE.LIGHT"]={type:"path",fill:!1,d:"m 100,125 0,-20"},i["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]={type:"path",fill:!1,d:"m 103,105 0,20 m -6,-20 0,20"},i["GR.EQ.CIVILIAN VEHICLE.HEAVY"]={type:"path",fill:!1,d:"m 106,105 0,20 m -12,-20 0,20 m 6,-20 0,20"},i["GR.EQ.CIVILIAN VEHICLE.TRAILER"]={type:"path",fill:!1,d:"m 140,105 0,20 m -10,-10 10,0"},i["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 5,0 0,-20 -20,0 0,-20 -20,0 0,20 -20,0 0,20 5,0 m 50,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z"},{type:"path",fill:!1,strokewidth:2,d:"m 95,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 -20,0 -20,0 0,-20 -20,0 0,20 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 75,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 0,-20 -20,0 -20,0 -20,0 0,20 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 115,90 0,15 10,0 0,-15 z m -20,0 0,15 10,0 0,-15 z m -20,0 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m -35,0 20,0 m 15,0 5,0 0,-20 0,-20 -20,0 -20,0 0,20 -20,0 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 95,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]={type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 -60,0 0,20 5,0 m 15,-20 5,-15"},i["GR.EQ.PACK ANIMAL"]={type:"path",fill:!1,d:"m 70,125 15,-50 15,50 15,-50 15,50 "},i["GR.EQ.MISSILE SUPPORT"]=[{type:"text",stroke:!1,x:100,y:100,fontsize:20,text:"MSL"},{type:"text",stroke:!1,x:100,y:115,fontsize:20,text:"SPT"}],i["GR.EQ.MISSILE TRANSLOADER"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 75,70 50,0 m -25,10 c 0,-5 0,-10 0,-10"}],i["GR.EQ.MISSILE TRANSPORTER"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 55,85 90,0"}],i["GR.EQ.MISSILE CRANE/LOADING DEVICE"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 75,80 25,-20 c 0,0 0,15 0,15 l 5,0 0,-5"}],i["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]=[{type:"text",stroke:!1,x:90,y:110,fontsize:20,text:"MSL"},{type:"path",fill:!1,d:"m 120,115 0,-15 -10,-10 20,0 -10,10"}],i["GR.EQ.MISSILE WARHEAD TRANSPORTER"]=[{type:"text",stroke:!1,x:100,y:100,fontsize:20,text:"MSL"},{type:"text",stroke:!1,x:100,y:115,fontsize:20,text:"WHD"}],i["GR.EQ.LAND MINE"]=N?{type:"circle",cx:100,cy:100,r:22,fill:!1}:[{type:"path",fill:!1,d:"m 70,65 60,0 -30,65 z"},{type:"text",stroke:!1,x:100,y:90,fontfamily:"Arial",fontsize:30,text:"M"}],i["GR.EQ.ANTIPERSONNEL LAND MINE"]=[{type:"circle",cx:100,cy:100,r:22},{type:"path",d:"M117,82 l20,-18 -18,25z M83,82 l-20,-18 18,25z",stroke:!1}],i["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]=[{type:"circle",cx:100,cy:100,r:22,fill:!1},{type:"path",d:"M117,82 l20,-18 -18,25z M83,82 l-20,-18 18,25z",stroke:!1}],i["GR.EQ.ANTITANK MINE"]={type:"circle",cx:100,cy:100,r:22},i["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]=a("IED"),i["GR.EQ.LAND MINES"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"M"},{type:"path",fill:!1,d:R?"m 135,70 -70,0 35,70 z":"m 65,130 70,0 -35,-70 z"}],i["GR.EQ.SENSOR"]={type:"path",d:"m 100,60 c 0,15 25,40 40,40 -15,0 -40,25 -40,40 0,-15 -25,-40 -40,-40 15,0 40,-25 40,-40 z"},i["GR.EQ.SENSOR EMPLACED"]=[s._scale(.75,i["GR.EQ.SENSOR"]),{type:"path",fill:!1,d:"m 70,75 10,-15 10,15 10,-15 10,15 10,-15 10,15"}],i["GR.EQ.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},i["GR.EQ.ANTENNAE"]=[],i["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]={type:"path",fill:!!R&&G,stroke:o,d:"m 110,95 10,0 m -10,10 10,0 m -10,10 10,0 m -10,-30 10,0 m -10,-5 -10,10 -30,0 0,20 30,0 10,10 z"},i["GR.IN.IC.ELDER CARE"]={type:"path",d:"m 120.1,119.1 c 0,-6.3 2.3,-8.2 3.9,-12.6 1,-2.6 1.6,-3.3 1.8,-6.5 0.2,-2.4 0.9,-4.7 0.9,-7.2 v -2.6 c 0,-2.6 -2.2,-8.9 -3.3,-10.5 -1.3,-2 -4.8,-5.4 -6.7,-6.9 -2.2,-1.8 -5.4,-4.6 -8.2,-5.6 -1.6,-0.5 -9.8,-2.4 -11.4,-2.3 l -5.7,0.6 v 0.8 c 0,0.8 2,2.7 2.4,3.3 0,3.3 0.8,6.8 -1.3,8.4 -2.2,1.6 -2.8,3.4 -3.8,6.3 -0.4,1 -0.9,3.1 -1,4 -0.2,1 -0.2,4 -0.4,4.6 -1.1,2.4 -2.6,4.2 -3.8,6.4 l -5.1,0.5 c -2.1,3.2 -4.6,4.1 -4.6,9.6 v 26.4 c 0.6,0.2 0.4,0.2 0.9,0.2 0.5,0 0.3,-0.1 0.9,-0.2 v -27.5 c 0,-0.7 0.8,-3 1.1,-3.5 0.4,0.2 0.8,0.6 1.3,0.6 0.3,0 1.1,-0.3 1.3,-0.4 l 2.6,0.9 0.8,-0.6 0.6,2.5 c 0.4,0.3 0.4,0.5 0.8,0.5 h 0.4 c 0.5,0 0.6,-0.2 0.6,-0.6 v -0.4 c 0,-1 -1.2,-3 -1.5,-3.7 1.2,-2.5 6.3,-2.6 8.2,-5.8 0.9,-1.6 1.8,-3 2.6,-4.5 0.4,-0.9 2.3,-4.1 2.4,-4.4 h 4.4 c 2.3,0 2.1,2.5 2.6,4.2 0.6,2 2,2 2,4.6 0,2.8 -2.9,7 -4,9 -0.3,0.7 -3.9,8.8 -3.9,8.9 v 2 c 0,3 2.6,9.1 2.6,11.2 v 2.2 c -1.2,0.3 -6.8,2.4 -6.8,3.5 0,0.3 0.4,0.6 0.9,0.6 h 6.8 c 2.3,0 4.5,-1 6.6,-1.1 v -3 c 0,-0.6 -1.1,-2.2 -1.1,-3.7 -0.9,-1.3 -1.8,-6 -1.8,-8.2 0,-3.2 1.2,-5.4 2.5,-7.4 2.5,-4 0.4,-2.3 4.6,-5.1 l 1.8,1.7 c -1,1.8 -2.3,3.7 -2.3,6.4 v 5.9 h 0.4 v 0.6 c 0,0.9 5,9 5.7,10.3 -1.5,2.3 -6.7,1.6 -6.8,5 h 7.5 c 1.2,0 3.3,-1 4.5,-1.4 1.6,-0.5 2.9,-1.1 2.9,-3 0,-0.7 -2.9,-4.6 -3.6,-5.7 -0.3,-0.4 -2.4,-6 -2.4,-6.6 v -0.4 z m -45.3,-47.9 v 0.6 c 0,4.3 3.7,7.9 8.1,7.9 h 0.2 c 3.7,0 7.7,-3.6 7.7,-7 v -2.2 c 0,-3.2 -3.9,-6.8 -7.5,-6.8 h -1.2 c -3.4,0 -7.3,4 -7.3,7.5 z",stroke:!1},i["GR.IN.IC.RAW MATERIAL PRODUCTION/STORAGE"]=[{type:"text",stroke:!1,x:100,y:90,fontsize:30,text:"PS"},{type:"text",stroke:!1,x:100,y:120,fontsize:30,text:"RM"}],i["GR.IN.IC.MINE"]={type:"path",d:"m 105,85 10,10 5,-5 c -5,-5 -10,-5 -15,-5 z M 95,85 85,95 80,90 c 5,-5 10,-5 15,-5 z m -5,5 30,30 m -40,0 30,-30"},i["GR.IN.IC.PROCESSING FACILITY"]=[{type:"text",stroke:!1,x:100,y:90,fontsize:30,text:"PROC"},{type:"text",stroke:!1,x:100,y:120,fontsize:30,text:"FAC"}],i["GR.IN.IC.UTILITY FACILITY"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"UTIL"},i["GR.IN.IC.RESEARCH"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"R&D"},i["GR.IN.IC.TELECOMMUNICATIONS"]={type:"path",d:"m 95,80 10,20 -10,0 10,20",fill:!1},i["GR.IN.IC.ELECTRIC POWER"]={type:"path",d:"m 100,60.5 c -16.4,0 -29.6,13.2 -29.6,29.6 0,12.8 8.3,23.9 19.7,27.8 l 0,19.7 c 3.2,1.2 6.3,1.8 9.9,1.8 3.6,0 6.7,-0.6 9.9,-1.8 l 0,-19.8 c 11.5,-3.9 19.8,-15 19.7,-27.8 0,-16.4 -13.2,-29.6 -29.6,-29.6 z",fill:!1},i["GR.IN.IC.ELECTRIC POWER NUCLEAR"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"N"},i["GR.IN.IC.ELECTRIC POWER DAM"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"H"},i["GR.IN.IC.ELECTRIC POWER FOSSIL"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"F"},i["GR.IN.IC.ATOMIC ENERGY"]={type:"path",d:R?"M 90.4,119 C 84.2,115 80,109 80,101 l 20,0 -9.6,18 z m 19.6,0 -10,-18 20,0 c 0,8 -4,14 -10,18 z M 100,101 89.7,83.8 c 3,-2 6.5,-3 10.3,-3 4,0 7,1 10,3 L 100,101 Z":"M 89.9,82.5 110,82.7 89.7,117.1 80,99.9 120.1,100 110,117.3 z",fill:!1},i["GR.IN.IC.ATOMIC ENERGY WEAPONS GRADE"]={type:"path",d:R?"M 90.4,119 C 84.2,115 80,109 80,101 l 20,0 -9.6,18 z m 19.6,0 -10,-18 20,0 c 0,8 -4,14 -10,18 z M 100,101 89.7,83.8 c 3,-2 6.5,-3 10.3,-3 4,0 7,1 10,3 L 100,101 Z":"M 89.9,82.5 110,82.7 89.7,117.1 80,99.9 120.1,100 110,117.3 z"},i["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]={type:"path",stroke:!1,d:"m 95.1,109.3 c 0,0 -20.8,4.9 -30.1,6.7 -2.2,0.4 -5.7,0.2 -6.5,-2 -0.4,-1.1 3.3,-6.6 6.5,-7.3 8.7,-1.9 25.7,-5.5 25.7,-5.5 l 3.1,-16.1 4,-0.8 0.3,15.9 25.6,-5.8 6.5,-13.2 5.3,-1.4 -3.3,16.1 14,4.8 -4.3,1.2 -13.7,-2.8 -23.6,6.7 31.6,11.8 -5.5,2.5 z"},i["GR.IN.IC.BRIDGE"]={type:"path",d:"m 70,115 10,-10 40,0 10,10 m -60,-30 10,10 40,0 10,-10",fill:!1},i["GR.IN.IC.BASE"]={type:"path",d:"m 75,85 50,30 m -50,0 50,-30",fill:!1},i["GR.IN.IC.SEA SURFACE INSTALLATION, OIL RIG/PLATFORM"]=[{type:"path",d:"m 85,105 0,-40 m 25,40 0,15 m -35,0 0,-15 50,0 0,15",fill:!1},{type:"path",d:"m 85,90 15,0 0,15 -15,0 0,-15"}],i["GR.IN.IC.MILITARY/CIVILIAN.MATERIEL"]=a("MAT"),i["GR.IN.IC.MILITARY/CIVILIAN.PRINTED MEDIA"]=[{type:"circle",cx:100,cy:90,r:10,fill:!1},{type:"circle",cx:100,cy:110,r:10,fill:!1},{type:"path",d:"m 65,100 75,0",fill:!1}],i["GR.IN.IC.INFRASTRUCTURE.BANKING FINANCE AND INSURANCE INFRASTRUCTURE.ECONOMIC INFRASTRUCTURE ASSET"]=a("ECON"),i["GR.IN.IC.INFRASTRUCTURE.TELECOMMUNICATIONS INFRASTRUCTURE.TELECOMMUNICATIONS"]={type:"path",d:"m 90,105 20,0 0,0 m -25,15 15,-30 15,30 m -55,-40 25,10 0,-10 15,10 15,-10 0,10 25,-10",fill:!1},i["GR.IN.M1.RADIOLOGICAL"]=l("R"),i["GR.IN.M1.COAL"]=l("CO"),i["GR.IN.M1.GEOTHERMAL"]=l("GT"),i["GR.IN.M1.HYDROELECTRIC"]=l("HY"),i["GR.IN.M1.NATURAL GAS"]=l("NG"),i["GR.IN.M1.PETROLEUM"]={type:"path",d:"m 100,75 0,-10 -6,-10 12,0 -6,10",fill:!1},i["GR.IN.M1.CIVILIAN"]=l("CIV"),i["GR.IN.M1.CIVILIAN TELEPHONE"]=l("T"),i["GR.IN.M1.CIVILIAN TELEVISION"]=l("TV"),i["GR.IN.M2.CHEMICAL WARFARE PRODUCTION"]=r("C"),i["GR.IN.M2.NUCLEAR WARFARE PRODUCTION"]=r("N"),i["GR.IN.M2.RADIOLOGICAL WARFARE PRODUCTION"]=r("R"),i["GR.IN.M2.ATOMIC ENERGY REACTOR"]=r("A"),i["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]=r("P"),i["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]=r("S"),i["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]=r("B"),i["GR.IN.M2.SHIP CONSTRUCTION"]=r("YRD"),i["GR.IN.M2.WEAPONS GRADE PRODUCTION"]=r("W"),i["SOF.IC.UNDERWATER DEMOLITION TEAM"]={type:"text",stroke:!1,x:100,y:110,fontsize:32,text:"UDT"},i["SOF.M2.ATTACK"]=r("A"),i["SOF.M2.REFUEL"]=r("K"),i["SOF.M2.UTILITY"]=r("U"),i["SOF.M2.VSTOL"]={type:"text",stroke:!1,x:100,y:135,fontsize:20,text:"VSTOL"},i["SOF.M2.COMBAT SEARCH AND RESCUE"]=r(R?"CSAR":"H"),i["ST.IC.ARREST"]={type:"path",d:"m 92.5,100 15,0 m -2.5,-10 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -5,5 0,20 m 20,-15 c 0,11 -9,20 -20,20 -11,0 -20,-9 -20,-20 0,-11 9,-20 20,-20 11,0 20,9 20,20 z",fill:!1},i["ST.IC.ARSON/FIRE"]=R?[{type:"path",d:"m 84.6,101.6 c 1.3,23.1 31,23.2 30.7,-1.9 -1.5,2.1 -4.6,6.5 -8.1,7.3 1.9,-2.4 2.6,-8.5 2.4,-12.9 -1.7,3.4 -4,7.9 -7,7.8 1.7,-4.3 2.7,-9.4 -0.5,-13.7 -0.2,3 0.8,7.1 -1.9,7 -2.7,-0.1 -2.9,-4.4 -1.1,-10.8 -4,4.1 -6.2,9.8 -3.8,17.5 -1.9,-0.2 -4.4,-1.9 -7,-7.8 -1.5,4.9 1.2,9.6 3.2,13.7 -2.4,-1.1 -6,-3 -7,-6.2 z",stroke:!1},{type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"ASN"}]:{type:"text",stroke:!1,x:100,y:110,fontsize:35,text:"FIRE"},i["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]={type:"path",d:"m 127,127 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5",fill:!1},i["ST.IC.BLACK LIST LOCATION"]=a("BLK"),i["ST.IC.BLACK MARKETING"]=[{type:"text",stroke:!1,x:100,y:95,fontsize:30,text:"BLK"},{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"MKT"}],i["ST.IC.BOMB"]=a("BOMB"),i["ST.IC.BOOBY TRAP"]={type:"path",d:"m 85,105 15,-25 15,25 m -35,5 c 0,-10 40,-10 40,0 0,10 -40,10 -40,0 z",fill:!1},i["ST.IC.COMPOSITE LOSS"]={type:"path",d:"m 100,85 0,30 m -35,-15 45,0 m 20,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",fill:!1},i["ST.IC.DEMONSTRATION"]=a("MASS"),i["ST.IC.DRIVE-BY SHOOTING"]={type:"path",d:"m 95,85 5,-5 5,5 m -5,-5 0,30 m -15,0 30,0 m 5,5 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -30,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z",fill:!1},i["ST.IC.DRUG RELATED ACTIVITIES"]=a("DRUG"),i["ST.IC.EXPLOSION"]={type:"path",d:"m 110,55 5,20 15,-10 0,15 15,5 -15,10 15,10 -15,5 5,15 -20,-5 -5,20 -10,-15 -10,20 -5,-25 -20,10 5,-15 L 55,105 70,95 60,85 70,80 70,65 85,75 90,55 100,70 z",fill:!1},i["ST.IC.EXTORTION"]={type:"text",stroke:!1,x:100,y:130,fontsize:80,text:"$"},i["ST.IC.FOOD DISTRIBUTION"]=[{type:"path",d:"m 105,85 c -5,10 -5,20 0,30 m 0,-30 c -20,0 -20,30 0,30",fill:!1},{Unknown:{type:"path",d:"M35,120 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,120 l150,0 ",fill:!1},Neutral:{type:"path",d:"M45,120 l110,0 ",fill:!1},Hostile:{type:"path",d:"M50,120 l100,0 ",fill:!1}}[T]],i["ST.IC.GRAFFITI"]={type:"path",d:"m 110,80 c -10,0 -10,10 0,10 10,0 10,10 0,10 -10,0 -10,10 0,10 10,0 10,10 0,10 M 90,80 c -10,0 -10,10 0,10 10,0 10,10 0,10 -10,0 -10,10 0,10 10,0 10,10 0,10",fill:!1},i["ST.IC.GROUP"]={type:"path",d:"m 133,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m -52,-12.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m 23,-7.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},i["ST.IC.HIJACKING (AIRPLANE)"]={type:"path",fill:!!R&&G,d:"m 70,95 0,10 65,0 0,-10 z m 55,10 0,10 5,0 0,-10 z m 0,-10 0,-10 5,0 0,10 z m -45,10 0,15 10,0 0,-15 z m 0,-10 0,-15 10,0 0,15 z"},i["ST.IC.HIJACKING (BOAT)"]={type:"path",fill:R?G:!C&&G,d:"m 105,80 0,20 20,0 z m -5,25 0,-25 m -30,25 10,15 40,0 10,-15 z"},i["ST.IC.GRAY LIST LOCATION"]=a("GRAY"),i["ST.IC.IED"]=a("IED"),i["ST.IC.INDIVIDUAL"]={type:"path",d:"m 108,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},i["ST.IC.INTERNAL SECURITY FORCE"]=a("ISF"),i["ST.IC.KILLING VICTIM"]=[{type:"path",d:"m 108,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},{Unknown:{type:"path",fill:!1,d:"M50,65 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 143,130"}}[T]],i["ST.IC.KILLING VICTIMS"]=[{type:"path",d:"m 133,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m -52,-12.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m 23,-7.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},{Unknown:{type:"path",fill:!1,d:"M50,65 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 143,130"}}[T]],i["ST.IC.KNOWN INSURGENT VEHICLE"]={type:"path",d:"m 65,95 70,0 m 0,10 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -50,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",fill:!1},i["ST.IC.MASS GRAVE LOCATION"]={type:"path",d:"m 77.5,90 10,0 m -5,-5 0,15 m 7.5,-20 0,30 -15,0 0,-30 z m 22.5,10 10,0 m -5,-5 0,15 m -7.5,-20 0,30 15,0 0,-30 z m -15,20 10,0 m -5,-5 0,20 m -7.5,-25 15,0 0,30 -15,0 z",fill:!1},i["ST.IC.MINE LAYING"]=[{type:"path",d:"m 60,85 80,0 0,30 -80,0 z",fill:!1},{type:"path",d:"m 135,100 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -25,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -25,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",stroke:!1}],i["ST.IC.PATROLLING"]={type:"path",d:"m 131,97 0,-14 5,0 c 4,0 4,7 0,7 l -5,0 m -71,15 15,10 M 60,105 75,95 m -15,10 40,0 -15,-15 40,0",fill:!1},i["ST.IC.POISONING"]={type:"path",d:"m 85,95 c 0,-20 30,-20 30,0 0,20 -30,20 -30,0 z m -15,10 60,15 m -60,0 60,-15",fill:!1},i["ST.IC.PSYCHOLOGICAL OPERATIONS"]={type:"path",fill:!!R&&G,stroke:o,d:"m 110,95 10,0 m -10,10 10,0 m -10,10 10,0 m -10,-30 10,0 m -10,-5 -10,10 -30,0 0,20 30,0 10,10 z"},i["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]=[i["ST.IC.PSYCHOLOGICAL OPERATIONS"],{Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 100,110 100,90 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T]],i["ST.IC.RIOT"]=a("RIOT"),i["ST.IC.SAFE HOUSE"]=a("SAFE"),i["ST.IC.SEARCHING"]={type:"path",d:"m 140,105 c -10,0 -5,0 -10,0 -15,0 -5,-15 -20,-15 -15,0 -5,20 -20,20 -15,0 -5,-20 -20,-20 -10,0 -10,10 -10,10 m 70,0 10,5 -10,5",fill:!1},i["ST.IC.SPY"]=a("SPY"),i["ST.IC.SNIPING"]=[{type:"path",d:"m 95,85 5,-5 5,5 m -5,-5 0,40",fill:!1},{type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"S"}],i["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]={type:"path",d:"m 115,100 c 0,-5 5,-10 10,-10 M 85,100 C 85,95 80,90 75,90 m 5,25 c -0.5,-29.5 40,-30 40,0 z",fill:!1},i["ST.IC.WHITE LIST LOCATION"]=a("WHT"),i["ST.IC.ROBBERY"]=a("ROB"),i["ST.IC.THEFT"]=a("THF"),i["ST.IC.BURGLARY"]=a("BUR"),i["ST.IC.SMUGGLING"]=a("SMGL"),i["ST.IC.SABOTAGE"]=a("SAB"),i["ST.IC.ILLEGAL DRUG OPERATION"]=a("DRUG"),i["ST.IC.SPY"]=a("SPY"),i["ST.IC.WARRANT SERVED"]=a("WNT"),i["ST.IC.POLLING PLACE/ELECTION"]=a("VOTE"),i["ST.IC.NATURAL EVENT"]=a("NAT"),i["ST.IC.GEOLOGIC"]=a("GEOL"),i["ST.IC.HYDRO-METEOROLOGICAL"]=a("HYDR"),i["ST.IC.INFESTATION"]=a("INFS"),i["ST.IC.GRENADE"]=a("G"),i["ST.IC.INCENDIARY"]=a("I"),i["ST.IC.MINE"]=a("M"),i["ST.IC.HOUSE"]={type:"path",fill:!!R&&G,d:"m 70,100 60,0 m -30,-20 -30,20 0,35 60,0 0,-35 -30,-20 z"},i["ST.IC.ROCK THROWING"]={type:"path",d:"m 90,60 25,25 M 70,65 95,90 M 60,80 80,100 m 45,-5 5,15 -5,15 -20,10 -20,-5 -5,-20 5,-5 10,0 5,-10 10,-5 15,5 z"},i["ST.M1.ACCIDENT"]=l("ACC"),i["ST.M1.ASSASSINATION"]=l("AS"),i["ST.M1.CIVILIAN"]=l("CIV"),i["ST.M1.COERCED/IMPRESSED"]=l("C"),i["ST.M1.COMBAT"]=l("CBT"),i["ST.M1.DEAD BODY"]=l("DB"),i["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]=l("DPRE"),i["ST.M1.DRUG"]=l("DRUG"),i["ST.M1.EVICTION"]=l("EV"),i["ST.M1.EXECUTION (WRONGFUL KILLING)"]=l("EX"),i["ST.M1.EXFILTRATION"]=l("EXFL"),i["ST.M1.FOREIGN FIGHTERS"]=l("FF"),i["ST.M1.GANG"]=l("GANG"),i["ST.M1.GOVERNMENT ORGANIZATION"]=l("GO"),i["ST.M1.HIJACKING/HIJACKED"]=l("H"),i["ST.M1.HOUSE-TO-HOUSE"]={type:"path",fill:!!R&&G,d:"m 110,65 -20,0 0,15 20,0 z m -10,-10 -10,10 20,0 z"},i["ST.M1.IED"]=l("IED"),i["ST.M1.INCIDENT"]=l("INC"),i["ST.M1.INFILTRATION"]=l("INFL"),i["ST.M1.KIDNAPPING"]=l("K"),i["ST.M1.LABRATORY"]=l("LAB"),i["ST.M1.LEADER"]=l("LDR"),i["ST.M1.LOOT"]=l("LOOT"),i["ST.M1.MEETING"]=l("MTG"),i["ST.M1.MURDER"]=l("MU"),i["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]=l("NGO"),i["ST.M1.OTHER"]=l("OTH"),i["ST.M1.PIRACY"]=l("PI"),i["ST.M1.PREMATURE"]=l("P"),i["ST.M1.RAID"]=l("RAID"),i["ST.M1.RAPE"]=l("RA"),i["ST.M1.RELIGIOUS"]=l("REL"),i["ST.M1.SPEAKER"]=l("SPK"),i["ST.M1.TARGETED"]=l("TGT"),i["ST.M1.TERRORIST"]=l("TER"),i["ST.M1.TRAFFICKING"]=l("TFK"),i["ST.M1.WILLING RECRUIT"]=l("WR"),i["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]=i["ST.M1.WILLING"]=l("W"),i["ST.M1.FALSE"]=l("FAL"),i["ST.M1.FIND"]=l("FND"),i["ST.M1.FOUND AND CLEARED"]=l("CLR"),i["ST.M1.HOAX (DECOY)"]={type:"path",d:"M 90,75 80,67.5 90,60 90,75 Z m 15,0 -10,-7.5 10,-7.5 0,15 z m 15,0 -10,-7.5 10,-7.5 0,15 z"},i["ST.M1.ATTEMPTED"]=l("ATT"),i["ST.M1.ACCIDENT"]=l("ACC"),i["ST.M1.INCIDENT"]=l("INC"),i["ST.M1.THEFT"]=l("THF"),i["ST.M1.PIRATE"]=[{type:"circle",cx:100,cy:60,r:7,fill:!1},{type:"path",fill:!1,d:"m 82.5,75 35,-15 m 0,15 -35,-15 m 3,7 5,10 m 27,-10 -10,10"}],i["ST.M2.LEADER OR LEADERSHIP"]=r("LDR"),i["ST.M2.RELIGIOUS"]=r("REL"),i["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]=[{type:"path",stroke:!1,d:"m 98.7,66.7 c -3.2,0.7 -6.3,3.7 -6.4,7 0.3,3.6 5.3,2.8 7,0.6 2,-1.2 1.7,-4.5 4.5,-3.7 2.6,-0.6 3.2,3.2 5.9,3.2 1.6,1.5 4.4,-0.6 5.4,1.2 0.7,1.1 1.5,2.2 2.2,3.3 -2,3.1 -1.3,7.9 1.9,10 3.5,1.1 4.8,-3.5 4.1,-6.2 -0.2,-3 -2.5,-5 -5.1,-5.4 -1.5,-1.9 -2.7,-3.4 -1.6,-5.6 -1,-3.3 -5.1,-4.5 -8.2,-4.3 -2.2,0.3 -2.9,2.6 -5.3,1.9 -1.9,0.4 -1.9,-2.8 -4.3,-2 z m 0.2,1.3 c 2.7,0.5 0.9,0.6 -0.6,1.3 -0.5,2.2 3.8,0.4 1.4,2.9 -0.9,1.9 -5.8,4.7 -5.9,1.1 0.1,-2.5 2.7,-4.8 5.1,-5.2 z m 10.3,0.1 c 2.4,-0.5 7.1,2.3 5.6,3.7 -0.8,-2.1 -3,0 -1.2,1.2 -1.7,0.9 -7.4,-1.6 -5.7,-2.4 2.5,0.8 2.8,-2.7 -0,-1.9 -1.4,0.2 1.1,-0.8 1.3,-0.6 z M 81.9,71.6 c -1.8,1.9 -3.6,3.9 -5.5,5.8 -7.5,-0.1 -14,6.2 -15.7,13.2 -0.6,4.2 0.5,8.5 2.8,12 0.7,3.9 -3.2,6.7 -3,10.7 -0.8,7.4 4.8,14.5 11.7,16.8 2.3,-0.4 1.3,1.3 1.4,2 1.5,-0.4 3,-0.8 4.6,-1.2 -0.2,1.5 -0.1,2.7 1.4,1.2 0.9,-0.3 2.3,-2.2 2.9,-1.5 0.2,2.2 1.2,0.1 2,-0.7 0.8,-1.2 1.6,-2.3 2.4,-0.5 1.2,-2.4 4.1,-7.2 -0.8,-7.3 -3.4,2.3 -7.5,4.6 -11.8,3.5 -6.3,-1.5 -10.9,-8.8 -8.2,-14.9 0.4,-3.9 6.8,-3.4 5,-8.2 -1.8,-2.6 -5.7,-2.9 -5.7,-7 -1.5,-7.3 5.6,-14.7 13,-13.7 4.7,0.5 7.4,4.9 10.8,7.6 1.9,1.9 4.1,5.1 5.9,1.4 2.8,-2 4.3,-4.7 1.8,-7.6 C 94.8,79.7 90.9,77.3 88,74.4 86.3,72.9 83.9,72.6 81.9,71.6 z m 3.3,3.8 c 1.6,1.1 2.9,2.1 0.3,3.3 -0.9,3.7 -5.1,-0.5 -1.5,-1.5 0.4,-0.6 0.9,-1.1 1.2,-1.8 z m 34.2,3.1 c 3,1.4 3.9,6.4 1.4,8.8 -2.9,0.1 -3.6,-4.3 -3.1,-6.6 0.1,-2.9 2.5,2.7 2.5,-0.7 -0.2,-0.5 -0.5,-1 -0.8,-1.4 z M 127.3,90.2 c -4.3,0.4 -8.8,-0 -13.1,1 -2.1,1.1 -5.7,1.5 -4.6,4.5 0.1,1.8 0.2,3.6 0.4,5.4 -4.9,4.9 -5.5,13.3 -2.2,19.2 2.4,4.3 7,7 11.8,7.8 3.3,4.9 7.3,-1.3 11.2,-1.7 5.5,-2.5 8.9,-8.5 8.5,-14.5 0.2,-5 -2.4,-10.1 -6.7,-12.8 -0.1,-2.3 -0.2,-4.6 -0.3,-6.9 -1.6,-0.8 -3.4,-1.4 -5.1,-2.1 z M 127.8,92.5 c -0.9,1.7 0.6,3.8 -0.9,4.9 -2.3,0.7 -1.7,-2.4 -1.9,-3.8 -0.6,-1.7 1.9,-0.7 2.8,-1 z m -2.9,8.3 c 4.1,0.9 8,3.7 9.3,7.9 0.9,3.7 0.5,8 -2.3,10.9 -1.7,2 -5.3,4.3 -7.7,3.1 -3.1,-0.8 -5.8,2.1 -8.6,-0.5 -6.9,-4.2 -7.2,-16 0.2,-19.8 2.7,-1.6 6,-1.6 9.1,-1.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 85.1 75.3 C 85 75.8 84.2 76.7 83.9 77.1 C 83.6 77.6 82.4 77.9 82.4 78.6 L 82.4 79 C 82.4 79.4 83.3 80.1 83.6 80.1 L 83.8 80.1 C 84.8 80.1 85 79.1 85.4 78.6 C 85.7 78.2 86.7 77.4 87.2 77 L 85.1 75.3 z M 127.8 92.5 L 125 92.7 L 125.2 96.5 C 125.3 97.5 125.9 97.3 126.5 97.6 C 127.1 97.3 127.8 97.1 127.8 96.3 C 127.8 95.8 127.7 95.6 127.5 95.3 L 127.8 92.5 z"}],i["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]={type:"path",stroke:!1,d:"m 110.6,142.4 0,-28.6 -7.1,0 0,28.6 z m -21.2,0 7.1,0 0,-28.6 -7.1,0 z m 7.1,-28.6 h 7.1 v -11.8 h 24.4 V 77.2 h -6.3 v 18.6 h -18 v -10.7 c 0,-0.9 2.1,-1.2 3,-1.7 0.8,-0.4 2.1,-1.4 2.7,-2 1.5,-1.4 3.2,-3.6 3.8,-5.9 1.6,-6.3 -0.2,-10.6 -3.8,-14.1 -3,-3.1 -9.2,-4.9 -14.3,-2.7 -3.6,1.6 -8.4,6.2 -8.4,11 v 3.2 c 0,2.8 1.9,6.2 3.3,7.7 1,1 1.8,1.7 3,2.5 1,0.6 3.6,1.3 3.6,2.2 v 10.7 H 78.4 v -18.6 h -6.3 v 24.9 h 24.4 v 11.8 h -0 z"},i["AC.IC.SHOOTING"]={type:"path",stroke:!1,d:"m 93.2,89.7 h 16.8 v 9.3 c -2.6,0 -7.3,1.6 -9,1 -2.3,-0.8 -5.4,-2 -7.8,-2.6 v -7.8 l 0,0 z m -30,0 h 26.1 v 9.6 c 0,0.9 4.1,2 5,2.3 1.9,0.6 3.6,1.4 5.5,2 2,0.7 3.4,0.4 6,-0.1 1.6,-0.3 5.7,-0.4 6.6,-0.9 0.6,2.7 4.6,14 4.6,15.2 0,1.6 -1.2,4 -1.3,5.7 l 21.5,0 -8.2,-25.9 7.8,-7.7 c -0.8,-1.6 -4.1,-13.4 -5.2,-13.4 h -68.4 v 13.2 l 0,0 z"},i["AC.IC.FIRE EVENT"]={type:"path",stroke:!1,d:"m 96.5,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.2,1.6 -2.4,3.3 -3.6,5 -1,1.4 -3.1,3.5 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.8,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.6 0.2,9 0.6,2.8 1.4,5 2.5,7.3 0.6,1.2 3,5.5 3.1,6.5 -2.2,-0.5 -7,-4.6 -8.6,-6.2 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.2,8.6 2.4,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.8,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.8 v -1.3 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.9,4.6 -1.4,2.1 -5.2,6.3 -7.8,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 h -0.6 c -0.3,3.9 -1.6,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.3 c 0,-5.1 3,-8.9 3,-12.8 v -0.8 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.2 -3.6,-6.2 v -1.9 l 0,0 z"},i["AC.IC.NON-REsIdENTIAL FIRE"]={type:"path",stroke:!1,d:"m 121.2,122.3 -6.2,0 0,5.9 6.2,0 z m -12.1,0 -6.1,0 0,5.9 6.1,0 z m -12.2,0 -5.9,0 0,5.9 5.9,0 z m -12.3,0 -5.7,0 0,5.9 5.7,0 z m 30.4,-4.8 h 6.1 v -6.2 h -2.5 c -1.2,0 -2.5,1.5 -3.6,1.8 v 4.4 z m -5.9,-6.2 -6.1,0 0,6.2 6.1,0 z m -12.2,0 -5.9,0 0,6.2 5.9,0 z m -12.3,0 -5.7,0 0,6.2 5.7,0 z m 25,-33.4 c 0,-3.4 3.4,-7.4 3.4,-9.1 0,-1.4 -0.8,-4.2 -1.8,-4.6 0,7.1 -8.6,12.8 -8.6,15.7 v 0.4 c 0,0.7 1.9,5.2 2.3,6.6 0.4,1.7 1.4,5.6 1.6,7.3 -6.2,-0.1 -7.3,-9.8 -10.3,-11.8 l -0.3,3 0,4.6 c 0,4.7 3.4,11.4 5.6,13.9 1,1.1 4.2,3.7 5.5,4.3 0.8,0.4 6.3,3 6.6,3 1.4,0 9.2,-7.2 10.5,-8.6 2.5,-2.5 4,-9.6 4,-14.8 v -0.7 l -0.7,-5.7 c -1,0.6 -2.1,5.6 -2.8,7 -1.5,3.2 -1.8,3.1 -5.4,4 -0.3,-12.2 6.7,-8.3 -2.7,-19.1 0,4.9 -0.9,7.9 -4.1,9.6 -1.4,-0.7 -3,-2.7 -3,-4.8 z m -14.8,26.4 h 3.6 c -0.1,-0.6 -0.3,-1.4 -1.1,-1.4 h -1.2 v -2.7 c 0,-0.9 -0.9,-2.4 -1.4,-3 v 7 z m -16.4,-28.6 h 3.9 v 28.6 h 8.9 v -28.6 h 3.6 v 5.4 c 0.3,-0.2 1.4,-1.4 1.4,-1.8 v -5 h -6.4 v 28.6 h -6.4 v -28.6 h -6.1 v 28.6 h -5.2 v 32.7 h 54.8 v -30.7 c -0.4,0.2 -1.1,1 -1.1,1.6 v 27.5 h -52.5 v -29.8 h 5.2 v -28.6 h -0 z"},i["AC.IC.REsIdENTIAL FIRE"]={type:"path",stroke:!1,d:"m 91.5,88.3 -0.7,-3 -30.1,25.2 15.6,0.1 v 25.6 h 50.5 v -25.6 h 12.4 c -0.4,-0.5 -7.6,-5.9 -8,-5.9 -0.3,0 -1.2,1.6 -1.4,1.9 l 1.4,1.4 h -2.4 c -0.7,0.5 -4.9,3.1 -4.9,3.8 v 22.3 h -18.3 v -12.9 h -8.7 v 12.9 h -18.1 v -23.5 h 22.6 l -2.2,-2.7 -30.7,-0.1 L 91.5,88.3 z m 27.6,28 -8.2,0 0,8.5 8.2,0 z m -27,0.2 -8.7,0 0,8.2 8.7,0 z m 11,-36.4 c 0,0.9 2.1,5.3 2.5,6.9 0.4,1.8 1.5,6.1 1.5,7.8 -7.1,-1.6 -6.9,-9.9 -10.3,-12.2 -1.7,7.5 0.8,15.1 3.7,19.5 2.4,3.6 2.6,3.4 6,6 0.4,0.4 7.9,4.3 7.9,4.3 2,0 9.6,-7.1 11.1,-8.6 1.8,-1.8 5.6,-10.8 5.6,-14.4 V 83.5 c 0,-1.9 -0.3,-3.2 -1.4,-4 0,2 -1.8,7 -2.6,8.4 -0.8,1.8 -4.3,4.2 -6.3,4.7 v -1.7 c 0,-4.4 2.4,-6.8 2.4,-10.1 0,-2 -4,-7.2 -5.2,-8 0,5.4 -0.7,8 -4.2,9.8 -1.2,-0.7 -3.1,-2.6 -3.1,-4.4 v -1 c 0,-1.5 1.8,-5.4 2.5,-6.6 2,-3.9 0.5,-3.8 -0.4,-7 h -0.4 c -1.3,5.5 -0.8,4.8 -3.8,8.9 -1,1.4 -5.4,5.9 -5.4,7.5 z"},i["AC.IC.SCHOOL FIRE"]={type:"path",stroke:!1,d:"m 131.3,73 c -4,-1 -17,-7.2 -19.8,-7.2 h -2.4 V 96 h -0.7 c 0,5.6 -3.8,15.3 -6.2,18.6 -2,2.7 -3.7,4.1 -6.2,6.2 -0.8,0.6 -7,4.9 -7,5.4 v 8 h 44.1 V 96 h -20.4 l 0,-14.8 18.8,-8.2 z m -49.2,11.8 c 0,-3 3.6,-8 3.6,-10 0,-1.8 -0.8,-3.9 -2,-4.6 -0.4,0.8 -0.4,3.6 -0.9,5 -0.3,0.7 -1.8,2.7 -2.3,3.5 -1.6,2.3 -3.4,4.2 -5.1,6.4 -2.2,2.8 0,5 1.1,8.2 0.8,2.2 1.4,7.9 2.1,9.4 C 71.9,102.4 70.6,91.8 67.6,89.9 l -0.6,7.6 0.1,0.2 c 0,5 3.6,12.3 5.9,15 1.1,1.3 4.3,3.6 5.9,4.6 1.1,0.7 2.5,1 3.7,1.6 0.4,0.2 3.2,1.9 3.2,1.9 2.1,0 9.9,-7.4 11.5,-9 1.8,-1.8 5.8,-11 5.8,-14.4 v -6.3 c 0,-2.1 -0.4,-2.6 -0.7,-4.2 h -0.8 c -0.2,1.9 -2.2,7.1 -3,8.7 -0.7,1.3 -6.3,5.7 -6.3,3.7 v -1.2 c 0,-3.8 2.4,-7.2 2.4,-10 v -0.8 c 0,-1.5 -4.3,-6.8 -5.4,-7.6 0,2.5 0.1,4.8 -0.8,6.5 -0.5,0.9 -2.5,3.5 -3.6,3.5 -1.1,0 -3.2,-3.4 -3.2,-5.1 z"},i["AC.IC.HOT SPOT"]=[{type:"path",stroke:!1,d:"m 96.3,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.3,1.6 -2.3,3.3 -3.6,4.9 -1,1.3 -3.1,3.4 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.7,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.7 0.3,9 0.6,2.8 1.3,5 2.5,7.3 0.6,1.2 3.1,5.5 3.1,6.5 -2.2,-0.5 -7.1,-4.6 -8.6,-6.1 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.1,8.7 2.5,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.9,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.7 V 99.9 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.8,4.6 -1.4,2.1 -5.2,6.3 -7.9,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 -0.7,8e-4 c -0.3,3.9 -1.7,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.4 c 0,-5.1 3,-8.9 3,-12.8 V 82.6 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.1 -3.6,-6.2 v -1.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 113,126.9 c 0,6.3 -5.1,11.4 -11.4,11.4 -6.3,0 -11.4,-5.1 -11.4,-11.4 0,-6.3 5.1,-11.4 11.4,-11.4 6.3,0 11.4,5.1 11.4,11.4 z"}],i["AC.IC.FIRE ORIGIN"]=[{type:"path",stroke:!1,d:"m 96.3,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.3,1.6 -2.3,3.3 -3.6,4.9 -1,1.3 -3.1,3.4 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.7,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.7 0.3,9 0.6,2.8 1.3,5 2.5,7.3 0.6,1.2 3.1,5.5 3.1,6.5 -2.2,-0.5 -7.1,-4.6 -8.6,-6.1 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.1,8.7 2.5,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.9,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.7 V 99.9 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.8,4.6 -1.4,2.1 -5.2,6.3 -7.9,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 -0.7,8e-4 c -0.3,3.9 -1.7,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.4 c 0,-5.1 3,-8.9 3,-12.8 V 82.6 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.1 -3.6,-6.2 v -1.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 99.6 105.9 C 93.3 105.9 88.2 111 88.2 117.3 C 88.2 123.6 93.3 128.7 99.6 128.7 C 105.9 128.7 111 123.6 111 117.3 C 111 111 105.9 105.9 99.6 105.9 z M 105 109.4 L 106.8 111 L 101.2 117.1 L 107.3 123.2 L 105.6 124.9 L 99.5 118.8 L 93.7 125.3 L 91.9 123.6 L 97.8 117.2 L 92.1 111.4 L 93.8 109.8 L 99.5 115.4 L 105 109.4 z"}],i["AC.IC.SMOKE"]=[{type:"path",stroke:!1,d:"m 99.3,69.2 c 0.2,-2.6 4.4,-5.5 7.2,-6 4.2,-0.8 6.9,1.2 9.1,3.3 1.1,1.1 1.9,2.7 2.4,4.3 0.6,2.2 1.9,1.3 4,2.5 2.4,1.4 4.9,4.4 5.6,7.4 5.3,0 10.3,4.8 10.3,9.9 v 1.3 c 0,3 -1.2,4.9 -2.8,6.5 -1.1,1.1 -1.2,1.2 -2.6,2.1 -1.3,0.8 -2.5,0.6 -2.7,2 -0.6,4.6 -4.2,9 -9.4,9 3.3,5 2.3,8.7 -0.6,13 0,4.8 -0.2,6.2 -2.8,8.8 -2.4,2.5 -4.5,2.4 -8.6,2.4 0.7,-1 1.2,-1 2,-2.4 0.6,-1.1 0.8,-1.7 1.4,-2.9 1,-2.2 1.8,-3.7 1.8,-6.8 v -2.1 c 0,-1.4 -0.2,-2.4 -0.8,-3.2 -1.2,5.2 -1.4,6.4 -5.7,8.6 0,-8.3 3.8,-6.8 -1.9,-13.4 0,3.8 -0.2,5.6 -2.7,6.9 -0.8,-0.5 -2.1,-1.7 -2.1,-2.9 v -0.4 c 0,-2 2.5,-5.2 2.5,-6.7 v -0.4 c 0,-1.1 -0.4,-2.1 -1,-2.5 0,2.9 -3.4,7.6 -4.9,9.2 -1.6,1.7 -1.1,2.8 -0.2,5 0.7,1.7 1.1,3.5 1.1,5.8 v 1 c -3.2,-0.3 -4.4,-6.2 -6.1,-8.2 0,3.4 -0.8,6.3 0.4,9.4 0.8,1.9 2.4,5.6 4.4,6.1 v 0.4 l -3.4,0.6 -0.2,-0.1 c -3.4,0 -6.4,-2.4 -7.8,-4.4 -0.8,-1.1 -1.5,-2.7 -1.7,-4.4 -0.3,-2.3 0.6,-3.6 0.6,-5 0,0 -5.1,-4.7 -4.4,-9 l 0.2,-1.7 c -0.4,-0.5 -1.4,-1.4 -2,-2.2 -0.6,-0.8 -1.1,-1.8 -1.6,-2.6 -1.4,0 -2,0.6 -3.2,0.6 h -0.6 c -5.4,0 -10.5,-5.2 -10.5,-10.5 v -0.8 c 0,-4.9 4.1,-9.2 9,-9.2 h 2.1 c 0.8,-3.2 5.7,-6.9 10.1,-5.9 -0.4,-1.5 -1,-2.7 -1,-4.8 v -0.4 c 0,-3.8 3.2,-7.8 6.1,-8.8 1.9,-0.7 3.9,-1 6.1,-0.4 2.3,0.6 3.7,2.2 4.8,2.5 l 0,0 z m -0.4,-1.9 c -1.3,-0.1 -2.9,-2.1 -5.9,-2.1 h -1.9 c -5,0 -10.6,5.8 -10,11.4 l 0.5,3.4 h -0.6 c -4.3,0 -7.1,3.2 -8.6,6.1 -2.3,-1.1 -6.8,1.2 -7.9,2.4 -1.6,1.6 -3.6,4.2 -3.6,7.3 v 1.5 c 0,3.6 2.4,7.3 4.5,8.9 1.8,1.3 2,1.6 4.4,2.4 2.7,0.9 3.7,0.1 5.9,0.2 l 3.1,3.7 c -0.6,1.3 0.4,4.9 0.9,6 0.5,1.2 0.7,1.4 1.4,2.4 0.2,0.4 1.7,2 1.7,2 0,1.1 -0.4,1.4 -0.4,2.7 v 0.2 c 0,6.3 4.8,12 10.7,12 2.1,0 3.6,-0.4 5,-1 2.6,1.4 7.1,3 9.2,-0.1 l 3.4,0.5 c 2.7,0.4 6.8,-2.2 7.9,-3.6 1,-1.4 3.7,-6 2.4,-8.8 1.1,-0.7 2.6,-3.7 2.7,-5.5 0.1,-1.7 0.2,-1.8 -0.1,-3.6 -0.2,-1.4 -0.9,-2.2 -1,-3.2 4,-0.3 8.4,-5.2 8.4,-9.7 2.5,-1.6 3.4,-1.2 5.6,-3.8 1.3,-1.4 2.6,-4.4 2.6,-7 0,-6.3 -4.7,-12 -10.7,-12 -0.9,-4 -4.8,-8.3 -9.2,-8.6 -0.4,-4.4 -5.7,-9.4 -10.7,-9.4 -4.1,-0 -8.9,2.7 -9.6,5.6 l 0,0 z m 15.8,38.4 c 0.5,0 1,0.1 1,-0.4 0,-3.1 -4.1,-6.7 -7.6,-6.7 h -1.9 c -0.6,0 -1,0.8 -0.6,1 0.4,0.2 1.6,0.1 2,0.1 1.2,0 2.6,0.5 3.4,1 2.1,1.6 2.8,2.1 3.5,5.1 z m -34.5,-12.6 v 1.7 c 0,1.4 0.6,2.2 0.6,3.2 0,0 -3.6,3.4 -3.8,5.4 l 0.6,0.2 c 1,-0.6 1.6,-2.6 3,-4 1,-0.9 3.1,-2.2 4.8,-2.2 h 0.6 c 1.3,0 3.6,1 3.6,-0.2 0,-0.9 -2.6,-1 -3.6,-1 h -0.2 c -1.6,0 -3,0.6 -4,1.3 -0.1,-1 -0.6,-1.9 -0.6,-3.2 0,-4.6 3.7,-8.6 8.4,-8.6 h 1 c 1,0 1.5,0.2 2.3,0.4 0.1,-0.2 0.4,-0.6 0.4,-0.7 0,-0.7 -1.8,-1 -2.5,-1 h -1.5 c -4.5,-8e-4 -9.2,4.4 -9.2,8.6 z m 19.1,-15.8 0.6,0.6 c 1.6,-0.9 3.4,-2.3 5.9,-2.3 h 1 c 5.5,0 10.1,4.4 10.1,9.7 v 0.6 c -1.5,-0 -2.6,-0.8 -4.6,-0.8 h -1 c -1.5,0 -4.1,0.3 -4.2,1.7 0.6,0.1 0.4,0.2 0.8,0.2 0.9,0 1.4,-0.6 3,-0.6 h 2.3 c 2.2,0 5.6,1.8 6.6,3.1 2,2.6 1.8,3.7 2.6,7.2 0.5,0 1,0.1 1,-0.4 0,-4 -2.6,-8.1 -5.2,-9.4 0,-6.9 -4.5,-12.4 -11.1,-12.4 h -1.3 c -2.3,0 -5.6,1.6 -6.5,2.9 z"}],i["AC.IC.SPECIAL NEEDS FIRE"]=[{type:"path",stroke:!1,d:"m 75.3,133.9 h 49.4 v -28.9 c -0.6,0.4 -2.4,1.2 -2.4,2 v 24.8 H 77.4 v -30 h -2.2 v 32.1 l 0,0 z M 93,129.1 h 2 c 4.2,0 7.6,-2.4 9.3,-5 l -1.3,-3.5 c -1.2,0.3 -2.1,5.2 -8.6,5.2 h -0.8 c -3.4,0 -6.3,-3.3 -7.2,-6 -0.6,-1.7 -0.6,-3.6 0,-5.4 0.8,-2.5 1.6,-2.4 2.6,-4 l -0.4,-3.4 c -3.2,0.8 -7.1,8 -5.7,12.8 1.2,4.1 5.4,9.2 10.2,9.2 z M 88.9,97.9 v 0.4 c 0,0.8 0.5,1.4 0.8,2 l 1.4,14.7 11.3,0 4.3,10.2 6.2,-2 -1,-3 -3.5,1 C 108,119.9 104.8,111.7 104,111.7 H 94.1 C 94,111 93.8,110.9 93.8,110.1 v -1.1 h 7.6 v -2.4 h -8 l -0.2,-3.7 v -2.2 c 3.4,-0.8 2.7,-6.2 -1.1,-6.2 -1.8,0 -3.2,1.4 -3.2,3.2 z m 19.9,-7.4 v 1 l -0.4,0.3 C 105.1,89.7 101,86.1 101,80.8 99.6,81.7 98.8,84.8 98.8,87.1 v 1.1 c 0,4.5 3,10.7 5,13.3 2.8,3.7 7.4,4.8 11.6,7 1.6,-0.8 9.3,-5.4 10,-6.3 1.3,-1.7 4.2,-9.8 4.2,-12.4 0,-1.9 -0.3,-8.2 -1.3,-8.8 -0.7,2.7 -0.8,4.7 -2.3,6.8 -1,1.4 -3.3,3.5 -5,4 l -0.2,-2.4 v -0.2 c 0,-3 2,-5.4 2,-8.8 0,-1 -3.4,-6.1 -4.1,-6.2 0,1.8 -0.2,4.1 -0.6,5.4 -0.3,1 -1.9,3.4 -2.9,3.4 h -0.6 c -0.4,-1.4 -1.9,-1.7 -1.9,-4.8 V 76.9 c 0,-2.3 2.6,-5.5 2.6,-7.8 l 0,-0.6 -0.3,-2.4 c -1,0.2 -1,1.9 -1.4,2.9 -0.4,1 -1,2 -1.6,2.9 -1.3,1.7 -2.6,3.4 -3.9,5.1 -2,2.8 -2.1,2.7 -1,6.1 0.6,2 1.7,4.8 1.7,7.4 z m 24.3,10.2 -3.3,-2 -1.2,1.9 3.5,2 z m -66.2,0 1,1.9 c 5,-2.7 11,-6.9 16,-10.1 2.7,-1.7 5.2,-3.4 7.8,-5.1 1.4,-0.9 2.6,-1.6 3.9,-2.6 1.8,-1.2 1.9,-1.9 2.4,-4.3 l -31.2,20.2 z"}],i["AC.IC.WILD FIRE"]=[{type:"path",stroke:!1,d:"m 110.8,139.5 c 0.2,-0.5 6.5,-6.2 7.4,-7 2.6,-2.6 5.6,-5.2 7.8,-8.1 3.9,-5.2 8,-15 8,-24 v -6.9 c 0,-1 0,-2.2 -0.8,-2.4 -0.8,3.4 -3.3,7.7 -5.1,10.1 -0.5,0.6 -7.9,8.7 -7.9,6.2 0,-4.7 2.5,-8.4 2.9,-13.4 0.2,-2.9 -0.8,-11.4 -1.4,-14.3 -0.9,0.7 -1.2,4.2 -1.7,5.7 -0.6,1.7 -1.2,3.6 -2.1,5 -0.7,1.1 -6.1,7.2 -7,7.2 -0.7,0 -1.6,-2.9 -1.6,-4.1 0,-4.7 3.3,-9.7 3.3,-13.4 v -0.6 c 0,-2.4 -1.9,-3.6 -3,-5.6 -0.6,-1 -2.7,-4.7 -3.7,-4.8 v 2.9 c 0,2.2 -0.5,5.6 -1.3,7.1 -0.4,0.8 -3.2,4.1 -4,4.1 -1,0 -3.9,-3.9 -3.9,-5.7 v -3.5 c 0,-4.1 4.1,-8.6 4.1,-12.6 v -0.2 c 0,-1.5 -0,-4 -1.4,-4.1 -0.7,8 -12.6,18.7 -12.6,21.8 0,4.4 3.9,9.2 3.9,15.9 v 2.2 c 0,0.7 -0.2,0.8 -0.2,1.4 -0.8,-0.2 -1.4,-1.3 -1.9,-2 -0.7,-0.8 -1.4,-1.1 -2.2,-1.7 -1.5,-1 -2.7,-2.3 -3.8,-3.7 -1.9,-2.5 -4.1,-6.7 -4.1,-10.9 -1.8,0.5 -3.3,6.3 -3.3,8.8 v 3.5 c 0,8.3 5.9,15.1 5.9,18.1 -3.2,-1.7 -6,-3.9 -8.5,-6.4 -1.2,-1.2 -5.5,-8.5 -6.2,-8.7 0,5.7 1.7,10.3 2.6,15.1 0.5,2.3 1.2,5.1 1.9,7.1 1,2.7 1.9,3.3 3.4,5.3 3,4 4.9,6 8.3,9.4 1.5,1.5 2.9,2.9 4.4,4.4 l 4.7,3.4 5.9,2.8 V 129.9 h -13 l 9.9,-11.5 -7.4,-0.1 9.8,-11.1 -6.6,-0.1 10.9,-17.3 0.1,-0.2 11.2,17.5 -6.1,-0 9.4,11 -7.6,0 10.1,11.7 -13.1,0.1 v 13 l 6,-3.4 z"}],i["AC.IC.HAZARDOUS MATERIALS INCIDENT"]=[{type:"path",stroke:!1,d:"m 60.7,100.6 78.5,-0 -39.3,39.2 -39.2,-39.2 z M 127.6,87.8 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 87.8 z M 115.3,75.5 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 75.5 z M 90.8,69.5 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 90.8 V 69.5 z m -12.2,12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 78.6 V 81.7 z m -6.3,6 0,12.2 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 30.8,-24.5 6.2,6.1 c -0.2,0.4 -0.1,-0.1 -0.1,0.4 V 100 h -6.1 V 63.3 z M 56.7,100 100,143.3 143.3,100 100,56.7 56.7,100 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 103.1,63.3 6.2,6.1 c -0.2,0.4 -0.1,-0.1 -0.1,0.4 V 100 h -6.1 V 63.3 z m -30.8,24.5 0,12.2 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 6.3,-6 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 78.6 V 81.7 z m 12.2,-12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 90.8 V 69.5 z m 24.5,6 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 75.5 z m 12.3,12.3 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 87.8 z m -66.9,12.8 78.5,-0 -39.3,39.2 -39.2,-39.2 z"}],i["AC.IC.CHEMICAL AGENT"]=[{type:"path",stroke:!1,d:"m 100.7,107.7 c -3.2,2e-5 -5.8,1 -7.6,3 -1.9,2 -2.8,4.7 -2.8,8.1 -2e-6,3.4 0.9,6.1 2.8,8.1 1.9,2 4.4,3 7.6,3 1.3,0 2.4,-0.2 3.6,-0.5 1.1,-0.3 2.2,-0.9 3.2,-1.5 l 0.1,-0.1 0,-0.1 0,-3 0,-0.5 -0.3,0.3 c -0.9,0.9 -1.9,1.5 -3,1.9 -1.1,0.4 -2.2,0.7 -3.4,0.7 -2.4,0 -4.1,-0.7 -5.3,-2.1 -1.2,-1.4 -1.9,-3.5 -1.9,-6.2 -4e-6,-2.7 0.6,-4.8 1.9,-6.2 1.2,-1.4 3,-2.1 5.3,-2.1 1.2,2e-5 2.3,0.2 3.4,0.6 1.1,0.4 2.1,1.1 3,1.9 l 0.3,0.3 0,-0.5 0,-3 -0.2,0 0.1,-0.2 c -1,-0.7 -2.1,-1.2 -3.2,-1.5 -1.1,-0.3 -2.3,-0.5 -3.6,-0.5 z M 92.7,64.2 h 14.7 v 33 c 0,8.2 12.9,9.6 12.4,21.8 -0.3,6.8 -7,18.6 -14.3,18.6 h -11 c -6.8,0 -14.6,-13.1 -14.3,-20 0.6,-10.6 12.4,-12.8 12.4,-20.4 v -33 z m -14.7,55 c 0,6.8 7.9,20.2 14.7,20.2 h 14.7 c 8.1,0 14.7,-13 14.7,-22 0,-11.8 -12.8,-13.6 -12.8,-22 V 60.6 H 90.8 V 95.4 c 0,7.8 -12.8,8.7 -12.8,23.9 l 0,0 z"},{type:"path",stroke:!1,fill:E.fillColor.Unknown,d:"m 92.7,64.2 0,33 c 0,7.6 -11.9,9.8 -12.4,20.4 C 79.9,124.5 87.7,137.6 94.5,137.6 l 11,0 c 7.2,0 14,-11.8 14.3,-18.6 0.5,-12.2 -12.4,-13.6 -12.4,-21.8 l 0,-33 -14.7,0 z M 100.7,107.7 c 1.3,2e-5 2.5,0.2 3.6,0.5 1.1,0.3 2.2,0.8 3.2,1.5 l -0.1,0.2 0.2,0 0,3 0,0.5 -0.3,-0.3 c -0.9,-0.9 -1.9,-1.5 -3,-1.9 -1.1,-0.4 -2.2,-0.6 -3.4,-0.6 -2.4,2e-5 -4.1,0.7 -5.3,2.1 -1.2,1.4 -1.9,3.5 -1.9,6.2 -4e-6,2.7 0.6,4.8 1.9,6.2 1.2,1.4 3,2.1 5.3,2.1 1.2,0 2.3,-0.2 3.4,-0.7 1.1,-0.4 2.1,-1.1 3,-1.9 l 0.3,-0.3 0,0.5 0,3 0,0.1 -0.1,0.1 c -1,0.7 -2.1,1.2 -3.2,1.5 -1.1,0.3 -2.3,0.5 -3.6,0.5 -3.2,0 -5.8,-1 -7.6,-3 -1.9,-2 -2.8,-4.7 -2.8,-8.1 -2e-6,-3.4 0.9,-6.1 2.8,-8.1 1.9,-2 4.4,-3 7.6,-3 z"}],i["AC.IC.CORROSIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 102.9,135.4 c 0.8,0 1.4,-0.8 1.4,-1.5 0,-0.7 -0.6,-1.5 -1.2,-1.5 H 102.3 c -0.5,0 -1.2,0.7 -1.2,1.4 v 0.3 c 0,0.8 0.6,1.4 1.4,1.4 H 102.9 z M 96.9,132.5 c 0,0.7 0.6,1.5 1.2,1.5 h 0.6 c 0.8,0 1.4,-0.8 1.4,-1.5 v -0.2 c 0,-0.7 -0.6,-1.5 -1.2,-1.5 H 98.1 c -0.6,0 -1.2,0.9 -1.2,1.5 v 0.2 z m 8.5,-0.9 c 1.3,0 2.2,-1.8 1.1,-2.8 -1,-1 -2.8,-0.2 -2.8,1.1 0,0.8 0.9,1.7 1.7,1.7 z m -6.2,-4.4 c 0,0.6 0.6,1.5 1.2,1.5 h 0.6 c 0.8,0 1.4,-0.6 1.4,-1.4 v -0.6 c 0,-0.5 -0.7,-1.2 -1.4,-1.2 h -0.3 c -0.8,0 -1.5,0.8 -1.5,1.6 z m -0.6,-4.1 c 0.6,0 1.2,-0.8 1.2,-1.5 0,-1 -0.7,-1.7 -1.7,-1.7 -0.6,0 -1.5,0.6 -1.5,1.2 v 0.6 c 0,0.7 0.7,1.4 1.2,1.4 h 0.8 V 123.1 z m 2.4,-2.7 c 0,0.6 0.7,1.5 1.2,1.5 h 0.8 c 0.4,0 1.2,-0.8 1.2,-1.2 v -0.8 c 0,-0.6 -0.8,-1.2 -1.5,-1.2 h -0.1 c -0.8,0 -1.5,0.8 -1.5,1.5 v 0.1 z m -2.7,-3.5 c 0.6,0 1.4,-0.8 1.4,-1.5 v -0.2 c 0,-2.2 -3.2,-1.8 -3.2,-0.3 v 0.8 c 0,0.7 1.1,1.2 1.8,1.2 z m 4.1,-3.6 c 0,2 3.3,1.9 3.2,-0.1 -0.1,-2.3 -3.2,-1.8 -3.2,-0.3 v 0.4 z m 4.7,-16.2 0,2.9 -3,-0.2 0.9,2.8 -1.1,0.1 -1.6,-0.9 -0.4,3 -1,-1.5 -3.3,1 -0.6,-3.2 -2,1.3 -0.6,-1.6 -2.5,0.4 1.5,-2.7 -0.6,-1.5 -22.2,0 0,12.4 59.2,0 0,-12.4 z M 94.3,85.2 v 1.4 c 0,4.4 2.1,8.7 5.7,9.4 3.7,0.8 7,-4.5 7,-8 v -1.5 c 0,-3 -2.1,-8.6 -3,-11.3 -0.5,-1.4 -3.1,-10.6 -3.9,-10.6 -0.8,0 -0.9,4.5 -1.1,5.4 -0.6,2.1 -0.9,3.2 -1.6,5.1 -0.8,2.3 -3.2,7.6 -3.2,10.1 l 0,0 z"}],i["AC.IC.HAZARDOUS WHEN WET"]=[{type:"path",stroke:!1,d:"m 60.6,100.5 78.8,-0 -39.4,39.4 L 60.6,100.5 z M 127.6,87.8 c 0.6,0.4 6.1,5.9 6.1,6.2 v 5.8 H 127.6 V 87.8 z M 115.3,75.5 c 0.6,0.4 6.1,5.9 6.1,6.2 v 18.1 h -6.1 V 75.5 z M 90.8,69.5 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 90.8 V 69.5 z M 78.6,81.7 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 78.6 V 81.7 z m -6.3,6 0,12.1 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 30.8,-24.5 6.2,6.1 c -0.2,0.4 -0.1,-0.2 -0.1,0.4 v 30 h -6.1 V 63.3 z M 56.7,100 100,143.3 143.3,100 100,56.7 56.7,100 z m 41.2,25.3 c 0.2,1 0.6,1.6 1.6,1.8 l -0.8,0.6 c -1.3,-0.6 -1.3,-0.1 -1.7,-1.9 l 0.9,-0.4 z m -2.4,-1 c 0,2.9 1.3,4.9 4.2,4.9 h 0.9 c 1.9,0 3,-1 3.6,-2.3 0.9,-1.8 0.6,-3.1 -0.2,-4.6 -0.8,-1.4 -1.6,-2.3 -2.2,-3.8 -0.5,-1.2 -0.8,-3.8 -1.7,-4.4 C 99.6,118.1 95.5,122.5 95.5,124.2 z m -12.6,-9.4 c 0.4,0.9 0.4,1.4 1.5,1.7 l -0.6,0.6 C 82.2,116.7 82.6,116.5 82,115.3 l 0.9,-0.5 z m 1.6,3.8 H 86 c 2.3,0 3.7,-2.2 3.7,-4.6 0,-1.2 -1.9,-3.9 -2.6,-4.9 -0.9,-1.4 -1.2,-4.7 -2.2,-5.4 -0.2,3 -2.3,5.9 -3.6,8 -1.9,2.9 -0.4,6.9 3.1,6.9 z m 28.4,-3.8 c 0.2,1.6 0.9,1.1 1.5,2 l -0.8,0.3 c -1,-0.2 -1.7,-0.8 -1.8,-1.9 L 112.9,114.8 z m 2,-11.1 c -0.3,3.6 -2.2,5.6 -3.6,8.1 -1.7,3.1 -0.3,6.8 3.2,6.8 h 1.3 c 2.2,0 3.7,-1.7 3.7,-3.9 v -0.9 c 0,-1.4 -1.9,-3.8 -2.6,-4.9 -0.9,-1.4 -0.7,-4.4 -2,-5.2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 112.9,114.8 c 0.2,1.6 0.9,1.1 1.5,2 l -0.8,0.3 c -1,-0.2 -1.7,-0.8 -1.8,-1.9 L 112.9,114.8 z m -30,0 c 0.4,0.9 0.4,1.4 1.5,1.7 l -0.6,0.6 C 82.2,116.7 82.6,116.5 82,115.3 l 0.9,-0.5 z m 15,10.4 c 0.2,1 0.6,1.6 1.6,1.8 l -0.8,0.6 c -1.3,-0.6 -1.3,-0.1 -1.7,-1.9 l 0.9,-0.4 z m 5.2,-62 6.2,6.1 c -0.2,0.4 -0.1,-0.2 -0.1,0.4 v 30 h -6.1 V 63.3 z m -30.8,24.5 0,12.1 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 6.3,-6 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 78.6 V 81.7 z m 12.2,-12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 90.8 V 69.5 z m 24.5,6 c 0.6,0.4 6.1,5.9 6.1,6.2 v 18.1 h -6.1 V 75.5 z m 12.4,12.3 c 0.6,0.4 6.1,5.9 6.1,6.2 v 5.8 H 127.6 V 87.8 z m 11.7,12.6 -78.8,0 39.4,39.4 L 139.4,100.4 z M 85,103.7 c 1,0.7 1.3,4 2.2,5.4 0.6,1 2.6,3.6 2.6,4.9 0,2.4 -1.4,4.6 -3.7,4.6 l -1.5,0 c -3.5,0 -5,-4 -3.1,-6.9 1.3,-2.1 3.4,-5 3.6,-8 z m 29.8,0 c 1.3,0.9 1.2,3.8 2,5.2 0.7,1.1 2.6,3.5 2.6,4.9 l 0,0.9 c 0,2.2 -1.6,3.9 -3.7,3.9 l -1.3,0 c -3.5,0 -4.9,-3.7 -3.2,-6.8 1.4,-2.5 3.4,-4.5 3.7,-8.1 z M 100,114.1 c 0.8,0.6 1.2,3.1 1.7,4.3 0.6,1.5 1.5,2.4 2.2,3.8 0.8,1.5 1.2,2.7 0.3,4.6 -0.6,1.3 -1.7,2.3 -3.6,2.3 l -0.9,0 c -2.8,0 -4.2,-2 -4.2,-4.9 0,-1.7 4.1,-6.1 4.5,-10.1 z"}],i["AC.IC.EXPLOSIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 96.5,104.6 0,0.2 -0.2,0 0,4 0,0.2 0.2,0 3.2,0 0.2,0 0,-0.2 0,-4 0,-0.2 -0.2,0 -3.2,0 z m 2.3,-20 c -1.1,2.4e-5 -2.2,0.1 -3.2,0.5 -1,0.3 -2,0.8 -3,1.4 l -0.1,0.1 0,0.1 0,3 0,0.4 0.3,-0.2 c 1,-0.7 2,-1.2 2.9,-1.6 0.9,-0.4 1.8,-0.5 2.6,-0.5 1.1,2.1e-5 2,0.3 2.6,0.8 0.7,0.5 1,1.2 1,2.1 -10e-6,0.5 -0.1,1 -0.4,1.4 -0.2,0.5 -0.7,1 -1.3,1.5 l -0,0 -1.4,1.4 c -1,0.9 -1.6,1.7 -1.9,2.5 -0.3,0.7 -0.5,1.6 -0.5,2.7 l 0,2.4 0,0.2 0.2,0 3,0 0,-0.2 0.2,0 0,-1.9 c -8e-6,-0.5 0,-1 0,-1.3 0,-0.3 0.1,-0.6 0.1,-0.8 0.1,-0.2 0.2,-0.5 0.4,-0.8 0.2,-0.3 0.5,-0.7 1,-1.1 l 1.4,-1.4 c 1,-0.9 1.6,-1.7 2,-2.5 0.4,-0.8 0.6,-1.6 0.6,-2.4 -2e-5,-1.7 -0.6,-3.1 -1.8,-4.2 -1.2,-1.1 -2.8,-1.6 -4.8,-1.6 z m 4.8,-31.1 -1.5,4.5 -4.3,12.9 -4.5,-7 -1.6,-2.5 -0.3,2.9 -1.3,14.4 -9.5,-10.7 -2.8,-3.2 1.1,4.1 3.4,12.9 -13.1,-0.7 -0.7,-0 -0.3,0.6 -0.1,0.2 -0.4,0.8 0.7,0.5 11.3,8.1 -20.1,1.4 -5.6,0.4 5.4,1.6 18,5.3 -12.3,7.1 -0.8,0.4 0.3,0.8 0.1,0.2 0.3,0.7 0.8,-0.1 16.1,-2 -4.8,8.3 -1.5,2.6 2.7,-1.1 8.8,-3.7 -3.4,14.5 -1.1,4.5 2.8,-3.7 8.9,-11.6 5,19.2 0.2,0.8 0.8,0 0.4,0 0.9,0 0.1,-1 0.9,-18.7 9.2,11.2 2.6,3.2 -0.9,-4 -3.3,-15.2 10.6,5.9 4.7,2.6 -3.4,-4.1 -5.5,-6.6 15.6,4.4 4,1.2 -3.1,-2.9 -10.7,-9.9 13.7,-2.1 4.6,-0.7 -4.5,-1.2 -15.5,-4.3 18.9,-9.6 4.7,-2.4 -5.2,0.5 -17.1,1.6 6.7,-10.8 2,-3.2 -3.3,1.8 -14.6,7.9 5.2,-16.5 1.7,-5.5 -3.5,4.5 -10.6,14 -1.7,-18.8 -0.4,-4.8 z m -1.1,9.7 1.5,16.6 0.2,2.6 1.6,-2 8.7,-11.5 -4.2,13.4 -0.8,2.4 2.2,-1.2 13.4,-7.3 -5.8,9.3 -1.1,1.7 2,-0.2 13.9,-1.3 -16.5,8.4 -2.3,1.2 2.5,0.7 13.5,3.7 -11.2,1.7 -2,0.3 1.5,1.4 9.1,8.4 -14.6,-4.2 -3.1,-0.9 2.1,2.5 4.2,5 -7.8,-4.3 -1.9,-1.1 0.5,2.2 2.9,13.3 -8.2,-10 -1.6,-2 -0.1,2.6 -0.8,16.1 -4.2,-16.3 -0.5,-2 -1.2,1.6 -7.3,9.5 2.8,-11.9 0.4,-1.9 -1.8,0.7 -7.9,3.3 4.3,-7.4 1,-1.7 -2,0.2 -13.9,1.7 10.3,-6 0.5,-0.3 0,-0.6 0,-0.3 0,-0.8 -0.7,-0.2 -14.5,-4.2 17.3,-1.2 2.8,-0.2 -2.3,-1.6 -11,-8 11.5,0.6 1.4,0.1 -0.3,-1.3 -2.7,-10.1 8.2,9.3 1.5,1.8 0.2,-2.3 1.3,-13.8 4,6.3 1.1,1.8 0.7,-2 3.4,-10.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 102.5 63.2 L 99 73.5 L 98.4 75.5 L 97.3 73.7 L 93.2 67.4 L 91.9 81.3 L 91.7 83.6 L 90.2 81.8 L 82 72.5 L 84.7 82.7 L 85.1 84 L 83.7 83.9 L 72.2 83.4 L 83.2 91.3 L 85.5 93 L 82.7 93.2 L 65.4 94.3 L 79.9 98.5 L 80.7 98.8 L 80.7 99.5 L 80.7 99.8 L 80.7 100.3 L 80.2 100.7 L 69.8 106.6 L 83.8 104.9 L 85.8 104.7 L 84.8 106.4 L 80.4 113.8 L 88.3 110.6 L 90.1 109.8 L 89.7 111.7 L 86.9 123.6 L 94.2 114.1 L 95.5 112.5 L 96 114.4 L 100.2 130.8 L 101 114.6 L 101.2 112 L 102.8 114 L 111 124 L 108.1 110.7 L 107.6 108.5 L 109.6 109.6 L 117.3 113.9 L 113.2 108.9 L 111.1 106.4 L 114.3 107.3 L 128.9 111.5 L 119.7 103.1 L 118.2 101.7 L 120.3 101.3 L 131.4 99.6 L 117.9 95.9 L 115.4 95.2 L 117.8 94 L 134.3 85.6 L 120.3 86.9 L 118.3 87.1 L 119.4 85.4 L 125.2 76.1 L 111.8 83.3 L 109.6 84.5 L 110.3 82.2 L 114.5 68.8 L 105.8 80.3 L 104.3 82.3 L 104 79.8 L 102.5 63.2 z M 98.8 84.5 C 100.8 84.5 102.4 85.1 103.6 86.1 C 104.8 87.2 105.5 88.6 105.5 90.3 C 105.5 91.2 105.3 92 104.9 92.7 C 104.5 93.5 103.8 94.3 102.8 95.2 L 101.5 96.6 C 101 97.1 100.6 97.4 100.4 97.7 C 100.2 98 100.1 98.2 100 98.5 C 100 98.7 99.9 98.9 99.9 99.2 C 99.8 99.5 99.8 100 99.8 100.5 L 99.8 102.4 L 99.7 102.4 L 99.7 102.7 L 96.6 102.7 L 96.4 102.7 L 96.4 102.4 L 96.4 100 C 96.4 98.9 96.6 98 96.9 97.3 C 97.2 96.6 97.9 95.8 98.8 94.8 L 100.2 93.4 C 100.8 92.9 101.2 92.4 101.5 91.9 C 101.7 91.4 101.9 91 101.9 90.5 C 101.9 89.6 101.5 88.9 100.9 88.3 C 100.2 87.8 99.4 87.5 98.3 87.5 C 97.5 87.5 96.6 87.7 95.7 88.1 C 94.8 88.5 93.8 89 92.8 89.7 L 92.5 89.9 L 92.5 89.5 L 92.5 86.5 L 92.5 86.4 L 92.6 86.3 C 93.6 85.7 94.6 85.3 95.6 85 C 96.7 84.7 97.7 84.5 98.8 84.5 z M 96.5 104.6 L 99.8 104.6 L 99.9 104.6 L 99.9 104.8 L 99.9 108.8 L 99.9 109 L 99.8 109 L 96.5 109 L 96.3 109 L 96.3 108.8 L 96.3 104.8 L 96.5 104.8 L 96.5 104.6 z"}],i["AC.IC.FLAMMABLE GAS"]=[{type:"path",stroke:!1,d:"m 93.3,82.5 c 0,-4.3 13.8,-4.3 13.8,0 v 55.6 c 0,1.3 -4.4,1.2 -5.9,1.2 h -2 c -1.5,0 -5.9,0.1 -5.9,-1.2 V 82.5 l 4e-4,0 z m 5.3,-20.6 h -6.5 v 2.9 h 6.3 v 3.2 h -3.7 v 2 h 3.7 v 5.3 h -4.6 v 4.5 c -1.1,0.3 -2,1.6 -2,3 v 54.8 c 0,3.3 3.7,3.2 7.1,3.2 h 2.4 c 3.4,0 7.1,0.2 7.1,-3.2 V 83.1 c 0,-2.8 -1.8,-2.8 -1.8,-3.7 v -4.1 h -4.7 v -10.4 h 6.3 v -3 h -6.7 v -2.5 h -2.9 v 2.5 l 0,0 z m 21.8,32.3 v 0.6 c 0,2.2 2.3,5.1 1.6,8.1 -1.3,-0.3 -3.1,-2 -3.8,-3 -0.3,-0.4 -0.9,-1.7 -1.2,-2.2 -0.4,-0.9 -0.4,-2.3 -0.7,-2.8 -1.1,0.8 -1.6,3.5 -1.6,5.5 v 0.2 c 0,3.2 2.4,7.5 3.8,9.6 2,3 6.3,3.3 8.4,5.1 1.6,-0.9 6.9,-3.7 7.7,-4.9 0.9,-1.2 3.2,-7.4 3,-9.6 l -0.7,-5.9 h -0.4 c -0,3.2 -2.7,7.6 -5.5,7.9 v -2 c 0,-1.7 1.4,-4 1.4,-6.1 v -0.2 c 0,-0.9 -2.4,-4.4 -3.2,-4.7 0,3.4 -0.3,5.5 -2.5,6.7 -0.8,-0.7 -1.8,-1.6 -1.8,-3.1 v -1.2 c 0,-2.1 2,-4.1 2,-6.1 0,-0.9 -0.1,-1.6 -0.6,-2 -0.9,3.8 -5.9,8.9 -5.9,10.2 z m -52.7,0 v 0.4 c 0,1.2 1.8,4.3 1.8,6.1 v 2.2 c -2.4,-0.2 -5.7,-5 -5.7,-8.1 -1.7,1.1 -1.5,4.3 -1.4,6.7 0.1,2.4 1.3,4.7 2.2,6.3 1.3,2.6 1.6,2.9 4,4.5 0.6,0.4 5.3,2.8 5.9,2.8 1.2,0 6.8,-3.9 7.5,-4.7 0.9,-1 3.3,-7.3 3.1,-9.1 l -0.6,-6.5 h -0.4 c -0.5,2.3 -0.3,3.3 -1.6,5 -0.6,0.8 -2.7,2.7 -3.8,2.8 0,-0.9 -0.2,-0.7 -0.2,-1.4 0,-1.8 1.4,-4.3 1.7,-6.6 0.1,-1 -2.6,-4.6 -3.3,-5 0.4,2 -0.8,6.5 -2.4,6.5 h -0.2 c -0.9,0 -1.8,-2.2 -1.8,-3.4 0,-3.9 2.6,-4.5 1.6,-8.8 -0,0 -2.2,4.5 -2.9,5.4 -0.6,0.6 -3.5,4.3 -3.5,4.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 93.3,82.5 c 0,-4.3 13.8,-4.3 13.8,0 v 55.6 c 0,1.3 -4.4,1.2 -5.9,1.2 h -2 c -1.5,0 -5.9,0.1 -5.9,-1.2 V 82.5 l 4e-4,0 z"}],i["AC.IC.FLAMMABLE LIQUID"]=[{type:"path",stroke:!1,d:"m 100.1,135.4 c -7.4,0 -11.3,-5.4 -13.1,-11.1 -2.1,-6.7 -2.4,-14.4 0.8,-20.2 5.9,-10.6 10.7,-21.6 11.9,-36.7 4,4.6 3.6,17.4 6.3,23.9 2.6,6.5 8.9,13.4 8.9,21 v 1.7 c 0,10 -4.5,21.3 -14.2,21.3 h -0.7 v 0 z m -0.6,1.7 h 1.9 c 10.1,0 15.4,-11.7 15.4,-21.9 v -3 c 0,-9.5 -7.7,-15.8 -9.9,-24.1 -2.4,-8.9 -1.7,-21.2 -9.1,-25.1 0,8.6 -1.3,16 -3.6,22.4 -1.2,3.3 -2.4,6.2 -3.6,9.5 -1.2,2.7 -3.1,5.8 -4.5,8.6 -1.4,2.7 -3,6.1 -2.6,10.5 0.4,4.4 0.6,7.6 1.8,11.3 2,5.9 6.7,11.9 14.3,11.9 z M 122,87 v 0.2 c 0,2.3 2.4,5.5 1.7,8.6 -1.3,-0.1 -3.5,-2.2 -4.1,-3.2 -0.5,-0.9 -0.9,-1.3 -1.2,-2.4 -0.3,-0.7 -0.6,-2.6 -0.8,-3 -1.2,0.9 -1.7,4 -1.7,6.1 0,3.2 2.6,8.4 4,10.4 1,1.3 2.5,2.3 4.1,3.1 0.6,0.3 4.8,2.4 5,2.4 0.9,0 7.6,-4.4 8.2,-5.1 0.9,-1.1 3.5,-8 3.3,-10.1 l -0.7,-6.8 h -0.4 c -0.1,3.5 -2.8,8.2 -5.9,8.4 0,0 0.3,-3.5 0.5,-4.4 0.3,-1.3 1,-2.9 1,-4.3 V 86.8 c 0,-1 -2.7,-4.6 -3.4,-5.1 0,3.7 -0.2,6 -2.7,7.2 -0.7,-0.6 -1.9,-1.7 -1.9,-3 v -1.4 c 0,-2.3 2.1,-4.7 2.1,-6.5 l 0,-0.2 -0.3,-1.9 c -1,0.2 -1.1,2 -1.5,2.9 -0.5,0.9 -1.2,1.9 -1.8,2.6 -0.9,1.2 -3.5,4.1 -3.5,5.7 z m -56.6,0 c 0,1.3 1.9,4.7 1.9,7 v 1.9 c -2.6,-0.2 -6.1,-5.2 -6.1,-8.6 -3.4,2.4 -0.7,11.4 0.9,14.1 1.5,2.6 1.8,3 4.4,4.7 0.4,0.3 6.1,3.1 6.2,3.1 1.3,0 4.1,-2.5 5.3,-3.2 2.5,-1.2 2.9,-1.7 4.2,-4.3 0.4,-0.9 1.6,-5.4 1.9,-6.6 0.4,-2.1 -0.5,-5.8 -0.5,-7.9 h -0.5 c -0.3,3.5 -2.9,8.4 -5.9,8.4 -0,-0.9 -0.2,-0.5 -0.2,-1.2 0,-2 1.5,-4.9 1.8,-7.1 0.2,-1.2 -2.7,-5.2 -3.5,-5.4 1,2.1 -1.1,6.1 -2.7,7 -0.9,-0.6 -1.9,-2.2 -1.9,-3.6 v -0.4 c 0,-3.7 2.7,-4.6 1.7,-9.1 -0.5,0.4 -0.8,2 -1.4,3 -0.7,1 -1,1.7 -1.8,2.7 -0.8,1 -3.6,4.2 -3.6,5.5 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 100.1,135.4 c -7.4,0 -11.3,-5.4 -13.1,-11.1 -2.1,-6.7 -2.4,-14.4 0.8,-20.2 5.9,-10.6 10.7,-21.6 11.9,-36.7 4,4.6 3.6,17.4 6.3,23.9 2.6,6.5 8.9,13.4 8.9,21 v 1.7 c 0,10 -4.5,21.3 -14.2,21.3 h -0.7 v 0 z"}],i["AC.IC.FLAMMABLE SOLID"]=[{type:"path",stroke:!1,d:"m 68.6,102 c 0,-2 1.9,-4.2 1.9,-6.3 v -1.5 c 0,-0.6 -0.1,-0.4 -0.4,-0.7 -0.8,3.7 -6.1,9.1 -6.1,10.4 0,1.6 1.9,4.6 1.9,8.2 -2.6,-0.2 -5.9,-4.9 -5.9,-8 -0.8,0.9 -1.5,2.6 -1.5,4.3 0,4.4 1.7,8.1 3.5,10.6 0.8,1.2 7,5.2 8.7,5.2 1.1,0 6.7,-3.7 7.3,-4.4 0.9,-1.2 3.2,-6.8 3.2,-8.6 0,-1.6 -0,-6.6 -0.9,-7.2 -1.1,4.8 -1.5,5.9 -5.4,8.1 0,-4.3 1.3,-5.7 1.3,-8.2 v -0.4 c 0,-0.1 -2.8,-4.4 -3,-4.6 0,2.4 -0.7,6.7 -2.6,6.7 -1,8e-4 -2,-2.4 -2,-3.7 z m 60.3,-0.4 c 0,-1.7 2.2,-4.5 2.2,-6.3 0,-0.7 -0.2,-1.6 -0.7,-1.9 -0.9,3.7 -5.9,8.9 -5.9,10.2 v 0.4 c 0,1.9 1.5,3.7 1.5,6.1 v 2.2 c -2.3,-0.6 -5.6,-4.9 -5.7,-8 -1,0.7 -1.5,3 -1.5,4.8 v 1.1 c 0,2.8 2.5,7.7 3.8,9.5 2,2.7 6.4,3.1 8.4,4.8 2.1,-1.1 3.1,-1.8 5.1,-2.9 2.6,-1.6 2.2,-1.5 3.5,-4.3 0.7,-1.4 1.7,-4.5 1.8,-6.2 0.1,-1.5 -0.1,-6.4 -0.9,-7 -0.8,3.5 -2.1,7.1 -5.4,8 -0,-0.7 -0.2,-0.7 -0.2,-1.5 v -0.2 c 0,-1.8 1.7,-4.9 1.5,-6.4 -0.1,-0.8 -2.5,-4.8 -3,-5.1 0,2.8 -0.5,6.7 -3,6.7 -0.4,-1.3 -1.5,-1 -1.5,-3.9 z m -35.6,1.9 v -20 l 20,-0.4 v 19.4 l -20,1 z m -13.9,-7.6 0,-16.8 10.8,4 v 19.8 c -1.2,-0.7 -10.9,-6.2 -10.9,-7 z m 1.5,-18.4 c 5.7,0 11.4,0 17.2,0 2.1,0 12.1,3.1 13.2,3.9 l -3.7,0.3 H 92.6 c -0.9,0 -11.1,-3.7 -11.7,-4.1 z m -3.5,-1.5 0,14.7 -0.3,6.7 c 2.2,1.2 5.3,3 7.5,4.5 1.9,1.2 5.5,4 8.1,4 7.6,0 15.3,-1.1 23.1,-1.1 l -0,-23.6 c -1,-0.5 -14.8,-5.4 -15.2,-5.4 l -3.9,-0.1 -19.3,0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 80.9,77.5 c 5.7,0 11.4,0 17.2,0 2.1,0 12.1,3.1 13.2,3.9 l -3.7,0.3 H 92.6 c -0.9,0 -11.1,-3.7 -11.7,-4.1 z m -1.5,18.4 0,-16.8 10.8,4 v 19.8 c -1.2,-0.7 -10.9,-6.2 -10.9,-7 z m 13.9,7.6 v -20 l 20,-0.4 v 19.4 l -20,1 z"}],i["AC.IC.NON-FLAMMABLE GAS"]=[{type:"path",stroke:!1,d:"m 92.7,81.3 c 0,-4.6 14.7,-4.6 14.7,0 v 59.4 c 0,1.4 -4.7,1.3 -6.3,1.3 h -2.1 c -1.6,0 -6.3,0.1 -6.3,-1.3 V 81.3 z m 5.7,-22 h -7 v 3.2 h 6.7 v 3.3 h -4 v 2.1 h 4 v 5.7 h -4.8 v 4.8 c -1.1,0.3 -2.1,1.7 -2.1,3.1 v 58.6 c 0,3.5 4,3.3 7.6,3.3 h 2.5 c 3.6,0 7.6,0.2 7.6,-3.3 V 81.9 c 0,-3 -1.9,-3 -1.9,-4 v -4.4 h -5 v -11.1 h 6.7 v -3.1 h -7.2 v -2.7 h -3.1 v 2.7 l -4e-4,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 92.7,81.3 c 0,-4.6 14.7,-4.6 14.7,0 v 59.4 c 0,1.4 -4.7,1.3 -6.3,1.3 h -2.1 c -1.6,0 -6.3,0.1 -6.3,-1.3 V 81.3 z"}],i["AC.IC.ORGANIC PEROXIDE"]=[{type:"path",stroke:!1,d:"m 132.1,128.2 v 6.2 l -36.6,2.2 v -6.7 l 0.6,0.1 36,-1.7 z m -63.8,-11.1 c 2.6,1.7 26.1,12.1 26.1,13.2 v 5.9 l -0.1,0.2 -26,-14.7 v -4.6 z m 61.1,10 c -4.7,0 -33,2.1 -34.6,1.5 -1.8,-0.7 -23.8,-11.4 -24.4,-12 3.8,0 7.5,0 11.3,0 2.9,0 8.8,-0.8 10,1.1 l -9,0.6 2.1,0.7 v 0.4 h -1.2 l -1.8,0.2 c 2,1.3 18.3,5.2 22.4,5.2 h 1.9 c 4.8,0 9.2,-1.3 13,-1.4 0.7,0 9.9,3.3 10.4,3.7 z m -25.4,-23.2 1.1,9.4 5.4,-6.8 -2.5,8.2 7.7,-4.3 -3.7,5.9 8.4,-0.8 -9.2,4.7 8.1,2.6 -14.4,1.7 c -3.3,0.2 -19,-3.7 -20.5,-4.8 l 10.3,-0.6 -6.2,-4.5 6.8,0.1 -1.7,-5.9 5.1,5.2 0.7,-7.5 2.6,3.9 2.1,-6.6 z m 0.7,-2.2 -0.1,-0.6 h -0.3 l -1.8,6.2 -0.4,-0 -2.4,-3.7 -0,2.1 -0.7,-1.1 -0.6,6.2 -4.9,-5.4 0.6,2.6 -1.5,-1.2 1.8,6.2 -2.5,0 -4,-0.2 1.5,1.1 -2.4,-0.1 1.5,1.4 h -21.3 c -0.1,0.5 -0.2,0.5 -0.2,1.1 v 5 c 0,1.6 4.8,3.7 6.2,4.4 2.3,1.3 4.6,2.4 6.9,3.8 4.4,2.7 9.2,5 13.7,7.6 1.8,1.1 6.8,0.5 9.6,0.2 2.8,-0.3 7.2,-0.2 9.9,-0.7 2.8,-0.5 7,-0.4 9.9,-0.7 2.7,-0.4 7.4,-0.6 10,-0.7 v -7.9 c 0,-0.9 -5.3,-2.4 -6.4,-2.8 -1.6,-0.5 -5.7,-1.9 -6.8,-2.6 l 2.9,-0.3 -8.4,-2.2 0,-0.4 9.2,-4.7 -1.5,0.2 1.7,-1.1 -10,1 3.9,-6.6 -8.1,4.7 2.9,-10 -6.4,8.4 -1.1,-11.1 -0.6,1.9 z m 1.1,-6.2 c -5.6,0 -9.6,-3.4 -9.6,-9 v -1.1 c 0,-4.8 9,-12.5 9,-21.1 2.8,3.2 2.2,7.6 4.3,11 1.2,1.9 5.3,7.8 5.3,9.9 v 1.1 c 0,5.3 -3.7,9.2 -9,9.2 z m -10.9,-10 v 1.1 c 0,13.7 21.1,13.2 21.1,0.8 v -2.1 c 0,-3.5 -4.5,-8.3 -5.9,-11.7 -2.2,-5.1 -1.1,-8.8 -6.2,-11.6 0,11.2 -9,17.6 -9,23.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.7,95.5 c -5.6,0 -9.6,-3.4 -9.6,-9 v -1.1 c 0,-4.8 9,-12.5 9,-21.1 2.8,3.2 2.2,7.6 4.3,11 1.2,1.9 5.3,7.8 5.3,9.9 v 1.1 c 0,5.3 -3.7,9.2 -9,9.2 z m -1.8,8.4 1.1,9.4 5.4,-6.8 -2.5,8.2 7.7,-4.3 -3.7,5.9 8.4,-0.8 -9.2,4.7 8.1,2.6 -14.4,1.7 c -3.3,0.2 -19,-3.7 -20.5,-4.8 l 10.3,-0.6 -6.2,-4.5 6.8,0.1 -1.7,-5.9 5.1,5.2 0.7,-7.5 2.6,3.9 2.1,-6.6 z m -35.6,13.2 c 2.6,1.7 26.1,12.1 26.1,13.2 v 5.9 l -0.1,0.2 -26,-14.7 v -4.6 z m 63.8,11.1 v 6.2 l -36.6,2.2 v -6.7 l 0.6,0.1 36,-1.7 z m -2.7,-1.1 c -4.7,0 -33,2.1 -34.6,1.5 -1.8,-0.7 -23.8,-11.4 -24.4,-12 3.8,0 7.5,0 11.3,0 2.9,0 8.8,-0.8 10,1.1 l -9,0.6 2.1,0.7 v 0.4 h -1.2 l -1.8,0.2 c 2,1.3 18.3,5.2 22.4,5.2 h 1.9 c 4.8,0 9.2,-1.3 13,-1.4 0.7,0 9.9,3.3 10.4,3.7 z"}],i["AC.IC.OXIDIZER"]=[{type:"path",stroke:!1,d:"m 80.9,135.3 0,0.2 0,4.2 0,0.2 0.2,0 40.7,0 0.2,0 0,-0.2 0,-4.2 0,-0.2 -0.2,0 -40.7,0 -0.2,0 z m 6.5,-20.7 c 0,-7.4 6.1,-14 13.4,-14 h 1.1 c 7.5,0 13.6,6.6 13.6,14 0,7.1 -6.2,13.9 -13.2,13.9 h -1.9 c -6.8,-0 -13,-6.8 -13,-13.9 z m 12.8,-35.9 c -0.7,0 -2.1,-2.1 -2.3,-2.9 -0.3,-1.2 -0.4,-3 0,-4.4 0.5,-2.1 2.8,-5.9 2.8,-7.5 0,-1.1 -0.1,-3 -1.3,-3.1 -1,4.4 -2.1,4.9 -4.1,8 -1,1.5 -4.7,5.8 -4.7,7.3 v 0.4 c 0,2.4 3.1,8.1 2.7,10.5 l -0.2,1.7 c -3.5,-0.8 -8.1,-7.3 -8.1,-12 -1.4,0.1 -2.5,4.4 -2.5,6.1 v 2.9 c 0,5.7 3.3,8.3 4.2,12 -2.7,-1.4 -4,-2.2 -5.9,-4.4 -1.1,-1.2 -3.7,-5.6 -4.1,-5.9 -1.1,2.4 1.7,10.3 2.4,12.1 0.7,1.7 1.4,3.5 2.3,5 1.1,1.8 2.2,2.6 3.2,4.1 0,1.7 -0.5,2.4 -0.6,4.7 -0,1.8 -0,2.6 0.2,4.6 0.2,2.1 2.1,6.1 3.2,7.3 2.4,2.6 2.4,2.8 5.6,4.8 2,1.3 4.9,2.2 8.1,2.2 h 0.6 c 6.4,0 11.4,-3.5 14.2,-7.2 3.8,-5.2 3.8,-9.9 2.2,-16.7 3.5,-6.6 5.9,-9.3 5.9,-19.7 v -0.4 l -0.4,-4 c -0.1,0 -3.3,6.2 -3.8,7 -1,1.5 -3.7,4.8 -5.7,5 0.1,-3.2 2.1,-6.2 2.1,-9.4 v -2.2 l -1.1,-8 c -1,0.7 -1.5,5.9 -3,7.7 -0.4,0.5 -5.6,5.5 -5.6,3.6 v -1.7 c 0,-3.1 2.1,-6.3 2.1,-9 v -1.3 c 0,-0.8 -3.9,-6.5 -4.6,-6.9 0,2.3 -0.2,4.4 -0.7,6.2 -0.3,1.1 -2,3.7 -3,3.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 87.4,114.5 c 0,-7.4 6.1,-14 13.4,-14 h 1.1 c 7.5,0 13.6,6.6 13.6,14 0,7.1 -6.2,13.9 -13.2,13.9 h -1.9 c -6.8,-0 -13,-6.8 -13,-13.9 z"}],i["AC.IC.RADIOACTIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 83.7,130.4 c -10.1,-5.6 -16.6,-17 -16.4,-28.5 l 17.8,-0 c -0.2,5 3.1,10.7 7.5,13.1 l -9,15.4 z m 49.1,-28.2 c 0.2,11.5 -6.4,22.9 -16.4,28.5 l -9,-15.4 c 4.4,-2.4 7.7,-8.1 7.6,-13.1 l 17.8,0 z M 83.5,73.8 c 9.9,-5.9 23,-5.9 32.9,0 l -8.9,15.5 c -4.3,-2.6 -10.9,-2.6 -15.1,0 l -8.9,-15.5 z m 26.5,28.5 c 0,5.5 -4.4,9.9 -9.9,9.9 -5.5,0 -9.9,-4.4 -9.9,-9.9 0,-5.5 4.4,-9.9 9.9,-9.9 5.5,0 9.9,4.4 9.9,9.9 z"}],i["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]=[{type:"path",stroke:!1,d:"m 101.2,128.4 -2.1,0 0,12.6 2.1,0 z m 26.5,0.6 -8.7,-8.6 -1.2,1.2 8.7,8.7 z m -45,-7.5 -1.3,-1.3 -8.8,8.8 1.3,1.4 z m 55.5,-19.7 -12.2,0 0,1.9 12.2,0 z m -63.3,0 -13.1,0 0,1.9 12.8,0 z m 52.8,-25.3 -1.3,-1.2 -9,8.7 1.5,1.5 z m -46.1,9.1 1.4,-1.5 -9.3,-9.2 -0,0.2 -1.2,1.3 z m 19.5,-26.5 -2.1,0 0,9.7 2.1,0 z M 91.7,88 v 0.6 c 0,0.5 1.4,4.3 1.7,5.1 0.7,2.2 0.7,3.4 0.7,5.7 -1.2,-0.1 -4.4,-3 -5.1,-4 -1.7,-2.5 -1.7,-3.4 -2.5,-6.7 -0.9,0.7 -1.9,3.8 -1.9,5.5 v 2.3 c 0,5.6 3.6,8.4 3.8,11.1 -0.9,-0.2 -4.8,-3.2 -5.4,-3.8 -0.7,-0.8 -3.3,-5.3 -3.8,-5.4 0,3.9 1.1,6.9 2.1,9.7 0.6,1.5 1.2,2.9 1.7,4.2 0.8,2.2 1.4,2 2.6,3.5 2.9,3.6 9.4,8.3 15.7,8.3 h 0.8 c 2.2,0 6.4,-1.7 7.9,-2.6 2.4,-1.3 4.5,-2.7 6,-4.8 2.8,-3.8 5.3,-9.3 5.3,-16 v -2.7 l -0.2,-2.3 h -0.4 c -1.1,4.7 -4.2,8.4 -8,10.5 0,-3.6 1.3,-5.3 1.9,-8.4 0.4,-2.4 -1,-6.9 -1,-9.2 -0.4,0.3 -1.2,5.4 -2.5,7 -0.3,0.4 -5.1,5.2 -5.1,3.1 v -2.1 c 0,-3 1.9,-4.8 1.9,-8.2 0,-0.8 -3.5,-6 -4.1,-6.3 l 0.1,0.9 c 0,1.2 -0.4,4.1 -0.7,5 -0.2,0.5 -2.3,3 -2.6,3 -1.2,0 -2.5,-2.9 -2.5,-4.4 v -1.1 c 0,-2.9 2.8,-6.1 2.6,-8 l -0.5,-2.9 c -0.5,0.4 -1.2,3 -1.6,3.9 -0.6,1.3 -1.4,2.2 -2.2,3.2 C 95.4,82.4 91.7,87.1 91.7,88 z"}],i["AC.IC.UNEXPLODED ORDNANCE"]=a("UXO"),i["AC.IC.TOXIC INFECTIOUS MATERIAL"]=[{type:"path",stroke:!1,d:"m 104.6,116.2 c 0,-3.6 0.9,-4.6 1.5,-7.3 l -2.5,-1.2 c -2.4,2.1 -4.4,1.6 -6.8,0 l -2.5,1.4 c 0.2,2.6 2,3.9 1.5,8.7 -0.4,3.1 -1.1,5.8 -2.6,7.8 -2.9,3.9 -7,7.4 -13.7,7.4 h -1 c -4.7,0 -10.2,-3.2 -12,-6 l -1.2,0.6 c 3.3,4.9 11.4,10 19.8,10 h 0.2 c 6.4,0 10.9,-2.7 14.8,-5.3 3.7,2.5 7.6,5 13.8,5 h 3 c 3.8,0 8.2,-1.6 10.6,-3.2 1.8,-1.2 6.7,-4.5 7.2,-6.6 -1.1,-0.3 -0.5,-0.5 -1.3,-0.5 -0.5,0 -1.7,1.9 -2.2,2.3 -0.8,0.6 -1.8,1.1 -2.6,1.6 -1.4,0.9 -4.7,1.8 -7,1.8 h -1.8 c -7.9,0 -15.3,-7.7 -15.3,-15.8 v -0.8 z m 2.3,3.5 2.5,4.3 c 3.2,-0.8 7.7,-5.2 9.3,-7.8 2.2,-3.7 3.5,-7.8 3.5,-13.8 h -5.5 c 0.1,5.2 -0.1,7.2 -2.5,10.8 -1.2,1.8 -1.7,2.1 -3.2,3.6 -1,1 -3.6,2.2 -4.1,2.9 z m -28.6,-13.8 c 0,7.4 6.8,16.7 12.5,18 l 2.3,-4.5 c -6.5,-3.4 -9.5,-8 -9.5,-17.1 h -5.3 v 3.5 z m -2.5,-17 v 1 c 0,0.5 -5,3.2 -5.8,3.8 -1.6,1.1 -3.5,3.2 -4.7,4.8 -2.8,3.6 -4.8,8.1 -4.8,14.2 0,4.4 1,6 1.8,9.4 l 1.2,-0.6 c -0.1,-1.5 -0.8,-2.3 -0.8,-4 v -2 c 0,-7.8 7.9,-15.6 16,-15.6 h 1.8 c 2.6,0 5.9,1.3 7.5,2.2 2.2,1.3 3.6,3.6 5.3,4.8 l 2.3,-1 v -1.8 c 0,-2 1.6,-3.9 3.3,-4.3 v -3 c -7.6,-0.2 -15.3,-7.8 -15.3,-15.5 v -1.5 c 0,-4.1 2.1,-8.6 4.2,-10.6 1.3,-1.2 2.5,-2.3 4,-3.2 0.8,-0.5 5.1,-1.5 5.1,-2.5 v -1 c -6.6,1.6 -11.7,3.8 -15.4,8.5 -4.3,5.5 -5.7,9 -5.7,17.9 l 0,0 z m 27.6,-25.4 c 0,0.6 4.2,2.1 5,2.5 1.2,0.6 3.5,2.4 4.2,3.5 2.1,2.9 4.3,6 4.3,11 0,8.2 -7.4,16.3 -15.6,16.3 v 3 c 2.3,0.2 4.4,3.4 3.3,5.8 0.6,0.2 2.5,1.2 2.5,1.2 0.7,0 5,-7 14.3,-7 h 0.2 c 4.5,0 9,2.6 11.1,5 1.7,1.9 5.3,7.6 4.8,11.4 l -0.8,5.5 1.2,0.6 c 0.1,-0.9 0.8,-2.3 1.1,-3.6 0.3,-1.2 0.4,-3 0.4,-4.4 v -3.3 c 0,-8.4 -8.3,-18.8 -15,-20.3 0,-5 0.4,-6.4 -0.9,-10.9 -0.9,-2.8 -2.6,-6.4 -4.3,-8.3 -5.1,-5.3 -7.5,-7 -15.9,-9 v 1 l -4e-4,0 z m -15.8,22.6 2.8,4.8 c 3,-1.6 4.8,-3.3 9.5,-3.3 h 0.5 c 5.8,0 6.9,2.6 9.7,3.2 l 2.6,-4.7 c -9.5,-5 -15.7,-5 -25.1,0 z"}],i["AC.IC.TOXIC GAS"]=[{type:"path",stroke:!1,fill:!!R&&G,d:"m 90.2,102.3 c 0.6,-1.9 5.7,-1.9 11.3,-0 5.6,1.9 9.6,4.9 9,6.8 -0.6,1.9 -5.7,1.9 -11.3,0 -5.6,-1.9 -9.6,-4.9 -9,-6.8 z m 7.7,-22.2 c 10e-7,3.7 -1.7,6.7 -3.8,6.7 -2.1,-2e-6 -3.8,-3 -3.8,-6.7 2e-6,-3.7 1.7,-6.7 3.8,-6.7 2.1,0 3.8,3 3.8,6.7 z m 17,2.2 c 0,4.1 -2.8,7.3 -6.3,7.3 -3.5,2e-6 -6.3,-3.3 -6.3,-7.3 0,-4.1 2.8,-7.3 6.3,-7.3 3.5,0 6.3,3.3 6.3,7.3 z m -7.9,49.6 c -1,2.9 -8.5,2.9 -16.6,0 -8.2,-2.9 -13.9,-7.6 -12.9,-10.5 1,-2.9 8.5,-2.9 16.6,-0 8.2,2.9 13.9,7.6 12.9,10.5 z"},{type:"path",stroke:!1,d:"M 107.5 64.3 C 102.2 64.2 96.9 67.1 92.8 71.6 C 90.6 73.6 89.2 76.8 89.2 80.4 C 89.2 83 90 85.4 91.2 87.3 C 92.1 89.9 92.7 91.8 92.7 94.5 L 92.4 96.7 L 90.7 101.6 C 92.3 100.5 96.7 100.7 101.5 102.3 C 106.6 104 110.4 106.7 110.5 108.6 L 112 104.2 C 115.9 104 120.5 96.9 122.7 87.6 C 124.9 77.9 123.5 69.3 119.8 67.9 C 118.4 66.6 116.1 65.5 112.8 65.3 C 111.1 64.6 109.3 64.3 107.5 64.3 z M 94.1 73.4 C 94.4 73.4 94.6 73.4 94.8 73.5 C 95.1 73.6 95.3 73.8 95.6 73.9 C 96.2 74.4 96.8 75.3 97.2 76.3 C 97.5 77.1 97.7 77.9 97.8 78.7 C 97.9 79.2 97.9 79.6 97.9 80.1 C 97.9 80.5 97.9 81 97.8 81.4 C 97.7 82.3 97.5 83.1 97.2 83.8 C 96.9 84.7 96.4 85.4 95.9 85.9 C 95.6 86.2 95.2 86.5 94.8 86.6 C 94.7 86.6 94.6 86.7 94.5 86.7 C 94.3 86.7 94.2 86.7 94.1 86.7 C 93.8 86.7 93.6 86.7 93.3 86.6 C 93 86.5 92.6 86.2 92.3 85.9 C 92.2 85.8 92.1 85.7 92 85.6 C 91.6 85.1 91.2 84.5 91 83.8 C 90.8 83.4 90.7 83.1 90.6 82.7 C 90.4 81.9 90.3 81 90.3 80.1 C 90.3 79.1 90.4 78.3 90.6 77.5 C 90.7 77.1 90.8 76.7 91 76.3 C 91.2 75.6 91.6 75 92 74.5 C 92.2 74.3 92.4 74.1 92.6 73.9 C 92.9 73.8 93.1 73.6 93.3 73.5 C 93.6 73.4 93.8 73.4 94.1 73.4 z M 108.6 75 C 110.4 75 112.1 75.9 113.3 77.3 C 113.3 77.4 113.4 77.5 113.5 77.6 C 113.5 77.6 113.5 77.6 113.5 77.7 C 113.6 77.8 113.7 78 113.8 78.2 C 113.8 78.3 113.9 78.3 113.9 78.4 C 114 78.5 114 78.5 114 78.6 C 114.1 78.7 114.2 78.8 114.2 79 C 114.3 79.1 114.3 79.3 114.4 79.4 C 114.4 79.5 114.5 79.5 114.5 79.6 C 114.5 79.7 114.6 79.9 114.6 80 C 114.6 80.1 114.6 80.2 114.7 80.3 C 114.7 80.4 114.7 80.6 114.8 80.8 C 114.9 81.3 114.9 81.8 114.9 82.3 C 114.9 84.6 114 86.6 112.6 88 C 112 88.6 111.3 89 110.5 89.3 C 110.3 89.4 110.1 89.5 109.9 89.5 C 109.5 89.6 109 89.7 108.6 89.7 C 108.2 89.7 107.7 89.6 107.3 89.5 C 107.3 89.5 107.3 89.5 107.3 89.5 C 107.1 89.5 106.9 89.4 106.7 89.3 C 105.9 89 105.2 88.6 104.6 88 C 104 87.4 103.5 86.6 103.1 85.8 C 102.9 85.4 102.7 85 102.6 84.5 C 102.5 84.3 102.5 84 102.4 83.8 C 102.4 83.5 102.4 83.3 102.3 83.1 C 102.3 82.8 102.3 82.6 102.3 82.3 C 102.3 82 102.3 81.8 102.3 81.5 C 102.3 81.5 102.4 81.5 102.4 81.4 C 102.4 81 102.5 80.5 102.6 80.1 C 102.6 80.1 102.6 80.1 102.6 80 C 103.4 77.1 105.8 75 108.6 75 z M 88.8 104 C 86.6 104 84.8 104.4 83.9 105.2 L 83.8 105.2 L 83.7 105.3 C 83.4 105.6 83.2 105.9 83.1 106.2 C 83 106.5 83 106.8 83 107.2 L 78.1 120.5 C 80.2 118.5 86.9 118.7 94.2 121.3 C 101.2 123.8 106.4 127.7 107.1 130.6 L 111.8 117.8 C 112.2 117.5 112.5 117.2 112.7 116.8 C 113.7 113.8 107.9 109.1 99.8 106.2 C 95.7 104.8 91.8 104 88.8 104 z M 82 120.8 C 79 120.8 76.9 121.5 76.4 123 C 75.4 125.9 81.1 130.7 89.3 133.6 C 97.4 136.5 104.9 136.5 105.9 133.6 C 107 130.6 101.2 125.9 93 123 C 89 121.5 85 120.8 82 120.8 z M 86.1 125.6 C 87.4 125.5 89.4 125.9 91.5 126.6 C 94.8 127.8 97.2 129.6 96.9 130.6 C 96.5 131.6 93.5 131.5 90.1 130.3 C 86.8 129.1 84.4 127.3 84.7 126.3 C 84.9 125.9 85.4 125.7 86.1 125.6 z "}],i["AC.IC.AFTERSHOCK"]=[{type:"path",stroke:!1,d:"m 99,62.5 -0,0 -0,0 -0.9,0 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.2 -0,0 -0,0 -0.7,0.1 0.6,2.7 0.7,-0.1 0,-0 0.8,-0.1 0,-0 0.8,-0.1 0,0 0.8,-0.1 0,0 0.9,-0.1 0,0 0.9,-0.1 0,0 0.9,-0.1 0,0 0.9,-0 0,0 0.9,-0 0,0 0,0 0.9,0 0,0 0.9,0 0,0 0.1,0 0.2,-2.8 -0.1,-0 -0,0 -0,0 -0.9,-0 -0,0 -0,0 -1,-0 -0,0 -0,0 z m 8.8,3.6 0.2,0 0,0 0.8,0.2 0,0 0.8,0.2 0,0 0.8,0.2 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.4 0,0 0,0 0.7,0.4 0,0 0.1,0 1.3,-2.5 -0.1,-0.1 -0,-0 -0,0 -0.8,-0.4 -0,-0 -0,0 -0.8,-0.4 -0,0 -0,-0 -0.8,-0.4 -0,-0 -0,0 -0.8,-0.4 -0,0 -0,-0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 -0,0 -0,-0 -0.9,-0.3 -0,0 -0,0 -0.9,-0.3 -0,0 -0,0 -0.9,-0.2 -0,0 -0,-0 -0.9,-0.2 -0,0 -0,0 -0.2,-0.1 z m -22.7,-0.7 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.5 -0,0 -0,0 -0.8,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.1,0.1 1.7,2.2 0.1,-0.1 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0,0 0.8,-0.4 0,-0 0.8,-0.3 0,-0 0.8,-0.3 0,-0 0.3,-0.1 -1,-2.6 z m 36.9,7.3 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0.6,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.4,0.5 2.3,-1.7 -0.4,-0.6 -0,-0 0,-0 -0.6,-0.7 -0,-0 0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,0 -0.7,-0.6 -0,-0 -0,0 -0.7,-0.6 -0,-0 -0,-0 -0.7,-0.6 -0,-0 -0,-0 -0.6,-0.5 z m -51,2.7 -0,0 -0,0 -0.6,0.7 -0,0 -0,0 -0.6,0.7 0,0 -0,0 -0.6,0.7 0,0 -0,0 -0.5,0.7 -0,0 -0,0 -0.5,0.7 -0,0 -0,0 -0.5,0.7 -0,0 0,0 -0.5,0.7 -0,0 0,0 -0.5,0.8 0,0 -0,0 -0.4,0.8 -0,0 0,0 -0.4,0.8 0,0 -0,0 -0.3,0.6 2.5,1.3 0.3,-0.6 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.6 0,-0 0.5,-0.6 0,-0 0.5,-0.6 0,-0 0.5,-0.5 -2.1,-1.9 z m 60.9,9.4 0.1,0.1 0,0 0,0 0.3,0.7 0,0 0.3,0.7 0,0 0.3,0.8 0,0 0.3,0.8 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0,0.2 2.8,-0.5 -0,-0.3 -0,-0 0,-0 -0.2,-0.9 0,-0 0,-0 -0.2,-0.9 0,-0 -0,-0 -0.2,-0.9 0,-0 -0,-0 -0.2,-0.9 0,-0 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 -0,-0 -0,-0 -0.4,-0.8 -0,-0 0,-0 -0.1,-0.2 z m -68.8,4.9 -0,0 0,0 -0.2,0.9 -0,0 0,0 -0.2,0.9 -0,0 0,0 -0.2,0.9 0,0 0,0 -0.2,0.9 0,0 -0,0 -0.1,0.9 0,0 0,0 -0.1,0.9 -0,0 0,0 -0.1,0.9 0,0 -0,0 -0.1,0.9 0,0 0,0 -0.1,0.9 0,0 0,0 -0,0.9 0,0 0,0 -0,0.9 0,0 0,0 0,0 1.4,-0 0.3,0 1.1,0 0,-0 0,-0.9 0,-0 0,-0.9 -0,0 0.1,-0.8 0,-0 0.1,-0.9 -0,0 0.1,-0.9 0.1,-0.9 -0,0 0.1,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.1,-0.2 -2.7,-0.8 z m 73,10.3 -0.6,0 0,0 0,0 -0,0.9 0,0 -0,0.9 0,0 -0.1,0.8 0,0 -0.1,0.9 0,0 -0.1,0.9 -0.1,0.9 0,0 -0.1,0.8 0,0 -0.2,0.8 -0,0 -0.2,0.8 -0,0 -0.2,0.8 0,0 -0.2,0.8 -0,0 -0.1,0.2 2.7,0.8 0.1,-0.2 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0,-0.9 0,-0 0,-0 0,-0.9 -1.4,-0 1.4,-0 0,-0 z m -73.9,6.4 0,0.3 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.4,0.8 0,0 0,0 0.1,0.2 2.5,-1.3 -0.1,-0.1 -0,-0 -0.3,-0.7 -0,-0 -0.3,-0.7 -0,-0 -0.3,-0.8 -0,-0 -0.3,-0.8 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 -0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 0,-0 -0,-0.2 z m 69.4,9.4 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.6 -0,0 -0.5,0.6 -0,0 -0.5,0.6 -0,0 -0.5,0.6 2.1,1.9 0.5,-0.6 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.8 0,-0 0,-0 0.4,-0.8 0,-0 0,-0 0.4,-0.8 0,-0 0,-0 0.3,-0.6 -2.5,-1.3 z m -62.8,6.1 0.4,0.6 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.6,0.5 1.7,-2.2 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0.6,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.4,-0.5 z m 53.1,5.4 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0.8,0.3 -0,0 -0.8,0.3 -0,0 -0.3,0.1 1,2.6 0.4,-0.1 0,-0 0,0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,-0 0,0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,-0 0,0 0.8,-0.5 0,0 0,-0 0.8,-0.5 0,-0 0,0 0.7,-0.5 0,0 0,-0 0.7,-0.5 0,-0 0,0 0.7,-0.5 0,-0 0,-0 0.7,-0.5 0,-0 0,-0 0.1,-0.1 -1.7,-2.2 z m -40.4,5.6 0.1,0.1 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0,0 0.9,0.3 0,0 0,0 0.9,0.3 0,0 0,0 0.9,0.2 0,0 0,0 0.9,0.2 0,0 0,0 0.2,0.1 0.6,-2.7 -0.2,-0 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.4 -0,0 -0,-0 -0.7,-0.4 -0,-0 -0.1,-0 z m 25.6,1.1 -0,0 -0.8,0.1 -0,0 -0.8,0.1 -0,0 -0.8,0.1 0,-0 -0.9,0.1 0,-0 -0.9,0.1 -0,0 -0.9,0.1 -0,0 -0.9,0 -0,0 -0.9,0 -0,0 -0,0 -0.9,-0 -0,0 -0.9,-0 -0,0 -0.1,0 -0.2,2.8 0.1,0 0,0 0,0 0.9,0 0,0 0,0 1,0 0,0 0,0 1,-0 0,0 0,0 0.9,-0 0,0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.1 0,-0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.1 0,-0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.2 0,0 0,0 0.7,-0.1 -0.6,-2.7 z m -7.2,-58.9 -0,1.2 0.1,0 0,0 1.3,0 0,-0 1.3,0.1 1.1,0.1 0.1,0 0,0 1.1,0.2 0.1,0 0.7,0.1 0.7,-3.1 -0.7,-0.2 -0,0 -0,-0 -1.3,-0.2 -0,0 -0,-0 -1.3,-0.2 -0,0 -0,0 -1.3,-0.1 -0,0 -0.1,0 -1.3,-0 -0,0 -0,0 -0,0 z m -5.5,-1.4 -0,0 -0,0 -1.3,0.3 -0,0 -0,0 -1.2,0.3 -0,0 -0,0 -1.2,0.4 -0,0 -0,0 -0.9,0.3 1.1,3 0.8,-0.3 0.1,-0 0,0 1.1,-0.4 0,-0 1.1,-0.3 1.2,-0.3 0.1,-0 1.1,-0.2 -0.6,-3.1 z m 14.8,4.4 0.2,0.1 0.1,0 1.1,0.5 1,0.5 0.1,0 1,0.5 0,0 0,0 0.9,0.6 0.1,0 0.5,0.4 1.8,-2.6 -0.6,-0.4 -0,-0 -0,-0 -1.1,-0.7 -0,-0 -0,-0 -1.1,-0.6 -0,-0 -0,-0 -1.1,-0.6 -0,-0 -0,-0 -1.1,-0.5 -0,-0 -0,-0 -0.3,-0.1 z m -23.6,-1.1 -0,0 -0,0 -1.1,0.7 -0,0 -0,0 -1,0.7 -0,0 -0,0 -1,0.8 -0,0 -0,0 -0.9,0.8 -0,0 -0,0 -0.8,0.7 2.2,2.4 0.7,-0.7 0.1,-0.1 0.8,-0.7 0,-0 0,-0 0.9,-0.7 0.1,-0 0.9,-0.6 0.1,-0 0.9,-0.6 0,-0 0,-0 -0.4,-0.6 -1.2,-2.2 z m 31.5,6.2 0.1,0.1 0,0 0,0 0.8,0.8 0.1,0.1 0.7,0.8 0.1,0.1 0.7,0.8 0,0 0,0.1 0.6,0.9 0,0.1 0,0 0.5,0.7 2.7,-1.8 -0.5,-0.8 -0,-0 -0,-0 -0.7,-1 -0,-0 -0,-0 -0.8,-0.9 -0,-0 -0,-0 -0.8,-0.9 -0,-0 -0,-0 -0.9,-0.9 -0,-0 -0,-0 -0.1,-0.1 z m -40.1,1.8 -0,0 -0,0 -0.7,1 -0,0 -0,0 -0.6,1.1 -0,0 -0,0 -0.6,1.1 -0,0 -0,0 -0.5,1.1 -0,0 -0,0 -0,0.1 2.4,1 0.5,0.3 0,-0 0.5,-1 0,-0.1 0,-0 0.5,-0.9 0,-0.1 0.6,-0.9 0.6,-1 0,-0 0,-0.1 0.6,-0.8 -2.6,-1.9 z m 45.4,5.9 0.4,1.1 0,0.1 0.3,1 0,0.1 0.3,1.1 0.3,1.1 0.2,1 3.1,-0.6 -0.2,-1.1 0,-0 -0,-0 -0.3,-1.2 -0,-0 -0,-0.1 -0.3,-1.2 -0,-0 -0,-0 -0.4,-1.2 -0,-0 -0,-0 -0.5,-1.1 z m -49.6,3.8 -0,0 0,0 -0.2,1.3 0,0 -0,0 -0.2,1.3 -0,0 0,0 -0.1,1.3 0,0 0,0.1 -0,1.3 0,0 0,0 0,0 1.9,-0 1.3,0 0,-0.1 0,-0 0,-1.2 0.1,-1.1 0,0 0.1,-1.2 0,-0.1 0,-0 0.2,-1.1 0.2,-0.9 -3.1,-0.7 z m 52.8,5.5 -1.2,-0 0,0.1 0,0 -0,1.2 -0.1,1.1 -0,0 -0.1,1.2 0,0 -0,0.1 -0.2,1.1 -0.2,0.9 3.1,0.8 0.2,-0.9 0,-0 0,-0 0.2,-1.3 0,-0 0,-0 0.2,-1.3 0,-0 0,-0 0.1,-1.3 0,-0 0,-0.1 0,-1.3 -1.6,-0 1.6,-0 0,-0 z m -53,4.3 0.2,1.1 0,0 0,0 0.3,1.2 0,0 0,0.1 0.3,1.2 0,0 0,0 0.4,1.2 0,0 0,0 0.5,1.1 3,-1.2 -0.4,-1 -0,-0.1 -0.3,-1 -0,-0.1 -0.3,-1.1 -0.3,-1.1 -0.2,-1 z m 49.9,4.9 -0.5,1 -0,0.1 -0,0 -0.5,1 -0,0.1 -0.6,0.9 -0.6,1 -0,0 -0,0.1 -0.6,0.8 2.6,1.9 0.6,-0.9 0,-0 0,-0 0.7,-1 0,-0 0,-0 0.6,-1.1 0,-0 0,-0 0.6,-1.1 0,-0 0,-0 0.5,-1.1 0,-0 0,-0 0,-0 -2.2,-0.9 -0.8,-0.3 z m -46,5 0.5,0.8 0,0 0,0 0.7,1 0,0 0,0 0.8,0.9 0,0 0,0 0.8,0.9 0,0 0,0 0.9,0.9 0,0 0,0 0.1,0.1 2.2,-2.3 -0.1,-0.1 -0,-0 -0,-0 -0.8,-0.8 -0.1,-0.1 -0.7,-0.8 -0.1,-0.1 -0.7,-0.8 -0,-0 -0,-0.1 -0.6,-0.9 -0.1,-0.1 -0.5,-0.7 z m 40,3.3 -0.1,0.1 -0.8,0.7 -0,0 -0,0 -0.9,0.7 -0.1,0 -0.9,0.6 -0.1,0 -0.9,0.6 0,-0 -0.1,0 0,0 -0,0 0.3,0.4 1.3,2.4 0,-0 0,-0 0,-0 1.1,-0.7 0,-0 0,-0 1,-0.7 0,-0 0,-0 1,-0.8 0,-0 0,-0 0.9,-0.8 0,-0 0,-0 0.8,-0.7 -2.2,-2.4 z m -32.6,4.4 0.6,0.4 0,0 0,0 1.1,0.7 0,0 0,0 1.1,0.6 0,0 0,0 1.1,0.6 0,0 0,0 1.1,0.5 0,0 0,0 0.3,0.1 1.1,-3 -0.2,-0.1 -0.1,-0 -1.1,-0.5 -1,-0.5 -0.1,-0 -1,-0.6 0,0 -0.9,-0.6 -0.1,-0 -0.5,-0.4 z m 24.5,0.3 -0.1,0 -1.1,0.3 -0.1,0 -1.1,0.3 -1.2,0.3 -0.1,0 -1.1,0.2 0.6,3.1 1.2,-0.2 0,0 0,-0 1.3,-0.3 0,0 0,-0 1.2,-0.3 0,-0 0,-0 1.2,-0.4 0,-0 0,-0 0.9,-0.3 -1.1,-3 z m -14.8,3.9 0.7,0.2 0,0 0,0 1.3,0.2 0,0 0,0 1.3,0.2 0,0 0,0 1.3,0.1 0,0 0.1,0 1.3,0 0,0 0,0 0,0 -0.1,-1.6 0,-0.1 0,-1.5 -0.1,0 -1.3,-0 0,0 -1.3,-0.1 -1.1,-0.1 -0.1,-0 -0,0 -1.1,-0.2 -0.1,-0 -0.7,-0.1 z m 6.3,-43.1 -0.4,0 0.1,4 0.3,-0 0.1,0 0.1,0 0.6,0 0.1,0 0.6,0 0.1,0 0.6,0.1 0.1,0 0.6,0.1 0.7,0.1 0.1,0 0.1,0 0.6,0.2 0.5,0.2 0.1,0 0.5,0.2 0.1,0 0,0 0.5,0.2 0.1,0 0.4,0.2 1.8,-3.6 -0.5,-0.3 -0,-0 -0.1,-0 -0.7,-0.3 -0.1,-0 -0.1,-0 -0.7,-0.3 -0,-0 -0.1,-0 -0.7,-0.2 -0.1,-0 -0,-0 -0.7,-0.2 -0.1,-0 -0.1,-0 -0.7,-0.2 -0.1,-0 -0.1,-0 -0.8,-0.1 -0,-0 -0.1,-0 -0.8,-0.1 -0.1,-0 -0.1,0 -0.8,-0.1 -0.1,0 -0.1,0 -0.8,-0 -0.1,-0 z m -5.1,0.7 -0.1,0 -0,0 -0.7,0.2 -0.1,0 -0.1,0 -0.7,0.3 -0,0 -0.1,0 -0.7,0.3 -0.1,0 -0,0 -0.7,0.3 -0,0 -0,0 -0.7,0.4 -0,0 -0.1,0 -0.6,0.4 -0,0 -0,0 -0.6,0.4 -0,0 -0,0 -0.6,0.4 -0,0 -0,0 -0.6,0.5 -0,0 -0,0 -0.5,0.5 -0,0 -0,0 -0.2,0.2 2.9,2.8 0.1,-0.1 0.1,-0.1 0.4,-0.4 0.1,-0.1 0.4,-0.3 0,-0 0.1,-0.1 0.4,-0.3 0.5,-0.4 0.1,-0.1 0.6,-0.3 0,-0 0.5,-0.3 0.1,-0 0.5,-0.3 0.1,-0 0.5,-0.2 0,0 0.1,-0 0.6,-0.2 0,-0 0.5,-0.2 0.1,-0 0.1,-0 -1.1,-3.9 z m 14.2,6.7 0.4,0.3 0.5,0.5 0.1,0.1 0.3,0.4 0.1,0.1 0.3,0.4 0.1,0.1 0.3,0.4 0,0 0,0.1 0.3,0.4 0.1,0.1 0.3,0.5 0,0 0,0.1 0.3,0.5 0,0.1 0.2,0.5 0,0.1 0.2,0.5 0,0.1 0,0 0.2,0.6 3.8,-1.3 -0.2,-0.7 -0,-0.1 -0,-0.1 -0.3,-0.7 -0,-0.1 -0,-0 -0.3,-0.7 -0,-0.1 -0,-0 -0.3,-0.7 -0,-0.1 -0,-0 -0.4,-0.6 -0,-0 -0,-0.1 -0.4,-0.6 -0,-0 -0,-0.1 -0.4,-0.6 -0,-0.1 -0,-0 -0.5,-0.6 -0,-0 -0,-0 -0.5,-0.5 -0,-0 -0,-0 -0.5,-0.5 -0,-0 -0,-0 -0.5,-0.4 z m -24.4,1.4 -0,0 -0,0.1 -0.3,0.7 -0,0 -0,0.1 -0.3,0.7 -0,0 -0,0.1 -0.3,0.7 -0,0.1 -0,0.1 -0.2,0.7 -0,0.1 -0,0.1 -0.2,0.7 -0,0.1 0,0.1 -0.2,0.7 -0,0.1 -0,0.1 -0.1,0.7 -0,0.1 0,0.1 -0.1,0.8 0,0.1 -0,0.1 -0.1,0.8 0,0.1 0,0.1 -0,0.8 0,0.1 0,0.1 0,0.3 4,-0.1 -0,-0.2 0,-0.1 0,-0 0,-0.7 0,-0.6 0,-0.1 0,-0 0.1,-0.5 0.1,-0.6 0,-0.1 0.1,-0.5 0,-0 0,-0.1 0.1,-0.5 0.2,-0.6 0,-0.1 0,-0 0.2,-0.5 0.3,-0.6 0.1,-0.1 0.3,-0.5 0,-0.1 0,-0 0,-0 -3.5,-2 z m 28.7,7.6 0,0.5 0,0.1 0,0 -0,0.6 -0.1,0.7 -0,0.1 0,0.1 -0.1,0.6 -0.1,0.5 -0,0.1 -0.1,0.5 0,0 -0,0.1 -0.1,0.5 -0,0.1 -0.2,0.5 -0,0 -0,0.1 -0.2,0.5 -0,0 -0,0.1 -0.2,0.5 -0,0.1 -0.3,0.5 -0,0.1 -0,0 -0.2,0.3 3.5,2 0.2,-0.4 0,-0.1 0,-0 0.3,-0.7 0,-0 0,-0.1 0.3,-0.7 0,-0 0,-0.1 0.3,-0.7 0,-0.1 0,-0.1 0.2,-0.7 0,-0 0,-0.1 0.2,-0.7 0,-0.1 0,-0.1 0.2,-0.7 0,-0.1 0,-0.1 0.1,-0.7 0,-0.1 0,-0.1 0.1,-0.8 0,-0.1 0,-0.1 0.1,-0.8 0,-0.1 0,-0.1 0,-0.8 -2,-0.1 2,-0.1 -0,-0.6 z m -30.1,5.3 0.1,0.3 0,0.1 0,0 0.2,0.7 0,0.1 0,0.1 0.3,0.7 0,0.1 0,0 0.3,0.7 0,0.1 0,0 0.3,0.7 0,0 0,0.1 0.4,0.6 0,0 0,0.1 0.4,0.6 0,0 0,0 0.4,0.6 0,0 0,0 0.5,0.6 0,0 0,0 0.5,0.5 0,0 0,0 0.5,0.5 0,0 0,0 0.2,0.2 2.7,-2.9 -0.2,-0.1 -0.1,-0.1 -0,-0 -0.4,-0.4 -0.1,-0.1 -0.4,-0.4 -0,-0.1 -0,-0 -0.3,-0.4 -0.1,-0.1 -0.4,-0.5 -0.3,-0.4 -0.1,-0.1 -0.3,-0.5 -0,-0 -0,-0.1 -0.3,-0.5 -0.1,-0.1 -0.2,-0.5 -0,-0.1 -0,-0 -0.2,-0.5 -0,-0.1 -0,-0.1 -0.2,-0.6 -0,-0.1 z m 25.8,4.8 -0.1,0.1 -0.4,0.3 -0,0 -0.1,0.1 -0.4,0.3 -0.1,0.1 -0.5,0.3 -0,0 -0.1,0 -0.5,0.3 -0.1,0 -0,0 -0.6,0.3 -0.5,0.3 -0.1,0 -0.5,0.2 -0,0 -0.1,0 -0.5,0.2 -0.1,0 -0.5,0.2 -0.5,0.1 1.1,3.9 0.5,-0.1 0,-0 0.1,-0 0.7,-0.2 0.1,-0 0,-0 0.7,-0.3 0.1,-0 0.1,-0 0.7,-0.3 0.1,-0 0,-0 0.7,-0.3 0.1,-0 0,-0 0.7,-0.4 0,-0 0,-0 0.6,-0.4 0,-0 0.1,-0 0.6,-0.4 0,-0 0,-0 0.6,-0.5 0,-0 0,-0 0.6,-0.5 0,-0 0,-0 0.5,-0.5 -2.7,-2.9 z m -15.5,1.8 -1.9,3.5 0.1,0.1 0,0 0,0 0.7,0.3 0,0 0.1,0 0.7,0.3 0.1,0 0,0 0.7,0.3 0.1,0 0.1,0 0.7,0.2 0,0 0.1,0 0.7,0.2 0,0 0.1,0 0.8,0.2 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0 0.1,0 0.1,0 0.1,0 -0.1,-4 -0.1,0 -0.1,0 -0.6,-0 -0.1,0 -0.6,-0 0,-0 -0.7,-0.1 -0,0 -0.1,-0 -0.6,-0.1 -0.1,-0 -0.6,-0.1 0,-0 -0.7,-0.2 -0.5,-0.2 0,-0 -0.6,-0.2 -0.1,-0 -0,0 -0.5,-0.2 -0.1,-0 -0.5,-0.3 -0.1,-0.1 z M 100,93.2 c -3.5,-4e-4 -6.7,2.9 -6.7,6.5 l 0,0.4 c 0,3.5 3,6.5 6.5,6.5 l 0.4,0 c 3.4,0 6.5,-3 6.5,-6.3 l 0,-0.9 c 0,-3.4 -3.3,-6.3 -6.8,-6.3 z"}],i["AC.IC.AVALANCHE"]=[{type:"path",stroke:!1,d:"m 115.7,87.3 -3.6,0.9 11,38 -4.6,1.5 9.6,9.2 3.1,-13 -4.6,1.4 z m 3,46.4 -8.5,-10 4.3,-1.2 -11.2,-40.6 -34.5,51.9 z m -12.1,-59.8 0,8.4 1.6,0 0,-8.3 7.1,4.3 0.8,-1.3 -7.4,-4.1 7.5,-4.4 -1,-1.2 -7,4 0,-8.2 -1.6,0 0,8.2 -7.4,-4 -0.6,1.1 7.2,4.4 -7.2,4.1 0.6,1.4 z"}],i["AC.IC.EARTHQUAKE EPICENTER"]=[{type:"path",stroke:!1,d:"m 62.8,99.8 c 0,-10.8 4.9,-20.2 10.3,-25.7 5.1,-5.1 14.8,-11.3 24.7,-11.3 h 4.1 c 4.9,0 10.5,1.9 13.9,3.6 5,2.5 6.4,4 10.4,7 4.6,3.6 11.1,15.4 11.1,23.8 v 5.3 c 0,17.4 -17.5,34.6 -35.1,34.6 h -4.6 c -10.3,0 -19.4,-6.2 -24.6,-11.4 -5.5,-5.4 -10.3,-15 -10.3,-25.8 z m 39.4,38.5 c 10.7,0 20,-6.3 25.5,-11.8 6.7,-6.7 9.9,-13.9 10.7,-26.5 1.3,-19.2 -17.7,-38.1 -36.2,-38.1 h -4.8 c -10.3,0 -20.1,6.6 -25.2,12.1 -3,3.2 -5.6,6.7 -7.5,11.1 -1.1,2.8 -3.5,11.3 -3,15.3 0.7,6.4 0.9,10.4 3.4,15.3 2.2,4.4 4,7.6 7.3,11 5,5.3 15.2,11.7 25.3,11.7 h 4.6 z m -3.9,-11.6 c -13.6,0 -24.7,-13.1 -25.2,-26.8 -0.5,-13.2 12.5,-26.4 25.4,-26.4 h 2.9 c 12.8,0 25.2,12.4 25.2,25.2 v 2.4 c 0,12.8 -12.4,25.7 -25.2,25.7 h -3.1 v -0 z m -27.1,-26.9 c 0,8.8 3.7,16 8.1,20.5 2.3,2.4 5.2,4.4 8.3,5.9 4.2,2.2 6.3,1.9 11.5,2.8 2.9,0.5 10,-1.3 12,-2.2 4.6,-2.2 5,-2.9 8.6,-5.6 4.3,-3.1 9.1,-12.3 9.1,-19.7 v -3.4 c 0,-13.7 -13.6,-26.8 -27.3,-26.8 h -3.2 c -14.5,-4e-4 -27.1,13.6 -27.1,28.5 z m 28.5,14.8 c -8.4,0 -13.5,-6.5 -14.4,-14.4 -0.7,-7.3 6.8,-14.6 13.9,-14.6 h 1.7 c 7.3,0 13.6,6.9 13.6,14.5 0,7.7 -6.2,14.5 -13.8,14.5 h -1 z m -18.6,-14.8 c 0,11.5 8,18.1 18.4,19.3 6.2,0.8 10.3,-2.9 13.6,-5.3 2.8,-2 5.8,-8.3 5.8,-13.3 V 99.8 c 0,-10.4 -8.3,-18.6 -18.6,-18.6 h -0.7 c -9.9,0 -18.4,8.6 -18.4,18.6 z m 10.9,0 v 0.2 c 0,3.7 3.5,7.7 7,7.7 h 1.7 c 3.9,0 7.3,-3.9 7.3,-7.7 0,-4 -3.5,-8 -7,-8 h -1.7 c -3.5,0 -7.3,4 -7.3,7.7 z"}],i["AC.IC.LANDSLIDE"]=[{type:"path",stroke:!1,d:"m 129.4,110.8 c -2.7,0 -6.2,4.1 -4.3,5.1 -1,1.5 -3.6,2 -3.6,4 0,1.8 2.6,4.7 3.4,6.2 1.1,2 3.2,3.2 6.2,3.2 h 1.8 c 2.7,0 4.6,-2.6 4.6,-5.3 v -1 c 0,-3.4 -1,-5 -2.1,-7.5 -1,-2.4 -1.6,-4.6 -4.9,-4.6 h -1 z m -22.2,-35 -5.3,-5.2 -39.3,58.3 55.8,0.1 v -1.2 c 0,-0.7 -1,-1.5 -1.5,-1.8 0,-2 -0.6,-1.6 -0.9,-2.9 -0.2,-0.9 -0.1,-2.7 -0.1,-3.7 0,-2.8 -0.1,-4.3 -1.7,-5.6 -2.2,-1.9 -1.3,-1.5 -4.3,-3.1 -2,-1 -1.5,-2.1 -5.2,-2.2 v -1.5 c 0,-1.9 -2,-3.6 -2.8,-4.8 0,-2.3 -0.5,-4.7 -0.5,-6.8 0,-1.6 -0.2,-2 -0.2,-3.3 -0.1,-1.7 -0.8,-1.5 -0.8,-2.8 v -0.2 c 0,-3 0.5,-4.5 2.1,-6 2.2,-2.1 0.9,-2.2 3.8,-3.9 l 0.8,-3.3 0,0 z m 9.7,34 c 0,3.6 6.1,2.8 6.1,-0.8 0,-4.2 -6.1,-1.9 -6.1,0.8 z m 2.8,-16.4 c -2.2,0 -7,6.4 -4,8.6 1.7,1.2 2.6,1.6 5.3,0.6 2,-0.8 2.8,-1.6 2.8,-4.3 4e-4,-2.4 -2,-4.8 -4,-4.8 z m -8.4,5.3 c 0.8,0 1,-0.7 1.3,-1.3 -0.6,-1.4 -0.5,-2.5 -2.6,-2.5 h -0.2 c -1,0 -2,0.6 -2,1.5 0,0.7 1.6,2.3 2.8,2.3 h 0.8 z m -3.3,-13.7 c -0.1,1 -0.3,0.6 -0.3,1.5 0,1 0.8,3 1.8,3 h 0.2 c 3.1,0 3.1,-0.2 4.8,-1.5 -1,-2.3 -0.4,-3.6 -4.2,-3.6 -1.1,0 -1.4,0.3 -2.3,0.5 z"}],i["AC.IC.SUBSIDENCE"]=[{type:"path",stroke:!1,d:"m 56.8,75.6 0,2 14.4,0 3.8,7.9 c -0.1,0.3 -0.3,0.7 -0.3,1.6 l 0,0.6 c 0,0.7 0.3,1.1 0.7,1.5 0.3,0.4 0.7,0.8 1.1,1.3 0.7,0.8 1.5,1.5 1.8,2 l -0.3,4.1 c -0.1,1 0.4,2 1,2.6 0.6,0.6 1.3,1.1 2,1.5 0.7,0.4 1.3,0.8 1.7,1.2 0.4,0.4 0.6,0.6 0.6,1 0,1.3 -0.5,2.2 -0.5,4.2 0,0.9 0.5,1.7 1.1,2.1 0.6,0.4 1.2,0.7 1.8,0.9 0.6,0.2 1.1,0.4 1.4,0.6 0.3,0.2 0.3,0.2 0.3,0.3 0,0.6 -0.1,0.8 -0.3,1.2 -0.2,0.3 -0.5,0.7 -0.5,1.5 l 0,0.6 c 0,1.8 1,2.9 1.9,3.5 0.8,0.6 1.3,0.8 1.5,1.3 0,0 0,0 0,0 0.2,0.8 0.3,2 0.7,3.1 0.2,0.6 0.5,1.2 1,1.6 0.5,0.5 1.2,0.7 2,0.7 l 0.3,0 c 1.1,0 1.9,-0 2.6,-0.2 0.7,-0.1 1.3,-0.4 1.7,-0.9 0.4,-0.5 0.5,-1.1 0.7,-1.7 0.1,-0.6 0.2,-1.3 0.3,-2.1 7.6e-4,-0 -7.6e-4,-0 0,-0 0.2,-1.4 0.7,-2.1 1.3,-2.8 0.5,-0.7 1.2,-1.7 1.2,-3.1 0,-0.6 -0.2,-1 -0.5,-1.3 -0.2,-0.3 -0.5,-0.7 -0.7,-1 -0.5,-0.7 -0.8,-1.5 -0.8,-2.4 l 0,-0.9 c 0,-0 -0,-0 0.1,-0.2 0.2,-0.2 0.5,-0.4 0.8,-0.6 0.4,-0.3 0.8,-0.5 1.1,-1 0.4,-0.4 0.7,-1.1 0.7,-1.8 0,-1.2 -0.5,-2.4 -0.9,-3.5 -0.4,-1.1 -0.8,-2.2 -0.8,-2.5 0,-0.5 0.2,-1 0.6,-1.6 0.4,-0.6 1,-1.3 1.5,-2.2 0.5,-0.8 0.9,-1.8 0.9,-3 -0,-1.1 -0.5,-2.4 -1.6,-3.6 l -0,-0 -0,0 c -0.3,-0.3 -0.7,-1.3 -0.8,-2.2 -0.1,-0.9 0.1,-1.9 0.4,-2.3 0.3,-0.5 0.9,-0.9 1.7,-1.4 0.7,-0.6 1.5,-1.6 1.5,-3 l 0,-1.4 38.1,0 0,-2 -40.1,0 -30.6,0 -0.6,0 -15,0 z"}],i["AC.IC.VOLCANIC ERUPTION"]=[{type:"path",stroke:!1,d:"m 122.2,66 -10.4,17.9 1.7,1 10.4,-17.9 -1.7,-1 z m -23.2,0.5 0,17.9 2,0 0,-17.9 -2,0 z m -19.5,-0.4 -1.8,0.8 8,17.9 1.8,-0.8 -8,-17.9 z M 99.3,120.8 c -1.7,-0 -3.3,0.8 -4.5,2 -1.2,1.2 -2,2.9 -2,4.5 l 0,1.9 c 0,1.7 0.8,3.3 2,4.5 1.2,1.2 2.8,2 4.5,2 l 1.3,0 c 1.7,0 3.3,-0.8 4.5,-2 1.2,-1.2 2,-2.8 2,-4.5 l 0,-1.9 c 0,-1.7 -0.8,-3.3 -2,-4.5 -1.2,-1.2 -2.8,-2 -4.5,-2 l -1.2,0 -0,0 z M 80.3,86.5 c -0.5,0 -0.9,0.3 -1.4,0.8 -0.4,0.5 -0.8,1.2 -1.3,2 -0.8,1.7 -1.6,3.9 -2.4,6.3 -1.5,4.7 -2.8,9.8 -3.4,11.4 l -0,0 c -2,7 -5.8,15.2 -7,21.6 l -0.1,0.2 0.2,0 20.9,0.6 0.2,0 0,-0.2 0,-1.9 0,-0.2 -0.2,-0 -17.6,-0.7 L 80.5,89.4 l 39.1,0 11.9,37.1 -17.5,0.7 -0.2,0 0,0.2 0,1.9 0,0.2 0.2,-0 20.9,-0.6 0.2,0 -0.1,-0.2 c -1.3,-6.4 -5.1,-14.7 -7,-21.6 L 128.1,107 c -0.6,-1.6 -1.9,-6.7 -3.4,-11.4 -0.8,-2.3 -1.6,-4.6 -2.4,-6.3 -0.4,-0.8 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.9,-0.8 -1.4,-0.8 l -39.4,0 z"}],i["AC.IC.VOLCANIC THREAT"]=[{type:"path",stroke:!1,d:"m 80.3,85.6 c -0.5,0 -0.9,0.3 -1.4,0.8 -0.4,0.5 -0.8,1.2 -1.3,2 -0.8,1.7 -1.6,3.9 -2.4,6.3 -1.5,4.7 -2.8,9.8 -3.4,11.3 l 0,0 -0,0 c -2,7 -5.8,15.2 -7,21.6 l -0.1,0.2 0.2,0 20.9,0.6 0.2,0 0,-0.2 0,-1.9 0,-0.2 -0.2,-0 -17.6,-0.7 12,-37.1 39.1,0 11.9,37.1 -17.5,0.7 -0.2,0 0,0.2 0,1.9 0,0.2 0.2,0 20.9,-0.6 0.2,-0 -0.1,-0.2 c -1.3,-6.4 -5.1,-14.7 -7,-21.6 l -0,0 0,-0 c -0.6,-1.6 -1.9,-6.7 -3.4,-11.3 -0.8,-2.3 -1.6,-4.6 -2.4,-6.3 -0.4,-0.8 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.9,-0.8 -1.4,-0.8 l -39.4,0 z M 99.3,120 c -1.7,-0 -3.3,0.8 -4.5,2 -1.2,1.2 -2,2.9 -2,4.5 l 0,1.9 c 0,1.7 0.8,3.3 2,4.5 1.2,1.2 2.8,2 4.5,2 l 1.3,0 c 1.7,0 3.3,-0.8 4.5,-2 1.2,-1.2 2,-2.8 2,-4.5 l 0,-1.9 c 0,-1.7 -0.8,-3.3 -2,-4.5 -1.2,-1.2 -2.8,-2 -4.5,-2 l -1.2,0 -0,0 z m -2.7,-42.1 0,0.2 -0.2,0 0,4.2 0,0.2 0.2,0 3.3,0 0.2,0 0,-0.2 0,-4.2 0,-0.2 -0.2,0 -3.3,0 z M 99,57.1 c -1.1,2.5e-5 -2.3,0.2 -3.3,0.5 -1.1,0.3 -2.1,0.8 -3.2,1.4 l -0.1,0.1 0,0.1 0,3.1 0,0.4 0.3,-0.2 c 1.1,-0.7 2,-1.3 3,-1.6 1,-0.4 1.9,-0.6 2.7,-0.6 1.1,2.2e-5 2,0.3 2.7,0.8 0.7,0.6 1,1.3 1,2.2 -1e-5,0.5 -0.1,1 -0.4,1.5 -0.3,0.5 -0.7,1 -1.3,1.6 l 0,0 -1.5,1.5 c -1,0.9 -1.7,1.8 -2,2.5 -0.3,0.7 -0.5,1.7 -0.5,2.8 l 0,2.5 0,0.2 0.2,0 3.1,0 0,-0.2 0.2,0 0,-2 c -10e-6,-0.6 0,-1 0.1,-1.3 0,-0.3 0.1,-0.6 0.1,-0.8 0.1,-0.2 0.2,-0.5 0.4,-0.8 0.2,-0.3 0.6,-0.7 1.1,-1.2 l 1.4,-1.4 c 1,-0.9 1.7,-1.8 2.1,-2.6 l 0,-0 c 0.4,-0.8 0.6,-1.6 0.6,-2.5 -2e-5,-1.8 -0.6,-3.3 -1.9,-4.3 -1.3,-1.1 -2.9,-1.6 -5,-1.6 z"}],i["AC.IC.CAVE ENTRANCE"]=[{type:"path",fill:!1,d:"m 55,100 55,0 30,-20 0,40 -30,-20"}],i["AC.IC.DROUGHT"]=[{type:"path",stroke:!1,d:"m 87.6,127.4 c 1.3,0.6 4.5,0 6.1,0 h 4.2 l -2,-5.9 -4.9,-0.3 c -5.7,10.8 -2.4,4.3 -3.4,6.2 z m -24.1,-7 c -0.6,1.9 17.6,6.9 20.5,7.4 2.7,-1.8 4.5,-2.4 4.8,-6.7 -4,0 -11.4,-0.8 -14.8,-1.7 -2.2,-0.6 -4.2,-1.2 -6.4,-1.7 -3.5,-0.9 -4.2,-1.5 -4.2,2.6 z m 35.9,6.1 6.7,-0.3 18.6,-1.7 c 1.5,-0.4 4.5,-0.4 6,-1.4 -1.3,-2.6 -2.4,-4.1 -3.7,-6.6 -1.4,-2.6 -1.9,-4.9 -3,-7.2 -3.7,0.8 -4.7,3.5 -6.3,4 -3.5,1.1 -4.8,0.4 -6.7,3.8 -1.7,3 -2.5,3.3 -5.3,5.2 -2.4,1.7 -3.6,2.8 -6.3,4.2 z m -2.8,-9 c 0,3.7 0.5,4.2 2.2,7.3 l 8.5,-7.1 -0.2,-0.2 c -1.7,-0.4 -2.4,-1.5 -4.8,-2.2 -1.6,-0.4 -4.1,-1.3 -5.8,-1.4 v 3.6 h 0.1 z m 37.6,0.5 c -0.9,0 -1,-0.2 -1.9,-0.2 l 1,2.4 2.7,-2.8 c -0.9,0.2 -0.8,0.5 -1.8,0.5 z m -51.3,-0.3 c -0.1,1.9 7.7,1.5 9.3,1.5 h 2.8 c 0,-1.7 -0.7,-2.8 -0.8,-4.4 -0.1,-2.5 -0.4,-1.8 -3.1,-2.1 -4,-0.4 -4.6,-2 -7.7,-2.8 l -0.6,7.7 z m -25.5,-12.6 3,12.1 c 0.7,-3 2.2,-4.5 2.8,-7.3 0.3,-1.8 0.1,-2.6 0.9,-4 0.4,-0.7 1.3,-2.8 1.5,-3.6 -1.4,-0.3 -6.9,-1.6 -8.6,-1.6 l 0.4,4.4 z m 69.9,-2.2 c -1,4.1 -0.7,3.5 1,7 1.2,2.4 2,4.4 3.1,6.6 5.8,-0.5 6.2,-0.5 9.4,-3.6 1.6,-1.6 1,-6.8 2,-8.3 -2.5,-1.2 -1.7,-0.6 -4.6,-1.3 -4.5,-1 -6.6,-0.4 -10.9,-0.3 z m -30.9,1.1 v 0.8 c 0,2.2 -0.1,3.3 0,5.4 0.1,3.3 -0.3,2.5 3.1,2.8 1.2,0.1 3.5,1 4.5,1.4 0.7,0.4 1.5,0.5 2,0.8 0.8,0.4 0.3,0.6 1.7,1.4 l -0.2,-0.2 5.6,-4.7 c 3.1,0 4.2,0.4 5.8,-1.3 2.4,-2.5 0.8,-1.4 4,-3.1 l 0.6,-3.1 c -2.5,0.6 -5.5,2.2 -8.2,1.1 -2.6,-1.1 -3.8,-2.8 -7.4,-2.8 l -1.6,-0.3 -9.9,1.8 z m -32.1,11.2 c 1.3,0 5.8,0.7 6.9,1 1.4,0.4 4.7,2.3 5.6,2.3 h 2.8 c 1,0 0.9,-0.3 1.7,-0.5 l 1.7,-8.3 -5.2,-4.5 -9,-2 c -0.4,1.7 -2.4,3 -3.1,5.1 -0.3,0.7 -1.5,6.3 -1.5,7 z m 41,-35.1 c 1,1.2 1.4,2.8 2.2,4.2 0.4,0.6 2.9,3.3 2.9,3.5 0,0.8 -0.9,2.3 -1.3,2.3 -2.7,0 -3.8,-6.7 -3.8,-10 z m -1.8,-1.2 c -0.3,1 -1.9,4.5 -2.5,5.6 -0.9,1.8 -1.9,3.5 -4.4,3.5 -0.5,0 -1,-0.4 -1,-0.8 0,-3.1 3.8,-5.8 5.2,-7.6 l 2.8,-0.8 z m 9.5,8.6 h -0.8 c -2.3,0 -6.9,-8 -6.9,-9.7 0,-0.1 0.3,-0.5 0.3,-0.5 1.7,0.5 7.9,6 7.9,8.7 -4e-4,0.5 -0.4,0.8 -0.5,1.5 z m 0.6,-6 c -0.7,-0.3 -1.7,-1 -2.4,-1.3 -1.4,-0.8 -3.5,-2.9 -4.7,-3.3 l 1.1,-1.3 c 3.1,1.5 10.1,1.3 10.1,5.7 0,0.3 -0.8,0.8 -1,1 -0.8,-0.3 -2,-0.4 -3.1,-0.8 z m -24.9,1.3 h -1 c 1,-2 -2.2,-6.7 -4.4,-7.2 -2.2,1.2 -4.2,0.6 -5.5,3.3 -0.4,1 -0.7,2.2 -1.5,2.8 -0.8,0.6 -2.4,0.8 -2.4,1.9 0,1.5 4.3,0.4 4.9,-0.2 1.2,-1.1 2.4,-2.1 4.5,-2.1 2,0 2.9,5.8 3.1,8.2 0.2,3.2 -2.3,7.7 -2.2,9.5 l 0.9,6.8 -4.4,-0.3 c 2.1,3.1 8.5,6 13.4,6.4 l -0.4,-7.7 -5.6,1.3 c 0,-4.4 -2,-5.5 -0.5,-9.5 0.6,-1.7 1,-2.2 1,-4.7 0,-1.1 0.2,-4.6 0.6,-5.3 1.5,-2.5 1.9,-5.6 3.1,-8.4 1.2,-2.8 5,-2.6 8.3,-3.5 l 1.2,1.3 -1,0.3 0.8,1.8 c -1.7,2 -2.9,2.9 -4.5,5 -0.8,1 -3.8,6.3 -0.6,6.3 h 1 c 3.9,0 5.1,-7.1 6.9,-9.2 0.4,4.4 1.2,9.5 4.4,11.2 1.7,-0.4 2.2,-1.1 2.6,-2.8 0.7,0.2 0.5,0.3 1,0.3 1.3,0 2,-1.1 2,-2.3 V 85.8 c 0,-2.1 -1.2,-2.4 -1.5,-3.8 0.8,0.4 2.2,1 3.3,1 h 0.5 c 1.2,0 1.3,-0.6 1.8,-1.3 -0.2,-2.5 -1.5,-3.9 -3.5,-4.6 -1.3,-0.4 -5.2,-1.7 -6.7,-1.7 l 0.5,-1 h -0.7 l 0.8,-1.6 -4.9,1 c -0.9,-0.6 -1.2,-1.5 -2.6,-1.5 h -1.8 C 92.3,72.2 88.7,75.8 88.7,82.9 l 0,0 z"}],i["AC.IC.FLOOD"]=[{type:"path",stroke:!1,d:"M77.2,92.9L77.3,92.8L99.3,72.5L99.7,72.1L100,72.1L100.4,72.5L122.4,92.8L123.5,93.9L122.4,93.9L122.4,115.902C123.023,115.106 123.657,114.5 124.4,114.5C125.454,114.199 124.857,116.712 125.5,117.6C125.988,118.273 126.805,118.721 127.609,118.928C130.146,119.58 132.747,117.303 134.5,116.2C135.043,115.859 136.356,115.26 136.4,115.9C136.652,119.558 136.526,123.235 136.4,126.9L63.7,126.9L63.7,114.9C64.819,117.943 66.835,120.948 70.637,119.05C72.357,118.192 73.209,115.745 75.1,115.4C75.464,115.334 76.266,116.335 77.1,117.278L77.1,93.9L76.2,93.9L77.1,93L77.1,92.9L77.2,92.9ZM121.2,117.544L121.2,94.1L78.3,94.1L78.3,118.49C78.521,118.667 78.727,118.795 78.911,118.845C83.407,120.084 82.345,116.009 86.9,115.5C87.588,115.423 90.549,119.114 91.583,119.536C95.694,121.215 95.826,116.694 98.9,115.9C100.074,115.597 100.538,118.237 100.9,118.5C101.86,119.198 103.028,119.651 104.2,119.837C109.33,120.655 108.685,117.216 111.9,114.9C112.848,114.217 113.556,116.602 113.563,116.613C115.1,119.229 115.092,120.273 118.659,119.606C119.666,119.418 120.465,118.529 121.2,117.544ZM99.75,73.846L99.8,73.8L99.7,73.8L99.75,73.846L79.3,92.7L120.2,92.7L99.75,73.846Z"}],i["AC.IC.INVERSION"]=[{type:"path",stroke:!1,d:"M 69.5,87.9 C 69.5,86.7 73.6,83.9 75.5,83.9 h 0.3 c 3.3,0 9,9.1 15.2,9.1 h 1.8 c 5.4,0 11.3,-9.1 14.9,-9.1 3.5,0 8.8,9.1 15.2,9.1 h 0.9 c 8.5,0 10.5,-4.4 15.5,-7 l -5.3,-6.4 c -3.4,1.8 -4.1,4.6 -9.5,5.3 -2.2,0.3 -6.6,-3.9 -8.3,-5.5 -8,-6.8 -13,-3 -19.4,2 -3.9,3.1 -3.9,5.3 -8.5,1.3 -2.2,-1.8 -5.6,-4.8 -8.2,-6 -3.8,-1.8 -8.6,-0.7 -11.4,1.2 -1.6,1 -7.3,5.2 -7.3,6.9 v 52.2 h 8.2 V 87.9 z m -9.4,-16.4 79.9,0 0,-8.5 -79.9,0 z"}],i["AC.IC.TSUNAMI"]=[{type:"path",stroke:!1,d:"m 63,122 39.5,-0.1 30.8,0.3 c -7.1,0 -12.8,-1.7 -16.9,-4.8 -3.7,-2.9 -7.7,-8 -7.7,-14.4 0,-9.1 6.9,-16.5 15.8,-16.5 h 0.7 c 6.5,0 8.2,2.8 11.8,5.3 -2,-8.6 -10.6,-14.2 -21.4,-14.2 h -0.2 c -18.2,0 -44.9,33 -52.4,44.3 l 0,0 0,0 z"}],i["AC.IC.BIRD"]=[{type:"path",stroke:!1,d:"m 81.6,92.5 -18.4,2.9 v 0.3 l 6.6,0.5 c -0.7,0.5 -3.3,1.1 -4.5,1.5 -2.6,0.9 -2,0.3 -3.5,2.4 l 3.4,0.1 -1,1 c 1.8,0 3.3,0.1 4.8,0.2 1.4,0.1 1.9,-1.3 3.5,-1.4 3,-0.2 5.7,0.2 9.3,0.3 l -0.8,0.5 c 0.6,0.1 0.7,0.2 1.4,0.2 h 1.6 l 0.1,0.9 2.9,1.2 1.6,-0.1 c 1.6,1.1 1.9,2.3 5.2,2.4 0.2,2.7 0.6,3.8 3,4.4 v 0.8 c 0,2.2 0.2,4.8 2.1,5 l 1.2,5.3 h -0.4 v 0.4 c -0.3,-0.3 -1.4,-1.2 -1.8,-1.2 h -0.2 c -0.5,0 -0.5,0.1 -1,0.2 0.6,0.8 2.7,1.7 3.1,2.7 0.5,1.6 0.1,3.8 0.2,5.3 l 0.9,0.6 0.8,-0.1 0.1,-0.8 -0.1,-2.7 c 0.7,0.5 2.7,3 3.3,3 h 1 c -0.5,-2 -1.8,-2.4 -2.7,-3.9 l 3.7,1.1 c -1,-1.5 -0.9,-1.8 -2.9,-2.3 -3.1,-0.8 -1.8,-1.9 -3.1,-2.2 l -1,-5.4 c 1,-0.2 1.4,-1 1.4,-2.2 l 0.1,-1.6 -0.3,-2.6 h 1 c 0.7,0 0.7,-0.2 1.4,-0.4 0.1,1.6 1.2,3.3 2.7,3.4 l 3.1,6.3 c -0.3,0.3 -0.4,0.3 -0.4,0.8 v 0.7 l -4.4,-0.9 v 0.2 c 0.8,0.7 3.7,1.7 5.1,2.8 1.1,0.8 1.2,0.6 2,1.9 0.3,0.5 1.3,2.2 1.9,2.2 h 0.8 l 0.2,-0.1 -1.7,-3.2 4.3,1.9 c -0.1,-2.1 -2.1,-1.5 -3.6,-2.8 h 3 c -1.3,-1.1 -1.6,-0.9 -3.5,-1.2 -1.6,-0.2 -1.7,-1.2 -2.7,-2.1 -1.1,-1.2 -2,-4.9 -2.9,-6.6 1.2,-1.8 1,-1.4 1,-4.4 4.8,-2.3 5.6,-2.1 9.3,-5.9 2.7,-2.7 3.9,-6.1 5.8,-9.7 0.9,-1.8 1.5,-3.3 2.2,-5.2 0.7,-1.8 0.7,-4.7 1.4,-6.3 2.3,-4.6 9,-3.2 10.3,-5.2 l -4.4,0.2 v -0.2 l 5,-0.6 c -2.2,-1.9 -4.8,-1.4 -8.3,-1.8 -2.1,-0.3 -2.9,0.7 -4.4,-0.3 -1.4,-1 -1.6,-1.2 -3.7,-1.5 -3.1,-0.5 -5.6,1.2 -7.4,2.5 -1.7,1.3 -3.2,5.2 -4.2,6.1 -0.3,0.2 -6.1,2.7 -7.1,3.2 -2.9,1.5 -3.5,2.5 -7.3,3.1 -6.3,1 -9.9,3.4 -14.2,6.3 l 0,0 z"}],i["AC.IC.INSECT"]=[{type:"path",stroke:!1,d:"m 77.4,88.8 0.1,-0.3 6.1,4.9 -0.1,0.2 c -2.2,1.5 -7.7,9 -10,9 l -1.6,-0.1 5.6,-13.7 z m 7.1,3.3 c -0.4,-1.7 -5,-6.4 -6.7,-7.2 -0.4,0.3 -1.8,1 -1.8,1.6 0,0.8 0.3,1 0.5,1.5 l -5.6,14.7 h -1 c 0.2,0.9 0.5,0.7 0.5,1 0,0.3 -3,7.8 -3.3,8.7 -0.6,1.4 -1,2.7 -1.6,4.2 -0.3,0.8 -0.6,1.6 -0.9,2.2 -0.5,1.1 -0.6,0.3 -1.4,1.7 l -1.3,0.3 c 0.3,0.5 1.8,0.5 2.5,0.4 1.2,-0.2 0.4,-1 0.8,-2.2 0.7,-1.8 1.4,-3.5 2.1,-5.4 0.5,-1.2 3.7,-10.3 4.6,-10.3 h 1.3 c 0.8,0 1,0.3 1.5,0.5 l 2.3,-2.8 c 2.7,1.8 8.5,4.6 12.8,4.6 h 0.7 l 0.2,-0.1 -3.5,-5 -9.9,-0.1 6.5,-6.3 c 4.3,2.9 11.7,16.9 14.9,16.9 h 0.3 c 1.4,0 1.3,-0.6 1.8,-1.6 -0.9,-3.7 -4.8,-6.3 -7.3,-8.5 -2.4,-2 -6.1,-6.5 -8.3,-7.9 1.2,-1.7 10.3,-10.8 12.2,-11.3 l 0.9,7.7 0.1,2.9 -1.2,7.4 h -1.8 l 5.2,4.4 7.2,-3.9 c -0.5,2.1 -0.3,2.5 -2.2,3.4 -0.6,0.3 -3.7,1.9 -3.7,2.3 0,0.5 0.7,1.7 0.7,3.1 0,2.9 -3.1,4.4 -5.8,3.3 -2.1,-1 -4.9,-5.1 -5.5,-5.1 h -1 c -4.6,0 -6.7,1.6 -10.5,1.6 h -0.5 c -1.9,0 -2.5,-0.7 -4.1,-0.7 h -0.5 c -0.6,0 -1,0.4 -1,1 0,3.2 12.3,4.7 16.9,4.6 l 13.1,-0.3 v 0.3 c -0.9,1.3 -5.8,4.8 -8,4.8 -0.1,0.2 -0.5,0.7 -0.5,0.8 0,0.7 0.1,0.7 0.3,1.3 0.7,0.1 0.5,0.3 1,0.3 0.5,0 0.5,-0.2 1,-0.5 v -1.3 l 7.7,-5.4 -1.6,6.1 c -0.9,0.1 -1.3,0.4 -1.3,1.3 0,0.9 0.5,0.7 1.4,1.2 l 1.2,-1.4 c 0,-0.2 -0.7,-1.3 -0.7,-1.4 0,-1.3 2.4,-7.6 2.8,-9.5 l 15.6,-0.5 1.2,8.4 -0.4,0.1 c 0.3,0.5 0.3,1 1,1 1,0 1.1,-0.3 1.6,-0.7 -0.5,-1 -0.5,-1.9 -1.7,-1.3 l -0.8,-6.7 4.8,5.5 -0.7,0.8 1.4,1.2 c 0.5,-0.3 1,-0.2 1,-1 v -0.5 c 0,-0.9 -0.9,-1 -1.6,-1.2 l -4.5,-5 0.3,-1 h -8.5 c 0,-5 2,-8.2 2.3,-12.4 l -9.2,0.4 -0.8,2.5 h -4.6 c -1.8,0 -2.8,-8 -2.9,-10.3 0,-2.4 -0.3,-4.1 -0.2,-6.4 0.1,-1.4 1,-5.1 -1,-5.1 h -0.7 c -1,0 -1.3,1 -1.6,1.8 -0.3,1 -1,1.4 -1.6,2 -1.2,1.3 -2.3,2.4 -3.5,3.6 -1.2,1.2 -6.2,6.7 -7.4,7 l 0,0 z m 37.9,8 c 0,-0.3 0.3,-0.5 0.7,-0.5 h 0.7 l 0.1,0.5 -0.3,1 h -1 c -0.1,-0.7 -0.3,-0.4 -0.3,-1 z m 3.6,-1.8 c -0.2,0 -1.6,-1.8 -3.3,-1.8 h -0.5 c -2,0 -2,2.2 -2.5,3.9 -0.5,1.4 -1.4,3.7 -1.4,5.4 0,0.6 0.4,1 1,1 2.4,0 6.4,-5.2 6.9,-7.4 3.9,0 11.1,-1.1 11.8,-3.9 -2.6,0.7 -2.9,2.4 -8,2.8 1.8,-1.6 5.6,-4.3 5.9,-7.2 h -0.5 c -0.8,3.1 -5.6,7.2 -9.5,7.2 z"}],i["AC.IC.MICROBIAL"]=[{type:"path",stroke:!1,d:"m 83.9,93.3 c -3.3,0 -6,2.7 -6,6 0,3.3 2.7,6 6,6 3.3,0 6,-2.7 6,-6 0,-3.3 -2.7,-6 -6,-6 z M 100,85.5 c -11.1,0 -21.2,1.5 -28.6,4.1 -3.7,1.3 -6.7,2.8 -8.8,4.5 -2.1,1.7 -3.4,3.7 -3.4,5.9 0,2.2 1.3,4.2 3.4,5.9 2.1,1.7 5.1,3.2 8.8,4.5 7.4,2.5 17.5,4.1 28.6,4.1 11.1,0 21.2,-1.5 28.6,-4.1 3.7,-1.3 6.7,-2.8 8.8,-4.5 2.1,-1.7 3.4,-3.7 3.4,-5.9 0,-2.2 -1.3,-4.2 -3.4,-5.9 -2.1,-1.7 -5.1,-3.2 -8.8,-4.5 C 121.2,87.1 111.1,85.5 100,85.5 z m 0,1.4 c 11,0 21,1.5 28.2,4 3.6,1.2 6.5,2.7 8.4,4.3 1.9,1.6 2.9,3.2 2.9,4.8 0,1.6 -1,3.3 -2.9,4.8 -1.9,1.6 -4.8,3 -8.4,4.3 -7.2,2.5 -17.1,4 -28.2,4 -11,0 -21,-1.5 -28.2,-4 -3.6,-1.2 -6.5,-2.7 -8.4,-4.3 -1.9,-1.6 -2.9,-3.2 -2.9,-4.8 0,-1.6 1,-3.3 2.9,-4.8 1.9,-1.6 4.8,-3 8.4,-4.3 7.2,-2.5 17.1,-4 28.2,-4 z"}],i["AC.IC.REPTILE"]=[{type:"path",stroke:!1,d:"m 93.5,82.3 c 0,-2 1.8,-2.7 1.8,-4.3 0,-1 -0.6,-1.5 -1.2,-2 -2.8,0.3 -6.5,0.6 -7.4,2.7 -0.5,1.2 -0.5,2.4 -1.2,3.9 -0.5,1 -1.2,2.4 -1.2,3.8 0,0.8 0.4,0.7 0.4,1.6 v 0.8 c 0,2.2 -2.4,3.5 -0.6,6.1 -0.2,0.3 -2,1.5 -2.4,1.7 -1.7,1 -1.8,-0.6 -2.6,-0.6 h -0.8 l -0.3,-1.2 c -0.5,-0.3 -1,-0.8 -1.7,-0.8 -0.8,0 -0.8,0.5 -0.6,1 l -2.1,0.4 -0.8,2.3 h 1 c 0.9,0 1.4,0.4 1.6,1.2 l -1.5,1.2 -0.1,0.4 c 2.8,0.3 4.6,-0.6 7.2,-1.2 1.5,-0.4 6.8,-0.6 7.3,-1 l 0.1,-2.2 c 1,0.3 2,1.3 3.1,1.7 1.2,0.4 1.7,0.8 3.1,1.2 2.4,0.6 4.5,1.2 7.7,1.2 h 0.6 l 6.1,-0.6 c 0,2.6 2.3,2.5 2.8,4.5 -1.3,-0.3 -2.3,-2 -3.5,-2 -0.1,0 -0.4,0.1 -0.6,0.2 l 0.3,1.2 -1.6,0.3 v 0.8 l 0.6,0.4 -0.9,0.6 1,1 c -0.2,0.8 -0.7,0.6 -0.7,1.3 0,0.4 0.1,0.6 0.6,0.6 0.6,0 1.6,-1 2.8,-1 1.9,0 8.3,0.8 8.3,-0.8 v -0.2 c 0,-1.5 -3.5,-1.6 -3.3,-5.5 5,2.6 9.3,7.4 4.5,13.6 -1.5,2 -4.1,3.6 -6.7,4.5 -1.4,0.5 -7.4,1.9 -9.3,1.5 -4.2,-0.8 -5.4,-0.8 -8.8,-2.4 -2.6,-1.2 -4.7,-2.5 -7,-4 -3.9,-2.4 -10,-6.1 -16.1,-6.1 -5,0 -11.4,3.1 -11.4,7.9 1.2,-0.6 1.3,-1.3 2.1,-2.2 0.5,-0.6 1.7,-1.3 2.4,-1.7 1.5,-1 3.9,-1.8 6.5,-1.8 h 1 c 4.4,0 11.6,4.7 14.5,6.7 4.5,3.1 8.1,5.5 14.7,6.7 7,1.2 12.7,-0.1 17.4,-2.8 1.9,-1.1 4.3,-3.3 5.5,-5.1 1,-1.6 2.9,-5.4 2.7,-8 l -0.3,-2.6 c 0.3,0.1 2.8,3.7 3.6,4.5 0.8,0.8 3.8,2.5 5.3,2.5 1,0 4.4,-2.2 4.7,-2.9 l -1.3,-0.6 1.2,-1 c -1.5,-1 -0.8,-0.6 -2.4,-0.6 h -1 c 0,-1.4 -0.3,-1.8 -1.3,-1.6 l 0.2,0.1 -1.7,3.4 c -1.4,0 -2.9,-0.9 -3.6,-1.8 0,-0.1 -1.3,-3.8 -1.3,-3.9 -0.6,-2 -0.6,-2.2 -1.8,-3.6 -1.2,-1.3 -1.9,-1.2 -3.4,-1.9 l -0.1,0.6 c -0.6,-1.8 -6.2,-6.5 -8.1,-7.4 -2.2,-1.2 -3.2,-1.2 -6,-1.7 -2.1,-0.3 -5.4,0.3 -7,-0.5 0.4,-1.5 1.6,-0.6 1.6,-2.2 0,-0.5 -0.7,-0.4 -1.2,-0.4 0.6,-1.2 -0.3,-1 -1.3,-1 0.1,-0.3 0.4,-0.6 0.4,-1 0,-0.3 -0.3,-0.4 -0.6,-0.4 -0.4,0 0,0.6 -1.3,0.6 -0.3,-1 -0.3,-1.3 -1.5,-1.4 v 1.6 h -1.3 v 0.6 c 0,0.8 0.6,1.5 1,2.2 -0.4,0.7 -0.3,2 -1.4,2 -0.6,0 -1.8,-1.5 -3.1,-1.9 -1.3,-0.4 -3,0.5 -3,-1.5 -0,-0.9 2.1,-2.5 2.8,-3.5 l 0,0 z"}],i["AC.IC.RODENT"]=[{type:"path",stroke:!1,d:"m 117.2,80.3 c 0.6,1.2 0.6,1.7 1.5,2.6 0.6,0.7 1.8,1.2 1.9,2.2 -2,-0.1 -4.2,-3.3 -4.4,-5.3 -2.1,-0.5 -8.4,-3.6 -10.9,-4.7 -3.1,-1.3 -8.3,-2.7 -12.7,-2.7 h -2.2 c -4,0 -9,2.5 -11.3,4.2 -3,2.2 -5.2,5.2 -5.2,10.4 v 0.7 c -4.6,1.1 -11.7,8.4 -11.7,13.9 v 2.4 c 0,6.2 7.7,10 11.8,12.7 2.5,1.7 4.7,3.3 7,5.1 2.2,1.7 4.7,4.2 6.7,5.5 -2.1,-9 -22.4,-12.7 -22.4,-25.1 0,-4.5 4.9,-9.3 8.5,-10.2 -0.1,0.6 -0.3,0.6 -0.3,1.3 v 0.5 c 0,4.5 7.8,4.1 11.5,3 5.1,-1.5 8.1,-2.2 13.6,-1.2 5.4,1.1 8.3,1.5 12.7,3.6 3.7,1.9 2,1.2 4.2,3.8 1.1,1.3 1,1.1 2.9,1.3 0.8,0.1 1.8,1 2.4,1.5 h 1.7 c -1.3,-2.6 -4.9,-2.9 -5.6,-5.8 0.8,-1.5 1.7,-1.7 3.9,-1.7 0.8,0 1,0.2 1.7,0.3 -0.3,-0.6 -0.6,-1.7 0.5,-1.7 h 1.9 c 4.5,0 9,2.5 12.7,0 0,-3 0.4,-2.2 -0.9,-4.9 -0.5,-0.8 -2.1,-2.7 -2.8,-3.4 -1.6,-1.5 -5.7,-4.1 -6.7,-5.5 0,-2.8 -0.4,-3.4 -2.7,-3.9 l -0.5,1 0.5,2.7 -1,0.3 v 0.9 h -0.8 c -0.2,-2.4 -1.2,-5.8 -3.6,-5.8 h -0.2 c -1.8,-4e-4 -1.5,1 -2,1.9 z m 9.5,24.6 h 1.2 c -0.2,-2.6 -5.1,-2.8 -5.4,-5.4 l -2.2,0.3 c 0.2,1.5 1.1,2.9 2.4,3.5 0.9,0.3 1.5,0 2.3,0.6 0.4,0.3 1.1,1 1.7,1 z m -45.1,-6.1 c 1.2,1.8 5.9,4.2 8.8,4.2 1,0 1.6,-0.8 1.9,-1.5 -0.9,-1.3 -2.9,-2.8 -4.7,-3.1 -3.7,-0.8 -2.9,0.1 -6,0.4 l 0,0 z m 9.5,-1.9 c 1.3,2 5,2.9 8.3,2.9 0.8,0 1.4,-0.4 1.9,-0.7 -2,-2.9 -6.1,-2.6 -10.2,-2.2 z"}],i["AC.IC.PHARMACY"]=[{type:"path",stroke:!1,d:"m 83.3,74.5 h 13.2 c 3,0 6.2,3.8 6,7.3 -0.1,3.6 -2.9,6.6 -6.5,6.6 H 83.3 V 74.5 z m -8.7,45.9 h 8.7 V 98 h 2.4 c 0.6,0 13.6,16.1 13.6,17.2 0,0.6 -13.6,16.6 -15,19.3 l 10.5,-0.1 10.3,-12.2 9.6,12.3 10.9,-0 -15.2,-19.3 14.4,-17.8 -10.2,-0.1 -9.7,10.8 -7.4,-10 c 8.5,-2 14.1,-6.8 14.1,-17.2 0,-8.1 -7,-15.3 -15,-15.3 H 74.6 v 54.8 z"}],i["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 99.6,107.1 h -14.8 v 31.7 h 32 v -31.7 h -14.8 V 95.2 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 h -2.3 v 24.5 z m -3.1,-45 -5.6,14.8 1.7,0 1.3,-3.8 0.1,-0.1 0.1,0 6.8,0 0.1,0 0.1,0.1 1.3,3.8 1.7,0 -5.6,-14.8 -2.1,0 z m 0.8,1.8 0.2,0.1 0.2,-0.1 2.8,7.5 0.1,0.3 -0.3,0 -5.6,0 -0.3,0 0.1,-0.3 2.8,-7.5 z m -14.8,-1.8 8.3,0 0,1.3 -6.5,0 -0.2,0 0,0.2 0,4.5 0,0.2 0.2,0 5.8,0 0,1.3 -5.8,0 -0.2,0 0,0.2 0,7 -1.6,0 0,-14.8 z m 30.3,-0.3 c 0.9,1.5e-5 1.7,0.1 2.5,0.4 l 0,0 c 0.8,0.2 1.4,0.6 2.1,1 l 0,1.6 c -0.6,-0.5 -1.3,-0.9 -1.9,-1.2 -0.8,-0.3 -1.7,-0.5 -2.6,-0.5 -1.8,1.4e-5 -3.2,0.6 -4.1,1.7 -1,1.1 -1.4,2.7 -1.4,4.7 -1e-5,2 0.5,3.6 1.4,4.7 1,1.1 2.4,1.7 4.1,1.6 0.9,2e-6 1.8,-0.2 2.6,-0.5 0.7,-0.3 1.3,-0.7 1.9,-1.2 l 0,1.6 c -0.7,0.4 -1.4,0.8 -2.1,1 -0.8,0.2 -1.6,0.4 -2.5,0.4 -2.3,0 -4,-0.7 -5.3,-2 -1.3,-1.4 -1.9,-3.2 -1.9,-5.6 0,-2.4 0.6,-4.3 1.9,-5.6 1.3,-1.4 3,-2 5.3,-2 z"}],i["ATMOSPHERIC.IC.DRIZZLE.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 100,82.7 c -5.5,0 -10,4.5 -10,10 0,5.5 4.5,10 10,10 0.1,0 0.1,0 0.2,0 l -0.2,0.2 c 0.9,5 -8.4,14.4 -8.4,14.4 12.8,0.1 18.4,-13.4 18.3,-23.4 l -0,0 c 0,-0.4 0.1,-0.8 0.1,-1.2 0,-5.5 -4.5,-10 -10,-10 z"}],i["ATMOSPHERIC.IC.FOG.SKY OBSCURED"]=[{type:"path",stroke:!1,fill:"rgb(255, 247, 0)",d:"m 49.6,59.7 0,8 100.9,0 0,-8 -100.9,0 z m 0,71.6 0,8 100.9,0 0,-8 -100.9,0 z m 0,-35.6 0,8 100.9,0 0,-8 -100.9,0 z"}],i["ATMOSPHERIC.IC.HAIL.LIGHT NOT ASSOCIATED WITH THUNDER"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"m 100,45.5 -0.9,2.1 -16,36 -0.6,1.4 1.5,0 32,0 1.5,0 -0.6,-1.4 -16,-36 L 100,45.5 z m -21.4,46.7 0.4,1.3 20,60 0.9,2.9 0.9,-2.9 20,-60 0.4,-1.3 -1.4,0 -40,0 -1.4,0 z m 2.8,2 37.2,0 L 100,150 81.4,94.1 z"}],i["ATMOSPHERIC.IC.RAIN.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 100,79.8 c -11.2,0 -20.2,9 -20.2,20.2 0,11.2 9,20.2 20.2,20.2 11.2,0 20.2,-9 20.2,-20.2 0,-11.2 -9,-20.2 -20.2,-20.2 z"}],i["ATMOSPHERIC.IC.DUST OR SAND.LIGHT TO MODERATE"]=[{type:"path",stroke:!1,fill:"rgb(173, 105, 75)",d:"m 140.7,85 -2,2 13,13 -13,13 2,2 14,-14 1,-1 -1,-1 L 140.7,85 z m -93.5,13.6 0,2.8 106.5,0 0,-2.8 -106.5,0 z M 98.5,62.3 c -3.2,0 -6.4,0.8 -9.2,2.2 -3.7,1.8 -6.9,4.4 -9.3,7.3 -2.3,2.9 -3.9,6.1 -3.9,9.3 0,5.6 2.9,9.9 6.9,13.2 4,3.3 9,5.8 13.9,8.3 4.9,2.5 9.7,4.9 13.1,7.7 3.4,2.8 5.4,5.8 5.4,10.1 0,3.6 -4,9 -10,11.6 -6,2.6 -13.6,2.7 -20.9,-3.4 l -2.7,3.2 c 8.4,7.1 18,7.2 25.3,4 7.2,-3.1 12.5,-9.2 12.5,-15.4 0,-5.6 -2.9,-10 -6.9,-13.3 -4,-3.3 -9,-5.8 -13.9,-8.2 -4.9,-2.5 -9.7,-4.9 -13.1,-7.7 -3.4,-2.8 -5.4,-5.8 -5.4,-10 0,-1.7 1,-4.3 2.9,-6.7 1.9,-2.4 4.7,-4.7 7.8,-6.2 6.2,-3 13.5,-3.1 19.9,4.4 l 3.2,-2.7 C 109.5,64.4 103.9,62.3 98.5,62.3 z"}],i["ATMOSPHERIC.IC.SNOW.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 111.5,78.9 -26.4,40 3.3,2.2 26.4,-40 -3.3,-2.2 z m -23.1,0 -3.3,2.2 26.4,40 3.3,-2.2 -26.4,-40 z M 80,98 l 0,4 40,0 0,-4 -40,0 z"}],i["ATMOSPHERIC.IC.STORMS.THUNDERSTORM LIGHT TO MODERATE - WITH HAIL"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 101 51.9 L 99.7 54.4 L 85.8 82.3 L 84.8 84.3 L 87 84.3 L 114.9 84.3 L 117.2 84.3 L 116.2 82.3 L 102.2 54.4 L 101 51.9 z M 101 58.1 L 112.7 81.5 L 89.3 81.5 L 101 58.1 z M 78.3 87.7 L 78.3 90.5 L 83.9 90.5 L 83.9 145 L 86.7 145 L 86.7 90.5 L 117.8 90.5 L 102.8 116.4 L 102.4 117.1 L 102.9 117.8 L 117.8 140.9 L 111.2 136.8 L 109.8 139.2 L 120.9 146.2 L 123.3 147.7 L 123 144.9 L 121.7 130.9 L 118.9 131.2 L 119.6 138.6 L 105.7 117 L 121.5 89.8 L 122.7 87.7 L 120.3 87.7 L 78.3 87.7 z "}],i["ATMOSPHERIC.IC.STORMS.FUNNEL CLOUD (TORNADO/WATERSPOUT)"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 125.7,59.1 112.4,72.4 112,72.8 l 0,0.6 0,53.3 0,0.6 0.4,0.4 13.3,13.3 1.9,-1.9 -12.9,-12.9 0,-52.2 12.9,-12.9 -1.9,-1.9 z m -51.5,0 -1.9,1.9 12.9,12.9 0,52.2 L 72.4,139.1 74.3,140.9 87.6,127.6 88,127.2 l 0,-0.6 0,-53.3 0,-0.6 L 87.6,72.4 74.3,59.1 z"}],i["ATMOSPHERIC.IC.TROPICAL STORM SYSTEMS.TROPICAL STORM"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 112.1 55 C 96.9 59.9 76.7 81.8 82.2 101.4 C 82.9 110.6 90.6 117.9 100 117.9 C 100 117.9 100 117.9 100.1 117.9 C 99.3 128.2 87.9 145 87.9 145 C 103.1 140.1 123.3 118.2 117.8 98.6 C 117.1 89.4 109.4 82.1 100 82.1 C 100 82.1 100 82.1 99.9 82.1 C 100.7 71.8 112.1 55 112.1 55 z M 100 84.5 C 106.8 84.5 112.5 88.8 114.6 94.8 C 114.8 95.2 114.9 95.6 115 96 C 115 96.1 115 96.1 115 96.2 C 115.1 96.6 115.2 96.9 115.3 97.3 C 115.4 98.1 115.5 99.1 115.5 100 C 115.5 101.1 115.4 102.1 115.2 103.1 C 115 104.1 114.7 105 114.4 105.8 C 114.4 105.9 114.3 105.9 114.3 106 C 114.1 106.4 114 106.7 113.8 107.1 C 113.7 107.2 113.7 107.3 113.7 107.3 C 113.6 107.4 113.6 107.5 113.5 107.6 C 113.3 107.9 113.1 108.3 112.9 108.6 C 112.4 109.3 111.9 110 111.3 110.6 C 111.2 110.7 111.1 110.8 111.1 110.9 C 110.8 111.1 110.5 111.4 110.3 111.6 C 110.2 111.7 110.2 111.7 110.1 111.8 C 109.8 112 109.5 112.3 109.2 112.5 C 109.1 112.5 109.1 112.5 109.1 112.5 C 108.9 112.7 108.6 112.9 108.4 113 C 108.1 113.2 107.8 113.4 107.5 113.6 C 107.4 113.6 107.4 113.6 107.4 113.7 C 106.6 114.1 105.7 114.4 104.9 114.7 C 104.7 114.8 104.5 114.8 104.3 114.9 C 104 115 103.6 115.1 103.3 115.2 C 103.2 115.2 103.1 115.2 103.1 115.2 C 102.1 115.4 101.1 115.5 100 115.5 C 93.3 115.5 87.6 111.3 85.4 105.3 C 85.4 105.3 85.4 105.2 85.4 105.2 C 85.3 104.8 85.2 104.5 85.1 104.2 C 85 104 85 103.9 85 103.8 C 84.9 103.5 84.8 103.2 84.8 102.9 C 84.7 102.5 84.6 102 84.6 101.6 C 84.5 101.1 84.5 100.5 84.5 100 C 84.5 99 84.6 98 84.8 97 C 84.8 97 84.8 96.9 84.8 96.9 C 84.9 96.4 85 96 85.2 95.6 C 85.3 95.2 85.4 94.9 85.5 94.5 C 85.6 94.3 85.6 94.2 85.7 94 C 85.7 93.9 85.8 93.8 85.8 93.8 C 86 93.4 86.2 93 86.3 92.7 C 86.4 92.6 86.4 92.5 86.5 92.4 C 86.7 92.1 86.9 91.7 87.1 91.4 C 87.3 91.1 87.5 90.8 87.8 90.5 C 88 90.2 88.2 90 88.4 89.7 C 88.6 89.5 88.8 89.3 88.9 89.1 C 89 89 89.1 89 89.2 88.9 C 89.4 88.7 89.7 88.4 89.9 88.2 C 90.2 88 90.5 87.8 90.8 87.5 C 90.8 87.5 90.9 87.5 90.9 87.5 C 91.1 87.3 91.4 87.1 91.6 87 C 91.9 86.8 92.2 86.6 92.5 86.4 C 92.6 86.4 92.6 86.4 92.6 86.3 C 93.1 86.1 93.5 85.9 94 85.7 C 94.4 85.6 94.7 85.4 95.1 85.3 C 95.3 85.2 95.5 85.2 95.7 85.1 C 96 85 96.4 84.9 96.8 84.8 C 96.8 84.8 96.8 84.8 96.9 84.8 C 96.9 84.8 96.9 84.8 96.9 84.8 C 97.4 84.7 97.9 84.6 98.4 84.6 C 98.9 84.5 99.5 84.5 100 84.5 z "}],i["AC.IC.EMT STATION LOCATION"]=[{type:"path",stroke:!1,d:"M 100 55 L 70 80 L 75 80 L 75 125 L 125 125 L 125 80 L 130 80 L 100 55 z M 95 80 L 105 80 L 105 91.3 L 114.8 85.7 L 119.8 94.3 L 110 100 L 119.8 105.7 L 114.8 114.3 L 105 108.7 L 105 120 L 95 120 L 95 108.7 L 85.2 114.3 L 80.2 105.7 L 90 100 L 80.2 94.3 L 85.2 85.7 L 95 91.3 L 95 80 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"M 95 80 L 95 91.3 L 85.2 85.7 L 80.2 94.3 L 90 100 L 80.2 105.7 L 85.2 114.3 L 95 108.7 L 95 120 L 105 120 L 105 108.7 L 114.8 114.3 L 119.8 105.7 L 110 100 L 119.8 94.3 L 114.8 85.7 L 105 91.3 L 105 80 L 95 80 z "}],i["AC.IC.HEALTH DEPARTMENT FACILITY"]=[{type:"path",stroke:!1,d:"M 131.4,83.6 100,68.4 68.5,83.5 z m -26.4,14.6 0,-9.7 -10.1,0 0,9.7 -9.5,0 0,10.4 9.5,0 0,9.5 10.1,0 0,-9.5 9.6,0 0,-10.4 z m -27.2,19.5 0,-27.8 1.4,0 0,-3.7 -7.3,0 0,3.7 1.2,0 0,27.8 -1.2,0 0,3.8 7.3,0 0,-3.8 z m 48.7,0 0,-27.8 1.4,0 0,-3.7 -7.3,0 0,3.7 1.2,0 0,27.8 -1.2,0 0,3.8 7.3,0 0,-3.8 z m -56.4,5.1 0,3 59.4,0 0,-3 z m -1.8,6.1 0,2.8 63.2,0 0,-2.8 z"}],i["AC.IC.MEDICAL FACILITIES OUTPATIENT"]=[{type:"path",stroke:!1,d:"m 81.8,63.6 26.6,9 0,63.9 -26.6,-9.1 v -63.8 l 0,0 z m -1.6,65 29.9,10.4 v -10.6 h 9.8 V 61 H 80.2 v 67.6 l 0,0 z m 21.4,-18.1 c 0,1.1 1,2.6 2.2,2.6 0.8,0 1.2,-0.8 1.2,-1.6 v -0.4 c 0,-1.2 -1.1,-3 -2,-3 -0.8,0 -1.4,0.8 -1.4,1.6 v 0.8 H 101.5 z M 85.9,90.9 c 0.9,0.1 5.3,1.8 5.3,2.4 v 7.1 l 5.7,2.2 v -7.5 l 5.5,1.9 V 89.1 C 101.5,88.8 96.9,87.2 96.9,86.6 V 79.5 L 91.2,77.6 v 7.4 l -5.3,-2 v 7.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 81.8 63.6 L 81.8 127.4 L 108.4 136.6 L 108.4 72.7 L 81.8 63.6 z M 91.2 77.6 L 96.9 79.5 L 96.9 86.6 C 96.9 87.2 101.5 88.9 102.3 89.1 L 102.3 97 L 96.8 95.2 L 96.8 102.6 L 91.1 100.4 L 91.1 93.3 C 91.1 92.6 86.8 91 85.9 90.9 L 85.9 83 L 91.2 85 L 91.2 77.6 z M 102.9 108.1 C 103.9 108.1 105 109.9 105 111.2 L 105 111.6 C 105 112.4 104.6 113.2 103.8 113.2 C 102.5 113.2 101.5 111.6 101.5 110.6 L 101.5 110.6 L 101.5 109.8 C 101.5 108.9 102.1 108.1 102.9 108.1 z "}],i["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]=[{type:"path",stroke:!1,d:"m 73.7,89.7 c 0.4,4.9 2.3,11.3 3.4,15.6 1.4,5.7 3.5,8.7 6.1,13.1 2.2,3.6 3.4,9.6 5.6,13.4 0.7,1.3 2.8,5.3 3.6,6 0.5,0.4 5.5,4 5.6,4 1.6,0 9.7,-0.4 10.4,-0.7 0.3,-0.1 4.1,-6.6 4.1,-7 v -3 h -7.8 c -2.7,0 -5.6,-1.3 -8.4,-1.3 V 112.6 c 0,-2.4 1.3,-17.3 2.1,-18 0.8,-0.7 11.4,-8.2 11.9,-8.3 l -1,-8.5 c -0.5,0.2 -5.6,1 -6,0.9 -1,-0.2 -4.7,-1.4 -5.5,-1.8 -1.9,1.1 -4.4,1.8 -6.5,2.7 -1.6,0.7 -3.5,2.7 -5.5,3.7 -2.4,1.2 -3.9,1.7 -6.7,2.5 -1.6,0.4 -2.4,0.4 -3.3,1.5 -0.7,0.8 -1.7,1.8 -2.2,2.5 z m 27.8,36.1 c 0,-8.1 2,-16.8 1.9,-24.8 0,-1.2 0.2,-1.9 0.2,-3.2 0,-1.4 0.4,-1.4 1.2,-2.2 1.2,-1.1 2.4,-2 3.6,-3 2.1,-1.7 5,-4.8 7.1,-6.1 0.3,0.1 0.3,0.2 0.9,0.2 h 4.9 c 0.2,0.8 4.9,6.4 5.8,7.4 2.6,3.1 3.8,3.9 2.9,9.6 -0.5,3.2 -0.7,8.6 -1,12 -0.3,4 -0.9,8.1 -0.9,12.2 l -26.7,-2.2 z m -1.7,1.3 29.8,2.2 2.4,-31.4 -9.8,-12.6 -7.2,-0.3 c -0.2,0 -6.9,5.9 -7.8,6.5 -1.4,1.1 -2.5,2.3 -3.9,3.2 -1.7,1.2 -1.2,3.3 -1.4,5.9 -0.6,8.4 -2.1,18.1 -2.1,26.5 z m 12.8,-9 0.2,0 c 2.3,0 6.5,2.8 8.1,2.8 h 3 V 119.4 H 121.4 c -0.6,0 -6.1,-2.3 -7.2,-2.7 -1.5,-0.6 -6.6,0.3 -8.6,0.3 v 1.3 l 7.1,-0.3 z m -5.6,-7.9 0.2,1.5 c 3.1,-0.7 5.6,-1.4 8.7,-0.8 1.3,0.3 2.8,0.6 4.2,0.9 2.5,0.6 2.8,1.2 3.3,-1 -1.3,0 -6.8,-1.3 -8.4,-1.7 -2.5,-0.7 -5.5,0.4 -8.1,1.1 z m -0.2,-8.1 0.5,1.4 5.7,-1.9 5,3.7 8,-1 -0.3,-1.7 -7.3,1 c -0.8,-0.6 -4.7,-3.6 -5.3,-3.6 -0.5,0 -5.6,1.9 -6.2,2.2 z m 10.7,-7.3 h 1.1 c 1.2,0 2.5,-1.3 2.5,-2.5 v -0.4 c 0,-1.4 -1.6,-2.5 -3,-2.5 -4.4,-0 -3.6,5.5 -0.6,5.5 z M 67.9,81.8 c 0,1.5 3.2,4.4 4.2,5.1 l 1.5,-1.6 -2.1,-4.7 h -2.2 c -0.5,0 -1.5,1.1 -1.5,1.2 z M 110.2,70.5 c 0.8,0.4 2.4,0.8 2.4,1.9 0,0.9 -0.5,1.4 -0.6,2.1 l -2.6,-0.4 c -1,-0.1 -4.2,0.6 -5.8,0.6 v 1.1 c 0,1.1 4,0 5.6,0 h 0.4 c 1.7,0 5.4,1.2 6.2,1.9 0.5,0.5 1.4,5.2 1.9,6.2 1.8,-0.9 1.3,-0.5 0.6,-3.2 -0.3,-0.9 -1.1,-3.1 -1.1,-4 l -3.9,-1.6 1.2,-2.3 c -1.1,-2.1 -0.8,-3.6 -4,-3.6 l -0.3,1.2 z m -36.5,6.6 c 0,0.9 2,4.6 2.2,6 0.3,0.1 1.1,0.4 1.1,0.4 0.3,0 2.1,-0.9 2.8,-1.1 -0.7,-3.1 -1.7,-6.6 -4.3,-7.9 -0.2,0.7 -1.7,2.3 -1.7,2.5 z m 5.9,-3.6 c 1.9,4.1 0.4,3.7 4.2,7 l 2.4,-1.2 v -3.8 c 0,-1.5 -1.2,-3.6 -1.3,-5.3 l -1.9,-0.2 h -1.7 l -1.6,3.7 z m 7.6,-2.8 2.5,5 3.9,-0.8 c 0,-1 0.6,-2.5 0.6,-3.4 0,-2.2 -1.1,-4.7 -1.1,-6.9 H 88.5 l -1.3,6 z M 97.8,62.8 c 0,0.6 0.2,7.2 0.3,7.4 0.3,1 3.7,2.6 5.5,2.4 0.9,-0.1 2.5,-0.3 3.5,-0.4 1.8,-0.2 1.2,-0.6 1.5,-2.6 0.2,-1.9 0.6,-4.9 1.1,-6.8 -0.4,-0.8 -2.4,-4.7 -3.2,-4.7 h -5.1 c -0.7,0 -3,4 -3.5,4.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 115.6 86.6 C 113.5 88 110.6 91 108.5 92.7 C 107.3 93.7 106 94.6 104.8 95.7 C 104 96.4 103.6 96.5 103.6 97.8 C 103.6 99.2 103.4 99.9 103.4 101.1 C 103.5 109.1 101.5 117.8 101.5 125.9 L 128.2 128 C 128.2 124 128.8 119.9 129.1 115.8 C 129.3 112.4 129.6 107.1 130.1 103.8 C 131 98.1 129.8 97.3 127.2 94.2 C 126.3 93.1 121.6 87.6 121.4 86.8 L 116.5 86.8 C 115.9 86.8 115.9 86.7 115.6 86.6 z M 118.2 89.3 C 119.5 89.3 121.1 90.4 121.1 91.9 L 121.1 92.3 C 121.1 93.6 119.8 94.9 118.6 94.9 L 117.5 94.9 C 114.5 94.9 113.8 89.3 118.2 89.3 z M 113.1 100 C 113.7 100 117.6 103.1 118.4 103.7 L 125.7 102.6 L 126 104.3 L 118 105.3 L 113 101.6 L 107.3 103.6 L 106.9 102.2 C 107.5 101.9 112.5 100 113.1 100 z M 113.2 109 C 113.9 109 114.5 109.1 115.2 109.2 C 116.7 109.6 122.2 110.9 123.5 110.9 C 123 113 122.7 112.4 120.2 111.8 C 118.8 111.5 117.3 111.2 116 110.9 C 112.8 110.3 110.4 111 107.3 111.8 L 107.1 110.3 C 109 109.8 111.2 109.1 113.2 109 z M 112.5 116.5 C 113.2 116.5 113.8 116.6 114.2 116.8 C 115.2 117.1 120.8 119.4 121.4 119.4 L 123.9 119.4 L 123.9 121 L 121 121 C 119.4 121 115.1 118.2 112.9 118.2 L 112.6 118.2 L 105.6 118.4 L 105.6 117.1 C 107.1 117.1 110.4 116.5 112.5 116.5 z"}],i["AC.IC.TRIAGE"]=[{type:"path",stroke:!1,d:"M 91.6 69 C 87.3 69 83.6 71.5 83.6 75.3 L 83.6 83.3 L 80.5 83.3 C 74 83.3 73.6 88.1 71.2 91.5 C 69.3 94.3 63 94.4 63 100.9 L 63 131 L 137 131 L 137 102.6 C 137 99.5 136.2 97.3 134.7 95.6 C 133.2 94 130.8 93.6 129.1 92 C 126 88.8 126.9 83.3 119.1 83.3 L 116.2 83.3 L 116.2 75.5 C 116.2 71.3 112.9 69 108.4 69 L 91.6 69 z M 89.9 76 L 110.1 76 L 110.1 83.3 L 89.9 83.3 L 89.9 76 z M 95.3 90.4 L 104.4 90.4 L 104.4 99.4 L 112.2 94.9 L 116.8 102.8 L 109.1 107.3 L 116.8 111.9 L 112.1 119.8 L 104.4 115.3 L 104.4 124.1 L 95.3 124.1 L 95.3 115.3 L 87.6 119.7 L 83 111.8 L 90.7 107.3 L 83 102.8 L 87.6 94.9 L 95.3 99.3 L 95.3 90.4 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 112.1,119.8 4.6,-7.9 -7.6,-4.6 7.7,-4.5 -4.6,-7.9 -7.7,4.4 -0,-8.9 -9.1,0 0,8.9 -7.7,-4.4 -4.5,7.9 7.6,4.5 -7.6,4.5 4.5,7.9 7.7,-4.4 0,8.8 9.1,0 0,-8.8 z"}],i["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]=[i["GR.IC.FF.EMERGENCY OPERATION"],a("i")],i["AC.IC.FIRE HYDRANT"]=[{type:"path",stroke:!1,d:"m 80,131.3 v -1 c 1.3,0.1 5.7,1.8 7.7,2.2 2.8,0.6 5.8,1 9.1,1 h 6.5 c 3.4,0 6.1,-0.4 8.9,-1 2,-0.4 6.5,-2.1 7.7,-2.2 v 1 c 0,2.9 -12.5,4.5 -16.6,4.5 h -6.4 c -4.1,0 -16.9,-1.6 -16.9,-4.5 l 0,0 z m 17.9,-43.4 4.5,0.1 12.4,0.4 v 8.3 h 6.3 v 11.9 h -6.3 v 17.4 l 4.5,1.3 c -1.2,1.6 -12.2,3.3 -15.8,3.3 h -6.4 c -3.5,0 -15,-1.8 -16,-3.2 l 4.6,-1.6 0.1,-17.2 h -6.3 V 96.7 h 6.3 v -8.3 l 12.4,-0.4 0,0 z m 25.7,5.9 h 3 v 6.7 h 3.2 v 3.9 h -3.2 v 6.7 h -3 V 93.8 z m -50,0 h 2.9 v 17.2 h -2.9 v -6.7 h -3.5 v -3.9 h 3.4 V 93.8 h 0.1 z m 26.1,-8.3 c -5.2,0 -9.7,0.2 -14.8,0.2 -4.4,0 -3.5,-2.6 -1.8,-2.8 2.1,-0.3 4.9,-0.1 6.9,-0.4 5.3,-0.8 23.6,-0.3 28.1,0.8 0.2,1.8 0.4,1.5 -1,2.4 l -15.8,-0.2 -1.6,0.1 z m -1,-21.1 h 2.9 v 3.8 h 2 v 1.8 c 3.2,0.7 5.3,1.1 7.4,3.1 1.3,1.3 3.5,4.3 3.7,6.7 l -10.4,-0.3 -9.9,0.1 0.2,-0.1 -9.1,0.5 c 0.4,-4.7 5.2,-9.7 10.4,-9.7 h 0.8 v -2 h 2 v -3.8 z m -2.6,1.2 h -2 v 2.2 c -5.7,0.5 -10.6,6.6 -11.1,12.5 -2.2,0.2 -2.3,1.3 -3.4,2.1 l -0.2,1.6 c -0.3,2.2 2,3.9 3.6,4.3 v 5.5 h -3.6 v -2.4 h -8.3 v 6.7 h -3.2 V 107 h 3.2 v 6.3 h 8.3 v -2.4 h 3.6 V 123.8 c -2.3,0.6 -5.5,2 -5.5,4.9 v 2 c 0,6.3 12.9,7.7 19.8,7.7 h 5.9 c 6.9,0 19.4,-1.2 19.4,-7.7 v -2 c 0,-2.8 -3,-4.3 -5.3,-4.9 v -12.9 h 3.6 v 2.4 h 8.1 V 107 h 3.2 v -9.1 h -3.2 v -6.4 h -8.1 v 2.4 h -3.6 v -5.5 c 1.6,-0.3 3.6,-1.8 3.6,-3.8 0,-2.2 -1.6,-3.9 -3.6,-4 -0.5,-5.9 -5.7,-12.1 -11.4,-12.6 v -2.2 h -2 V 61.6 h -7.9 v 4 z m 2.9,47.2 c -4,0 -8.3,-5 -8.1,-9.3 0.2,-4.4 4.2,-9 8.3,-9 h 2 c 4.2,0 8.3,4.7 8.3,9.1 0,4.3 -4,9.1 -8.1,9.1 h -2.4 l 0,0 z m -10.5,-9.9 v 1.8 c 0,5.2 5.4,10.8 10.5,10.8 h 2.4 c 5.6,0 10.8,-5.8 10.8,-11.8 0,-6 -5.3,-11.8 -10.9,-11.8 h -2.1 C 93.7,92 88.4,97.5 88.4,103 l 0,0 z m 9.5,0.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m -2.9,0 2.2,4.3 h 5 c 0.7,0 2.4,-3.6 2.9,-4.3 l -2.4,-4.5 h -4.9 c -0.8,0.1 -2.5,3.7 -2.9,4.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 97.9,103.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m 1.2,-9.1 c -4.1,0 -8.1,4.6 -8.3,9 -0.2,4.3 4.1,9.3 8.1,9.3 l 2.4,0 c 4,0 8.1,-4.9 8.1,-9.1 0,-4.4 -4.1,-9.1 -8.3,-9.1 l -2,0 z m -1.2,4.7 4.9,0 2.4,4.5 c -0.4,0.7 -2.1,4.3 -2.9,4.3 l -5,0 -2.3,-4.3 c 0.4,-0.8 2.1,-4.4 2.9,-4.5 z M 98.7,64.5 h 2.9 v 3.8 h 2 v 1.8 c 3.2,0.7 5.3,1.1 7.4,3.1 1.3,1.3 3.5,4.3 3.7,6.7 l -10.4,-0.3 -9.9,0.1 0.2,-0.1 -9.1,0.5 c 0.4,-4.7 5.2,-9.7 10.4,-9.7 h 0.8 v -2 h 2 v -3.8 z m 1,21.1 c -5.2,0 -9.7,0.2 -14.8,0.2 -4.4,0 -3.5,-2.6 -1.8,-2.8 2.1,-0.3 4.9,-0.1 6.9,-0.4 5.3,-0.8 23.6,-0.3 28.1,0.8 0.2,1.8 0.4,1.5 -1,2.4 l -15.8,-0.2 -1.6,0.1 z m -26.1,8.3 h 2.9 v 17.2 h -2.9 v -6.7 h -3.5 v -3.9 h 3.4 V 93.8 h 0.1 z m 50,0 h 3 v 6.7 h 3.2 v 3.9 h -3.2 v 6.7 h -3 V 93.8 z m -25.7,-5.9 -12.4,0.4 0,8.3 -6.3,0 0,11.9 6.3,0 -0.1,17.3 -4.6,1.6 c 1.1,1.5 12.5,3.3 16,3.3 l 6.4,0 c 3.6,0 14.7,-1.7 15.8,-3.3 l -4.5,-1.3 0,-17.4 6.3,0 0,-11.9 -6.3,0 0,-8.3 -12.4,-0.4 -4.5,-0.1 z m 1.2,4.2 2.1,0 c 5.7,0 10.9,5.8 10.9,11.8 0,5.9 -5.2,11.8 -10.8,11.8 l -2.4,0 c -5.2,0 -10.5,-5.6 -10.5,-10.8 l 0,-1.8 c 0,-5.5 5.3,-11 10.7,-10.9 z M 80,131.3 v -1 c 1.3,0.1 5.7,1.8 7.7,2.2 2.8,0.6 5.8,1 9.1,1 h 6.5 c 3.4,0 6.1,-0.4 8.9,-1 2,-0.4 6.5,-2.1 7.7,-2.2 v 1 c 0,2.9 -12.5,4.5 -16.6,4.5 h -6.4 c -4.1,0 -16.9,-1.6 -16.9,-4.5 l 0,0 z"}],i["AC.IC.OTHER WATER SUPPLY LOCATION"]=[{type:"path",stroke:!1,d:"m 113.2,116.5 c 0,-2.9 4.4,-9.3 5.8,-11.8 2.8,-5 3.1,-6.8 4.6,-13 2.1,1.4 2.2,4.3 3,7.1 0.8,2.8 1.6,4.8 2.9,7 2.2,3.8 6.7,8 5,14.1 -1.6,5.8 -5.2,7.8 -12.2,7.5 -5.8,-0.2 -9.1,-4.9 -9.1,-11 z m -1.2,-0.4 v 0.6 c 0,7.5 4.6,12.2 12,12.2 6.8,0 12,-4.6 12,-11 v -1.3 c 0,-5 -4.7,-10 -6.6,-13.8 -1.1,-2.2 -1.6,-5.5 -2.3,-8.1 -0.9,-3.3 -2.4,-4 -4.8,-5.6 0,13.6 -10.3,20 -10.3,26.8 z m 4.8,3.6 c 0,2.4 1.8,4.4 3.8,4.4 0.7,0 1.5,-0.6 1.7,-1.3 -1.6,-0.4 -3.2,-2.5 -3.4,-4.4 l -2.1,1.3 z M 89.2,73 v 15.8 h -2.1 v -15.8 l 0.6,-0.1 1.5,0.1 z m -10.4,2.3 h 6.6 v 11 H 78.8 v -11 z m 37.2,1.1 c 0,-0.5 0.2,-0.6 0.6,-0.6 h 1.5 c 0.5,0 0.6,0.2 0.6,0.6 v 9.1 h -2.8 v -9.1 z m -24.9,-1.3 22.8,2.4 v 6.5 l -22.8,1.9 v -10.7 z m -27,11.8 h 12.9 v 1 l 8.3,0.1 1.2,2.4 1.6,0.3 c 0.6,0.1 1,-0.2 1.8,-0.3 l 0.9,-0.6 0.2,-2.4 22.8,-1.6 c 1.2,2.5 4.2,1.6 6.6,1 0,-0.7 0.2,-0.8 0.2,-1.5 v -9.5 c 0,-1.5 -0.8,-2.1 -2.3,-2.1 h -2.1 c -3.8,0 0.2,2.5 -5,1.6 -2.1,-0.4 -4.6,-0.4 -6.7,-0.7 -3.3,-0.5 -10.4,-1.3 -13.5,-1.3 -0.1,-3.1 -5.6,-3.3 -5.7,0.4 h -8.4 v 0.6 h -13 l 0.1,12.4 0,0 z m 15.6,-4.8 0,1.9 4.6,0 0,-1.9 z m 0,-4.2 0,1.7 4.6,0 0,-1.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 91,75.1 22.8,2.4 v 6.5 l -22.8,1.9 v -10.7 z m 24.9,1.3 c 0,-0.5 0.2,-0.6 0.6,-0.6 h 1.5 c 0.5,0 0.6,0.2 0.6,0.6 v 9.1 h -2.8 v -9.1 z M 78.8,75.3 l 0,11 6.6,0 0,-11 -6.6,0 z m 0.8,2.6 4.7,0 0,1.7 -4.7,0 0,-1.7 z m 0,4.2 4.7,0 0,1.9 -4.7,0 0,-1.9 z M 123.5,91.8 c -1.4,6.2 -1.8,8 -4.6,13 -1.3,2.5 -5.8,8.9 -5.8,11.8 0,6.1 3.3,10.8 9.1,11 7,0.2 10.5,-1.7 12.2,-7.5 1.7,-6.1 -2.8,-10.3 -5,-14.1 -1.3,-2.2 -2,-4.3 -2.9,-7 -0.8,-2.8 -0.9,-5.7 -3,-7.1 z m -4.6,26.7 c 0.2,1.9 1.8,4 3.4,4.4 -0.2,0.6 -1,1.3 -1.7,1.3 -2,0 -3.8,-2.1 -3.8,-4.4 l 2.1,-1.3 z M 89.2,73 v 15.8 h -2.1 v -15.8 l 0.6,-0.1 1.5,0.1 z"}],i["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]=a("€$£"),i["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 87.9,87.3 c -3.2,0 -5.8,2.6 -5.8,5.8 0,2.8 2.1,5.2 4.8,5.7 l 0,3.3 -3.8,0 0,2 3.8,0 0,9.4 2,0 0,-9.4 3.8,0 0,-2 -3.8,0 0,-3.3 c 2.7,-0.5 4.8,-2.8 4.8,-5.7 0,-3.2 -2.6,-5.8 -5.8,-5.8 z m 24,0 c -3.2,0 -5.8,2.6 -5.8,5.8 0,2.8 2.1,5.2 4.8,5.7 l 0,3.3 -3.8,0 0,2 3.8,0 0,9.4 2,0 0,-9.4 3.8,0 0,-2 -3.8,0 0,-3.3 c 2.7,-0.5 4.8,-2.8 4.8,-5.7 0,-3.2 -2.6,-5.8 -5.8,-5.8 z m -24,2 c 2.1,0 3.8,1.7 3.8,3.8 0,2.1 -1.7,3.8 -3.8,3.8 -2.1,0 -3.8,-1.7 -3.8,-3.8 0,-2.1 1.7,-3.8 3.8,-3.8 z m 24,0 c 2.1,0 3.8,1.7 3.8,3.8 0,2.1 -1.7,3.8 -3.8,3.8 -2.1,0 -3.8,-1.7 -3.8,-3.8 0,-2.1 1.7,-3.8 3.8,-3.8 z m 24.2,37.8 0,-3 -72.1,0 0,3 z m -3,-6.2 0,-2.8 -66.2,0 0,2.8 z M 66.8,98.2 c 0,1.3 -0.7,2.6 -0.7,4.3 -0,1.8 -0.2,3.1 -0.2,5 v 3.2 l 0.6,3.6 h 2.7 l -0.8,-6.4 v -1.8 c 0,-8.1 5,-17.9 9.3,-21.5 5.6,-4.6 11.6,-9.1 21.7,-9.1 h 0.9 c 9,0 17.1,4.4 21.6,8.8 3.2,3.2 4.1,4.7 6.4,8.7 1.4,2.4 3.3,8.4 3.3,12 v 4.3 c 0,1.4 -0.7,3 -0.7,4.4 v 0.5 h 2.7 l 0.6,-6.4 v -3.8 c 0,-1.6 -1,-5.2 -1.4,-6.6 -0.8,-2.5 -1.3,-3.6 -2.3,-5.7 -1.8,-3.8 -3.8,-6.4 -6.7,-9.3 -4.6,-4.6 -13.6,-9.6 -22.6,-9.6 h -2.5 c -7.8,0 -16.6,4.1 -20.6,7.9 -2.8,2.7 -4.4,4.1 -6.7,7.5 -1.1,1.6 -1.5,3 -2.5,4.6 -0.9,1.6 -1.2,4 -2,5.2 z"}],i["GR.IN.IC.RECREATIONAL AREA"]=[{type:"path",stroke:!1,d:"m 96.4,78.8 8.1,-0 c 0.9,0 2.4,5.7 2.4,6.9 l 1.5,4.3 c 0,0.4 2,6.6 2,7 v 0.6 l -19.4,-0 5.4,-18.8 z m -19.9,-0 11.1,0 -3.5,11.2 c 0,1.7 -1.9,5.7 -1.9,6.9 v 0.6 h -20.8 v 7.2 l 18.5,0 -1.2,3 -0.1,0.8 -2.6,8.3 -3.6,11.5 c 1.1,0 9.3,0.1 9.7,-0.1 0.2,-0.1 2,-6.8 2.3,-7.7 0.5,-1.2 4.5,-15 4.5,-15.2 v -0.6 l 23.5,0 6.7,23.6 9.8,0 -1.4,-4.8 -0.7,-2.6 -2.4,-7.8 -0.9,-2.8 -1.7,-5.7 h 15.8 v -7.2 h -18.2 l -2.9,-8.9 -0.1,-0.8 -1,-3 -1.7,-6.2 h 10.6 v -7.2 h -47.9 v 7.2 l 0,0 0,0 z m 62.1,16.9 0,-6.1 -15.2,0 0,6.1 z m -62.3,0 0,-6.1 -14.9,0 0,6.1 z"}],i["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 73.1,111.2 c 0,-3.8 1,-5.8 2.3,-8.4 1.4,-2.8 3.3,-3.8 4.6,-5.8 l -1.1,-8.2 c -2.6,0.7 -7.7,6.5 -9.2,9 -2.4,4.1 -3.8,7.9 -3.8,14.2 v 3.3 c 0,2.2 2.2,8.1 3.1,9.6 2,3.2 3,4.5 5.5,7.1 3.6,3.6 10.7,7.1 17.9,7.1 h 1 c 4.9,0 9.9,-1.6 13.1,-3.6 1.7,-1 8.5,-6.2 8.5,-7.8 0,-1.2 -3.1,-6.6 -3.5,-8.4 -1.2,1.5 -1.6,3 -3,4.8 -1.2,1.5 -2.3,2.7 -3.8,3.8 -2.6,2 -6.8,4 -11.3,4 h -1.2 c -10.2,0 -19.1,-9 -19.1,-19.3 v -1.4 l 0,0 z m 8.9,-37.9 c 0.5,0.4 0.5,2.9 0.5,4 L 85,106.8 l 25.4,0 10,23 c 1.5,-0.1 5.5,-1.5 7.1,-2.1 1.2,-0.4 6.5,-1.4 6.5,-2.6 v -0.2 c 0,-0.7 -1.9,-4.8 -2,-6.3 l -7.6,2.6 -9,-21.6 H 91.6 l -0.4,-6 h 17.3 v -5.4 H 90.8 l -1.1,-12.9 c 2.6,-0.2 5.2,-3.9 5.2,-6.7 v -2.2 h -0.5 v -0.8 c 0,-0.8 -2.1,-3.1 -2.7,-3.5 -1,-0.7 -3.3,-1.6 -4.8,-1.3 -2.2,0.4 -3.2,0.8 -4.4,2 -0.7,0.7 -2.2,3.2 -2.2,4.3 v 1.2 c 0,2.4 0.8,3.6 1.7,4.9 l 0,0 z m 0.5,4 c 0,-1.1 0,-3.6 -0.5,-4 0,1.1 -0,3.6 0.5,4 z"}],i["GR.IN.IC.ADULT DAY CARE"]=[{type:"path",stroke:!1,d:"m 107,118.3 v -0.2 c 0,-15.5 22.4,-14.7 22.4,-0.6 v 1.3 c 0,5.4 -5.3,10.4 -10.8,10.4 h -0.6 c -5.9,0 -11,-5.1 -11,-11 z m -1.6,-22.2 h 4.6 v 10 c 0,0 -3.2,3.3 -3.8,4.3 -0.5,0.8 -2.2,4.7 -2.2,5.8 v 2.3 c 0,6.8 6.6,13.7 13.3,13.7 h 1 c 5.8,0 10.8,-5 11,-5 h 7.1 v -1.9 h -3.2 c 0.2,-0.5 0.8,-1.3 0.8,-1.9 v -11 c 0,-1.9 -1,-3.3 -2.1,-4 h -3.3 l -0.8,-0.7 c 1.1,-0.3 2,-0.9 2,-2.2 v -0.4 c 0,-0.5 -1,-1.7 -1.6,-1.7 h -5 v -5.4 c 0,-2.7 -1.5,-4.2 -4.2,-4.2 h -2.1 c -5.9,0 -4.6,5.8 -4.6,11.6 l -0.6,0.4 V 94.7 c -0.4,-0.2 -0.4,-0.4 -0.8,-0.4 h -5.4 v 1.7 z m -22.6,1 c 0,-2.2 3.3,-4.8 4.5,-6.6 1.4,1 1.4,1.8 3.4,2.8 1.4,0.7 2.6,1.4 4,1.9 2.4,0.9 2.2,-0.1 4.3,1.9 0.9,0.9 1.8,2.5 3.5,2.5 0.4,0 0.8,-0.8 0.8,-1.3 v -1.1 c 0,-2.8 -3.3,-3.6 -5.3,-4.5 -2.3,-0.9 -5.3,-1.6 -6.1,-3.8 -0.8,-2.3 -2.2,-4.6 -2.9,-6.9 -0.7,-2.1 -1.9,-5.1 -4.6,-5.1 h -0.4 c -3,0 -7.4,7.5 -8.1,10.4 -0.6,2.3 -1.6,4.7 -2.1,7.2 -0.5,2.8 -0.6,5.2 -1.1,8 -0.3,1.8 0.1,2.3 -0.6,4 -0.4,1.2 -0.8,2.3 -1.2,3.4 -0.9,2.3 -1.7,4.6 -2.5,6.8 -0.8,2.1 -4.9,11.8 -4.9,13.5 0,2.6 6.2,1.3 7.7,1.1 -0,-1.9 -2.3,-1.6 -3.1,-2.7 2.1,-3.1 3.8,-6.3 5.8,-9.5 1,-1.7 4.6,-9.2 5.4,-9.8 0.6,0.4 3,3.1 3.8,3.9 1.9,1.9 2,1.8 2.8,4.8 1.1,4.2 1.9,7.7 1.9,13.1 l 1.7,0.2 4.2,-0 c 1.3,0 1.8,-0.2 2.3,-1 -0.6,-1 -3.1,-1.7 -4.6,-2.1 v -1.1 c 0,-0.4 -0.1,-0.4 -0.4,-0.8 v -12.1 c -1.5,-2.3 -2.9,-4.9 -4.6,-7.1 -1.1,-1.6 -3.8,-5.2 -3.8,-7.6 v -2.5 l 0,0 z m 30.3,-9.7 v 1.6 c 0,1.5 2.3,3.9 4.2,3.9 h 0.8 c 2.1,0 4.2,-2.3 4.2,-4.5 V 87.6 c 0,-2.2 -2.2,-4.2 -4.5,-4.2 h -0.1 c -2.3,-0 -4.6,2 -4.6,4 z m -28.4,-15.6 v 1.7 c 0,0.6 1,2.1 1.4,2.5 0.6,0.6 1.8,1.2 2.9,1.2 h 1 c 2,0 4.2,-2.2 4.2,-4 v -1.4 c 0,-1.6 -2.5,-3.9 -4.5,-3.9 h -0.7 c -1.8,0 -4.2,2.2 -4.2,3.9 z"}],i["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 79.5,127.9 h -7.8 v -21.4 c 0,-1 6.8,-13.3 7.4,-13.6 1,-0.6 13.9,-7.1 14.1,-7.1 0.5,0 13.2,6.3 14.4,7 0.4,0.3 7.7,13.1 7.7,13.7 v 21.4 h -7.6 V 110.4 H 79.5 v 17.5 z m 37.4,-39.4 h 15.4 v 39.8 h -12.1 v -18.8 h 2.6 c -0.5,-0.8 -5.8,-9.8 -5.8,-10 V 88.5 z m 0.2,-1.9 c 0,-4.4 2.9,-8.2 7.2,-8.2 h 0.4 c 4.5,0 7.6,3.7 7.6,8.2 h -15.2 v 0 z M 105.2,82.1 h 8.9 c -0.2,1.6 -0.9,2.5 -0.9,5 0,2 0,3.9 0,5.8 -1.4,-1 -0.9,-2.8 -3.2,-4 -1.2,-0.6 -3.8,-2 -4.8,-2.3 v -4.6 z m 0,-2.8 c 0,-2.8 3.8,-7.4 6.9,-7.4 h 0.6 c 3.1,0 5.5,1.8 6.7,3.7 -0.2,0.2 -4.8,4.3 -4.8,4.3 h -9.5 v -0.6 z m -11.9,1.5 c -3.2,1.7 -6.6,3.2 -9.9,4.8 -1.7,0.9 -3.3,1.5 -5,2.4 -2.8,1.4 -2.3,0.7 -4,3.1 -0.9,1.3 -1.8,3.2 -2.7,4.7 -0.9,1.6 -1.9,3 -2.8,4.6 -1.6,2.9 -3.6,6.5 -5.4,9.1 h 2.8 v 22.5 H 84 V 114.7 h 19 v 17.3 h 33.3 V 87.5 c 0,-7.5 -4.2,-13 -11.7,-13 h -1.7 c -0.8,-2.9 -5.9,-6.5 -10,-6.5 h -0.4 c -6.4,0 -11,5.9 -11,12.1 v 4.6 l -8.2,-3.9 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 79.5,110.4 h 28.1 v 17.5 h 7.6 v -21.4 c 0,-0.6 -7.2,-13.4 -7.7,-13.7 -1.1,-0.8 -13.8,-7.1 -14.4,-7.1 -0.1,0 -13,6.5 -14.1,7.1 -0.6,0.4 -7.3,12.6 -7.3,13.6 v 21.4 h 7.8 v -17.5 z m 37.4,-10.8 c 0,0.1 5.3,9.2 5.8,10 h -2.6 v 18.8 h 12.1 v -39.8 h -15.4 v 11 z m 0.2,-13 h 15.1 c 0,-4.6 -3,-8.2 -7.6,-8.2 h -0.4 c -4.2,-0 -7.2,3.8 -7.2,8.2 z m -11.9,0 c 1.1,0.2 3.6,1.7 4.8,2.3 2.2,1.1 1.7,3 3.2,3.9 0,-2 0,-3.9 0,-5.8 0,-2.5 0.7,-3.4 0.9,-5 h -8.9 v 4.6 z m 0,-7.4 v 0.6 h 9.5 c 0,0 4.6,-4.1 4.8,-4.3 -1.2,-1.8 -3.6,-3.7 -6.7,-3.7 h -0.6 c -3.1,0 -6.9,4.6 -6.9,7.4 z"}],i["GR.IN.IC.AGRICULTURAL LABORATORY"]=[{type:"path",stroke:!1,d:"m 98.4,77.9 -0.1,0.3 2.6,0.6 0,-0.3 z m 2.1,7.3 0.4,-3.2 -0.3,-0.1 -0.4,3.2 z m -3.8,-16.8 0.1,-0.2 -1.4,-0.3 1,-2.6 -0.4,-0.3 -1.7,5.7 0.1,0 0.3,-0.1 0.7,-2.4 z m -1,5.3 c 0.8,0 0.5,-1.7 0.8,-2.3 l -0.4,-0.1 -0.4,2.4 z m 1.4,-5.5 0.6,-2.6 -0.4,-0.1 -0.6,2.7 z m 0.2,-2.7 0.1,-0.3 -1,-0.2 -0.1,0.2 z m 11.8,65.6 0,5.6 3.3,0 c 1.1,0 1.9,-0.2 2.4,-0.7 0.5,-0.5 0.8,-1.2 0.8,-2.1 -10e-6,-0.9 -0.3,-1.6 -0.8,-2.1 -0.5,-0.5 -1.3,-0.7 -2.4,-0.7 l -3.3,0 m 0,-6.2 0,4.6 3,0 c 1,0 1.7,-0.2 2.2,-0.6 0.5,-0.4 0.7,-1 0.7,-1.7 -10e-6,-0.8 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.6 -2.2,-0.6 l -3,0 m -2.1,-1.7 5.2,0 c 1.6,1e-5 2.8,0.3 3.6,1 0.8,0.7 1.3,1.6 1.3,2.8 -2e-5,0.9 -0.2,1.7 -0.7,2.2 -0.4,0.5 -1.1,0.9 -1.9,1 1,0.2 1.8,0.7 2.3,1.4 0.6,0.7 0.8,1.5 0.8,2.6 -1e-5,1.4 -0.5,2.4 -1.4,3.1 -0.9,0.7 -2.2,1.1 -3.9,1.1 l -5.4,0 0,-15.2 m -9.2,2 -2.8,7.5 5.6,0 -2.8,-7.5 m -1.2,-2 2.3,0 5.8,15.2 -2.1,0 -1.4,-3.9 -6.8,0 -1.4,3.9 -2.2,0 5.8,-15.2 m -16,0 2.1,0 0,13.4 7.4,0 0,1.7 -9.4,0 0,-15.2 M 98.6,92.5 c 0.9,-0.2 0.8,-1.8 1.1,-2.6 l 0.9,0.4 -1.4,4.2 -0.6,-2 z m -0.2,-0.4 0.1,0.2 c -0.5,-0.1 -0.8,-1.3 -0.8,-1.9 l 0.4,0.6 -0.3,-2.2 1.6,0.8 c -0,0.7 -0.4,2.3 -0.9,2.4 z m -0.9,-2.3 -0.6,-1.4 c 0.4,0.1 0.6,0.3 0.6,0.9 v 0.5 z m 2.6,-4.4 -0.6,3.9 -1.7,-0.8 v -3.4 -0.3 l 2.3,0.6 z m -2.6,-1.1 0.4,0.1 v 0.4 h -0.4 v 3.5 l -0.8,-0.4 0.1,0.4 h -0.2 c 0,-0.9 -1.2,-2.8 -1.6,-3.5 0.1,-0.1 0.1,-0.1 0.1,-0.4 v -0.4 l 2.4,0.6 0,-0.4 z m 6.1,-1.7 2.5,0.6 v 0.4 c 0,0.2 0,0.2 0.1,0.3 -1.2,0 -1.9,0.4 -2.8,0.8 l 0.2,-2 z m -6.1,1.7 -2.4,-0.8 0.1,-1.8 v -1 l 2.4,0.5 -0.2,3 z m 8.6,-1.6 c -0.3,0 -2.3,-0.4 -2.4,-0.6 0,0 0.2,-2.3 0.2,-2.7 l 2.2,0.4 0.1,1.6 -0,1.2 z m -12.7,-2.4 c 0.4,0 0.7,0.2 1.1,0.2 0.8,0.2 0.4,0.1 0.4,0.7 v 2.1 c -0.3,-0 -0.7,-0.2 -1,-0.3 -0.7,-0.2 -0.5,0.1 -0.5,-0.4 v -2.4 z m 10.7,-4.2 1.7,0.4 0.3,3 -2.2,-0.4 0.2,-3 z m -6.4,5.2 v -0.4 l -2.4,-0.5 0.3,-2.8 2.4,0.5 -0.2,2.9 h 0.3 v 0.4 h -0.3 z m -4,-4.2 1.6,0.4 -0.3,2.9 -1.5,-0.4 0.2,-2.9 z m 7.6,1.4 0.3,-3.1 2.4,0.6 -0.3,3 -2.4,-0.5 z m -0.4,-0.1 0.4,0.1 v 0.4 c 0.4,0 2.3,0.4 2.4,0.6 0,0.1 -0.2,2.3 -0.2,2.6 -0.8,0 -1.6,-0.4 -2.3,-0.4 -0.2,0 -0.2,0.2 -0.2,0.4 l 2.4,0.5 -0.2,2.2 h 0.2 c -0.5,0.7 -1.1,1.6 -1.4,2.4 -0.3,0.8 -0.7,2.1 -1.1,2.8 l -0.9,-0.4 0.6,-4 h -0.2 l -0.2,-0.1 v -0.4 l -2.3,-0.7 0.2,-3 2.5,0.5 v -0.3 h 0.4 l 0.2,-2.8 h -0.3 l -0.3,2.7 -2.4,-0.4 0.2,-2.9 c -0.3,-0.1 -0.2,0 -0.3,-0.4 h 0.2 l 0.2,0.1 0.4,-3.2 2.4,0.6 -0.3,3.1 z m 3.2,-5.4 v -0.3 l 0.3,0.1 v 0.3 c 1,0.1 1.1,0.1 1.2,1 0,0.3 0.2,1.8 0.3,1.9 l -1.7,-0.3 v 0.4 h -0.3 v -0.5 l -2.4,-0.6 0.3,-2.5 2.3,0.4 z m 0.2,-0.2 0.2,-2.9 c 0.6,0.1 0.7,2.4 0.8,3.1 l -1,-0.2 z m -5.1,-0.9 2.4,0.5 -0.3,2.6 -2.4,-0.6 0.4,-2.5 z m 4.9,0.8 c -3.3,-0.8 -2,0 -2,-3.3 l 2.2,0.4 -0.2,2.9 z m -4.4,-3.8 c 3.2,0.8 1.9,-0.2 1.9,3.2 l -2.3,-0.5 0.4,-2.7 z m -2.5,-0.4 2.1,0.4 -0.4,2.7 -2.2,-0.4 0.4,-2.6 z m 7.1,1.3 v -0.4 l -2.2,-0.4 0.2,-2.6 c 0.3,0 0.7,0.1 1.1,0.2 0.6,0.1 0.5,0 0.7,0.6 0.3,1 0.3,0.9 0.3,2.2 l 0.3,0.4 -0.4,0.1 z m -4.1,-3.9 1.8,0.4 -0.2,2.6 -2.1,-0.4 0.4,-2.6 z m 2.3,-2.2 1.4,2.6 -1.5,-0.2 0.1,-2.4 z m -1.6,-1.6 0,-0.1 1.2,1.2 -0.1,0 c 0.3,-0.1 0.3,-0.1 0.4,0.3 l -0.2,-0.2 -0.2,2.6 -1.8,-0.4 0.7,-3.5 z m -2.9,3 c 0.5,-1.1 0.3,-3.4 1.9,-3.4 0.3,0 0.2,0 0.5,0.1 l -0.6,3.7 -1.8,-0.4 z m -0.4,-0.1 0.4,0.1 v 0.3 l 1.8,0.4 -0.4,2.6 -2.1,-0.4 v 0.2 l -0.1,0.2 -0.2,-0.1 h -0.2 l -0.5,2.6 -1.6,-0.3 v 0.3 c 0.5,0 1,0.3 1.4,0.3 0.2,0 0,-0.2 0.5,-0.2 v 0.4 l 2.2,0.4 -0.3,2.4 -2.4,-0.6 v 0.4 l 2.3,0.6 -0.3,3.1 -2.4,-0.6 0.4,-3.2 h -0.4 c -0,0.8 -0.3,1.7 -0.3,2.4 -0,0.8 -0,0.7 -0.7,0.5 -0.2,-0 -0.9,-0.1 -0.9,-0.3 -0,-0.3 0.2,-2 0.3,-2.4 0.2,-1.2 0.5,-0.4 1.7,-0.3 l 0.1,-0.3 c -0.2,-0.1 -1.6,-0.3 -1.6,-0.5 0,-0.8 0.4,-1.5 0.4,-2.3 -0.6,0.1 -0.7,2.3 -0.8,3 -0.1,0.8 -0.4,2.6 -0.4,3.3 0,0.8 -0.2,2.4 -0.2,3.5 0,1.3 -0.1,2.4 -0.1,3.8 h 0.3 v -0.9 l 1.5,0.4 v 1 l -3.4,-0.5 h -0.1 c -5,0 -8.8,9.7 -8.8,15.4 0,2.3 0.8,5.4 2,6.2 0.7,-1.4 1.3,-3.1 2,-4.6 0.8,-1.5 1.4,-3.1 2.1,-4.6 0.3,-0.7 0.7,-1.5 1,-2.2 0.4,-0.8 0.8,-1.5 1.8,-1.2 0.9,0.3 1.9,3.2 2.1,4.6 0.5,3.8 0,9 0.6,12.6 0.7,4 2.3,6.4 5.4,8 1,-0.4 2.5,-0.6 3.4,-1.2 0.9,-0.6 1.8,-1.2 2.4,-2.2 1.2,-1.8 2,-4.1 2,-7.2 l 0,-0.6 -0.3,-5.6 v -0.3 c 0,-2.7 0.5,-8.3 2.8,-8.3 h 0.1 c 1.4,0 2,0.6 2.6,1.4 0.6,0.8 1.2,1.4 1.8,2.2 1.2,1.5 2.6,2.9 2.6,5.5 v 0.6 l 0.4,0.1 c 0.4,-1.6 1.8,-2.8 1.8,-5.2 v -1.5 c 0,-3.5 -1.4,-6.2 -3,-8.3 -0.8,-1.1 -1.8,-2 -2.8,-2.8 -0.7,-0.5 -2.7,-1.9 -3.8,-1.9 l -0.8,-0 -2.3,0.4 c -0.2,-0.8 0.1,-2 -0.1,-3.1 -0.1,-0.8 -0.2,-2.5 -0.2,-3.3 -0.2,-2.1 -0.5,-4.2 -0.9,-6.1 -0.6,-3.3 -2,-8.2 -4.6,-9.4 v 0.3 l -0.4,-0.1 0.1,-0.3 -0.8,-0.1 c -0.9,-0.1 -1.9,0.8 -2.3,1.3 -0.2,0.3 -1.7,2 -0.8,2 0.2,-0.6 1.3,-2.2 1.8,-2.4 l -0.8,2.7 z m 3,20.4 1.6,0.5 0.2,-0 c -0.1,-0.5 -1.4,-0.6 -1.8,-0.8 v 0.4 z m 3.6,-9.8 0.2,-2.6 -0.2,-0.1 -0.2,2.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 98.6,92.5 0.6,2 1.4,-4.2 -0.9,-0.4 c -0.3,0.7 -0.2,2.3 -1.1,2.6 z m -0.6,-1.4 -0.3,-0.6 c 0,0.6 0.4,1.8 0.8,1.9 l -0.1,-0.2 c 0.6,-0.2 0.9,-1.8 1,-2.4 l -1.6,-0.8 0.2,2.2 z m 2.4,-5.9 c 0.4,0.2 1.7,0.3 1.8,0.8 l -0.2,0 -1.6,-0.5 -0.6,4 0.9,0.5 c 0.4,-0.7 0.8,-2 1.1,-2.8 0.4,-0.8 1,-1.7 1.4,-2.4 h -0.2 l 0.2,-2.3 -2.4,-0.5 -0.4,3.2 z m -1,4.1 0.6,-3.9 -2.3,-0.6 0,0.2 0,3.4 z m 0.6,-4.2 0.4,-3.2 -2.5,-0.5 -0.2,3 z m 0.7,-6.6 0.3,-3.1 -2.4,-0.6 -0.4,3.2 z m -5.1,-4.8 -0.1,0.3 c -1.2,-0 -1.5,-0.9 -1.7,0.3 -0.1,0.4 -0.3,2.1 -0.3,2.4 0,0.2 0.7,0.2 1,0.3 0.7,0.2 0.7,0.2 0.7,-0.5 0,-0.8 0.3,-1.7 0.4,-2.4 h 0.4 l -0.4,3.2 2.4,0.6 0.4,-3.2 -2.3,-0.5 v -0.4 l 2.3,0.6 0.3,-2.4 -2.2,-0.4 c -0.3,0.6 0,2.3 -0.8,2.3 z m 8.3,-1 0.2,-2.9 -2.2,-0.4 c 0,3.4 -1.3,2.6 2,3.3 z m -6.2,11.7 -0.4,-0.1 v 0.4 l -2.4,-0.6 v 0.4 c 0,0.2 -0,0.2 -0.1,0.4 0.4,0.7 1.6,2.6 1.6,3.5 h 0.2 l -0.1,-0.4 0.8,0.4 v -3.5 h 0.4 l -0,-0.4 0,0 z m -0.3,5.4 0,-0.6 c 0,-0.5 -0.2,-0.8 -0.6,-0.9 l 0.6,1.4 z m 2.6,-4.8 0,0.4 0.2,0.1 0.2,0 0,-0.3 z m 3.3,-0.4 c 0.8,-0.4 1.5,-0.8 2.8,-0.8 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 v -0.4 l -2.5,-0.6 -0.2,2 z m -8.3,-1.1 2.4,0.8 0.2,-3 -2.5,-0.5 0,1 z m -1.8,-0.8 c 0,0.5 -0.2,0.2 0.5,0.4 0.3,0.1 0.6,0.2 1,0.3 v -2.1 c 0,-0.7 0.4,-0.6 -0.4,-0.7 -0.4,-0.1 -0.7,-0.2 -1.1,-0.2 v 2.4 z m 7.5,-4 h 0.3 l -0.2,2.8 h -0.4 v 0.4 l 0.3,0.1 c 0,-0.2 0,-0.4 0.2,-0.4 0.7,0 1.6,0.4 2.3,0.4 0,-0.3 0.3,-2.5 0.2,-2.6 -0,-0.2 -2,-0.6 -2.3,-0.6 v -0.4 l -0.4,-0.1 v 0.3 z m 3.3,-8.9 0.4,-0 -0.3,-0.4 c 0,-1.3 -0,-1.2 -0.3,-2.2 -0.2,-0.6 -0,-0.5 -0.7,-0.6 -0.4,-0.1 -0.8,-0.2 -1.1,-0.2 l -0.2,2.6 2.2,0.4 v 0.4 z m -2.4,-0.9 0.2,-2.6 -1.8,-0.4 -0.4,2.6 z m 4.4,13.8 0,-1.2 -0.1,-1.6 -2.2,-0.4 c 0,0.4 -0.2,2.7 -0.2,2.7 0.1,0.2 2.2,0.6 2.4,0.6 z m -7.8,-4.6 -0.2,2.9 2.4,0.4 0.3,-2.7 z m -0.2,3.2 0,-0.4 -0.3,0 0.2,-2.9 -2.3,-0.5 -0.3,2.8 2.4,0.5 0,0.4 z m -3.1,-1 0.3,-2.9 -1.6,-0.4 -0.2,2.9 z m 11.1,-0.8 -0.3,-3 -1.7,-0.4 -0.2,3 z m -2,-6.6 -2.3,-0.4 -0.3,2.5 2.4,0.6 z m -0.4,6 0.2,-3 -2.4,-0.6 -0.2,3.1 z m -2.4,-4 0.3,-2.6 -2.3,-0.5 -0.3,2.5 z m -2.9,3.2 0.1,-0.3 -0.2,-0.1 h -0.2 c 0,0.4 -0.1,0.3 0.2,0.4 z m 5.8,-2.4 1.7,0.3 c -0.1,-0.2 -0.2,-1.6 -0.3,-1.9 -0.1,-1 -0.2,-1 -1.2,-1 l -0.2,2.6 z m 0,0.3 0,-0.3 -0.3,-0.1 0,0.4 z m 0.2,-3 0,-0.3 -0.2,-0.1 0,0.3 z m 0,-0.3 1,0.2 c -0.1,-0.6 -0.2,-3 -0.8,-3 l -0.2,2.9 z m -5.1,-1.1 2.3,0.5 c 0,-3.4 1.3,-2.5 -1.9,-3.2 l -0.4,2.7 z m -2.5,-0.6 2.2,0.4 0.4,-2.7 -2.1,-0.4 z m 1.1,-5.6 -0.6,2.6 2.1,0.4 0.4,-2.6 -1.8,-0.4 0,-0.3 -0.4,-0.1 -0.1,0.3 z m -0.6,2.8 0,-0.2 -0.4,0 -0.1,0.2 0.2,0 0.2,0.1 z m 0.2,-2.9 -1,-0.2 -1,2.6 1.4,0.3 z m 4.8,0.7 1.5,0.2 -1.4,-2.6 z m -2.1,-0.4 1.8,0.4 0.2,-2.6 0.2,0.2 c -0,-0.4 -0,-0.3 -0.4,-0.3 l 0.1,-0.1 -1.2,-1.1 -0.1,0.1 -0.7,3.5 z m -2.2,-0.4 1.8,0.4 0.6,-3.7 c -0.4,-0 -0.2,-0.1 -0.6,-0.1 -1.6,0 -1.4,2.3 -1.9,3.4 z"}],i["GR.IN.IC.ANIMAL FEEDLOT"]=[{type:"path",stroke:!1,d:"m 121.6,107.1 -0.4,-2.3 -0.2,-2 h 16.3 l -1.7,13.2 h -13 v -0.6 l -1,-8.2 z m 16.1,4.3 0.4,-2.3 0.9,-6.2 -0.1,-1.6 h -19.6 l 1.4,10.7 0.3,0.6 0.5,4.3 -0.1,0.6 h 15.7 v -1.6 l 0.6,-4.6 z M 123,82.6 c -3.3,-0.8 -4.6,0.4 -6.8,1.9 h -1.4 c -0.3,0.4 -0.6,1.2 -1.2,1.2 h -1 c -2.2,0 -3.9,-1.8 -5.8,-1.8 h -0.6 c -0.9,0 -2.1,0.8 -3.9,0.8 -5.1,0 -3.9,0.2 -8,1.5 -2,0.6 -6.2,0.8 -8.9,0.8 h -5.2 c -2.8,0 -5,-0.6 -7.2,-0.6 -2.6,0 -4.7,0.2 -7.4,0.2 -0.5,0 -0.5,-0.1 -0.8,-0.2 -2.4,1.2 -3.1,4.2 -3.1,7.8 0,3.6 -0.6,6.3 -0.6,10.1 v 0.2 c 0,0.6 0.1,0.6 0.2,1 l 1,-0.3 0,-0.5 h 0.4 l 0.2,-12.2 h 0.2 c 0,2 0.1,4.5 0.6,6 0.4,1.2 1.7,3.8 1.7,4.9 v 0.2 l -1.6,13.2 h 3.7 c 0,-1.4 -0.4,-1.1 -0.4,-2.1 v -2.1 c 0,-1.4 1,-4.2 2.3,-4.3 0.4,1.5 3.3,3.7 3.3,6.8 v 0.6 c 0,0.6 -0.1,0.6 -0.2,1 0.4,-0.1 0.5,-0.2 1,-0.2 1.2,0 3.5,0.7 3.5,-0.4 0,-0.3 -1.9,-3.2 -2.2,-3.5 -0.4,-0.5 -1.3,-3.6 -1.3,-4.3 v -0.2 c 0,-0.2 1.2,-2.3 1.2,-4.8 4,2.2 3.5,2.7 9.9,2.7 2.2,0 4.2,0.5 6,0.4 1,-0 3.3,-1.4 4.3,-1.9 0,1.2 0.4,2.4 0.2,3.3 l -1.2,8 c 1,0.3 1.6,0.6 2.8,0.6 h 0.6 -0.2 l 0.7,-11.3 c 0.6,0.4 2.8,7.1 2.6,8.4 l -0.3,2.3 c 0.8,0.4 1.5,0.6 2.6,0.6 h 1 l -1.2,-7.4 -0.1,-0.8 c 0,-0.9 1.6,-0.7 2.5,-1.2 0.6,-0.3 1.4,-1.2 1.8,-1.7 1.1,-1.5 2,-2.7 3,-4.2 3.9,-5.4 3.5,-2.4 10.2,-4 v -0.6 h 1.6 c 1,0 1.8,-0.8 1.8,-1.8 v -0.4 c 0,-2.4 -2.5,-2.5 -2.5,-5.6 l -3.3,-3.4 5.4,-2.9 z m 14.6,28.9 c 0.4,-0.4 0.4,-1.5 0.4,-2.3 l -0.4,2.3 z m -16.1,-4.3 c 0,-0.8 0,-1.9 -0.4,-2.3 l 0.4,2.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 121.2,104.9 c 0.4,0.4 0.4,1.5 0.4,2.3 l 1,8.2 v 0.6 h 13 l 1.7,-13.2 h -16.3 l 0.2,2.1 z"}],i["GR.I.FF.SATELLITE"]=[{type:"path",stroke:!N&&O,fill:!!N&&O,d:"m 115,70 20,0 0,55 -20,0 z m -25,5 20,0 0,45 -20,0 z m -25,-5 20,0 0,55 -20,0 z"},{type:"path",fill:!1,d:"m 110,100 5,0 m -30,0 5,0 m 10,27 0,-7 m -20,15 c 10,-10 30,-10 40,0"}],i["GR.IN.IC.FARM/RANCH"]=[{type:"path",stroke:!1,d:"m 119.9,119 v -0.2 c 0,-2 1.5,-3.7 3.5,-3.7 h 0.4 c 2.2,0 3.7,1.6 3.7,4 v 0.6 c 0,1.2 -2.1,2.8 -3.7,2.8 h -0.4 c -1.9,0 -3.5,-1.6 -3.5,-3.5 z m -52,-10.7 c 1.3,-2 1.1,-2.7 3.2,-4.4 1.3,-1 3.3,-1.9 5.5,-1.9 h 0.6 c 4.7,0 9,4.1 9,8.8 v 1.1 c 0,5 -4,9.2 -8.8,9.2 H 76.9 c -5.4,0 -9.4,-4.2 -9.4,-9.6 0,-1.4 0.4,-1.6 0.4,-3 l 0,0 z m 7.9,-20.2 c -0.8,0 -1.5,-4.4 -1.8,-5.3 -0.2,-1 -1.3,-4.6 -1.3,-5.5 h 24.1 c 0.5,0 1.3,-0.8 1.3,-1.3 v -2.2 c 0,-0.7 -0.8,-1.1 -1.5,-1.1 h -31.8 c -0.7,0 -1.5,0.4 -1.5,1.1 v 2.2 c 0,0.5 0.8,1.3 1.3,1.3 h 3.5 l 2.6,16 -6.8,2.5 2.8,3.4 c -1,1.3 -2.3,2.1 -3.6,4.2 -0.4,0.8 -1.9,4.4 -1.9,5.5 v 2.2 c 0,5.4 1.6,8.8 4.3,11.5 2.3,2.3 6.5,4.8 11,4.8 h 0.4 c 8.8,0 15.8,-7.4 15.8,-16 h 13.4 c 0.6,0 1.9,1.4 2.4,1.8 h 8.6 c -1.1,1.6 -2.2,2.9 -2.2,5.7 0,4.6 3.9,8.6 8.6,8.6 4.4,0 8.8,-3.8 8.8,-7.9 v -2 c 0,-1.2 -1.5,-3.4 -2,-4.4 h 7.2 l 1,-4.6 h -7.2 v -0.6 l 1.2,-8.1 -0.1,-3.3 c 0,-0.6 -1.7,-2.1 -2.2,-2.4 l -16,-0.5 V 78.2 c 0,-0.5 -0.4,-0.9 -0.9,-0.9 -0.5,0 -0.9,0.4 -0.9,0.9 v 15.4 c -2.2,-0.2 -6,-0.4 -8.1,-0.4 -1.3,0 -2.9,0.1 -4.2,0 -2.1,-0.1 -2,-1.3 -2.9,-1.3 h -4.6 l 2,12.3 H 91.1 V 98.6 C 91.1,97.8 87.1,94.4 86.1,94.4 H 78.7 V 89.8 L 77.5,88.1 75.8,88 z M 88.1,92 c 0,0.5 0.1,0.2 0.2,0.9 h 0.6 c 0.9,0 8.5,-6.4 10.1,-6.8 V 85.4 c 0,-0.5 -0.2,-0.6 -0.6,-0.6 h -0.4 C 97.5,84.7 88.1,91.6 88.1,92 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 119.9,119 c 0,1.9 1.6,3.5 3.5,3.5 h 0.4 c 1.6,0 3.7,-1.6 3.7,-2.8 v -0.7 c 0,-2.3 -1.5,-4 -3.7,-4 h -0.4 c -2,0 -3.5,1.7 -3.5,3.7 v 0.2 z m -52,-10.7 c 0,1.4 -0.4,1.7 -0.4,3.1 0,5.4 4.1,9.6 9.4,9.6 h 0.6 c 4.8,0 8.8,-4.3 8.8,-9.2 v -1.1 c 0,-4.7 -4.3,-8.8 -9,-8.8 h -0.6 c -2.2,0 -4.3,0.9 -5.5,1.9 -2.2,1.7 -1.9,2.4 -3.2,4.4 z"}],i["GR.IN.IC.GRAIN STORAGE"]=[{type:"path",stroke:!1,d:"m 122.8,69.6 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -1e-5,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -1e-5,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 0,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -2e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.6e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -2e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,0 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -10e-7,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -4e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,0 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,1e-6 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -10e-6,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -10e-7,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.6e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 m 24.4,48.1 -0.2,2.4 h 0.4 l -1.7,3 -1,-1.7 -0.1,2 0.5,0.6 -1.2,3 -1.5,-3 0.4,3.6 0.8,0.2 -3.1,9.7 -0.5,-4.2 0.1,-1.8 c 0,-1.5 0.8,-4.7 1,-6.3 0.3,-1.7 1.3,-4.5 1.4,-6 0.6,0.1 0.4,0.2 0.8,0.2 0.4,0 2.3,-1.5 2.6,-1.8 l -3,0.6 0.8,-2.7 c 0.6,0.1 0.4,0.2 0.8,0.2 0.4,0 2.6,-1.7 2.8,-2 l -3,0.8 0.7,-2.4 c 1.3,0 2.1,-0.8 2.8,-1.4 l -2.4,0.4 0.8,-2 c 1.1,-0 1.5,-0.9 1.8,-1.8 l -1.3,0.7 2.3,-6.1 -0.8,-0.1 -2.1,5.9 -0.3,0 -0.5,-2.1 -0.1,-0 c 0,1.5 -0.4,1.6 -0.4,2.4 0,0.5 0.2,0.5 0.6,0.6 l -0.9,2.1 -1,-1.4 c -0.1,1.6 -0.4,1.9 0.7,2.4 l -0.8,2.4 -1.7,-2.2 0.4,2.8 0.6,0.5 -0.5,2.7 -1.5,-1.9 0.2,2.4 0.9,0.5 c 0,0.4 -1,4.6 -1.2,6 -0.4,2.3 -0.9,3.5 -0.9,6.3 l -1.2,-3.6 0.6,-0.8 -0,-2 -1.2,1.2 -0.8,-2.8 0.6,-0.8 -0,-2 -1.1,1.2 -0.7,-1.7 c 1,-0.5 1,-1.6 1,-3.2 l -1.3,2.1 c -0.7,-0.2 -1.1,-1.4 -1.3,-2.3 0.3,-0.4 0.6,-0.5 0.6,-1 v -1.6 h -0.4 l -0.7,1.8 c -0.2,-0.2 -0.7,-0.7 -0.7,-1.2 0,-0.4 0.6,-0.3 0.6,-1 v -0.2 c 0,-1.1 -0.4,-1.1 -0.4,-2.4 l -0.7,2.3 -0.3,0 -2.8,-5.9 -0.4,0.2 2.5,5.7 -1.3,-0.7 1,1.9 1,0 0.6,1 -2.6,-0.4 c 0.4,0.4 1.7,1.4 2.4,1.4 0.1,0 0.4,-0.1 0.6,-0.2 l 1,2.2 -3.2,-0.6 c 1.1,1 2,1.7 3.6,1.6 l 1.1,2.7 -2.9,-0.4 c 0.7,1 1.7,1.3 3,1.5 0.4,0.1 1.1,2.8 1.2,3.5 l -3,-0.6 2.2,1.6 h 1 c 1.2,2.3 2.4,11.9 2.4,15.8 h 1.4 l -0.2,-2.2 0,-1 c 0,-4 2.9,-9.3 3.2,-12.3 0.8,0.1 0.5,0.2 1,0.2 0.2,0 2.9,-1.2 3.2,-1.4 l -3.6,0.3 1.2,-3.1 0.8,0.4 3,-1.3 -3.2,0.2 1.4,-2.8 c 0.4,0.1 0.4,0.2 1,0.2 0.3,0 2.1,-1 2.4,-1.2 l -2.8,0.2 1.4,-2 c 1.5,0.1 1.5,-0.4 2.4,-1.6 l -1.4,0.4 c 0.5,-1.1 1.2,-2.2 1.8,-3.2 0.4,-0.6 2,-2.7 0.8,-3 l 0.2,0.1 -3.4,5.8 -0.4,-2.3 h -0.2 c 0,1.4 -0.6,1.7 -0.6,2.2 0,0.3 0.3,0.7 0.4,1 l -1.5,2 -0.7,-1.9 z m -25.4,13.5 c 0,-3.7 0.1,-9.1 0.7,-12.4 0.4,-2 0.1,-4 0.6,-6 0.4,-1.7 0.4,-4.2 0.8,-5.8 2.8,-10.1 1,-11.8 14.3,-11.8 h 4.4 c 11.6,0 12.6,1.2 14.2,11.3 1.2,7.6 2,14.6 2,23.6 v 8.3 l -0.4,3.6 c -1.1,1.6 -2.1,3.4 -4.9,3.4 H 86.7 c -5.4,0 -5.3,-6.4 -5.3,-11.9 v -2.4 z m -5.8,-32.5 c 2.1,-0.6 0.4,-1.3 4.4,-1 2.4,0.2 3,0.3 5,0.8 -0.7,1.1 -4.6,3 -6.5,3 h -0.4 c -0.9,0 -2.4,-1.2 -2.4,-2 v -0.8 h -0 z m 43.2,-1.5 c 2.2,-0.2 4.8,0.9 4.8,3.1 v 0.6 c 0,0.6 -0.6,0.8 -1.2,0.8 h -0.6 c -1.8,0 -6.2,-2.7 -6.9,-3.9 l 4,-0.6 z m -36.6,-6.7 c 0,-1 1,-2.2 1.8,-2.2 h 0.6 c 0.6,0 1.4,1.6 1.4,2.2 v 4.2 c 0,1.3 -0.4,1.5 -0.4,2.8 -1,-0.3 -3.4,-4.3 -3.4,-5.5 v -1.4 h -0 z m 31.7,2.8 c 0,-2.8 -0,-5.2 2.8,-5.2 h 0.6 c 0.6,0 1,0.7 1,1.4 0,2 -3,6.8 -4.4,7.3 v -3.6 h -0 z m 1.4,3.8 c 0.5,-1.8 3.8,-5 3.8,-7.1 v -1.4 c -0.6,-0.3 -0.7,-1.2 -1.6,-1.2 h -0.6 c -2.6,0 -3.8,2 -3.8,4.5 v 4.2 c -2,-0.5 -2.3,-1 -5.2,-1.2 -2,-0.2 -3.7,-0.4 -6,-0.4 h -3.6 c -4.8,0 -8.9,0.3 -12.1,2 0.2,-0.7 0.4,-0.9 0.4,-1.8 v -3.4 c 0,-1.4 -1,-3.8 -2.2,-3.8 h -0.8 c -0.8,0 -2.6,1.9 -2.6,3 0,2 2.1,5.5 3,6.8 l -5.7,-0.5 c -1.2,0 -3.4,1.1 -3.4,2.1 v 0.6 c 0,1.3 1.7,2.8 3,2.8 h 0.2 c 2.9,0 4.5,-2 6.3,-2.4 -1.9,3.5 -3.8,22 -3.8,28.1 v 6 c 0,5.9 0.3,12.3 6.1,12.3 h 26.1 c 4.1,0 6.1,-3.8 6.1,-7.9 v -10.5 c 0,-2.3 -0.2,-5.5 -0.4,-7.7 -0.2,-1.8 -0.8,-5.7 -0.8,-7.4 0,-2.6 -0.7,-4.7 -1,-7.1 -0.2,-2.1 -1.3,-4.3 -1.8,-6.2 1.2,0.6 4.9,3 6.1,3 h 1.2 c 1,0 1.8,-0.8 1.8,-1.8 v -0.2 c 0,-2.2 -1.5,-3.8 -3.8,-3.8 h -2.6 l -2.8,0.4 z m -28.1,0.6 c 0.5,1.9 8.9,3.2 11.9,3.2 h 1 c 3.1,0 12.5,-1.4 12.7,-3.6 -4.1,-1 -6.5,-1.8 -11.9,-1.8 h -1.4 c -2.4,0 -4.4,0.4 -6.5,0.6 -2.9,0.4 -3.8,1.1 -5.8,1.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.3,110.1 c -0.3,0.3 -2.2,1.8 -2.6,1.8 -0.4,0 -0.2,-0.1 -0.8,-0.2 0,1.5 -1.1,4.3 -1.3,6 -0.3,1.6 -1,4.8 -1,6.3 l -0.1,1.8 0.5,4.2 3.1,-9.7 -0.8,-0.2 -0.4,-3.6 1.5,3 1.2,-3 -0.5,-0.6 0.1,-2 1,1.7 1.7,-3 h -0.4 l 0.2,-2.4 -0.3,-1.2 -1.2,1.2 z m 0,0 1.2,-1.2 0.3,1.2 0.7,1.9 1.5,-2 c -0.1,-0.3 -0.4,-0.7 -0.4,-1 0,-0.5 0.6,-0.8 0.6,-2.2 h 0.2 l 0.4,2.3 3.4,-5.7 -0.2,-0.1 c 1.3,0.4 -0.4,2.4 -0.8,3 -0.6,1 -1.3,2.1 -1.8,3.2 l 1.4,-0.4 c -0.8,1.2 -0.9,1.7 -2.4,1.6 l -1.4,2 2.8,-0.2 c -0.3,0.2 -2,1.2 -2.4,1.2 -0.5,0 -0.5,-0.1 -1,-0.2 l -1.4,2.8 3.2,-0.2 -3,1.3 -0.8,-0.4 -1.2,3.1 3.6,-0.4 c -0.3,0.2 -2.9,1.4 -3.2,1.4 -0.5,0 -0.2,-0.1 -1,-0.2 -0.3,2.9 -3.2,8.2 -3.2,12.3 l -0.1,1 0.3,2.2 h -1.4 c 0,-4 -1.2,-13.6 -2.4,-15.8 h -1 l -2.2,-1.6 3,0.6 c 0,-0.7 -0.8,-3.4 -1.2,-3.5 -1.3,-0.2 -2.3,-0.5 -3,-1.5 l 2.9,0.4 -1.1,-2.8 c -1.5,0.1 -2.5,-0.6 -3.6,-1.6 l 3.2,0.6 -1.1,-2.2 c -0.2,0.1 -0.5,0.2 -0.6,0.2 -0.7,0 -2,-1 -2.4,-1.4 l 2.6,0.4 -0.6,-1 h -1 l -1,-1.9 1.3,0.7 -2.5,-5.7 0.4,-0.2 2.8,5.9 0.3,-0 0.7,-2.4 c 0,1.3 0.4,1.2 0.4,2.4 v 0.2 c 0,0.7 -0.6,0.6 -0.6,1 0,0.4 0.5,1 0.7,1.2 l 0.7,-1.8 h 0.4 v 1.6 c 0,0.5 -0.3,0.6 -0.6,1 0.2,0.9 0.5,2.1 1.3,2.3 l 1.3,-2.1 c 0,1.5 0,2.6 -1,3.2 l 0.7,1.7 1.1,-1.2 0,2 -0.6,0.8 0.8,2.8 1.2,-1.2 0,2 -0.6,0.7 1.2,3.6 c 0,-2.8 0.4,-4 0.9,-6.2 0.3,-1.3 1.3,-5.6 1.2,-6 l -0.9,-0.5 -0.2,-2.5 1.5,1.9 0.5,-2.7 -0.6,-0.5 -0.4,-2.8 1.7,2.2 0.8,-2.4 c -1,-0.5 -0.8,-0.8 -0.7,-2.4 l 1,1.4 0.9,-2.1 c -0.4,-0.1 -0.6,-0 -0.6,-0.6 0,-0.8 0.4,-0.9 0.4,-2.4 l 0.1,0 0.5,2.1 0.3,-0 2.1,-5.9 0.8,0.1 -2.3,6.1 1.3,-0.7 c -0.2,0.9 -0.6,1.8 -1.8,1.8 l -0.8,2 2.4,-0.4 c -0.7,0.6 -1.5,1.4 -2.8,1.4 l -0.7,2.4 3,-0.8 c -0.2,0.3 -2.4,2 -2.8,2 -0.4,0 -0.2,-0.1 -0.8,-0.2 l -0.8,2.7 3,-0.5 z M 87.1,90.1 c 2,-0.5 2.9,-1.2 5.8,-1.6 2.1,-0.3 4.1,-0.6 6.5,-0.6 h 1.4 c 5.4,0 7.8,0.8 11.9,1.8 -0.2,2.2 -9.6,3.6 -12.7,3.6 h -1 c -3,0 -11.4,-1.3 -11.9,-3.2 z m -5.8,33.5 v 2.4 c 0,5.5 -0.1,11.9 5.3,11.9 h 26.4 c 2.8,0 3.8,-1.7 4.9,-3.4 l 0.4,-3.6 v -8.3 c 0,-9 -0.8,-15.9 -2,-23.6 -1.6,-10.1 -2.6,-11.3 -14.2,-11.3 h -4.4 c -13.3,0 -11.6,1.7 -14.3,11.8 -0.4,1.6 -0.4,4 -0.8,5.8 -0.5,2 -0.2,3.9 -0.6,6 -0.6,3.3 -0.7,8.6 -0.7,12.4 z M 114.8,90.2 c 0.7,1.2 5.2,3.9 6.9,3.9 h 0.6 c 0.6,0 1.2,-0.2 1.2,-0.8 v -0.6 c 0,-2.2 -2.6,-3.3 -4.8,-3.1 l -4,0.6 0,0 z m -39.2,0.9 v 0.8 c 0,0.8 1.4,2 2.4,2 h 0.4 c 2,0 5.8,-1.9 6.5,-3 -2,-0.4 -2.6,-0.6 -5,-0.8 -3.8,-0.3 -2.1,0.4 -4.3,1 z m 38.3,-5.3 v 3.6 c 1.3,-0.5 4.4,-5.3 4.4,-7.3 0,-0.7 -0.4,-1.4 -1,-1.4 h -0.6 c -2.8,-0 -2.8,2.4 -2.8,5.1 z m -31.7,-2.8 v 1.4 c 0,1.3 2.4,5.3 3.4,5.5 0,-1.3 0.4,-1.5 0.4,-2.8 v -4.2 c 0,-0.6 -0.8,-2.2 -1.4,-2.2 h -0.6 c -0.8,0 -1.8,1.3 -1.8,2.2 z"}],i["GR.IN.IC.ATM"]=[{type:"path",stroke:!1,d:"m 73.6,116.3 c 5.1,-0.1 15.8,-6.6 17,-6.6 0.4,0 7.4,3.8 8.9,4.2 -0.4,0.6 -5.1,4.6 -6.2,5.7 -1.2,1.2 -4.7,5.8 -5.5,6.4 -1.6,-0.8 -14,-8.9 -14.2,-9.6 z m -15.1,-6.2 11.9,-2.5 11.1,5.6 -9.6,3 16.2,10.7 -0,-0.2 6.4,-7.5 26.9,12.7 20.3,-46.8 -50.2,-17.2 c -0.6,2.2 -5.2,9.1 -6.5,11.8 -0.8,1.8 -2.3,4.4 -3.3,6 -1.2,1.8 -2.2,4.1 -3.3,6 -1.2,2 -2.1,3.8 -3.3,5.8 -1.2,1.9 -2.1,4.2 -3.3,6 -2.4,3.6 -0.2,2.7 -5.5,3.7 -2.6,0.5 -5.2,1 -7.7,1.6 m 62,21.5 -25.2,-11.8 4.8,-4 7.3,3.5 1.2,-2.4 -23.9,-11.7 v 0.2 l -1,2.2 6,2.9 -6.2,3.4 -11.8,-5.8 -0.2,0 20.7,-37 0.2,0.1 47.4,16.1 h 0.2 l -19.4,44.2 z m 7.8,-31.3 1.1,-2 -5.8,-2.3 -0.8,2.3 z m -2.7,5.2 1.2,-1.9 -5.6,-2.3 -0.8,2.2 z m -22,-7.3 c 0.6,0.4 2.1,1.4 2.1,2.1 v 2.4 c 0,0.8 -1.7,1.5 -2.6,1.5 h -0.2 c -0.8,0 -1,-0.2 -1.7,-0.4 l 2.4,-5.7 z m -3.4,-6.4 c 0,-2.2 1.1,-2.8 3.2,-2.8 h 0.2 c 0.7,0 1,0.2 1.5,0.4 l -2.2,5.1 c -0.9,-0 -2.8,-1.2 -2.8,-2.4 v -0.2 z m 5.6,-4.2 c -0.3,-0.1 -1.2,-0.5 -1.6,-0.5 h -1.9 c -0.7,0 -2.5,0.6 -2.9,0.9 -0.3,0.2 -1.4,2.1 -1.4,2.5 v 1.7 c 0,2.1 3.8,4.2 3.8,4.9 0,0.4 -2.2,4.6 -2.4,5.7 -0.6,-0.3 -2.5,-1.8 -2.5,-2.6 v -0.6 c 0,-0.8 0.6,-1.4 0.8,-2.1 -0.9,-0.2 -2,-1.1 -2.4,-1.2 -0.4,-0.1 -1,1.7 -1,2.3 v 0.4 c 0,2.7 4.2,5.4 4.2,5.7 0,0.6 -0.4,1.4 -0.5,2 l 1.7,0.8 0.6,-1.7 c 1.4,0 2,0.8 3.6,0.8 h 0.6 c 1.4,0 2.6,-0.5 3.2,-1.3 0.3,-0.4 1.5,-2.4 1.5,-3 v -0.4 c 0,-2.6 -2.8,-4.8 -4.4,-5.9 l 2.5,-5.6 h 0.4 c 0.4,1.2 1.5,0.6 1.5,3.6 l 2.8,1.2 v -1.7 c 0,-2 -2,-4.1 -3.8,-4.6 l 0.8,-2.1 -2.1,-0.5 -0.8,1.5 z m 13,18.4 -0.9,2 5.4,2.2 -0,-0.2 1.2,-1.8 z m -22.4,-25.2 26.1,9.5 -11,24.1 -26.7,-12.8 11.6,-20.8 z m -12.5,21.2 27.8,13.4 11.7,-25.7 c -1,-0.1 -11.8,-4.2 -13.4,-4.8 -1.2,-0.5 -13.3,-5 -13.5,-5 -0.9,0 -5.4,9.5 -6.4,10.8 -0.8,1.3 -5.9,10.3 -6.1,11.2 z m 31.7,11.2 5.4,2.2 -0.1,-0.2 1.3,-1.8 c -1.1,-0.2 -5,-2.2 -5.5,-2.2 -0.4,0 -1.1,1.6 -1.2,2.1 z m -25.8,0.6 4.3,2.9 -6,5.8 -6,-4.1 7.7,-4.6 z m -9.1,4.5 7.4,4.9 7.1,-6.6 c -0.5,-0.4 -5.3,-3.6 -5.4,-3.6 -1,0 -7.6,4.9 -9.1,5.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 115.7,111.8 c 0,-0.5 0.8,-2.1 1.2,-2.1 0.5,0 4.4,2 5.5,2.3 l -1.3,1.8 0.1,0.2 -5.4,-2.2 z m 3.2,-7.1 5.7,2.2 -1.2,1.8 0,0.2 -5.4,-2.2 0.9,-2 z m 2.4,-4.8 5.6,2.3 -1.2,1.9 -5.2,-2 0.8,-2.2 z m 2.5,-5.3 5.8,2.3 -1.1,2 -5.5,-2 0.8,-2.3 z m -39.7,6 c 0.2,-1 5.3,-10 6.1,-11.2 0.9,-1.4 5.4,-10.8 6.4,-10.8 0.2,0 12.3,4.5 13.5,5 1.7,0.7 12.5,4.8 13.5,4.8 l -11.7,25.7 -27.8,-13.4 z m 55.9,-14.6 h -0.2 l -47.4,-16.1 -0.2,-0.1 -20.7,37 0.2,-0 11.8,5.8 6.3,-3.4 -6,-2.9 1,-2.2 v -0.2 l 23.9,11.7 -1.2,2.4 -7.3,-3.5 -4.8,4 25.2,11.8 19.4,-44.2 0,0 z m -59.1,30.9 c 1.5,-0.4 8,-5.3 9.1,-5.3 0.2,0 4.9,3.2 5.5,3.6 l -7.2,6.6 -7.4,-4.9 z m -7.2,-0.6 c 0.2,0.8 12.6,8.8 14.2,9.6 0.8,-0.6 4.3,-5.2 5.5,-6.4 1.1,-1.1 5.8,-5.1 6.2,-5.7 -1.6,-0.3 -8.5,-4.1 -8.9,-4.1 -1.2,0 -11.9,6.5 -17,6.6 z m 26.6,-25.9 v 0.2 c 0,1.2 1.8,2.4 2.7,2.4 l 2.2,-5 c -0.4,-0.2 -0.8,-0.4 -1.5,-0.4 h -0.2 c -2.1,0 -3.2,0.7 -3.2,2.8 z m 0.9,12.1 c 0.7,0.2 0.9,0.4 1.7,0.4 h 0.2 c 1,0 2.6,-0.7 2.6,-1.5 v -2.4 c 0,-0.7 -1.6,-1.7 -2.1,-2.1 l -2.4,5.6 z m 5.5,-17.7 2.1,0.5 -0.8,2.1 c 1.8,0.4 3.8,2.5 3.8,4.6 v 1.7 l -2.8,-1.1 c 0,-3 -1.1,-2.4 -1.5,-3.6 h -0.4 l -2.5,5.6 c 1.6,1.1 4.4,3.3 4.4,5.9 v 0.4 c 0,0.6 -1.2,2.6 -1.5,3 -0.6,0.8 -1.8,1.3 -3.2,1.3 h -0.6 c -1.6,0 -2.2,-0.7 -3.6,-0.8 l -0.6,1.7 -1.7,-0.8 c 0.1,-0.6 0.5,-1.4 0.5,-2 0,-0.3 -4.2,-2.9 -4.2,-5.7 v -0.4 c 0,-0.6 0.6,-2.4 1,-2.4 0.4,0.1 1.4,1 2.4,1.2 -0.2,0.7 -0.7,1.3 -0.7,2.1 v 0.6 c 0,0.8 1.8,2.3 2.4,2.6 0.2,-1 2.4,-5.3 2.4,-5.7 0,-0.7 -3.8,-2.8 -3.8,-4.9 V 89.1 c 0,-0.4 1.1,-2.3 1.4,-2.5 0.4,-0.3 2.2,-0.9 2.9,-0.9 h 1.9 c 0.4,0 1.4,0.4 1.6,0.5 l 0.8,-1.4 z m -21.8,15.4 26.6,12.9 11,-24.1 -26,-9.5 -11.6,20.8 z m 5,12.1 -7.7,4.6 6,4.1 6,-5.8 z"}],i["GR.IN.IC.BANK"]=[{type:"path",stroke:!1,d:"m 100.8,110.6 c 2.4,0 5.3,1.9 5.3,4.4 v 0.7 c 0,3.1 -2.1,4.9 -5.3,4.9 v -9.9 z m -6.6,-8.8 c 0,-2.3 1.7,-4.4 4,-4.4 h 0.7 v 9 c -1.9,-0.4 -4.6,-1.6 -4.6,-3.7 v -0.9 z m 6.6,-4.4 c 2.2,0 4.6,1.6 4.6,3.5 v 0.9 h 3.5 c 0,-5.3 -3.7,-6.7 -8.1,-7.7 v -2.4 h -2 v 2.4 c -3.9,0 -8.2,3.5 -8.2,7 v 2.6 c 0,1.3 2,3.6 3,4.2 1,0.6 3.8,1.8 5.1,1.9 v 10.6 c -3.4,-0.1 -5.2,-2.6 -5.2,-6.1 h -3.3 l 0.2,3.5 c 1.1,1.7 0.9,2.8 2.9,4.1 1.3,0.8 3.4,1.6 5.5,1.6 v 4 h 2 v -3.9 c 4.9,0 9,-3.4 9,-8.1 v -1.8 c 0,-4.2 -5.4,-6 -9,-6.8 v -9.4 z m -25.3,15.2 v -2.4 c 0,-2.2 2.6,-7.4 3.1,-9.4 0.7,-2.7 3.1,-5.9 4.7,-8 3.5,-4.6 8.5,-8.9 16.5,-8.9 h 4.4 c 3.4,0 8.8,4.3 10.4,6.5 1.3,1.7 2.2,3.1 3.4,5 0.5,0.7 2.7,5.2 2.7,5.9 v 0.7 h 0.4 v 0.7 c 0,0.4 0.9,1.5 0.8,3.1 l 0.5,0.7 c 0,2 1.1,6.8 1.3,9 0.4,3.2 1.3,5.6 -0.7,8.5 0,2.4 -5.2,8.7 -6.2,8.8 l -9.2,-1.5 c -1.8,-0.3 -6.8,2 -9.2,2 -2,0 -5.6,-1.7 -7.5,-1.7 -1.6,0 -3.2,1.3 -5.5,1.3 h -0.6 c -1.9,0 -5.9,-6.1 -7,-7.7 -1.8,-2.6 -2.4,-8 -2.4,-12.3 z m 30.7,-31 -6.1,-1.1 c -0.8,-0.1 -5.2,1.1 -5.8,1.3 l -6.3,-11.5 1.7,0.5 v -2.9 l 8.9,3.4 0.3,-3.5 3.2,2.5 5.7,-2.6 v 2.6 l 7.5,-1.4 -9.3,13 0,0 z m 11.8,-14.5 -9.1,1.6 v -2.8 c -0.9,0.5 -5.7,2.9 -6.6,2.9 -0.1,0 -3.4,-2.6 -4,-2.9 l -0.7,4 -8.8,-3.6 v 2.9 l -3.1,-1 8.1,15.1 -0.2,0.1 c -4.6,1.1 -10.3,6.8 -12.7,10.4 -0.8,1.1 -1.3,2.6 -2,3.7 -1.4,1.8 -0.9,2.5 -1.7,4 -0.6,1.1 -2.9,7.2 -2.9,8.6 v 3.7 c 0,1 0.7,5.8 1,6.7 0.4,1.4 0.4,2 0.8,3.2 0.3,0.9 0.9,1.6 1.4,2.3 1.3,2 4.8,7.5 7.6,7.5 2.5,0 4.3,-1.3 5.7,-1.3 2.3,0 5.2,1.7 7.3,1.7 h 0.7 c 2,0 5.7,-1.4 8,-1.9 1.8,-0.3 5.9,1 8.5,1 h 1.7 c 1.7,0 4.8,-4.2 5.8,-5.5 1.1,-1.4 1.3,-2.2 1.7,-4 0.1,-0.4 1.1,-4.3 1.1,-4.4 0,-3 -0.9,-4.1 -1.1,-5.9 -0.2,-2.4 -0.4,-4 -0.7,-6.1 -0.2,-1.7 -2.8,-8.6 -3.6,-10.3 -2.4,-4.9 -7.7,-13.2 -14,-13.7 l 11.7,-16.2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 100.8,120.4 c 3.2,0 5.3,-1.7 5.3,-4.9 v -0.6 c 0,-2.5 -2.9,-4.3 -5.3,-4.4 v 9.8 z m -6.6,-18.7 v 0.9 c 0,2.2 2.8,3.3 4.6,3.7 v -9 h -0.7 c -2.3,0 -4,2 -4,4.4 z m 6.6,5 c 3.6,0.8 9,2.6 9,6.8 v 1.7 c 0,4.7 -4.1,8.1 -9,8.1 v 4 h -2 v -3.9 c -2,0 -4.2,-0.7 -5.5,-1.6 -2,-1.3 -1.7,-2.5 -2.9,-4.2 l -0.2,-3.5 h 3.3 c 0,3.5 1.8,6.1 5.3,6.2 v -10.6 c -1.3,-0.1 -4.1,-1.3 -5.1,-2 -1,-0.6 -3,-3 -3,-4.2 v -2.6 c 0,-3.5 4.2,-7 8.1,-7 v -2.4 h 2 v 2.4 c 4.4,1 8.1,2.3 8.1,7.7 h -3.5 v -0.9 c 0,-1.9 -2.5,-3.5 -4.6,-3.5 v 9.5 l 0,0 z m -25.3,5.8 c 0,4.3 0.6,9.8 2.4,12.3 1.1,1.6 5.1,7.7 7,7.7 h 0.7 c 2.3,0 3.9,-1.3 5.5,-1.3 1.9,0 5.5,1.7 7.5,1.7 2.5,0 7.4,-2.3 9.2,-2 l 9.1,1.5 c 1,0 6.2,-6.4 6.2,-8.8 2,-2.9 1,-5.3 0.7,-8.6 -0.2,-2.2 -1.3,-6.9 -1.3,-9 l -0.5,-0.6 c 0.1,-1.6 -0.8,-2.7 -0.8,-3.1 v -0.7 h -0.4 v -0.7 c 0,-0.7 -2.2,-5.2 -2.7,-5.9 -1.1,-1.9 -2.1,-3.2 -3.4,-5 -1.6,-2.2 -7,-6.5 -10.4,-6.5 h -4.4 c -8,0 -13,4.4 -16.5,8.9 -1.6,2.1 -4,5.3 -4.7,8 -0.5,2 -3.1,7.2 -3.1,9.4 v 2.4 z m 40,-44 -7.4,1.5 v -2.6 l -5.8,2.6 -3.2,-2.4 -0.3,3.5 -8.9,-3.4 v 2.9 l -1.7,-0.5 6.3,11.5 c 0.5,-0.2 5,-1.4 5.8,-1.3 l 6.1,1.1 9.3,-13 0,0 z"}],i["GR.IN.IC.BULLION STORAGE"]=[{type:"path",stroke:!1,d:"m 123.1,77.9 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -1e-5,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -1e-5,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -10e-6,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,10e-7 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -1e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -1e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,0 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -10e-7,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -3e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,0 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,10e-7 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -1e-5,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -2e-6,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.5e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 M 103.6,119.3 h 9.6 c 0.4,0 9,9.2 9.6,10.1 H 95.6 c 0.2,-1 7.4,-10.1 8,-10.1 z m -29.2,0 h 9.9 c 0.6,0 8.2,9 8.9,10.1 H 65.9 c 0.3,-1 7.8,-10.1 8.4,-10.1 l 0,0 z m 11.5,0 h 15.4 l -6.9,9.9 -8.5,-9.9 z m -5.5,-1 c 0.7,-1.1 7.6,-9.4 8.4,-9.4 h 9.2 c 0.7,0 8.9,8.5 9.2,9.4 H 80.4 z m 43.7,10.8 -9.5,-10.4 10.4,-14.3 9.7,8.5 -10.7,16.1 0,0 z m -4.8,-24.8 4.8,-0 -10.5,14.1 -4.1,-0.1 9.8,-13.9 z m -31.1,-0.2 2.8,0.1 c -1.1,1.6 -4.6,4.9 -6.2,6.8 -1.7,2.1 -4.2,5.1 -5.6,7.2 l -4.2,-0.1 13.2,-14.1 z m 21.1,-8.6 c 0.9,0.6 9,8.2 9,8.5 0,0.1 -9.3,13.6 -9.9,14 l -8.9,-9.9 9.8,-12.6 z M 89.1,108 c 0.9,-1.3 11.4,-12.6 12.1,-12.6 h 6.8 l -9.5,12.5 -9.4,0 z m 2.9,-4.6 h -4.6 c -1.2,1.8 -4.3,4.9 -6,6.6 -2.1,2.1 -3.9,4.4 -6,6.5 -1.3,1.3 -11.2,12.8 -11.4,13.7 0.5,0.1 0.5,0.2 1.2,0.2 l 59.3,-0 11.6,-17.5 -0.3,0.1 -10.5,-9.6 h -5.8 c -1.5,-1 -9.6,-8.9 -10.4,-8.9 h -8.2 c -0.9,0 -7.6,8 -9,8.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 103.6,119.3 c -0.5,0 -7.7,9.2 -8,10.1 h 27.3 c -0.6,-1 -9.2,-10.1 -9.6,-10.1 h -9.6 z m -29.2,0 c -0.6,0 -8.2,9.1 -8.4,10.1 h 27.3 c -0.7,-1.1 -8.3,-10.1 -8.9,-10.1 H 74.3 l 0,0 z m 50.7,-14.7 -10.4,14.3 9.5,10.4 10.7,-16.1 z m -30.7,24.7 6.9,-9.9 -15.4,0 z m 5.1,-21.1 8.9,9.9 c 0.6,-0.4 9.9,-13.9 9.9,-14 0,-0.3 -8.1,-7.9 -9,-8.5 l -9.9,12.6 z m -19.1,10.2 h 26.8 c -0.2,-0.9 -8.5,-9.4 -9.2,-9.4 h -9.2 c -0.9,0 -7.7,8.3 -8.4,9.4 z m 33.2,0.1 10.5,-14.1 -4.8,0 -9.8,13.9 z m -38.6,-0.2 4.2,0.1 c 1.4,-2.1 3.9,-5.1 5.6,-7.2 1.6,-1.9 5.1,-5.2 6.2,-6.8 l -2.8,-0.1 -13.2,14.1 z m 14.1,-10.3 9.4,-0 9.5,-12.5 h -6.7 c -0.7,0 -11.2,11.2 -12.1,12.6 z"}],i["GR.IN.IC.FEDERAL RESERVE BANK"]=[{type:"path",stroke:!1,d:"m 65.6,125.4 h 68.8 v 4.4 H 65.6 v -4.4 z m 58.1,-31.3 h 5.3 v 29.9 h -5.3 v -29.9 z m -10.6,0 h 5.1 v 29.9 h -5.1 v -29.9 z m -31.3,0 h 5.3 v 29.9 H 81.8 v -29.9 z m -10.6,0 h 5.1 v 29.9 h -5.1 v -29.9 z m 27.7,1.5 h 2 v 1.4 h 0.5 c 2.9,0 6,2.3 6,5.3 l -2.9,0.4 c -0.2,-0 -1,-1.9 -1.4,-2.4 -0.4,-0.5 -1.5,-1.1 -2.3,-1.2 v 7.8 c 3,0.3 7.3,2.3 7.3,5.3 v 1.1 c 0,4 -3.4,6.7 -7.3,6.7 v 2.5 h -2 v -2.5 c -1.7,-0 -4.1,-0.8 -5.1,-1.7 -0.8,-0.7 -2.4,-2.8 -2.4,-4.1 v -0.9 l 3.1,-0.5 c 0,2.3 2,4.9 4.4,4.9 v -8.6 c -2.3,-0 -6.9,-2.5 -6.9,-5.1 v -1.8 c 0,-3 3.2,-5.3 6.2,-5.3 h 0.7 v -1.4 z m -33.3,-7.5 h 68.8 v 4.6 H 65.6 v -4.6 z M 100,70.3 c 0.7,0.6 6.5,3.4 7.9,4.1 2.7,1.4 5.2,2.7 7.9,4.1 2.7,1.3 5.3,2.7 7.9,4.1 1.1,0.6 7.7,3.6 8.1,4 H 68.5 l 31.5,-16.1 0,0 z m -35.9,17.1 v 6 c 0,0.4 0.3,0.7 0.7,0.7 h 4.9 v 29.9 h -5.6 v 7.4 h 71.7 v -7.4 h -5.5 v -29.9 h 4.9 c 0.4,0 0.5,-0.1 0.5,-0.5 v -6.7 c -2,-0.7 -6.7,-3.4 -8.9,-4.6 -3,-1.5 -5.9,-3 -8.9,-4.6 -1.7,-0.8 -17.8,-9.1 -17.9,-9.1 -0.4,0 -16.3,8.2 -18.1,9.2 -1.9,1 -17.8,8.7 -17.8,9.6 l 0,0 0,0 z m 36.7,30.4 c 1.7,0 4,-2 4,-3.5 v -1.4 c 0,-2.1 -2.3,-2.7 -4,-3.1 v 8 z m -5.6,-14 c 0,1.6 2.2,2.6 3.6,2.7 v -7.4 c -1.3,0.3 -3.6,1.4 -3.6,2.7 v 2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 134.4,129.8 0,-4.4 -68.8,0 0,4.4 z m -5.5,-5.8 0,-29.9 -5.3,0 0,29.9 z m -10.8,0 0,-29.9 -5.1,0 0,29.9 z m -31.1,0 0,-29.9 -5.3,0 0,29.9 z m -10.7,0 0,-29.9 -5.1,0 0,29.9 z m -7.9,-37.5 63.3,0 c -0.4,-0.3 -6.9,-3.4 -8.1,-4 -2.7,-1.3 -5.2,-2.7 -7.9,-4.1 -2.7,-1.3 -5.2,-2.7 -7.9,-4.1 -1.4,-0.7 -7.2,-3.5 -7.9,-4.1 l -31.5,16.1 0,0 z m 65.9,6.2 0,-4.6 -68.8,0 0,4.6 z m -33.5,25.1 v -8 c 1.7,0.4 4,1 4,3.1 v 1.5 c 0,1.4 -2.2,3.5 -4,3.5 z m -5.6,-14 v -2 c 0,-1.3 2.4,-2.4 3.6,-2.7 v 7.4 c -1.5,-0.1 -3.6,-1.1 -3.6,-2.7 z m 3.6,-6.7 h -0.8 c -3,0 -6.2,2.3 -6.2,5.3 v 1.8 c 0,2.5 4.6,5.1 6.9,5.1 v 8.6 c -2.4,0 -4.4,-2.5 -4.4,-4.9 l -3.1,0.5 v 0.9 c 0,1.3 1.6,3.5 2.4,4.1 1,0.8 3.3,1.6 5.1,1.7 v 2.5 h 2 v -2.5 c 3.9,0 7.3,-2.7 7.3,-6.7 v -1.1 c 0,-3 -4.3,-5 -7.3,-5.3 v -7.8 c 0.8,0.1 1.9,0.6 2.3,1.2 0.3,0.5 1.1,2.3 1.4,2.4 l 2.9,-0.4 c 0,-3 -3.1,-5.3 -6,-5.3 h -0.6 v -1.4 h -2 v 1.4 z"}],i["GR.IN.IC.FINANCIAL EXCHANGE"]=[{type:"path",stroke:!1,d:"m 133.7,124.6 0,-1.4 -66.8,0 0.3,0 0,-47 -1,0 0,48.4 z m -29.5,-8.6 -9.8,-20.8 -5.9,14.4 -5.3,-6.5 -13.3,12.4 0.9,1 v 0.2 l 12.4,-11.3 5.5,7 h 0.3 c 0,-1 2.3,-5.6 2.8,-7 0.3,-1 1.1,-2.4 1.5,-3.4 0.3,-0.8 0.9,-3.1 1.5,-3.2 l 9.4,20.3 0.1,0.2 17.4,-27.4 0.2,0.1 8,15.6 1.4,-0.5 -9.4,-18 c -0.1,0.5 -7.7,12.1 -8.7,13.6 -1,1.6 -8.2,13.2 -8.9,13.4 z m 2.8,-19.4 V 89.2 c 2.1,0 4.1,1.4 4.1,3.6 v 0.2 c 0,2.1 -1.9,3.6 -4.1,3.6 z m -4.7,-13.6 c 0,-2 1,-3.4 3,-3.4 h 0.5 v 6.6 c -1.8,-0.1 -3.4,-1.3 -3.4,-3.2 z m 3.5,-5.6 h -1 c -2.6,0 -5.2,2.9 -5.2,5.6 v 1 c 0,1.1 1.3,2.8 2.1,3.4 1.1,0.8 2.5,1.2 4,1.5 v 7.8 c -2.6,-0.6 -4.1,-1.7 -4.1,-4.8 h -2.4 l 0.2,2.5 c 0.9,1.4 0.6,2.1 2.2,3.2 1.1,0.7 2.4,1.2 4.1,1.2 v 2.8 h 1.2 v -2.8 c 3,0 6.4,-2.3 6.4,-5 v -2.5 c 0,-2.9 -4,-4.3 -6.4,-4.8 v -6.9 c 2,0 3.4,1.4 3.4,3.3 h 2.7 c 0,-3.2 -2.8,-5.5 -6.1,-5.5 V 75.4 h -1.2 v 1.9 z"}],i["GR.IN.IC.FINANCIAL SERVICES, OTHER"]=[{type:"path",stroke:!1,d:"m 103.4,138.2 -2.7,0 -0,-8.2 c -1.9,-0 -3.8,-0.3 -5.7,-0.7 -1.9,-0.4 -3.8,-1 -5.8,-1.9 l 0,-4.9 c 1.9,1.2 3.7,2.1 5.6,2.7 1.9,0.6 3.9,0.9 5.9,0.9 l 0,-12.5 c -4,-0.7 -7,-1.8 -8.8,-3.3 -1.8,-1.6 -2.7,-3.7 -2.7,-6.5 -5e-6,-3 1,-5.3 3,-7 2,-1.7 4.8,-2.7 8.6,-3 l 0,-6.4 2.7,0 0,6.3 c 1.7,0.1 3.3,0.3 4.9,0.5 1.6,0.3 3.1,0.7 4.6,1.1 l 0,4.8 c -1.5,-0.8 -3.1,-1.4 -4.7,-1.8 -1.6,-0.4 -3.2,-0.7 -4.9,-0.7 l 0,11.7 c 4.1,0.6 7.2,1.8 9.1,3.4 2,1.6 2.9,3.9 2.9,6.7 -3e-5,3.1 -1,5.5 -3.1,7.3 -2.1,1.8 -5,2.8 -8.9,3.1 l 0,8.3 m -2.7,-29.3 0,-11.2 c -2.1,0.2 -3.7,0.8 -4.8,1.8 -1.1,1 -1.7,2.3 -1.7,3.9 -1e-5,1.6 0.5,2.8 1.5,3.7 1,0.9 2.7,1.5 5,1.9 m 2.7,5.3 0,11.8 c 2.3,-0.3 4.1,-1 5.2,-2 1.2,-1 1.8,-2.3 1.8,-4 -3e-5,-1.6 -0.6,-2.9 -1.7,-3.8 -1.1,-0.9 -2.9,-1.6 -5.3,-2.1 m 5.8,-52.2 2.1,0 0,6.2 7.5,0 0,-6.2 2.1,0 0,15.2 -2.1,0 0,-7.2 -7.5,0 0,7.2 -2.1,0 0,-15.2 m -14.8,0 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -8.1,1.4 c -1.5,1.3e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -3e-6,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -1.3e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -1.5e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,-10e-7 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -1e-6,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1"}],i["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 101.9,123.3 -1.7,0 -0,-5 c -1.2,-0 -2.3,-0.2 -3.5,-0.4 -1.2,-0.3 -2.3,-0.6 -3.5,-1.1 l 0,-3 c 1.1,0.7 2.3,1.2 3.4,1.6 1.2,0.4 2.4,0.5 3.6,0.5 l 0,-7.6 c -2.4,-0.4 -4.2,-1.1 -5.3,-2 -1.1,-1 -1.7,-2.3 -1.7,-3.9 -2e-6,-1.8 0.6,-3.2 1.8,-4.3 1.2,-1 2.9,-1.6 5.2,-1.8 l 0,-3.9 1.7,0 0,3.9 c 1,0 2,0.2 3,0.3 1,0.2 1.9,0.4 2.8,0.7 l 0,2.9 c -0.9,-0.5 -1.9,-0.8 -2.8,-1.1 -1,-0.3 -2,-0.4 -3,-0.4 l 0,7.1 c 2.5,0.4 4.4,1.1 5.5,2.1 1.2,1 1.8,2.4 1.8,4.1 -2e-5,1.9 -0.6,3.3 -1.9,4.4 -1.3,1.1 -3.1,1.7 -5.4,1.9 l 0,5 m -1.7,-17.8 0,-6.8 c -1.3,0.1 -2.3,0.5 -2.9,1.1 -0.7,0.6 -1,1.4 -1,2.3 -6e-6,1 0.3,1.7 0.9,2.2 0.6,0.5 1.6,0.9 3,1.1 m 1.7,3.2 0,7.2 c 1.4,-0.2 2.5,-0.6 3.2,-1.2 0.7,-0.6 1.1,-1.4 1.1,-2.4 -1e-5,-1 -0.3,-1.7 -1,-2.3 -0.7,-0.6 -1.7,-1 -3.2,-1.3 M 104.5,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 70 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 V 86.9 H 68.8 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 101.9,108.7 0,7.2 c 1.4,-0.2 2.5,-0.6 3.2,-1.2 0.7,-0.6 1.1,-1.4 1.1,-2.4 -1e-5,-1 -0.3,-1.7 -1,-2.3 -0.7,-0.6 -1.7,-1 -3.2,-1.3 m -1.7,-3.2 0,-6.8 c -1.3,0.1 -2.3,0.5 -2.9,1.1 -0.7,0.6 -1,1.4 -1,2.3 -6e-6,1 0.3,1.7 0.9,2.2 0.6,0.5 1.6,0.9 3,1.1 m 4.3,-30.7 0,13.4 -34.6,0 0,37 60.1,0 0,-37 -6.7,0 0,-13.4 -4.5,0 0,13.4 -9.9,0 0,-13.4 -4.5,0 z m -4.3,17.6 1.7,0 0,3.8 c 1,0 2,0.2 3,0.3 1,0.2 1.9,0.4 2.8,0.7 l 0,2.9 c -0.9,-0.5 -1.9,-0.8 -2.8,-1.1 -1,-0.3 -2,-0.4 -3,-0.5 l 0,7.1 c 2.5,0.4 4.3,1.1 5.5,2.1 1.2,1 1.8,2.4 1.8,4.1 -2e-5,1.9 -0.6,3.4 -1.9,4.4 -1.3,1.1 -3.1,1.7 -5.4,1.9 l 0,5 -1.7,0 -0,-5 c -1.2,-0 -2.3,-0.2 -3.5,-0.4 -1.2,-0.3 -2.3,-0.6 -3.5,-1.1 l 0,-3 c 1.1,0.7 2.3,1.3 3.4,1.6 1.2,0.4 2.4,0.5 3.6,0.5 l 0,-7.6 c -2.4,-0.4 -4.2,-1.1 -5.3,-2 -1.1,-1 -1.7,-2.2 -1.7,-3.9 -2e-6,-1.8 0.6,-3.2 1.8,-4.3 1.2,-1 3,-1.6 5.2,-1.8 l 0,-3.9 z"}],i["GR.IN.IC.CHEMICAL PLANT"]=[{type:"path",stroke:!1,d:"m 94.4,89.6 0,0.1 c -0.5,0.1 -1,0.3 -1.4,0.6 -0.5,0.5 -0.6,1.3 -0.5,1.9 0.2,0.8 0.8,1.5 1.7,1.8 -0,0.5 -0.1,1.7 0,3 l -0.1,0 c -0,2.7 -2.3,5.7 -4.9,8.8 -2.4,3 -5,6.4 -5.3,10.4 l -0.1,0 c 0,0.1 0,0.2 0,0.2 -0,0.1 -0,0.2 -0,0.3 l 0.1,0 c 0.2,2.4 1.7,4.2 3.7,5.3 2.1,1.2 4.6,1.7 6.8,1.6 l 0,-0 8.9,0 0,0.1 c 0.3,-0 0.5,-0 0.8,-0.1 l 0.5,0 0,-0.1 c 2.1,-0.2 4.2,-0.3 6,-1 1.1,-0.4 2.1,-1.1 2.8,-2.1 0.6,-0.9 0.9,-2.1 1.1,-3.6 l 0.2,0 c 0.2,-4.4 -2.1,-7.5 -4.5,-10.3 -2.3,-2.8 -4.7,-5.5 -5.4,-9.6 0,-1.3 0.1,-3 0.1,-3.3 0.2,-0.1 0.4,-0.2 0.6,-0.3 0.5,-0.4 0.9,-1 0.9,-1.7 -0,-0.7 -0.5,-1.3 -1.1,-1.6 -0.4,-0.2 -0.9,-0.3 -1.5,-0.4 l 0,-0.1 c -0.2,0 -0.4,-0 -0.6,0 -2.5,0 -7.2,0 -8.1,0 -0.1,-2.4e-4 -0.7,0 -0.7,0 z m 0.7,2 c 0.8,0 5.5,0 8.1,0 0.6,0 0.9,0.1 1.1,0.2 -0.2,0.1 -0.5,0.3 -0.9,0.4 l -8.1,0 c -0.4,-0.1 -0.7,-0.3 -0.7,-0.4 -0,-0.1 -0,-0.1 -0,-0.1 0,-0 0.1,-0.1 0.6,-0.1 z m 1.2,2.6 6.7,0 c -0,0.7 -0.1,1.9 -0.1,3.1 -0,0.1 -0,0.2 -0,0.3 l 0.1,0 c 0.9,4.5 3.5,7.6 5.8,10.3 2.2,2.7 4,5 4,8.4 l -0.1,0 c -0,1.4 -0.4,2.4 -0.8,3 -0.4,0.7 -1,1.1 -1.8,1.4 -1.4,0.6 -3.6,0.7 -5.8,0.9 l -10.3,0 0,0 c -1.6,0 -3.6,-0.4 -5.1,-1.3 -1.6,-0.9 -2.6,-2.2 -2.7,-3.9 0.1,-3.2 2.4,-6.3 4.9,-9.4 2.4,-3 5.1,-6.1 5.3,-9.6 l 0.1,-0 c -0.1,-1 -0.1,-2.7 -0,-3.3 z m -7,19.6 v 1.9 c 0,3.5 6,4.3 9.9,4.3 h 3.2 c 2.5,0 8,-2.2 8,-4.2 v -0.8 c 0,-3.2 -6.6,-9.4 -7.3,-12.4 h -7.5 c -0.6,2.5 -6.2,10 -6.2,11.2 z m 14.8,-39 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 104.1 74.8 L 104.1 88.2 L 69.6 88.2 L 69.6 125.2 L 129.6 125.2 L 129.6 88.2 L 122.9 88.2 L 122.9 74.8 L 118.5 74.8 L 118.5 88.2 L 108.6 88.2 L 108.6 74.8 L 104.1 74.8 z M 94.4 89.6 C 94.4 89.6 95.1 89.6 95.2 89.6 C 96.1 89.6 100.8 89.6 103.3 89.6 C 103.5 89.6 103.8 89.6 103.9 89.6 L 103.9 89.7 C 104.5 89.8 105 89.9 105.4 90.1 C 106 90.4 106.5 91 106.5 91.7 C 106.5 92.4 106.1 93 105.6 93.4 C 105.4 93.5 105.2 93.6 105 93.8 C 105 94 104.9 95.7 104.9 97.1 C 105.6 101.1 108 103.8 110.3 106.7 C 112.6 109.5 114.9 112.6 114.7 117 L 114.6 116.9 C 114.4 118.4 114.1 119.6 113.5 120.5 C 112.8 121.5 111.8 122.2 110.8 122.7 C 108.9 123.4 106.8 123.5 104.8 123.7 L 104.8 123.7 L 104.3 123.7 C 104.1 123.7 103.8 123.8 103.5 123.8 L 103.5 123.7 L 94.6 123.7 L 94.6 123.8 C 92.4 123.9 89.9 123.4 87.8 122.2 C 85.9 121.1 84.3 119.2 84.1 116.8 L 84.1 116.8 C 84.1 116.7 84.1 116.6 84.1 116.5 C 84.1 116.4 84 116.4 84 116.3 L 84.1 116.3 C 84.3 112.3 86.9 109 89.4 105.9 C 91.9 102.7 94.2 99.8 94.3 97.1 L 94.3 97.1 C 94.2 95.7 94.3 94.6 94.3 94 C 93.5 93.7 92.8 93.1 92.6 92.3 C 92.4 91.6 92.6 90.9 93.1 90.4 C 93.4 90 93.9 89.8 94.4 89.7 L 94.4 89.6 z M 95.1 91.6 C 94.7 91.6 94.5 91.7 94.5 91.8 C 94.5 91.8 94.5 91.7 94.6 91.8 C 94.6 91.9 94.8 92.2 95.3 92.2 L 103.4 92.2 C 103.8 92.1 104.1 92 104.3 91.8 C 104.1 91.8 103.8 91.6 103.2 91.6 C 100.6 91.6 95.9 91.6 95.1 91.6 z M 96.3 94.2 C 96.2 94.9 96.2 96.5 96.3 97.5 L 96.2 97.6 C 96 101.1 93.4 104.2 90.9 107.2 C 88.5 110.3 86.2 113.3 86.1 116.6 C 86.2 118.3 87.2 119.5 88.8 120.5 C 90.3 121.3 92.3 121.8 93.9 121.8 L 93.9 121.7 L 104.2 121.7 C 106.5 121.5 108.6 121.4 110 120.8 C 110.8 120.5 111.4 120.1 111.8 119.4 C 112.3 118.8 112.6 117.8 112.7 116.4 L 112.7 116.4 C 112.7 113 110.9 110.6 108.7 107.9 C 106.5 105.2 103.8 102.1 103 97.6 L 102.8 97.6 C 102.8 97.5 102.9 97.4 102.9 97.3 C 102.9 96.1 102.9 94.9 103 94.2 L 96.3 94.2 z M 95.5 102.6 L 103 102.6 C 103.8 105.7 110.3 111.9 110.3 115.1 L 110.3 115.9 C 110.3 117.9 104.9 120 102.4 120 L 99.2 120 C 95.3 120 89.3 119.2 89.3 115.7 L 89.3 113.8 C 89.3 112.6 94.9 105.1 95.5 102.6 z "}],i["GR.IN.IC.FIREARMS MANUFACTURER"]=[{type:"path",stroke:!1,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z m 25.8,-26.6 h 10.8 v 5.8 c -1.6,0 -4.7,1 -5.8,0.7 -1.2,-0.4 -3.8,-1.5 -5,-1.6 v -4.8 z m -19.2,0 h 16.6 v 6 c 0,0.6 3,1.4 3.7,1.7 0.4,0.1 3.9,1.4 3.9,1.5 l 7.2,-0.9 0.8,2.7 1.1,3.7 c 0.3,0.4 1,2.4 1,3.1 v 0.2 c 0,1.1 -0.6,1.9 -0.6,3.5 l 13.5,-0 -0.9,-3 -0.6,-1.7 -3,-10 c -0.2,-0.4 -0.5,-0.7 -0.5,-1.3 0,-1.3 3.9,-4.1 4.7,-5.3 l -2.7,-8.4 h -43.9 v 8.4 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 94.2,99.9 h 10.8 v 5.8 c -1.6,0 -4.7,1 -5.8,0.7 -1.2,-0.4 -3.8,-1.5 -5,-1.6 v -4.8 z m 9.9,-25.1 0,13.4 -34.6,0 0,37 60.1,0 0,-37 -6.7,0 0,-13.4 -4.5,0 0,13.4 -9.9,0 0,-13.4 -4.5,0 z m -29.1,16.7 43.9,0 2.7,8.4 c -0.8,1.2 -4.7,4.1 -4.7,5.3 0,0.6 0.2,0.9 0.5,1.3 l 3.1,10 0.6,1.8 0.9,3 -13.5,0 c 0,-1.6 0.7,-2.4 0.7,-3.6 l 0,-0.2 c 0,-0.7 -0.7,-2.7 -1,-3.1 L 107.2,110.8 106.4,108.1 99.2,109 c -0,-0.1 -3.6,-1.4 -3.9,-1.5 -0.7,-0.3 -3.7,-1.1 -3.7,-1.7 l 0,-5.9 -16.6,0 0,-8.4 z"}],i["GR.IN.IC.FIREARMS RETAILER"]=[{type:"path",stroke:!1,d:"m 85.1,123 -1.1,0 -0,-3.2 c -0.8,-0 -1.5,-0.1 -2.3,-0.3 -0.8,-0.2 -1.5,-0.4 -2.3,-0.7 l 0,-1.9 c 0.7,0.5 1.5,0.8 2.2,1 0.8,0.2 1.5,0.3 2.3,0.4 l 0,-4.9 c -1.6,-0.3 -2.7,-0.7 -3.5,-1.3 -0.7,-0.6 -1.1,-1.5 -1.1,-2.5 -2e-6,-1.2 0.4,-2.1 1.2,-2.8 0.8,-0.7 1.9,-1.1 3.4,-1.2 l 0,-2.5 1.1,0 0,2.5 c 0.7,0 1.3,0.1 1.9,0.2 0.6,0.1 1.2,0.3 1.8,0.5 l 0,1.9 c -0.6,-0.3 -1.2,-0.5 -1.8,-0.7 -0.6,-0.2 -1.3,-0.3 -1.9,-0.3 l 0,4.6 c 1.6,0.3 2.8,0.7 3.6,1.3 0.8,0.6 1.1,1.5 1.1,2.6 -1.2e-5,1.2 -0.4,2.2 -1.2,2.9 -0.8,0.7 -2,1.1 -3.5,1.2 l 0,3.3 m -1.1,-11.5 0,-4.4 c -0.8,0.1 -1.5,0.3 -1.9,0.7 -0.4,0.4 -0.7,0.9 -0.7,1.5 -4e-6,0.6 0.2,1.1 0.6,1.4 0.4,0.3 1.1,0.6 2,0.7 m 1.1,2.1 0,4.7 c 0.9,-0.1 1.6,-0.4 2.1,-0.8 0.5,-0.4 0.7,-0.9 0.7,-1.6 -1e-5,-0.6 -0.2,-1.1 -0.7,-1.5 -0.4,-0.4 -1.1,-0.6 -2.1,-0.8 m 22.6,-21.9 -8,20.8 0.8,0.3 8,-20.8 -0.8,-0.3 z m -43,6.5 0,0.8 0.3,26 0,0.8 0.8,0 32.2,-0.2 0.4,0 0.2,-0.3 7.3,-8.7 0.2,-0.2 -0,-0.3 -0.2,-10.1 0,-0.4 -0.3,-0.2 -8.4,-6.6 -0.2,-0.2 -0.3,0 -31.3,-0.4 -0.8,0 z m 1.6,1.6 30.2,0.3 7.9,6.2 0.2,9.4 -6.9,8.2 -31,0.2 -0.3,-24.3 z M 97.3,85.4 h 14.4 v 7.7 c -2.1,0 -6.2,1.4 -7.8,0.9 -1.6,-0.5 -5,-2.1 -6.6,-2.2 v -6.4 z m -25.5,0 h 22.1 v 7.9 c 0,0.8 4,1.9 4.8,2.2 0.5,0.2 5.2,1.9 5.2,2 l 9.6,-1.2 1,3.6 1.4,4.9 c 0.3,0.5 1.3,3.2 1.3,4.1 v 0.2 c 0,1.5 -0.9,2.5 -0.9,4.7 h 18 l -1.1,-3.9 -0.8,-2.4 -4,-13.4 c -0.3,-0.5 -0.6,-0.9 -0.6,-1.7 0,-1.7 5.2,-5.5 6.2,-7.1 l -3.6,-11.1 H 71.8 v 11.1 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.1,113.6 0,4.7 c 0.9,-0.1 1.6,-0.4 2.1,-0.8 0.5,-0.4 0.7,-0.9 0.7,-1.6 -1e-5,-0.6 -0.2,-1.1 -0.7,-1.5 -0.4,-0.4 -1.1,-0.6 -2.1,-0.8 m -1.1,-2.1 0,-4.4 c -0.8,0.1 -1.5,0.3 -1.9,0.7 -0.4,0.4 -0.7,0.9 -0.7,1.5 -4e-6,0.6 0.2,1.1 0.6,1.4 0.4,0.3 1.1,0.6 2,0.7 M 66.4,99.8 l 0.3,24.3 31,-0.2 6.9,-8.2 -0.2,-9.4 -7.9,-6.2 -30.2,-0.3 z m 17.7,3.3 1.1,0 0,2.5 c 0.7,0 1.3,0.1 1.9,0.2 0.6,0.1 1.2,0.2 1.8,0.4 l 0,1.9 c -0.6,-0.3 -1.2,-0.5 -1.8,-0.7 -0.6,-0.2 -1.3,-0.3 -1.9,-0.3 l 0,4.6 c 1.6,0.3 2.8,0.7 3.6,1.3 0.8,0.6 1.2,1.5 1.2,2.7 -1.2e-5,1.2 -0.4,2.2 -1.2,2.9 -0.8,0.7 -2,1.1 -3.5,1.2 l 0,3.3 -1.1,0 0,-3.2 c -0.8,-0 -1.5,-0.1 -2.3,-0.3 -0.8,-0.2 -1.5,-0.4 -2.3,-0.8 l 0,-1.9 c 0.7,0.5 1.5,0.8 2.2,1.1 0.8,0.2 1.5,0.3 2.3,0.3 l 0,-4.9 c -1.6,-0.3 -2.7,-0.7 -3.5,-1.3 -0.7,-0.6 -1.1,-1.5 -1.1,-2.5 -2e-6,-1.2 0.4,-2.1 1.2,-2.8 0.8,-0.7 1.9,-1.1 3.4,-1.2 l 0,-2.5 z"}],i["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]=[{type:"path",stroke:!1,d:"m 104.7,71.8 h 5 v 15 h 11.1 v -15 h 5 v 15 h 7.5 v 41.4 h -67.4 V 86.8 h 38.8 v -15 z m -40,57.9 h 69.8 V 85.5 h -7.1 v -15.2 h -8 v 15.2 h -8 v -15.2 h -8 v 15.2 h -38.6 v 44.1 l 0,0 z m 15.5,-21.8 h 38.6 l -19.3,18.6 -19.3,-18.6 z m 21.8,-16.8 c 0.5,0.4 4.3,3.8 4.3,4.3 v 12 h -4.3 V 91.1 z m -5,-0 0,16.3 h -4.3 l 0.1,-12.2 4.1,-4.1 0,0 z m -12.1,12 c 0,-0.4 3.1,-3.2 3.6,-3.6 v 7.8 h -3.6 v -4.3 z m 25.7,-3.6 3.7,3.4 c -0.2,0.4 -0.2,-0.2 -0.2,0.5 v 4 h -3.6 v -7.9 z m 9.4,8.2 -20.5,-20 -20.4,20 20.4,19.9 20.5,-19.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 99.5,126.5 19.3,-18.6 -38.6,0 z m 0,1 -20.4,-19.9 20.4,-20 20.5,20 -20.5,19.8 z m 5.2,-40.8 h -38.8 v 41.4 h 67.4 V 86.8 h -7.5 v -15 h -5 v 15 h -11.1 v -15 h -5 v 15 z m 5.9,20.6 h 3.6 v -4 c 0,-0.7 -0,-0.1 0.2,-0.5 l -3.7,-3.4 v 7.9 z m -8.6,0 h 4.3 v -12 c 0,-0.4 -3.8,-3.9 -4.3,-4.3 v 16.3 z m -9.3,0 4.3,0 -0,-16.3 -4.1,4.1 z m -7.8,-4.3 v 4.3 h 3.6 v -7.9 c -0.5,0.3 -3.6,3.2 -3.6,3.6 z"}],i["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]=[{type:"path",stroke:!1,d:"m 122.4,68.8 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -10e-6,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -10e-6,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -1e-5,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -10e-6,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -10e-6,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,-10e-7 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -2e-6,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -3e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,-10e-7 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,1e-6 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -1e-5,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -2e-6,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.5e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 M 70.6,110 h 57.9 l -29,27.9 -28.9,-27.9 z m 32.8,-25.2 c 0.8,0.5 6.4,5.8 6.4,6.4 v 17.9 h -6.4 V 84.8 z m -7.6,-0.1 0.1,24.4 h -6.5 l 0.2,-18.3 6.2,-6.1 0,0 z m -18.2,18 c 0,-0.7 4.7,-4.9 5.3,-5.3 v 11.8 h -5.3 v -6.5 z m 38.6,-5.3 5.6,5.2 c -0.3,0.7 -0.2,-0.3 -0.2,0.7 v 5.9 h -5.3 V 97.4 z m 14.2,12.3 -30.7,-30.1 -30.7,30 30.7,29.9 30.8,-29.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 99.5,137.9 29,-27.9 -57.9,0 z m 16.7,-28.7 h 5.3 v -5.9 c 0,-1 -0.1,-0.1 0.2,-0.7 l -5.6,-5.2 v 11.8 z m -12.8,0 h 6.4 V 91.2 c 0,-0.7 -5.6,-5.9 -6.4,-6.4 v 24.4 z m -14,-10e-6 6.5,0 -0.1,-24.4 -6.2,6.1 z m -11.8,-6.4 v 6.4 h 5.3 V 97.4 c -0.7,0.5 -5.3,4.7 -5.3,5.3 z"}],i["GR.IN.IC.INDUSTRIAL SITE"]=[{type:"path",stroke:!1,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z"}],i["GR.IN.IC.LANDFILL"]=[{type:"path",stroke:!1,d:"m 124.1,115.8 c 0,2.5 1.6,2.7 3,3.6 h -22.8 c 1.2,-0.7 2.8,-1.2 2.8,-3.3 v -1.2 c 0,-1.3 -1.9,-2.8 -3.6,-2.8 -1,0 -1.8,0.4 -2.3,0.9 -0.4,0.4 -1.1,1.6 -1.1,2.1 v 1.3 c 0,0.2 0.9,1.7 1,1.9 0.6,0.7 1.2,0.6 1.8,1 h -8.6 c 0.6,-0.4 1.3,-0.5 1.8,-1.1 0.4,-0.4 0.6,-1.4 1,-1.6 v -1.7 c 0,-0.4 -0.9,-1.8 -1.2,-2.1 -0.6,-0.6 -1.3,-0.9 -2.4,-0.9 h -0.1 c -1.7,0 -3.5,1.5 -3.5,3.1 v 1.3 c 0,1.5 2,2.2 2.8,2.8 h -8.7 c -0.1,-3.2 -2.5,-1.8 -3.1,-3 -1.1,-1.9 0.9,-2.2 -2.8,-3.1 -3.1,-0.8 -2,-0.3 -3.9,-2.2 -0.6,-0.7 -3,-1.8 -4.2,-1.8 h -0.1 c -1,0 -1.9,1.2 -2.7,1.5 -1.1,0.5 -2.3,0.4 -3.2,1.1 -1.1,0.8 -2.3,4.4 -2.3,6.2 v 0.6 h -0.4 v 2.2 h 72.1 4.9 v -1.5 h -9.5 c 0.8,-0.5 0.9,-0.2 1.8,-1 0.4,-0.4 0.9,-1.5 1.2,-1.6 v -1.6 c 0,-0.5 -0.9,-1.9 -1.3,-2.2 -0.7,-0.5 -1.4,-0.8 -2.5,-0.8 -1.9,0 -3.6,1.5 -3.6,3.5 v 0.2 h 0 z m -1,-17.6 h 3.5 c 0.5,0 4.2,4.8 4.6,5.4 h -8.1 v -5.4 z m -4.1,-17.8 -0.7,-1.3 -7,3.9 1.4,3.5 -32,14.5 c 0.8,0.4 2.1,4.3 2.6,5.3 0.2,0.4 2.3,5 2.3,5.1 0,0.5 -0.9,0.2 -0.8,0.6 l 0.5,3.1 h 3.4 c 0,-2.4 2,-4.8 4.3,-4.8 h 1 c 2.4,0 4.3,2.3 4.3,4.8 h 0.6 c 0,-2.4 0.6,-2.3 1.5,-3.6 l -2.1,-5.6 9.5,-4.3 4.2,9.9 -5.1,0 c 0.9,1.3 1.6,1.3 1.6,3.6 h 14.4 v -0.5 c 0,-2.1 2.5,-4.3 4.8,-4.3 h 0.5 c 2.6,0 4.6,2.2 4.6,4.8 h 2.6 v -3.1 h -1.2 v -7.4 c 0,-1.2 -5.8,-6.8 -6.1,-8.1 h -6.4 v 15 h -4.1 l -5.3,-12.1 5.5,-2.3 -4.3,-9.5 5.6,-7.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 123.1,103.6 h 8.1 c -0.5,-0.6 -4.2,-5.4 -4.6,-5.4 h -3.5 v 5.4 z"}],i["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]=[{type:"path",stroke:!1,d:"m 105.2,71.3 h 5.1 V 86.5 H 121.5 V 71.3 h 5.1 v 15.2 h 7.6 v 42.1 H 65.8 V 86.6 h 39.4 V 71.3 z M 64.5,130.1 h 71 V 85.3 h -7.3 V 69.9 h -8.2 V 85.3 h -8.2 V 69.9 H 103.7 V 85.3 H 64.5 v 44.8 z M 90.3,93.1 h 7.6 c 1.2,0 3.4,1.8 3.4,2.7 v 2.6 c 0,1.3 -2.4,2.9 -3.6,2.9 h -7.4 v -8.2 z m -4.9,26.5 h 4.9 v -13.1 l 1.7,0.1 7.6,10 -8.8,11 5.9,0.1 5.9,-7 c 1.2,0.3 4.2,5.9 5.6,6.9 h 6.2 c -0.9,-1.7 -8.4,-10.4 -8.4,-11 0,-0.3 7.4,-9.7 8.2,-10.4 l -6,-0.1 -5.6,6.2 -4.3,-5.7 c 5.2,-1.2 8.4,-3.3 8.4,-9.8 v -0.6 c 0,-2 -1.7,-4.7 -2.8,-5.8 -1,-1 -4.1,-2.4 -6.2,-2.4 H 85.4 v 31.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.4,88 h 12.4 c 2.1,0 5.1,1.4 6.1,2.4 1.1,1.1 2.8,3.8 2.8,5.8 v 0.6 c 0,6.5 -3.1,8.6 -8.4,9.8 l 4.3,5.7 5.6,-6.2 6.1,0.1 c -0.8,0.6 -8.2,10 -8.2,10.4 0,0.7 7.4,9.4 8.4,11.1 h -6.2 c -1.5,-1 -4.4,-6.6 -5.6,-6.9 l -5.9,6.9 -5.9,-0.1 8.8,-11 -7.6,-9.9 -1.8,-0.1 v 13.1 h -4.9 v -31.6 z m 19.8,-1.4 h -39.4 v 42.1 h 68.4 V 86.6 h -7.6 V 71.3 H 121.5 V 86.5 H 110.3 V 71.3 h -5.1 v 15.3 z m -14.9,14.7 h 7.4 c 1.2,0 3.6,-1.6 3.6,-2.9 v -2.5 c 0,-1 -2.2,-2.7 -3.4,-2.7 h -7.6 v 8.2 z"}],i["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]=[{type:"path",stroke:!1,d:"m 133.7,71.5 c -0.3,0 -0.7,0.1 -0.9,0.2 l -49.5,0 -0.7,0 0,0.1 c -0.7,0.3 -1.3,0.9 -1.8,1.7 -0.6,1 -1.2,2.5 -1.6,4.2 -0.9,3.5 -1.4,8.2 -1.4,13.4 0,4.8 0.5,9.2 1.2,12.6 -1,0.1 -2.1,0.5 -3,0.3 -1.2,-0.1 -2.5,-0.1 -3.8,-0.1 -1.3,0 -6.5,-0.9 -6.5,0.7 0,1.8 6,3.4 7.5,6.1 -0.8,1.5 -5.9,1.4 -8.1,1.8 -1.5,0.2 -3,0.2 -3.8,1.1 -1,1 0.2,2.3 1.1,2.7 1.7,0.9 6,1 8.2,1.5 1.3,0.3 2.6,0.7 3.1,1.9 0.4,1.1 0.6,2.6 2.2,2.6 l 0.1,0 c 2.1,0 5.1,-1.7 7.9,-1.7 l 1.1,0 c 6.2,0 6.8,7.4 12.3,7.7 3.5,0.2 5.3,-0.8 7.8,-1.9 1.6,-0.7 5.5,-2.8 7.3,-2.8 l 0.3,0 c 1.8,0 3.3,1.1 4.8,1.5 1.6,0.5 3.3,1 5.4,1 l 0.5,0 c 1.2,0 2.3,-0.2 3.2,-0.5 1.2,-0.4 1.1,-1 1.1,-2.4 -0.1,-1.9 -2.2,-3.3 -3.5,-4 -1.4,-0.9 -3.4,-1.8 -4.9,-2.6 -0.8,-0.4 -1.5,-0.9 -2.3,-1.4 -1.3,-1 -1,-0.6 -1.7,-2.1 1.2,-1.8 6.9,0.2 6.9,-1.9 0,-0.2 -0.3,-0.5 -0.7,-0.7 l 12.2,0 0.7,0 0,-0.4 c 0.7,-0.3 1.3,-0.9 1.8,-1.7 0.6,-1 1.2,-2.5 1.6,-4.2 0.9,-3.5 1.4,-8.2 1.4,-13.4 0,-5.2 -0.5,-9.9 -1.4,-13.4 -0.4,-1.7 -1,-3.2 -1.6,-4.2 -0.6,-1 -1.4,-1.8 -2.5,-1.8 z m 0.3,1.4 c 0.3,0 0.7,0.3 1.3,1.1 0.5,0.8 1,2.2 1.4,3.8 0.8,3.3 1.4,7.9 1.4,13.1 0,5.1 -0.5,9.8 -1.4,13.1 -0.4,1.7 -0.9,3 -1.4,3.8 -0.5,0.8 -1,1.1 -1.3,1.1 -0.2,0 -0.4,-0.1 -0.7,-0.4 l 0,0.7 -47.9,0 c 0.2,-0.2 0.4,-0.4 0.6,-0.8 0.6,-1 1.1,-2.3 1.5,-4 0.9,-3.4 1.4,-8.1 1.4,-13.2 0,-5.2 -0.5,-9.8 -1.4,-13.2 -0.4,-1.7 -0.9,-3.1 -1.5,-4 -0.2,-0.3 -0.4,-0.5 -0.6,-0.7 l 47.9,0 0,0.2 c 0.3,-0.3 0.5,-0.4 0.7,-0.4 z m -50.7,0.2 c 0.3,0 0.7,0.3 1.3,1.1 0.5,0.8 1,2.2 1.4,3.8 0.8,3.3 1.4,7.9 1.4,13.1 0,5.1 -0.5,9.8 -1.4,13.1 -0.4,1.7 -0.9,3 -1.4,3.8 -0.5,0.8 -1,1.1 -1.3,1.1 -0.3,0 -0.7,-0.3 -1.3,-1.1 -0.3,-0.5 -0.6,-1.1 -0.8,-1.8 0.4,1.7 1,3 1.7,3.5 l 8.3,-0.2 7.1,0.1 20.3,-0.1 c 0.5,0 1.5,0.5 2.3,1 l 0,0 c 0.5,0.3 0.8,0.6 1,0.7 -0.1,0.2 -0.4,0.3 -0.6,0.4 -0.2,0.1 -0.5,0.2 -0.8,0.2 -0.4,0.1 -0.9,0.1 -1.3,0.1 -0.2,-0 -0.5,-0 -0.7,-0 -0.4,-0 -0.9,-0 -1.2,-0 l -0.3,0 c -0.9,0 -1.7,0.5 -1.7,1.4 l 0,0.1 0,0.1 c 0,0.1 0,0.2 0,0.3 0.7,3 11.3,5.8 11.9,9.2 0,0.1 0,0.2 0,0.3 -0,0.1 -0,0.1 -0,0.1 -0.2,1.6 -2.9,2.2 -5.2,2.2 -0.7,0 -1.3,0 -1.8,-0.1 -2.6,-0.4 -5.4,-2.3 -7.3,-2.3 -5.3,0 -9.5,5.5 -15.2,4.8 -4.4,-0.6 -5.5,-7.9 -12.3,-7.9 l -1.3,0 c -3,0 -5.6,1.7 -8.4,1.7 -0.5,0 -0.7,-0.3 -0.9,-0.6 -0,-0 -0,-0.1 -0.1,-0.1 -0.2,-0.5 -0.3,-1.1 -0.6,-1.6 -0,-0 0,-0 0,-0 -0,-0.1 -0.1,-0.1 -0.1,-0.2 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0.1 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 -0.3,-0.3 -0.4,-0.4 -1.2,-0.9 -2.3,-1.1 -4,-1.4 -1.9,-0.3 -5.8,-0.3 -7.3,-1.5 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0.1 -0,-0 -0,-0 -0,-0 -0.2,-0.3 -0.4,-0.6 -0.4,-0.9 l 0,-0.3 c 0,-2.1 13.2,-0.9 13.2,-3.2 0,-0.3 -0.1,-0.6 -0.3,-0.8 -0,-0.1 -0.1,-0.1 -0.1,-0.2 -0,-0 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0,-0 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.3,-0.3 -0.5,-0.4 -1.7,-1.3 -4.8,-2.7 -6.3,-3.9 -0.1,-0.1 -0.3,-0.2 -0.4,-0.3 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0.2,-0.4 0.3,-0.1 0.6,-0.3 1.1,-0.3 l 2.9,0 6.3,0.3 2.6,-0.3 c 9.4e-4,0 -9.4e-4,0 0,0 l 0.7,-0.1 0.8,0.1 c -0,-0 -0,-0 -0,-0 -0.8,-3.3 -1.4,-7.9 -1.4,-13.1 0,-5.1 0.5,-9.7 1.4,-13.1 0.4,-1.7 0.9,-3 1.4,-3.8 0.5,-0.8 1,-1.1 1.3,-1.1 z m 27.7,1.1 -17.4,17 17.4,16.9 17.4,-16.9 -17.4,-17 z m -2.2,2.9 0,13.8 -3.6,0 0.1,-10.4 3.5,-3.5 z m 4.3,0 c 0.4,0.3 3.6,3.3 3.6,3.7 l 0,10.2 -3.6,0 0,-13.8 z m 7.3,7.2 3.2,2.9 c -0.1,0.1 -0.1,0.1 -0.1,0.1 -0,-0 0,0 0,0.3 l 0,3.3 -3.1,0 0,-6.7 z m -18.8,0 0,6.7 -3,0 0,-3.7 c 0,-0.4 2.7,-2.8 3,-3 z m -7,7.1 32.8,0 -16.4,15.8 -16.4,-15.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 134,72.9 c -0.2,0 -0.4,0.1 -0.7,0.4 l 0,-0.2 -47.9,0 c 0.2,0.2 0.4,0.4 0.6,0.7 0.6,1 1.1,2.3 1.5,4 0.9,3.4 1.4,8.1 1.4,13.2 0,5.2 -0.5,9.8 -1.4,13.2 -0.4,1.7 -0.9,3.1 -1.5,4 -0.2,0.3 -0.4,0.5 -0.6,0.8 l 47.9,0 0,-0.7 c 0.3,0.3 0.5,0.4 0.7,0.4 0.3,0 0.7,-0.3 1.3,-1.1 0.5,-0.8 1,-2.2 1.4,-3.8 0.8,-3.3 1.4,-7.9 1.4,-13.1 0,-5.1 -0.5,-9.8 -1.4,-13.1 -0.4,-1.7 -0.9,-3 -1.4,-3.8 -0.5,-0.8 -1,-1.1 -1.3,-1.1 z m -50.7,0.2 c -0.3,0 -0.7,0.3 -1.3,1.1 -0.5,0.8 -1,2.2 -1.4,3.8 -0.8,3.3 -1.4,7.9 -1.4,13.1 0,5.1 0.5,9.8 1.4,13.1 0,0 0,0 0,0 l -0.8,-0.1 -3.3,0.4 -6.2,-0.3 -2.9,0 c -0.5,0 -0.8,0.1 -1.1,0.3 0.4,1.6 8.4,4.3 8.4,6.5 0,2.3 -13.2,1.1 -13.2,3.2 l 0,0.3 c 0,2.4 5.6,2.3 8,2.7 1.7,0.3 2.8,0.5 4,1.4 1.3,1 0.8,3.3 2.2,3.3 2.8,0 5.4,-1.7 8.4,-1.7 l 1.3,0 c 6.8,0 7.9,7.3 12.3,7.9 5.7,0.7 9.9,-4.8 15.2,-4.8 1.8,0 4.7,1.9 7.3,2.3 2.3,0.2 7,-0.2 7,-2.4 0,-3.6 -12,-6.5 -12,-9.8 l 0,-0.1 c 0,-0.9 0.9,-1.4 1.7,-1.4 l 0.3,0 c 1.4,0 3.9,0.3 4.7,-0.7 -0.3,-0.4 -2.5,-1.7 -3.2,-1.7 l -20.3,0.1 -7.1,-0.1 -8.3,0.2 c -0.7,-0.5 -1.3,-1.8 -1.7,-3.5 0.3,0.7 0.5,1.3 0.8,1.8 0.5,0.8 1,1.1 1.3,1.1 0.3,0 0.7,-0.3 1.3,-1.1 0.5,-0.8 1,-2.2 1.4,-3.8 0.8,-3.3 1.4,-7.9 1.4,-13.1 0,-5.1 -0.5,-9.7 -1.4,-13.1 -0.4,-1.7 -0.9,-3 -1.4,-3.8 -0.5,-0.8 -1,-1.1 -1.3,-1.1 z m 27.7,1.1 17.4,17 -17.4,16.9 -17.4,-16.9 17.4,-17 z m -2.2,2.9 -3.5,3.5 -0.1,10.4 3.6,0 -0,-13.8 z m 4.3,0 0,13.8 3.6,0 0,-10.2 c 0,-0.4 -3.2,-3.4 -3.6,-3.7 z m 7.3,7.2 0,6.7 3.1,0 0,-3.3 c 0,-0.3 -0,-0.3 -0,-0.3 0,0 0,0 0.1,-0.1 l -3.2,-2.9 z m -18.8,0 c -0.4,0.3 -3,2.7 -3,3 l 0,3.7 3,0 0,-6.7 z m -7,7.1 16.4,15.8 16.4,-15.8 -32.8,0 z"}],i["GR.IN.IC.TOXIC RELEASE INVENTORY"]=[{type:"path",stroke:!1,d:"m 81.8,61 0,15.2 2,0 0,-6.4 2.2,0 c 0.8,6e-6 1.5,0.2 1.9,0.5 0.5,0.3 1,1 1.5,2 l 1.9,3.9 2.2,0 -2.1,-4.2 c -0.4,-0.9 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.8,-0.8 -1.3,-0.9 0.8,-0.2 1.5,-0.7 1.9,-1.3 0.4,-0.6 0.7,-1.4 0.7,-2.4 -2e-5,-1.5 -0.4,-2.6 -1.3,-3.3 -0.9,-0.7 -2.1,-1.1 -3.9,-1.1 l -4.6,0 z m 14.5,0 0,15.2 9.8,0 0,-1.7 -7.7,0 0,-5.5 7.2,0 0,-1.7 -7.2,0 0,-4.5 7.5,0 0,-1.7 -9.6,0 z m 13.2,0 0,15.2 9.4,0 0,-1.7 -7.4,0 0,-13.4 -2,0 z m -25.6,1.7 2.6,0 c 1,1.4e-5 1.7,0.2 2.2,0.7 0.5,0.4 0.8,1.1 0.8,2 -10e-6,0.9 -0.3,1.6 -0.8,2 -0.5,0.5 -1.2,0.7 -2.2,0.7 l -2.6,0 0,-5.4 z m 16,14.7 c -4.3,1.1e-5 -8.3,0.4 -11.2,1.2 -1.4,0.4 -2.6,0.8 -3.5,1.3 -0.7,0.4 -1.2,0.9 -1.4,1.5 l -0.1,0 0,0.6 c -3.1e-5,0 0,0 0,0 l 0,31.1 -0.2,-0.7 c -0.1,0 -1.1,0.1 -2.4,0 -1.2,-0.1 -2.7,-0.2 -4.2,-0.3 -1.5,-0.1 -2.9,-0.2 -4,-0.1 -0.6,0 -1.1,0 -1.5,0.1 -0.2,0 -0.4,0.1 -0.6,0.2 -0.2,0.1 -0.4,0.2 -0.6,0.5 -0.3,0.4 -0.4,0.9 -0.3,1.4 0.1,0.5 0.3,0.8 0.5,1.2 0.5,0.7 1.2,1.2 1.9,1.7 0.7,0.5 1.4,1 1.9,1.5 0.5,0.5 0.7,0.9 0.6,1.2 -0,0.1 -0,0.2 -0.2,0.3 -0.2,0.2 -0.6,0.3 -1,0.5 -0.9,0.3 -2.2,0.5 -3.5,0.7 -1.3,0.2 -2.7,0.3 -3.7,0.5 -0.5,0.1 -1,0.2 -1.4,0.4 -0.2,0.1 -0.4,0.2 -0.6,0.3 -0.2,0.2 -0.4,0.4 -0.4,0.7 -0.1,0.9 0.3,1.7 1,2.3 0.7,0.6 1.5,1.1 2.6,1.6 2.1,0.9 4.9,1.7 7.9,2.4 2.9,0.7 5.9,1.2 8.3,1.7 2.4,0.4 4.4,0.8 4.8,0.9 2,0.6 3.3,1.8 4.9,3.2 1.5,1.3 3.2,2.8 5.8,3.5 3,0.8 6.2,-0.6 9.4,-2 3.2,-1.4 6.4,-2.8 9.1,-2.5 0.1,0 1,0.2 1.9,0.5 1,0.3 2.2,0.6 3.4,0.8 1.2,0.3 2.4,0.5 3.5,0.6 1.1,0.1 2,0.2 2.7,-0.5 0.8,-0.7 1.3,-1.4 1.4,-2.1 0.2,-0.8 -0,-1.5 -0.4,-2.2 -0.8,-1.3 -2.2,-2.3 -3.9,-3.2 -1.6,-0.9 -3.5,-1.8 -5,-2.6 -1.5,-0.8 -2.7,-1.6 -3,-1.9 -0.2,-0.3 -0.2,-0.2 -0.1,-0.4 0.1,-0.1 0.3,-0.4 0.7,-0.7 0.8,-0.5 2.2,-1 3.2,-1.5 0.5,-0.3 1,-0.5 1.3,-1 0.2,-0.3 0.3,-0.7 0.2,-1 -0.1,-0.4 -0.3,-0.6 -0.6,-0.8 -0.5,-0.4 -1.2,-0.7 -2.3,-1.1 -1.1,-0.3 -2.6,-0.7 -4.6,-1.1 l -0.3,1.3 0,-35.4 0,-0.6 -0.1,0 c -0.2,-0.6 -0.7,-1.1 -1.4,-1.5 -0.9,-0.5 -2.1,-1 -3.5,-1.3 -2.9,-0.7 -6.8,-1.2 -11.2,-1.2 z m 0,1.2 c 4.3,-1.1e-5 8.1,0.4 10.9,1.1 1.4,0.4 2.5,0.8 3.2,1.2 0.3,0.2 0.4,0.3 0.6,0.5 0.1,0.1 0.2,0.2 0.3,0.3 0,0 0,0 0,0.1 0,0 0,0.1 0,0.1 0,0 0,0.1 0,0.1 0,0 -0,0.1 -0,0.1 -0,0 -0,0 -0,0 -0,0 -0,0 -0,0.1 -0,0 -0,0 -0,0.1 -0,0 -0,0 -0,0.1 -0,0 -0,0.1 -0.1,0.1 -0,0.1 -0.1,0.1 -0.1,0.2 -0,0 -0,0 -0,0 -0.1,0.1 -0.3,0.3 -0.6,0.5 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.2 -10.9,1.2 -4.3,1.1e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.3,-0.2 -0.5,-0.3 -0.6,-0.5 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0.1 -0.1,-0.1 -0.1,-0.2 0,-0 0,-0.1 0,-0.1 0.1,-0.2 0.3,-0.6 0.9,-0.9 0.7,-0.4 1.8,-0.8 3.2,-1.2 2.8,-0.7 6.6,-1.1 10.9,-1.1 z m 15,5.3 0,34.1 0,0 0,5.6 c 0.1,0.2 0.2,0.3 0.2,0.4 0,0.2 -0.2,0.6 -0.9,1.1 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.1 -10.9,1.1 -4.3,1e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.6,-0.4 -0.9,-0.7 -0.9,-1 l -0,0 0,-0.1 0,-1.9 c -0.1,0.1 -0.1,0.1 -0.2,0.1 l 0,-38.4 c 0.1,0.1 0.2,0.1 0.3,0.2 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1.2e-5 8.3,-0.5 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.1,-0.1 0.2,-0.1 0.3,-0.2 z m -15.2,6.1 -14.6,14.2 14.2,13.8 0.8,0 14.2,-13.8 -14.6,-14.3 z m -1.8,2.4 0,11.6 -3.1,0 0.1,-8.7 3,-2.9 z m 3.6,0 c 0.4,0.3 3,2.7 3,3 l 0,8.5 -3,0 0,-11.6 z m -9.7,6 0,5.6 -2.5,0 0,-3.1 c 0,-0.3 2.2,-2.3 2.5,-2.5 z m 15.8,0 2.6,2.5 c -0.1,0.3 -0.1,-0.1 -0.1,0.3 l 0,2.8 -2.5,0 0,-5.6 z m -21.7,6 27.5,0 -13.8,13.3 -13.7,-13.3 z m -12.8,9.3 c 1.1,-0 2.5,0 3.9,0.1 1.4,0.1 2.9,0.2 4.2,0.3 1.1,0.1 1.9,0.1 2.6,-0 l 0,10 0,0.6 0.3,0 c 0.2,0.6 0.7,1.1 1.4,1.5 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1e-5 8.3,-0.4 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.9,-0.5 1.5,-1.2 1.5,-2.1 0,-0.3 -0.1,-0.5 -0.2,-0.8 l 0,-5.6 c 1.9,0.4 3.4,0.8 4.4,1.1 0.9,0.3 1.3,0.5 1.6,0.7 -0.1,0.1 -0.1,0.1 -0.4,0.3 -0.8,0.4 -2.2,0.9 -3.3,1.6 -0.5,0.3 -1,0.7 -1.3,1.3 -0.3,0.6 -0.2,1.4 0.2,2 0.7,1 2,1.6 3.5,2.4 1.6,0.8 3.4,1.6 4.9,2.5 1.5,0.9 2.8,1.9 3.3,2.7 0.2,0.4 0.3,0.7 0.2,1 -0.1,0.3 -0.3,0.8 -0.9,1.3 0,-0 -0.6,0.2 -1.5,0.1 -0.9,-0.1 -2.1,-0.3 -3.3,-0.6 -1.2,-0.3 -2.4,-0.6 -3.3,-0.8 -1,-0.3 -1.7,-0.5 -2.2,-0.5 -3.3,-0.3 -6.7,1.3 -9.9,2.7 -3.2,1.4 -6.1,2.5 -8.4,1.9 -2.3,-0.6 -3.7,-1.8 -5.2,-3.2 -1.5,-1.3 -3.1,-2.8 -5.5,-3.5 -0.8,-0.2 -2.5,-0.5 -5,-0.9 -2.4,-0.4 -5.4,-1 -8.3,-1.6 -2.9,-0.7 -5.6,-1.5 -7.6,-2.3 -1,-0.4 -1.7,-0.9 -2.2,-1.3 -0.3,-0.3 -0.4,-0.5 -0.5,-0.7 0.2,-0.1 0.6,-0.2 1.1,-0.3 1,-0.2 2.3,-0.3 3.6,-0.5 1.4,-0.2 2.7,-0.4 3.9,-0.8 0.6,-0.2 1.1,-0.4 1.5,-0.8 0.4,-0.3 0.8,-0.8 0.8,-1.4 0.1,-1 -0.4,-1.8 -1.1,-2.5 -0.6,-0.7 -1.4,-1.2 -2.1,-1.7 -0.7,-0.5 -1.3,-1 -1.6,-1.4 -0.1,-0.2 -0.2,-0.3 -0.2,-0.4 -0,-0.1 0,-0.1 0.1,-0.2 0,-0 0.1,-0 0.1,-0 0.3,-0 0.7,-0.1 1.2,-0.1 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.8,104.4 13.7,13.3 13.8,-13.3 z m 21.7,-0.4 h 2.5 v -2.8 c 0,-0.5 -0,-0.1 0.1,-0.4 l -2.7,-2.4 v 5.6 z m -6.1,0 h 3.1 v -8.5 c 0,-0.3 -2.7,-2.8 -3.1,-3.1 v 11.6 z m -6.6,-8.7 -0.1,8.7 3.1,0 -0,-11.6 z m -5.7,5.6 v 3.1 h 2.5 v -5.6 c -0.3,0.2 -2.5,2.2 -2.5,2.5 z M 99.8,85.4 c -4.3,1.2e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.7,-0.4 -0.9,-0.8 -0.9,-1 0,-0.2 0.2,-0.6 0.9,-1 0.7,-0.4 1.8,-0.8 3.2,-1.2 2.8,-0.7 6.6,-1.2 10.9,-1.2 4.3,-1.1e-5 8.1,0.4 10.9,1.1 1.4,0.4 2.5,0.8 3.2,1.2 0.7,0.4 0.9,0.8 0.9,1 0,0.2 -0.2,0.6 -0.9,1 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.2 -10.9,1.2 z m -15,-1.5 0,38.4 c 0.1,-0.1 0.1,-0.1 0.2,-0.1 l 0,1.8 0,0.1 0,0 c 0,0.2 0.3,0.6 0.9,0.9 0.7,0.4 1.8,0.9 3.2,1.2 2.8,0.7 6.6,1.2 10.9,1.2 4.3,-1e-5 8.2,-0.5 10.9,-1.2 1.4,-0.4 2.4,-0.8 3.2,-1.2 0.7,-0.4 0.9,-0.8 0.9,-1 0,-0.1 -0,-0.2 -0.2,-0.4 l 0,-5.6 -0,0 0,-34.1 c -0.1,0.1 -0.2,0.1 -0.3,0.2 -0.9,0.5 -2.1,1 -3.5,1.3 -2.9,0.7 -6.8,1.2 -11.2,1.2 -4.3,1.1e-5 -8.3,-0.4 -11.2,-1.2 -1.4,-0.4 -2.6,-0.8 -3.5,-1.3 -0.1,-0.1 -0.2,-0.1 -0.3,-0.2 z m 14.8,6.1 14.6,14.3 -14.2,13.8 -0.8,0 L 85,104.2 99.6,90 z m -26.7,23.7 c 1.1,-0 2.5,0 3.9,0.1 1.4,0.1 2.9,0.2 4.2,0.3 1.1,0.1 1.9,0.1 2.6,-0 l 0,10 0,0.6 0.3,0 c 0.2,0.6 0.7,1.1 1.4,1.5 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1e-5 8.3,-0.4 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.9,-0.5 1.5,-1.2 1.5,-2.1 0,-0.3 -0.1,-0.5 -0.2,-0.8 l 0,-5.6 c 1.9,0.4 3.4,0.8 4.4,1.1 0.9,0.3 1.3,0.5 1.6,0.7 -0.1,0.1 -0.1,0.1 -0.4,0.3 -0.8,0.4 -2.2,0.9 -3.3,1.6 -0.5,0.3 -1,0.7 -1.3,1.3 -0.3,0.6 -0.2,1.4 0.2,2 0.7,1 2,1.6 3.5,2.4 1.6,0.8 3.4,1.6 4.9,2.5 1.5,0.9 2.8,1.9 3.3,2.7 0.2,0.4 0.3,0.7 0.2,1 -0.1,0.3 -0.3,0.8 -0.9,1.3 0,-0 -0.6,0.2 -1.5,0.1 -0.9,-0.1 -2.1,-0.3 -3.3,-0.6 -1.2,-0.3 -2.4,-0.6 -3.3,-0.8 -1,-0.3 -1.7,-0.5 -2.2,-0.5 -3.3,-0.3 -6.7,1.3 -9.9,2.7 -3.2,1.4 -6.1,2.5 -8.4,1.9 -2.3,-0.6 -3.7,-1.8 -5.2,-3.2 -1.5,-1.3 -3.1,-2.8 -5.5,-3.5 -0.8,-0.2 -2.5,-0.5 -5,-0.9 -2.4,-0.4 -5.4,-1 -8.3,-1.6 -2.9,-0.7 -5.6,-1.5 -7.6,-2.3 -1,-0.4 -1.7,-0.9 -2.2,-1.3 -0.3,-0.3 -0.4,-0.5 -0.5,-0.7 0.2,-0.1 0.6,-0.2 1.1,-0.3 1,-0.2 2.3,-0.3 3.6,-0.5 1.4,-0.2 2.7,-0.4 3.9,-0.8 0.6,-0.2 1.1,-0.4 1.5,-0.8 0.4,-0.3 0.8,-0.8 0.8,-1.4 0.1,-1 -0.4,-1.8 -1.1,-2.5 -0.6,-0.7 -1.4,-1.2 -2.1,-1.7 -0.7,-0.5 -1.3,-1 -1.6,-1.4 -0.1,-0.2 -0.2,-0.3 -0.2,-0.4 -0,-0.1 0,-0.1 0.1,-0.2 0,-0 0.1,-0 0.1,-0 0.3,-0 0.7,-0.1 1.2,-0.1 z"}],i["GR.IN.IC.COLLEGE/UNIVERSITY"]=[{type:"path",stroke:!1,d:"m 97.4,106.9 h -14.8 v 31.7 h 32 v -31.7 H 99.8 V 95.1 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 h -2.3 v 24.5 z m 23.3,-30.1 -9.6,0 0,-15.1 2,0 0,13.3 7.6,0 0,1.8 M 106,63.5 c 0.6,0.7 1.1,1.5 1.4,2.5 0.3,1 0.5,2.1 0.5,3.3 -1e-5,1.2 -0.2,2.4 -0.5,3.4 -0.3,1 -0.8,1.8 -1.4,2.5 -0.6,0.7 -1.4,1.2 -2.2,1.5 -0.8,0.3 -1.8,0.5 -2.9,0.5 -1.1,0 -2,-0.2 -2.9,-0.5 -0.9,-0.4 -1.6,-0.9 -2.2,-1.5 -0.6,-0.7 -1.1,-1.5 -1.4,-2.5 -0.3,-1 -0.5,-2.1 -0.5,-3.3 -10e-7,-1.2 0.2,-2.3 0.5,-3.3 0.3,-1 0.8,-1.8 1.4,-2.5 0.6,-0.7 1.3,-1.2 2.2,-1.5 0.9,-0.4 1.9,-0.5 2.9,-0.5 1.1,1.5e-5 2.1,0.2 2.9,0.5 0.9,0.4 1.6,0.9 2.2,1.5 m -0.2,5.8 c -2e-5,-2 -0.4,-3.5 -1.3,-4.5 -0.9,-1.1 -2.1,-1.6 -3.6,-1.6 -1.5,1.4e-5 -2.7,0.5 -3.6,1.6 -0.9,1.1 -1.3,2.6 -1.3,4.5 -3e-6,2 0.4,3.5 1.3,4.6 0.9,1 2.1,1.6 3.6,1.6 1.5,2e-6 2.7,-0.5 3.6,-1.6 0.9,-1.1 1.3,-2.6 1.3,-4.6 m -14,6.5 c -0.4,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.3 -1.2,0.4 -0.4,0.1 -0.9,0.2 -1.4,0.3 -0.5,0.1 -1,0.1 -1.6,0.1 -1.1,0 -2.1,-0.2 -3,-0.5 -0.9,-0.3 -1.7,-0.8 -2.3,-1.5 -0.7,-0.6 -1.2,-1.5 -1.5,-2.4 -0.4,-1 -0.5,-2.1 -0.5,-3.5 -10e-7,-1.2 0.2,-2.4 0.5,-3.3 0.4,-1 0.9,-1.8 1.5,-2.5 0.6,-0.7 1.4,-1.2 2.3,-1.5 0.9,-0.3 1.9,-0.5 3,-0.5 0.8,1.5e-5 1.6,0.1 2.4,0.3 0.8,0.2 1.7,0.5 2.7,1 l 0,2.4 -0.2,0 c -0.8,-0.7 -1.7,-1.2 -2.5,-1.5 -0.8,-0.3 -1.7,-0.5 -2.6,-0.5 -0.8,1.4e-5 -1.5,0.1 -2.1,0.4 -0.6,0.2 -1.2,0.6 -1.6,1.1 -0.5,0.5 -0.8,1.2 -1.1,1.9 -0.3,0.8 -0.4,1.7 -0.4,2.7 -3e-6,1.1 0.1,2 0.4,2.7 0.3,0.8 0.7,1.4 1.1,1.9 0.5,0.5 1,0.9 1.7,1.1 0.6,0.2 1.3,0.4 2,0.4 1,2e-6 1.9,-0.2 2.7,-0.5 0.8,-0.3 1.6,-0.8 2.4,-1.5 l 0.1,0 0,2.4"}],i["GR.IN.IC.SCHOOL"]=[{type:"path",stroke:!1,d:"M 98.4,96.4 H 83.7 v 31.7 h 32 V 96.4 H 100.9 V 84.6 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 H 98.4 V 96.4 z"}],i["GR.IN.IC.REST STOP"]=[{type:"path",stroke:!1,d:"m 108.4,89.6 v -0.4 l 0.6,-0.6 -0.4,1.4 -3.8,13.4 -0.2,0.8 -0.4,0.6 0,0.9 -2,6.7 7.2,0 v 19.7 h 5.2 v -19.7 h 2.7 v 19.7 h 5.2 v -19.7 h 7.1 l -1.3,-5.3 -0.2,-0.8 -4.8,-16.4 -0.5,-1.4 0.6,0.7 0.1,0.4 c 2.1,2.4 5.4,14.2 8.6,14.2 h 0.4 c 1.2,0 2.1,-1.1 2.1,-2.3 v -0.6 c 0,-0.5 -4.8,-10 -5.3,-11.6 -0.7,-2 -1.7,-4.2 -2.6,-6 -1,-2.1 -1.2,-3.8 -4.6,-3.8 h -12.4 c -3.4,0 -3.6,1.8 -4.7,3.9 -0.9,1.7 -1.9,4 -2.5,5.9 -0.6,1.6 -5.2,11.1 -5.2,11.6 v 0.6 c 0,1.3 0.6,2.3 1.9,2.3 h 0.8 c 2.4,0 6.4,-12.2 8.2,-14.2 z m 0.2,0.4 0.4,-1.5 -0.6,0.6 0,0.4 z m 15.1,-0.4 -0.1,-0.4 -0.6,-0.6 0.5,1.4 z M 69.6,88.8 h 2.3 v 43.6 h 6.1 v -25.6 h 2.7 v 25.6 h 5.9 v -43.6 h 2.3 v 16.4 h 4.6 V 86.3 l -0.3,-2.3 h -0.4 c 0,-2.3 -1.7,-4.4 -4,-4.4 H 69.6 c -3,0 -4.4,3.4 -4.4,6.5 v 19.1 h 4.4 V 88.8 z M 110.7,72.8 c 0,2.7 2.4,5.4 5,5.4 h 0.2 c 1.6,0 2.8,-0.6 3.6,-1.4 0.5,-0.4 1.8,-2.4 1.8,-3 v -1.6 c 0,-2.4 -2.8,-4.6 -5.4,-4.6 -3,-0 -5.2,2.4 -5.2,5.2 z m -36.7,1.1 c 0,2 2.8,4.4 5,4.4 h 0.2 c 4.2,0 4.3,-3.4 5.2,-3.8 V 71.6 c 0,-1.8 -2.8,-4 -5.2,-4 -2.3,0 -5.2,2.2 -5.2,4 v 2.3 z"}],i["GR.IN.IC.CONTROL VALVE"]=[{type:"path",stroke:!1,d:"m 114,114.5 h 15.7 v 4 h 9.1 v -23.6 h -9.1 V 98.8 H 114.4 c -0.4,0 -2.6,-2.6 -2.6,-3.4 v -5.6 h -9.9 v -8.2 h 12.3 v -3.6 h -28.2 v 3.6 h 12.1 v 8.3 H 89.2 v 6.6 l -0.2,-0.2 -1.8,2.4 -17.2,0.1 V 95 H 61.2 v 23.6 h 8.9 v -4 H 87 c 0.4,0 2,2.4 2.4,2.8 0.5,0.6 2.2,1.9 2.9,2.4 1.9,1.2 4.7,2.4 7.8,2.4 h 0.6 c 3.5,0 5.8,-1 8.1,-2.4 1.4,-0.8 4.8,-3.8 5.2,-5.3 z"}],i["GR.IN.IC.DAM"]=[{type:"path",stroke:!1,d:"m 68.3,89.1 c 2.3,0 3.2,-1.7 4.6,-2.6 1.1,0.8 2.2,2.6 4.4,2.6 h 0.2 c 2.6,0 3.3,-1.7 4.7,-2.6 1.4,0.9 2.2,2.6 4.7,2.6 2.4,0 3.3,-1.8 4.6,-2.6 0.6,0.4 1.1,1.1 1.9,1.6 0.4,0.2 2.2,0.9 2.2,1.3 v 6.8 C 94.1,95.8 91.8,93.8 91.5,92.6 h -0.3 c -0.3,1.1 -3,3.6 -4.5,3.6 -1.5,0 -4.1,-2.6 -4.4,-3.8 -1,0.6 -2.6,3.8 -4.6,3.8 h -0.4 c -1.2,0 -4,-2.7 -4.2,-3.7 -0.8,0.2 -2.6,3.7 -4.7,3.7 h -0.3 c -1.1,0 -1.7,-0.7 -2.4,-1.2 l -1,1.2 c 1,0.7 1.6,1.8 3.2,1.8 h 0.4 c 2.3,0 3.1,-1.8 4.6,-2.8 0.7,1.1 2.8,2.8 4.7,2.8 2.3,0 3.3,-2 4.6,-2.8 1.2,0.8 2.6,2.8 4.7,2.8 2.1,0 3.4,-2.1 4.7,-2.8 0.7,1 2.6,2.4 4,2.7 v 7 c -1.4,-0.1 -3.4,-2.4 -4,-3.5 -1.1,0.7 -2.5,3.6 -4.7,3.6 h -0.1 c -2.3,0 -4.1,-3.5 -4.7,-3.7 -0.3,1 -3,3.7 -4.1,3.7 h -0.4 c -2.2,0 -3.6,-2.9 -4.7,-3.7 -0.6,1 -2.8,3.7 -4.1,3.7 H 67.7 c -0.7,0 -1.7,-1 -2.2,-1.3 l -0.9,1.5 c 1.1,0.7 1.7,1.6 3.6,1.6 2.7,0 3.1,-1.8 4.7,-2.6 1.4,0.9 2,2.6 4.7,2.6 2.2,0 3.4,-1.8 4.6,-2.6 1.4,1 2.5,2.6 4.8,2.6 1.8,0 3.4,-2 4.4,-2.6 0.9,0.5 1,1 2,1.6 0.4,0.3 2.2,0.7 2.2,1.2 v 6.8 c -1.4,-0.3 -3.6,-2.2 -4,-3.5 -1.1,0.7 -2.5,3.8 -4.8,3.8 -1.4,0 -4.1,-2.6 -4.4,-3.8 -1.2,0.8 -2.6,3.8 -4.8,3.8 -2,0 -3.7,-3.2 -4.7,-3.8 -0.3,1 -3,3.8 -4.3,3.8 h -0.6 c -0.8,0 -1.8,-1 -2.4,-1.3 l -0.9,1.3 c 1.1,0.7 1.8,1.8 3.6,1.8 2.2,0 3.3,-1.8 4.7,-2.8 1.2,0.8 2.6,2.9 4.7,2.8 2.3,-0.1 3.3,-1.9 4.6,-2.8 1.2,0.8 2.7,2.8 4.7,2.8 1.9,0 3.4,-2 4.6,-2.8 1.6,1 1.8,2 4.1,2.5 v 5 h 17 l -1.4,-5.2 c 0.8,0.2 1,0.6 2.2,0.6 2,0 3.3,-1.9 4.6,-2.8 1.3,0.9 2.4,2.8 4.7,2.8 1.6,0 3.8,-1.8 4.4,-2.8 1.3,0.3 2.5,2.8 5.1,2.8 1.2,0 2.6,-1.4 3.4,-1.8 l -1,-1.3 c -0.7,0.4 -1.5,1.3 -2.6,1.3 -2.1,0 -3.7,-3.1 -4.7,-3.8 -0.7,1.4 -2.7,3.8 -4.7,3.8 -1.3,0 -4.3,-2.6 -4.4,-3.8 -1,0.7 -2.6,3.8 -4.7,3.8 h -0.2 c -1.1,0 -2.2,-0.9 -2.7,-1.5 -0.4,-0.4 -0.8,-2.5 -1.1,-3.2 -0.4,-1 -1.8,-5.6 -1.8,-6.6 l -0.3,-0.4 0,-0.6 -0.3,-0.4 v -0.6 l -0.3,-0.4 -5.3,-18.6 0.2,-0 -0.3,-0.4 0,-0.6 c -0.2,-0.3 -0.3,-0.3 -0.3,-0.6 v -0.4 h -5.6 v 7.8 c -1.4,-0.7 -1.2,-0.5 -2.4,-1.6 -0.1,-0.1 -1,-0.9 -1,-1 -0.4,-0.5 -0.1,-0.9 -0.8,-1.1 -0.1,1.2 -3.1,3.8 -4.3,3.8 h -0.2 c -2.5,0 -4.2,-3.6 -4.8,-3.8 -0.3,1.1 -3,3.8 -4.2,3.8 h -0.4 c -1.2,0 -4.2,-2.7 -4.2,-3.8 -0.5,0.1 -2.8,3.8 -4.4,3.8 H 67.7 c -0.7,0 -1.7,-1 -2.2,-1.3 l -0.9,1.3 c 1,0.7 1.6,1.6 3.4,1.6 h 0.3 v 0 z"}],i["GR.IN.IC.DISCHARGE OUTFALL"]=[{type:"path",stroke:!1,d:"m 63.2,111.4 v 13.4 h 73.6 V 111.7 l -3.1,0.5 -1.1,-0.1 c -2.2,0 -3.6,-0.7 -4.9,-1.6 -0.6,-0.4 -1.1,-1.1 -1.5,-1.8 -0.4,-0.6 -0.2,-2.1 -1,-2.1 h -0.4 c -0.8,0 -0.7,1.6 -1.2,2.2 -0.4,0.6 -0.9,1.2 -1.6,1.7 -1.3,1 -3,1.6 -5.1,1.6 h -0.9 c -3.2,0 -6.8,-2.1 -6.8,-5.1 -0.3,-0.2 -0.4,-0.4 -0.8,-0.4 h -0.3 c -0.7,0 -0.8,1.5 -1.1,2.1 -0.4,0.6 -1,1.4 -1.5,1.8 -1.2,1 -2.7,1.6 -4.8,1.6 h -0.9 c -3.5,0 -7.3,-2.1 -7.3,-5.4 -0.4,-0.1 -0.4,-0.2 -0.8,-0.2 h -0.3 c -0.6,0 -0.6,1.5 -1.1,2.2 -0.5,0.8 -0.7,1.1 -1.5,1.7 -1.3,1 -2.7,1.6 -4.8,1.6 H 82.9 c -3.5,0 -6.7,-2.2 -7,-5.4 -0.3,-0.1 -0.4,-0.2 -0.8,-0.2 h -0.1 c -0.7,0 -0.8,1.5 -1.2,2.2 -0.4,0.6 -0.9,1.2 -1.6,1.7 -1.4,1 -2.7,1.6 -5,1.6 h -1 c -1.2,0 -2.2,-0.4 -3,-0.8 l 0,0 z m 0,-21.6 19.5,0 0,1.2 2.7,0 0,-15.8 -2.7,0 0,1.2 -19.5,0 z M 89.7,80.9 v 0.1 c 8.1,0 16.2,1.2 20.6,4.9 2.8,2.4 3.1,4.5 3.1,9.6 0,4.1 0.5,8.3 4.5,8.3 h 0.8 c 1.7,0 2.8,-2.6 2.8,-4.3 v -0.9 c 0,-5.1 -3.3,-10.7 -5.9,-13.3 -1.6,-1.6 -3.6,-3 -6.1,-3.6 -2.2,-0.5 -6,-1.1 -8.6,-1.1 l -1.8,-0.1 -9.4,0.4 z"}],i["GR.IN.IC.GROUND WATER WELL"]=[{type:"path",stroke:!1,d:"M86,64L86,70L75,110L81,110L92,70L99,70L99,130L86,130L86,140L120,140L120,130L110,130L110,89L120,89L120,93L130,93L130,87C130,82.631 125.551,83 125.551,83L110,83L110,70L113.774,70L113.774,64L86,64Z"}],i["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 109.7,116.6 4.1,13.4 -0.2,0.1 -12.2,-8.4 8.3,-5.2 z m -19.7,0 8,5.1 -12.1,8.4 4.1,-13.6 z m 9.8,-9.8 8.8,8.2 c -1.7,0.5 -8.1,5.6 -8.8,5.6 -0.2,0 -8.2,-5.4 -8.6,-5.8 l 8.5,-8.1 z m 5.3,-4.8 3.1,9.8 -6.9,-6.4 3.7,-3.4 z m -10.5,0.1 3.8,3.3 -6.9,6.4 3.1,-9.7 z m 2.1,-1 6.4,-0 -3.2,3.2 -3.2,-3.2 z M 99.2,84.8 C 99.1,85.4 99,85.5 99,86.1 v 2 h -3 c -0.5,0 -0.8,0.3 -0.8,0.8 0,0.5 0.1,0.5 0.2,1 0.4,0.1 0.4,0.2 1,0.2 h 2.6 v 2.8 h -4.5 c -0.6,0 -1.2,0.2 -1.2,0.8 0,0.5 0.3,0.8 0.8,0.8 h 4.9 v 4.9 h -4.5 c -0.5,0 -0.5,0.1 -0.9,0.2 l -2.5,7.9 -1,3.2 -4.1,13.3 -1.1,3.1 c 0,2 -1.4,3.5 -1.4,5.5 0,0.4 0.1,0.2 0.2,0.8 h 0.5 c 0.6,0 15.1,-10.3 15.4,-10.3 0.6,0 14.2,9.4 15.8,10.5 0.4,-0.2 1,-0.4 1,-1 v -0.6 c 0,-0 -1.5,-4.4 -1.7,-5 -0.4,-1.1 -1.4,-4.3 -1.5,-5.2 l -1,-3.2 -4.1,-13.2 -0.9,-3.4 c -1,-0.4 -0.3,-2.6 -1.6,-2.6 h -4.8 v -5 h 4.8 c 0.5,0 0.8,-0.3 0.8,-0.8 0,-0.5 -0.3,-0.8 -0.8,-0.8 H 100.8 V 90.1 h 2.4 c 0.7,0 1.4,-0.4 1.4,-1 v -0.2 c 0,-0.5 -0.3,-0.8 -0.8,-0.8 h -2.9 v -2.6 c 0,-0.4 -0.6,-1 -0.8,-1 -0,-0 -0.7,0.1 -0.8,0.2 z m 6.7,-15.7 c 7,1.6 10.9,4.6 15.1,8.9 3,3 7.3,11 7.3,16.9 v 4 c 0,2.1 -1.5,7.7 -2.2,9 -0.7,1.1 -1.2,2.4 -1.9,3.6 -0.3,0.4 -2.4,3.3 -2.4,3.4 0,0.7 1,1.6 1.2,2.6 1.7,-0.4 4.8,-6.3 5.7,-8.2 1.2,-2.5 2.7,-7.8 2.7,-11.4 V 94.3 c 0,-0.1 -0.9,-4.9 -1,-5.5 -0.3,-0.9 -1.4,-3.7 -1.8,-4.8 -0.9,-2.2 -3.7,-6.4 -5.2,-8 -3.6,-3.6 -10.6,-9.2 -16.9,-9.7 l -0.4,2.8 z m -1.6,10.7 c 6,0.5 13.3,9.2 13.3,16.1 v 2.2 c 0,1.5 -1.4,5.5 -1.4,5.5 0,0.2 1.2,2.9 1.4,3.2 l 0.2,0.1 1.6,-3.4 0.1,-0.6 0.7,-5.9 0.2,-0.4 -1,-5.9 c -0.7,-0.3 -0.6,-1.4 -1.1,-2.2 -0.4,-0.8 -0.8,-1.6 -1.3,-2.3 -1.1,-1.6 -1.8,-2.6 -3.2,-3.9 -2.2,-2.2 -5.8,-4.2 -9.2,-5 l -0.3,2.8 z M 68.7,95.2 v 5.1 c 0,4.2 5.4,16.3 7.9,17 0.1,-0.5 1,-2.2 1,-2.6 0,0 -2.1,-2.9 -2.3,-3.4 -0.7,-1.3 -1.3,-2.4 -1.9,-3.8 -1,-2.6 -1.8,-6 -1.8,-9.6 v -2.4 c 0,-8 3.3,-12.9 6.9,-17.5 1.4,-1.8 4.7,-4.4 6.7,-5.6 1.4,-0.8 2.5,-1.4 4.1,-2.1 0.5,-0.2 4.5,-1.3 4.5,-1.6 l -0.2,-2.6 c -2.4,0.1 -8,2.6 -9.6,3.7 -3.2,1.9 -4.8,3.6 -7.3,6.1 -3.6,3.6 -7.8,12 -7.8,19.1 l 0,0 z m 10.7,0 v 2.9 c 0,1.9 0.2,3.1 0.8,4.5 0.2,0.4 1.5,4 1.5,4 l 0.4,-0 1.5,-2.9 c -0.9,-1.2 -1.4,-4 -1.4,-6.2 v -1.8 c 0,-3.7 2.3,-8.3 4.2,-10.3 1.8,-1.8 5.9,-5.5 9.1,-5.6 L 95,77.1 C 88,77.6 79.4,87.3 79.4,95.2 z"}],i["GR.IN.IC.TELECOMMUNICATIONS TOWER"]=[{type:"path",stroke:!1,d:"m 102.5,119.2 12,-8 2.8,9.2 1.3,4 2.1,6.9 -18.2,-12 z m -23,12 3.4,-11.7 2,-5.9 0.8,-2.6 11.9,8.2 -18,12 z m 20.4,-34.6 13,12.2 c -1.5,1 -12.3,8.5 -13.1,8.5 -0.1,0 -11.6,-7.7 -12.7,-8.5 L 99.9,96.6 z m 7.7,-7.1 0.2,0.2 1.8,5.7 2.5,8.7 -10.1,-9.3 5.6,-5.2 0,0 z m -15.5,0.6 v -0.6 l 0.4,0.2 5.4,5 -10,9.4 2.6,-9 1.6,-5 z m 2.9,-1.7 9.8,-0 -5,4.4 -4.8,-4.4 z m 3.6,-23.1 v 3.6 h -4.4 c -0.5,0 -1,0.6 -1,1 v 0.6 c 0,0.7 0.8,1 1.5,1 h 4 v 4.2 h -7.2 c -0.5,0 -1,0.6 -1,1 v 0.2 c 0,1 0.5,1.5 1.5,1.5 h 6.8 v 7 h -6.8 c -0.8,0 -1,0.3 -1.3,0.7 l -0.6,2 -4.9,15.6 -3,9.6 -3.1,9.4 -0.1,0.8 -2.9,8.7 -0.1,0.8 -0.5,2.2 c 1,0.2 0.5,0.6 1.3,0.6 h 0.2 c 0.8,0 20.1,-13.7 23.1,-15.2 2.5,1.7 22.4,15.2 23.5,15.2 0.6,0 1,-0.7 1,-1.3 0,-0.1 -1.4,-4 -1.5,-4.2 l -0.1,-0.8 -3.1,-9.7 -2.9,-9.3 -4.7,-15.7 c -0.6,-0.8 -1.4,-3.8 -1.8,-5 -0.6,-1.8 -0.5,-4.3 -2.5,-4.3 h -6.8 v -7 h 7.2 c 0.5,0 1,-0.6 1,-1 v -0.4 c 0,-0.6 -0.2,-1.3 -0.8,-1.3 h -7.4 v -4.2 h 4 c 0.7,0 1.5,-0.4 1.5,-1 v -0.6 c 0,-0.7 -0.8,-1 -1.5,-1 h -4 v -4 c 0,-0.6 -0.7,-1 -1.3,-1 -0.8,-0 -1.3,0.6 -1.3,1.4 l 0,0 z m -6.6,24.8 0.4,-0.4 -0.4,-0.2 z"}],i["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]=a("ATC"),i["GR.IN.IC.PROPANE FACILITY"]=[{type:"path",stroke:!1,d:"m 98.7,73.1 v 0.2 c 0,1 0.5,1.5 1.5,1.5 0.5,0 1.1,-0.6 1.1,-1.1 0,-0.8 -0.2,-0.8 -0.2,-1.5 -0.5,-0.1 -0.5,-0.2 -1.1,-0.2 h -0.2 c -0.5,0 -1.1,0.6 -1.1,1.1 z m -12.6,58.5 h 28.4 v 3.3 h -28.4 v -3.3 z M 75.8,119 h 48.5 v 3.3 c 0,2 -8.8,7.8 -9.8,7.8 H 85.8 c -1,0 -10,-5.8 -10,-7.6 v -3.5 l 0,0 z m 0,-27.5 c 0,-1.1 7.2,-5.8 8.5,-6.6 2.6,-1.5 7.4,-3.7 11.4,-3.7 h 8.5 c 4.1,0 9.1,2 11.6,3.7 1.3,0.9 8.5,5.4 8.5,6.6 v 4.2 H 75.8 V 91.5 l 0,0 z M 98.2,77.1 c 0.7,0 0.8,0.2 1.5,0.2 h 0.4 c 0.8,0 0.8,-0.2 1.5,-0.2 v 1.8 l 1.2,0.8 -5.5,0 c 0.3,-0.5 0.9,-0.8 0.9,-1.3 l -0,-1.3 0,0 z m -1.1,-4 c 0,-1.4 1.4,-2.4 2.8,-2.4 1.3,0 2.8,0.9 2.8,2 v 1.1 c 0,1.4 -1.6,2.4 -3,2.4 -1,0 -2.6,-1.2 -2.6,-2.4 v -0.7 h -0 z m 12.2,-8.1 h 3.5 v 3.5 h -1.8 v 6.8 c 0.7,0 2.4,0.6 2.4,1.3 v 3.7 H 109.4 V 65.1 z m -22.7,0 h 4.2 V 80.3 H 85.8 v -4.1 c 0.8,-0.2 3.1,-0.8 3.1,-1.5 v -6.1 h -2.2 v -3.5 z m 5.7,0 h 15.5 v 15.3 c -1.6,-0.4 -4.8,-0.9 -4.8,-2.6 v -0.9 c 0,-1.5 0.9,-2.1 0.9,-2.6 v -1.1 c 0,-3.2 -3,-3.2 -3.3,-4.4 h 4.2 v -1.5 h -9.6 v 1.5 h 4.2 v 0.6 c -1.9,0.1 -3.1,1.9 -3.1,4 v 0.6 c 0,1 0.9,2 0.9,2.4 v 1.3 c 0,1.4 -3.4,2.3 -4.8,2.6 V 65.1 l 0,0 z m -7.2,4.8 h 2.2 v 4 c 0,0.8 -2.1,1.2 -2.8,1.3 v 6.8 h 3 c -0.6,0.4 -2.7,1.2 -3.6,1.8 -1.2,0.7 -2.2,1.4 -3.4,2.1 -0.9,0.6 -6.1,4.7 -6.3,4.8 v 31.6 c 0,1.9 3.2,4.4 4.5,5.3 1,0.6 5.8,3.3 5.8,4.1 v 4.8 h 31.2 v -4.8 c 0,-1.6 10,-4.6 10,-10 V 91.1 c 0,-0.9 -5,-4.4 -6,-5.1 -1.2,-0.8 -2.1,-1.4 -3.3,-2.1 -0.9,-0.6 -3.2,-1.4 -3.7,-1.9 h 2.4 v -6.8 c -0.7,-0.2 -2.6,-0.5 -2.6,-1.3 v -4 h 2 V 63.5 H 85.2 v 6.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 114.4,134.9 0,-3.3 -28.4,0 0,3.3 z M 75.8,122.5 c 0,1.9 9,7.6 10,7.6 h 28.6 c 1,0 9.8,-5.9 9.8,-7.8 v -3.3 H 75.8 v 3.5 l 0,0 z m 0,-31 v 4.2 h 48.5 V 91.5 c 0,-1.2 -7.2,-5.7 -8.5,-6.6 -2.5,-1.7 -7.5,-3.7 -11.6,-3.7 h -8.5 c -3.9,0 -8.8,2.2 -11.4,3.7 -1.3,0.8 -8.5,5.4 -8.5,6.6 l 0,0 z M 109.4,80.3 h 4.2 v -3.7 c 0,-0.8 -1.7,-1.2 -2.4,-1.3 v -6.8 h 1.8 V 65.1 H 109.4 V 80.3 z M 86.7,68.6 h 2.2 v 6.1 c 0,0.8 -2.3,1.4 -3,1.5 v 4.2 h 5 V 65.1 h -4.2 v 3.5 z m 11.6,9.8 c 0,0.6 -0.6,0.8 -0.9,1.3 l 5.5,-0.1 -1.1,-0.8 V 77.1 c -0.7,0 -0.8,0.2 -1.5,0.2 H 99.8 c -0.8,0 -0.8,-0.2 -1.5,-0.2 l -0,1.3 0,0 z m 2.8,-6.1 c 0.1,0.7 0.2,0.8 0.2,1.6 0,0.5 -0.6,1.1 -1.1,1.1 -1,0 -1.5,-0.5 -1.5,-1.5 v -0.2 c 0,-0.5 0.6,-1.1 1.1,-1.1 h 0.2 c 0.6,0 0.6,0.1 1.1,0.2 z m -3.9,0.9 v 0.7 c 0,1.2 1.6,2.4 2.6,2.4 1.4,0 3,-1 3,-2.4 V 72.7 c 0,-1 -1.6,-2 -2.8,-2 -1.4,0 -2.8,1 -2.8,2.4 z"}],i["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"M 100,67.3 C 90.1122,72.1037 79.3336,77.3992 70,82 c -1.2,0.6 -3.8,1.3 -3.8,2.8 l -0.1,0 0,0.4 c 0,0.6 0.1,0.6 0.2,1.1 0.5,0.1 0.5,0.2 1.1,0.2 l 65,0 c 0.7,0 1.7,-0.6 1.7,-1.1 0,-2.2 -1.7,-2.4 -3.2,-3 C 119.391,76.7575 109.17,71.7941 100,67.3 Z m -0.1,3.4 c 0.2,0 24.5,12 25.9,13 l -51.6,0 0,-0.1 C 75,83 99.7,70.7 99.9,70.7 Z m 31.6,55.6 0,-3 -63.3,0 0,3 z m 2.3,6.4 0,-3 -67.7,0 0,3 z m -6.2,-40.7 2.4,0 0,-3.2 -7.9,0 0,3.2 2.1,0 -0.6,25.5 -1.5,0 0,3.8 7.9,0 0,-3.8 -1.5,0 z m -14.6,-3.2 -7.6,0 0,3.2 2.2,0 -0.9,25.4 -1.3,0 0,3.8 7.6,0 0,-3.8 -1.4,0 -0.7,-25.5 2.1,0 z m -20.8,3.1 2.3,0 0,-3.2 -7.8,0 0,3.2 2.3,0 -0.8,25.4 -1.5,0 0,3.8 7.8,0 0,-3.8 -1.7,0 z m -22.5,25.5 0,3.8 8,0 0,-3.8 -1.5,0 -0.8,-25.5 2.3,0 0,-3.2 -8,0 0,3.2 2.4,0 -0.9,25.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 74.1,83.6 h 51.6 C 124.3,82.7 100,70.7 99.8,70.7 99.6,70.7 74.9,83 74.1,83.6 l 0,0 z"}],i["GR.IN.IC.MILITARY INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 65.2,93.1 c 0,-0.5 15.6,-11.5 17.3,-12.8 1.5,-1.2 17.3,-12.6 17.4,-12.6 0.6,0 15.9,11.2 17.6,12.5 1.7,1.3 17.3,12.4 17.3,12.9 0,0 -6.1,18.6 -6.7,20.3 -1.2,3.4 -2.2,6.8 -3.4,10.3 -1,3 -2.7,7.2 -3.3,10 H 78.4 c -0.1,-1.7 -5.6,-18 -6.5,-20.4 -0.6,-1.4 -6.6,-20.1 -6.6,-20.1 z m 8.4,38.5 2,6.1 49,0 8.4,-26.4 6.6,-20.5 -39.7,-28.7 -39.6,28.8 13.3,40.6 0,0 z M 100,76.2 c 2.7,2.4 26.6,18.7 26.6,19.6 0,0.8 -4.1,12.7 -4.5,13.4 l -5.6,17.4 -32.5,0 c -0.9,0 -3,-7.4 -3.5,-8.7 -0.6,-1.8 -2.9,-7.8 -2.9,-9.4 L 74.3,98.9 73.5,95.5 100,76.2 z m 30.5,18 c -3.1,-2.1 -30,-22.2 -30.7,-22.2 -0.1,0 -13.8,10.1 -15.2,11.1 -2,1.4 -14.3,10.7 -15.2,10.9 v 0.7 c 0,1 2.9,7 2.9,9.3 l 8.7,26.3 37.7,0 5,-15.7 6.6,-20.4 z m -50.4,3.2 c 0.8,-0.2 8.6,-6.1 10,-7 1.2,-0.8 9.5,-7.1 10,-7.1 0,0 9,6.5 10,7.2 1.2,0.8 9.7,6.5 9.7,7.3 0,1.2 -0.4,2 -0.9,2.7 0,1.6 -2.6,8.7 -3.3,10.6 -0.5,1.4 -2.8,10.1 -3.7,10.1 H 88.1 c -0.7,0 -1.8,-4 -2,-4.8 -0.6,-1.7 -1.2,-3.3 -1.7,-5.1 -0.6,-2.1 -3.1,-8.7 -3.1,-10.3 l -0.3,0.1 -0.9,-3.7 z m -3.2,-0.7 8.8,27 28.2,-0 8.7,-27.2 c -3.2,-1.7 -21.7,-16.3 -22.9,-16.3 -0.3,0 -20.6,15 -22.9,16.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 77,96.8 c 2.3,-1.5 22.6,-16.6 22.9,-16.6 1.2,0 19.7,14.6 22.9,16.3 l -8.7,27.2 -28.3,0 -8.8,-27 z m -3.6,-1.3 0.9,3.4 3.4,9.7 c 0,1.5 2.3,7.6 2.9,9.4 0.4,1.3 2.5,8.7 3.5,8.7 l 32.5,-0 5.5,-17.4 c 0.4,-0.6 4.5,-12.6 4.5,-13.4 0,-1 -23.9,-17.2 -26.6,-19.6 L 73.5,95.5 z m 6.7,2 0.9,3.7 0.3,-0.1 c 0,1.6 2.4,8.2 3.1,10.3 0.5,1.8 1.1,3.4 1.7,5.1 0.2,0.8 1.3,4.8 2,4.8 h 23.8 c 1,0 3.3,-8.6 3.7,-10.1 0.6,-1.9 3.3,-9 3.3,-10.6 0.5,-0.7 1,-1.5 1,-2.7 0,-0.8 -8.5,-6.5 -9.7,-7.3 -1,-0.7 -9.9,-7.2 -10,-7.2 -0.5,0 -8.8,6.2 -10,7 -1.3,1 -9.2,6.8 -10,7.1 z m 43.8,17.1 -5,15.7 -37.7,-0 -8.7,-26.3 c 0,-2.3 -2.9,-8.3 -2.9,-9.3 v -0.7 c 1,-0.2 13.2,-9.5 15.2,-10.9 1.4,-1 15.1,-11.1 15.2,-11.1 0.7,0 27.6,20 30.7,22.2 l -6.6,20.4 z M 65.2,93.1 c 0,0 6,18.7 6.6,20.1 1,2.4 6.4,18.7 6.5,20.4 h 43.1 c 0.6,-2.8 2.3,-7 3.3,-10 1.2,-3.5 2.1,-6.8 3.4,-10.3 0.6,-1.7 6.7,-20.2 6.7,-20.3 0,-0.5 -15.6,-11.5 -17.3,-12.9 C 115.8,79 100.5,67.7 99.9,67.7 99.8,67.7 84.1,79.2 82.5,80.3 80.8,81.6 65.2,92.7 65.2,93.1 z"}],i["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"M 64.3,86.6 99.9,102.1 135.7,86.6 v 31.8 H 64.3 v -31.8 l 0,0 z m 62.5,1.9 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18,7.7 -0.5,0 -15.8,-7 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.8 v -3.2 h 71.5 v 3.2 c -2.1,0.4 -6.6,2.9 -9,3.9 z m -64.1,31.7 h 74.7 V 79.8 H 62.7 v 40.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 64.3,86.6 0,31.8 71.5,0 0,-31.8 -35.8,15.5 z m 0,-2 c 2,0.5 6.5,3 8.8,3.8 2.9,1.1 5.8,2.7 8.8,3.9 2,0.8 17.3,7.8 17.8,7.8 0.9,0 15.9,-6.8 18,-7.7 3.1,-1.3 5.9,-2.6 9,-3.9 2.4,-1 6.9,-3.4 9,-3.9 V 81.4 H 64.3 v 3.2 l 0,0 z"}],i["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]=[{type:"path",stroke:!1,d:"M 64.3,94.6 99.9,110.1 135.7,94.6 V 126.4 H 64.3 l 4e-4,-31.8 0,0 z m 62.5,1.9 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18.1,7.7 -0.5,0 -15.7,-6.9 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.9 v -3.2 h 71.5 v 3.2 c -2.1,0.5 -6.6,2.9 -9,3.9 z M 62.7,128.2 h 74.7 V 87.8 H 62.7 v 40.5 z m 66.1,-54.4 -5.4,0 0,13.3 -2,0 0,-13.3 -5.4,0 0,-1.8 12.8,0 0,1.8 m -14,9 c -1e-5,0.6 -0.1,1.2 -0.4,1.7 -0.3,0.6 -0.7,1.1 -1.1,1.5 -0.5,0.4 -1.2,0.8 -1.9,1 -0.7,0.2 -1.6,0.4 -2.6,0.4 -1.1,0 -2.1,-0.1 -2.9,-0.3 -0.9,-0.2 -1.8,-0.5 -2.7,-0.9 l 0,-2.5 0.1,0 c 0.8,0.6 1.6,1.1 2.7,1.5 1,0.3 1.9,0.5 2.8,0.5 1.2,10e-7 2.2,-0.2 2.9,-0.7 0.7,-0.5 1,-1.1 1,-1.9 -1e-5,-0.7 -0.2,-1.2 -0.5,-1.5 -0.3,-0.3 -0.8,-0.6 -1.5,-0.7 -0.5,-0.1 -1.1,-0.2 -1.7,-0.3 -0.6,-0.1 -1.2,-0.2 -1.9,-0.3 -1.3,-0.3 -2.3,-0.8 -3,-1.5 -0.6,-0.7 -1,-1.6 -1,-2.7 0,-1.3 0.5,-2.3 1.6,-3.1 1.1,-0.8 2.4,-1.2 4.1,-1.2 1.1,1.6e-5 2,0.1 2.9,0.3 0.9,0.2 1.7,0.5 2.4,0.8 l 0,2.4 -0.1,0 c -0.6,-0.5 -1.3,-0.9 -2.3,-1.2 -0.9,-0.3 -1.9,-0.5 -2.9,-0.5 -1.1,1.3e-5 -1.9,0.2 -2.6,0.7 -0.7,0.4 -1,1 -1,1.7 -1e-5,0.6 0.2,1.1 0.5,1.5 0.3,0.4 0.9,0.6 1.7,0.8 0.4,0.1 1,0.2 1.8,0.3 0.8,0.1 1.5,0.3 2,0.4 1.1,0.3 2,0.7 2.5,1.4 0.6,0.6 0.9,1.4 0.9,2.5 m -14.4,4.3 -6,0 0,-1.5 2,0 0,-12 -2,0 0,-1.5 6,0 0,1.5 -2,0 0,12 2,0 0,1.5 m -8.6,-7.5 c -1.5e-5,1.4 -0.3,2.6 -0.9,3.7 -0.6,1.1 -1.4,2 -2.4,2.6 -0.7,0.4 -1.5,0.7 -2.3,0.9 -0.8,0.2 -2,0.3 -3.4,0.3 l -3.8,0 0,-15.1 3.8,0 c 1.5,1.5e-5 2.6,0.1 3.5,0.3 0.9,0.2 1.6,0.5 2.2,0.9 1,0.6 1.8,1.5 2.4,2.6 0.6,1.1 0.9,2.3 0.9,3.8 m -2.1,-0 c -1.2e-5,-1.2 -0.2,-2.2 -0.6,-3 -0.4,-0.8 -1,-1.5 -1.8,-1.9 -0.6,-0.3 -1.2,-0.6 -1.9,-0.7 -0.7,-0.1 -1.5,-0.2 -2.4,-0.2 l -1.9,0 0,11.7 1.9,0 c 1,2e-6 1.8,-0.1 2.5,-0.2 0.7,-0.1 1.4,-0.4 2,-0.8 0.8,-0.5 1.3,-1.1 1.7,-1.9 0.4,-0.8 0.6,-1.8 0.6,-2.9"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 126.8,96.5 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18.1,7.7 -0.5,0 -15.7,-6.9 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.9 v -3.2 h 71.5 v 3.2 c -2.1,0.5 -6.6,2.9 -9,3.9 z m -62.5,-1.9 35.6,15.5 35.8,-15.5 V 126.4 H 64.3 l 4e-4,-31.8 0,0 z"}],i["GR.IN.IC.POST OFFICE"]=[{type:"path",stroke:!1,d:"m 74.7,92.8 24.9,10.8 L 124.7,92.8 V 115.1 H 74.7 V 92.8 l 0,0 z m 43.7,1.3 c -2.2,0.9 -4.1,1.8 -6.3,2.7 -1.5,0.6 -12,5.4 -12.6,5.4 -0.4,0 -11,-4.9 -12.5,-5.4 -2.1,-0.8 -4.1,-1.9 -6.2,-2.7 -1.6,-0.6 -4.8,-2.4 -6.2,-2.7 v -2.2 h 50 v 2.3 c -1.5,0.3 -4.6,2 -6.3,2.7 z M 73.6,116.4 H 125.8 V 88.1 H 73.6 V 116.4 z M 99.8,64.3 c 0.2,0 35.5,19.8 37.1,21.2 h -4.8 v 38.6 h -63.9 v -38.6 h -4.9 c 1.6,-1.4 6.9,-4.1 9.1,-5.3 3.1,-1.8 6,-3.4 9.1,-5.3 1.6,-1 18.3,-10.6 18.4,-10.6 z m -43.3,23.1 9.9,-0.2 v 38.4 h 67.4 v -38.4 l 9.9,0.2 c -0.5,-0.6 -43.6,-25 -43.9,-25 -0,0 -19.5,11.4 -21.7,12.5 -3.5,1.8 -7.4,4.2 -10.9,6.2 -2.7,1.6 -8.8,4.6 -10.8,6.3 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 99.8,64.3 C 99.8,64.3 83.1,73.9 81.5,74.9 c -3,1.8 -6,3.5 -9.1,5.3 -2.2,1.2 -7.5,4 -9.1,5.3 l 4.9,0 0,38.6 63.9,0 0,-38.7 4.8,0 c -1.6,-1.4 -36.9,-21.2 -37.1,-21.2 z M 73.6,88.1 l 52.3,0 0,28.3 -52.3,0 0,-28.3 z m 44.9,6.1 c -2.2,0.9 -4.1,1.8 -6.3,2.7 -1.5,0.6 -12,5.4 -12.6,5.4 -0.4,0 -11,-4.9 -12.5,-5.4 -2.1,-0.8 -4.1,-1.9 -6.2,-2.7 -1.6,-0.6 -4.8,-2.4 -6.2,-2.7 v -2.2 h 50 v 2.3 c -1.5,0.3 -4.6,2 -6.3,2.7 z M 74.7,92.8 99.6,103.7 124.7,92.8 V 115.1 H 74.7 V 92.8 l 0,0 z"}],i["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]=[{type:"path",stroke:!1,d:"m 114.9,121.3 0,-1.2 -30.7,0 0,1.2 z m -31.9,-2.5 -10.4,-16.7 -1,0.4 10.6,16.6 z m 13,-13.8 h 7 c 0.6,0 4.4,-6 5,-6.8 H 91 c 0.6,0.9 4.4,6.8 5,6.8 z m 15.3,12 0,-1 -23.5,0 0,1 z m 2.4,-1.6 8.6,-13.6 -0.8,-0.4 -8.5,13.3 z M 76.8,101.9 c 0,0.3 3.7,5.9 4.2,6.7 0.4,0.6 4.2,6.7 4.3,6.7 0.4,0 0.5,-0.2 0.7,-0.5 l -8.5,-13.4 c -0.2,0.1 -0.7,0.2 -0.7,0.5 z m 31,10.8 0,-1 -16.5,0 0,1 z m -19.3,-1.2 0.7,-0.4 -6.7,-10.5 -0.7,0.4 z m 22.3,-0 6.4,-10.5 -0.8,-0.3 -6.6,10.5 z m -6.4,-3 0,-1 -9.7,0 0,1 z m 2.8,-1.8 c 0,0.6 0.3,0.6 0.7,0.6 l 4.2,-6.9 -0.6,-0.4 c -0.2,0.2 -4.3,6.6 -4.3,6.7 z m -20.3,-6.3 4.1,7 c 0.3,-0.1 0.8,-0.2 0.8,-0.5 0,-0.6 -3.7,-5.6 -4,-6.9 l -1,0.4 z m -19.7,18 0.3,-2.8 c 0.1,-3.9 2,-11.4 3,-14.6 1.6,-4.7 3.2,-8.3 5.6,-12 4.4,-6.5 12,-12.4 22.8,-12.4 h 1.1 c 9.6,0 17,4.8 21.3,10.2 1.2,1.5 2.3,2.8 3.2,4.6 0.5,0.9 1,1.6 1.4,2.6 0.4,0.9 0.7,1.9 1.1,2.7 0.8,1.4 3.6,10.3 3.6,12.1 v 0.6 h 0.3 v 1 l 1.2,10.8 -0.1,2.2 H 67 l 0.2,-5 0,0 z m -2.3,-4 -0.3,2.4 -0.4,5.6 v 3.8 h 70.9 v -1 c 0,-2 0.1,-6.4 -0.2,-8.1 -0.4,-2.4 -0.5,-5.2 -1,-7.5 -0.4,-2 -2.9,-12.7 -3.9,-13.1 0,-1.6 -3.5,-7.6 -4.3,-8.8 -1.8,-2.6 -3.8,-5 -6.2,-7 -4.9,-3.9 -10.5,-7 -19.3,-7 h -1 c -11.8,0 -19.6,5.9 -24.6,12.8 -1.4,1.9 -2.4,3.8 -3.5,5.9 -1.2,2.3 -1.7,4.2 -2.6,6.7 -1.2,3 -3.4,11.4 -3.5,15.3 l 0,0 z m 52.2,4.7 c 0.4,-1.3 4.2,-6.6 5.2,-8.3 0.6,-1 5.1,-7.9 5.1,-8.2 0,-0.3 -0.6,-0.4 -0.8,-0.5 l -10.6,16.6 1.1,0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 84.2,120.1 h 30.7 v 1.2 H 84.2 v -1.2 z m 3.6,-4.2 h 23.5 v 1 H 87.8 v -1 z m 3.5,-4.2 h 16.5 v 1 H 91.4 v -1 z m 3.3,-4.2 h 9.7 v 1 h -9.7 v -1 z m 22.4,11.5 -1.1,-0.4 10.6,-16.6 c 0.3,0.1 0.8,0.2 0.8,0.5 0,0.3 -4.6,7.2 -5.1,8.2 -1,1.8 -4.9,7 -5.2,8.3 z m -45.4,-16.6 1,-0.4 10.4,16.7 -0.8,0.4 -10.6,-16.6 z m 13.7,12.8 c -0.2,0 -4,-6 -4.3,-6.7 -0.5,-0.8 -4.2,-6.3 -4.2,-6.6 0,-0.3 0.4,-0.4 0.7,-0.5 l 8.5,13.3 c -0.2,0.3 -0.2,0.5 -0.7,0.5 z m 36.2,-13.8 0.8,0.4 -8.6,13.6 -0.8,-0.6 8.6,-13.4 z m -5.1,-0.6 0.8,0.3 -6.4,10.5 -1,-0.3 6.6,-10.5 z m -33.9,-0 6.7,10.5 -0.7,0.4 -6.7,-10.5 0.7,-0.4 z m 24.7,6 c 0,-0.1 4.1,-6.5 4.3,-6.7 l 0.6,0.4 -4.2,6.9 c -0.4,0 -0.7,-0.1 -0.7,-0.6 z m -19.4,-6.7 c 0.3,1.3 4,6.3 4,6.9 0,0.3 -0.6,0.4 -0.8,0.5 l -4.1,-7 1,-0.4 z m 8.2,4.9 c -0.6,0 -4.4,-6 -5,-6.8 h 17 c -0.6,0.8 -4.4,6.8 -5,6.8 h -7 z m -28.5,10.7 c 0,0.5 -0,2.8 -0.3,2.8 l -0.2,5 h 65.2 l 0.1,-2.2 -1.2,-10.8 v -1 h -0.3 v -0.6 c 0,-1.8 -2.8,-10.6 -3.6,-12.1 -0.4,-0.8 -0.7,-1.8 -1.1,-2.7 -0.5,-1 -1,-1.6 -1.5,-2.6 -0.9,-1.8 -2,-3.1 -3.2,-4.6 -4.2,-5.4 -11.6,-10.2 -21.3,-10.2 h -1 c -10.8,0 -18.5,5.8 -22.8,12.4 -2.5,3.8 -4.1,7.4 -5.7,12 -1.1,3.2 -3,10.7 -3,14.6 l 0,0 z"}],i["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]=[{type:"path",stroke:!1,d:"m 122.4,117.1 0,-1.5 -45.1,0 0,1.5 z M 74.5,114 75.6,113.4 59.8,88.8 58.8,89.4 z m 49.6,-0.6 c 0.2,0.1 1,0.5 1.3,0.5 0.2,0 14.4,-22.4 15.9,-24.6 l -1.5,-0.5 -15.7,24.6 z m -6.6,-2.6 0,-1.7 -35,0 0,1.7 z m 2.4,-3.2 c 0,0.2 1,0.8 1.1,0.9 l 12.8,-20 h 0.2 l -1.6,-0.8 c -1.3,2.4 -12.6,19.3 -12.6,20 z m -41.1,0.9 1.4,-0.8 -12.7,-20.1 -1.3,0.8 z m 33.3,-3.9 0,-1.6 -24.4,0 0,1.6 z m 3.4,-2.8 c 0,0.6 0.6,0.7 1.1,0.9 l 9.6,-15.4 -1.2,-0.6 c -0.6,2 -9.4,14.5 -9.4,15.2 z m -32.2,1 1.4,-0.6 -9.7,-15.5 -1.3,0.8 z m 23.4,-4.5 0,-1.7 -13.8,0 0,1.7 z m 5.6,-1.7 6.4,-10.3 -1.2,-0.5 -6.6,10.2 z m -24.6,0.1 1.1,-0.8 -6.5,-10.2 -1.3,0.6 z m 6.6,-4 11,0.1 c 0.6,0 6.4,-8.9 7,-10 H 87.3 l 6.9,9.9 z"}],i["GR.IN.IC.RELIGIOUS INSTITUTION"]=[{type:"path",stroke:!1,d:"m 101.2,68.1 c 7.9,0 18,3.8 21.7,8 5,5.7 7,12.3 7,22.8 V 131.9 H 101.2 V 68.1 z M 70.1,96.3 c 0,-8.4 3.4,-16.4 7.7,-20.7 3.9,-3.9 13.2,-7.5 20.9,-7.5 v 63.9 H 70.1 V 96.3 z m -2.6,38.3 h 65 V 99.3 c 0,-10.8 -2.5,-19.7 -8.1,-25.2 -4.8,-4.8 -15,-8.7 -24.6,-8.7 -8.3,0 -19.4,3.7 -23.6,7.9 -3.2,3.3 -4.3,5 -6.2,9.5 -1,2.4 -2.5,10 -2.5,13.2 v 38.5 l 0,0 z M 105.1,97.6 v 12.5 c 0,0.5 0.6,1.1 1.1,1.1 h 0.4 c 0.7,0 1.1,-0.8 1.1,-1.5 V 97.8 c 0,-0.5 -0.6,-1.1 -1.1,-1.1 H 106 c -0.5,0 -0.9,0.4 -0.9,0.9 z m -11.2,13.6 c 0.8,0 0.9,-1 0.9,-1.7 V 97.6 c 0,-0.5 -0.4,-0.9 -0.9,-0.9 h -0.6 c -0.5,0 -0.9,0.4 -0.9,0.9 v 12.5 c 0,0.5 0.6,1.1 1.1,1.1 h 0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.1,97.6 c 0,-0.5 0.4,-0.9 0.9,-0.9 h 0.7 c 0.5,0 1.1,0.6 1.1,1.1 v 11.8 c 0,0.7 -0.4,1.5 -1.1,1.5 h -0.5 c -0.5,0 -1.1,-0.6 -1.1,-1.1 V 97.6 h 0 z m -3.9,34.4 h 28.7 V 98.9 c 0,-10.5 -2,-17.1 -7,-22.8 C 119.2,71.9 109.1,68.1 101.2,68.1 v 63.9 z M 94,111.2 H 93.5 c -0.5,0 -1.1,-0.6 -1.1,-1.1 V 97.6 c 0,-0.5 0.4,-0.9 0.9,-0.9 h 0.7 c 0.5,0 0.9,0.4 0.9,0.9 v 11.8 c 0,0.8 -0.1,1.8 -0.9,1.8 z M 70.1,96.3 v 35.7 H 98.8 V 68.1 c -7.7,0 -17,3.6 -20.9,7.5 -4.3,4.3 -7.7,12.3 -7.7,20.7 z"}],i["GR.IN.IC.CHILD DAY CARE"]=[{type:"path",stroke:!1,d:"m 76.6,100.3 c 0,1.8 1.1,3.4 3,3.4 h 0.6 c 1.4,0 2.4,-1.5 2.4,-3 0,-4.3 -6,-4.2 -6,-0.4 z m 26.5,-11.9 v 0.4 c 0,1.5 1.4,3.2 2.8,3.2 h 0.4 c 1.6,0 3,-1.2 3,-2.8 V 87.8 c 0,-1 -1.6,-2 -2.8,-2 h -0.2 c -1.5,-0 -3.2,1.4 -3.2,2.6 z m -3.2,-16.8 35.4,21.7 c -1.3,0.2 -4.6,-0.3 -4.6,0.9 v 34.9 H 69.3 V 94.1 c 0,-1.2 -3.3,-0.8 -4.6,-0.9 l 35.2,-21.7 0,0 z m -39.8,22.4 c 0.2,0.8 0.3,1.3 1.3,1.3 h 6.2 v 34.6 c 0,0.5 0.1,0.5 0.2,0.9 h 64 c 0.4,0 0.8,-0.3 0.8,-0.8 V 95.2 h 6 c 0.8,0 1.3,-0.4 1.3,-1.1 0,-0.6 -17.8,-11.2 -19.8,-12.5 -1.6,-1 -20,-12.3 -20,-12.3 -0.2,0 -36.7,22.5 -40,24.7 l 0,0 z m 20.9,14.2 5.9,4.3 -0.1,0.1 -4.8,2.2 c -0.2,-0.8 -1,-1.9 -1,-2.5 v -4.1 z m 28.4,-8.8 c 0.5,-0.8 0.6,-2.9 1,-3.1 0.4,-0.2 2.4,0.8 2.9,0.9 v 3.6 l -4.4,1.7 v -0.6 c -0,-0.9 0.5,-1 0.5,-2.4 z m -3,2 c 0,0.9 0,1.1 -0.4,1.7 V 104 c -2.4,0.2 -15.4,7.5 -17,7.5 -0.5,0 -6.5,-6.7 -7.3,-6.7 h -4.3 c -0.5,0 -2.8,5.2 -2.8,5.6 v 4.7 c 0,0.9 1.8,1.4 2,2.4 l -4.1,1.7 1.3,2.6 6.2,-2.8 c 1.5,0.8 9.3,5.6 10.5,5.6 h 0.6 c 0.8,0 1.9,-0.8 1.9,-1.5 v -0.4 c 0,-0.9 -7.3,-4.8 -8.4,-5.8 l 14,-6.3 v 8.4 h -3 v 6.7 h 8.4 v -6.7 h -2.8 v -9.9 l 13.2,-5.8 c 0,1.6 0.2,3.7 0.4,5.1 0.2,1.8 -0.6,3.9 1.5,3.9 2.1,0 1.3,-2.5 1.3,-4.3 0,-1.9 -0.2,-3.5 -0.2,-5.6 v -0.6 l 9.1,-4 -1,-2.9 -6.2,2.8 c 0.3,-0.6 0.7,-0.8 1,-1.4 0.2,-0.7 0.4,-1.2 0.7,-1.8 0.5,-1 0.9,-2.6 1.4,-3.4 l -11.4,-1.6 c -0.6,0.5 -3.2,3.3 -3.2,4.2 v 0.6 h -0.4 l -1.1,7.1 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 81,112.2 c 0,0.6 0.8,1.7 1,2.5 l 4.8,-2.2 0.2,-0.1 -6,-4.3 v 4.1 z m 28.4,-12.9 c 0,1.4 -0.6,1.6 -0.6,2.4 v 0.6 l 4.5,-1.7 v -3.6 c -0.5,-0.1 -2.6,-1 -2.9,-0.9 -0.4,0.2 -0.5,2.4 -1,3.1 z m -32.9,0.9 c 0,-3.9 6,-4 6,0.4 0,1.4 -1.1,3 -2.4,3 h -0.5 c -1.8,0 -3,-1.6 -3,-3.4 z m 29.5,2.8 0.4,-1.7 1.1,-7.1 h 0.4 v -0.6 c 0,-0.8 2.6,-3.7 3.2,-4.2 l 11.4,1.6 c -0.5,0.8 -0.9,2.4 -1.4,3.4 -0.3,0.6 -0.4,1.1 -0.7,1.8 -0.3,0.7 -0.7,0.8 -1,1.4 l 6.2,-2.8 1,2.9 -9.1,4 v 0.6 c 0,2.1 0.2,3.7 0.2,5.6 0,1.8 0.8,4.3 -1.3,4.3 -2.1,0 -1.3,-2.2 -1.5,-3.9 -0.2,-1.4 -0.4,-3.5 -0.4,-5.1 l -13.2,5.8 v 9.9 h 2.8 v 6.7 h -8.4 v -6.7 h 3 v -8.4 l -14,6.3 c 1.1,0.9 8.4,4.9 8.4,5.8 v 0.4 c 0,0.7 -1,1.5 -1.9,1.5 H 90.6 c -1.2,0 -8.9,-4.8 -10.5,-5.6 l -6.2,2.8 -1.3,-2.6 4.1,-1.7 c -0.3,-1 -2,-1.5 -2,-2.4 v -4.6 c 0,-0.4 2.3,-5.6 2.8,-5.6 h 4.3 c 0.8,0 6.8,6.7 7.3,6.7 1.5,0 14.6,-7.3 17,-7.5 v -0.9 z m -3,-14.8 c 0,-1.2 1.7,-2.6 3.2,-2.6 h 0.2 c 1.2,0 2.8,1.1 2.8,2 v 1.3 c 0,1.6 -1.4,2.8 -3,2.8 h -0.4 c -1.4,0 -2.8,-1.7 -2.8,-3.2 v -0.4 z m -38.4,4.9 c 1.3,0.1 4.6,-0.3 4.6,0.8 v 34.9 h 61.4 V 94.1 c 0,-1.2 3.3,-0.8 4.6,-0.9 l -35.4,-21.7 -35.2,21.8 0,0 z"}],i["GR.IN.IC.HELICOPTER LANDING SITE"]=[{type:"path",stroke:o,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:o,fill:!!R&&G,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"},{type:"circle",fill:!1,cx:100,cy:100,r:40}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE LOCK"]=[{type:"path",fill:!1,d:"m 70,70 65,30 -65,30"}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE SHIP ANCHORAGE"]=[{type:"path",fill:!1,stroke:"rgb(255, 0, 255)",d:"m 73.6,112.8 c 0.8,8 26.4,11.2 26.4,11.2 0,0 25.6,-3.2 26.4,-11.2 M 80,88 l 40,0 m -20,-12 0,48"}],i["GR.IN.IC.NATURAL GAS FACILITY"]=[{type:"path",fill:!1,d:"m 100,60.5 c -16.4,0 -29.6,13.2 -29.6,29.6 0,12.8 8.3,23.9 19.7,27.8 l 0,19.7 c 3.2,1.2 6.3,1.8 9.9,1.8 3.6,0 6.7,-0.6 9.9,-1.8 l 0,-19.8 c 11.5,-3.9 19.8,-15 19.7,-27.8 0,-16.4 -13.2,-29.6 -29.6,-29.6 z"},{type:"text",stroke:!1,x:100,y:103,fontsize:35,text:"NG"}],i["GR.IN.IC.TOLL FACILITY"]=[{type:"path",stroke:!1,d:"m 69.1,112.3 c 0,-0.7 0.8,-1.7 1.4,-1.7 h 0.5 c 0.8,0 1.5,0.8 1.5,1.5 v 1.2 c 0,0.5 -0.9,1.2 -1.5,1.2 h -0.2 c -0.8,0 -1.7,-0.8 -1.7,-1.4 v -0.9 l 0,0 z m -1.1,0.5 v 0.3 c 0,1.2 1.5,2.6 2.9,2.6 1.3,0 2.8,-1.5 2.8,-2.5 v -1 c 0,-1.2 -1.4,-2.6 -2.8,-2.6 -1.7,0 -2.9,1.6 -2.9,3.2 z m 27.6,-11.6 -2,-2.8 -2.3,0 4.3,2.8 z m -29.5,17.8 c 0,-0.5 0.8,-0.9 1.4,-0.9 H 99.1 c 0.8,0 1.3,0.6 1.4,1.4 -0.6,0.1 -1,0.3 -1.7,0.3 H 68 c -0.6,0 -1.8,0 -1.8,-0.6 v -0.2 z m 9.4,-10.2 15.1,0 8.2,0.2 c 0.5,0.9 2,3 1.8,4.3 l -0.2,2.6 c -0.5,0.2 -0.5,0.3 -1,0.3 H 67.1 c -0.6,0 -0.5,-0.2 -1.1,-0.3 -0.1,-0.7 -0.3,-1 -0.3,-1.8 v -0.6 c 0,-1.1 1.5,-3.5 2,-4.4 l 7.8,-0.2 z m -5.8,-2 c 0.1,-1.1 3.5,-7.1 4.3,-7.1 h 18.4 c 1,0 4,5.8 4.3,7.1 H 69.7 z m 21.7,-8.4 2.3,-0 2,2.8 -4.3,-2.8 z m 44.3,27.8 V 73.8 c -1,0.2 -10.3,6 -11.9,7 -1.3,0.8 -11.6,6.5 -11.6,7.2 0,0 1.3,2.1 1.4,2.3 l 4.9,-2.8 v 19.2 l -0.4,0.3 c -2.9,-2 -33.4,-22 -33.6,-22 -0.1,0 -3.9,5.6 -4,6.2 l 10.8,7 -18.3,0 c -0.9,1.4 -1.9,2.4 -2.8,3.8 -0.2,0.3 -2,4.4 -2,4.6 v 0.8 h -1.2 c -0.1,0.9 -2.6,4.6 -2.6,5.4 v 0.8 c 0,1.5 0.4,2.9 1.4,3.4 -0.2,0.3 -1,1.1 -1,1.6 v 0.9 c 0,1.1 1.5,1.5 2.6,1.5 v 2.3 l 0.2,2 c 0.5,0.2 0.3,0.5 1.2,0.6 0.6,0.1 1,0.2 1.7,0.2 h 1.1 l 1.7,-0.2 0.3,-0.3 0.2,-2 0,-2.5 h 19.1 v 3.1 c 0,0.8 0.3,1.2 0.6,1.7 l 1.4,0.2 1.2,-0 c 1.7,0 3.1,-0.1 3.1,-1.8 v -3.1 c 0.8,-0.2 2.6,-0.5 2.6,-1.4 v -1.7 c 0,-0.5 -0.5,-0.7 -0.9,-0.8 0.1,-0.5 1.2,-1.1 1.2,-2.5 v -2 c 0,-1.5 -2.1,-4.1 -2.5,-5.4 h -1.2 v -0.4 c 0,-1.1 -2.2,-4.8 -2.5,-5.8 l 19,12.5 c -0.4,1.6 -2,4 -2,5.2 v 7.2 h 22.9 l 0,0 z M 95.9,114.6 H 95.7 c -1.1,0 -1.8,-0.7 -1.8,-1.7 v -0.5 c 0,-1 0.6,-1.8 1.5,-1.8 h 0.5 c 1,0 1.5,1.1 1.5,2 0,1.1 -0.5,2 -1.5,2 z m -3.1,-2.5 v 1.1 c 0,1 1.6,2.5 2.9,2.5 1.4,0 2.6,-1.3 2.6,-2.8 v -0.8 c 0,-1.2 -1.3,-2.6 -2.5,-2.6 H 95.7 c -1.4,0 -2.9,1.4 -2.9,2.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 114.5,107.9 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m -11.2,-7.2 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m -5.5,-3.7 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 108.9,104.5 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 92.3,93.5 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 86.5,89.8 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m 35.6,2.6 10.8,0 0,16.1 -10.8,0 z m -55.9,26.4 v 0.2 c 0,0.6 1.2,0.6 1.8,0.6 h 30.8 c 0.7,0 1.1,-0.2 1.7,-0.3 -0.1,-0.8 -0.6,-1.4 -1.4,-1.4 H 67.5 c -0.5,0 -1.4,0.4 -1.4,0.9 z m 26.6,-6.8 c 0,-1.2 1.5,-2.6 2.9,-2.6 h 0.2 c 1.2,0 2.5,1.4 2.5,2.6 v 0.8 c 0,1.4 -1.2,2.8 -2.6,2.8 -1.4,0 -2.9,-1.4 -2.9,-2.5 v -1 h -0 z m -24.8,0.6 c 0,-1.6 1.2,-3.2 2.9,-3.2 1.3,0 2.8,1.5 2.8,2.6 v 1.1 c 0,0.9 -1.4,2.5 -2.8,2.5 -1.4,0 -2.9,-1.4 -2.9,-2.6 v -0.3 z m -0.3,-3.8 c -0.5,1 -2,3.4 -2,4.4 v 0.6 c 0,0.9 0.2,1.1 0.3,1.8 0.5,0.1 0.5,0.3 1.1,0.3 h 32.3 c 0.6,0 0.5,-0.2 1,-0.3 l 0.2,-2.6 c 0.1,-1.2 -1.4,-3.4 -1.8,-4.3 l -8.2,-0.2 -15.1,-0 -7.8,0.2 z m 2,-2.2 h 27.1 c -0.4,-1.3 -3.3,-7.1 -4.3,-7.1 H 74 c -0.8,0 -4.2,6 -4.3,7.1 z m 26.2,7.8 c 1.1,0 1.5,-0.9 1.5,-2 0,-0.9 -0.6,-2 -1.5,-2 h -0.5 c -1,0 -1.5,0.8 -1.5,1.8 v 0.5 c 0,1 0.8,1.7 1.8,1.7 h 0.2 l 0,0 z M 69.1,112.3 v 0.9 c 0,0.6 1,1.4 1.7,1.4 h 0.2 c 0.6,0 1.5,-0.8 1.5,-1.2 v -1.2 c 0,-0.8 -0.8,-1.5 -1.5,-1.5 h -0.5 c -0.6,0 -1.4,1 -1.4,1.7 z"}],i["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]=[{type:"path",stroke:!1,d:"m 121.4,81.7 h 1.1 v 0.6 c 0,0.6 0.8,2.1 1.2,2.4 0.5,0.4 1.9,0.9 2.7,0.9 2.6,0 3.9,-1.9 3.9,-4.5 v -0.5 h -7.4 c -0.5,0 -1.2,0.8 -1.4,1.1 z m -22.6,23.5 c 0,-1.7 1.7,-3 3.4,-3 1.7,0 3.1,1.4 3.1,3.1 v 0.6 c 0,1.3 -1.7,2.6 -3.1,2.6 -1.7,0 -3.4,-1.3 -3.4,-3 v -0.5 z m -29.7,0 c 0,-1.8 1.3,-3 3.1,-3 1.7,0 3.3,1.4 3.3,3.1 v 0.3 c 0,1.6 -1.6,3 -3.4,3 -1.5,0 -3,-1.2 -3,-2.6 v -0.8 z m 3.7,-7 c 0,-0.4 1.6,-4.2 1.9,-5 0.6,-1.7 0.9,-3.6 3.3,-3.6 H 96.5 c 2.8,0 2.2,1.8 3.2,3.6 0.2,0.4 1.8,4.5 1.8,4.9 H 72.8 z m -3.7,1 c -2.1,0 -3.7,1.5 -3.7,3.6 v 9.2 c 0,1 1.7,2.3 3.1,2.3 v 5.3 c 0,1.8 1.3,3.3 3.3,3.3 1.4,0 3.1,-1.6 3.1,-2.6 v -5.9 h 24.8 v 6.2 c 0,1 1.7,2.3 3,2.3 h 0.2 c 1.4,0 3.1,-1.3 3.1,-2.6 v -5.9 c 1.9,0 3.3,-1.4 3.3,-3.3 v -8.1 c 0,-2 -1.4,-3.3 -3.2,-3.7 -1.4,-0.2 -1.1,-0.8 -1.6,-1.9 -0.4,-0.8 -0.7,-1.6 -1,-2.4 -1.2,-2.6 -2.2,-8.2 -5.6,-8.2 h -21.2 c -2.9,0 -3.5,3.3 -4.5,5.5 -0.6,1.4 -2.7,5.8 -3,7 z m 56.5,20.2 0.3,-3.3 0.5,-6.2 h 1.7 l 0.8,12.9 h 5.8 V 88.9 c 0,-0.6 -1.2,-1.9 -2,-1.9 l -0.6,0.1 -9.9,14.6 h 8.4 v 3.6 h -11.2 v 17.6 h 6.1 l -0,-0.8 0.2,-2.6 z m -16.8,-30.8 c 0.2,-0.9 1,-1.5 2,-1.6 v 2.2 h -2 c 0,1.4 0.8,2.2 2.2,2.2 v -2 h 2 c -0,1.3 -0.8,1.4 -1.4,2 h 7.8 l 0,10.2 10,-14.3 -10.1,-0.2 h -6.4 v -7.6 c 0,-1.2 -0.8,-2.2 -1.9,-2.2 h -0.4 c -2.2,0 -2,2.4 -2,4.7 0,1.3 -0.4,5.8 0.2,6.6 z m 0,0 v 0.6 h 2 v -2.2 c -1.1,0 -1.8,0.7 -2,1.6 z m 2.2,2.8 h 0.6 c 0.6,-0.6 1.4,-0.7 1.4,-2 h -2 v 2 z m 19.3,-12 0,-2 -8.8,-0 1,2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 130.3,79.4 -7.9,-0 0.4,1.3 7.5,0 z m -8.1,22.2 9.9,-14.6 0.6,-0.1 -3.1,0.2 -10,14.3 -0.1,3.7 11.2,0 0,-3.6 z m -23.3,3.6 v 0.5 c 0,1.7 1.7,3 3.4,3 1.4,0 3.1,-1.4 3.1,-2.6 v -0.6 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 -1.8,0 -3.4,1.3 -3.4,3 z m -29.7,0 v 0.8 c 0,1.4 1.5,2.6 3,2.6 1.8,0 3.4,-1.3 3.4,-3 v -0.3 c 0,-1.6 -1.6,-3.1 -3.3,-3.1 -1.8,0 -3.1,1.2 -3.1,3 z m 3.7,-7 h 28.6 c 0,-0.5 -1.5,-4.5 -1.8,-4.9 -1,-1.8 -0.4,-3.6 -3.2,-3.6 H 77.9 c -2.4,0 -2.6,1.9 -3.3,3.6 -0.2,0.8 -1.8,4.6 -1.8,5 z"}],i["GR.IN.IC.TUNNEL"]=[{type:"path",stroke:!1,d:"m 94.4,116.8 c 0,-3.5 2.6,-7.2 5.9,-7.2 3.2,0 5.6,4 5.6,7.1 v 0.8 H 94.4 v -0.7 z m 27.2,-4.7 9,-4.2 c 0.2,1.7 0.8,3.2 1,5.2 0.3,1.8 0.6,3.3 0.6,5.6 v 0.5 h -10 l -0.7,-7.1 z m -43.5,4.9 0.1,2.2 H 68 c 0,-1.6 0.3,-3.8 0.6,-5.4 0.1,-0.7 0.2,-1.8 0.5,-2.4 0.1,-0.2 0.7,-2.2 0.7,-2.4 l 9.2,3.1 -0.8,4.9 z m 39,-16.8 6.2,-6.2 c 0.6,1 1.2,1.8 1.9,2.8 0.8,1.1 1.2,2 1.8,3.1 0.6,1 2.8,5.6 2.8,6.9 l -8.7,4.2 c -0.1,-2.5 -3,-9 -4,-10.6 z m -37.9,10.4 -9.1,-3 c 0.1,-1.2 2.4,-5.9 3,-7 1.2,-2.1 3,-4.2 4,-6 l 7.6,4.4 c -0.2,0.5 -2.6,4.3 -3,5.4 -0.8,1.7 -1.6,4.9 -2.4,6.2 z M 111.2,83.2 c 2.8,0.7 9.8,7.1 11.3,9.4 l -6.3,6.2 c -0.5,-1.8 -6,-6.9 -8.2,-7.4 l 3.2,-8.2 z M 78.1,93.4 C 79.7,91 88,83.8 91,83.1 L 94.9,91 c -2.6,0.6 -7.9,5 -9.2,6.9 l -7.6,-4.5 z M 92.6,82.4 c 2.6,-0.6 4.1,-1.8 7.8,-1.8 h 1.4 c 4,0 5.3,1.2 8.1,1.8 -0,1 -1.9,5.2 -2.3,6.3 -0.6,1.4 -0.4,2 -2.2,1.5 -1.1,-0.3 -2.4,-0.6 -3.6,-0.6 h -1 L 96.1,90.3 92.6,82.4 z M 66.5,119.8 H 60.4 c -0.4,0 -0.5,0.1 -0.5,0.5 v 0.2 c 0,0.4 0.1,0.5 0.5,0.5 h 79 c 0.3,0 0.7,-0.3 0.7,-0.5 0,-0.4 -0.3,-0.7 -0.7,-0.7 h -5.7 v -1.5 c 0,-10.1 -4.9,-20.4 -9.5,-25.9 C 119.8,87 111.6,79 102.2,79 h -2 c -9.7,0 -18.8,8.4 -23.6,13.7 -5,5.6 -10.1,16.6 -10.1,27.1 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 79,112 -9.3,-3.1 c -0,0.2 -0.6,2.2 -0.7,2.4 -0.2,0.6 -0.4,1.7 -0.5,2.4 -0.2,1.5 -0.5,3.8 -0.5,5.4 h 10.3 l -0.1,-2.2 0.8,-4.9 z m 15.5,5.4 h 11.4 v -0.8 c 0,-3.1 -2.4,-7.1 -5.6,-7.1 -3.3,0 -5.9,3.8 -5.9,7.2 v 0.7 z m 27.9,1.7 h 10 v -0.5 c 0,-2.3 -0.4,-3.8 -0.6,-5.6 -0.3,-2 -0.9,-3.5 -1,-5.2 l -9,4.2 0.7,7.1 z m -5.2,-19 c 1.1,1.6 4,8.1 4,10.6 l 8.7,-4.2 c 0,-1.2 -2.1,-5.8 -2.8,-6.8 -0.7,-1.1 -1.1,-2 -1.8,-3.1 -0.7,-1 -1.3,-1.8 -1.9,-2.8 l -6.2,6.2 z m -37.9,10.4 c 0.7,-1.4 1.6,-4.5 2.4,-6.2 0.5,-1.1 2.9,-4.9 3,-5.4 l -7.6,-4.4 c -1,1.8 -2.8,4 -4,6 -0.6,1.1 -2.9,5.8 -3,7 l 9.1,3 z m 28.8,-19.1 c 2.1,0.5 7.6,5.6 8.2,7.4 l 6.3,-6.1 c -1.5,-2.3 -8.5,-8.8 -11.3,-9.5 l -3.2,8.2 z m -30,2 7.6,4.6 C 87,96 92.3,91.6 94.9,91 l -3.8,-7.9 c -3.1,0.7 -11.4,7.9 -13,10.3 z M 92.6,82.4 l 3.5,7.9 4.6,-0.6 h 1 c 1.3,0 2.6,0.3 3.6,0.6 1.7,0.4 1.6,-0.1 2.2,-1.5 0.4,-1.1 2.3,-5.3 2.3,-6.3 -2.8,-0.6 -4,-1.9 -8.1,-1.9 h -1.4 c -3.6,0 -5.2,1.3 -7.7,1.9 z"}],i["GR.IN.IC.PUMPING STATION"]=[{type:"path",stroke:!1,d:"m 83.2,83.8 0,1.2 0,5.6 -11.3,0 0,-0 c -0.2,0 -0.3,0 -0.5,0 -0.1,6.6e-4 -0.1,-9.6e-4 -0.2,0 -2.7,0 -4.9,0.3 -6.5,1.7 -1.4,1.2 -2,3.3 -2.1,5.9 l -0.1,0 0,1.2 c 8e-6,0.1 -0,0.2 -0,0.3 l 0,0 0,14.1 -2.8,0 0,2.4 80.8,0 0,-2.4 -2.8,0 0,-14 0,-1.6 -0.1,0 c -0.1,-2.6 -0.5,-4.6 -1.8,-5.9 -1.5,-1.4 -3.8,-1.7 -6.8,-1.7 l 0,-0 -0.3,0 c -0.2,-5.6e-4 -0.3,-0 -0.4,-0 l 0,0 -11.3,0 0,-5.6 0,-1.2 -1.2,0 -31.2,0 -1.2,0 z m 2.4,2.4 28.8,0 0,27.2 -28.8,0 0,-27.2 z M 71.2,93 c 0.1,-0 0.1,0 0.2,0 l 11.8,0 0,8.4 -7.5,0 c -0.8,-0.1 -1.4,-0.1 -2,-0 -0,0 -0,0 -0.1,0 -0,0 -0,-0 -0,0 l 0,0 c -0.5,0.1 -1.2,0.3 -1.5,0.8 -0.4,0.5 -0.4,1.1 -0.4,1.6 -0,0.4 -0,0.8 0,1.2 l -0,0 0,8.8 -6.8,0 0,-14.5 c 0,-3 0.5,-4.5 1.4,-5.3 C 67.1,93.3 68.7,93.1 71.2,93 z m 45.6,0 11.8,0 c 0.1,9.7e-4 0.1,-0 0.2,0 2.8,0.1 4.5,0.4 5.2,1.1 0.8,0.7 1.2,2.3 1.2,5.2 l 0,14.5 -6.8,0 0,-8 0,0 c -0,-0.1 -0,-0.3 -0,-0.4 0,-0.9 0.2,-1.6 -0.1,-2.5 -0.1,-0.5 -0.6,-1.2 -1.2,-1.4 -0.2,-0.1 -0.5,-0 -0.7,-0 l 0,-0.1 -9.6,0 0,-8.4 z M 74,103.8 l 9.2,0 0,10 -9.2,0 0,-8.5 0,0 c 0,-0.6 -0,-1.1 -0,-1.4 0,-0.1 -0,-0 0,-0.1 z m 42.8,0 9.2,0 c 0,0.2 0,0.8 0,1.6 l -0,0 0,8.4 -9.2,0 0,-10 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 116.8,93 11.8,0 c 0.1,9.7e-4 0.1,-0 0.2,0 2.8,0.1 4.5,0.4 5.2,1.1 0.8,0.7 1.2,2.3 1.2,5.2 l 0,14.5 -6.8,0 0,-8 0,0 c -0,-0.1 -0,-0.3 -0,-0.4 0,-0.9 0.2,-1.6 -0.1,-2.5 -0.1,-0.5 -0.6,-1.2 -1.2,-1.4 -0.2,-0.1 -0.5,-0 -0.7,-0 l 0,-0.1 -9.6,0 0,-8.4 z m -45.6,0 c 0.1,-0 0.1,0 0.2,0 l 11.8,0 0,8.4 -7.5,0 c -0.8,-0.1 -1.4,-0.1 -2,-0 -0,0 -0,0 -0.1,0 -0,0 -0,-0 -0,0 l 0,0 c -0.5,0.1 -1.2,0.3 -1.5,0.8 -0.4,0.5 -0.4,1.1 -0.4,1.6 -0,0.4 -0,0.8 0,1.2 l -0,0 0,8.8 -6.8,0 0,-14.5 c 0,-3 0.5,-4.5 1.4,-5.3 C 67.1,93.3 68.7,93.1 71.2,93 z m 14.4,-6.8 28.8,0 0,27.2 -28.8,0 0,-27.2 z"}],i["GR.IN.IC.RESERVOIR"]=[{type:"path",stroke:!1,d:"M 127.3 69.1 C 127 69.1 126.7 69.2 126.4 69.2 C 123.4 69.5 120.8 71.9 118.4 74.5 C 115.9 77 113.5 79.7 111.5 80.9 C 108.9 82.4 105.5 82.5 101.9 82.6 C 98.3 82.7 94.7 82.9 91.8 84.9 C 89.7 86.5 88.6 88.5 87.5 90.3 C 86.4 92 85.2 93.4 82.7 94.2 C 79.4 95.3 72 96.4 66.9 98.8 C 64.3 100.1 62.1 101.7 61.5 104 C 60.8 106.3 61.7 109.1 64.7 112.3 L 65.1 111.9 L 65.1 120.1 L 84.3 120.1 L 84.3 129.7 L 86.7 129.7 L 86.7 120.1 L 97.9 120.1 L 97.9 129.7 L 100.3 129.7 L 100.3 120.1 L 117.1 120.1 L 117.1 112.5 C 117.4 112.2 117.7 111.9 118 111.5 C 119 110.1 119.3 108.5 119.5 106.9 C 119.8 103.7 119.5 100.5 121.7 97.7 C 123.1 95.9 126 95.4 129.1 94.7 C 132.1 94.1 135.4 93.3 137.2 90.4 C 139.4 86.7 139.1 81.3 137.2 76.8 C 136.3 74.5 134.9 72.5 133 71.1 C 131.4 69.9 129.5 69.1 127.3 69.1 z M 127.4 70.7 C 129.2 70.7 130.7 71.3 132.1 72.3 C 133.6 73.5 134.9 75.4 135.8 77.4 C 137.5 81.5 137.6 86.6 135.8 89.6 C 134.5 91.8 131.7 92.5 128.7 93.2 C 125.7 93.8 122.4 94.3 120.5 96.7 C 117.8 100 118.2 103.7 117.9 106.7 C 117.8 108.2 117.5 109.5 116.7 110.6 C 116.5 110.8 116.3 111.1 116.1 111.3 L 65.8 111.3 L 65.9 111.3 C 63.1 108.2 62.6 106.1 63 104.4 C 63.5 102.8 65.2 101.4 67.6 100.3 C 72.3 98 79.5 96.9 83.1 95.8 C 86.1 94.8 87.7 92.9 88.8 91.1 C 90 89.3 90.9 87.5 92.8 86.2 C 95.1 84.5 98.4 84.3 102 84.2 C 105.5 84.1 109.2 84.1 112.3 82.3 C 114.7 80.8 117.1 78.1 119.5 75.6 C 121.9 73.1 124.4 71 126.6 70.8 C 126.9 70.8 127.1 70.7 127.4 70.7 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 127.4,70.7 c 1.8,-0 3.3,0.6 4.7,1.6 1.5,1.2 2.8,3 3.7,5.1 1.7,4.1 1.9,9.2 0.1,12.2 -1.3,2.2 -4.1,3 -7.1,3.6 -3,0.6 -6.3,1.1 -8.3,3.5 -2.6,3.3 -2.3,7.1 -2.6,10 -0.1,1.5 -0.4,2.8 -1.2,3.8 -0.2,0.2 -0.4,0.5 -0.6,0.7 l -50.2,0 0,-0 c -2.8,-3 -3.3,-5.2 -2.8,-6.8 0.5,-1.6 2.1,-3 4.5,-4.2 4.8,-2.3 11.9,-3.4 15.6,-4.5 3,-1 4.5,-2.8 5.7,-4.6 1.2,-1.8 2.1,-3.6 3.9,-4.9 2.3,-1.7 5.7,-1.9 9.2,-2 3.5,-0.1 7.3,-0.1 10.3,-1.9 2.5,-1.4 4.8,-4.2 7.2,-6.7 2.4,-2.5 4.9,-4.6 7.1,-4.8 0.3,-0 0.5,-0.1 0.8,-0.1 z m -41.9,49 13.6,0 0,10 -13.6,0 z"}],i["GR.IN.IC.STORAGE TOWER"]=[{type:"path",stroke:!1,d:"m 118.3,121 0.4,5.3 0.7,12.8 h 2.9 c 0,-6.1 -1.1,-12.6 -1.1,-18.6 0,-3.4 -0.4,-6.2 -0.4,-9.6 -0.1,-5.3 0.2,-3 2.6,-6.6 l -0.3,-3.1 0,-1.1 h -4.2 V 84 c -2.5,0.6 -5.2,1.8 -8.3,2.6 -2.6,0.6 -6.4,1.4 -9.4,1.4 h -2.4 c -7.6,0 -12.2,-2.6 -18,-4 v 16.2 h -4.2 v 0.7 l -0.3,3.7 3.2,3.7 -2,30.8 h 3.1 v -3.3 l 1.4,-21.7 c 0.5,0.4 2.1,2.7 3,3.6 0.9,0.9 2.4,2.2 3.5,2.9 2.2,1.5 5.6,3.8 8.7,4.1 v 14.4 h 5.6 v -14.4 c 3.7,-0.9 6.2,-2.2 8.8,-4.3 1.4,-1.1 2.2,-1.8 3.4,-3 0.7,-0.7 2.5,-3.2 3,-3.4 v 3.1 l 0.2,3.8 z M 99.7,85.2 c 7.4,0 23,-4.4 25.7,-8.4 -2.8,-1.5 -25.1,-16 -25.3,-16 -0.4,0 -24.9,15.4 -25.5,16.2 2.6,3.5 16.6,8.2 23.3,8.2 h 1.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 97.9,85.2 c -4.3,0 -11.7,-2 -17,-4.3 l -0,3.2 c 5.8,1.4 10.4,4 18,4 h 2.4 c 3,0 6.9,-0.8 9.4,-1.4 3,-0.8 5.8,-2 8.3,-2.6 V 80.8 c -6,2.4 -14.4,4.4 -19.3,4.4 H 97.9 z"}],i["GR.IN.IC.SURFACE WATER INTAKE"]=[{type:"path",stroke:!1,d:"M 63.4 75.5 L 63.4 76.3 L 63.4 90.7 L 63.4 91.5 L 64.2 91.5 L 75.7 91.5 C 76.5 96.6 79.8 99.1 83.3 101 C 87.1 102.9 91.3 104.3 93.8 107.5 C 94.8 108.9 94.9 110.7 95.2 112.6 C 95.4 113.6 95.6 114.5 96.2 115.4 C 96.7 116.2 97.5 117 98.8 117.5 C 101.2 118.6 108.7 120.7 115.9 122.4 C 119.6 123.2 123.1 123.9 126 124.3 C 127.5 124.4 128.7 124.5 129.8 124.5 C 130.8 124.4 131.6 124.3 132.2 123.8 C 134.8 121.7 136.1 119.9 136.5 118.3 C 136.8 116.8 136.1 115.4 135 114.4 C 133.9 113.4 132.4 112.5 131 111.7 C 129.7 110.8 128.4 109.9 127.7 108.8 C 124.2 103.6 121 95.5 113.4 91.5 L 119 91.5 L 119.8 91.5 L 119.8 90.7 L 119.8 76.3 L 119.8 75.5 L 119 75.5 L 64.2 75.5 L 63.4 75.5 z M 65 77.1 L 118.2 77.1 L 118.2 89.9 L 109.4 89.9 L 109.4 81.1 L 73.8 81.1 L 73.8 89.9 L 65 89.9 L 65 77.1 z M 76.9 91.5 L 110.5 91.5 C 119.4 94.8 122.7 103.5 126.7 109.5 C 127.6 110.8 129 111.8 130.4 112.7 C 131.8 113.6 133.2 114.4 134.2 115.3 C 135.1 116.2 135.6 117 135.3 118.1 C 135.1 119.2 134 120.8 131.4 122.9 C 131.3 123 130.6 123.2 129.7 123.3 C 128.8 123.3 127.6 123.3 126.2 123.1 C 123.3 122.8 119.8 122.1 116.2 121.3 C 109 119.6 101.5 117.3 99.3 116.4 C 98.2 116 97.6 115.4 97.2 114.8 C 96.8 114.1 96.6 113.3 96.4 112.4 C 96.1 110.6 96 108.5 94.7 106.8 C 91.9 103.2 87.6 101.8 83.9 99.9 C 80.5 98.1 77.7 96.1 76.9 91.5 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 76.9,91.5 33.6,0 c 8.9,3.3 12.2,12 16.2,18 0.9,1.3 2.3,2.3 3.7,3.2 1.4,0.9 2.8,1.7 3.8,2.6 0.9,0.9 1.4,1.7 1.2,2.8 -0.2,1.1 -1.3,2.7 -3.9,4.8 -0.2,0.1 -0.8,0.3 -1.7,0.4 -0.9,0 -2.2,-0 -3.6,-0.2 -2.8,-0.3 -6.4,-1 -10,-1.8 -7.2,-1.7 -14.7,-3.9 -16.9,-4.8 -1.1,-0.4 -1.6,-1 -2.1,-1.7 -0.4,-0.7 -0.6,-1.5 -0.8,-2.3 -0.3,-1.8 -0.4,-3.9 -1.7,-5.6 -2.8,-3.6 -7.1,-5 -10.8,-6.9 C 80.5,98.1 77.7,96.1 76.9,91.5 z m -11.9,-14.4 53.2,0 0,12.8 -8.8,0 0,-8.8 -35.6,0 0,8.8 -8.8,0 0,-12.8 z"}],i["GR.IN.IC.WAREHOUSE/STORAGE FACILITY"]=[{type:"text",stroke:!1,x:100,y:113,fontsize:23,text:"STOR"}],i["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]=[{type:"path",stroke:!1,d:"m 107.2,114.8 c 1.9,0 3.9,-1 4.3,-2.4 1.5,1 1.7,2.4 4.6,2.4 h 0.4 c 1.8,0 3.8,-1.1 4.1,-2.4 h 0.4 c 0.4,1.4 2.5,2.4 4.5,2.4 h 0.4 c 2.7,0 3,-1.5 4.5,-2.4 0.4,1.4 2.6,2.4 4.5,2.4 v -1.5 c -2.2,0 -3.5,-1.6 -3.9,-3.4 h -1.5 c -0,1.8 -1.7,3.4 -3.6,3.4 h -0.4 c -2.2,0 -3.6,-1.4 -3.8,-3.4 h -1.7 l -0.2,1.3 c -1,0.7 -1.1,2 -3.3,2 h -0.4 c -3.3,0 -3.2,-3.4 -4.1,-3.4 h -1.3 c -0.2,2 -1.4,3.4 -3.6,3.4 v 1.5 z m -2.2,-33.3 h 32 v 37 h -32 V 81.5 z M 65.1,114.8 v -1.5 c 2,0 3.7,-1.6 3.8,-3.4 h 1.9 c 0,1.8 1.5,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 2.2,0 3.2,-1.6 3.6,-3.4 h 1.7 c 0,2 1.7,3.4 3.8,3.4 v 1.5 c -2,0 -4.1,-1 -4.5,-2.4 -1.4,0.9 -1.7,2.5 -4.6,2.5 h -0.6 c -2.9,0 -3.1,-1.5 -4.5,-2.4 -0.4,1.3 -2.4,2.4 -4.1,2.4 H 74.1 c -2.4,0 -3.4,-1.2 -4.5,-2.4 -0.4,1.4 -2.6,2.4 -4.5,2.4 l 0,0 z M 96.5,93.4 h 6.7 v 13.3 H 96.5 V 93.4 z m -31.4,7.9 c 2,0 3.6,-1.5 3.8,-3.4 h 1.9 c 0.2,1.8 1.4,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.7 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 1.5,0 3.4,-1.5 3.4,-2.6 v -0.8 h 1.9 c 0,1.9 1.8,3.4 3.8,3.4 v 1.5 c -3.6,0 -3.8,-2 -4.9,-2.2 -0.4,1.3 -2.5,2.2 -4.2,2.2 h -0.6 c -1.7,0 -3.8,-1 -4.1,-2.2 -1,0.3 -1.4,2.2 -4.5,2.2 H 74.1 c -2.7,0 -3,-1.3 -4.5,-2.2 -1,1.4 -2.2,2.2 -4.5,2.2 v -1.5 l 0,0 z m 0,-12 c 2,0 3.6,-1.5 3.8,-3.4 h 1.9 c 0.1,1.8 1.4,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.7 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 1.5,0 3.4,-1.5 3.4,-2.6 v -0.8 h 1.9 c 0,1.9 1.8,3.4 3.8,3.4 v 1.5 c -3.1,0 -3,-1 -4.7,-2 -1.4,1 -1.7,2.1 -4.4,2.1 h -0.6 c -2.7,0 -2.9,-1.1 -4.3,-2 -1.6,1 -1.6,2 -4.5,2 H 73.9 c -2.4,0 -2.9,-1.2 -4.1,-2 -1.6,1 -1.7,2 -4.7,2 v -1.5 l 0,0 z m 31.4,21.3 h 6.7 v 10.1 h 35.6 V 79.4 L 103.3,79.2 V 89.5 H 96.5 V 79.4 L 61.2,79.2 v 41.6 h 35.4 v -10.1 z m 14.2,-12.2 c 0,1.4 -1.8,2.8 -3.6,2.8 v 1.5 c 3.4,0 3.5,-1.9 4.7,-2.2 0.4,1.3 2.7,2.2 4.5,2.2 h 0.2 c 2.9,0 3,-1.3 4.3,-2.2 1.2,0.9 1.7,2.2 4.3,2.2 h 0.8 c 2.6,0 3,-1.3 4.3,-2.2 1.4,1 1.5,2.2 4.6,2.2 v -1.5 c -1.7,0 -3.8,-1.6 -3.8,-2.8 v -0.6 h -1.7 c -0.1,1.8 -1.6,3.4 -3.6,3.4 h -0.6 c -1.4,0 -3.4,-1.4 -3.4,-2.4 v -0.9 h -1.9 c 0,1.7 -1.7,3.4 -3.5,3.4 h -0.4 c -1.9,0 -3.5,-1.5 -3.6,-3.4 h -1.8 v 0.6 z m 0,-12 c 0,1.4 -1.8,2.8 -3.6,2.8 v 1.5 c 1.8,0 4,-0.9 4.3,-2.2 1.6,1.1 1.7,2.2 4.9,2.2 h 0.4 c 2.6,0 2.9,-1.3 4.3,-2.2 0.3,1.3 2.4,2.3 4.1,2.3 h 0.8 c 2.7,0 3,-1.3 4.5,-2.2 0.4,1.3 2.7,2.2 4.5,2.2 v -1.5 c -1.7,0 -3.8,-1.6 -3.8,-2.8 v -0.6 h -1.7 c -0.1,1.8 -1.6,3.4 -3.6,3.4 h -0.6 c -1.6,0 -3.4,-1.4 -3.4,-2.8 v -0.6 h -1.9 c 0,1.7 -1.7,3.4 -3.5,3.4 h -0.4 c -1.9,0 -3.5,-1.5 -3.6,-3.4 h -1.8 v 0.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 65.1,114.8 c 1.9,0 4.1,-1 4.5,-2.4 1.1,1.2 2.2,2.4 4.5,2.4 h 0.6 c 1.8,0 3.8,-1.1 4.1,-2.4 1.4,1 1.6,2.4 4.5,2.4 h 0.6 c 2.8,0 3.2,-1.6 4.5,-2.4 0.4,1.4 2.5,2.4 4.5,2.4 v -1.5 c -2.1,0 -3.7,-1.4 -3.8,-3.4 h -1.6 c -0.4,1.8 -1.4,3.4 -3.6,3.4 h -0.2 c -2.1,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.8 -1.7,3.4 -3.6,3.4 H 74.1 c -1.8,0 -3.3,-1.6 -3.4,-3.4 h -1.9 c -0,1.8 -1.8,3.4 -3.8,3.4 v 1.5 l 0,0 z m 0,-13.5 v 1.5 c 2.3,0 3.6,-0.9 4.5,-2.2 1.4,1 1.8,2.2 4.5,2.2 h 0.6 c 3.1,0 3.5,-2 4.5,-2.2 0.4,1.3 2.4,2.2 4.1,2.2 h 0.6 c 1.7,0 3.8,-1 4.1,-2.2 1.1,0.3 1.2,2.2 4.9,2.2 v -1.5 c -2,0 -3.8,-1.4 -3.8,-3.4 h -1.9 v 0.8 c 0,1.2 -1.9,2.6 -3.4,2.6 h -0.2 c -2,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.6 -1.7,3.4 -3.6,3.4 H 74.1 c -2,0 -3.2,-1.5 -3.4,-3.4 h -1.9 c -0.2,1.8 -1.7,3.4 -3.8,3.4 l 0,0 z m 0,-12 v 1.5 c 3,0 3.1,-1 4.7,-2 1.2,0.9 1.7,2 4.1,2 h 0.6 c 2.9,0 2.9,-1 4.5,-2 1.4,0.9 1.6,2 4.3,2 h 0.6 c 2.7,0 2.9,-1.1 4.3,-2 1.6,1.1 1.6,2 4.7,2 v -1.5 c -2,0 -3.8,-1.4 -3.8,-3.4 h -1.9 v 0.8 c 0,1.2 -1.9,2.6 -3.4,2.6 h -0.2 c -2,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.7 -1.7,3.4 -3.6,3.4 H 74.1 c -2,0 -3.2,-1.5 -3.4,-3.4 h -1.9 c -0.2,1.8 -1.7,3.4 -3.8,3.4 l 0,0 z m 42.1,25.4 v -1.5 c 2.2,0 3.4,-1.4 3.6,-3.4 h 1.3 c 1,0 0.8,3.4 4.1,3.4 h 0.4 c 2.2,0 2.4,-1.4 3.3,-2.1 l 0.2,-1.3 h 1.7 c 0.2,2 1.6,3.4 3.8,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.5 c 0.4,1.8 1.7,3.4 3.9,3.4 v 1.5 c -1.9,0 -4.1,-1 -4.5,-2.4 -1.5,1 -1.8,2.5 -4.5,2.5 h -0.4 c -2,0 -4.1,-1 -4.5,-2.4 h -0.4 c -0.4,1.3 -2.3,2.4 -4.1,2.4 h -0.4 c -2.9,0 -3.1,-1.4 -4.7,-2.4 -0.4,1.4 -2.4,2.4 -4.3,2.4 z m 3.6,-16.8 h 1.9 c 0,1.8 1.6,3.4 3.5,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 v 0.9 c 0,1 2,2.4 3.4,2.4 h 0.6 c 1.9,0 3.4,-1.6 3.6,-3.4 h 1.7 v 0.6 c 0,1.2 2,2.8 3.8,2.8 v 1.5 c -3.1,0 -3.2,-1.2 -4.7,-2.2 -1.3,0.9 -1.7,2.2 -4.4,2.2 h -0.7 c -2.6,0 -3,-1.3 -4.3,-2.2 -1.3,1 -1.4,2.2 -4.3,2.2 h -0.2 c -1.8,0 -4.2,-1 -4.5,-2.2 -1.2,0.3 -1.2,2.2 -4.7,2.2 v -1.5 c 1.8,0 3.6,-1.4 3.6,-2.8 v -0.6 l 0,0 z m 0,-12 h 1.9 c 0,1.9 1.6,3.4 3.5,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 v 0.6 c 0,1.4 1.8,2.8 3.4,2.8 h 0.6 c 1.9,0 3.4,-1.6 3.6,-3.4 h 1.7 v 0.6 c 0,1.2 2,2.8 3.8,2.8 v 1.5 c -1.8,0 -4.2,-1 -4.5,-2.2 -1.5,1 -1.8,2.2 -4.6,2.2 h -0.7 c -1.7,0 -3.8,-1 -4.1,-2.2 -1.4,0.9 -1.7,2.2 -4.3,2.2 h -0.4 c -3.1,0 -3.2,-1.2 -4.9,-2.2 -0.4,1.3 -2.5,2.2 -4.3,2.2 v -1.5 c 1.8,0 3.6,-1.4 3.6,-2.8 v -0.6 z m -5.8,32.6 h 32 V 81.5 h -32 v 37 z m -1.7,-11.8 0,-13.3 -6.8,0 0,13.3 z"}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE.TRAFFIC CONTROL POINT"]=[{type:"path",stroke:!1,d:"m 85.5,81.3 0.5,0.7 13.7,18.2 0.3,0.5 0.3,-0.5 13.7,-18.2 0.5,-0.7 -0.9,0 -27.4,0 -0.9,0 z m 1.7,0.9 25.7,0 L 100,99.3 87.2,82.2 z M 106.7,50.7 c 0,0.2 -0,0.5 -0.1,0.7 -0.1,0.2 -0.2,0.4 -0.4,0.5 -0.2,0.2 -0.4,0.3 -0.7,0.4 -0.3,0.1 -0.6,0.1 -1,0.1 l -0.7,0 0,2.1 -0.7,0 0,-5.6 1.5,0 c 0.3,5e-6 0.6,0 0.9,0.1 0.2,0.1 0.4,0.1 0.6,0.3 0.2,0.1 0.4,0.3 0.5,0.5 0.1,0.2 0.2,0.5 0.2,0.8 m -0.8,0 c -1e-5,-0.2 -0,-0.4 -0.1,-0.5 -0.1,-0.1 -0.2,-0.3 -0.3,-0.3 -0.1,-0.1 -0.3,-0.1 -0.4,-0.2 -0.2,-0 -0.3,-0.1 -0.6,-0.1 l -0.7,0 0,2.2 0.6,0 c 0.3,3e-6 0.5,-0 0.7,-0.1 0.2,-0.1 0.3,-0.1 0.5,-0.3 0.1,-0.1 0.2,-0.2 0.2,-0.4 0.1,-0.1 0.1,-0.3 0.1,-0.4 m -3.9,3.5 c -0.1,0.1 -0.3,0.1 -0.4,0.2 -0.1,0.1 -0.3,0.1 -0.4,0.2 -0.2,0 -0.3,0.1 -0.5,0.1 -0.2,0 -0.4,0.1 -0.6,0.1 -0.4,0 -0.8,-0.1 -1.1,-0.2 -0.3,-0.1 -0.6,-0.3 -0.9,-0.5 -0.2,-0.2 -0.4,-0.5 -0.6,-0.9 -0.1,-0.4 -0.2,-0.8 -0.2,-1.3 0,-0.5 0.1,-0.9 0.2,-1.2 0.1,-0.4 0.3,-0.7 0.6,-0.9 0.2,-0.2 0.5,-0.4 0.9,-0.6 0.3,-0.1 0.7,-0.2 1.1,-0.2 0.3,6e-6 0.6,0 0.9,0.1 0.3,0.1 0.6,0.2 1,0.4 l 0,0.9 -0.1,0 c -0.3,-0.3 -0.6,-0.4 -0.9,-0.6 -0.3,-0.1 -0.6,-0.2 -1,-0.2 -0.3,5e-6 -0.5,0 -0.8,0.1 -0.2,0.1 -0.4,0.2 -0.6,0.4 -0.2,0.2 -0.3,0.4 -0.4,0.7 -0.1,0.3 -0.1,0.6 -0.1,1 -10e-7,0.4 0.1,0.7 0.2,1 0.1,0.3 0.2,0.5 0.4,0.7 0.2,0.2 0.4,0.3 0.6,0.4 0.2,0.1 0.5,0.1 0.7,0.1 0.4,10e-7 0.7,-0.1 1,-0.2 0.3,-0.1 0.6,-0.3 0.9,-0.6 l 0.1,0 0,0.9 m -5.1,-4.5 -2,0 0,4.9 -0.7,0 0,-4.9 -2,0 0,-0.7 4.7,0 0,0.7 M 85.9,44.6 l 0,0.4 0,36.5 0,0.4 0.4,0 27.4,0 0.4,0 0,-0.4 0,-36.5 0,-0.4 -0.4,0 -27.4,0 -0.4,0 z m 0.9,0.9 26.5,0 0,35.6 -26.5,0 0,-35.6 z"}],i["AC.M1.RIOT"]=l("RIOT"),i["AC.M1.THREAT"]=l("?"),i["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]=l("ECEP"),i["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]=l("EICC"),i["AC.M1.EMERGENCY OPERATIONS CENTER"]=l("EOC"),i["AC.M1.EMERGENCY SHELTER"]=l("ES"),i["AC.M1.EMERGENCY STAGING AREA"]=l("SA"),i["AC.M1.EMERGENCY"]=l("EMER"),i["AC.M1.COMMERCIAL"]=l("COM"),i["AC.M1.PRODUCTION"]=l("PROD"),i["AC.M1.RETAIL"]=l("RTL"),i["AC.M1.MILITARY ARMORY"]=l("RES"),i["AC.M1.GENERATION STATION"]=l("GEN"),i["GR.I.FF.CIVILIAN ROTARY WING"]=[{type:"path",stroke:o,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:o,fill:!!R&&G,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"}],i["GR.IC.HOSPITAL SHIP"]=a("AH"),i["GR.IC.LAW ENFORCEMENT VESSEL"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],i["CY.IC.COMBAT MISSION TEAM"]=a("CMT"),i["CY.IC.NATIONAL MISSION TEAM"]=a("NMT"),i["CY.IC.CYBER PROTECTION TEAM"]=a("CPT"),i["CY.IC.NATION STATE CYBER THREAT ACTOR"]=a("CTA"),i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"]=a("CTA"),i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].fill=R||N?G:!C&&G,i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].stroke=o,i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].strokewidth=3,i)i.hasOwnProperty(L)&&(I.hasOwnProperty(L)&&console.warn("Override of: "+L),n.call(this,i[L],O),I[L]=i[L])}var h={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-------"]=[],I["S-G-U-----"]=[],I["S-G-UC----"]=[E["GR.IC.COMBAT"]],I["S-G-UCD---"]=[E["GR.IC.FF.AIR DEFENCE"]],I["S-G-UCDS--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE SHORT RANGE"]],I["S-G-UCDSC-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE CHAPARRAL"]],I["S-G-UCDSS-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE STINGER"]],I["S-G-UCDSV-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.FF.MAIN GUN SYSTEM"],E["GR.IC.AIR DEFENSE VULCAN"]],I["S-G-UCDM--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"]],I["S-G-UCDML-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.LIGHT"]],I["S-G-UCDMLA"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCDMM-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.MEDIUM"]],I["S-G-UCDMH-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.HEAVY"]],I["S-G-UCDH--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE H/MAD"]],I["S-G-UCDHH-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE H/MAD HAWK"]],I["S-G-UCDHP-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE H/MAD PATRIOT"]],I["S-G-UCDG--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE GUN UNIT"]],I["S-G-UCDC--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE COMPOSITE"]],I["S-G-UCDT--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE TARGETING UNIT"]],I["S-G-UCDO--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE THEATER MISSILE DEFENSE UNIT"]],I["S-G-UCA---"]=[E["GR.IC.ARMOUR"]],I["S-G-UCAT--"]=[E["GR.IC.ARMOUR"]],I["S-G-UCATA-"]=[E["GR.IC.ARMOUR"],E["GR.M2.AIRBORNE"]],I["S-G-UCATW-"]=[E["GR.IC.ARMOUR"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCATWR"]=[E["GR.IC.ARMOUR"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCATL-"]=[E["GR.IC.ARMOUR"],E["GR.M2.LIGHT"]],I["S-G-UCATM-"]=[E["GR.IC.ARMOUR"],E["GR.M2.MEDIUM"]],I["S-G-UCATH-"]=[E["GR.IC.ARMOUR"],E["GR.M2.HEAVY"]],I["S-G-UCATR-"]=[E["GR.IC.ARMOUR"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAW--"]=[E["GR.IC.ARMOR, WHEELED"]],I["S-G-UCAWS-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAWA-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.AIRBORNE"]],I["S-G-UCAWW-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCAWWR"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAWL-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.LIGHT"]],I["S-G-UCAWM-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.MEDIUM"]],I["S-G-UCAWH-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.HEAVY"]],I["S-G-UCAWR-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAA--"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I["S-G-UCAAD-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I["S-G-UCAAL-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.LIGHT"]],I["S-G-UCAAM-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.AIRBORNE"]],I["S-G-UCAAS-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAAU-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.MOUNTAIN"]],I["S-G-UCAAC-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.ARCTIC"]],I["S-G-UCAAA-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"]],I["S-G-UCAAAT"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"]],I["S-G-UCAAAW"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCAAAS"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAAO-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCAAOS"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.FF.MOTORIZED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCV---"]=[E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCVF--"]=[E["GR.IC.AVIATION FIXED WING"]],I["S-G-UCVFU-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.UTILITY"]],I["S-G-UCVFA-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.ATTACK"]],I["S-G-UCVUTP"]=[E["GR.IC.AVIATION TACTICAL AIR CONTROL PARTY"]],I["S-G-UCVUFC"]=[E["GR.IC.AVIATION FORWARD AIR CONTROLLER"]],I["S-G-UCVFR-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.RECON"]],I["S-G-UCVR--"]=R?[E["GR.IC.AVIATION ROTARY WING"],E["GR.IC.AVIATION ROTARY WING 2525C"]]:[E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCVRA-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.ATTACK"]],I["S-G-UCVRS-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.RECON"]],I["S-G-UCVRW-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.ANTISUBMARINE WARFARE"]],I["S-G-UCVRU-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"]],I["S-G-UCVRUL"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.LIGHT"]],I["S-G-UCVRUM"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.MEDIUM"]],I["S-G-UCVRUH"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.HEAVY"]],I["S-G-UCVRUC"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.COMMAND AND CONTROL ROTARY WING"]],I["S-G-UCVRUE"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.MEDEVAC"]],I["S-G-UCVRM-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.MINE COUNTERMEASURE"]],I["S-G-UCVS--"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.PERSONNEL RECOVERY"]],I["S-G-UCVC--"]=[E["GR.IC.AVIATION COMPOSITE"]],I["S-G-UCVV--"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]],I["S-G-UCVU--"]=[E["GR.IC.UNMANNED SYSTEMS"]],I["S-G-UCVUF-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UCVUR-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UCI---"]=[E["GR.IC.FF.INFANTRY"]],I["S-G-UCIL--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.LIGHT"]],I["S-G-UCIM--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCIO--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCIA--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.AIRBORNE"]],I["S-G-UCIS--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCIZ--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.ARMOUR"]],I["S-G-UCIN--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.NAVAL"]],I["S-G-UCII--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.ARMOUR"],E["GR.IC.FF.MAIN GUN SYSTEM"]],I["S-G-UCIC--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.ARCTIC"]],I["S-G-UCE---"]=[E["GR.IC.ENGINEER"]],I["S-G-UCEC--"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"]],I["S-G-UCECS-"]=[E["GR.IC.ENGINEER"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCECA-"]=[E["GR.IC.ENGINEER"],E["GR.M2.AIRBORNE"]],I["S-G-UCECC-"]=[E["GR.IC.ENGINEER"],E["GR.M2.ARCTIC"]],I["S-G-UCECL-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.LIGHT"]],I["S-G-UCECM-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.MEDIUM"]],I["S-G-UCECH-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.HEAVY"]],I["S-G-UCECT-"]=[s._scale(.7,E["GR.IC.ENGINEER"]),E["GR.IC.ARMOUR"]],I["S-G-UCECW-"]=[E["GR.IC.ENGINEER"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCECO-"]=[E["GR.IC.ENGINEER"],E["GR.M2.MOUNTAIN"]],I["S-G-UCECR-"]=[E["GR.IC.ENGINEER"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCEN--"]=[E["GR.IC.ENGINEER"],E["GR.M1.CONSTRUCTION"]],I["S-G-UCENN-"]=[E["GR.IC.ENGINEER"],E["GR.M1.NAVAL"]],I["S-G-UCF---"]=[E["GR.IC.FIELD ARTILLERY"]],I["S-G-UCFH--"]=[E["GR.IC.FIELD ARTILLERY"]],I["S-G-UCFHE-"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.IC.ARMOUR"]],I["S-G-UCFHS-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFHA-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.AIRBORNE"]],I["S-G-UCFHC-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.ARCTIC"]],I["S-G-UCFHO-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFHL-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.LIGHT"]],I["S-G-UCFHM-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.MEDIUM"]],I["S-G-UCFHH-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.HEAVY"]],I["S-G-UCFHX-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCFR--"]=[E["GR.IC.FF.FIELD ARTILLERY ROCKET"]],I["S-G-UCFRS-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"]],I["S-G-UCFRS-"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.M1.SINGLE ROCKET LAUNCHER"],R?[]:E["GR.IC.ARMOUR"]],I["S-G-UCFRSS"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.IC.ARMOUR"]],I["S-G-UCFRSR"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.M2.TRUCK"]],I["S-G-UCFRST"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.M2.TOWED"]],I["S-G-UCFRM-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],R?"":E["GR.M2.CROSS-COUNTRY TRUCK"]],I["S-G-UCFRMS"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.IC.ARMOUR"]],I["S-G-UCFRMR"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.M2.TRUCK"]],I["S-G-UCFRMT"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.M2.TOWED"]],I["S-G-UCFT--"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.TARGET ACQUISITION"]],I["S-G-UCFTR-"]=[s._translate(-30,10,s._scale(.6,E["GR.IC.FIELD ARTILLERY"])),E["GR.IC.RADAR"]],I["S-G-UCFTS-"]=[s._translate(0,30,s._scale(.7,E["GR.IC.FIELD ARTILLERY"])),E["GR.IC.FF.SOUND"]],I["S-G-UCFTF-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.OPTICAL"],E["GR.M2.TARGET ACQUISITION"]],I["S-G-UCFTC-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.MOTORIZED"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCFTCD"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCFTCM"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"]],I["S-G-UCFTA-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.NAVAL"]],I["S-G-UCFM--"]=[E["GR.IC.MORTAR"]],I["S-G-UCFMS-"]=[E["GR.IC.MORTAR"],E["GR.M2.TRACKED"]],I["S-G-UCFMW-"]=I["S-G-UCFMSW"]=[E["GR.IC.MORTAR"],E["GR.M2.TRUCK"]],I["S-G-UCFMT-"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"]],I["S-G-UCFMTA"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M2.AIRBORNE"]],I["S-G-UCFMTS"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFMTC"]=[E["GR.IC.MORTAR"],E["GR.M2.ARCTIC"]],I["S-G-UCFMTO"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFML-"]=[s._translate(0,-20,E["GR.IC.MORTAR"]),E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCFS--"]=[E["GR.IC.SURVEY"]],I["S-G-UCFSS-"]=[E["GR.IC.SURVEY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFSA-"]=[E["GR.IC.SURVEY"],E["GR.M2.AIRBORNE"]],I["S-G-UCFSL-"]=[E["GR.IC.SURVEY"],E["GR.M2.LIGHT"]],I["S-G-UCFSO-"]=[E["GR.IC.SURVEY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFO--"]=[E["GR.IC.METEOROLOGICAL"]],I["S-G-UCFOS-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFOA-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.AIRBORNE"]],I["S-G-UCFOL-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.LIGHT"]],I["S-G-UCFOO-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.MOUNTAIN"]],I["S-G-UCR---"]=[E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCRH--"]=[E["GR.IC.FF.HORSE"]],I["S-G-UCRV--"]=[E["GR.IC.FF.RECONNAISSANCE"],R?E["GR.M2.CAVALRY"]:[]],I["S-G-UCRVA-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"]],I["S-G-UCRVM-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCRVG-"]=[E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCRVO-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCRC--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.ARCTIC"]],I["S-G-UCRS--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCRA--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.AIRBORNE"]],I["S-G-UCRO--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.MOUNTAIN"]],I["S-G-UCRL--"]=I["S-G-UCRLL-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.LIGHT"]],I["S-G-UCRR--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCRRD-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"],R?E["GR.M1.MARINE DIVISION"]:[]],I["S-G-UCRRF-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M1.FORCE"]],I["S-G-UCRRL-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCRX--"]=[E["GR.IC.FF.RECONNAISSANCE"],R?E["GR.M2.LONG RANGE SURVEILLANCE"]:[s._translate(0,-20,E["GR.M2.MOUNTAIN"]),E["GR.M2.LONG RANGE"]]],I["S-G-UCM---"]=[E["GR.IC.MISSILE"]],I["S-G-UCMT--"]=[E["GR.IC.MISSILE"],E["GR.M2.TACTICAL MISSILE"]],I["S-G-UCMS--"]=[E["GR.IC.MISSILE"],E["GR.M2.STRATEGIC MISSILE"]],I["S-G-UCS---"]=[E["GR.IC.SECURITY"]],I["S-G-UCSW--"]=[s._translate(0,-20,E["GR.IC.SECURITY"]),E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCSG--"]=[E["GR.IC.SECURITY"]],I["S-G-UCSGD-"]=[E["GR.IC.SECURITY"],E["GR.IC.FF.INFANTRY"]],I["S-G-UCSGM-"]=[E["GR.IC.SECURITY"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCSGA-"]=[E["GR.IC.SECURITY"],E["GR.IC.ARMOUR"]],I["S-G-UCSM--"]=[E["GR.IC.SECURITY"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCSR--"]=[E["GR.IC.SECURITY"],E["GR.M2.RAILROAD"]],I["S-G-UCSA--"]=[s._translate(0,-20,E["GR.IC.SECURITY"]),E["GR.IC.AVIATION ROTARY WING"]],I["S-G-F-S---"]=E["GR.IC.SURVEILLANCE"],I["S-G-UU----"]=[E["GR.IC.COMBAT SUPPORT"]],I["S-G-UUA---"]=[E["GR.IC.CBRN"]],I["S-G-UUAC--"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"]],I["S-G-UUACC-"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"]],I["S-G-UUACCK"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"],E["GR.IC.ARMOUR"]],I["S-G-UUACCM"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UUACS-"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"]],I["S-G-UUACSM"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UUACSA"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"],E["GR.IC.ARMOUR"]],I["S-G-UUACR-"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UUACRW"]=[E["GR.IC.CBRN"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UUACRS"]=[E["GR.IC.CBRN"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"],R?E["GR.M1.CHEMICAL SURVEILLANCE"]:[]],I["S-G-UUAN--"]=[E["GR.IC.CBRN"],E["GR.M1.NUCLEAR"]],I["S-G-UUAB--"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"]],I["S-G-UUABR-"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"],E["GR.IC.FF.MOTORIZED"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UUAD--"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"]],I["S-G-UUADT-"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.TROOP"]],I["S-G-UUADE-"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.EQUIPMENT"]],I["S-G-UUADET"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.EQUIMENT/TROOP"]],I["S-G-UUAL--"]=[E["GR.IC.CBRN"],E["GR.M2.LABORATORY"]],I["S-G-UUM---"]=[E["GR.IC.MILITARY INTELLIGENCE"]],I["S-G-UUMA--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UUMS--"]=[s._translate(-25,0,E["GR.IC.MILITARY INTELLIGENCE"]),E["GR.IC.RADIO"]],I["S-G-UUMSE-"]=[E["GR.IC.ELECTRONIC WARFARE"]],I["S-G-UUMSEA"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UUMSED"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.DIRECTION FINDING"]],I["S-G-UUMSEI"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.INTERCEPT"]],I["S-G-UUMSEJ"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.JAMMING"]],I["S-G-UUMSET"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-UUMSEC"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-UUMC--"]=[E["GR.IC.COUNTER-INTELLIGENCE"]],I["S-G-UUMR--"]=[E["GR.IC.MILITARY INTELLIGENCE"]],I["S-G-UUMRG-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.RADAR"]],I["S-G-UUMRS-"]=[s._translate(0,30,s._scale(.8,E["GR.IC.MILITARY INTELLIGENCE"])),E["GR.IC.FF.SENSOR"]],I["S-G-UUMRSS"]=[s._translate(0,30,s._scale(.8,E["GR.IC.MILITARY INTELLIGENCE"])),E["GR.IC.FF.SENSOR"],E["GR.M1.SENSOR CONTROL MODULE"]],I["S-G-UUMRX-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.GROUND STATION MODULE"]],I["S-G-UUMMO-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.METEOROLOGICAL"]],I["S-G-UUMO--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.OPERATIONS"]],I["S-G-UUMT--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.TACTICAL EXPLOITATION"]],I["S-G-UUMQ--"]=[E["GR.IC.INTERROGATION"]],I["S-G-UUMJ--"]=[E["GR.IC.JOINT INTELLIGENCE CENTRE"]],I["S-G-UUL---"]=[E["GR.IC.FF.MILITARY POLICE"],E["GR.IC.MILITARY POLICE"]],I["S-G-UULS--"]=[E["GR.IC.SHORE PATROL"]],I["S-G-UULM--"]=[E["GR.IC.MILITARY POLICE"]],I["S-G-UULC--"]=[E["GR.IC.LAW ENFORCEMENT"]],I["S-G-UULF--"]=[s._translate(0,-25,s._scale(.8,E["GR.IC.SHORE PATROL"])),E["GR.IC.AVIATION FIXED WING"]],I["S-G-UULD--"]=[E["GR.IC.CRIMINAL INVESTIGATION DIVISION"]],I["S-G-UUS---"]=[E["GR.IC.FF.SIGNAL"]],I["S-G-UUSA--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.AREA"]],I["S-G-UUSC--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]],I["S-G-UUSCL-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.LARGE COMMUNICATIONS CONTINGENCY PACKAGE"],E["GR.M2.AIRBORNE"]],I["S-G-UUSO--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.OPERATIONS"]],I["S-G-UUSF--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.FORWARD"]],I["S-G-UUSM--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]],I["S-G-UUSMS-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.SMALL EXTENSION NODE"]],I["S-G-UUSML-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.LARGE EXTENSION NODE"]],I["S-G-UUSMN-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.NODE CENTRE"]],I["S-G-UUSR--"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO"]],I["S-G-UUSRS-"]=[E["GR.IC.FF.SIGNAL"],E["GR.I.FF.SATELLITE"]],I["S-G-UUSRT-"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO TELETYPE CENTRE"]],I["S-G-UUSRW-"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO RELAY"]],I["S-G-UUSS--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.SIGNAL SUPPORT"]],I["S-G-UUSW--"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.TELEPHONE SWITCH"]],I["S-G-UUSX--"]=[E["GR.IC.ELECTRONIC RANGING"]],I["S-G-UUI---"]=[E["GR.IC.INFORMATION OPERATIONS"]],I["S-G-UUP---"]=I["S-G-UUX---"]=[E["GR.IC.FF.AMPHIBIOUS"],E["GR.M1.LANDING SUPPORT"]],I["S-G-UUE---"]=[E["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I["S-G-UUT---"]=[E["GR.IC.TOPOGRAPHIC"]],I["S-G-UUD---"]=[E["GR.IC.DRILLING"]],I["S-G-US----"]=[E["GR.IC.COMBAT SERVICE SUPPORT"]],I["S-G-USA---"]=[E["GR.IC.ADMINISTRATIVE"]],I["S-G-USAT--"]=[E["GR.IC.ADMINISTRATIVE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAC--"]=[E["GR.IC.ADMINISTRATIVE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAJ--"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"]],I["S-G-USAJT-"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAJC-"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAO--"]=[E["GR.IC.POSTAL"]],I["S-G-USAOT-"]=[E["GR.IC.POSTAL"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAOC-"]=[E["GR.IC.POSTAL"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAF--"]=[E["GR.IC.FINANCE"]],I["S-G-USAFT-"]=[E["GR.IC.FINANCE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAFC-"]=[E["GR.IC.FINANCE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAS--"]=[E["GR.IC.PERSONNEL SERVICES"]],I["S-G-USAST-"]=[E["GR.IC.PERSONNEL SERVICES"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USASC-"]=[E["GR.IC.PERSONNEL SERVICES"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAM--"]=[E["GR.IC.MORTUARY AFFAIRS"]],I["S-G-USAMT-"]=[E["GR.IC.MORTUARY AFFAIRS"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAMC-"]=[E["GR.IC.MORTUARY AFFAIRS"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAR--"]=[E["GR.IC.RELIGIOUS SUPPORT"]],I["S-G-USART-"]=[E["GR.IC.RELIGIOUS SUPPORT"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USARC-"]=[E["GR.IC.RELIGIOUS SUPPORT"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAP--"]=[E["GR.IC.PUBLIC AFFAIRS"]],I["S-G-USAPT-"]=[E["GR.IC.PUBLIC AFFAIRS"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPC-"]=[E["GR.IC.PUBLIC AFFAIRS"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAPB-"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"]],I["S-G-USAPBT"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPBC"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAPM-"]=[E["GR.IC.JOINT INFORMATION BUREAU"]],I["S-G-USAPMT"]=[E["GR.IC.JOINT INFORMATION BUREAU"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPMC"]=[E["GR.IC.JOINT INFORMATION BUREAU"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAX--"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"]],I["S-G-USAXT-"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAXC-"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAL--"]=[E["GR.IC.LABOUR"]],I["S-G-USALT-"]=[E["GR.IC.LABOUR"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USALC-"]=[E["GR.IC.LABOUR"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAW--"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"]],I["S-G-USAWT-"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAWC-"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAQ--"]=[E["GR.IC.QUARTERMASTER"]],I["S-G-USAQT-"]=[E["GR.IC.QUARTERMASTER"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAQC-"]=[E["GR.IC.QUARTERMASTER"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USM---"]=[E["GR.IC.FF.MEDICAL"]],I["S-G-USMT--"]=[E["GR.IC.FF.MEDICAL THEATER"]],I["S-G-USMC--"]=[E["GR.IC.FF.MEDICAL CORPS"]],I["S-G-USMM--"]=[E["GR.IC.FF.MEDICAL"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMMT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMMC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMV--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.VETERINARY"]],I["S-G-USMVT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.VETERINARY"]],I["S-G-USMVC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.VETERINARY"]],I["S-G-USMD--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.DENTAL"]],I["S-G-USMDT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.DENTAL"]],I["S-G-USMDC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.DENTAL"]],I["S-G-USMP--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USMPT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USMPC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USS---"]=[E["GR.IC.FF.SUPPLY"]],I["S-G-USST--"]=[E["GR.IC.FF.SUPPLY THEATER"]],I["S-G-USSC--"]=[E["GR.IC.FF.SUPPLY CORPS"]],I["S-G-USS1--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS I"]],I["S-G-USS1T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS I"]],I["S-G-USS1C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS I"]],I["S-G-USS2--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS II"]],I["S-G-USS2T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS II"]],I["S-G-USS2C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS II"]],I["S-G-USS3--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3A-"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS3AT"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS3AC"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS4--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS4T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS4C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS5--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS V"]],I["S-G-USS5T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS V"]],I["S-G-USS5C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS V"]],I["S-G-USS6--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS6T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS6C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS7--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS7T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS7C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS8--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS8T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS8C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS9--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS IX"]],I["S-G-USS9T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS IX"]],I["S-G-USS9C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS IX"]],I["S-G-USSX--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS X"]],I["S-G-USSXT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS X"]],I["S-G-USSXC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS X"]],I["S-G-USSL--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSLT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSLC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSW--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER"]],I["S-G-USSWT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.WATER"]],I["S-G-USSWC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.WATER"]],I["S-G-USSWP-"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER PURIFICATION"]],I["S-G-USSWPT"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.WATER PURIFICATION"]],I["S-G-USSWPC"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.WATER PURIFICATION"]],I["S-G-UST---"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-USTT--"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"]],I["S-G-USTC--"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"]],I["S-G-USTM--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTMT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTMC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTR--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTRT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTRC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTS--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTST-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTSC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTA--"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTAT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTAC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTI--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USTIT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USTIC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USX---"]=[E["GR.IC.MAINTENANCE"]],I["S-G-USXT--"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USXC--"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USXH--"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.HEAVY"]],I["S-G-USXHT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M2.HEAVY"]],I["S-G-USXHC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M2.HEAVY"]],I["S-G-USXR--"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.RAILROAD"]],I["S-G-USXRT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M2.RAILROAD"]],I["S-G-USXRC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M2.RAILROAD"]],I["S-G-USXO--"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.AMMUNITION"]],I["S-G-USXOT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.AMMUNITION"]],I["S-G-USXOC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.AMMUNITION"]],I["S-G-USXOM-"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.MISSILE"]],I["S-G-USXOMT"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.MISSILE"]],I["S-G-USXOMC"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.MISSILE"]],I["S-G-USXE--"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXET-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXEC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXBDR"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.BATTLE DAMAGE REPAIR"]],I["S-G-USXPM-"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.PREVENTIVE MAINTENANCE"]],I["S-G-USXP--"]=[E["GR.IC.PIPELINE"]],I["S-G-USXEP-"]=[E["GR.IC.ENVIRONMENTAL PROTECTION"]],I["S-G-UH----"]=[],I["S-G-UH1---"]=[E["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],I["S-G-UH2---"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],I["S-G-UHGL--"]=I["S-G-GL----"]=[E["GR.IC.LIAISON"]]}},x={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-E-----"]=[],I["S-G-EW----"]=[],I["S-G-EWM---"]=[E["GR.EQ.MISSILE LAUNCHER"]],I["S-G-EWMA--"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]],I["S-G-EWMAS-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMASR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMASE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAI-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMAIR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMAIE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAL-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"]],I["S-G-EWMALR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMALE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAT-"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"]],I["S-G-EWMATR"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMATE"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMS--"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]],I["S-G-EWMSS-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMSI-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMSL-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWMT--"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"]],I["S-G-EWMTL-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMTM-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMTH-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWS---"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"]],I["S-G-EWSL--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWSM--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWSH--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWX---"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"]],I["S-G-EWXL--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.SHORT RANGE"])],I["S-G-EWXM--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.INTERMEDIATE RANGE"])],I["S-G-EWXH--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.LONG RANGE"])],I["S-G-EWT---"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I["S-G-EWTL--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWTM--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWTH--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWR---"]=[E["GR.EQ.RIFLE"]],I["S-G-EWRR--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWRL--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWRH--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.LONG RANGE"]],I["S-G-EWZ---"]=[E["GR.EQ.GRENADE LAUNCHER"]],I["S-G-EWZL--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.SHORT RANGE"])],I["S-G-EWZM--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.INTERMEDIATE RANGE"])],I["S-G-EWZH--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.LONG RANGE"])],I["S-G-EWO---"]=[E["GR.EQ.MORTAR"]],I["S-G-EWOL--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWOM--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWOH--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.LONG RANGE"]],I["S-G-EWH---"]=[E["GR.EQ.HOWITZER"]],I["S-G-EWHL--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWHLS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.SHORT RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWHM--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWHMS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.INTERMEDIATE RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWHH--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWHHS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.LONG RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWG---"]=[E["GR.EQ.ANTITANK GUN"]],I["S-G-EWGL--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWGM--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWGH--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EWGR--"]=[E["GR.EQ.RECOILLESS GUN"]],I["S-G-EWD---"]=[E["GR.EQ.DIRECT FIRE GUN"]],I["S-G-EWDL--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWDLS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.SHORT RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWDM--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWDMS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWDH--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EWDHS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.LONG RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWA---"]=[E["GR.EQ.AIR DEFENCE GUN"]],I["S-G-EWAL--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWAM--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWAH--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EV----"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]],I["S-G-EVA---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.ARMOURED VEHICLE"]],I["S-G-EVAT--"]=[E["GR.EQ.TANK"]],I["S-G-EVATL-"]=[E["GR.EQ.TANK"],E["GR.EQ.LIGHT TANK"]],I["S-G-EVATLR"]=I["S-G-EVATW-"]=[E["GR.EQ.TANK"],E["GR.EQ.LIGHT TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVATM-"]=[E["GR.EQ.TANK"],E["GR.EQ.MEDIUM TANK"]],I["S-G-EVATMR"]=I["S-G-EVATX-"]=[E["GR.EQ.TANK"],E["GR.EQ.MEDIUM TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVATH-"]=[E["GR.EQ.TANK"],E["GR.EQ.HEAVY TANK"]],I["S-G-EVATHR"]=I["S-G-EVATY-"]=[E["GR.EQ.TANK"],E["GR.EQ.HEAVY TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVAA--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"]],I["S-G-EVAAR-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVAI--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE"]],I["S-G-EVAC--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]],I["S-G-EVAS--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER COMBAT SERVICE SUPPORT VEHICLE"]],I["S-G-EVAL--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE"],E["GR.EQ.CROSS-COUNTRY"]],I["S-G-EVU---"]=[E["GR.EQ.UTILITY VEHICLE"]],I["S-G-EVUB--"]=[E["GR.EQ.BUS"]],I["S-G-EVUS--"]=[E["GR.EQ.SEMI-TRAILER TRUCK"]],I["S-G-EVUSL-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE LIGHT"]],I["S-G-EVUSM-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE MEDIUM"]],I["S-G-EVUSH-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE HEAVY"]],I["S-G-EVUL--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"]],I["S-G-EVUX--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"]],I["S-G-EVUR--"]=[E["GR.EQ.WATER VEHICLE"]],I["S-G-EVUT--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]],I["S-G-EVUTL-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]],I["S-G-EVUTH-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]],I["S-G-EVUA--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.MEDICAL EVACUATION"]],I["S-G-EVUAA-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.MEDICAL EVACUATION"]],I["S-G-EVE---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],s._scale(.7,E["GR.IC.ENGINEER"])],I["S-G-EVEB--"]=[E["GR.EQ.BRIDGE"]],I["S-G-EVEE--"]=[E["GR.EQ.EARTHMOVER"]],I["S-G-EVEC--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],s._scale(.6,E["GR.IC.ENGINEER"])],I["S-G-EVEM--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.MINE LAYING VEHICLE"]],I["S-G-EVEMA-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],E["GR.EQ.TANK"]],I["S-G-EVEMV-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I["S-G-EVEMT-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,E["GR.EQ.LIMITED CROSS-COUNTRY"])],I["S-G-EVEML-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],E["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I["S-G-EVEA--"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"]],I["S-G-EVEAA-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],E["GR.EQ.TANK"]],I["S-G-EVEAT-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,E["GR.EQ.LIMITED CROSS-COUNTRY"])],I["S-G-EVEMSM"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.MINE SCATTERABLE"]],I["S-G-EVED--"]=[E["GR.EQ.DOZER"]],I["S-G-EVEDA-"]=[E["GR.EQ.DOZER ARMORED"]],I["S-G-EVES--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,E["GR.IC.ENGINEER"])],I["S-G-EVER--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,E["GR.IC.ENGINEER"]),E["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]],I["S-G-EVEH--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],E["GR.EQ.UTILITY VEHICLE BACKHOE"]],I["S-G-EVEF--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"],E["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]],I["S-G-EVD---"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"],s._scale(.7,E["GR.IC.DRILLING"])],I["S-G-EVT---"]=[E["GR.EQ.TRAIN LOCOMOTIVE"]],I["S-G-EVC---"]=[E["GR.I.CIVILIAN"]],I["S-G-EVCA--"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]],I["S-G-EVCAL-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCAM-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCAH-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCO--"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]],I["S-G-EVCOL-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCOM-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCOH-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCM--"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I["S-G-EVCML-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCMM-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCMH-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCU--"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]],I["S-G-EVCUL-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCUM-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCUH-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCJ--"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]],I["S-G-EVCJL-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCJM-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCJH-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCT--"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTL-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTM-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTH-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCF--"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFL-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFM-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFH-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVM---"]=[E["GR.EQ.PACK ANIMAL"]],I["S-G-EVS---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE SUPPORT"]],I["S-G-EVST--"]=R?[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE TRANSLOADER"]]:[E["GR.EQ.TRAIN LOCOMOTIVE"]],I["S-G-EVSR--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE TRANSPORTER"]],I["S-G-EVSC--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE CRANE/LOADING DEVICE"]],I["S-G-EVSP--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]],I["S-G-EVSW--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE WARHEAD TRANSPORTER"]],I["S-G-ES----"]=[E["GR.EQ.SENSOR"]],I["S-G-ESR---"]=[E["GR.EQ.RADAR"]],I["S-G-ESE---"]=[E["GR.EQ.SENSOR EMPLACED"]],I["S-G-EXI---"]=[E["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]],I["S-G-EX----"]=[],I["S-G-EXL---"]=[E["GR.EQ.LASER"]],I["S-G-EXN---"]=[E["GR.EQ.CBRN EQUIPMENT"]],I["S-G-EXF---"]=[E["GR.EQ.FLAME THROWER"]],I["S-G-EXM---"]=[E["GR.EQ.LAND MINES"]],I["S-G-EXMC--"]=[E["GR.EQ.ANTIPERSONNEL LAND MINE"]],I["S-G-EXML--"]=[E["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]];var e={"E-----":0,"EWM---":140,"EWMA--":140,"EWMAS-":140,EWMASR:140,EWMASE:140,"EWMAI-":140,EWMAIR:140,EWMAIE:140,"EWMAL-":140,EWMALR:140,EWMALE:140,"EWMAT-":153,EWMATR:153,EWMATE:153,"EWMS--":140,"EWMSS-":140,"EWMSI-":140,"EWMSL-":140,"EWMT--":140,"EWMTL-":140,"EWMTM-":140,"EWMTH-":140,"EWS---":140,"EWSL--":140,"EWSM--":140,"EWSH--":140,"EWX---":140,"EWXL--":140,"EWXM--":140,"EWXH--":140,"EWT---":140,"EWTL--":140,"EWTM--":140,"EWTH--":140,"EWR---":140,"EWRL--":140,"EWRM--":140,"EWRH--":140,"EWZ---":140,"EWZL--":140,"EWZM--":140,"EWZH--":140,"EWO---":140,"EWOL--":140,"EWOM--":140,"EWOH--":140,"EWH---":140,"EWHL--":140,"EWHLS-":130,"EWHM--":140,"EWHMS-":130,"EWHH--":140,"EWHHS-":130,"EWG---":140,"EWGL--":140,"EWGM--":140,"EWGH--":140,"EWGR--":140,"EWD---":140,"EWDL--":140,"EWDLS-":130,"EWDM--":140,"EWDMS-":130,"EWDH--":140,"EWDHS-":130,"EWA---":140,"EWAL--":140,"EWAM--":140,"EWAH--":140,"EV----":129,"EVA---":129,"EVAT--":130,"EVATL-":130,EVATLR:130,"EVATM-":130,EVATMR:130,"EVATH-":130,EVATHR:130,"EVAA--":130,"EVAAR-":130,"EVAI--":130,"EVAC--":130,"EVAS--":130,"EVAL--":140,"EVU---":130,"EVAB--":130,"EVUS--":140,"EVUSL-":140,"EVUSM-":140,"EVUSH-":140,"EVUL--":140,"EVUX--":140,"EVUR--":130,"EVUTL-":130,"EVUTH-":130,"EVUA--":130,"EVUAA-":130,"EVE---":129,"EVEB--":130,"EVEE--":130,"EVEC--":140,"EVEM--":130,"EVEMA-":130,"EVEMV-":130,"EVEMT-":130,"EVEML-":140,"EVEA--":120,"EVEAA-":130,"EVEAT-":130,EVEMSM:130,"EVED--":130,"EVEDA-":130,"EVES--":130,"EVER--":130,"EVEH--":140,"EVEF--":140,"EVD---":140,"EVT--":130,"EVC---":119,"EVCA--":132.5,"EVCAL-":132.5,"EVCAM-":132.5,"EVCAH-":132.5,"EVCO--":132.5,"EVCOL-":132.5,"EVCOM-":132.5,"EVCOH-":132.5,"EVCM--":132.5,"EVCML-":132.5,"EVCMM-":132.5,"EVCMH-":132.5,"EVCU--":132.5,"EVCUL-":132.5,"EVCUM-":132.5,"EVCUH-":132.5,"EVCJ--":132.5,"EVCJL-":132.5,"EVCJM-":132.5,"EVCJH-":132.5,"EVCT--":132.5,"EVCTL-":132.5,"EVCTM-":132.5,"EVCTH-":132.5,"EVCF--":132.5,"EVCFL-":132.5,"EVCFM-":132.5,"EVCFH-":132.5,"EVM---":125,"EVS---":129,"EVST--":129,"EVSR--":129,"EVSC--":129,"EVSP--":129,"EVSW--":129,"ES----":140,"ESR---":120,"ESE---":136,"EXI---":119,"EXL---":145,"EXN---":140,"EXF---":135,"EXM---":130,"EXMC--":122,"EXML--":122};for(var A in e)e.hasOwnProperty(A)&&(t["S-G-"+A]={x1:50,x2:150,y1:50,y2:e[A]})}},U={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-I-----"]=[],I["S-G-IR----"]=[E["GR.IN.IC.RAW MATERIAL PRODUCTION/STORAGE"]],I["S-G-IRM---"]=[E["GR.IN.IC.MINE"]],I["S-G-IRP---"]=[E["GR.IC.FF.CLASS III"]],I["S-G-IRN---"]=[E["GR.IC.CBRN"]],I["S-G-IRNB--"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"]],I["S-G-IRNC--"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"]],I["S-G-IRNN--"]=[E["GR.IC.CBRN"],E["GR.M1.NUCLEAR"]],I["S-G-IP----"]=[E["GR.IN.IC.PROCESSING FACILITY"]],I["S-G-IPD---"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"]],I["S-G-IE----"]=[E["GR.IC.EQUIPMENT MANUFACTURE"]],I["S-G-IU----"]=[E["GR.IN.IC.UTILITY FACILITY"]],I["S-G-IUR---"]=[E["GR.IN.IC.RESEARCH"]],I["S-G-IUT---"]=[E["GR.IN.IC.TELECOMMUNICATIONS"]],I["S-G-IUE---"]=[E["GR.IN.IC.ELECTRIC POWER"]],I["S-G-IUEN--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER NUCLEAR"]],I["S-G-IUED--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER DAM"]],I["S-G-IUEF--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER FOSSIL"]],I["S-G-IUP---"]=[E["GR.IC.WATER"]],I["S-G-IM----"]=[],I["S-G-IMF---"]=[E["GR.IN.IC.ATOMIC ENERGY"]],I["S-G-IMFA--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.ATOMIC ENERGY REACTOR"]],I["S-G-IMFP--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],I["S-G-IMFPW-"]=[E["GR.IN.IC.ATOMIC ENERGY WEAPONS GRADE"],E["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],I["S-G-IMFS--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]],I["S-G-IMA---"]=[E["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]],I["S-G-IME---"]=[E["GR.IC.FF.CLASS V"]],I["S-G-IMG---"]=[E["GR.EQ.TANK"]],I["S-G-IMV---"]=[E["GR.IC.MAINTENANCE"]],I["S-G-IMN---"]=[E["GR.EQ.DOZER"]],I["S-G-IMNB--"]=[E["GR.IN.IC.BRIDGE"]],I["S-G-IMC---"]=[E["GR.IC.CBRN"],E["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]],I["S-G-IMS---"]=[E["GR.IC.NAVAL"],E["GR.IN.M2.SHIP CONSTRUCTION"]],I["S-G-IMM---"]=[E["GR.IC.MISSILE"]],I["S-G-IG----"]=[E["GR.I.GOVERNMENT"]],I["S-G-IB----"]=[E["GR.IN.IC.BASE"]],I["S-G-IBA---"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-IBN---"]=[E["GR.IC.NAVAL"]],I["S-G-IT----"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-IX----"]=[E["GR.IC.FF.MEDICAL"]],I["S-G-IXH---"]=[E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-IRR---"]=I["S-G-IRSR--"]=[E["GR.IN.IC.SEA SURFACE INSTALLATION, OIL RIG/PLATFORM"]]}};function d(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.numberSIDC,N=E.iconColor[T],O=E.iconFillColor[T],G=E.black[T],o=E.white[T],M={};for(var i in M["SE.IC.MILITARY"]=a("MIL"),M["SE.IC.MANUAL TRACK"]=a("MAN"),M["SE.IC.COMBATANT"]=[{type:"path",d:"m 86.9,110 c -3.6,2 -7.2,3.9 -10.8,5.9 2.1,2.9 6.7,3.9 10,2.1 2.6,-0.9 4.7,-3.8 3.1,-6.1 -0.8,-0.6 -1.5,-1.3 -2.3,-1.9 z m 26.3,0.1 c 3.6,2 7.2,3.9 10.8,5.9 -2.1,2.9 -6.7,3.9 -10,2.1 -2.6,-0.9 -4.7,-3.8 -3.1,-6.1 0.8,-0.6 1.5,-1.3 2.3,-1.9 z",fill:!1},{type:"path",d:"m 112.9,110 c -5.6,-4 -11.3,-7.9 -16.1,-12.5 -4.2,-4.5 -7,-9.8 -9.2,-15.1 -0.8,4.4 -0.9,9.3 2.4,13.2 3.6,4.5 8.6,8.1 13.5,11.8 2.3,1.7 4.7,3.3 7.1,4.8 0.8,-0.7 1.5,-1.5 2.3,-2.2 m -25.7,0 c 5.6,-4 11.3,-7.9 16.1,-12.5 4.2,-4.5 7,-9.8 9.2,-15.1 0.8,4.4 0.9,9.3 -2.4,13.2 -3.6,4.5 -8.6,8.1 -13.5,11.8 -2.3,1.7 -4.7,3.3 -7.1,4.8 -0.8,-0.7 -1.5,-1.5 -2.3,-2.2",fill:o,strokewidth:2}],M["SE.IC.SURFACE COMBATANT, LINE"]={type:"path",stroke:!1,d:"m 100,120 -25,-17 15,2 0,-10 5,0 0,-5 -15,0 0,-5 15,0 0,-5 10,0 0,5 15,0 0,5 -15,0 0,5 5,0 0,10 15,-2 z"},M["SE.IC.CARRIER"]={type:"path",d:"m 80,100 20,20 20,-20 -20,0 0,-20 -20,0 z"},M["SE.IC.BATTLESHIP"]=a("BB"),M["SE.IC.CIVILIAN"]=a("CIV"),M["SE.IC.CIVILIAN"].fill=R||S?O:!C&&O,M["SE.IC.CIVILIAN"].stroke=G,M["SE.IC.CIVILIAN"].strokewidth=3,M["SE.IC.CRUISER"]=a("CC"),M["SE.IC.CRUISER, GUIDED MISSILE"]=a("CG"),M["SE.IC.DESTROYER"]=a("DD"),M["SE.IC.FRIGATE"]=a("FF"),M["SE.IC.CORVETTE"]=a("FS"),M["SE.IC.LITTORAL COMBATANT SHIP"]=a("LL"),M["SE.IC.AMPHIBIOUS WARFARE SHIP"]={type:"path",d:"m 100,120 20,0 m -20,0 -20,-20 10,0 0,-20 20,0 0,20 10,0 z"},M["SE.IC.AMPHIBIOUS FORCE FLAGSHIP"]=a("LCC"),M["SE.IC.AMPHIBIOUS ASSAULT"]=a("LA"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]=a("LHA"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, MULTI-PURPOSE"]=a("LHD"),M["SE.IC.AMPHIBIOUS TRANSPORT, DOCK"]=a("LPD"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, HELICOPTER"]=a("LPH"),M["SE.IC.LANDING SHIP"]=a("LS"),M["SE.IC.LANDING CRAFT"]=a("LC"),M["SE.IC.MINE WARFARE VESSEL"]={type:"path",d:"m 98.3,81 0,4.1 c -2.4,0.3 -4.6,1.4 -6.4,2.9 l -3.5,-3.5 -2.4,2.4 3.6,3.6 c -0.9,1.3 -1.5,4.9 -1.8,6.5 l -10.8,0 0,3 3,0 20,20 20,-20 3,0 0,-3 -10,0 c -1,-1.7 -2,-5.3 -3,-6.7 l 4,-3.7 -2,-2.4 -4,3.6 c -2,-1.4 -4,-2.4 -6,-2.7 l 0,-4.1 z"},M["SE.IC.MINELAYER"]=a("ML"),M["SE.IC.MINESWEEPER"]=a("MS"),M["SE.IC.MINESWEEPER, DRONE"]=a("MSD"),M["SE.IC.MINEHUNTER"]=a("MH"),M["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]=a(R?"MA":"MCS"),M["SE.IC.MINE COUNTERMEASURES"]=a("MCM"),M["SE.IC.SEA SURFACE DECOY"]={type:"path",d:"M 105,110 90,95 105,80 z M 85,110 70,95 85,80 z m 40,-30 -15,15 15,15 z m -55,40 0,-5 55,0 0,5 z"},M["SE.IC.PATROL"]={type:"path",d:"m 80,100 20,20 20,-20 -10,0 0,-20 -20,0 0,20 z"},M["SE.IC.PATROL CRAFT"]=a("PC"),M["SE.IC.PATROL ANTI SUBMARINE WARFARE"]={type:"path",d:"m 100,120 -25,-25 5,-5 10,10 5,0 0,-20 10,0 0,20 5,0 10,-10 5,5 z"},M["SE.IC.PATROL ANTISHIP MISSILE"]=a("PM"),M["SE.IC.PATROL TORPEDO"]=a("PT"),M["SE.IC.PATROL GUN"]=a("PG"),M["SE.IC.PATROL SHIP"]=[],M["SE.IC.MILITARY SPEEDBOAT"]={type:"path",stroke:!1,d:"m 120,120 -40,0 -15,-25 15,0 5,-15 10,0 -5,15 45,0 z"},M["SE.IC.MILITARY SPEEDBOAT, RIGID-HULL INFLATABLE BOAT"]=[{type:"path",stroke:!1,d:"M 85 80 L 80 95 L 65 95 L 80 120 L 120 120 L 135 95 L 90 95 L 95 80 L 85 80 z M 87 100.7 L 93.1 100.7 C 94.6 100.7 95.7 100.8 96.4 101.1 C 97.1 101.3 97.7 101.8 98.1 102.4 C 98.5 103.1 98.7 103.8 98.7 104.7 C 98.7 105.8 98.4 106.7 97.8 107.4 C 97.1 108.1 96.2 108.5 94.9 108.7 C 95.6 109.1 96.1 109.4 96.5 109.9 C 96.9 110.3 97.4 111.1 98.1 112.2 L 99.9 115 L 96.4 115 L 94.3 111.9 C 93.6 110.8 93.1 110.1 92.8 109.8 C 92.5 109.5 92.2 109.3 91.9 109.2 C 91.6 109.1 91.2 109 90.5 109 L 89.9 109 L 89.9 115 L 87 115 L 87 100.7 z M 101.5 100.7 L 107.2 100.7 C 108.3 100.7 109.2 100.7 109.7 100.8 C 110.3 100.9 110.8 101.1 111.2 101.4 C 111.7 101.7 112 102.1 112.3 102.6 C 112.6 103.1 112.7 103.7 112.8 104.3 C 112.7 105 112.6 105.6 112.2 106.1 C 111.9 106.7 111.4 107.1 110.8 107.4 C 111.6 107.7 112.3 108.1 112.8 108.7 C 113.2 109.3 113.5 110 113.5 110.8 C 113.5 111.5 113.3 112.1 113 112.8 C 112.7 113.4 112.3 113.8 111.8 114.2 C 111.2 114.6 110.6 114.8 109.8 114.9 C 109.3 115 108.2 115 106.3 115 L 101.5 115 L 101.5 100.7 z M 104.3 103.1 L 104.3 106.4 L 106.3 106.4 C 107.4 106.4 108.1 106.3 108.3 106.3 C 108.8 106.3 109.2 106.1 109.5 105.8 C 109.8 105.5 109.9 105.1 109.9 104.7 C 109.9 104.2 109.8 103.9 109.6 103.6 C 109.3 103.3 109 103.2 108.5 103.1 C 108.2 103.1 107.4 103.1 106 103.1 L 104.3 103.1 z M 89.9 103.1 L 89.9 106.8 L 92 106.8 C 93.4 106.8 94.3 106.7 94.6 106.6 C 95 106.4 95.2 106.3 95.4 106 C 95.6 105.7 95.7 105.3 95.8 104.9 C 95.7 104.4 95.6 104 95.3 103.7 C 95.1 103.4 94.7 103.2 94.3 103.2 C 94 103.1 93.3 103.1 92.2 103.1 L 89.9 103.1 z M 104.3 108.8 L 104.3 112.6 L 107 112.6 C 108.1 112.6 108.7 112.6 109 112.5 C 109.4 112.4 109.8 112.2 110.1 111.9 C 110.3 111.6 110.5 111.2 110.5 110.7 C 110.5 110.3 110.4 109.9 110.2 109.6 C 109.9 109.3 109.6 109.1 109.3 109 C 108.9 108.8 108 108.8 106.7 108.8 L 104.3 108.8 z"},{type:"text",fill:R?O:!C&&O,stroke:!1,x:100,y:115,fontsize:20,text:"RB"}],M["SE.IC.MILITARY JETSKI"]={type:"path",stroke:!1,d:"m 135,105 0,15 -60,0 -10,-15 20,-25 10,0 0,10 -5,0 -5,15 z"},M["SE.IC.UNMANNED SURFACE WATER VEHICLE"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},M["SE.IC.NAVY TASK ORGANIZATION UNIT"]=[{type:"path",d:"m 110,80 15,15 0,25 M 90,80 75,95 l 0,25",fill:!1}],R&&M["SE.IC.NAVY TASK ORGANIZATION UNIT"].push({type:"path",d:"m 100,80 -15,15 0,25 30,0 0,-25 -15,-15"}),M["SE.IC.NAVY TASK FORCE"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TF"}],M["SE.IC.NAVY TASK GROUP"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TG"}],M["SE.IC.NAVY TASK UNIT"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TU"}],M["SE.IC.NAVY TASK ELEMENT"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TE"}],M["SE.IC.CONVOY"]={type:"path",d:"m 80,115 -20,0 0,-35 80,0 0,35 -20,0 0,-20 -40,0 z"},M["SE.IC.NONCOMBATANT"]={type:"path",d:"m 80,100 0,-20 40,0 0,20 15,0 0,20 -70,0 0,-20 z"},M["SE.IC.AUXILIARY SHIP"]=a(R?"AR":"AA"),M["SE.IC.AMMUNITION SHIP"]=a("AE"),M["SE.IC.STORES SHIP"]=a("AF"),M["SE.IC.AUXILIARY FLAG OR COMMAND SHIP"]=a("AGF"),M["SE.IC.INTELLIGENCE COLLECTOR"]=a(R?"JI":"AI"),M["SE.IC.OCEAN RESEARCH SHIP"]=a("AGO"),M["SE.IC.SURVEY SHIP"]=a("AGS"),M["SE.IC.HOSPITAL SHIP"]=a("AH"),M["SE.IC.CARGO SHIP"]=a("AK"),M["SE.IC.COMBAT SUPPORT SHIP, FAST"]=a("AOE"),M["SE.IC.OILER, REPLENISHMENT"]=a("AO"),M["SE.IC.REPAIR SHIP"]=a("AR"),M["SE.IC.SUBMARINE TENDER"]=a("AS"),M["SE.IC.TUG, OCEAN GOING"]=a(R?"AS":"AT"),M["SE.IC.SERVICE CRAFT, YARD, GENERAL"]=a(R?"YY":"YT"),M["SE.IC.BARGE, NOT SELF-PROPELLED"]=a("YB"),M["SE.IC.BARGE, SELF-PROPELLED"]=a("YS"),M["SE.IC.TUG, HARBOUR"]=a("YT"),M["SE.IC.LAUNCH"]=a("YFT"),M["SE.IC.MERCHANT SHIP, GENERAL"]={type:"path",fill:R?O:!C&&O,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.CARGO, GENERAL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"CA":"A"}],M["SE.IC.CONTAINER SHIP"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"C"}],M["SE.IC.DREDGE"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"D"}],M["SE.IC.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},M["SE.IC.ROLL ON-ROLL OFF"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:"30",text:R?"RO":"E"}],M["SE.IC.FERRY"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"FE":"F"}],M["SE.IC.HEAVY LIFT"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"H"}],M["SE.IC.HOVERCRAFT"]={type:"path",d:R?"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z":"m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"},M["SE.IC.HOVERCRAFT 2525D"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"J"}],M["SE.IC.HOVERCRAFT CIVILIAN"]={type:"path",fill:R?O:!C&&O,d:R?"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z":"m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"},M["SE.IC.HOVERCRAFT NONCOMBATANT"]=[{type:"path",d:"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z",strokewidth:!1},R?{type:"text",fill:o,stroke:!1,x:100,y:120,fontsize:30,text:"NC"}:[]],M["SE.IC.MERCHANT SHIP, LASH CARRIER (WITH BARGES)"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"L"}],M["SE.IC.OILER/TANKER"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"OT":"O"}],M["SE.IC.PASSENGER SHIP"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"PA":"P"}],M["SE.IC.TUG, OCEAN GOING CIVILIAN"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"TU":"T"}],M["SE.IC.TOW"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"TW"}],M["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"HZ"}],M["SE.IC.JUNK/DHOW"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"QJ"}],M["SE.IC.BARGE, NOT SELF-PROPELLED"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"YB"}],M["SE.IC.HOSPITAL SHIP2"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"path",stroke:!1,d:"m 95,95 0,-15 10,0 0,15 15,0 0,10 -15,0 0,15 -10,0 0,-15 -15,0 0,-10 z"}],M["SE.IC.FISHING VESSEL"]={type:"path",fill:R?O:!C&&O,d:"m 75,100 0,-15 20,0 0,15 50,0 -15,35 -60,0 -15,-35 z M 105,57.4 105,100 m 30,-35 -30,35"},M["SE.IC.DRIFTER"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"DF"}],M["SE.IC.TRAWLER"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"TR"}],M["SE.IC.FISHING VESSEL DREDGE"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"DR"}],M["SE.IC.LAW ENFORCEMENT VESSEL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],M["SE.IC.LEISURE CRAFT, SAILING BOAT"]={type:"path",fill:R?O:!C&&O,d:"m 105,55 0,40 35,0 z m -5,-5 0,50 m 45,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.LEISURE CRAFT, MOTORIZED"]={type:"path",fill:R?O:!C&&O,d:"m 70,97.4 15,-30 10,0 -15,30 65,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]=[M["SE.IC.LEISURE CRAFT, MOTORIZED"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"RB"}],M["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]=[M["SE.IC.LEISURE CRAFT, MOTORIZED"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"SP"}],M["SE.IC.LEISURE CRAFT, JETSKI"]={type:"path",fill:R?O:!C&&O,d:"m 85,60 -30,45 10,15 75,0 0,-20 -60,0 10,-30 5,0 0,-10 z"},M["SE.IC.UNMANNED SURFACE WATER VEHICLE (USV)"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},M["SE.IC.OWN SHIP"]={type:"path",fill:!1,stroke:e?N:O,d:"m 50,100 100,0 m -50,-50 0,100 m 50,-50 c 0,27.6 -22.4,50 -50,50 -27.6,0 -50,-22.4 -50,-50 0,-27.6 22.4,-50 50,-50 27.6,0 50,22.4 50,50 z"},M["SE.IC.DITCHED AIRCRAFT"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 145,120 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 10,10 25,-30 -10,-10 10,-10 20,20 -10,35 -15,-15 -15,15 z"},M["SE.IC.PERSON IN WATER"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 105,110 10,-10 0,-15 5,0 0,20 -10,10 z m -10,0 -10,-10 0,-15 -5,0 0,20 10,10 z m 5,-5 0,-10 -5,0 -5,-5 0,-10 5,-5 10,0 5,5 0,10 -5,5 -5,0 m -15,25 15,-15 m 45,15 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 45,15 -15,-15"},M["SE.IC.DISTRESSED VESSEL"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 120,65 -20,20 20,-20 m -5,55 -35,-35 0,-20 45,45 z m -30,0 -15,-15 m -15,15 15,-15 m 45,15 15,-15 m 15,15 -15,-15 m -45,15 15,-15"},M["SE.IC.SEA MINELIKE"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 117.7,75 c 3.5,-3.5 7.1,-7.1 7.1,-7.1 l 7.1,7.1 -7.1,7.1 m -49.5,0 c -3.5,-3.5 -7.1,-7.1 -7.1,-7.1 l 7.1,-7.1 7.1,7.1 M 95,70 c 0,-5 0,-10 0,-10 l 10,0 0,10 m 25,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 16.6,0 30,13.4 30,30 z"},M["SE.IC.NAVIGATIONAL"]={type:"path",fill:!1,stroke:e?N:"red",d:"m 75,90 -10,10 70,0 -10,10"},M["SE.IC.ICEBERG"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 75,100 25,-30 25,30 -5,15 -5,-5 -15,20 -15,-20 -5,5 z m -15,0 80,0"},M["SE.IC.FUSED TRACK"]=[a("?"),{type:"path",fill:!1,d:"m 70,65 10,35 -10,35 60,0 -10,-35 10,-35 z"}],M["SE.M1.OWN SHIP"]=l("OWN"),M["SE.M1.ANTIAIR WARFARE"]=l("AAW"),M["SE.M1.ANTISUBMARINE WARFARE"]=l("ASW"),M["SE.M1.ESCORT"]=l("E"),M["SE.M1.ELECTRONIC WARFARE"]=l("EW"),M["SE.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]=l("ISR"),M["SE.M1.MINE COUNTER MEASURES"]=l("MCM"),M["SE.M1.MISSILE DEFENSE"]=l("MD"),M["SE.M1.MEDICAL"]=l("ME"),M["SE.M1.MINE COUNTERMEASURES"]=l("MCM"),M["SE.M1.MINE WARFARE"]=l("MIW"),M["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]=l("RMV"),M["SE.M1.SPECIAL OPERATIONS FORCE"]=l("SOF"),M["SE.M1.SURFACE WARFARE"]=l("SUW"),M["SE.M1.BALLISTIC MISSILE"]=l("B"),M["SE.M1.GUIDED MISSILE"]=l("G"),M["SE.M1.OTHER GUIDED MISSILE"]=l("M"),M["SE.M1.TORPEDO"]=l("T"),M["SE.M1.CYBERSPACE"]=l("CYB"),M["SE.M1.HIJACKER"]=l("HJ"),M["SE.M2.CYBERSPACE"]=r("CYB"),M["SE.M1.DRONE-EQUIPPED"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},M["SE.M1.HELICOPTER-EQUIPPED"]=l("H"),M["SE.M1.BALLISTIC MISSILE DEFENSE, SHOOTER"]=l("BM"),M["SE.M1.BALLISTIC MISSILE DEFENSE, LONG- RANGE SURVEILLANCE AND TRACK (LRS&T)"]=l("ST"),M["SE.M1.SEA-BASE X-BAND"]=l("SBX"),M["SE.M1.HIJACKING/HIJACKED"]=l("H"),M["SE.M2.ANTISUBMARINE WARFARE"]=r("ASW"),M["SE.M2.MINE WARFARE"]=r("MIW"),M["SE.M2.SURFACE WARFARE"]=r("SUW"),M["SE.M2.NUCLEAR POWERED"]=r("N"),M["SE.M2.HEAVY"]=r("H"),M["SE.M2.LIGHT"]=r("L"),M["SE.M2.MEDIUM"]=r("M"),M["SE.M2.DOCK"]=r("D"),M["SE.M2.LOGISTICS"]=r("LOG"),M["SE.M2.TANK"]=r("T"),M["SE.M2.VEHICLE"]=r("V"),M["SE.M2.FAST"]=r("F"),M["SE.M2.AIR-CUSHIONED"]=r("J"),M["SE.M2.AIR-CUSHIONED (USA ONLY)"]=r("AC"),M["SE.M2.HYDROFOIL"]=r("K"),M["SE.M2.AUTONOMOUS CONTROL"]=r("AUT"),M["SE.M2.REMOTELY PILOTED"]=r("RP"),M["SE.M2.EXPENDABLE"]=r("EXP"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}var p={type:"letter",getMetadata:o,getIcons:M,iconParts:[d],icons:function(I,t,E,R){I["S-S-------"]=[],I["S-S-C-----"]=[E["SE.IC.COMBATANT"]],I["S-S-CL----"]=[E["SE.IC.SURFACE COMBATANT, LINE"]],I["S-S-CLCV--"]=[E["SE.IC.CARRIER"]],I["S-S-CLBB--"]=[E["SE.IC.BATTLESHIP"]],I["S-S-CLCC--"]=[E["SE.IC.CRUISER"]],I["S-S-CLDD--"]=[E["SE.IC.DESTROYER"]],I["S-S-CLFF--"]=[E["SE.IC.FRIGATE"]],I["S-S-CLLL--"]=[E["SE.IC.LITTORAL COMBATANT SHIP"]],I["S-S-CLLLAS"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.ANTISUBMARINE WARFARE"]],I["S-S-CLLLMI"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.MINE WARFARE"]],I["S-S-CLLLSU"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.SURFACE WARFARE"]],I["S-S-CA----"]=[E["SE.IC.AMPHIBIOUS WARFARE SHIP"]],I["S-S-CALA--"]=[R?E["SE.IC.AMPHIBIOUS ASSAULT"]:E["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]],I["S-S-CALS--"]=[E["SE.IC.LANDING SHIP"]],I["S-S-CALSM-"]=[E["SE.IC.LANDING SHIP"],E["SE.M2.MEDIUM"]],I["S-S-CALST-"]=[E["SE.IC.LANDING SHIP"],E["SE.M2.TANK"]],I["S-S-CALC--"]=[E["SE.IC.LANDING CRAFT"]],I["S-S-CM----"]=[E["SE.IC.MINE WARFARE VESSEL"]],I["S-S-CMML--"]=[E["SE.IC.MINELAYER"]],I["S-S-CMMS--"]=[E["SE.IC.MINESWEEPER"]],I["S-S-CMMH--"]=[E["SE.IC.MINEHUNTER"]],I["S-S-CMMA--"]=[E["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]],I["S-S-CMMD--"]=[E["SE.IC.MINESWEEPER, DRONE"]],I["S-S-CP----"]=[E["SE.IC.PATROL"]],I["S-S-CPSB--"]=[E["SE.IC.PATROL CRAFT"]],I["S-S-CPSU--"]=[E["SE.IC.PATROL ANTI SUBMARINE WARFARE"]],I["S-S-CPSUM-"]=[E["SE.IC.PATROL ANTISHIP MISSILE"]],I["S-S-CPSUT-"]=[E["SE.IC.PATROL TORPEDO"]],I["S-S-CPSUG-"]=[E["SE.IC.PATROL GUN"]],I["S-S-CH----"]=[E["SE.IC.HOVERCRAFT"]],I["S-S-G-----"]=[E["SE.IC.NAVY TASK ORGANIZATION UNIT"]],I["S-S-GF----"]=I["S-S-GT----"]=[E["SE.IC.NAVY TASK FORCE"]],I["S-S-GG----"]=[E["SE.IC.NAVY TASK GROUP"]],I["S-S-GU----"]=[E["SE.IC.NAVY TASK UNIT"]],I["S-S-GE----"]=[E["SE.IC.NAVY TASK ELEMENT"]],I["S-S-GC----"]=[E["SE.IC.CONVOY"]],I["S-S-CD----"]=[E["SE.IC.SEA SURFACE DECOY"]],I["S-S-CU----"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"]],I["S-S-CUM---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.MINE COUNTERMEASURES"]],I["S-S-CUS---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.ANTISUBMARINE WARFARE"]],I["S-S-CUN---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.SURFACE WARFARE"]],I["S-S-CUR---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]],I["S-S-N-----"]=[E["SE.IC.NONCOMBATANT"]],I["S-S-NR----"]=[E["SE.IC.AUXILIARY SHIP"]],I["S-S-NRA---"]=[E["SE.IC.AMMUNITION SHIP"]],I["S-S-NRO---"]=[E["SE.IC.OILER, REPLENISHMENT"]],I["S-S-NF----"]=I["S-S-NFT---"]=[E["SE.IC.TUG, OCEAN GOING"]],I["S-S-NI----"]=[E["SE.IC.INTELLIGENCE COLLECTOR"]],I["S-S-NM----"]=[E["SE.IC.HOSPITAL SHIP"]],I["S-S-NS----"]=[E["SE.IC.SERVICE CRAFT, YARD, GENERAL"]],I["S-S-NR----"]=[E["SE.IC.REPAIR SHIP"]],I["S-S-NTS---"]=[E["SE.IC.SUBMARINE TENDER"]],I["S-S-NH----"]=[E["SE.IC.HOVERCRAFT NONCOMBATANT"]],I["S-S-X-----"]=[],I["S-S-XM----"]=[E["SE.IC.MERCHANT SHIP, GENERAL"]],I["S-S-XMC---"]=[E["SE.IC.CARGO, GENERAL"]],I["S-S-XME---"]=I["S-S-XMR---"]=[E["SE.IC.ROLL ON-ROLL OFF"]],I["S-S-XMO---"]=[E["SE.IC.OILER/TANKER"]],I["S-S-XMT---"]=I["S-S-XMTU--"]=[E["SE.IC.TUG, OCEAN GOING CIVILIAN"]],I["S-S-XMF---"]=[E["SE.IC.FERRY"]],I["S-S-XMP---"]=[E["SE.IC.PASSENGER SHIP"]],I["S-S-XMH---"]=[E["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]],I["S-S-XMD---"]=[E["SE.IC.DREDGE"]],I["S-S-XMTO--"]=[E["SE.IC.TOW"]],I["S-S-XF----"]=[E["SE.IC.FISHING VESSEL"]],I["S-S-XFDF--"]=[E["SE.IC.DRIFTER"]],I["S-S-XFTR--"]=[E["SE.IC.TRAWLER"]],I["S-S-XFDR--"]=[E["SE.IC.FISHING VESSEL DREDGE"]],I["S-S-XR----"]=[E["SE.IC.LEISURE CRAFT, SAILING BOAT"]],I["S-S-XL----"]=[E["SE.IC.LAW ENFORCEMENT VESSEL"]],I["S-S-XH----"]=[E["SE.IC.HOVERCRAFT CIVILIAN"]],I["S-S-XA----"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED"]],I["S-S-XAR---"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]],I["S-S-XAS---"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]],I["S-S-XP----"]=[E["SE.IC.LEISURE CRAFT, JETSKI"]],I["S-S-O-----"]=[E["SE.IC.OWN SHIP"]],I["S-S-E-----"]=[],I["S-S-ED----"]=[E["SE.IC.DITCHED AIRCRAFT"]],I["S-S-EP----"]=[E["SE.IC.PERSON IN WATER"]],I["S-S-EV----"]=[E["SE.IC.DISTRESSED VESSEL"]],I["S-S-Z-----"]=[],I["S-S-ZM----"]=[E["SE.IC.SEA MINELIKE"]],I["S-S-ZN----"]=[E["SE.IC.NAVIGATIONAL"]],I["S-S-ZI----"]=[E["SE.IC.ICEBERG"]]}};function D(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=t.frame,S=t.numberSIDC,N=E.iconColor[C],O=E.iconFillColor[C],G=E.white[C],o=E.black[C],M={};for(var i in M["SU.IC.MILITARY"]=a("MIL"),M["SU.IC.CIVILIAN"]=a("CIV"),M["SU.IC.CIVILIAN"].fill=R||S?O:!T&&O,M["SU.IC.CIVILIAN"].stroke=o,M["SU.IC.CIVILIAN"].strokewidth=3,M["SU.IC.MANUAL TRACK"]=a("MAN"),M["SU.IC.SUBMARINE"]={type:"path",d:"m 75,85 50,0 15,15 -15,15 -50,0 -15,-15 z"},M["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 20,0 0,-10 10,0 0,10 20,0 10,10 -10,10 z"},M["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]=[{type:"path",d:"m 75,110 -10,-10 10,-10 20,0 0,-10 10,0 0,10 20,0 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE NUCLEAR PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},M["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]=[{type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE ATTACK (SSN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"A"},M["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"M"},M["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"G"},M["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"B"},M["SU.IC.SUBMARINE, SURFACED"]=[{type:"path",d:"m 75,80 50,0 15,15 -15,15 -50,0 -15,-15 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE, BOTTOMED"]=[{type:"path",d:"m 75,80 50,0 15,15 -15,15 -50,0 -15,-15 z"},{type:"path",d:"m 70,120 0,-5 60,0 0,5 z"}],M["SU.IC.SUBMARINE, SNORKELING"]=[{type:"path",d:"m 75,120 -10,-10 10,-10 20,0 0,-20 10,0 0,20 20,0 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,95 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.OTHER SUBMERSIBLE"]={type:"path",d:"m 85,90 0,-10 30,0 0,10 m 20,10 c 0,5.5 -15.7,10 -35,10 -19.3,0 -35,-4.5 -35,-10 0,-5.5 15.7,-10 35,-10 19.3,0 35,4.5 35,10 z"},M["SU.IC.OTHER SUBMERSIBLE, SURFACED"]=[M["SU.IC.OTHER SUBMERSIBLE"],{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},M["SU.IC.NON-SUBMARINE"]=R&&!S?{type:"text",stroke:!1,x:100,y:110,fontsize:35,text:"NON"}:[{type:"text",stroke:!1,x:100,y:100,fontsize:25,text:"NON"},{type:"text",stroke:!1,x:100,y:120,fontsize:25,text:"SUB"}],M["SU.IC.DIVER, MILITARY"]={type:"path",stroke:!1,d:"M 100 80 C 93.7 80 88.3 82.7 85.8 88.3 L 85.8 88.3 L 77.8 88.3 L 77.8 105 L 85.8 105 L 85.8 104.8 C 87.3 108.2 88.8 110 92 111.7 L 92.1 111.7 L 84.2 120 L 115.8 120 L 107.9 111.7 L 108 111.7 C 111.1 110 112.8 108.3 114.3 105 L 122.2 105 L 122.2 88.3 L 114.3 88.3 L 114.3 88.3 C 111.7 82.8 106.3 80 100 80 z M 100 86.6 C 105.4 86.6 109.8 91.1 109.8 96.6 C 109.8 102.1 105.4 106.6 100 106.6 C 94.6 106.6 90.1 102.1 90.1 96.6 C 90.1 91.1 94.6 86.6 100 86.6 z M 100 89.6 C 96.2 89.6 93.1 92.7 93.1 96.6 C 93.1 100.5 96.2 103.6 100 103.6 C 103.8 103.6 106.8 100.5 106.8 96.6 C 106.8 92.7 103.8 89.6 100 89.6 z"},M["SU.IC.SUBMERSIBLE, CIVILIAN"]={type:"path",fill:R?O:!T&&O,d:"m 85,90 0,-10 30,0 0,10 m 20,10 c 0,5.5 -15.7,10 -35,10 -19.3,0 -35,-4.5 -35,-10 0,-5.5 15.7,-10 35,-10 19.3,0 35,4.5 35,10 z"},M["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV), CIVILIAN"]={type:"path",fill:R?O:!T&&O,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},M["SU.M1.CYBERSPACE"]=l("CYB"),M["SU.M1.HIJACKER"]=l("HJ"),M["SU.M2.CYBERSPACE"]=r("CYB"),M["SU.IC.DIVER, CIVILIAN"]={type:"path",fill:O,d:"M 114.3,94 C 114.3,102.3 107.9,109 100,109 c -7.9,0 -14.2,-6.7 -14.2,-15 0,-8.3 6.4,-15 14.2,-15 7.9,0 14.3,6.7 14.3,15 z m 0,27 14.3,15 -57,0 14.3,-15 M 125.7,79 l 14.3,0 0,30 -14.3,0 m -51.3,0 -14.3,0 0,-30 14.3,0 m 54.2,15 c 0,16.6 -12.8,30 -28.5,30 -15.7,0 -28.5,-13.4 -28.5,-30 C 71.5,77.4 84.3,64 100,64 115.7,64 128.5,77.4 128.5,94 z"},M["SU.IC.UNDERWATER WEAPON"]=a("WPN"),M["SU.IC.TORPEDO"]={type:"path",d:"m 65,105 -5,-5 5,-5 60,0 c 0,0 5,5 5,5 l 5,-5 0,10 -5,-5 -5,5 z"},M["SU.IC.IMPROVISED EXPLOSIVE DEVICE (IED)"]=a("IED"),M["SU.IC.UNDERWATER DECOY"]={type:"path",stroke:o,d:R?"M 105,110 90,95 105,80 z M 85,110 70,95 85,80 z m 40,-30 -15,15 15,15 z m -55,40 0,-5 55,0 0,5 z":"M 105,120 90,105 105,90 z M 85,120 70,105 85,90 z m 40,-30 -15,15 15,15 z m -55,-5 0,-5 55,0 0,5 z",fill:R?N:O},M["SU.IC.UNDERWATER DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},M["SU.IC.ECHO TRACKER CLASSIFIER (ETC)/POSSIBLE CONTACT (POSCON)"]={type:"text",stroke:!1,x:100,y:130,fontsize:60,text:"?"},M["SU.IC.FUSED TRACK"]=[a("?"),{type:"path",fill:!1,d:"m 70,65 10,35 -10,35 60,0 -10,-35 10,-35"}],M["SU.IC.SEA MINE"]={type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},M["SU.IC.SEA MINE - BOTTOM"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE - MOORED"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE - FLOATING"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE - RISING"]=[M["SU.IC.SEA MINE"],{type:"path",fill:S&&A?"":!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE (IN OTHER POSITION)"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 130,100 15,0 M 70,100 l -15,0"}],M["SU.IC.SEA MINE - KINGFISHER"]=[M["SU.IC.SEA MINE"],{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"K"}],M["SU.IC.SEA MINE - SMALL OBJECT"]=[M["SU.IC.SEA MINE"],{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"SO"}],M["SU.IC.SEA MINE EXERCISE MINE"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"EX"},S?[]:{type:"text",stroke:!1,fill:!R&&!S||e?N:o,x:150,y:46,fontsize:40,text:"X"}],M["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE EXERCISE MINE - MOORED"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE EXERCISE MINE - RISING"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE DECOY"]={type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 106.6,101.6 0,26.3 -13.1,-13.1 z m -19.7,0 0,26.3 -13.1,-13.1 z m 39.4,0 0,26.3 -13.1,-13.1 13.1,-13.1 M 100,75.3 c -14.5,0 -26.3,11.8 -26.3,26.3 l 52.5,0 C 126.3,87.1 114.5,75.3 100,75.3 z m -6.6,0 0,-13.1 13.1,0 0,13.1 m -29.8,12.3 -9.3,-9.3 9.3,-9.3 9.3,9.3 m 27.9,0 9.3,-9.3 9.3,9.3 -9.3,9.3"},M["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]=[M["SU.IC.SEA MINE DECOY"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE DECOY, MOORED"]=[M["SU.IC.SEA MINE DECOY"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75,140 50,0 M 100,100 l 0,40"}],M["SU.IC.SEA MINE NEUTRALIZED"]=[{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},{type:"path",strokewidth:5,stroke:A?G:o,d:"m 135,65 -70,70 m 0,-70 70,70"}],M["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NEUTRALIZED - MOORED"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE NEUTRALIZED - RISING"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 130,100 15,0 M 70,100 l -15,0"}],M["SU.IC.SEA MINE MILEC"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"E"}],M["SU.IC.SEA MINE MILEC - BOTTOM"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE MILEC - MOORED"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE MILEC - FLOATING"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE MINE ANCHOR"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!(!R&&!S||e)&&o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:105,fontsize:18,text:"ANCR"}],M["SU.IC.SEA MINE MILCO"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,141,42)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},S?[]:{type:"text",stroke:!1,fill:!R&&!S||e?N:o,x:100,y:112,fontsize:30,text:"#"}],M["SU.IC.SEA MINE MILCO - BOTTOM"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,141,42)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE MILCO - MOORED"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE MILCO - FLOATING"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"1"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"2"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"3"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"4"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"5"},M["SU.IC.SEA MINE NEGATIVE REACQUISITION"]=[{type:"path",strokedasharray:"8,4",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"NR"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"OB"}],M["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]=[{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:!R&&!S||e||A?G:o,x:100,y:112,fontsize:30,text:"OB"},{type:"path",strokewidth:5,stroke:A?G:o,d:"m 135,65 -70,70 m 0,-70 70,70"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"N"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]=[{type:"path",strokedasharray:"8,4",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Hostile,d:"m 85,65 30,0 20,20 0,30 -20,20 -30,0 -20,-20 0,-30 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Hostile,x:100,y:110,fontsize:30,text:"UXO"}],M["SU.IC.ENVIRONMENTAL REPORT LOCATION"]=[{type:"path",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Neutral,d:"m 70,70 0,60 60,0 0,-60 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Neutral,x:100,y:122,fontsize:60,text:"E"}],M["SU.IC.DIVE REPORT LOCATION"]=[{type:"path",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Neutral,d:"m 70,70 0,60 60,0 0,-60 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Neutral,x:100,y:122,fontsize:60,text:"D"}],M["SU.IC.SEABED INSTALLATION/MANMADE"]={type:"path",fill:O,stroke:o,d:"m 140,125 -80,0 10,-30 10,20 20,-50 20,50 10,-25 z"},M["SU.IC.SEABED INSTALLATION, MAN-MADE, MILITARY"]={type:"path",d:"m 75,80 0,40 50,0 0,-15 -15,0 0,-10 -20,0 0,-15 z"},M["SU.IC.SEABED INSTALLATION, MAN-MADE, NON-MILITARY"]={type:"path",fill:O,d:"m 75,80 0,40 50,0 0,-15 -15,0 0,-10 -20,0 0,-15 z"},M["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]={type:"path",d:"m 140,125 -80,0 10,-30 10,20 20,-50 20,50 10,-25 z"},M["SU.IC.WRECK"]={type:"path",d:"m 125,85 0,30 m -50,-30 0,30 m 25,-40 0,45 m -40,-20 80,0"},M["SU.IC.MARINE LIFE"]={type:"path",d:"m 60,100 20,-20 45,20 15,-10 0,20 -15,-10 -45,20 z"},M["SU.IC.SEA ANOMALY"]={type:"path",fill:!1,d:"m 65,100 15,-20 20,30 20,-30 15,20 m -70,10 15,-20 20,30 20,-30 15,20"},M["SU.M1.ANTISUBMARINE WARFARE"]=l("ASW"),M["SU.M1.AUXILIARY"]=l("AUX"),M["SU.M1.COMMAND AND CONTROL"]=l("C2"),M["SU.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]=l("ISR"),M["SU.M1.MINE COUNTERMEASURES"]=l("MCM"),M["SU.M1.MINE WARFARE"]=l("MIW"),M["SU.M1.SURFACE WARFARE"]=l("SUW"),M["SU.M1.ATTACK"]=l("A"),M["SU.M1.BALLISTIC MISSILE"]=l("B"),M["SU.M1.GUIDED MISSILE"]=l("G"),M["SU.M1.OTHER GUIDED MISSILES (POINT DEFENCE)"]=l("M"),M["SU.M1.SPECIAL OPERATIONS FORCE"]=l("SOF"),M["SU.M1.POSSIBLE SUBMARINE - LOW 1"]=l("P1"),M["SU.M1.POSSIBLE SUBMARINE - LOW 2"]=l("P2"),M["SU.M1.POSSIBLE SUBMARINE - HIGH 3"]=l("P3"),M["SU.M1.POSSIBLE SUBMARINE - HIGH 4"]=l("P4"),M["SU.M1.PROBABLE SUBMARINE"]=l("PB"),M["SU.M1.CERTAIN SUBMARINE"]=l("CT"),M["SU.M1.ANTI-TORPEDO TORPEDO"]=l("ATT"),M["SU.M1.HIJACKING/HIJACKED"]=l("H"),M["SU.M2.POSSIBLE SUBMARINE - LOW 1"]=r("P1"),M["SU.M2.POSSIBLE SUBMARINE - LOW 2"]=r("P2"),M["SU.M2.POSSIBLE SUBMARINE - HIGH 3"]=r("P3"),M["SU.M2.POSSIBLE SUBMARINE - HIGH 4"]=r("P4"),M["SU.M2.PROBABLE SUBMARINE"]=r("PB"),M["SU.M2.AIR INDEPENDENT PROPULSION"]=r("AI"),M["SU.M2.CERTSUB"]=r("CT"),M["SU.M2.DIESEL PROPULSION"]=r("D"),M["SU.M2.DIESEL - TYPE 1"]=r("D1"),M["SU.M2.DIESEL - TYPE 2"]=r("D2"),M["SU.M2.DIESEL - TYPE 3"]=r("D3"),M["SU.M2.NUCLEAR POWERED"]=r("N"),M["SU.M2.NUCLEAR - TYPE 1"]=r("N1"),M["SU.M2.NUCLEAR - TYPE 2"]=r("N2"),M["SU.M2.NUCLEAR - TYPE 3"]=r("N3"),M["SU.M2.NUCLEAR - TYPE 4"]=r("N4"),M["SU.M2.NUCLEAR - TYPE 5"]=r("N5"),M["SU.M2.NUCLEAR - TYPE 6"]=r("N6"),M["SU.M2.NUCLEAR - TYPE 7"]=r("N7"),M["SU.M2.AUTONOMOUS CONTROL"]=r("AUT"),M["SU.M2.REMOTELY PILOTED"]=r("RP"),M["SU.M2.EXPENDABLE"]=r("EXP"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}var m={type:"letter",getMetadata:o,getIcons:M,iconParts:[D],icons:function(I,t,E,R){I["S-U-------"]=[],I["S-U-S-----"]=[E["SU.IC.SUBMARINE"]],I["S-U-SF----"]=[E["SU.IC.SUBMARINE, SURFACED"]],I["S-U-SB----"]=[E["SU.IC.SUBMARINE, BOTTOMED"]],I["S-U-SR----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.CERTSUB"]],I["S-U-SX----"]=[E["SU.IC.NON-SUBMARINE"]],I["S-U-SN----"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"]],I["S-U-SNF---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]],I["S-U-SNA---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SNM---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SNG---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SNB---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SC----"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]],I["S-U-SCF---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]],I["S-U-SCA---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SCM---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SCG---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SCB---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SO----"]=[E["SU.IC.OTHER SUBMERSIBLE"]],I["S-U-SOF---"]=[E["SU.IC.OTHER SUBMERSIBLE, SURFACED"]],I["S-U-SU----"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-SUM---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.MINE COUNTERMEASURES"]],I["S-U-SUS---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.ANTISUBMARINE WARFARE"]],I["S-U-SUN---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.SURFACE WARFARE"]],I["S-U-S1----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - LOW 1"]],I["S-U-S2----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - LOW 2"]],I["S-U-S3----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - HIGH 3"]],I["S-U-S4----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - HIGH 4"]],I["S-U-SL----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.PROBABLE SUBMARINE"]],I["S-U-SK----"]=[E["SU.IC.SUBMARINE, SNORKELING"]],I["S-U-W-----"]=[E["SU.IC.UNDERWATER WEAPON"]],I["S-U-WT----"]=[E["SU.IC.TORPEDO"]],I["S-U-WM----"]=[E["SU.IC.SEA MINE"]],I["S-U-WMD---"]=[E["SU.IC.SEA MINE NEUTRALIZED"]],I["S-U-WMG---"]=[E["SU.IC.SEA MINE - BOTTOM"]],I["S-U-WMGD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]],I["S-U-WMGX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]],I["S-U-WMGE--"]=[E["SU.IC.SEA MINE MILEC - BOTTOM"]],I["S-U-WMGC--"]=[E["SU.IC.SEA MINE MILCO - BOTTOM"]],I["S-U-WMGR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]],I["S-U-WMGO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]],I["S-U-WMM---"]=[E["SU.IC.SEA MINE - MOORED"]],I["S-U-WMMD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - MOORED"]],I["S-U-WMMX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - MOORED"]],I["S-U-WMME--"]=[E["SU.IC.SEA MINE MILEC - MOORED"]],I["S-U-WMMC--"]=[E["SU.IC.SEA MINE MILCO - MOORED"]],I["S-U-WMMR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]],I["S-U-WMMO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]],I["S-U-WMF---"]=[E["SU.IC.SEA MINE - FLOATING"]],I["S-U-WMFD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]],I["S-U-WMFX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]],I["S-U-WMFE--"]=[E["SU.IC.SEA MINE MILEC - FLOATING"]],I["S-U-WMFC--"]=[E["SU.IC.SEA MINE MILCO - FLOATING"]],I["S-U-WMFR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]],I["S-U-WMFO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]],I["S-U-WMO---"]=[E["SU.IC.SEA MINE (IN OTHER POSITION)"]],I["S-U-WMOD--"]=[E["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]],I["S-U-WMX---"]=[E["SU.IC.SEA MINE EXERCISE MINE"]],I["S-U-WME---"]=[E["SU.IC.SEA MINE MILEC"]],I["S-U-WMA---"]=[E["SU.IC.SEA MINE MINE ANCHOR"]],I["S-U-WMC---"]=[E["SU.IC.SEA MINE MILCO"]],I["S-U-WMR---"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION"]],I["S-U-WMB---"]=[E["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]],I["S-U-WMBD--"]=[E["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]],I["S-U-WMN---"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]],I["S-U-WMS---"]=[E["SU.IC.SEA MINE - RISING"]],I["S-U-WMSX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - RISING"]],I["S-U-WMSD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - RISING"]],I["S-U-WV----"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-WD----"]=[E["SU.IC.UNDERWATER DECOY"]],I["S-U-WDM---"]=[E["SU.IC.SEA MINE DECOY"]],I["S-U-WDMG--"]=[E["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]],I["S-U-WDMM--"]=[E["SU.IC.SEA MINE DECOY, MOORED"]],I["S-U-N-----"]=[E["SU.IC.NON-SUBMARINE"]],I["S-U-ND----"]=[E["SU.IC.DIVER, CIVILIAN"]],I["S-U-NB----"]=[],I["S-U-E-----"]=[E["SU.IC.ENVIRONMENTAL REPORT LOCATION"]],I["S-U-V-----"]=[E["SU.IC.DIVE REPORT LOCATION"]],I["S-U-X-----"]=[E["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]],I["S-U-NBS---"]=[E["SU.IC.SEABED INSTALLATION/MANMADE"]],I["S-U-NBR---"]=[E["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]],I["S-U-NBW---"]=[E["SU.IC.WRECK"]],I["S-U-NM----"]=[E["SU.IC.MARINE LIFE"]],I["S-U-NA----"]=[E["SU.IC.SEA ANOMALY"]]}},F={type:"letter",getMetadata:o,getIcons:M,iconParts:[c,P],icons:function(I,t,E,R){I["S-F-------"]=[E["GR.IC.SPECIAL OPERATIONS FORCES"]],I["S-F-A-----"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AF----"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AFA---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.ATTACK"]],I["S-F-AFK---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.REFUEL"]],I["S-F-AFU---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.UTILITY"]],I["S-F-AFUL--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.LIGHT"]],I["S-F-AFUM--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.MEDIUM"]],I["S-F-AFUH--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.HEAVY"]],I["S-F-AV----"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.VSTOL"]],I["S-F-AH----"]=R?[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["GR.IC.AVIATION ROTARY WING 2525C"]]:[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AHH---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.COMBAT SEARCH AND RESCUE"]],I["S-F-AHA---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.ATTACK"]],I["S-F-AHU---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.UTILITY"]],I["S-F-AHUL--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.LIGHT"]],I["S-F-AHUM--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.MEDIUM"]],I["S-F-AHUH--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.HEAVY"]],I["S-F-SN----"]=I["S-F-N-----"]=[E["GR.IC.NAVAL"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNS---"]=I["S-F-NS----"]=[E["GR.IC.SEA-AIR-LAND"]],I["S-F-SNU---"]=I["S-F-NU----"]=[E["SOF.IC.UNDERWATER DEMOLITION TEAM"]],I["S-F-SNB---"]=I["S-F-NB----"]=[E["GR.IC.COMBATANT"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNN---"]=I["S-F-NN----"]=[E["GR.IC.SUBMARINE NUCLEAR PROPULSION"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-G-----"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.SPECIAL OPERATIONS FORCES"]],I["S-F-GS----"]=[E["GR.IC.SPECIAL FORCES"]],I["S-F-GR----"]=I["S-F-GSR---"]=[E["GR.IC.FF.INFANTRY"],E["AIR.M1.RECONNAISSANCE"],E["GR.M2.AIRBORNE"]],I["S-F-GP----"]=I["S-F-GSP---"]=[E["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]],I["S-F-GPA---"]=I["S-F-GSPA--"]=[E["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"],s._translate(0,-30,s._scale(.7,E["AR.I.MILITARY FIXED WING"]))],I["S-F-GC----"]=I["S-F-GCA---"]=[E["GR.IC.CIVIL AFFAIRS"]],I["S-F-GB----"]=I["S-F-B-----"]=[E["GR.IC.SPECIAL OPERATIONS FORCES"],E["GR.M2.SUPPORT"]]}};function f(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=E.iconColor[C],S={"SI.IC.COMMUNICATIONS":{type:"path",d:"m 93,120 14,0 0,0 m -7,-27 0,27 m 2,-25 8,2 -5,5 13,3 m -20,-10 -8,2 5,5 -14,3 m 21,-13 8,-2 -5,-5 13,-3 m -37,0 14,3 -5,5 8,2",fill:!1},"SI.IC.RADAR":{type:"path",d:"m 115,90 -15,15 0,-15 -15,15 M 80,85 c 0,25 15,35 35,35",fill:!1}};for(var N in S["SI.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]=a("J"),S["SI.M1.ANTI-AIRCRAFT FIRE CONTROL"]=l("AA"),S["SI.M1.AIRBORNE SEARCH AND BOMBING"]=l("AB"),S["SI.M1.AIRBORNE INTERCEPT"]=l("AI"),S["SI.M1.ALTIMETER"]=l("AL"),S["SI.M1.AIRBORNE RECONNAISSANCE AND MAPPING"]=l("AM"),S["SI.M1.AIR TRAFFIC CONTROL"]=l("AT"),S["SI.M1.BEACON TRANSPONDER (NOT IFF)"]=l("BN"),S["SI.M1.BATTLEFIELD SURVEILLANCE"]=l("BS"),S["SI.M1.CONTROLLED APPROACH"]=l("CA"),S["SI.M1.CONTROLLED INTERCEPT"]=l("CI"),S["SI.M1.CELLULAR/MOBILE"]=l("CM"),S["SI.M1.COASTAL SURVEILLANCE"]=l("CS"),S["SI.M1.CYBER"]=l("CYB"),S["SI.M1.DECOY/MIMIC"]=l("DC"),S["SI.M1.DATA TRANSMISSION"]=l("DT"),S["SI.M1.EARTH SURVEILLANCE"]=l("ES"),S["SI.M1.EARLY WARNING"]=l("EW"),S["SI.M1.FIRE CONTROL"]=l("FC"),S["SI.M1.GROUND MAPPING"]=l("GM"),S["SI.M1.HEIGHT FINDING"]=l("HF"),S["SI.M1.HARBOR SURVEILLANCE"]=l("HS"),S["SI.M1.IDENTIFICATION, FRIEND OR FOE (INTERROGATOR)"]=l("IF"),S["SI.M1.INSTRUMENT LANDING SYSTEM"]=l("IL"),S["SI.M1.IONOSPHERIC SOUNDING"]=l("IS"),S["SI.M1.IDENTIFICATION, FRIEND OR FOE (TRANSPONDER)"]=l("IT"),S["SI.M1.BARRAGE JAMMER"]=l("JB"),S["SI.M1.CLICK JAMMER"]=l("JC"),S["SI.M1.DECEPTIVE JAMMER"]=l("JD"),S["SI.M1.FREQUENCY SWEPT JAMMER"]=l("JF"),S["SI.M1.JAMMER (GENERAL)"]=l("JG"),S["SI.M1.NOISE JAMMER"]=l("JN"),S["SI.M1.PULSED JAMMER"]=l("JP"),S["SI.M1.REPEATER JAMMER"]=l("JR"),S["SI.M1.SPOT NOISE JAMMER"]=l("JS"),S["SI.M1.TRANSPONDER JAMMER"]=l("JT"),S["SI.M1.MISSILE ACQUISITION"]=l("MA"),S["SI.M1.MISSILE CONTROL"]=l("MC"),S["SI.M1.MISSILE DOWNLINK"]=l("MD"),S["SI.M1.METEOROLOGICAL"]=l("ME"),S["SI.M1.MULTI-FUNCTION"]=l("MF"),S["SI.M1.MISSILE GUIDANCE"]=l("MG"),S["SI.M1.MISSILE HOMING"]=l("MH"),S["SI.M1.MISSILE TRACKING"]=l("MT"),S["SI.M1.NAVIGATIONAL/GENERAL"]=l("NA"),S["SI.M1.NAVIGATIONAL/DISTANCE MEASURING EQUIPMENT"]=l("ND"),S["SI.M1.NAVIGATION/TERRAIN FOLLOWING"]=l("NT"),S["SI.M1.NAVIGATIONAL/WEATHER AVOIDANCE"]=l("NW"),S["SI.M1.OMNI-LINE OF SIGHT (LOS)"]=l("OL"),S["SI.M1.PROXIMITY USE"]=l("PF"),S["SI.M1.POINT-TO-POINT LINE OF SIGHT (LOS)"]=l("PP"),S["SI.M1.INSTRUMENTATION"]=l("RI"),S["SI.M1.RANGE ONLY"]=l("RO"),S["SI.M1.SONOBUOY"]=l("SB"),S["SI.M1.SATELLITE DOWNLINK"]=l("SD"),S["SI.M1.SPACE"]=l("SP"),S["SI.M1.SURFACE SEARCH"]=l("SS"),S["SI.M1.SHELL TRACKING"]=l("ST"),S["SI.M1.SATELLITE UPLINK"]=l("SU"),S["SI.M1.TARGET ACQUISITION"]=l("TA"),S["SI.M1.TARGET ILLUMINATION"]=l("TI"),S["SI.M1.TROPOSPHERIC SCATTER"]=l("TS"),S["SI.M1.TARGET TRACKING"]=l("TT"),S["SI.M1.UNKNOWN"]=l("UN"),S["SI.M1.VIDEO REMOTING"]=l("VR"),S["SI.M1.EXPERIMENTAL"]=l("XP"),S["SI.M1.ALPHA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"A"},S["SI.M1.BRAVO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"B"},S["SI.M1.CHARLIE"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"C"},S["SI.M1.DELTA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"D"},S["SI.M1.ECHO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"E"},S["SI.M1.FOXTROT"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"F"},S["SI.M1.HOTEL"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"H"},S["SI.M1.INDY"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"I"},S["SI.M1.MIKE"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"M"},S["SI.M1.OSCAR"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"O"},S["SI.M1.PAPA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"P"},S["SI.M1.SIERRA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"S"},S["SI.M1.TANGO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"T"},S["SI.M1.UNIFORM"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"U"},S["SI.M2.ALPHA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"A"},S["SI.M2.BRAVO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"B"},S["SI.M2.CHARLIE"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"C"},S["SI.M2.CYBER"]=r("CYB"),S["SI.M2.DELTA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"D"},S["SI.M2.ECHO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"E"},S["SI.M2.FOXTROT"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"F"},S["SI.M2.GOLF"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"G"},S["SI.M2.INDY"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"I"},S["SI.M2.LIMA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"L"},S["SI.M2.MIKE"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"M"},S["SI.M2.NOVEMBER"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"N"},S["SI.M2.PAPA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"P"},S["SI.M2.SIERRA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"S"},S["SI.M2.TANGO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"T"},S["SI.M2.UNIFORM"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"U"},S["SI.M2.WHISKEY"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"W"},S["SI.M3.SPACE"]={type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"S"},S["SI.M3.GROUND"]={type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"G"},S)S.hasOwnProperty(N)&&(I.hasOwnProperty(N)&&console.warn("Override of: "+N),n.call(this,S[N],T),I[N]=S[N])}var z={type:"letter",getMetadata:o,getIcons:M,iconParts:[f],icons:function(I,t,E,R){I["I-P-S-----"]=[],I["I-P-SC----"]=[],I["I-P-SCD---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.DELTA"],E["SI.M3.SPACE"]],I["I-P-SR----"]=[],I["I-P-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"],E["SI.M3.SPACE"]],I["I-P-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.SIERRA"],E["SI.M3.SPACE"]],I["I-P-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"],E["SI.M3.SPACE"]],I["I-P-SRM---"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"],E["SI.M3.SPACE"]],I["I-P-SRT---"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"],E["SI.M3.SPACE"]],I["I-P-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.PAPA"],E["SI.M3.SPACE"]],I["I-P-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"],E["SI.M3.SPACE"]],I["I-A-S-----"]=[],I["I-A-SC----"]=[],I["I-A-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"]],I["I-A-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-A-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-A-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-A-SR----"]=[],I["I-A-SRAI--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.INDY"]],I["I-A-SRAS--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.BRAVO"]],I["I-A-SRC---"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.INDY"]],I["I-A-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-A-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-A-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"]],I["I-A-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"]],I["I-A-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"]],I["I-A-SRMD--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.DELTA"]],I["I-A-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"]],I["I-A-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"]],I["I-A-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-A-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"]],I["I-A-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-A-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"]],I["I-A-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]],I["I-G-S-----"]=[],I["I-G-SC----"]=[],I["I-G-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"],E["SI.M3.GROUND"]],I["I-G-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"],E["SI.M3.GROUND"]],I["I-G-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"],E["SI.M3.GROUND"]],I["I-G-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"],E["SI.M3.GROUND"]],I["I-G-SCT---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.TANGO"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SR----"]=[],I["I-G-SRAT--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRAA--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRB---"]=[E["SI.IC.RADAR"],E["SI.M1.BRAVO"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SRCS--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SRCA--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"],E["SI.M3.GROUND"]],I["I-G-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"],E["SI.M3.GROUND"]],I["I-G-SRH---"]=[E["SI.IC.RADAR"],E["SI.M1.HOTEL"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRMM--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ECHO"],E["SI.M3.GROUND"]],I["I-G-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"],E["SI.M3.GROUND"]],I["I-G-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"],E["SI.M3.GROUND"]],I["I-G-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"],E["SI.M3.GROUND"]],I["I-S-S-----"]=[],I["I-S-SC----"]=[],I["I-S-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"]],I["I-S-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-S-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-S-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-S-SR----"]=[],I["I-S-SRAT--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.TANGO"]],I["I-S-SRAA--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.ALPHA"]],I["I-S-SRCA--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.ALPHA"]],I["I-S-SRCI--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.INDY"]],I["I-S-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-S-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-S-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"]],I["I-S-SRH---"]=[E["SI.IC.RADAR"],E["SI.M1.HOTEL"],E["SI.M2.FOXTROT"]],I["I-S-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"]],I["I-S-SRMM--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ECHO"]],I["I-S-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"]],I["I-S-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"]],I["I-S-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"]],I["I-S-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-S-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.SIERRA"]],I["I-S-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-S-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"]],I["I-S-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"]],I["I-S-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]],I["I-U-S-----"]=[],I["I-U-SC----"]=[],I["I-U-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-U-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-U-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-U-SR----"]=[],I["I-U-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-U-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-U-SRM---"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-U-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.SIERRA"]],I["I-U-SRT---"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-U-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]]}},H={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["O-V-A-----"]=[E["ST.IC.ARSON/FIRE"]],I["O-V-M-----"]=[E["ST.IC.KILLING VICTIM"]],I["O-V-MA----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.MURDER"]],I["O-V-MB----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.EXECUTION (WRONGFUL KILLING)"]],I["O-V-MC----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.ASSASSINATION"]],I["O-V-B-----"]=[E["ST.IC.BOMB"]],I["O-V-Y-----"]=[E["ST.IC.BOOBY TRAP"]],I["O-V-D-----"]=[E["ST.IC.DRIVE-BY SHOOTING"]],I["O-V-S-----"]=[E["ST.IC.SNIPING"]],I["O-V-P-----"]=[E["ST.IC.POISONING"]],I["O-V-E-----"]=[E["ST.IC.EXPLOSION"]],I["O-V-EI----"]=[E["ST.IC.EXPLOSION"],E["ST.IC.IED"]],I["O-L-B-----"]=[E["ST.IC.BLACK LIST LOCATION"]],I["O-L-G-----"]=[E["ST.IC.GRAY LIST LOCATION"]],I["O-L-W-----"]=[E["ST.IC.WHITE LIST LOCATION"]],I["O-L-M-----"]=[E["ST.IC.MASS GRAVE LOCATION"]],I["O-O-P-----"]=[E["ST.IC.PATROLLING"]],I["O-O-R-----"]=[],I["O-O-RW----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.WILLING"]],I["O-O-RC----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.COERCED/IMPRESSED"]],I["O-O-D-----"]=[E["ST.IC.DEMONSTRATION"]],I["O-O-M-----"]=[E["ST.IC.MINE LAYING"]],I["O-O-Y-----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"]],I["O-O-YT----"]=[E["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]],I["O-O-YW----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["O-O-YH----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.HOUSE-TO-HOUSE"]],I["O-O-F-----"]=[E["ST.IC.SEARCHING"]],I["O-O-S-----"]=[E["ST.IC.SPY"]],I["O-O-O-----"]=[E["ST.IC.FOOD DISTRIBUTION"]],I["O-O-E-----"]=[E["ST.IC.EXTORTION"]],I["O-O-H-----"]=[],I["O-O-HT----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HA----"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HV----"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-K-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"]],I["O-O-KA----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"],E["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I["O-O-A-----"]=[E["ST.IC.ARREST"]],I["O-O-U-----"]=[E["ST.IC.DRUG RELATED ACTIVITIES"]],I["O-O-C-----"]=[E["ST.IC.COMPOSITE LOSS"]],I["O-O-CA----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.COMBAT"]],I["O-O-CB----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.ACCIDENT"]],I["O-O-CC----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.OTHER"]],I["O-I-R-----"]=[E["ST.IC.GROUP"]],I["O-I-S-----"]=[E["ST.IC.SAFE HOUSE"]],I["O-I-G-----"]=[E["ST.IC.GRAFFITI"]],I["O-I-V-----"]=[E["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]],I["O-I-I-----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["O-I-D-----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.DRUG"]],I["O-I-F-----"]=[E["ST.IC.INTERNAL SECURITY FORCE"]],I["O-P-------"]=[E["ST.IC.INDIVIDUAL"]],I["O-P-A-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.LEADER"]],I["O-P-B-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.TARGETED"]],I["O-P-C-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.TERRORIST"]],I["O-G-------"]=[E["ST.IC.GROUP"]],I["O-G-A-----"]=[E["ST.IC.GROUP"],E["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],I["O-G-B-----"]=[E["ST.IC.GROUP"],E["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],I["O-G-C-----"]=[E["ST.IC.GROUP"],E["ST.M1.TERRORIST"]],I["O-G-D-----"]=[E["ST.IC.GROUP"],E["ST.M1.RELIGIOUS"]],I["O-G-E-----"]=[E["ST.IC.GROUP"],E["ST.M1.FOREIGN FIGHTERS"]],I["O-G-F-----"]=[E["ST.IC.GROUP"],E["ST.M1.GANG"]],I["O-R-------"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.RAPE"]],I["O-R-A-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.RAPE"],E["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]]}};function V(I,t,E,R,e,A){var C=t.affiliation||"Friend",T="Hostile"!=C||e?E.iconColor[C]:"rgb(255, 0, 0)",S="Hostile"!=C||e?E.fillColor[C]:"rgb(255, 0, 0)",N=t.numberSIDC,O=E.white[C],G={};for(var o in G["TP.DESTROY"]=R||N?[{type:"path",fill:!1,d:"m 0,45 85,46.75 m 30,16.5 85,46.75 M 0,155 85,108.25 M 115,91.75 200,45"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"D"}]:{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45 M 0,45 200,155"},G["TP.INTERDICT"]=R||N?[{type:"path",fill:!1,d:"m 194.203,65.6674 5.49,-20.4904 -20.49,-5.4904 M 115,91.75 200,45 M 0,155 85,108.25 M 185,85 l 15,15 -15,15 m -70,-15 85,0 m -200,0 85,0"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"I"}]:{type:"path",fill:!1,d:"m 0,100 200,0 M 0,155 200,45.2 M 185,85 l 15,15 -15,15 m 9.2,-49.3 5.5,-20.5 -20.5,-5.5"},G["TP.NEUTRALIZE"]=R||N?[{type:"path",fill:!1,d:"M 115,108.25 200,155 M 0,45 85,91.75"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,91.75 200,45 M 0,155 85,108.25"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"N"}]:[{type:"path",fill:!1,d:"M 0,45 200,155"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45"}],G["TP.SUPPRESS"]=R||N?[{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,108.25 200,155 M 0,45 85,91.75"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,91.75 200,45 M 0,155 85,108.25"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}]:[{type:"path",fill:!1,d:"M 0,45 200,155"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45"}],G["TP.DATUM"]=[{type:"path",stroke:!1,d:"m 100,50 0,50 50,0 C 150,72.3858 127.614,50 100,50 Z m 0,50 -50,0 c 0,27.614 22.3858,50 50,50 z"},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["TP.BRIEF CONTACT"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"C"}],G["TP.LOST CONTACT"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"L"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"C"}],G["TP.SINKER"]=[{type:"path",fill:!1,d:"m 100,15 0,65 M 60,15 80,0 100,15 120,0 140,15"},{type:"path",d:"M 100,100 55,80 145,80 Z"}],G["TP.TRIAL TRACK"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"T"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"T"}],G["TP.SONOBUOY"]=[{type:"path",fill:!1,d:"M 100,60 l 0,-35 10,10 0,-45"},{type:"circle",fill:!1,cx:100,cy:100,r:40}],G["TP.SONOBUOY PATTERN CENTER"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"P"}],G["TP.SONOBUOY DIFAR"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"D"}],G["TP.SONOBUOY LOFAR"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"L"}],G["TP.SONOBUOY CASS"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"C"}],G["TP.SONOBUOY DICASS"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}],G["TP.SONOBUOY BT"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"B"}],G["TP.SONOBUOY ANM"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"A"}],G["TP.SONOBUOY VLAD"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"V"}],G["TP.SONOBUOY ATAC"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"T"}],G["TP.SONOBUOY BARRA"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"BR"}],G["TP.SONOBUOY BATHYTHERMOGRAPH TRANSMITTING SONOBUOY (BT)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"B"}],G["TP.SONOBUOY COMMAND ACTIVE MULTIBEAM SONOBUOY (CAMBS)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"CM"}],G["TP.SONOBUOY EXPENDABLE RELIABLE ACOUSTIC PATH SONOBUOY (ERAPS)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"E"}],G["TP.SONOBUOY RO"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"R"}],G["TP.SONOBUOY KINGPIN"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"K"}],G["TP.SONOBUOY EXPIRED"]=[G["TP.SONOBUOY"],{type:"path",fill:!1,d:"M 40,60 l 120,80 M 40,140 l 120,-80"}],G["TP.SEARCH"]={type:"path",d:"m 80,80 20,20 -20,20 40,0 -20,-20 20,-20 z M 50,150 150,50 M 50,50 150,150"},G["TP.SEARCH AREA"]=[G["TP.SEARCH"],R||N?[{type:"text",stroke:!1,textanchor:"middle",x:60,y:115,fontsize:45,text:"S"},{type:"text",stroke:!1,textanchor:"middle",x:140,y:115,fontsize:45,text:"A"}]:{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"SA"}],G["TP.DIP POSITION"]=[G["TP.SEARCH"],R||N?[{type:"text",stroke:!1,textanchor:"middle",x:60,y:115,fontsize:45,text:"D"},{type:"text",stroke:!1,textanchor:"middle",x:140,y:115,fontsize:45,text:"P"}]:{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"DIP"}],G["TP.SEARCH CENTER"]={type:"path",stroke:!1,d:"m 100,100 -50,10 0,-20 z m 0,0 10,50 -20,0 z m 0,0 50,-10 0,20 z m 0,0 -10,-50 20,0 z"},G["TP.REFERENCE POINT"]=[{type:"path",fill:!1,d:"M 160,160 40,160 40,40 160,40 Z"},{type:"circle",cx:100,cy:100,r:15}],G["TP.NAVIGATIONAL REFERENCE"]=!N&&R?{type:"path",fill:!1,d:"M 160,160 40,160 40,40 160,40 Z M 160,160 40,40 M 40,160 160,40"}:{type:"path",fill:!1,d:"M 160,160 40,40 M 40,160 160,40"},G["TP.SPECIAL POINT"]=[G["TP.NAVIGATIONAL REFERENCE"],{type:"circle",cx:100,cy:100,r:15}],G["TP.AIRFIELD"]=[{type:"path",fill:!1,d:"M 35,125 165,60 m -135,40 140,0"}],G["TP.DLRP"]=[G["TP.SPECIAL POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"D"}],G["TP.POINT OF INTENDED MOVEMENT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"P"}],G["TP.PRE-LANDFALL WAYPOINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"PL"}],G["TP.MARSHALL POINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"M"}],G["TP.REFERENCE POINT WAYPOINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"W"}],G["TP.CORRIDOR TAB"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"C"}],G["TP.ENEMY POINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"ENY"}],G["TP.POINT OF INTEREST"]=[{type:"path",d:"M 129.021,41.957 C 121.48,49.9458 110.986,54.4816 100,54.5 89.0432,54.4928 78.569,49.9914 71.0234,42.0469 L 100,100 Z"},{type:"circle",fill:!1,cx:100,cy:15,r:40}],G["POINT OF INTEREST – LAUNCH EVENT"]=[G["TP.POINT OF INTEREST"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:30,fontsize:40,fontweight:"bold",text:"LE"}],G["TP.SHIP AREA OF INTEREST (AEGIS ONLY)"]={type:"circle",fill:!1,cx:100,cy:100,r:50},G["TP.ACTIVE MANOEUVRE AREA (AEGIS ONLY)"]={type:"circle",fill:!1,stroke:"rgb(254,203,47)",cx:100,cy:100,r:60},G["TP.PLAN SHIP"]=[{type:"circle",fill:S,stroke:S,cx:100,cy:100,r:15},{type:"circle",stroke:S,cx:100,cy:100,r:45,fill:!1}],G["TP.AIM POINT"]=[{type:"circle",cx:100,cy:100,r:15},{type:"circle",cx:100,cy:100,r:35,fill:!1},{type:"circle",cx:100,cy:100,r:45,fill:!1}],G["TP.DEFENDED ASSET"]={type:"path",fill:!1,d:"m 90,135 0,-30 20,0 0,30 m -50,0 0,-50 -10,0 0,-20 20,0 0,10 20,0 0,-10 20,0 0,10 20,0 0,-10 20,0 0,20 -10,0 0,50 z"},G["TP.CHEMICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"C"}],G["TP.CHEMICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"C"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.BIOLOGICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"B"}],G["TP.BIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.NUCLEAR EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"N"}],G["TP.RADIOLOGICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"R"}],G["TP.RADIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"R"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.DROP POINT"]={type:"path",fill:!1,d:"m 130,100 0,-40 m -60,40 0,-40 m 60,40 0,0 c 0,8.284 -6.716,15 -15,15 -8.284,0 -15,-6.716 -15,-15 m 0,0 0,0 c 0,8.284 -6.7157,15 -15,15 -8.2843,0 -15,-6.716 -15,-15 m 30,-40 0,40"},G["TP.ENTRY POINT"]={type:"path",fill:!1,d:"m 100,100 0,-50 m -35,15 35,35 35,-35 m -85,35 100,0"},G["TP.AIR DETONATION"]={type:"path",d:"m 55,150 90,0 m -35,-95 5,20 15,-10 0,15 15,5 -15,10 15,10 -15,5 5,15 -20,-5 -5,20 -10,-15 -10,20 -5,-25 -20,10 5,-15 L 55,105 70,95 60,85 70,80 70,65 85,75 90,55 100,70 Z",fill:!1},G["TP.GROUND ZERO"]={type:"path",stroke:!1,d:"M 100 28 C 100 28 65.4398 29.8261 61.6543 55 C 60.2826 64.1213 75.0115 70.4884 82.2363 71.6543 C 89.4611 72.8201 91.7277 55.3462 98.5098 56.0371 L 93 90 C 93 90 70 90 67 97 C 65.0304 101.596 100 100 100 100 C 100 100 134.97 101.596 133 97 C 130 90 107 90 107 90 L 101.49 56.0371 C 108.272 55.3462 110.539 72.8201 117.764 71.6543 C 124.988 70.4884 139.718 64.1213 138.346 55 C 134.56 29.8261 100 28 100 28 z"},G["TP.LAUNCHED TORPEDO (AEGIS ONLY)"]={type:"path",d:"m 150,90 0,20 m -10,-10 10,0 m -97,-10 84,0 c 1.662,0 3,1.338 3,3 l 0,14 c 0,1.662 -1.338,3 -3,3 l -84,0 c -1.662,0 -3,-1.338 -3,-3 l 0,-14 c 0,-1.662 1.338,-3 3,-3 z"},G["TP.MSL DETECT POINT"]={type:"path",d:"m 95,100 0,-55 -10,0 15,-15 15,15 -10,0 0,55 m -55,0 100,0"},G["TP.ACOUSTIC COUNTER MEASURE (DECOY)"]={type:"path",d:"M 107.5,55 92.5518,70 107.5,85 Z M 50,30 150,30 m -90,70 0,-5 80,0 0,5 z m 70,-45 -15,15 15,15 z M 85,55 70,70 85,85 Z m 15,-25 0,33"},G["TP.ELECTRONIC COUNTER MEASURES (ECM) DECOY"]=[{type:"path",d:"m 80,120 -20,10 20,10 z m 30,0 -20,10 20,10 0,-20 z m 30,0 -20,10 20,10 z m -25,-20 c 0,10 -10,18 -19.4,14 -9.4,-2 -13.8,-14.7 -8,-22.5 5.2,-8.2 18.4,-8.7 24.4,-0.8 2,2.6 3,5.9 3,9.3 z"},{type:"path",fill:!1,d:"m 50,50 0,100 100,0 0,-100 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:80,fontsize:30,text:"ECM"}],G["TP.IMPACT POINT"]={type:"path",d:"m 50,100 40,-10 10,-40 10,40 40,10 -40,10 -10,40 -10,-40 -40,-10"},G["TP.PREDICTED IMPACT POINT"]={type:"path",fill:!1,strokedasharray:"12,5",d:"m 50,100 40,-10 10,-40 10,40 40,10 -40,10 -10,40 -10,-40 -40,-10"},G["TP.FORMATION"]={type:"path",fill:!1,d:"m 100,50 0,100 m -50,-50 100,0"},G["TP.HARBOR"]={type:"path",fill:!1,d:"M 80,140 50,60 150,60 120,140"},G["TP.HARBOR POINT Q"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"Q"}],G["TP.HARBOR POINT A"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"A"}],G["TP.HARBOR POINT Y"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"Y"}],G["TP.HARBOR POINT X"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"X"}],G["TP.ROUTE"]={type:"path",fill:!1,d:"m 138.484,76.82 c 0,-7.4823 6.066,-13.5478 13.548,-13.548 7.483,-3e-4 13.549,6.0653 13.549,13.548 m -27.097,0 0,0 c 0,6.9484 -5.634,12.5807 -12.582,12.58 -6.948,-4e-4 -12.58,-5.6324 -12.58,-12.58 m -27.097,0 c 2e-4,-7.4823 6.0657,-13.5478 13.548,-13.548 7.483,-3e-4 13.549,6.0653 13.549,13.548 m -79.3554,0 c 2e-4,-7.4824 6.066,-13.548 13.5484,-13.548 7.4824,0 13.5482,6.0656 13.5484,13.548 m 25.1616,0 0,0 C 86.2246,83.7681 80.5918,89.4003 73.6437,89.4 66.696,89.3998 61.0638,83.7677 61.0634,76.82 m 77.4206,47.328 c 0,-7.482 6.066,-13.548 13.548,-13.548 7.483,0 13.549,6.065 13.549,13.548 m -27.097,0 0,0 c 0,6.948 -5.634,12.581 -12.582,12.58 -6.948,0 -12.58,-5.632 -12.58,-12.58 m -27.097,0 c 2e-4,-7.482 6.0657,-13.548 13.548,-13.548 7.483,0 13.549,6.065 13.549,13.548 m -79.3554,0 c 2e-4,-7.482 6.066,-13.548 13.5484,-13.548 7.4824,0 13.5482,6.066 13.5484,13.548 m 25.1616,0 0,0 c -4e-4,6.948 -5.6332,12.58 -12.5813,12.58 -6.9477,0 -12.5799,-5.632 -12.5803,-12.58 m -27.0968,-23.664 132.5184,0"},G["TP.ROUTE RENDEZVOUS"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"R"}],G["TP.ROUTE DIVERSIONS"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"D"}],G["TP.ROUTE WAYPOINT"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"W"}],G["TP.ROUTE PIM"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"M"}],G["TP.ROUTE POINT R"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"P"}],G["TP.PICKET ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"PK"}],G["TP.POINT R ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"R"}],G["TP.RENDEZVOUS ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"RZ"}],G["TP.AIR CONTROL"]={type:"path",fill:!1,d:"m 140,165 0,-130 m -80,0 0,130"},G["TP.AIR CONTROL POINT"]=[G["TP.AIR CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.COMBAT AIR PATROL (CAP)"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"C"}],G["TP.AIRBORNE EARLY WARNING (AEW)"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"W"}],G["TP.TANKING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"K"},N||R?[]:{type:"circle",cx:100,cy:100,r:15}],G["TP.FIXED WING"]=[G["TP.AIR CONTROL"],N||R?[{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"ASW":"AS"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}]:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"F"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.ROTARY WING"]=[G["TP.AIR CONTROL"],N||R?[{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"ASW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}]:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"H"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.SUCAP - FIXED WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"SUW"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}],G["TP.SUCAP - ROTARY WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"ASW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}],G["TP.MIW - FIXED WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"MIW":"MW"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}],G["TP.MIW - ROTARY WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"MIW":"MW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}],G["TP.STRIKE IP"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"S"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.CORRIDOR TAB POINT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"C"},{type:"circle",cx:100,cy:100,r:15}],G["TP.AIR CONTROL RENDEZVOUS"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"RZ"}],G["TP.CAP STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"C"}],G["TP.AEW STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"W"}],G["TP.TACAN"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"T"},N||R?[]:{type:"circle",cx:100,cy:100,r:15}],G["TP.REPLENISHMENT STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"RP"}],G["TP.TANKING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"K"}],G["TP.TOMCAT"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"TC"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"O"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.RESCUE"]=[G["TP.AIR CONTROL"],N?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RS"}:R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RC"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"R"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.REPLENISH"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RP"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"F"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.MARSHALL"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"M"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"M"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.UNMANNED AERIAL SYSTEM"]=[G["TP.AIR CONTROL"],{type:"path",stroke:!1,d:"m 70,85 30,15 30,-15 0,15 -30,15 -30,-15 z"}],G["TP.VTUA"]=[G["TP.AIR CONTROL"],{type:"path",stroke:!1,d:"m 70,95 30,15 30,-15 0,30 -30,-15 -30,15 z m 0,-25 30,15 30,-15 0,15 -30,15 -30,-15 z"}],G["TP.ORBIT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"}],G["TP.ORBIT - FIGURE EIGHT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"F8"}],G["TP.ORBIT - RACE TRACK"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"RT"}],G["TP.ORBIT - RANDOM, CLOSED"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"RC"}],G["TP.ACTION POINT"]={type:"path",fill:!1,d:"m 60,45 80,0 m -40,55 -40,-55 0,-105 80,0 0,105 z"},G["TP.ACTION CHECK POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CKP"}],G["TP.CONTACT POINT"]=N?{type:"path",fill:!1,d:"M 50,50 150,50 150,150 50,150z"}:{type:"path",fill:!1,d:"m 100,100 0,-35 -45,0 0,-75 90,0 0,75 -45,0"},G["TP.CENTRE OF MAIN EFFORT"]=[{type:"path",fill:!1,d:"m 155,100 0,-35 M 45,100 45,65 m 88,0 0,35 m -22,-35 0,35 m -22,-35 0,35 m -22,0 0,-35 m -37,70 0,-35 140,0 0,40"}],G["TP.COORDINATION POINT"]=[{type:"path",fill:!1,d:"m 65,135 70,-70 m -70,0 70,70"},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["TP.DECISION POINT"]={type:"path",fill:!1,d:"M 99.9998,25.5886 117.061,76.5192 170.77,77.0054 127.604,108.968 143.738,160.2 100,129.024 56.2624,160.2 72.3967,108.968 29.2306,77.0059 82.9403,76.5192 Z"},G["TP.DISTRESS CALL"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SOS"}],G["TP.ENTRY CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"EC"}],G["TP.FLY-TO-POINT (SONOBUOY)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"SBY"}],G["TP.FLY-TO-POINT (WEAPON)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"WPN"}],G["TP.FLY-TO-POINT (NORMAL)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"NRM"}],G["TP.ACTION LINKUP POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LU"}],G["TP.ACTION PASSAGE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"PP"}],G["TP.ACTION RALLY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RLY"}],G["TP.ACTION RELEASE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RP"}],G["TP.ACTION START POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SP"}],G["TP.ACTION AMNESTY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"AMN"}],G["TP.WAYPOINT"]={type:"path",fill:!1,strokewidth:8,d:"m 65,135 70,-70 m -70,0 70,70"},G["TP.COMBATANT STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"CBT"}],G["TP.PICKET STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"PKT"}],G["TP.ASW SHIP STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"ASW"}],G["TP.REPLENISHMENT AT SEA (RAS) STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"RAS"}],G["TP.RESCUE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"RSC"}],G["TP.SUBMARINE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"SUB"}],G["TP.ASW SUBMARINE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"ASW/SUB"}],G["TP.SEA SURFACE CONTROL"]={type:"path",fill:!1,d:"m 30,60 140,0 m -140,80 140,0"},G["TP.SEA SURFACE CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.(USV) CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 100,115 45,-20 0,-15 -45,20 -45,-20 0,15 z"}],G["TP.(USV)"]=[G["TP.SEA SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 55,100 45,20 45,-20 0,15 -45,20 -45,-20 z"}],G["TP.(RMV) USV CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"RMV"}],G["TP.USV - ASW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"ASW"}],G["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SURFACE STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MW"}],G["TP.USV - SUW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"SUW"}],G["TP.USV - MIW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MIW"}],G["TP.ASW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"ASW"}],G["TP.MINE WARFARE SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"MW"}],G["TP.NON-COMBATANT SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"NC"}],G["TP.SUW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"SUW"}],G["TP.MIW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"MIW"}],G["TP.PICKET CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"PK"}],G["TP.RENDEZVOUS CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RZ"}],G["TP.REPLENISHMENT AT SEA SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RAS"}],G["TP.RESCUE CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RS"}],G["TP.REPLENISHMENT CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RP"}],G["TP.NONCOMBATANT CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"NC"}],G["TP.SUB SURFACE CONTROL"]=[{type:"path",fill:!1,d:"m 30,140 140,0"},{type:"path",fill:!1,strokedasharray:"12,4",d:"m 30,60 140,0"}],G["TP.SUB SURFACE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.(UUV) CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 100,115 45,-20 0,-15 -45,20 -45,-20 0,15 z"}],G["TP.(UUV)"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 55,100 45,20 45,-20 0,15 -45,20 -45,-20 z"}],G["TP.UUV - ASW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"ASW"}],G["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SUBSURFACE STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MW"}],G["TP.UUV - SUW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"SUW"}],G["TP.UUV - MIW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MIW"}],G["TP.SUBMARINE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35,text:"SS"},{type:"path",d:"m 75,95 0,-20 50,0 0,20 z m 25,-30 0,40"}],G["TP.ASW SUBMARINE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",d:"m 68.75,105 -12.5,12.5 12.5,12.5 62.5,0 12.5,-12.5 -12.5,-12.5 z M 75,95 l 0,-20 50,0 0,20 z m 25,-30 0,40"}],G["TP.AIR CONTROL POINT (ACP)"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"middle",x:100,y:90,fontsize:30,text:"ACP"}],G["TP.COMMUNICATIONS CHECKPOINT"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"middle",x:100,y:90,fontsize:30,text:"CCP"}],G["TP.PULL-UP POINT"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"start",x:160,y:115,fontsize:40,text:"PUP"},{type:"path",fill:!1,d:"m 65,80 0,40 70,-40 0,40 z"}],G["TP.DOWNED AIRCREW PICKUP POINT"]=[G["TP.ACTION POINT"],{type:"circle",cx:100,cy:-35,r:12},{type:"path",fill:!1,d:"m 75,35 50,0 m -25,-45 0,45 m -30,-75 30,30 30,-30"}],G["TP.DUMMY MINEFIELD"]=[{type:"path",fill:!1,d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,-40 0,80 120,0 0,-80 z"},{type:"path",fill:!1,strokedasharray:"15,10",d:"M 160,60 100,-5 M 40,60 100,-5"}],G["TP.TARGET REFERENCE"]={type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},G["TP.OBSERVATION POST/OUTPOST"]={type:"path",fill:!1,d:"m 100,45 47.6,82.5 -95.2,0 z"},G["TP.COMBAT OUTPOST"]={type:"path",fill:!1,d:"m 140,140 0,-12.5 m -16,12.5 0,-12.5 m -16,12.5 0,-12.5 m -48.0001,12.5 3e-4,-12.5 m 15.9993,12.5 4e-4,-12.501 m 16,12.501 3e-4,-12.5 m -46.43,-12.493 10.8256,6.25 m -2.8256,-20.107 10.8256,6.251 m -2.8257,-20.1071 10.8257,6.2506 m 13.1743,-47.8198 10.8257,6.2506 m -18.8253,7.6056 10.8256,6.2506 m -18.826,7.606 10.8257,6.2506 M 114.43,45.725 l -10.826,6.25 m 18.826,7.6064 -10.826,6.25 m 18.826,7.6064 -10.826,6.25 m 34.826,35.3192 -10.826,6.25 m 2.826,-20.106 -10.826,6.25 m 2.826,-20.1068 -10.826,6.25 M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},G["TP.OBSERVATION POST/RECONNAISSANCE"]={type:"path",fill:!1,d:"M 52.3687,127.5 123.816,86.2499 M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},G["TP.FORWARD OBSERVER POSITION"]=[G["TP.OBSERVATION POST/RECONNAISSANCE"],{type:"path",d:"m 115,100 c 0,8.284 -6.716,15 -15,15 -8.2843,0 -15,-6.716 -15,-15 0,-8.2843 6.7157,-15 15,-15 8.284,0 15,6.7157 15,15 z"}],G["TP.SENSOR OUTPOST"]=N?[{type:"path",fill:!1,d:"M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},{type:"path",stroke:!1,d:"m 100,80 c 0,7.5 12.5,20 20,20 -7.5,0 -20,12.5 -20,20 0,-7.5 -12.5,-20 -20,-20 7.5,0 20,-12.5 20,-20 z"}]:{type:"path",fill:!1,d:"m 61.1738,112.25 23.6601,0 m 30.3321,0 23.66,0 M 80,105 l 10,15 20,0 10,-15 z m 19.9998,-60 47.6312,82.5 -95.2623,0 z"},G["TP.CBRN OBSERVATION POST"]=[{type:"path",fill:!1,d:"m 99.9998,45 47.6312,82.5 -95.2623,0 z M 88,119 c 2.1824,-13.288 7.7157,-24.22 22,-29 m 1.829,29 C 109.664,105.712 104.173,94.78 90,90 M 52.3687,127.5 123.816,86.2499"},{type:"path",d:"m 91,92 c 0,2.7614 -2.2386,5 -5,5 -2.7614,0 -5,-2.2386 -5,-5 0,-2.7614 2.2386,-5 5,-5 2.7614,0 5,2.2386 5,5 z m 28.011,0 c 0,2.7678 -2.243,5.0117 -5.011,5.012 -2.768,-3e-4 -5.011,-2.2442 -5.011,-5.012 0,-2.7676 2.243,-5.0112 5.011,-5.0115 2.768,3e-4 5.011,2.2439 5.011,5.0115 z"}],G["TP.POINT OF DEPARTURE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"PD"}],G["TP.FIXED AND PREFABRICATED"]={type:"path",d:"m 60,100 40,-65 40,65 z"},G["TP.TETRAHEDRONS"]={type:"path",fill:!1,d:"m 60,100 40,-65 40,65"},G["TP.TETRAHEDRONS MOVABLE"]={type:"path",fill:!1,d:"m 60,100 40,-65 40,65 z"},G["TP.BOOBY TRAP"]={type:"path",fill:!1,d:"M 77.2413,87.9311 100,50 122.781,87.9687 M 130,100 c 0,10.24 -13.431,18.541 -30,18.541 -16.5685,0 -30,-8.301 -30,-18.541 0,-10.2399 13.4315,-18.541 30,-18.541 16.569,0 30,8.3011 30,18.541 z"},G["TP.UNSPECIFIED MINE"]={type:"path",fill:!1,d:"m 129,100 c 0,16.016 -12.984,29 -29,29 -16.0163,0 -29,-12.984 -29,-29 0,-16.0163 12.9837,-29 29,-29 16.016,0 29,12.9837 29,29 z"},G["TP.ANTITANK MINE (AT)"]={type:"path",d:"m 129,100 c 0,16.016 -12.984,29 -29,29 -16.0163,0 -29,-12.984 -29,-29 0,-16.0163 12.9837,-29 29,-29 16.016,0 29,12.9837 29,29 z"},G["TP.(AT) ANTIHANDLING DEVICE"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 100,130 0,65 15,-15"}],G["TP.(AT) DIRECTIONAL"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,strokedasharray:"5,5",d:"m 100,70 0,-60"},{type:"path",fill:!1,d:"m 90,20 10,-10 10,10"}],G["TP.ANTIPERSONNEL (AP) MINES"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 50,50 29.5,29.5 m 41,0 L 150,50"}],G["TP.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 131,100 10,0 M 50,50 79.5,79.5 m 41,0 L 150,50 m -4,50 10,0 m 5,0 10,0 m -10,-10 10,10 -10,10"}],G["TP.WIDE AREA MINES"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 50,110 25,40 12,-24 M 113,126 125,150 150,110"}],G["TP.PLANNED MINEFIELD"]=[{type:"path",fill:!1,strokedasharray:"15,15",d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",fill:!1,d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.MINEFIELDS STATIC"]={type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z m 70,35 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m 35,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,0 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z"},G["TP.MINEFIELD, STATIC"]={type:"path",fill:!1,d:"m 25,65 0,70 150,0 0,-70 z"},t.notpresent&&(G["TP.MINEFIELDS STATIC"]=G["TP.PLANNED MINEFIELD"]),G["TP.ANTITANK (AT) MINEFIELD"]=[{type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.SCATTERABLE MINES"]=[G["TP.MINEFIELDS STATIC"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"S"}],G["TP.ANTIPERSONNEL (AP) MINEFIELD"]=[{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"+S"},{type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",d:"M 72.0703,92.9297 80,82.3622 m -30,0 7.9297,10.5675 m 49.1403,0 7.93,-10.5675 m -30,0 7.9297,10.5675 m 49.1403,0 7.93,-10.5675 m -30,0 7.93,10.5675 M 110,100 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m 35,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,0 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z"}],G["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"]=[G["TP.ANTITANK (AT) MINEFIELD"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"S"}],G["TP.VOLCANO MINEFIELD"]=[G["TP.ANTITANK (AT) MINEFIELD"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"V"}],G["TP.TOWER LOW"]=[{type:"circle",stroke:!1,cx:100,cy:100,r:7},{type:"path",fill:!1,strokewidth:8,d:"m 75,105 25,-65 25,65"}],G["TP.TOWER HIGH"]=[{type:"circle",stroke:!1,cx:100,cy:100,r:7},{type:"path",fill:!1,strokewidth:8,d:"m 100,40 c 2.358,31.6754 7.162,59.2531 25,64.999 M 100,40 c -2.358,31.6754 -7.1624,59.2531 -25,65"}],G["TP.ENGINEER REGULATING POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ERP"}],G["TP.EARTHWORK/FORTIFICATION"]={type:"path",d:"m 65,65 0,70 70,0 0,-70 -70,0z"},G["TP.FORT"]={type:"path",fill:!1,d:"m 135,65 15,-15 m -15,85 15,15 M 65,135 50,150 m 15,-85 0,70 70,0 0,-70 -70,0 -15,-15"},G["TP.SURFACE SHELTER"]={type:"path",d:"m 135,135 15,0 m -100,0 15,0 m 0,-70 0,70 70,0 0,-70 -70,0"},G["TP.UNDERGROUND SHELTER"]={type:"path",d:"m 135,65 15,0 m -100,0 15,0 m 0,70 0,-70 70,0 0,70 -70,0"},G["TP.NUCLEAR DETONATIONS GROUND ZERO"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,25 0,75 30,0 0,-75 m -50,0 c 0,-50 70,-50 70,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"]=[{type:"path",strokedasharray:"5,5",fill:!e&&"rgb(255,255,0)",d:"m 85,25 0,75 30,0 0,-75 m -50,0 c 0,-50 70,-50 70,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.NUCLEAR FALLOUT PRODUCING"]=[{type:"path",fill:!1,d:"m 120,85 -15,15 m -25,0 40,-35 M 80,80 120,40 M 80,55 115,25 M 80,40 95,25 m -40,0 c 0,-60 90,-60 90,0 z m 25,0 0,75 40,0 0,-75"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.RELEASE EVENTS BIOLOGICAL"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,-15 0,60 -25,55 80,0 -25,-55 0,-60 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:35,text:"B"},{type:"text",stroke:!1,textanchor:"end",x:50,y:60,fontsize:35,text:"BIO"}],G["TP.RELEASE EVENTS CHEMICAL"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,-15 0,59.0625 C 75.7313,49.4137 70.0154,59.2975 70,70 c 0,16.5685 13.4315,30 30,30 16.569,0 30,-13.4315 30,-30 -0.01,-10.7067 -5.728,-20.5959 -15,-25.9492 L 115,-15 Z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:80,fontsize:35,text:"C"},{type:"text",stroke:!1,textanchor:"end",x:50,y:60,fontsize:35,text:"CML"}],G["TP.DECON SITE/POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"}],G["TP.ALTERNATE DECON SITE/POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"ALT"}],G["TP.DECON SITE/POINT (TROOPS)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"T"}],G["TP.DECON SITE/POINT (EQUIPMENT)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"E"}],G["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"E/T"}],G["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"O"}],G["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"TH"}],G["TP.MAIN EQUIPMENT DECONTAMINATION POINT/SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:25,text:"(M)"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:13,fontsize:25,text:"E"}],G["TP.FORWARD TROOP DECONTAMINATION POINT/SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:25,text:"(F)"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:13,fontsize:25,text:"T"}],G["TP.WOUNDED PERSONNEL DECONTAMINATION SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"W"}],G["TP.AMBULANCE CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ACP"}],G["TP.AMBULANCE LOAD POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ALP"}],G["TP.AMBULANCE RELAY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ARP"}],G["TP.DECON POINT (MAIN) EQUIPMENT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,text:"(M)E"}],G["TP.DECON POINT (FORWARD) TROOPS"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,text:"(F)T"}],G["TP.POINT/SINGLE TARGET"]={type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},G["TP.KNOWN POINT"]=[{type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},{type:"text",stroke:!1,textanchor:"start",x:110,y:80,fontsize:30,text:"KNP"}],G["TP.NUCLEAR TARGET"]={type:"path",fill:!1,d:"m 90,100 -40,0 m 50,10 0,40 m 10,-50 40,0 m -50,-10 0,-40 m 2.5,50 c 0,1.381 -1.119,2.5 -2.5,2.5 -1.3807,0 -2.5,-1.119 -2.5,-2.5 0,-1.3807 1.1193,-2.5 2.5,-2.5 1.381,0 2.5,1.1193 2.5,2.5 z"},G["TP.TARGETRECORDED (AEGIS ONLY)"]=[{type:"path",fill:!1,d:"m 0,50 0,100 200,0 0,-100 z"},{type:"path",stroke:!1,d:"m 100,90 -10,10 10,10 10,-10 z"}],G["TP.FIRE SUPPORT STATION"]=[{type:"path",fill:!1,d:"M 50,50 150,150 M 50,150 150,50"},N?{type:"text",stroke:!1,textanchor:"left",x:120,y:110,fontsize:35,text:"FSS"}:[]],G["TP.SURVEY CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SCP"}],G["TP.FIRING POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FP"}],G["TP.RELOAD POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RLP"}],G["TP.HIDE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"HP"}],G["TP.LAUNCH POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LP"}],G["TP.AMBULANCE EXCHANGE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"AXP"}],G["TP.CANNIBALIZATION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CAN"}],G["TP.CASUALTY COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CCP"}],G["TP.CIVILIAN COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CIV"}],G["TP.DETAINEE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DET"}],G["TP.EPW COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"EPW"}],G["TP.LOGISTICS RELEASE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LRP"}],G["TP.MAINTENANCE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"MCP"}],G["TP.MEDICAL EVACUATION (MEDEVAC) PICKUP POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"MEP"},{type:"path",stroke:!1,d:"m 95,-25 0,10 -10,0 0,10 10,0 0,10 10,0 0,-10 10,0 0,-10 -10,0 0,-10 z"}],G["TP.REARM, REFUEL AND RESUPPLY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"R3P"}],G["TP.REFUEL ON THE MOVE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ROM"}],G["TP.TRAFFIC CONTROL POST"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"TCP"}],G["TP.TRAILER TRANSFER POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"TTP"}],G["TP.UNIT MAINTENANCE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:25,text:"UMCP"}],G["TP.SUPPLY POINT"]={type:"path",fill:!1,d:"m 60,30 80,0 m -80,15 80,0 m -40,55 -40,-55 0,-105 80,0 0,105 z"},G["TP.NATO CLASS I"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"I"}],G["TP.NATO CLASS II"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"II"}],G["TP.NATO CLASS III"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"III"}],G["TP.NATO CLASS IV"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"IV"}],G["TP.NATO CLASS V"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 80,-10 40,0 m -32,0 0,-26.7 c 0,-17.8 24,-17.8 24,0 L 112,-10"}],G["TP.SP CLASS I"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 115,-50 c -45,5 -45,65 0,70 -20,-25 -20,-50 0,-70 z"}],G["TP.SP CLASS II"]=[G["TP.SUPPLY POINT"],{type:"path",stroke:!1,d:"m 101.143,3.91602 q 3.662,-0.26368 4.746,-1.08399 1.084,-0.84961 1.084,-4.33594 l 0,-26.68949 q 0,-3.3105 -1.084,-4.248 -1.084,-0.9668 -4.746,-1.1426 l 0,-1.1133 17.753,0 0,1.1133 q -3.662,0.1758 -4.746,1.1426 -1.084,0.9375 -1.084,4.248 l 0,26.68949 q 0,3.48633 1.084,4.33594 1.084,0.82031 4.746,1.08399 l 0,1.08398 -17.753,0 0,-1.08398 z m 8.877,-38.61332 0,0 z M 81.1035,3.91602 q 3.6621,-0.26368 4.7461,-1.08399 1.084,-0.84961 1.084,-4.33594 l 0,-26.68949 q 0,-3.3105 -1.084,-4.248 -1.084,-0.9668 -4.7461,-1.1426 l 0,-1.1133 17.7539,0 0,1.1133 q -3.6621,0.1758 -4.7461,1.1426 -1.084,0.9375 -1.084,4.248 l 0,26.68949 q 0,3.48633 1.084,4.33594 1.084,0.82031 4.7461,1.08399 l 0,1.08398 -17.7539,0 0,-1.08398 z m 8.877,-38.61332 0,0 z"}],G["TP.SP CLASS III"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,20 0,-30 -20,-40 40,0 -20,40"}],G["TP.SP CLASS IV"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,-40 0,20 m -25,10 0,-30 50,0 0,30"}],G["TP.SP CLASS V"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 80,15 0,-50 c 0,-20 40,-20 40,0 l 0,50 m -50,0 60,0"}],G["TP.SP CLASS VI"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 75,-20 50,0 m -25,15 15,25 m -15,-50 0,25 -20,25 m 30,-60 c 0,5.5228 -4.477,10 -10,10 -5.5228,0 -10,-4.4772 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.SP CLASS VII"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 85,-25 c 10,-10 20,-10 30,0"},{type:"path",d:"m 129.6,-20 c 0,5.3019 -4.298,9.5999 -9.6,9.5998 -5.302,10e-5 -9.6,-4.2979 -9.6,-9.5998 0,-5.3019 4.298,-9.5999 9.6,-9.5998 5.302,-1e-4 9.6,4.2979 9.6,9.5998 z m -40.4886,0 c 0,5.0321 -4.0793,9.1114 -9.1114,9.1114 -5.0321,0 -9.1114,-4.0793 -9.1114,-9.1114 0,-5.0321 4.0793,-9.1114 9.1114,-9.1114 5.0321,0 9.1114,4.0793 9.1114,9.1114 z"}],G["TP.SP CLASS VIII"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 60,-15 80,0 m -40,-45 0,90"}],G["TP.SP CLASS IX"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 121.213,-36.2132 -7.08,7.0802 M 85.8669,-0.866982 78.7868,6.2132 m 0,-42.4264 7.0801,7.0802 m 28.2661,28.266018 7.08,7.080182 M 100,-45 l 0,10 m 0,40 0,10 m -30,-30 10,0 m 40,0 10,0 m -10,0 c 0,11.04569 -8.954,20 -20,20 -11.0457,0 -20,-8.95431 -20,-20 0,-11.0457 8.9543,-20 20,-20 11.046,0 20,8.9543 20,20 z"}],G["TP.SP CLASS X"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:40,text:"CA"}],G["TP.MEDICAL SUPPLY POINT"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,-20 0,-40 m -40,25 80,0"}],G["TP.AMMUNITION SUPPLY POINT (ASP)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ASP"}],G["TP.AMMUNITION TRANSFER POINT (ATP)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ATP"}],G["TP.TARGET HANDOVER"]=[{type:"path",strokedasharray:"10,5",fill:!1,d:"m 100,45 -15,40 -40,15 40,15 15,40 15,-40 40,-15 -40,-15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:110,fontsize:30,text:"TH"}],G["TP.KEY TERRAIN"]=[{type:"path",d:"m 145,100 a 45,45 0 0 1 -45,45 45,45 0 0 1 -45,-45 45,45 0 0 1 45,-45 45,45 0 0 1 45,45 z"},{type:"text",stroke:!1,textanchor:"middle",x:80,y:110,fontsize:35,text:"K",fill:O}],G["TP.BT BOUY DROP"]=[{type:"path",fill:!1,d:"m 65,45 0,110 70,0 0,-110 m -35,95 0,-95 m -35,0 70,0"},{type:"path",d:"m 104,100 c 0,2 -3,2 -4.8,2 -1.4,0 -4.1,-1 -2.7,-2.9 1.9,-1.4 4.5,-1.4 6.5,-0.4 1,0.3 1,0.7 1,1.3 z m 0,40 c 0,2 -3,2 -4.8,2 -1.4,0 -4.1,-1 -2.7,-3 1.9,-1 4.5,-1 6.5,0 1,0 1,0 1,1 z"},{type:"text",stroke:!1,textanchor:"middle",x:80,y:110,fontsize:35,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:120,y:110,fontsize:35,text:"T"}],G["TP.REPORTED BOTTOMED SUB"]={type:"path",fill:!1,d:"M 129,122.4 70.9,78.8 m 0,43.6 58.1,-43.6 m -80,-14.5 0,43.6 29,0 0,29 43.6,0 0,-29 29,0 0,-43.6"},G["TP.MOVING HAVEN"]={type:"path",d:"M 108.142,100 A 8.14167,8.14167 0 0 1 100,108.142 8.14167,8.14167 0 0 1 91.8583,100 8.14167,8.14167 0 0 1 100,91.8583 8.14167,8.14167 0 0 1 108.142,100 Z M 45,55 l 0,90 m 110,-90 0,90 m -110,-45 110,0"},G["TP.SCREEN CENTRE"]={type:"path",d:"m 100,55 0,90 m 8.142,-45 A 8.14167,8.14167 0 0 1 100,108.142 8.14167,8.14167 0 0 1 91.8583,100 8.14167,8.14167 0 0 1 100,91.8583 8.14167,8.14167 0 0 1 108.142,100 Z"},G["TP.SHORE CONTROL STATION"]={type:"path",fill:!1,d:"m 30,155 140,0 m -27,-20 2,-10 -10,5 m -78,5 -2,-10 10,5 m 35,-55 0,68 m 7.5,-76 A 7.5,7.5 0 0 1 100,74.5 7.5,7.5 0 0 1 92.5,67 7.5,7.5 0 0 1 100,59.5 7.5,7.5 0 0 1 107.5,67 Z m -52.5,8 90,0 m -90,50 c 15,25 75,25 90,0 M 40,45 50,55 60,45 70,55 80,45 l 10,10 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"},G["TP.DITCHED AIRCRAFT"]={type:"path",d:"m 145,120 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 10,10 25,-30 -10,-10 10,-10 20,20 -10,35 -15,-15 -15,15 z"},G["TP.PERSON IN WATER"]={type:"path",d:"m 105,110 10,-10 0,-15 5,0 0,20 -10,10 z m -10,0 -10,-10 0,-15 -5,0 0,20 10,10 z m 5,-5 0,-10 -5,0 -5,-5 0,-10 5,-5 10,0 5,5 0,10 -5,5 -5,0 m -15,25 15,-15 m 45,15 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 45,15 -15,-15"},G["TP.CLUTTER, STATIONARY OR CEASE REPORTING"]={type:"path",fill:!1,d:"m 65,135 c 23.3,-23 47,-46.7 70,-70 m -70,0 c 23.3,23.3 47,47 70,70 m -35,-4 c -19.7,0 -47.8,-8 -50,-31 3,-24.9 33.9,-32 55,-30.7 19,0.8 46,10.9 45,33.7 -5,21 -31,28 -50,28 z m 31,-31 c 0,20 -8,48 -31,50 C 75.1,147 68,116 69.3,95 70.1,76.2 80.2,48.6 103,50.2 c 21,4.9 28,31.1 28,49.8 z"},G["TP.TENTATIVE OR PROVISIONAL TRACK"]={type:"path",fill:!1,d:"M 130.902,100 A 30.9017,50 0 0 1 100,150 30.9017,50 0 0 1 69.0983,100 30.9017,50 0 0 1 100,50 30.9017,50 0 0 1 130.902,100 Z M 100,130.902 A 50,30.9017 0 0 1 50,100 50,30.9017 0 0 1 100,69.0983 50,30.9017 0 0 1 150,100 50,30.9017 0 0 1 100,130.902 Z"},G["TP.DISTRESSED VESSEL"]={type:"path",d:"m 120,65 -20,20 20,-20 m -5,55 -35,-35 0,-20 45,45 z m -30,0 -15,-15 m -15,15 15,-15 m 45,15 15,-15 m 15,15 -15,-15 m -45,15 15,-15"},G["TP.SEA MINELIKE"]={type:"path",d:"M 75,75 55,55 m 45,-15 0,25 m 25,10 20,-20 m -80,60 0,-30 20,-20 30,0 20,20 0,30 -20,20 -30,0 z"},G["TP.ICEBERG"]={type:"path",d:"m 75,100 25,-30 25,30 -5,15 -5,-5 -15,20 -15,-20 -5,5 z m -15,0 80,0"},G["TP.OIL RIG/PLATFORM"]=[{type:"path",d:"m 55,100 0,-50 m 75,50 0,40 m 20,-40 0,40 m -115,0 0,-40 130,0",fill:!1},{type:"path",d:"m 55,100 0,-15 25,0 0,15 z"}],G["TP.BOTTOM RETURN"]={type:"path",d:"m 50,100 15,-35 15,30 20,-55 20,55 15,-35 15,40 z"},G["TP.INSTALLATION/MANMADE"]={type:"path",fill:!1,d:"m 50,100 15,-35 15,30 20,-55 20,55 15,-35 15,40 z"},G["TP.WRECK, NON DANGEROUS"]={type:"path",fill:!1,d:"m 135,85 0,30 m -85,-15 100,0 m -85,-15 0,30 m 35,-40 0,50"},G["TP.WRECK, DANGEROUS"]=[G["TP.WRECK, NON DANGEROUS"],{type:"path",strokedasharray:"5,5",fill:!1,d:"m 156.547,100 c 0,16.382 -25.162,29.662 -56.202,29.662 -31.0395,0 -56.2019,-13.28 -56.2017,-29.662 0,-16.3818 25.1624,-29.6618 56.2017,-29.6618 31.039,-1e-4 56.202,13.28 56.202,29.6618 z"}],G["TP.MARINE LIFE"]={type:"path",stroke:!1,d:"m 132,75 0,50 83,-37.5 0,25 L 132,75 m -32,25 25.5,-25 0,50 z"},G["TP.SEA ANOMALY"]={type:"path",fill:!1,d:"M 150,80 130,35 100,100 70,35 50,80 m 0,20 20,-45 30,65 30,-65 20,45"},G["TP.FIX ACOUSTIC"]={type:"path",fill:!1,d:"M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.FIX ELECTRO-MAGNETIC"]={type:"path",fill:!1,d:"m 50,90 15,20 5,-20 15,20 5,-20 20,20 5,-20 15,20 5,-20 15,20 M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.ELECTRO MAGNETIC - MAGNETIC ANOMALY DETECTION (MAD)"]=[G["TP.FIX ELECTRO-MAGNETIC"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:180,fontsize:35,text:"MAD"}],G["TP.FIX ELECTRO-OPTICAL"]={type:"path",fill:!1,d:"m 150,100 c 0,6.904 -22.386,12.5 -50,12.5 -27.6142,0 -50,-5.596 -50,-12.5 0,-6.9036 22.3858,-12.5 50,-12.5 27.614,0 50,5.5964 50,12.5 z M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.FIRE"]={type:"text",stroke:!1,fill:E.iconColor[C],textanchor:"middle",x:100,y:115,fontsize:35,text:"FIRE"},G["TP.INDIRECT FIRE"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 100,60 0,80 m -40,-40 80,0"},G["TP.AMBUSH"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 77.5,106 20,0 m -20,-12 20,0 M 75,82 95,82 m -20,36 20,0 m -25,12 20,0 M 70,70 90,70 M 80,60 c 25,15 25,65 0,80 m 45,-50 10,10 -10,10 m -25,-10 35,0"},G["TP.ROAD BLOCK"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 73,133 60,-60 m -66,54 60,-60 m -54,0 60,60 m -66,-54 60,60"},G["TP.ROAD BLOCK (UNDER CONSTRUCTION)"]=[{type:"path",stroke:E.iconColor[C],fill:!1,strokedasharray:"5,5",d:"m 73,67 60,60 m -66,-54 60,60"},{type:"path",stroke:E.iconColor[C],fill:!1,d:"M 73,133 133,73 M 67,127 127,67"}],G["TP.VITAL AREA CENTRE"]=[{type:"path",fill:!1,d:"m 45,100 110,0 m 0,-40 0,85 M 45,60 l 0,80 m 55,-80 0,80"}],G["TP.ESTIMATED POSITION (EP)"]=[{type:"path",fill:!1,strokedasharray:"12,5",d:"M 160,160 40,160 40,40 160,40 Z"},{type:"path",fill:!1,d:"m 140,100 c 1,26 -27,47 -51.8,38 C 63.1,131 51.5,98.3 67,77.4 c 13.8,-21.9 49,-23.2 64,-2.3 6,7 9,15.9 9,24.9 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:35,text:"EP"}],G["FORWARD OBSERVER / SPOTTER POSITION"]=[{type:"circle",cx:100,cy:100,r:3},{type:"path",fill:!1,d:"m 40,135 60,-75 60,75 z"}],G["MAN MADE SPACE DEBRIS SMALL"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"M 60,110 75,100 60,90 m 50,50 -10,-15 -10,15 m 50,-50 -15,10 15,10 M 90,60 100,75 110,60"}],G["MAN MADE SPACE DEBRIS MEDIUM"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["MAN MADE SPACE DEBRIS BIG"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"m 90,75 10,-15 10,15 M 75,110 60,100 75,90 m 35,35 -10,15 -10,-15 m 35,-35 15,10 -15,10"}],G["NATURAL SPACE DEBRIS SMALL"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"M 60,110 75,100 60,90 m 50,50 -10,-15 -10,15 m 50,-50 -15,10 15,10 M 90,60 100,75 110,60"}],G["NATURAL SPACE DEBRIS MEDIUM"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["NATURAL SPACE DEBRIS BIG"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"m 90,75 10,-15 10,15 M 75,110 60,100 75,90 m 35,35 -10,15 -10,-15 m 35,-35 15,10 -15,10"}],G["TP.M1.UNSPECIFIED"]=[{type:"circle",fill:!1,cx:55,cy:100,r:15},{type:"circle",fill:!1,cx:100,cy:100,r:15},{type:"circle",fill:!1,cx:145,cy:100,r:15}],G["TP.M1.ANTIPERSONNEL MINE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 35,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 80,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 125,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"M 64.4,88.3 75,75 m -40,0 10.6,13.3 m 32.4,10 2,1.7 -2,2 z m -8,1.7 3.3,0"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"M 109,88.3 120,75 m -40,0 10.6,13.3 m 32.4,10 2,1.7 -2,2 z m -8,1.7 3,0"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"M 154,88.3 165,75 m -40,0 11,13.3 m 32,10 2,1.7 -2,2 z m -8,1.7 3,0"}],G["TP.M1.ANTITANK MINE 1"]=[{type:"circle",cx:55,cy:100,r:15}],G["TP.M1.ANTITANK MINE 2"]=[{type:"circle",cx:100,cy:100,r:15}],G["TP.M1.ANTITANK MINE 3"]=[{type:"circle",cx:145,cy:100,r:15}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 55,115 0,13 6,-6"}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 100,115 0,13 6,-6"}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 145,115 0,13 6,-6"}],G["TP.M1.WIDE AREA ANTITANK MINE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 35,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.WIDE AREA ANTITANK MINE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 80,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.WIDE AREA ANTITANK MINE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 125,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.MINE CLUSTER 1"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 73,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G["TP.M1.MINE CLUSTER 2"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 118,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G["TP.M1.MINE CLUSTER 3"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 163,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G)G.hasOwnProperty(o)&&(I.hasOwnProperty(o)&&console.warn("Override of: "+o),n.call(this,G[o],T),I[o]=G[o])}var k={type:"letter",getMetadata:o,getIcons:M,iconParts:[V],labels:function(I){I["G-T-D-----"]={},I["G-T-I-----"]={},I["G-T-N-----"]={},I["G-G-GPUUD-"]={},I["G-G-GPUUB-"]={},I["G-G-GPUUL-"]={},I["G-G-GPUUS-"]={},I["G-G-GPUY--"]={},I["G-G-GPUYP-"]={},I["G-G-GPUYD-"]={},I["G-G-GPUYL-"]={},I["G-G-GPUYC-"]={},I["G-G-GPUYS-"]={},I["G-G-GPUYB-"]={},I["G-G-GPUYA-"]={},I["G-G-GPUYV-"]={},I["G-G-GPUYT-"]={},I["G-G-GPUYR-"]={},I["G-G-GPUYK-"]={},I["G-G-GPUYX-"]={},I["G-G-GPUS--"]={},I["G-G-GPUSA-"]={},I["G-G-GPUSD-"]={},I["G-G-GPUSC-"]={},I["G-G-GPR---"]={},I["G-G-GPRN--"]={},I["G-G-GPRS--"]={},I["G-G-GPRD--"]={},I["G-G-GPRP--"]={},I["G-G-GPRM--"]={},I["G-G-GPRW--"]={},I["G-G-GPRC--"]={},I["G-G-GPRI--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:45,fontweight:"bold"}},I["G-G-GPWA--"]={},I["G-G-GPWD--"]={},I["G-G-GPWE--"]={},I["G-G-GPWG--"]={},I["G-G-GPWM--"]={},I["G-G-GPWI--"]={},I["G-G-GPWP--"]={},I["G-G-GPF---"]={},I["G-G-GPH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-G-GPHQ--"]={},I["G-G-GPHA--"]={},I["G-G-GPHY--"]={},I["G-G-GPHX--"]={},I["G-G-GPO---"]={},I["G-G-GPOZ--"]={},I["G-G-GPOD--"]={},I["G-G-GPOW--"]={},I["G-G-GPOP--"]={},I["G-G-GPOR--"]={},I["G-G-GPA---"]={},I["G-G-GPAP--"]={},I["G-G-GPAW--"]={},I["G-G-GPAK--"]={},I["G-G-GPAA--"]={},I["G-G-GPAH--"]={},I["G-G-GPAB--"]={},I["G-G-GPAC--"]={},I["G-G-GPAD--"]={},I["G-G-GPAE--"]={},I["G-G-GPAS--"]={},I["G-G-GPAT--"]={},I["G-G-GPAO--"]={},I["G-G-GPAR--"]={},I["G-G-GPAL--"]={},I["G-G-GPAF--"]={},I["G-G-GPAG--"]={},I["G-G-GPAI--"]={},I["G-G-GPAJ--"]={},I["G-G-GPAM--"]={},I["G-G-GPAN--"]={},I["G-G-GPP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},additionalInformation1:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,fontweight:"bold"},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPK--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPC--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:40,fontsize:45,fontweight:"bold"}},I["G-G-GPPO--"]={},I["G-G-GPPD--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-G-GPPL--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPP--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPR--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPS--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPW--"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I["G-G-GPC---"]={},I["G-G-GPCU--"]={},I["G-G-GPCUR-"]={},I["G-G-GPCUA-"]={},I["G-G-GPCUS-"]={},I["G-G-GPCUM-"]={},I["G-G-GPCA--"]={},I["G-G-GPCS--"]={},I["G-G-GPCM--"]={},I["G-G-GPCP--"]={},I["G-G-GPCR--"]={},I["G-G-GPCC--"]={},I["G-G-GPCE--"]={},I["G-G-GPCN--"]={},I["G-G-GPB---"]={},I["G-G-GPBU--"]={},I["G-G-GPBUA-"]={},I["G-G-GPBUS-"]={},I["G-G-GPBUM-"]={},I["G-G-GPBS--"]={},I["G-G-GPBSA-"]={},I["G-G-APP---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-G-APC---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-G-APU---"]={},I["G-G-APD---"]={},I["G-G-PN----"]={},I["G-G-DPT---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:115,y:85,fontsize:45,fontweight:"bold"}},I["G-G-DPO---"]={},I["G-G-DPOC--"]={},I["G-G-DPOR--"]={},I["G-G-DPOF--"]={},I["G-G-DPOS--"]={},I["G-G-DPON--"]={},I["G-G-OPP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-OAOF--"]={},I["G-M-OAOM--"]={},I["G-M-OAOP--"]={},I["G-M-OB----"]={},I["G-M-OMU---"]={},I["G-M-OMT---"]={},I["G-M-OMD---"]={},I["G-M-OME---"]={},I["G-M-OMP---"]={},I["G-M-OMW---"]={},I["G-M-OFS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:55,fontsize:40},hostile:[{stroke:!1,textanchor:"end",x:35,y:110,fontsize:30,fontweight:"bold"},{stroke:!1,textanchor:"start",x:165,y:110,fontsize:30,fontweight:"bold"}],dtg:{stroke:!1,textanchor:"middle",x:100,y:175,fontsize:40}},I["G-M-OHTL--"]={altitudeDepth:{stroke:!1,textanchor:"start",x:120,y:60,fontsize:40,fontweight:"bold"}},I["G-M-OHTH--"]={altitudeDepth:{stroke:!1,textanchor:"start",x:115,y:60,fontsize:40,fontweight:"bold"}},I["G-M-BCP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-SE----"]={},I["G-M-SF----"]={},I["G-M-SS----"]={},I["G-M-SU----"]={},I["G-M-NZ----"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NF----"]={},I["G-M-NEB---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NEC---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NDP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDO---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PTS---"]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I["G-F-PTN---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40,fontweight:"bold"}},I["G-F-PCF---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:125,y:115,fontsize:40,fontweight:"bold"}},I["G-F-PCS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PX----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PC----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PY----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PT----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PD----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PE----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PL----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PM----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PR----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PU----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PO----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PI----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PN----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PS----"]={},I["G-S-PSZ---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSF---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSG---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSJ---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PA----"]={},I["G-S-PAS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PAT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-O-ED----"]={},I["G-O-EP----"]={},I["G-O-EV----"]={},I["G-O-HM----"]={},I["G-O-HI----"]={},I["G-O-HO----"]={},I["G-O-SB----"]={},I["G-O-SBM---"]={},I["G-O-SBN---"]={},I["G-O-SBW---"]={},I["G-O-SBX---"]={},I["G-O-SM----"]={},I["G-O-SS----"]={},I["G-O-FA----"]={},I["G-O-FE----"]={},I["G-O-FO----"]={}},icons:function(I,t,E,R){I["G-T-D-----"]=E["TP.DESTROY"],t["G-T-D-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-I-----"]=E["TP.INTERDICT"],t["G-T-I-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-N-----"]=E["TP.NEUTRALIZE"],t["G-T-N-----"]={x1:0,x2:200,y1:40,y2:160},I["G-G-GPUUD-"]=E["TP.DATUM"],t["G-G-GPUUD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUUB-"]=E["TP.BRIEF CONTACT"],t["G-G-GPUUB-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUL-"]=E["TP.LOST CONTACT"],t["G-G-GPUUL-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUS-"]=E["TP.SINKER"],t["G-G-GPUUS-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUY--"]=E["TP.SONOBUOY"],t["G-G-GPUY--"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYP-"]=E["TP.SONOBUOY PATTERN CENTER"],t["G-G-GPUYP-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYD-"]=E["TP.SONOBUOY DIFAR"],t["G-G-GPUYD-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYL-"]=E["TP.SONOBUOY LOFAR"],t["G-G-GPUYL-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYC-"]=E["TP.SONOBUOY CASS"],t["G-G-GPUYC-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYS-"]=E["TP.SONOBUOY DICASS"],t["G-G-GPUYS-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYB-"]=E["TP.SONOBUOY BT"],t["G-G-GPUYB-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYA-"]=E["TP.SONOBUOY ANM"],t["G-G-GPUYA-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYV-"]=E["TP.SONOBUOY VLAD"],t["G-G-GPUYV-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYT-"]=E["TP.SONOBUOY ATAC"],t["G-G-GPUYT-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYR-"]=E["TP.SONOBUOY RO"],t["G-G-GPUYR-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYK-"]=E["TP.SONOBUOY KINGPIN"],t["G-G-GPUYK-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYX-"]=E["TP.SONOBUOY EXPIRED"],t["G-G-GPUYX-"]={x1:40,x2:160,y1:-10,y2:160},I["G-G-GPUS--"]=E["TP.SEARCH"],t["G-G-GPUS--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSA-"]=E["TP.SEARCH AREA"],t["G-G-GPUSA-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSD-"]=E["TP.DIP POSITION"],t["G-G-GPUSD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSC-"]=E["TP.SEARCH CENTER"],t["G-G-GPUSC-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPR---"]=E["TP.REFERENCE POINT"],t["G-G-GPR---"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRN--"]=E["TP.NAVIGATIONAL REFERENCE"],t["G-G-GPRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRS--"]=E["TP.SPECIAL POINT"],t["G-G-GPRS--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRD--"]=E["TP.DLRP"],t["G-G-GPRD--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRP--"]=E["TP.POINT OF INTENDED MOVEMENT"],t["G-G-GPRP--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRM--"]=E["TP.MARSHALL POINT"],t["G-G-GPRM--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRW--"]=E["TP.REFERENCE POINT WAYPOINT"],t["G-G-GPRW--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRC--"]=E["TP.CORRIDOR TAB"],t["G-G-GPRC--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRI--"]=E["TP.POINT OF INTEREST"],t["G-G-GPRI--"]={x1:50,x2:150,y1:-25},I["G-G-GPWA--"]=E["TP.AIM POINT"],t["G-G-GPWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWD--"]=E["TP.DROP POINT"],t["G-G-GPWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-G-GPWE--"]=E["TP.ENTRY POINT"],t["G-G-GPWE--"]={x1:50,x2:150,y1:50},I["G-G-GPWG--"]=E["TP.GROUND ZERO"],t["G-G-GPWG--"]={x1:50,x2:150,y1:30},I["G-G-GPWM--"]=E["TP.MSL DETECT POINT"],t["G-G-GPWM--"]={x1:50,x2:150,y1:30},I["G-G-GPWI--"]=E["TP.IMPACT POINT"],t["G-G-GPWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWP--"]=E["TP.PREDICTED IMPACT POINT"],t["G-G-GPWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPF---"]=E["TP.FORMATION"],t["G-G-GPF---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPH---"]=E["TP.HARBOR"],t["G-G-GPH---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHQ--"]=E["TP.HARBOR POINT Q"],t["G-G-GPHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHA--"]=E["TP.HARBOR POINT A"],t["G-G-GPHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHY--"]=E["TP.HARBOR POINT Y"],t["G-G-GPHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHX--"]=E["TP.HARBOR POINT X"],t["G-G-GPHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPO---"]=E["TP.ROUTE"],t["G-G-GPO---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPOZ--"]=E["TP.ROUTE RENDEZVOUS"],t["G-G-GPOZ--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOD--"]=E["TP.ROUTE DIVERSIONS"],t["G-G-GPOD--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOW--"]=E["TP.ROUTE WAYPOINT"],t["G-G-GPOW--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOP--"]=E["TP.ROUTE PIM"],t["G-G-GPOP--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOR--"]=E["TP.ROUTE POINT R"],t["G-G-GPOR--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPA---"]=E["TP.AIR CONTROL POINT"],t["G-G-GPA---"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAP--"]=E["TP.COMBAT AIR PATROL (CAP)"],t["G-G-GPAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAW--"]=E["TP.AIRBORNE EARLY WARNING (AEW)"],t["G-G-GPAW--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAK--"]=E["TP.TANKING"],t["G-G-GPAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAA--"]=E["TP.FIXED WING"],t["G-G-GPAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAH--"]=E["TP.ROTARY WING"],t["G-G-GPAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAB--"]=E["TP.SUCAP - FIXED WING"],t["G-G-GPAB--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAC--"]=E["TP.SUCAP - ROTARY WING"],t["G-G-GPAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAD--"]=E["TP.MIW - FIXED WING"],t["G-G-GPAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAE--"]=E["TP.MIW - ROTARY WING"],t["G-G-GPAE--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAS--"]=E["TP.STRIKE IP"],t["G-G-GPAS--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAT--"]=E["TP.TACAN"],t["G-G-GPAT--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAO--"]=E["TP.TOMCAT"],t["G-G-GPAO--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAR--"]=E["TP.RESCUE"],t["G-G-GPAR--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAL--"]=E["TP.REPLENISH"],t["G-G-GPAL--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAF--"]=E["TP.UNMANNED AERIAL SYSTEM"],t["G-G-GPAF--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAG--"]=E["TP.VTUA"],t["G-G-GPAG--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAI--"]=E["TP.ORBIT"],t["G-G-GPAI--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAJ--"]=E["TP.ORBIT - FIGURE EIGHT"],t["G-G-GPAJ--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAM--"]=E["TP.ORBIT - RACE TRACK"],t["G-G-GPAM--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAN--"]=E["TP.ORBIT - RANDOM, CLOSED"],t["G-G-GPAN--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPP---"]=E["TP.ACTION POINT"],t["G-G-GPP---"]={x1:60,x2:140,y1:-60},I["G-G-GPPK--"]=E["TP.ACTION CHECK POINT"],t["G-G-GPPK--"]={x1:60,x2:140,y1:-60},I["G-G-GPPC--"]=E["TP.CONTACT POINT"],t["G-G-GPPC--"]={x1:55,x2:145,y1:-10},I["G-G-GPPO--"]=E["TP.COORDINATION POINT"],t["G-G-GPPO--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPPD--"]=E["TP.DECISION POINT"],t["G-G-GPPD--"]={x1:30,x2:170,y1:25,y2:160},I["G-G-GPPL--"]=E["TP.ACTION LINKUP POINT"],t["G-G-GPPL--"]={x1:60,x2:140,y1:-60},I["G-G-GPPP--"]=E["TP.ACTION PASSAGE POINT"],t["G-G-GPPP--"]={x1:60,x2:140,y1:-60},I["G-G-GPPR--"]=E["TP.ACTION RALLY POINT"],t["G-G-GPPR--"]={x1:60,x2:140,y1:-60},I["G-G-GPPE--"]=E["TP.ACTION RELEASE POINT"],t["G-G-GPPE--"]={x1:60,x2:140,y1:-60},I["G-G-GPPS--"]=E["TP.ACTION START POINT"],t["G-G-GPPS--"]={x1:60,x2:140,y1:-60},I["G-G-GPPA--"]=E["TP.ACTION AMNESTY POINT"],t["G-G-GPPA--"]={x1:60,x2:140,y1:-60},I["G-G-GPPW--"]=E["TP.WAYPOINT"],t["G-G-GPPW--"]={x1:60,x2:140,y1:60,y2:140},I["G-G-GPC---"]=E["TP.SEA SURFACE CONTROL STATION"],t["G-G-GPC---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCU--"]=E["TP.(USV) CONTROL STATION"],t["G-G-GPCU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUR-"]=E["TP.(RMV) USV CONTROL STATION"],t["G-G-GPCUR-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUA-"]=E["TP.USV - ASW CONTROL STATION"],t["G-G-GPCUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUS-"]=E["TP.USV - SUW CONTROL STATION"],t["G-G-GPCUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUM-"]=E["TP.USV - MIW CONTROL STATION"],t["G-G-GPCUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCA--"]=E["TP.ASW CONTROL STATION"],t["G-G-GPCA--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCS--"]=E["TP.SUW CONTROL STATION"],t["G-G-GPCS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCM--"]=E["TP.MIW CONTROL STATION"],t["G-G-GPCM--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCP--"]=E["TP.PICKET CONTROL STATION"],t["G-G-GPCP--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCR--"]=E["TP.RENDEZVOUS CONTROL POINT"],t["G-G-GPCR--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCC--"]=E["TP.RESCUE CONTROL POINT"],t["G-G-GPCC--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCE--"]=E["TP.REPLENISHMENT CONTROL POINT"],t["G-G-GPCE--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCN--"]=E["TP.NONCOMBATANT CONTROL STATION"],t["G-G-GPCN--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPB---"]=E["TP.SUB SURFACE CONTROL STATION"],t["G-G-GPB---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBU--"]=E["TP.(UUV) CONTROL STATION"],t["G-G-GPBU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUA-"]=E["TP.UUV - ASW CONTROL STATION"],t["G-G-GPBUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUS-"]=E["TP.UUV - SUW CONTROL STATION"],t["G-G-GPBUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUM-"]=E["TP.UUV - MIW CONTROL STATION"],t["G-G-GPBUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBS--"]=E["TP.SUBMARINE CONTROL STATION"],t["G-G-GPBS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBSA-"]=E["TP.ASW SUBMARINE CONTROL STATION"],t["G-G-GPBSA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-APP---"]=E["TP.AIR CONTROL POINT (ACP)"],t["G-G-APP---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APC---"]=E["TP.COMMUNICATIONS CHECKPOINT"],t["G-G-APC---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APU---"]=E["TP.PULL-UP POINT"],t["G-G-APU---"]={x1:50,x2:240,y1:50,y2:150},I["G-G-APD---"]=E["TP.DOWNED AIRCREW PICKUP POINT"],t["G-G-APD---"]={x1:60,x2:140,y1:-60},I["G-G-PN----"]=E["TP.DUMMY MINEFIELD"],t["G-G-PN----"]={x1:40,x2:160,y1:-10,y2:140},I["G-G-DPT---"]=E["TP.TARGET REFERENCE"],I["G-G-DPO---"]=E["TP.OBSERVATION POST/OUTPOST"],t["G-G-DPO---"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOC--"]=E["TP.COMBAT OUTPOST"],t["G-G-DPOC--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOR--"]=E["TP.OBSERVATION POST/RECONNAISSANCE"],t["G-G-DPOR--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOF--"]=E["TP.FORWARD OBSERVER POSITION"],t["G-G-DPOF--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOS--"]=E["TP.SENSOR OUTPOST"],t["G-G-DPOS--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPON--"]=E["TP.CBRN OBSERVATION POST"],t["G-G-DPON--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-OPP---"]=E["TP.POINT OF DEPARTURE"],t["G-G-OPP---"]={x1:60,x2:140,y1:-60},I["G-M-OAOF--"]=E["TP.FIXED AND PREFABRICATED"],t["G-M-OAOF--"]={x1:60,x2:140,y1:30},I["G-M-OAOM--"]=E["TP.TETRAHEDRONS"],t["G-M-OAOM--"]={x1:60,x2:140,y1:30},I["G-M-OAOP--"]=E["TP.TETRAHEDRONS MOVABLE"],t["G-M-OAOP--"]={x1:60,x2:140,y1:30},I["G-M-OB----"]=E["TP.BOOBY TRAP"],I["G-M-OMU---"]=E["TP.UNSPECIFIED MINE"],I["G-M-OMT---"]=E["TP.ANTITANK MINE (AT)"],I["G-M-OMD---"]=E["TP.(AT) ANTIHANDLING DEVICE"],t["G-M-OMD---"]={x1:60,x2:140,y1:40,y2:195},I["G-M-OME---"]=E["TP.(AT) DIRECTIONAL"],t["G-M-OME---"]={x1:60,x2:140,y1:10,y2:140},I["G-M-OMP---"]=E["TP.ANTIPERSONNEL (AP) MINES"],I["G-M-OMW---"]=E["TP.WIDE AREA MINES"],I["G-M-OFS---"]=E["TP.MINEFIELDS STATIC"],t["G-M-OFS---"]={x1:40,x2:160,y1:60,y2:140},I["G-M-OHTL--"]=E["TP.TOWER LOW"],t["G-M-OHTL--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-OHTH--"]=E["TP.TOWER HIGH"],t["G-M-OHTH--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-BCP---"]=E["TP.ENGINEER REGULATING POINT"],t["G-M-BCP---"]={x1:60,x2:140,y1:-60},I["G-M-SE----"]=E["TP.EARTHWORK/FORTIFICATION"],I["G-M-SF----"]=E["TP.FORT"],I["G-M-SS----"]=E["TP.SURFACE SHELTER"],I["G-M-SU----"]=E["TP.UNDERGROUND SHELTER"],I["G-M-NZ----"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-M-NZ----"]={x1:60,x2:140,y1:-20},I["G-M-NF----"]=E["TP.NUCLEAR FALLOUT PRODUCING"],t["G-M-NF----"]={x1:50,x2:150,y1:-20},I["G-M-NEB---"]=E["TP.RELEASE EVENTS BIOLOGICAL"],t["G-M-NEB---"]={x1:-10,x2:140,y1:-20},I["G-M-NEC---"]=E["TP.RELEASE EVENTS CHEMICAL"],t["G-M-NEC---"]={x1:-20,x2:140,y1:-20},I["G-M-NDP---"]=E["TP.DECON SITE/POINT"],t["G-M-NDP---"]={x1:60,x2:140,y1:-60},I["G-M-NDA---"]=E["TP.ALTERNATE DECON SITE/POINT"],t["G-M-NDA---"]={x1:60,x2:140,y1:-60},I["G-M-NDT---"]=E["TP.DECON SITE/POINT (TROOPS)"],t["G-M-NDT---"]={x1:60,x2:140,y1:-60},I["G-M-NDE---"]=E["TP.DECON SITE/POINT (EQUIPMENT)"],t["G-M-NDE---"]={x1:60,x2:140,y1:-60},I["G-M-NDB---"]=E["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],t["G-M-NDB---"]={x1:60,x2:140,y1:-60},I["G-M-NDO---"]=E["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],t["G-M-NDO---"]={x1:60,x2:140,y1:-60},I["G-M-NDD---"]=E["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],t["G-M-NDD---"]={x1:60,x2:140,y1:-60},I["G-F-PTS---"]=E["TP.POINT/SINGLE TARGET"],I["G-F-PTN---"]=E["TP.NUCLEAR TARGET"],I["G-F-PCF---"]=E["TP.FIRE SUPPORT STATION"],I["G-F-PCS---"]=E["TP.SURVEY CONTROL POINT"],t["G-F-PCS---"]={x1:60,x2:140,y1:-60},I["G-F-PCB---"]=E["TP.FIRING POINT"],t["G-F-PCB---"]={x1:60,x2:140,y1:-60},I["G-F-PCR---"]=E["TP.RELOAD POINT"],t["G-F-PCR---"]={x1:60,x2:140,y1:-60},I["G-F-PCH---"]=E["TP.HIDE POINT"],t["G-F-PCH---"]={x1:60,x2:140,y1:-60},I["G-F-PCL---"]=E["TP.LAUNCH POINT"],t["G-F-PCL---"]={x1:60,x2:140,y1:-60},I["G-S-PX----"]=E["TP.AMBULANCE EXCHANGE POINT"],t["G-S-PX----"]={x1:60,x2:140,y1:-60},I["G-S-PC----"]=E["TP.CANNIBALIZATION POINT"],t["G-S-PC----"]={x1:60,x2:140,y1:-60},I["G-S-PY----"]=E["TP.CASUALTY COLLECTION POINT"],t["G-S-PY----"]={x1:60,x2:140,y1:-60},I["G-S-PT----"]=E["TP.CIVILIAN COLLECTION POINT"],t["G-S-PT----"]={x1:60,x2:140,y1:-60},I["G-S-PD----"]=E["TP.DETAINEE COLLECTION POINT"],t["G-S-PD----"]={x1:60,x2:140,y1:-60},I["G-S-PE----"]=E["TP.EPW COLLECTION POINT"],t["G-S-PE----"]={x1:60,x2:140,y1:-60},I["G-S-PL----"]=E["TP.LOGISTICS RELEASE POINT"],t["G-S-PL----"]={x1:60,x2:140,y1:-60},I["G-S-PM----"]=E["TP.MAINTENANCE COLLECTION POINT"],t["G-S-PM----"]={x1:60,x2:140,y1:-60},I["G-S-PR----"]=E["TP.REARM, REFUEL AND RESUPPLY POINT"],t["G-S-PR----"]={x1:60,x2:140,y1:-60},I["G-S-PU----"]=E["TP.REFUEL ON THE MOVE POINT"],t["G-S-PU----"]={x1:60,x2:140,y1:-60},I["G-S-PO----"]=E["TP.TRAFFIC CONTROL POST"],t["G-S-PO----"]={x1:60,x2:140,y1:-60},I["G-S-PI----"]=E["TP.TRAILER TRANSFER POINT"],t["G-S-PI----"]={x1:60,x2:140,y1:-60},I["G-S-PN----"]=E["TP.UNIT MAINTENANCE COLLECTION POINT"],t["G-S-PN----"]={x1:60,x2:140,y1:-60},I["G-S-PSZ---"]=E["TP.SUPPLY POINT"],t["G-S-PSZ---"]={x1:60,x2:140,y1:-60},I["G-S-PSA---"]=E["TP.SP CLASS I"],t["G-S-PSA---"]={x1:60,x2:140,y1:-60},I["G-S-PSB---"]=E["TP.SP CLASS II"],t["G-S-PSB---"]={x1:60,x2:140,y1:-60},I["G-S-PSC---"]=E["TP.SP CLASS III"],t["G-S-PSC---"]={x1:60,x2:140,y1:-60},I["G-S-PSD---"]=E["TP.SP CLASS IV"],t["G-S-PSD---"]={x1:60,x2:140,y1:-60},I["G-S-PSE---"]=E["TP.SP CLASS V"],t["G-S-PSE---"]={x1:60,x2:140,y1:-60},I["G-S-PSF---"]=E["TP.SP CLASS VI"],t["G-S-PSF---"]={x1:60,x2:140,y1:-60},I["G-S-PSG---"]=E["TP.SP CLASS VII"],t["G-S-PSG---"]={x1:60,x2:140,y1:-60},I["G-S-PSH---"]=E["TP.SP CLASS VIII"],t["G-S-PSH---"]={x1:60,x2:140,y1:-60},I["G-S-PSI---"]=E["TP.SP CLASS IX"],t["G-S-PSI---"]={x1:60,x2:140,y1:-60},I["G-S-PSJ---"]=E["TP.SP CLASS X"],t["G-S-PSJ---"]={x1:60,x2:140,y1:-60},I["G-S-PAS---"]=E["TP.AMMUNITION SUPPLY POINT (ASP)"],t["G-S-PAS---"]={x1:60,x2:140,y1:-60},I["G-S-PAT---"]=E["TP.AMMUNITION TRANSFER POINT (ATP)"],t["G-S-PAT---"]={x1:60,x2:140,y1:-60},I["G-O-ED----"]=E["TP.DITCHED AIRCRAFT"],I["G-O-EP----"]=E["TP.PERSON IN WATER"],I["G-O-EV----"]=E["TP.DISTRESSED VESSEL"],I["G-O-HM----"]=E["TP.SEA MINELIKE"],t["G-O-HM----"]={x1:40,x2:160,y1:40,y2:150},I["G-O-HI----"]=E["TP.ICEBERG"],t["G-O-HI----"]={x1:50,x2:150,y1:50,y2:150},I["G-O-HO----"]=E["TP.OIL RIG/PLATFORM"],t["G-O-HO----"]={x1:30,x2:170,y1:60,y2:140},I["G-O-SB----"]=E["TP.BOTTOM RETURN"],t["G-O-SB----"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBM---"]=E["TP.INSTALLATION/MANMADE"],t["G-O-SBM---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBN---"]=E["TP.BOTTOM RETURN"],t["G-O-SBN---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBW---"]=E["TP.WRECK, NON DANGEROUS"],t["G-O-SBW---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SBX---"]=E["TP.WRECK, DANGEROUS"],t["G-O-SBX---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SM----"]=E["TP.MARINE LIFE"],t["G-O-SM----"]={x1:100,x2:220,y1:70,y2:130},I["G-O-SS----"]=E["TP.SEA ANOMALY"],t["G-O-SS----"]={x1:50,x2:150,y1:30,y2:120},I["G-O-FA----"]=E["TP.FIX ACOUSTIC"],I["G-O-FE----"]=E["TP.FIX ELECTRO-MAGNETIC"],I["G-O-FO----"]=E["TP.FIX ELECTRO-OPTICAL"]}};var B=[L,y,h,x,U,p,m,F,{type:"letter",getMetadata:o,getIcons:M,iconParts:[V],labels:function(I){I["G-T-GD----"]={},I["G-T-GI----"]={},I["G-T-GN----"]={},I["G-C-MGPFE-"]={},I["G-C-MGPFA-"]={},I["G-C-MGPFO-"]={},I["G-C-MGPI--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:45,fontweight:"bold"}},I["G-C-MAAP--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-C-MAAC--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-C-MAAU--"]={},I["G-C-MAAD--"]={},I["G-C-MDN---"]={},I["G-C-MMPT--"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:115,y:85,fontsize:45,fontweight:"bold"}},I["G-C-MMPO--"]={},I["G-C-MMPOC-"]={},I["G-C-MMPOR-"]={},I["G-C-MMPOF-"]={},I["G-C-MMPOS-"]={},I["G-C-MMPON-"]={},I["G-C-MMPON-"]={},I["G-C-MMPON-"]={},I["G-C-MOPD--"]={},I["G-C-BOATD-"]={},I["G-C-BOAB--"]={},I["G-C-BOAMA-"]={},I["G-C-BOAMT-"]={},I["G-C-BOAMD-"]={},I["G-C-BOAMC-"]={},I["G-C-BOAMU-"]={},I["G-C-BOAMN-"]={},I["G-C-BOAIP-"]={},I["G-C-BOAIC-"]={},I["G-C-BOAIN-"]={},I["G-C-BOAIS-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAIH-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAID-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAV--"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BYCG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BSE---"]={},I["G-C-BSF---"]={},I["G-C-BSH---"]={},I["G-C-BSU---"]={},I["G-C-BWN---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWE---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWI---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWF---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWP---"]={},I["G-C-BWDP--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDS--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDO--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDEM-"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDTF-"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-FSTP--"]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I["G-C-FSS---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:125,y:115,fontsize:40,fontweight:"bold"}},I["G-C-FAU---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40,fontweight:"bold"}},I["G-C-SPA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPY---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPM---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPU---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPO---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPN---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQB--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQC--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQD--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQF--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQH--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQI--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQJ--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPMA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPMT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OX----"]={},I["G-C-OXRN--"]={},I["G-C-OXRD--"]={},I["G-C-OXUD--"]={},I["G-C-OXUB--"]={},I["G-C-OXUL--"]={},I["G-C-OXUS--"]={},I["G-C-OXWA--"]={},I["G-C-OXWD--"]={},I["G-C-OXWE--"]={},I["G-C-OXWG--"]={},I["G-C-OXWM--"]={},I["G-C-OXWI--"]={},I["G-C-OXWP--"]={},I["G-C-OXY---"]={},I["G-C-OXYP--"]={},I["G-C-OXYD--"]={},I["G-C-OXYL--"]={},I["G-C-OXYC--"]={},I["G-C-OXYS--"]={},I["G-C-OXYB--"]={},I["G-C-OXYA--"]={},I["G-C-OXYV--"]={},I["G-C-OXYT--"]={},I["G-C-OXYR--"]={},I["G-C-OXYK--"]={},I["G-C-OXN---"]={},I["G-C-OXH---"]={},I["G-C-OXHQ--"]={},I["G-C-OXHA--"]={},I["G-C-OXHY--"]={},I["G-C-OXHX--"]={},I["G-C-OXR---"]={},I["G-C-OXRR--"]={},I["G-C-OXRD--"]={},I["G-C-OXRW--"]={},I["G-C-OXRP--"]={},I["G-C-OXRT--"]={},I["G-C-OXSTC-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTCP"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTCA"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTR-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTH-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTS-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTSA"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXS---"]={},I["G-C-OXSA--"]={},I["G-C-OXSD--"]={},I["G-C-OXSC--"]={},I["G-C-OXAC--"]={},I["G-C-OXAA--"]={},I["G-C-OXAT--"]={},I["G-C-OXAK--"]={},I["G-C-OXAF--"]={},I["G-C-OXAH--"]={},I["G-C-OXAO--"]={},I["G-C-OXAR--"]={},I["G-C-OXAP--"]={},I["G-C-OXAM--"]={},I["G-C-OXAS--"]={},I["G-C-OXAD--"]={},I["G-C-OG----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGP---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:40,fontsize:45,fontweight:"bold"}},I["G-C-OGT---"]={},I["G-C-OGD---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-C-OGL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGN---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGW---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I["G-O-VA----"]={},I["G-O-VR----"]={},I["G-O-VE----"]={},I["G-O-VB----"]={},I["G-O-VY----"]={},I["G-O-VD----"]={},I["G-O-VI----"]={},I["G-O-VM----"]={},I["G-O-VK----"]={},I["G-O-VS----"]={},I["G-O-VP----"]={},I["G-O-VU----"]={},I["G-O-VC----"]={},I["G-O-VH----"]={},I["G-O-VF----"]={},I["G-O-VO----"]={},I["G-O-VL----"]={},I["G-O-VX----"]={},I["G-O-VZ----"]={},I["G-O-LB----"]={},I["G-O-LG----"]={},I["G-O-LW----"]={},I["G-O-PR----"]={},I["G-O-PRB---"]={},I["G-O-PT----"]={},I["G-O-PC----"]={},I["G-O-PCU---"]={},I["G-O-PD----"]={},I["G-O-PM----"]={},I["G-O-PH----"]={},I["G-O-PHY---"]={},I["G-O-PHW---"]={},I["G-O-PHG---"]={},I["G-O-PHT---"]={},I["G-O-PG----"]={},I["G-O-PS----"]={},I["G-O-PF----"]={},I["G-O-PI----"]={},I["G-O-PE----"]={},I["G-O-PX----"]={},I["G-O-PJV---"]={},I["G-O-PJA---"]={},I["G-O-PJB---"]={},I["G-O-PK----"]={},I["G-O-PA----"]={},I["G-O-PO----"]={},I["G-O-IR----"]={},I["G-O-IS----"]={},I["G-O-IG----"]={},I["G-O-IV----"]={},I["G-O-IK----"]={},I["G-O-ID----"]={},I["G-O-IF----"]={}},icons:function(I,t,E,R){I["G-T-GD----"]=E["TP.DESTROY"],t["G-T-GD----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GI----"]=E["TP.INTERDICT"],t["G-T-GI----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GN----"]=E["TP.NEUTRALIZE"],t["G-T-GN----"]={x1:0,x2:200,y1:40,y2:160},I["G-C-MGPFE-"]=E["TP.FIX ELECTRO-MAGNETIC"],I["G-C-MGPFA-"]=E["TP.FIX ACOUSTIC"],I["G-C-MGPFO-"]=E["TP.FIX ELECTRO-OPTICAL"],I["G-C-MGPI--"]=E["TP.POINT OF INTEREST"],t["G-C-MGPI--"]={x1:50,x2:150,y1:-25},I["G-C-MAAP--"]=E["TP.AIR CONTROL POINT (ACP)"],t["G-C-MAAP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAC--"]=E["TP.COMMUNICATIONS CHECKPOINT"],t["G-C-MAAC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAU--"]=E["TP.PULL-UP POINT"],t["G-C-MAAU--"]={x1:50,x2:240,y1:50,y2:150},I["G-C-MAAD--"]=E["TP.DOWNED AIRCREW PICKUP POINT"],t["G-C-MAAD--"]={x1:60,x2:140,y1:-60},I["G-C-MDN---"]=E["TP.DUMMY MINEFIELD"],t["G-C-MDN---"]={x1:40,x2:160,y1:-10,y2:140},I["G-C-MMPT--"]=E["TP.TARGET REFERENCE"],I["G-C-MMPO--"]=E["TP.OBSERVATION POST/OUTPOST"],t["G-C-MMPO--"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOC-"]=E["TP.COMBAT OUTPOST"],t["G-C-MMPOC-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOR-"]=E["TP.OBSERVATION POST/RECONNAISSANCE"],t["G-C-MMPOR-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOF-"]=E["TP.FORWARD OBSERVER POSITION"],t["G-C-MMPOF-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOS-"]=E["TP.SENSOR OUTPOST"],t["G-C-MMPOS-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPON-"]=E["TP.CBRN OBSERVATION POST"],t["G-C-MMPON-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MOPD--"]=E["TP.POINT OF DEPARTURE"],t["G-C-MOPD--"]={x1:60,x2:140,y1:-60},I["G-C-BOATD-"]=E["TP.FIXED AND PREFABRICATED"],t["G-C-BOATD-"]={x1:60,x2:140,y1:30},I["G-C-BOAB--"]=E["TP.BOOBY TRAP"],I["G-C-BOAMA-"]=E["TP.ANTIPERSONNEL (AP) MINES"],I["G-C-BOAMT-"]=E["TP.ANTITANK MINE (AT)"],I["G-C-BOAMD-"]=E["TP.(AT) ANTIHANDLING DEVICE"],t["G-C-BOAMD-"]={x1:60,x2:140,y1:40,y2:195},I["G-C-BOAMC-"]=E["TP.(AT) DIRECTIONAL"],t["G-C-BOAMC-"]={x1:60,x2:140,y1:10,y2:140},I["G-C-BOAMU-"]=E["TP.UNSPECIFIED MINE"],I["G-C-BOAMW-"]=E["TP.WIDE AREA MINES"],I["G-C-BOAIP-"]=E["TP.PLANNED MINEFIELD"],t["G-C-BOAIP-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIC-"]=E["TP.MINEFIELDS STATIC"],t["G-C-BOAIC-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIN-"]=E["TP.ANTITANK (AT) MINEFIELD"],t["G-C-BOAIN-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIS-"]=E["TP.SCATTERABLE MINES"],t["G-C-BOAIS-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAIH-"]=E["TP.ANTIPERSONNEL (AP) MINEFIELD"],t["G-C-BOAIH-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAID-"]=E["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"],t["G-C-BOAID-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAV--"]=E["TP.VOLCANO MINEFIELD"],t["G-C-BOAV--"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BYCG--"]=E["TP.ENGINEER REGULATING POINT"],t["G-C-BYCG--"]={x1:60,x2:140,y1:-60},I["G-C-BSE---"]=E["TP.EARTHWORK/FORTIFICATION"],I["G-C-BSF---"]=E["TP.FORT"],I["G-C-BSH---"]=E["TP.SURFACE SHELTER"],I["G-C-BSU---"]=E["TP.UNDERGROUND SHELTER"],I["G-C-BWN---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-C-BWN---"]={x1:60,x2:140,y1:-20},I["G-C-BWE---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-C-BWE---"]={x1:60,x2:140,y1:-20},I["G-C-BWI---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],t["G-C-BWI---"]={x1:60,x2:140,y1:-20},I["G-C-BWF---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],t["G-C-BWF---"]={x1:60,x2:140,y1:-20},I["G-C-BWP---"]=E["TP.NUCLEAR FALLOUT PRODUCING"],t["G-C-BWP---"]={x1:50,x2:150,y1:-20},I["G-C-BWDP--"]=E["TP.DECON SITE/POINT"],t["G-C-BWDP--"]={x1:60,x2:140,y1:-60},I["G-C-BWDA--"]=E["TP.ALTERNATE DECON SITE/POINT"],t["G-C-BWDA--"]={x1:60,x2:140,y1:-60},I["G-C-BWDT--"]=E["TP.DECON SITE/POINT (TROOPS)"],t["G-C-BWDT--"]={x1:60,x2:140,y1:-60},I["G-C-BWDE--"]=E["TP.DECON SITE/POINT (EQUIPMENT)"],t["G-C-BWDE--"]={x1:60,x2:140,y1:-60},I["G-C-BWDS--"]=E["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],t["G-C-BWDS--"]={x1:60,x2:140,y1:-60},I["G-C-BWDO--"]=E["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],t["G-C-BWDO--"]={x1:60,x2:140,y1:-60},I["G-C-BWDG--"]=E["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],t["G-C-BWDG--"]={x1:60,x2:140,y1:-60},I["G-C-BWDEM-"]=E["TP.DECON POINT (MAIN) EQUIPMENT"],t["G-C-BWDEM-"]={x1:60,x2:140,y1:-60},I["G-C-BWDTF-"]=E["TP.DECON POINT (FORWARD) TROOPS"],t["G-C-BWDTF-"]={x1:60,x2:140,y1:-60},I["G-C-FSTP--"]=E["TP.POINT/SINGLE TARGET"],I["G-C-FSS---"]=E["TP.FIRE SUPPORT STATION"],I["G-C-FAU---"]=E["TP.NUCLEAR TARGET"],I["G-C-SPA---"]=E["TP.AMBULANCE EXCHANGE POINT"],t["G-C-SPA---"]={x1:60,x2:140,y1:-60},I["G-C-SPC---"]=E["TP.CANNIBALIZATION POINT"],t["G-C-SPC---"]={x1:60,x2:140,y1:-60},I["G-C-SPY---"]=E["TP.CASUALTY COLLECTION POINT"],t["G-C-SPY---"]={x1:60,x2:140,y1:-60},I["G-C-SPT---"]=E["TP.CIVILIAN COLLECTION POINT"],t["G-C-SPT---"]={x1:60,x2:140,y1:-60},I["G-C-SPD---"]=E["TP.DETAINEE COLLECTION POINT"],t["G-C-SPD---"]={x1:60,x2:140,y1:-60},I["G-C-SPE---"]=E["TP.EPW COLLECTION POINT"],t["G-C-SPE---"]={x1:60,x2:140,y1:-60},I["G-C-SPL---"]=E["TP.LOGISTICS RELEASE POINT"],t["G-C-SPL---"]={x1:60,x2:140,y1:-60},I["G-C-SPM---"]=E["TP.MAINTENANCE COLLECTION POINT"],t["G-C-SPM---"]={x1:60,x2:140,y1:-60},I["G-C-SPR---"]=E["TP.REARM, REFUEL AND RESUPPLY POINT"],t["G-C-SPR---"]={x1:60,x2:140,y1:-60},I["G-C-SPU---"]=E["TP.REFUEL ON THE MOVE POINT"],t["G-C-SPU---"]={x1:60,x2:140,y1:-60},I["G-C-SPO---"]=E["TP.TRAFFIC CONTROL POST"],t["G-C-SPO---"]={x1:60,x2:140,y1:-60},I["G-C-SPI---"]=E["TP.TRAILER TRANSFER POINT"],t["G-C-SPI---"]={x1:60,x2:140,y1:-60},I["G-C-SPN---"]=E["TP.UNIT MAINTENANCE COLLECTION POINT"],t["G-C-SPN---"]={x1:60,x2:140,y1:-60},I["G-C-SPQT--"]=E["TP.SUPPLY POINT"],t["G-C-SPQT--"]={x1:60,x2:140,y1:-60},I["G-C-SPQA--"]=E["TP.SP CLASS I"],t["G-C-SPQA--"]={x1:60,x2:140,y1:-60},I["G-C-SPQB--"]=E["TP.SP CLASS II"],t["G-C-SPQB--"]={x1:60,x2:140,y1:-60},I["G-C-SPQC--"]=E["TP.SP CLASS III"],t["G-C-SPQC--"]={x1:60,x2:140,y1:-60},I["G-C-SPQD--"]=E["TP.SP CLASS IV"],t["G-C-SPQD--"]={x1:60,x2:140,y1:-60},I["G-C-SPQE--"]=E["TP.SP CLASS V"],t["G-C-SPQE--"]={x1:60,x2:140,y1:-60},I["G-C-SPQF--"]=E["TP.SP CLASS VI"],t["G-C-SPQF--"]={x1:60,x2:140,y1:-60},I["G-C-SPQG--"]=E["TP.SP CLASS VII"],t["G-C-SPQG--"]={x1:60,x2:140,y1:-60},I["G-C-SPQH--"]=E["TP.SP CLASS VIII"],t["G-C-SPQH--"]={x1:60,x2:140,y1:-60},I["G-C-SPQI--"]=E["TP.SP CLASS IX"],t["G-C-SPQI--"]={x1:60,x2:140,y1:-60},I["G-C-SPQJ--"]=E["TP.SP CLASS X"],t["G-C-SPQJ--"]={x1:60,x2:140,y1:-60},I["G-C-SPMA--"]=E["TP.AMMUNITION SUPPLY POINT (ASP)"],t["G-C-SPMA--"]={x1:60,x2:140,y1:-60},I["G-C-SPMT--"]=E["TP.AMMUNITION TRANSFER POINT (ATP)"],t["G-C-SPMT--"]={x1:60,x2:140,y1:-60},I["G-C-OX----"]=E["TP.SPECIAL POINT"],t["G-C-OX----"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXRN--"]=E["TP.NAVIGATIONAL REFERENCE"],t["G-C-OXRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXUD--"]=E["TP.DATUM"],t["G-C-OXUD--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXUB--"]=E["TP.BRIEF CONTACT"],t["G-C-OXUB--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUL--"]=E["TP.LOST CONTACT"],t["G-C-OXUL--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUS--"]=E["TP.SINKER"],t["G-C-OXUS--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXWA--"]=E["TP.AIM POINT"],t["G-C-OXWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWD--"]=E["TP.DROP POINT"],t["G-C-OXWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-C-OXWE--"]=E["TP.ENTRY POINT"],t["G-C-OXWE--"]={x1:50,x2:150,y1:50},I["G-C-OXWG--"]=E["TP.GROUND ZERO"],t["G-C-OXWG--"]={x1:50,x2:150,y1:30},I["G-C-OXWM--"]=E["TP.MSL DETECT POINT"],t["G-C-OXWM--"]={x1:50,x2:150,y1:30},I["G-C-OXWI--"]=E["TP.IMPACT POINT"],t["G-C-OXWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWP--"]=E["TP.PREDICTED IMPACT POINT"],t["G-C-OXWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXY---"]=E["TP.SONOBUOY"],t["G-C-OXY---"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYP--"]=E["TP.SONOBUOY PATTERN CENTER"],t["G-C-OXYP--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYD--"]=E["TP.SONOBUOY DIFAR"],t["G-C-OXYD--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYL--"]=E["TP.SONOBUOY LOFAR"],t["G-C-OXYL--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYC--"]=E["TP.SONOBUOY CASS"],t["G-C-OXYC--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYS--"]=E["TP.SONOBUOY DICASS"],t["G-C-OXYS--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYB--"]=E["TP.SONOBUOY BT"],t["G-C-OXYB--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYA--"]=E["TP.SONOBUOY ANM"],t["G-C-OXYA--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYV--"]=E["TP.SONOBUOY VLAD"],t["G-C-OXYV--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYT--"]=E["TP.SONOBUOY ATAC"],t["G-C-OXYT--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYR--"]=E["TP.SONOBUOY RO"],t["G-C-OXYR--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYK--"]=E["TP.SONOBUOY KINGPIN"],t["G-C-OXYK--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXN---"]=E["TP.FORMATION"],t["G-C-OXN---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXH---"]=E["TP.HARBOR"],t["G-C-OXH---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHQ--"]=E["TP.HARBOR POINT Q"],t["G-C-OXHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHA--"]=E["TP.HARBOR POINT A"],t["G-C-OXHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHY--"]=E["TP.HARBOR POINT Y"],t["G-C-OXHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHX--"]=E["TP.HARBOR POINT X"],t["G-C-OXHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXR---"]=E["TP.ROUTE"],t["G-C-OXR---"]={x1:30,x2:170,y1:60,y2:140},I["G-C-OXRR--"]=E["TP.ROUTE RENDEZVOUS"],t["G-C-OXRR--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRD--"]=E["TP.ROUTE DIVERSIONS"],t["G-C-OXRD--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRW--"]=E["TP.ROUTE WAYPOINT"],t["G-C-OXRW--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRP--"]=E["TP.ROUTE PIM"],t["G-C-OXRP--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRT--"]=E["TP.ROUTE POINT R"],t["G-C-OXRT--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXSTC-"]=E["TP.COMBATANT STATION"],t["G-C-OXSTC-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCP"]=E["TP.PICKET STATION"],t["G-C-OXSTCP"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCA"]=E["TP.ASW SHIP STATION"],t["G-C-OXSTCA"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTR-"]=E["TP.REPLENISHMENT AT SEA (RAS) STATION"],t["G-C-OXSTR-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTH-"]=E["TP.RESCUE STATION"],t["G-C-OXSTH-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTS-"]=E["TP.SUBMARINE STATION"],t["G-C-OXSTS-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTSA"]=E["TP.ASW SUBMARINE STATION"],t["G-C-OXSTSA"]={x1:-115,x2:140,y1:60,y2:140},I["G-C-OXS---"]=E["TP.SEARCH"],t["G-C-OXS---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXSA--"]=E["TP.SEARCH AREA"],t["G-C-OXSA--"]={x1:20,x2:150,y1:50,y2:150},I["G-C-OXSD--"]=E["TP.DIP POSITION"],t["G-C-OXSD--"]={x1:10,x2:150,y1:50,y2:150},I["G-C-OXSC--"]=E["TP.SEARCH CENTER"],t["G-C-OXSC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXAC--"]=E["TP.COMBAT AIR PATROL (CAP)"],t["G-C-OXAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAA--"]=E["TP.AIRBORNE EARLY WARNING (AEW)"],t["G-C-OXAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAT--"]=E["TP.TACAN"],t["G-C-OXAT--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAK--"]=E["TP.TANKING"],t["G-C-OXAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAF--"]=E["TP.FIXED WING"],t["G-C-OXAF--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAH--"]=E["TP.ROTARY WING"],t["G-C-OXAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAO--"]=E["TP.TOMCAT"],t["G-C-OXAO--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAR--"]=E["TP.RESCUE"],t["G-C-OXAR--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAP--"]=E["TP.REPLENISH"],t["G-C-OXAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAM--"]=E["TP.MARSHALL"],t["G-C-OXAM--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAS--"]=E["TP.STRIKE IP"],t["G-C-OXAS--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAD--"]=E["TP.CORRIDOR TAB POINT"],t["G-C-OXAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OG----"]=E["TP.ACTION POINT"],t["G-C-OG----"]={x1:60,x2:140,y1:-60},I["G-C-OGC---"]=E["TP.ACTION POINT"],t["G-C-OGC---"]={x1:60,x2:140,y1:-60},I["G-C-OGP---"]=E["TP.CONTACT POINT"],t["G-C-OGP---"]={x1:55,x2:145,y1:-10},I["G-C-OGT---"]=E["TP.COORDINATION POINT"],t["G-C-OGT---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OGD---"]=E["TP.DECISION POINT"],t["G-C-OGD---"]={x1:30,x2:170,y1:25,y2:160},I["G-C-OGL---"]=E["TP.ACTION LINKUP POINT"],t["G-C-OGL---"]={x1:60,x2:140,y1:-60},I["G-C-OGN---"]=E["TP.ACTION PASSAGE POINT"],t["G-C-OGN---"]={x1:60,x2:140,y1:-60},I["G-C-OGR---"]=E["TP.ACTION RALLY POINT"],t["G-C-OGR---"]={x1:60,x2:140,y1:-60},I["G-C-OGS---"]=E["TP.ACTION RELEASE POINT"],t["G-C-OGS---"]={x1:60,x2:140,y1:-60},I["G-C-OGI---"]=E["TP.ACTION START POINT"],t["G-C-OGI---"]={x1:60,x2:140,y1:-60},I["G-C-OGW---"]=E["TP.WAYPOINT"],t["G-C-OGW---"]={x1:60,x2:140,y1:60,y2:140},I["G-O-VA----"]=E["TP.FIRE"],I["G-O-VR----"]=E["GR.EQ.HOWITZER"],I["G-O-VE----"]=E["ST.IC.KILLING VICTIM"],I["G-O-VB----"]=E["AIR.MISSILE.IC.BOMB"],I["G-O-VY----"]=E["ST.IC.BOOBY TRAP"],I["G-O-VD----"]=E["ST.IC.DRIVE-BY SHOOTING"],I["G-O-VI----"]=E["TP.INDIRECT FIRE"],I["G-O-VM----"]=E["GR.EQ.MORTAR"],I["G-O-VK----"]=E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],I["G-O-VS----"]=E["ST.IC.SNIPING"],I["G-O-VP----"]=E["ST.IC.POISONING"],I["G-O-VU----"]=E["TP.AMBUSH"],I["G-O-VC----"]=E["GR.IC.FF.CLASS V"],I["G-O-VH----"]=E["AR.I.FF.CIVILIAN ROTARY WING"],I["G-O-VF----"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.MOTORIZED"]],I["G-O-VO----"]=E["GR.IC.FF.INFANTRY"],I["G-O-VL----"]=E["GR.IC.FF.RECONNAISSANCE"],I["G-O-VX----"]=E["GR.IC.FF.SIGNAL"],I["G-O-VZ----"]=E["GR.IC.FF.SUPPLY"],I["G-O-LB----"]=E["ST.IC.BLACK LIST LOCATION"],I["G-O-LG----"]=E["ST.IC.GRAY LIST LOCATION"],I["G-O-LW----"]=E["ST.IC.WHITE LIST LOCATION"],I["G-O-PR----"]=E["TP.ROAD BLOCK"],I["G-O-PRB---"]=E["TP.ROAD BLOCK (UNDER CONSTRUCTION)"],I["G-O-PT----"]=E["ST.IC.PATROLLING"],I["G-O-PC----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.WILLING"]],I["G-O-PCU---"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.COERCED/IMPRESSED"]],I["G-O-PD----"]=E["ST.IC.DEMONSTRATION"],I["G-O-PM----"]=E["ST.IC.MINE LAYING"],I["G-O-PH----"]=E["ST.IC.PSYCHOLOGICAL OPERATIONS"],I["G-O-PHY---"]=E["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"],I["G-O-PHW---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHG---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHT---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.HOUSE-TO-HOUSE"]],I["G-O-PG----"]=E["ST.IC.SEARCHING"],I["G-O-PS----"]=E["ST.IC.SPY"],I["G-O-PF----"]=E["ST.IC.FOOD DISTRIBUTION"],I["G-O-PI----"]=E["GR.IC.FF.MEDICAL TREATMENT FACILITY"],I["G-O-PE----"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.INTERCEPT"]],I["G-O-PX----"]=E["ST.IC.EXTORTION"],I["G-O-PJV---"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJA---"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJB---"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PK----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"]],I["G-O-PA----"]=E["ST.IC.ARREST"],I["G-O-PO----"]=E["ST.IC.DRUG RELATED ACTIVITIES"],I["G-O-IR----"]=E["ST.IC.GROUP"],I["G-O-IS----"]=E["ST.IC.SAFE HOUSE"],I["G-O-IG----"]=E["ST.IC.GRAFFITI"],I["G-O-IV----"]=E["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"],I["G-O-IK----"]=E["ST.IC.KNOWN INSURGENT VEHICLE"],I["G-O-ID----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.DRUG"]],I["G-O-IF----"]=E["ST.IC.INTERNAL SECURITY FORCE"]}}],Y=[L,y,h,x,U,p,m,F,z,H,{type:"letter",getMetadata:o,getIcons:M,iconParts:[function(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=E.iconColor[C],S={"2525B.ASWSUB":{type:"path",d:"m 80,85 40,0 0,-20 -40,0 z m 20,-30 0,40 m -40,15 15,15 50,0 15,-15 -15,-15 -50,0 z"},"2525B.NCBTT.STN":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"NC"}],"2525B.STN.ASWSHP":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"AS"}],"2525B.STN.PKT":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"PK"}],"2525B.STN.RSC":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"RS"}],"2525B.STN":{type:"path",fill:!1,d:"m 70,85 c 20,0 40,0 60,0 0,10 0,20 0,30 -20,0 -40,0 -60,0 0,-10 0,-20 0,-30 z m 30,-15 c 0,20 0,40 0,60 m 35,-5 C 120,148 82.7,149 66.8,126 49.2,105 59.1,69.2 85.2,60.1 103,53.1 124,59.4 135,74.8"},"2525B.SUB.STN":[{type:"path",d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"SS"}]};for(var N in S)S.hasOwnProperty(N)&&(I.hasOwnProperty(N)&&console.warn("Override of: "+N),n.call(this,S[N],T),I[N]=S[N])}],icons:function(I,t,E,R){I["S-S-S-----"]=E["2525B.STN"],I["S-S-SP----"]=E["2525B.STN.PKT"],I["S-S-SA----"]=E["2525B.STN.ASWSHP"],I["S-S-NN----"]=E["2525B.NCBTT.STN"],I["S-S-NNR---"]=E["2525B.STN.RSC"],I["S-U-SS----"]=E["2525B.SUB.STN"],I["S-U-SSA---"]=E["2525B.ASWSUB"],I["G-O-SBWD--"]=E["TP.WRECK, DANGEROUS"],t["G-O-SBXD--"]={x1:35,x2:165,y1:70,y2:130}}},k],W=[L,y,h,x,U,p,m,F,z,H,{type:"letter",getMetadata:o,getIcons:M,iconParts:[c,V],icons:function(I,t,E,R){I["E-I-A-----"]=[E["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]],I["E-I-AC----"]=[E["ST.IC.GROUP"],E["AC.M1.RIOT"]],I["E-I-B-----"]=[E["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]],I["E-I-BA----"]=[E["ST.IC.BOMB"],E["AC.M1.THREAT"]],I["E-I-BC----"]=[E["ST.IC.EXPLOSION"],s._scale(.6,E["ST.IC.BOMB"])],I["E-I-BD----"]=[E["ST.IC.GROUP"],E["ST.M1.LOOT"]],I["E-I-BF----"]=[E["AC.IC.SHOOTING"]],I["E-I-C-----"]=[E["AC.IC.FIRE EVENT"]],I["E-I-CA----"]=[E["AC.IC.HOT SPOT"]],I["E-I-CB----"]=[E["AC.IC.NON-REsIdENTIAL FIRE"]],I["E-I-CC----"]=[E["AC.IC.FIRE ORIGIN"]],I["E-I-CD----"]=[E["AC.IC.REsIdENTIAL FIRE"]],I["E-I-CE----"]=[E["AC.IC.SCHOOL FIRE"]],I["E-I-CF----"]=[E["AC.IC.SMOKE"]],I["E-I-CG----"]=[E["AC.IC.SPECIAL NEEDS FIRE"]],I["E-I-CH----"]=[E["AC.IC.WILD FIRE"]],I["E-I-D-----"]=[E["AC.IC.HAZARDOUS MATERIALS INCIDENT"]],I["E-I-DA----"]=[E["AC.IC.CHEMICAL AGENT"]],I["E-I-DB----"]=[E["AC.IC.CORROSIVE MATERIAL"]],I["E-I-DC----"]=[E["AC.IC.HAZARDOUS WHEN WET"]],I["E-I-DD----"]=[E["AC.IC.EXPLOSIVE MATERIAL"]],I["E-I-DE----"]=[E["AC.IC.FLAMMABLE GAS"]],I["E-I-DF----"]=[E["AC.IC.FLAMMABLE LIQUID"]],I["E-I-DG----"]=[E["AC.IC.FLAMMABLE SOLID"]],I["E-I-DH----"]=[E["AC.IC.NON-FLAMMABLE GAS"]],I["E-I-DI----"]=[E["AC.IC.ORGANIC PEROXIDE"]],I["E-I-DJ----"]=[E["AC.IC.OXIDIZER"]],I["E-I-DK----"]=[E["AC.IC.RADIOACTIVE MATERIAL"]],I["E-I-DL----"]=[E["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]],I["E-I-DM----"]=[E["AC.IC.TOXIC GAS"]],I["E-I-DN----"]=[E["AC.IC.TOXIC INFECTIOUS MATERIAL"]],I["E-I-DO----"]=[E["AC.IC.UNEXPLODED ORDNANCE"]],I["E-I-E-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.HIJACKING (AIRPLANE)"]],I["E-I-EA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.HIJACKING (AIRPLANE)"]],I["E-I-F-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.HIJACKING (BOAT)"]],I["E-I-FA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.HIJACKING (BOAT)"]],I["E-I-G-----"]=[E["ST.M1.INCIDENT"],E["GR.EQ.TRAIN LOCOMOTIVE"]],I["E-I-GA----"]=[E["ST.M1.ACCIDENT"],E["GR.EQ.TRAIN LOCOMOTIVE"]],I["E-I-GB----"]=[E["GR.EQ.TRAIN LOCOMOTIVE"],E["ST.M1.HIJACKING/HIJACKED"]],I["E-I-H-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["E-I-HA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["E-N-A-----"]=[],I["E-N-AA----"]=[E["AC.IC.AFTERSHOCK"]],I["E-N-AB----"]=[E["AC.IC.AVALANCHE"]],I["E-N-AC----"]=[E["AC.IC.EARTHQUAKE EPICENTER"]],I["E-N-AD----"]=[E["AC.IC.LANDSLIDE"]],I["E-N-AE----"]=[E["AC.IC.SUBSIDENCE"]],I["W-S-WSVE--"]=[E["AC.IC.VOLCANIC ERUPTION"]],I["E-N-AG----"]=[E["AC.IC.VOLCANIC THREAT"]],I["W-S-WSD-LI"]=[E["ATMOSPHERIC.IC.DRIZZLE.INTERMITTENT LIGHT"]],I["E-N-B-----"]=[],I["E-N-BB----"]=[E["AC.IC.DROUGHT"]],I["E-N-BC----"]=[E["AC.IC.FLOOD"]],I["W-S-WSFGSO"]=[E["ATMOSPHERIC.IC.FOG.SKY OBSCURED"]],I["W-S-WSGRL-"]=[E["ATMOSPHERIC.IC.HAIL.LIGHT NOT ASSOCIATED WITH THUNDER"]],I["E-N-BF----"]=[E["AC.IC.INVERSION"]],I["W-S-WSR-LI"]=[E["ATMOSPHERIC.IC.RAIN.INTERMITTENT LIGHT"]],I["W-S-WSDSLM"]=[E["ATMOSPHERIC.IC.DUST OR SAND.LIGHT TO MODERATE"]],I["W-S-WSS-LI"]=[E["ATMOSPHERIC.IC.SNOW.INTERMITTENT LIGHT"]],I["W-S-WSTMH-"]=[E["ATMOSPHERIC.IC.STORMS.THUNDERSTORM LIGHT TO MODERATE - WITH HAIL"]],I["W-S-WST-FC"]=[E["ATMOSPHERIC.IC.STORMS.FUNNEL CLOUD (TORNADO/WATERSPOUT)"]],I["W-S-WSTSS-"]=[E["ATMOSPHERIC.IC.TROPICAL STORM SYSTEMS.TROPICAL STORM"]],I["E-N-BM----"]=[E["AC.IC.TSUNAMI"]],I["E-N-C-----"]=[],I["E-N-CA----"]=[E["AC.IC.BIRD"]],I["E-N-CB----"]=[E["AC.IC.INSECT"]],I["E-N-CC----"]=[E["AC.IC.MICROBIAL"]],I["E-N-CD----"]=[E["AC.IC.REPTILE"]],I["E-N-CE----"]=[E["AC.IC.RODENT"]],I["E-O-A-----"]=I["E-O-AA----"]=I["E-O-AB----"]=I["E-O-AC----"]=I["E-O-AD----"]=[E["GR.IC.EMERGENCY MEDICAL OPERATION"]],I["E-O-AE----"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.M1.MEDEVAC"]],I["E-O-AF----"]=[s._translate(0,10,s._scale(.8,E["GR.I.FF.CIVILIAN ROTARY WING"])),E["GR.M1.MEDEVAC"]],I["E-O-AG----"]=[E["AC.IC.HEALTH DEPARTMENT FACILITY"]],I["E-O-AJ----"]=[E["AC.IC.MEDICAL FACILITIES OUTPATIENT"]],I["E-O-AK----"]=[E["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]],I["E-O-AL----"]=[E["AC.IC.PHARMACY"]],I["E-O-AM----"]=[E["AC.IC.TRIAGE"]],I["E-O-B-----"]=I["E-O-BA----"]=I["E-O-BB----"]=I["E-O-BC----"]=[E["GR.IC.FF.EMERGENCY OPERATION"]],I["E-O-BD----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]],I["E-O-BE----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]],I["E-O-BF----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY OPERATIONS CENTER"]],I["E-O-BG----"]=[E["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]],I["E-O-BH----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY SHELTER"]],I["E-O-BI----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY STAGING AREA"]],I["E-O-BJ----"]=[E["GR.IC.FF.EMERGENCY OPERATION"]],I["E-O-BK----"]=I["S-G-USSW--"],I["E-O-BL----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.EMERGENCY"]],I["E-O-C-----"]=I["E-O-CA----"]=I["E-O-CB----"]=I["E-O-CE----"]=[E["GR.IC.FIRE PROTECTION"]],I["E-O-CC----"]=[E["AC.IC.FIRE HYDRANT"]],I["E-O-CD----"]=[E["AC.IC.OTHER WATER SUPPLY LOCATION"]],I["E-O-D-----"]=I["E-O-DA----"]=I["E-O-DB----"]=I["E-O-DC----"]=[E["GR.IC.FF.LAW ENFORCEMENT"]],I["E-O-DD----"]=I["E-O-DDA---"]=I["E-O-DDB---"]=I["E-O-DDC---"]=[E["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I["E-O-DE----"]=I["E-O-DEA---"]=I["E-O-DEB---"]=I["E-O-DEC---"]=[E["GR.IC.FF.BORDER PATROL"]],I["E-O-DF----"]=I["E-O-DFA---"]=I["E-O-DFB---"]=I["E-O-DFC---"]=[E["GR.IC.FF.CUSTOMS SERVICE"]],I["E-O-DG----"]=I["E-O-DGA---"]=I["E-O-DGB---"]=I["E-O-DGC---"]=[E["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I["E-O-DH----"]=I["E-O-DHA---"]=I["E-O-DHB---"]=I["E-O-DHC---"]=[E["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I["E-O-DI----"]=I["E-O-DIA---"]=I["E-O-DIB---"]=I["E-O-DIC---"]=[E["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I["E-O-DJ----"]=I["E-O-DJB---"]=I["E-O-DJC---"]=[E["GR.IC.LAW ENFORCEMENT"]],I["E-O-DK----"]=[E["GR.IC.FF.PRISON"]],I["E-O-DL----"]=I["E-O-DLA---"]=I["E-O-DLB---"]=I["E-O-DLC---"]=[E["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I["E-O-DM----"]=I["E-O-DMA---"]=I["E-O-DMB---"]=I["E-O-DMC---"]=[E["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I["E-O-DN----"]=I["E-O-DNA---"]=I["E-O-DNC---"]=[E["GR.IC.LAW ENFORCEMENT VESSEL"]],I["E-O-DO----"]=I["E-O-DOA---"]=I["E-O-DOB---"]=I["E-O-DOC---"]=[E["GR.IC.FF.US MARSHALS SERVICE"]],I["E-O-EA----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.BIOLOGICAL"]],I["E-O-EB----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.CHEMICAL"]],I["E-O-EC----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.INTRUSION"]],I["E-O-ED----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.NUCLEAR"]],I["E-O-EE----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.RADIOLOGICAL"]],I["E-F-A-----"]=[E["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]],I["E-F-AA----"]=[E["GR.IN.IC.AGRICULTURAL LABORATORY"]],I["E-F-AB----"]=[E["GR.IN.IC.ANIMAL FEEDLOT"]],I["E-F-AC----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.COMMERCIAL"]],I["E-F-AD----"]=[E["GR.IN.IC.FARM/RANCH"]],I["E-F-AE----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.PRODUCTION"]],I["E-F-AF----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.RETAIL"]],I["E-F-AG----"]=[E["GR.IN.IC.GRAIN STORAGE"]],I["E-F-B-----"]=[E["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]],I["E-F-BA----"]=[E["GR.IN.IC.ATM"]],I["E-F-BB----"]=[E["GR.IN.IC.BANK"]],I["E-F-BC----"]=[E["GR.IN.IC.BULLION STORAGE"]],I["E-F-BD----"]=[E["GR.IN.IC.FEDERAL RESERVE BANK"]],I["E-F-BE----"]=[E["GR.IN.IC.FINANCIAL EXCHANGE"]],I["E-F-BF----"]=[E["GR.IN.IC.FINANCIAL SERVICES, OTHER"]],I["E-F-C-----"]=[E["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]],I["E-F-CA----"]=[E["GR.IN.IC.CHEMICAL PLANT"]],I["E-F-CB----"]=[E["GR.IN.IC.FIREARMS MANUFACTURER"]],I["E-F-CC----"]=[E["GR.IN.IC.FIREARMS RETAILER"]],I["E-F-CD----"]=[E["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]],I["E-F-CE----"]=[E["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]],I["E-F-CF----"]=[E["GR.IN.IC.INDUSTRIAL SITE"]],I["E-F-CG----"]=[E["GR.IN.IC.LANDFILL"]],I["E-F-CH----"]=[E["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]],I["E-F-CI----"]=[E["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]],I["E-F-CJ----"]=[E["GR.IN.IC.TOXIC RELEASE INVENTORY"]],I["E-F-D-----"]=[E["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]],I["E-F-DA----"]=[E["GR.IN.IC.COLLEGE/UNIVERSITY"]],I["E-F-DB----"]=[E["GR.IN.IC.SCHOOL"]],I["E-F-EA----"]=[s._translate(0,15,s._scale(.75,E["GR.IN.IC.ELECTRIC POWER"])),E["AC.M1.GENERATION STATION"]],I["E-F-EB----"]=[E["GR.IN.IC.NATURAL GAS FACILITY"]],I["E-F-EE----"]=[E["GR.IN.IC.PROPANE FACILITY"]],I["E-F-F-----"]=[E["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]],I["E-F-G-----"]=[E["GR.IN.IC.MILITARY INFRASTRUCTURE"]],I["E-F-GA----"]=[E["GR.IN.IC.BASE"],E["AC.M1.MILITARY ARMORY"]],I["E-F-H-----"]=[E["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]],I["E-F-HA----"]=[E["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]],I["E-F-HB----"]=[E["GR.IN.IC.POST OFFICE"]],I["E-F-I-----"]=[E["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]],I["E-F-IA----"]=[E["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]],I["E-F-IB----"]=[E["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]],I["E-F-IC----"]=[E["GR.IN.IC.RECREATIONAL AREA"]],I["E-F-ID----"]=[E["GR.IN.IC.RELIGIOUS INSTITUTION"]],I["E-F-J-----"]=[E["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]],I["E-F-JA----"]=[E["GR.IN.IC.ADULT DAY CARE"]],I["E-F-JB----"]=[E["GR.IN.IC.CHILD DAY CARE"]],I["E-F-JC----"]=[E["GR.IN.IC.ELDER CARE"]],I["E-F-K-----"]=[E["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]],I["E-F-KB----"]=[E["GR.IN.IC.TELECOMMUNICATIONS TOWER"]],I["E-F-LA----"]=[E["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]],I["G-M-BCB---"]=[E["GR.IN.IC.BRIDGE"]],t["G-M-BCB---"]={x1:50,x2:150,y1:50,y2:150},I["E-F-LD----"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I["E-F-LE----"]=[E["GR.IC.FERRY"]],I["E-F-LF----"]=[E["GR.IN.IC.HELICOPTER LANDING SITE"]],I["W-S-ML----"]=[E["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE LOCK"]],I["E-F-LH----"]=[E["GR.IC.MAINTENANCE"]],I["E-F-LJ----"]=[E["GR.IC.RAILHEAD"]],I["E-F-LK----"]=[E["GR.IN.IC.REST STOP"]],I["W-S-HPBA--"]=[E["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE SHIP ANCHORAGE"]],I["E-F-LM----"]=[E["GR.IN.IC.TOLL FACILITY"]],I["G-S-PO----"]=E["TP.TRAFFIC CONTROL POST"],t["G-S-PO----"]={x1:60,x2:140,y1:-60},I["E-F-LO----"]=[E["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]],I["E-F-LP----"]=[E["GR.IN.IC.TUNNEL"]],I["E-F-MA----"]=[E["GR.IN.IC.CONTROL VALVE"]],I["E-F-MB----"]=[E["GR.IN.IC.DAM"]],I["E-F-MC----"]=[E["GR.IN.IC.DISCHARGE OUTFALL"]],I["E-F-MD----"]=[E["GR.IN.IC.GROUND WATER WELL"]],I["E-F-ME----"]=[E["GR.IN.IC.PUMPING STATION"]],I["E-F-MF----"]=[E["GR.IN.IC.RESERVOIR"]],I["E-F-MG----"]=[E["GR.IN.IC.STORAGE TOWER"]],I["E-F-MH----"]=[E["GR.IN.IC.SURFACE WATER INTAKE"]],I["E-F-MI----"]=[E["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]],I["O-O-D-----"]=[E["ST.IC.DEMONSTRATION"]],I["O-I-R-----"]=[E["ST.IC.GROUP"]],I["O-V-B-----"]=[E["ST.IC.BOMB"]],I["O-V-P-----"]=[E["ST.IC.POISONING"]],I["O-O-HA----"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HV----"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HT----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["S-G-IXH---"]=[E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-S-NM----"]=[E["GR.IC.HOSPITAL SHIP"]],I["E-O-BK----"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER"]],I["S-G-UULC--"]=[E["GR.IC.LAW ENFORCEMENT"]],I["S-S-XL----"]=[E["GR.IC.LAW ENFORCEMENT VESSEL"]],I["S-G-ES----"]=[E["GR.EQ.SENSOR"]],I["S-G-IUE---"]=[E["GR.IN.IC.ELECTRIC POWER"]],I["S-G-IUEN--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER NUCLEAR"]],I["S-G-IRP---"]=[E["GR.IC.FF.CLASS III"]],I["S-G-IB----"]=[E["GR.IN.IC.BASE"]],I["S-G-IUT---"]=[E["GR.IN.IC.TELECOMMUNICATIONS"]],I["S-G-IT----"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-IBA---"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-IBN---"]=[E["GR.IC.NAVAL"]],I["S-G-IUP---"]=[E["GR.IC.WATER"]]}},k];function u(I,t,E){var R=this.options.sidc.substr(2,1),e=this.options.sidc.substr(3,1),A=this.options.sidc.substr(4,2),C=this.options.sidc.substr(6,1),T=this.options.sidc.substr(7,1),S=this.options.sidc.substr(8,2),N=t.functionid=this.options.sidc.substr(10,10);return t.context=E.context[parseInt(this.options.sidc.substr(2,1))],t.affiliation={0:"Unknown",1:"Unknown",2:"Friend",3:"Friend",4:"Neutral",5:"Hostile",6:"Hostile"}[e],t.dimension={"00":"Sea","01":"Air","02":"Air","05":"Air","06":"Air",10:"Ground",11:"Ground",12:"Ground",15:"Ground",20:"Ground",30:"Sea",35:"Subsurface",36:"Subsurface",39:"Subsurface",40:"Ground",50:"Air",51:"Air",52:"Ground",53:"Sea",54:"Subsurface",60:"Ground"}[A]||"","10"!=A&&"11"!=A&&"25"!=A&&"27"!=A&&"40"!=A||(t.unit=!0),"05"!=A&&"06"!=A&&"50"!=A||(t.space=!0),"40"==A&&(t.activity=!0),"20"==A&&(t.installation=!0),"25"==A&&(t.controlMeasure=!0),"60"==A&&(t.cyberspace=!0),"36"==A&&!1===this.style.alternateMedal&&(t.fill=!1),"30"==A&&15e4==N.substr(0,6)&&(t.frame=!1),"1"==C&&(t.notpresent=I._dashArrays.anticipated),"0"!=e&&"2"!=e&&"5"!=e||(t.notpresent=I._dashArrays.pending),"30"==A&&16e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"35"==A&&14e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"35"==A&&15e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"2"!=C&&"3"!=C&&"4"!=C&&"5"!=C||(t.condition=E.status[parseInt(C)]),t.baseDimension=t.dimension,t.baseAffilation=t.affiliation,"5"==e&&"1"==R&&(t.joker=!0),"6"==e&&"1"==R&&(t.faker=!0),(t.joker||t.faker)&&(t.affiliation=E.affiliation[1]),"00"==A&&(t.dimensionUnknown=!0),"00"==A&&"1"==R&&"Unknown"!=t.affiliation&&(t.affiliation=""),"27"==A&&(t.dimension="LandDismountedIndividual",t.dismounted=!0),"15"!=A&&"52"!=A||(t.dimension=E.dimension[2]),-1<["1","3","5","7"].indexOf(T)&&(t.feintDummy=!0),-1<["2","3","6","7"].indexOf(T)&&(t.headquarters=!0),-1<["4","5","6","7"].indexOf(T)&&(t.taskForce=!0),S<=30&&(t.echelon=E.echelonMobility[S]),30<=S&&S<70&&(t.mobility=E.echelonMobility[S]),70<=S&&S<80&&(t.leadership=E.echelonMobility[S]),("01"==A&&"12"==N.substring(0,2)||"05"==A&&"12"==N.substring(0,2)||"11"==A||"12"==A&&"12"==N.substring(0,2)||"15"==A&&"16"==N.substring(0,2)||"30"==A&&"14"==N.substring(0,2)||"35"==A&&"12"==N.substring(0,2))&&(t.civilian=!0),t}function v(I,t,E,R){var e={},A={},C={},T={};for(var S in I._iconSIDC.number)I._iconSIDC.number.hasOwnProperty(S)&&I._iconSIDC.number[S].call(this,e,A,C,T,t,E,R);return{icons:e,m1:A,m2:C,bbox:T}}var Q={type:"number",getMetadata:u,getIcons:v,iconParts:P,icons:function(I,t,E,R,e,A,C){"01"==e&&(I[11e4]=[A["AR.I.MILITARY"]],I[110100]=[A["AR.I.FIXED-WING DSymbol"]],I[110101]=[A["AR.I.MEDICAL EVACUATION"]],I[110102]=[A["AR.I.ATTACK/STRIKE"]],I[110103]=[A["AR.I.BOMBER"]],I[110104]=[A["AR.I.FIGHTER"]],I[110105]=[A["AR.I.FIGHTER/BOMBER"]],I[110106]=[],I[110107]=[A["AR.I.CARGO"]],I[110108]=[A["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I[110109]=[A["AR.I.TANKER"]],I[110110]=[A["AR.I.PATROL"]],I[110111]=[A["AR.I.RECONNAISSANCE"]],I[110112]=[A["AR.I.TRAINER"]],I[110113]=[A["AR.I.UTILITY"]],I[110114]=[A["AR.I.VSTOL"]],I[110115]=[A["AR.I.AIRBORNE COMMAND POST"]],I[110116]=[A["AR.I.AIRBORNE EARLY WARNING"]],I[110117]=[A["AR.I.ANTISURFACE WARFARE"]],I[110118]=[A["AR.I.ANTISUBMARINE WARFARE"]],I[110119]=[A["AR.I.COMMUNICATIONS"]],I[110120]=[A["AR.I.COMBAT SEARCH AND RESCUE"]],I[110121]=[A["AR.I.ELECTRONIC SUPPORT"]],I[110122]=[A["AR.I.GOVERNMENT"]],I[110123]=[A["AR.I.MINE COUNTERMEASURES"]],I[110124]=[A["AR.I.PERSONNEL RECOVERY DSymbol"]],I[110125]=[A["AR.I.SEARCH AND RESCUE"]],I[110126]=[A["AR.I.SPECIAL OPERATIONS FORCES"]],I[110127]=[A["AR.I.ULTRA LIGHT"]],I[110128]=[A["AR.I.PHOTOGRAPHIC RECONNAISSANCE"]],I[110129]=[A["AR.I.VIP"]],I[110130]=[A["AR.I.SUPRESSION OF ENEMY AIR DEFENCE"]],I[110131]=[A["AR.I.PASSENGER"]],I[110132]=[A["AR.I.ESCORT"]],I[110133]=[A["AR.I.ELECTRONIC ATTACK (EA)"]],I[110200]=[A["AR.I.MILITARY ROTARY WING"]],I[110300]=[A["AR.I.UNMANNED AERIAL VEHICLE"]],I[110400]=[A["AR.I.VERTICAL-TAKEOFF UAV (VT-UAV)"]],I[110500]=[A["AR.I.MILITARY BALLOON"]],I[110600]=[A["AR.I.MILITARY AIRSHIP"]],I[110700]=[A["AR.I.TETHERED LIGHTER THAN AIR"]],I[12e4]=[A["AR.I.CIVILIAN"]],I[120100]=[A["AR.I.CIVILIAN FIXED-WING DSymbol"]],I[120200]=[A["AR.I.CIVILIAN ROTARY WING"]],I[120300]=[A["AR.I.CIVILIAN UNMANNED AERIAL VEHICLE"]],I[120400]=[A["AR.I.CIVILIAN BALLOON"]],I[120500]=[A["AR.I.CIVILIAN AIRSHIP"]],I[120600]=[A["AR.I.CIVILIAN TETHERED LIGHTER THAN AIR"]],I[13e4]=[A["AR.I.WEAPON"]],I[130100]=[A["AR.I.BOMB"]],I[130200]=[A["AR.I.UNDERWATER DECOY DSymbol"]],I[14e4]=[A["AR.I.MANUAL TRACK"]],t["01"]=[A["AIR.M1.ATTACK"]],t["02"]=[A["AIR.M1.BOMBER"]],t["03"]=[A["AIR.M1.CARGO"]],t["04"]=[A["AIR.M1.FIGHTER"]],t["05"]=[A["AIR.M1.INTERCEPTOR"]],t["06"]=[A["AIR.M1.TANKER"]],t["07"]=[A["AIR.M1.UTILITY"]],t["08"]=[A["AIR.M1.VSTOL"]],t["09"]=[A["AIR.M1.PASSENGER"]],t[10]=[A["AIR.M1.ULTRA LIGHT"]],t[11]=[A["AIR.M1.AIRBORNE COMMAND POST"]],t[12]=[A["AIR.M1.AIRBORNE EARLY WARNING"]],t[13]=[A["AIR.M1.GOVERNMENT"]],t[14]=[A["AIR.M1.MEDEVAC"]],t[15]=[A["AIR.M1.ESCORT"]],t[16]=[A["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],t[17]=[A["AIR.M1.PATROL"]],t[18]=[A["AIR.M1.RECONNAISSANCE"]],t[19]=[A["AIR.M1.TRAINER"]],t[20]=[A["AIR.M1.PHOTOGRAPHIC"]],t[21]=[A["AIR.M1.PERSONNEL RECOVERY"]],t[22]=[A["AIR.M1.ANTISUBMARINE WARFARE"]],t[23]=[A["AIR.M1.COMMUNICATIONS"]],t[24]=[A["AIR.M1.ELECTRONIC SUPPORT (ES)"]],t[25]=[A["AIR.M1.MINE COUNTERMEASURES"]],t[26]=[A["AIR.M1.SEARCH AND RESCUE"]],t[27]=[A["AIR.M1.SPECIAL OPERATIONS FORCES"]],t[28]=[A["AIR.M1.SURFACE WARFARE"]],t[29]=[A["AIR.M1.VIP"]],t[30]=[A["AIR.M1.COMBAT SEARCH AND RESCUE"]],t[31]=[A["AIR.M1.SUPRESSION OF ENEMY AIR DEFENCE"]],t[32]=[A["AIR.M1.ANTISURFACE WARFARE"]],t[33]=[A["AIR.M1.FIGHTER/BOMBER"]],t[34]=[A["AIR.M1.INTENSIVE CARE"]],t[35]=[A["AIR.M1.ELECTRONIC ATTACK (EA)"]],t[36]=[A["AIR.M1.MULTIMISSION"]],t[37]=[A["AIR.M1.HIJACKING"]],t[38]=[A["AIR.M1.ASW HELO-LAMPS"]],t[39]=[A["AIR.M1.ASW HELO - SH-60R"]],t[40]=[A["AIR.M1.HIJACKER"]],t[41]=[A["AIR.M1.CYBERSPACE"]],E["01"]=[A["AIR.M2.HEAVY"]],E["02"]=[A["AIR.M2.MEDIUM"]],E["03"]=[A["AIR.M2.LIGHT"]],E["04"]=[A["AIR.M2.BOOM-ONLY"]],E["05"]=[A["AIR.M2.DROUGE-ONLY"]],E["06"]=[A["AIR.M2.BOOM AND DROUGE"]],E["07"]=[A["AIR.M2.CLOSE RANGE"]],E["08"]=[A["AIR.M2.SHORT RANGE"]],E["09"]=[A["AIR.M2.MEDIUM RANGE"]],E[10]=[A["AIR.M2.LONG RANGE"]],E[11]=[A["AIR.M2.DOWNLINKED"]],E[12]=[A["AIR.M2.CYBERSPACE"]])}},g={type:"number",getMetadata:u,getIcons:v,iconParts:P,icons:function(I,t,E,R,e,A,C){"02"==e&&(I[11e4]=[A["AIR.MISSILE.ICON"]],t["01"]=[A["AIR.MISSILE.M1.AIR"]],t["02"]=[A["AIR.MISSILE.M1.SURFACE"]],t["03"]=[A["AIR.MISSILE.M1.SUBSURFACE"]],t["04"]=[A["AIR.MISSILE.M1.SPACE"]],t["05"]=[A["AIR.MISSILE.M1.ANTI-BALLISTIC"]],t["06"]=[A["AIR.MISSILE.M1.BALLISTIC"]],t["07"]=[A["AIR.MISSILE.M1.CRUISE"]],t["08"]=[A["AIR.MISSILE.M1.INTERCEPTOR"]],E["01"]=[A["AIR.MISSILE.M2.AIR"]],E["02"]=[A["AIR.MISSILE.M2.SURFACE"]],E["03"]=[A["AIR.MISSILE.M2.SUBSURFACE"]],E["04"]=[A["AIR.MISSILE.M2.SPACE"]],E["05"]=[A["AIR.MISSILE.M2.LAUNCHED"]],E["06"]=[A["AIR.MISSILE.M2.MISSILE"]],E["07"]=[A["AIR.MISSILE.M2.PATRIOT"]],E["08"]=[A["AIR.MISSILE.M2.STANDARD MISSILE - 2 (SM-2)"]],E["09"]=[A["AIR.MISSILE.M2.STANDARD MISSILE - 6 (SM-6)"]],E[10]=[A["AIR.MISSILE.M2.EVOLVED SEA SPARROW MISSILE (ESSM)"]],E[11]=[A["AIR.MISSILE.M2.ROLLING AIRFRAME MISSILE (RAM)"]],E[12]=[A["AIR.MISSILE.M2.SHORT RANGE"]],E[13]=[A["AIR.MISSILE.M2.MEDIUM RANGE"]],E[14]=[A["AIR.MISSILE.M2.INTERMEDIATE RANGE"]],E[15]=[A["AIR.MISSILE.M2.LONG RANGE"]],E[16]=[A["AIR.MISSILE.M2.INTERCONTINENTAL"]])}},b={type:"number",getMetadata:u,getIcons:v,iconParts:i,icons:function(I,t,E,R,e,A,C){"05"==e&&(I[11e4]=[A["SP.I.MILITARY"]],I[110100]=[A["SP.I.SPACE VEHICLE"]],I[110200]=[A["SP.I.RE-ENTRY VEHICLE"]],I[110300]=[A["SPACE.PLANET LANDER"]],I[110400]=[A["SP.I.ORBITER SHUTTLE"]],I[110500]=[A["SP.I.CAPSULE"]],I[110600]=[A["SP.I.SATELLITE, GENERAL"]],I[110700]=[A["SP.I.SATELLITE"]],I[110800]=[A["SP.I.ANTISATELLITE WEAPON"]],I[110900]=[A["SP.I.ASTRONOMICAL SATELLITE"]],I[111e3]=[A["SP.I.BIOSATELLITE"]],I[111100]=[A["SP.I.COMMUNICATIONS SATELLITE"]],I[111200]=[A["SP.I.EARTH OBSERVATION SATELLITE"]],I[111300]=[A["SP.I.MINIATURIZED SATELLITE"]],I[111400]=[A["SP.I.NAVIGATIONAL SATELLITE"]],I[111500]=[A["SP.I.RECONNAISSANCE SATELLITE"]],I[111600]=[A["SP.I.SPACE STATION"]],I[111700]=[A["SP.I.TETHERED SATELLITE"]],I[111800]=[A["SP.I.WEATHER SATELLITE"]],I[111900]=[A["SP.I.SPACE LAUNCH VEHICLE"]],I[12e4]=[A["SP.I.CIVILIAN"]],I[120100]=[A["SP.I.CIVILIAN ORBITER SHUTTLE"]],I[120200]=[A["SP.I.CIVILIAN CAPSULE"]],I[120300]=[A["SP.I.CIVILIAN SATELLITE"]],I[120400]=[A["SP.I.CIVILIAN ASTRONOMICAL SATELLITE"]],I[120500]=[A["SP.I.CIVILIAN BIOSATELLITE"]],I[120600]=[A["SP.I.CIVILIAN COMMUNICATIONS SATELLITE"]],I[120700]=[A["SP.I.CIVILIAN EARTH OBSERVATION SATELLITE"]],I[120800]=[A["SP.I.CIVILIAN MINIATURIZED SATELLITE"]],I[120900]=[A["SP.I.CIVILIAN NAVIGATIONAL SATELLITE"]],I[121e3]=[A["SP.I.CIVILIAN SPACE STATION"]],I[121100]=[A["SP.I.CIVILIAN TETHERED SATELLITE"]],I[121200]=[A["SP.I.CIVILIAN WEATHER SATELLITE"]],I[13e4]=[A["SP.I.MANUAL TRACK"]],t["01"]=[A["SP.M1.LOW EARTH ORBIT (LEO)"]],t["02"]=[A["SP.M1.MEDIUM EARTH ORBIT (MEO)"]],t["03"]=[A["SP.M1.HIGH EARTH ORBIT (HEO)"]],t["04"]=[A["SP.M1.GEOSYNCHRONOUS ORBIT (GSO)"]],t["05"]=[A["SP.M1.GEOSTATIONARY ORBIT (GO)"]],t["06"]=[A["SP.M1.MOLNIYA ORBIT (MO)"]],t["07"]=[A["SP.M1.CYBERSPACE"]],E["01"]=[A["SP.M2.OPTICAL"]],E["02"]=[A["SP.M2.INFRARED"]],E["03"]=[A["SP.M2.RADAR"]],E["04"]=[A["SP.M2.SIGNALS INTELLIGENCE (SIGINT)"]],E["05"]=[A["SP.M2.CYBERSPACE"]])}},K={type:"number",getMetadata:u,getIcons:v,iconParts:i,icons:function(I,t,E,R,e,A,C){"06"==e&&(I[11e4]=[A["SPACE.MISSILE.ICON"]],t["01"]=[A["SPACE.MISSILE.M1.BALLISTIC"]],t["02"]=[A["SPACE.MISSILE.M1.SPACE"]],t["03"]=[A["SPACE.MISSILE.M1.INTERCEPTOR"]],E["01"]=[A["SPACE.MISSILE.M2.SHORT RANGE"]],E["02"]=[A["SPACE.MISSILE.M2.MEDIUM RANGE"]],E["03"]=[A["SPACE.MISSILE.M2.INTERMEDIATE RANGE"]],E["04"]=[A["SPACE.MISSILE.M2.LONG RANGE"]],E["05"]=[A["SPACE.MISSILE.M2.INTERCONTINENTAL"]],E["06"]=[A["SPACE.MISSILE.M2.ARROW"]],E["07"]=[A["SPACE.MISSILE.M2.GROUND-BASED INTERCEPTOR (GBI)"]],E["08"]=[A["SPACE.MISSILE.M2.PATRIOT"]],E["09"]=[A["SPACE.MISSILE.M2.STANDARD MISSILE - TERMINAL PHASE (SM-T)"]],E[10]=[A["SPACE.MISSILE.M2.STANDARD MISSILE - 3 (SM-3)"]],E[11]=[A["SPACE.MISSILE.M2.TERMINAL HIGH-ALTITUDE AREA DEFENSE (THAAD)"]],E[12]=[A["SPACE.MISSILE.M2.SPACE"]],E[13]=[A["SPACE.MISSILE.M2.CLOSE RANGE"]],E[14]=[A["SPACE.MISSILE.M2.DEBRIS"]],E[15]=[A["SPACE.MISSILE.M2.UNKNOWN"]])}},X={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"10"==e&&(I[11e4]=[A["GR.IC.COMMAND AND CONTROL"]],I[110100]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[110200]=[A["GR.IC.CIVIL AFFAIRS"]],I[110300]=[A["GR.IC.CIVIL-MILITARY-COOPERATION"]],I[110400]=[A["GR.IC.INFORMATION OPERATIONS"]],I[110500]=[A["GR.IC.LIAISON"]],I[110501]=[A["GR.IC.LIAISON"],A["GR.IC.FF.RECONNAISSANCE"]],I[110600]=[A["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"]],I[110601]=[A["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"],A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[110700]=[A["GR.IC.RADIO"]],I[110800]=[A["GR.IC.RADIO RELAY"]],I[110900]=[A["GR.IC.RADIO TELETYPE CENTRE"]],I[111e3]=[A["GR.IC.FF.SIGNAL"]],I[111001]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO"]],I[111002]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO RELAY"]],I[111003]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO TELETYPE CENTRE"]],I[111004]=[A["GR.IC.FF.SIGNAL"],A["GR.I.FF.SATELLITE"]],I[111005]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.VIDEO IMAGERY"]],I[111100]=[A["GR.I.FF.SATELLITE"]],I[111200]=[A["GR.IC.VIDEO IMAGERY"]],I[111300]=[A["GR.IC.SPACE"]],I[111400]=[A["GR.IC.SPECIAL TROOPS"]],I[12e4]=[],I[120100]=[A["GR.IC.FF.AIR ASSAULT WITH ORGANIC LIFT"]],I[120200]=[A["GR.IC.AIR TRAFFIC SERVICES"]],I[120300]=[A["GR.IC.FF.AMPHIBIOUS"]],I[120400]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I[120401]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"],A["GR.IC.ARMOUR"]],I[120402]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"],A["GR.IC.FF.MOTORIZED"]],I[120500]=[A["GR.IC.ARMOUR"]],I[120501]=[A["GR.IC.ARMOUR"],A["GR.IC.FF.RECONNAISSANCE"]],I[120502]=[A["GR.IC.ARMOUR"],A["GR.IC.FF.AMPHIBIOUS"]],I[120600]=[A["GR.IC.AVIATION ROTARY WING"]],I[120601]=[A["GR.IC.AVIATION ROTARY WING"],A["GR.IC.FF.RECONNAISSANCE"]],I[120700]=[A["GR.IC.AVIATION COMPOSITE"]],I[120800]=[A["GR.IC.AVIATION FIXED WING"]],I[120801]=[A["GR.IC.AVIATION FIXED WING"],A["GR.IC.FF.RECONNAISSANCE"]],I[120900]=[A["GR.IC.COMBAT"]],I[121e3]=[A["GR.IC.COMBINED ARMS"]],I[121100]=[A["GR.IC.FF.INFANTRY"]],I[121101]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.AMPHIBIOUS"]],I[121102]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.ARMOUR"]],I[121103]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121104]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.MOTORIZED"]],I[121105]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.ARMOUR"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121106]=[A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121200]=[A["GR.IC.OBSERVER/OBSERVATION"]],I[121300]=[A["GR.IC.FF.RECONNAISSANCE"]],I[121301]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.SURVEILLANCE"]],I[121302]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.AMPHIBIOUS"]],I[121303]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.MOTORIZED"]],I[121400]=[A["GR.IC.SEA-AIR-LAND"]],I[121500]=[A["GR.IC.SNIPER"]],I[121600]=[A["GR.IC.SURVEILLANCE"]],I[121700]=[A["GR.IC.SPECIAL FORCES"]],I[121800]=[A["GR.IC.SPECIAL OPERATIONS FORCES"]],I[121801]=[A["GR.IC.FIXED WING MISO"]],I[121802]=[A["GR.IC.SPECIAL OPERATIONS FORCES"],A["GR.IC.FF.INFANTRY"]],I[121803]=[A["GR.IC.COMBATANT"],A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],I[121804]=[A["GR.IC.SUBMARINE NUCLEAR PROPULSION"],A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],I[121805]=[A["SOF.IC.UNDERWATER DEMOLITION TEAM"]],I[121900]=[A["GR.IC.UNMANNED SYSTEMS"]],I[122e3]=[A["GR.IC.RANGER"]],I[13e4]=[],I[130100]=[A["GR.IC.FF.AIR DEFENCE"]],I[130101]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[130102]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.AIR DEFENSE MISSILE"]],I[130103]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.AIR AND MISSILE DEFENSE"]],I[130200]=[A["GR.IC.FIELD ARTILLERY"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.AVIATION ROTARY WING"],A["GR.M1.NAVAL"]],I[130300]=[A["GR.IC.FIELD ARTILLERY"]],I[130301]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.ARMOUR"]],I[130302]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.ARMOUR"],A["GR.IC.FF.RECONNAISSANCE"]],I[130303]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.FF.RECONNAISSANCE"]],I[130400]=[A["GR.IC.FIELD ARTILLERY OBSERVER"]],I[130500]=[A["GR.IC.JOINT FIRE SUPPORT"]],I[130600]=[A["GR.IC.METEOROLOGICAL"]],I[130700]=[A["GR.IC.MISSILE"]],I[130800]=[A["GR.IC.MORTAR"]],I[130801]=[A["GR.IC.MORTAR"],A["GR.M2.TRACKED"]],I[130802]=[A["GR.IC.MORTAR"],A["GR.M2.TRUCK"]],I[130803]=[A["GR.IC.MORTAR"],A["GR.M2.TOWED"]],I[130900]=[A["GR.IC.SURVEY"]],I[14e4]=[],I[140100]=[A["GR.IC.CBRN"]],I[140101]=[A["GR.IC.CBRN"],A["GR.IC.ARMOUR"]],I[140102]=[A["GR.IC.CBRN"],A["GR.IC.FF.MOTORIZED"]],I[140103]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"]],I[140104]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.ARMOUR"]],I[140105]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.MOTORIZED"]],I[140106]=[A["GR.IC.CBRN"],A["GR.CHEMICAL, BIOLOGICAL, RADIOLOGICAL, NUCLEAR, AND HIGH-YIELD EXPLOSIVES"]],I[140200]=[A["GR.IC.COMBAT SUPPORT (MANOEUVRE ENHANCEMENT)"]],I[140300]=[A["GR.IC.CRIMINAL INVESTIGATION DIVISION"]],I[140400]=[A["GR.IC.DIVER, CIVILIAN"]],I[140500]=[A["GR.IC.DOG"]],I[140600]=[A["GR.IC.DRILLING"]],I[140700]=[A["GR.IC.ENGINEER"]],I[140701]=[A["GR.IC.ENGINEER MECHANIZED"]],I[140702]=[A["GR.IC.ENGINEER"],A["GR.IC.FF.MOTORIZED"]],I[140703]=[A["GR.IC.ENGINEER"],A["GR.IC.FF.RECONNAISSANCE"]],I[140800]=[A["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I[140900]=[A["GR.IC.FIELD CAMP CONSTRUCTION"]],I[141e3]=[A["GR.IC.FIRE PROTECTION"]],I[141100]=[A["GR.IC.GEOSPATIAL SUPPORT"]],I[141200]=[A["GR.IC.MILITARY POLICE"]],I[141300]=[A["GR.IC.MINE"]],I[141400]=[A["GR.IC.MINE CLEARING"]],I[141500]=[A["GR.IC.MINE LAUNCHING"]],I[141600]=[A["GR.IC.MINE LAYING"]],I[141700]=[A["GR.IC.SECURITY"]],I[141701]=[A["GR.IC.SECURITY"],A["GR.IC.ARMOUR"]],I[141702]=[A["GR.IC.SECURITY"],A["GR.IC.FF.MOTORIZED"]],I[141800]=[A["GR.IC.SEARCH AND RESCUE"]],I[141900]=[A["GR.IC.SECURITY POLICE (AIR)"]],I[142e3]=[A["GR.IC.SHORE PATROL"]],I[142100]=[A["GR.IC.TOPOGRAPHIC"]],I[142200]=[A["GR.IC.AIR AND MISSILE DEFENSE"]],I[15e4]=[],I[150100]=[A["GR.IC.FF.ANALYSIS"]],I[150200]=[A["GR.IC.COUNTER-INTELLIGENCE"]],I[150300]=[A["GR.IC.FF.DIRECTION FINDING"]],I[150400]=[A["GR.IC.ELECTRONIC RANGING"]],I[150500]=[A["GR.IC.ELECTRONIC WARFARE"]],I[150501]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.ANALYSIS"]],I[150502]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.DIRECTION FINDING"]],I[150503]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.INTERCEPT"]],I[150504]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.JAMMING"]],I[150505]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.SEARCH"]],I[150600]=[A["GR.IC.FF.INTERCEPT"]],I[150700]=[A["GR.IC.INTERROGATION"]],I[150800]=[A["GR.IC.FF.JAMMING"]],I[150900]=[A["GR.IC.JOINT INTELLIGENCE CENTRE"]],I[151e3]=[A["GR.IC.MILITARY INTELLIGENCE"]],I[151100]=[A["GR.IC.FF.SEARCH"]],I[151200]=[A["GR.IC.SENSOR"]],I[151300]=[A["GR.IC.MILITARY HISTORY"]],I[16e4]=[A["GR.IC.SUSTAINMENT"]],I[160100]=[A["GR.IC.ADMINISTRATIVE"]],I[160200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS ALL"]],I[160300]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.AIRPORT OF DEBARKATION"]],I[160400]=[A["GR.IC.AMMUNITION"]],I[160500]=[A["GR.IC.BAND"]],I[160501]=[A["GR.IC.ARMY MUSIC"]],I[160600]=[A["GR.IC.COMBAT SERVICE SUPPORT"]],I[160700]=[A["GR.IC.FINANCE"]],I[160800]=[A["GR.IC.JUDGE ADVOCATE GENERAL"]],I[160900]=[A["GR.IC.LABOUR"]],I[161e3]=[A["GR.IC.LAUNDRY/BATH"]],I[161100]=[A["GR.IC.MAINTENANCE"]],I[161200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.MATERIEL"]],I[161300]=[A["GR.IC.FF.MEDICAL"]],I[161400]=[A["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I[161500]=[A["GR.IC.MORALE, WELFARE, AND RECREATION"]],I[161600]=[A["GR.IC.MORTUARY AFFAIRS"]],I[161700]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS MULTIPLE"]],I[161800]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS I"]],I[161900]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS II"]],I[162e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS III"]],I[162100]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS IV"]],I[162200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS V"]],I[162300]=[A["GR.IC.ORDNANCE"]],I[162400]=[A["GR.IC.PERSONNEL SERVICES"]],I[162500]=[A["GR.IC.PETROLEUM OIL LUBRICANTS"]],I[162600]=[A["GR.IC.PIPELINE"]],I[162700]=[A["GR.IC.POSTAL"]],I[162800]=[A["GR.IC.PUBLIC AFFAIRS"]],I[162900]=[A["GR.IC.QUARTERMASTER"]],I[163e3]=[A["GR.IC.RAILHEAD"]],I[163100]=[A["GR.IC.RELIGIOUS SUPPORT"]],I[163200]=[A["GR.IC.REPLACEMENT HOLDING UNIT"]],I[163300]=[A["GR.IC.SEAPORT OF DEBARKATION"]],I[163400]=[A["GR.IC.FF.SUPPLY"]],I[163500]=[A["GR.IC.JOINT INFORMATION BUREAU"]],I[163600]=[A["GR.IC.TRANSPORTATION"]],I[163601]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.FLOATING CRAFT"]],I[163700]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS I"]],I[163800]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS II"]],I[163900]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS III"]],I[164e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS IV"]],I[164100]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS V"]],I[164200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VI"]],I[164300]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VII"]],I[164400]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VIII"]],I[164500]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS IX"]],I[164600]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS X"]],I[164700]=[A["GR.IC.WATER"]],I[164800]=[A["GR.IC.WATER PURIFICATION"]],I[164900]=[A["GR.IC.PUBLIC AFFAIRS BROADCAST"]],I[165e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS ALL"]],I[165100]=[A["GR.IC.INTERPRETER/TRANSLATOR"]],I[165200]=[A["GR.IC.SUPPORT"]],I[165300]=[A["GR.IC.ARMY FIELD SUPPORT"]],I[165400]=[A["GR.IC.CONTRACTING SERVICES"]],I[165500]=[A["GR.IC.PARACHUTE RIGGER"]],I[17e4]=[],I[170100]=[A["GR.IC.NAVAL"]],I[18e4]=[],I[180100]=[A["GR.IC.ALLIED COMMAND EUROPE RAPID REACTION CORPS (ARRC)"]],I[180200]=[A["GR.IC.ALLIED COMMAND OPERATIONS"]],I[180300]=[A["GR.IC.INTERNATIONAL SECURITY ASSISTANCE FORCE (ISAF)"]],I[180400]=[A["GR.IC.MULTINATIONAL (MN)"]],I[19e4]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[2e5]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[200100]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[200200]=[A["GR.IC.FF.BORDER PATROL"]],I[200300]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[200400]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[200500]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[200600]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[200700]=[A["GR.IC.LAW ENFORCEMENT"]],I[200800]=[A["GR.IC.FF.PRISON"]],I[200900]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[201e3]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[201100]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[201200]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[201300]=[A["ST.IC.INTERNAL SECURITY FORCE"]],t["01"]=[C?A["GR.M1.TACTICAL SATELLITE COMMUNICATIONS"]:A["GR.M1.AIRMOBILE/AIR ASSAULT"]],t["02"]=[A["GR.M1.AREA"]],t["03"]=[A["GR.M1.ATTACK"]],t["04"]=[A["GR.M1.BIOLOGICAL"]],t["05"]=[A["GR.M1.BORDER"]],t["06"]=[A["GR.M1.BRIDGING"]],t["07"]=[A["GR.M1.CHEMICAL"]],t["08"]=[A["GR.M1.CLOSE PROTECTION"]],t["09"]=[A["GR.M1.COMBAT"]],t[10]=[A["GR.M1.COMMAND AND CONTROL"]],t[11]=[A["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]],t[12]=[A["GR.M1.CONSTRUCTION"]],t[13]=[A["GR.M1.CROSS CULTURAL COMMUNICATION"]],t[14]=[A["GR.M1.CROWD AND RIOT CONTROL"]],t[15]=[A["GR.M1.DECONTAMINATION"]],t[16]=[A["GR.M1.DETENTION"]],t[17]=[A["GR.M1.DIRECT COMMUNICATIONS"]],t[18]=[A["GR.M1.DIVING"]],t[19]=[A["GR.M1.DIVISION"]],t[20]=[A["GR.M1.DOG"]],t[21]=[A["GR.M1.DRILLING"]],t[22]=[A["GR.M1.ELECTRO-OPTICAL"]],t[23]=[A["GR.M1.ENHANCED"]],t[24]=[A["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]],t[25]=[A["GR.M1.FIRE DIRECTION CENTRE"]],t[26]=[A["GR.M1.FORCE"]],t[27]=[A["GR.M1.FORWARD"]],t[28]=[A["GR.M1.GROUND STATION MODULE"]],t[29]=[A["GR.M1.LANDING SUPPORT"]],t[30]=[A["GR.M1.LARGE EXTENSION NODE"]],t[31]=[A["GR.M1.MAINTENANCE"]],t[32]=[A["GR.M1.METEOROLOGICAL"]],t[33]=[A["GR.M1.MINE COUNTERMEASURE"]],t[34]=[A["GR.M1.MISSILE"]],t[35]=[A["GR.M1.(MOBILE) ADVISOR AND SUPPORT"]],t[36]=[A["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]],t[37]=[A["GR.M1.MOBILITY SUPPORT"]],t[38]=[A["GR.M1.MOVEMENT CONTROL CENTRE"]],t[39]=[A["GR.M1.MULTINATIONAL"]],t[40]=[A["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]],t[41]=[A["GR.M1.MULTIPLE ROCKET LAUNCHER"]],t[42]=[A["GR.M1.NATO MEDICAL ROLE 1"]],t[43]=[A["GR.M1.NATO MEDICAL ROLE 2"]],t[44]=[A["GR.M1.NATO MEDICAL ROLE 3"]],t[45]=[A["GR.M1.NATO MEDICAL ROLE 4"]],t[46]=[A["GR.M1.NAVAL"]],t[47]=[C?A["GR.M1.UNMANNED AERIAL VEHICLE"]:A["GR.M1.NODE CENTRE"]],t[48]=[A["GR.M1.NUCLEAR"]],t[49]=[A["GR.M1.OPERATIONS"]],t[50]=[A["GR.M1.RADAR"]],t[51]=[A["GR.M1.RADIO FREQUENCY IDENTIFICATION (RFID) INTERROGATOR/ SENSOR"]],t[52]=[A["GR.M1.RADIOLOGICAL"]],t[53]=[A["GR.M1.SEARCH AND RESCUE"]],t[54]=[A["GR.M1.SECURITY"]],t[55]=[A["GR.M1.SENSOR"]],t[56]=[C?A["GR.M1.WEAPON"]:A["GR.M1.SENSOR CONTROL MODULE"]],t[57]=[A["GR.M1.SIGNALS INTELLIGENCE"]],t[58]=[C?A["GR.M1.ARMORED"]:A["GR.M1.SINGLE SHELTER SWITCH"]],t[59]=[A["GR.M1.SINGLE ROCKET LAUNCHER"]],t[60]=[A["GR.M1.SMOKE"]],t[61]=[A["GR.M1.SNIPER"]],t[62]=[A["GR.M1.SOUND RANGING"]],t[63]=[A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],t[64]=[A["GR.M1.SPECIAL WEAPONS AND TACTICS"]],t[65]=[A["GR.M1.SURVEY"]],t[66]=[A["GR.M1.TACTICAL EXPLOITATION"]],t[67]=[A["GR.M1.TARGET ACQUISITION"]],t[68]=[A["GR.M1.TOPOGRAPHIC"]],t[69]=[A["GR.M1.UTILITY"]],t[70]=[A["GR.M1.VIDEO IMAGERY"]],t[71]=[C?A["GR.M1.MOBILITY ASSAULT"]:A["GR.M1.ACCIDENT"]],t[72]=[C?A["GR.M1.AMPHIBIOUS WARFARE SHIP "]:A["GR.M1.OTHER"]],t[73]=[C?A["GR.M1.LOAD HANDLING SYSTEM"]:A["GR.M1.CIVILIAN"]],t[74]=[C?A["GR.M1.PALLETIZED LOAD SYSTEM"]:A["GR.M1.ANTISUBMARINE WARFARE"]],t[75]=[A["GR.M1.MEDEVAC"]],t[76]=[A["GR.M1.CYBERSPACE"]],t[77]=[A["GR.M1.SUPPORT"]],t[78]=[A["GR.M1.AVIATION"]],t[79]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"]],t[80]=[A["GR.M1.TILT-ROTOR"]],t[81]=[A["GR.M1.COMMAND POST NODE"]],t[82]=[A["GR.M1.JOINT NETWORK NODE"]],t[83]=[A["GR.M1.RETRANSMISSION SITE"]],t[84]=[A["GR.M1.ASSAULT"]],t[85]=[A["GR.M1.WEAPONS"]],t[86]=[A["GR.M1.CRIMINAL INVESTIGATION DIVISION"]],t[87]=[A["GR.M1.DIGITAL"]],t[88]=[A["GR.M1.NETWORK OR NETWORK OPERATIONS"]],t[89]=[A["GR.M1.AIRFIELD, AERIAL PORT OF DEBARKATION, OR AERIAL PORT OF EMBARKATION"]],t[90]=[A["GR.M1.PIPELINE"]],t[91]=[A["GR.M1.POSTAL"]],t[92]=[A["GR.M1.WATER"]],t[93]=[A["GR.M1.INDEPENDENT COMMAND"]],t[94]=[A["GR.M1.THEATRE"]],t[95]=[A["GR.M1.ARMY"]],t[96]=[A["GR.M1.CORPS"]],t[97]=[A["GR.M1.BRIGADE"]],t[98]=[A["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],E["01"]=[A["GR.M2.AIRBORNE"]],E["02"]=[A["GR.M2.ARCTIC"]],E["03"]=[A["GR.M2.BATTLE DAMAGE REPAIR"]],E["04"]=[A["GR.M2.BICYCLE EQUIPPED"]],E["05"]=[A["GR.M2.CASUALTY STAGING"]],E["06"]=[A["GR.M2.CLEARING"]],E["07"]=[A["GR.M2.CLOSE RANGE"]],E["08"]=[A["GR.M2.CONTROL"]],E["09"]=[A["GR.M2.DECONTAMINATION"]],E[10]=[A["GR.M2.DEMOLITION"]],E[11]=[A["GR.M2.DENTAL"]],E[12]=[A["GR.M2.DIGITAL"]],E[13]=[A["GR.M2.ENHANCED POSITION LOCATION REPORTING SYSTEM"]],E[14]=[A["GR.M2.EQUIPMENT"]],E[15]=[A["GR.M2.HEAVY"]],E[16]=[A["GR.M2.HIGH ALTITUDE"]],E[17]=[A["GR.M2.INTERMODAL"]],E[18]=[A["GR.M2.INTENSIVE CARE"]],E[19]=[A["GR.M2.LIGHT"]],E[20]=[A["GR.M2.LABORATORY"]],E[21]=[A["GR.M2.LAUNCHER"]],E[22]=[A["GR.M2.LONG RANGE"]],E[23]=[A["GR.M2.LOW ALTITUDE"]],E[24]=[A["GR.M2.MEDIUM"]],E[25]=[A["GR.M2.MEDIUM ALTITUDE"]],E[26]=[A["GR.M2.MEDIUM RANGE"]],E[27]=[A["GR.M2.MOUNTAIN"]],E[28]=[A["GR.M2.HIGH TO MEDIUM ALTITUDE"]],E[29]=[A["GR.M2.MULTI-CHANNEL"]],E[30]=[A["GR.M2.OPTICAL"]],E[31]=[A["GR.M2.PACK ANIMAL"]],E[32]=[A["GR.M2.PATIENT EVACUATION COORDINATION"]],E[33]=[A["GR.M2.PREVENTIVE MAINTENANCE"]],E[34]=[A["GR.M2.PSYCHOLOGICAL"]],E[35]=[A["GR.M2.RADIO RELAY LINE OF SIGHT"]],E[36]=[A["GR.M2.RAILROAD"]],E[37]=[A["GR.M2.RECOVERY (UNMANNED SYSTEMS)"]],E[38]=[A["GR.M2.RECOVERY (MAINTENANCE)"]],E[39]=[A["GR.M2.RESCUE COORDINATION CENTRE"]],E[40]=[A["GR.M2.RIVERINE"]],E[41]=[A["GR.M2.SINGLE CHANNEL"]],E[42]=[A["GR.M2.SKI"]],E[43]=[A["GR.M2.SHORT RANGE"]],E[44]=[A["GR.M2.STRATEGIC"]],E[45]=[A["GR.M2.SUPPORT"]],E[46]=[A["GR.M2.TACTICAL"]],E[47]=[A["GR.M2.TOWED"]],E[48]=[A["GR.M2.TROOP"]],E[49]=[A["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]],E[50]=[A["GR.M2.VETERINARY"]],E[51]=[A["GR.M2.WHEELED"]],E[52]=[A["GR.M2.HIGH TO LOW ALTITUDE"]],E[53]=[A["GR.M2.MEDIUM TO LOW ALTITUDE"]],E[54]=[A["GR.M2.ATTACK"]],E[55]=[A["GR.M2.REFUEL"]],E[56]=[A["GR.M2.UTILITY"]],E[57]=[A["GR.M2.COMBAT SEARCH AND RESCUE"]],E[58]=[A["GR.M2.GUERILLA"]],E[59]=[A["GR.M2.AIR ASSAULT"]],E[60]=[A["GR.M2.AMPHIBIOUS"]],E[61]=[A["GR.M2.VERY HEAVY"]],E[62]=[A["GR.IC.FF.SUPPLY"]],E[63]=[A["GR.M2.CYBERSPACE"]],E[64]=[A["GR.M2.NAVY BARGE, SELF-PROPELLED"]],E[65]=[A["GR.M2.NAVY BARGE, NOT SELF-PROPELLED"]],E[66]=[A["GR.M2.LAUNCH"]],E[67]=[A["GR.M2.LANDING CRAFT"]],E[68]=[A["GR.M2.LANDING SHIP"]],E[69]=[A["GR.M2.SERVICE CRAFT/YARD"]],E[70]=[A["GR.M2.TUG HARBOR"]],E[71]=[A["GR.M2.OCEAN GOING TUG BOAT"]],E[72]=[A["GR.M2.SURFACE DEPLOYMENT AND DISTRIBUTION COMMAND"]],E[73]=[A["GR.M2.NONCOMBATANT GENERIC VESSEL"]],E[74]=[A["GR.M2.COMPOSITE"]],E[75]=[A["GR.M2.SHELTER"]],E[76]=[A["GR.M2.LIGHT AND MEDIUM"]],E[77]=[A["GR.M2.SELF-PROPELLED"]],E[78]=[A["GR.M2.SECURITY FORCE ASSISTANCE"]])}},w={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"11"==e&&(I[11e4]=[A["GR.I.CIVILIAN"]],I[110100]=[A["GR.IC.ENVIRONMENTAL PROTECTION"]],I[110200]=[A["GR.IC.GOVERNMENT ORGANIZATION"]],I[110300]=[A["ST.IC.INDIVIDUAL"]],I[110400]=[A["ST.IC.GROUP"]],I[110500]=[A["ST.IC.KILLING VICTIM"]],I[110600]=[A["ST.IC.KILLING VICTIMS"]],I[110700]=[A["ST.IC.INDIVIDUAL"],A["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I[110800]=[A["ST.IC.SPY"]],I[110900]=[A["ST.IC.COMPOSITE LOSS"]],I[111e3]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],t["01"]=[A["ST.M1.ASSASSINATION"]],t["02"]=[A["ST.M1.EXECUTION (WRONGFUL KILLING)"]],t["03"]=[A["ST.M1.MURDER"]],t["04"]=[A["ST.M1.HIJACKING/HIJACKED"]],t["05"]=[A["ST.M1.KIDNAPPING"]],t["06"]=[A["ST.M1.PIRACY"]],t["07"]=[A["ST.M1.RAPE"]],t["08"]=[A["ST.M1.CIVILIAN"]],t["09"]=[A["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],t[10]=[A["ST.M1.FOREIGN FIGHTERS"]],t[11]=[A["ST.M1.GANG"]],t[12]=[A["ST.M1.GOVERNMENT ORGANIZATION"]],t[13]=[A["ST.M1.LEADER"]],t[14]=[A["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],t[15]=[A["ST.M1.COERCED/IMPRESSED"]],t[16]=[A["ST.M1.WILLING RECRUIT"]],t[17]=[A["ST.M1.RELIGIOUS"]],t[18]=[A["ST.M1.TARGETED"]],t[19]=[A["ST.M1.TERRORIST"]],t[20]=[A["ST.M1.SPEAKER"]],t[21]=[A["ST.M1.ACCIDENT"]],t[22]=[A["ST.M1.COMBAT"]],t[23]=[A["ST.M1.OTHER"]],t[24]=[A["ST.M1.LOOT"]],t[25]=[A["GR.M1.HIJACKER"]],t[26]=[A["GR.M1.CYBERSPACE"]],E["01"]=[A["ST.M2.LEADER OR LEADERSHIP"]],E["02"]=[A["GR.M2.CYBERSPACE"]])}},_={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){if("15"==e){I[11e4]=[A["GR.EQ.WEAPON"]],I[110100]=[A["GR.EQ.RIFLE"]],I[110101]=[A["GR.EQ.RIFLE"],A["GR.EQ.SHORT RANGE"]],I[110102]=[A["GR.EQ.RIFLE"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110103]=[A["GR.EQ.RIFLE"],A["GR.EQ.LONG RANGE"]],I[110200]=[A["GR.EQ.MACHINE GUN"]],I[110201]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.SHORT RANGE"]],I[110202]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110203]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.LONG RANGE"]],I[110300]=[A["GR.EQ.GRENADE LAUNCHER"]],I[110301]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.SHORT RANGE"])],I[110302]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.INTERMEDIATE RANGE"])],I[110303]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.LONG RANGE"])],I[110400]=[A["GR.EQ.FLAME THROWER"]],I[110500]=[A["GR.EQ.AIR DEFENCE GUN"]],I[110501]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.SHORT RANGE"]],I[110502]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110503]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.LONG RANGE"]],I[110600]=[A["GR.EQ.ANTITANK GUN"]],I[110601]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.SHORT RANGE"]],I[110602]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110603]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.LONG RANGE"]],I[110700]=[A["GR.EQ.DIRECT FIRE GUN"]],I[110701]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.SHORT RANGE"]],I[110702]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110703]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.LONG RANGE"]],I[110800]=[A["GR.EQ.RECOILLESS GUN"]],I[110801]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.SHORT RANGE"]],I[110802]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110803]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.LONG RANGE"]],I[110900]=[A["GR.EQ.HOWITZER"]],I[110901]=[A["GR.EQ.HOWITZER"],A["GR.EQ.SHORT RANGE"]],I[110902]=[A["GR.EQ.HOWITZER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110903]=[A["GR.EQ.HOWITZER"],A["GR.EQ.LONG RANGE"]],I[111e3]=[A["GR.EQ.MISSILE LAUNCHER"]],I[111001]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111002]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111003]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111100]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]],I[111101]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"]],I[111102]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111103]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111104]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111105]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111106]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111107]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"]],I[111108]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111109]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111200]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"]],I[111201]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111202]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111203]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111300]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]],I[111301]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111302]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111303]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111400]=[A["GR.EQ.MORTAR"]],I[111401]=[A["GR.EQ.MORTAR"],A["GR.EQ.SHORT RANGE"]],I[111402]=[A["GR.EQ.MORTAR"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111403]=[A["GR.EQ.MORTAR"],A["GR.EQ.LONG RANGE"]],I[111500]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"]],I[111501]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111502]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111503]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111600]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"]],I[111601]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.SHORT RANGE"])],I[111602]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.INTERMEDIATE RANGE"])],I[111603]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.LONG RANGE"])],I[111700]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I[111701]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111702]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111703]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111800]=[A["GR.EQ.NON-LETHAL WEAPON"]],I[111900]=[A["GR.EQ.TASER"]],I[112e3]=[A["GR.EQ.WATER CANNON"]],I[12e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]],I[120100]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.ARMOURED VEHICLE"]],I[120101]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"]],I[120102]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]],I[120103]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"]],I[120104]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.MEDICAL EVACUATION"]],I[120105]=[A["GR.IC.ARMOUR"]],I[120106]=[A["GR.IC.ARMOUR"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120107]=[A["GR.IC.ARMOUR"],A["GR.EQ.MEDICAL EVACUATION"]],I[120108]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120109]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.COMBAT SERVICE SUPPORT VEHICLE"]],I[120110]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"],A["GR.EQ.CROSS-COUNTRY"]],I[120111]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"],A["GR.EQ.CROSS-COUNTRY"],A["GR.IC.FF.RECONNAISSANCE EQUPIMENT"]],I[120200]=[A["GR.EQ.TANK"]],I[120201]=[A["GR.EQ.TANK"],A["GR.EQ.LIGHT TANK"]],I[120202]=[A["GR.EQ.TANK"],A["GR.EQ.MEDIUM TANK"]],I[120203]=[A["GR.EQ.TANK"],A["GR.EQ.HEAVY TANK"]],I[120300]=[A["GR.EQ.TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120301]=[A["GR.EQ.TANK"],A["GR.EQ.LIGHT TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120302]=[A["GR.EQ.TANK"],A["GR.EQ.MEDIUM TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120303]=[A["GR.EQ.TANK"],A["GR.EQ.HEAVY TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[13e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],s._scale(.7,A["GR.IC.ENGINEER"])],I[130100]=[A["GR.IN.IC.BRIDGE"]],I[130200]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.8,A["GR.IN.IC.BRIDGE"])],I[130300]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.FIXED BRIDGE"]],I[130400]=[A["GR.IN.IC.BRIDGE"],A["GR.M2.RIVERINE"]],I[130500]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.FOLDING GIRDER BRIDGE"]],I[130600]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.HOLLOW DECK BRIDGE"]],I[130700]=[A["GR.IC.DRILLING"]],I[130701]=[s._scale(.7,A["GR.IC.DRILLING"]),A["GR.EQ.UTILITY VEHICLE"]],I[130800]=[A["GR.EQ.EARTHMOVER"]],I[130801]=[A["GR.EQ.MULTIFUNCTIONAL EARTHMOVER/DIGGER"]],I[130900]=[A["GR.EQ.MINE CLEARING EQUIPMENT"]],I[130901]=[A["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,A["GR.EQ.LIMITED CROSS-COUNTRY"])],I[130902]=[A["GR.EQ.MINE CLEARING EQUIPMENT"],A["GR.EQ.TANK"]],I[130903]=[A["GR.EQ.ASSAULT BREACHER VEHICLE (ABV) WITH COMBAT DOZER BLADE"]],I[130904]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"],A["GR.IC.ENGINEER UTILITY VEHICLE"],A["GR.M2.MEDIUM"]],I[130905]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"],A["GR.IC.ENGINEER UTILITY VEHICLE"],A["GR.M2.HEAVY"]],I[131e3]=[A["GR.IC.MINE LAYING"]],I[131001]=[A["GR.EQ.UTILITY VEHICLE"],s._translate(0,10,s._scale(.7,A["GR.IC.MINE LAYING"]))],I[131002]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I[131003]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],A["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I[131100]=[A["GR.EQ.DOZER"]],I[131101]=[A["GR.EQ.DOZER ARMORED"]],I[131200]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,A["GR.IC.ENGINEER"])],I[131300]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,A["GR.IC.ENGINEER"]),A["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]],I[131400]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],A["GR.EQ.UTILITY VEHICLE BACKHOE"]],I[131500]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],s._scale(.6,A["GR.IC.ENGINEER"])],I[131600]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.CROSS-COUNTRY"],A["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]],I[14e4]=[],I[140100]=[A["GR.EQ.UTILITY VEHICLE"]],I[140200]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MEDICAL VEHICLE"]],I[140300]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MEDICAL EVACUATION"]],I[140400]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MOBILE EMERGENCY PHYSICIAN"]],I[140500]=[A["GR.EQ.BUS"]],I[140600]=[A["GR.EQ.SEMI-TRAILER TRUCK"]],I[140601]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE LIGHT"]],I[140602]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE MEDIUM"]],I[140603]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE HEAVY"]],I[140700]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"]],I[140800]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.CROSS-COUNTRY"]],I[140900]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.8,A["GR.IC.FF.CLASS III"])],I[141e3]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.7,A["GR.IC.WATER"])],I[141100]=[A["GR.EQ.WATER VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"]],I[141200]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]],I[141201]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]],I[141202]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]],I[15e4]=[],I[150100]=[A["GR.EQ.TRAIN LOCOMOTIVE"]],I[150200]=[A["GR.EQ.RAILCAR"]],I[16e4]=[],I[160100]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]],I[160101]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160102]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160103]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160200]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]],I[160201]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160202]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160203]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160300]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I[160301]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160302]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160303]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160400]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]],I[160401]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160402]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160403]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160500]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]],I[160501]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160502]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160503]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160600]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160601]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160602]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160603]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160700]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160701]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160702]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160703]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160800]=[A["ST.IC.KNOWN INSURGENT VEHICLE"]],I[160900]=[A["ST.IC.KNOWN INSURGENT VEHICLE"],A["ST.M1.DRUG"]],I[17e4]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[170100]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[170200]=[A["GR.IC.FF.BORDER PATROL"]],I[170300]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[170400]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[170500]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[170600]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[170700]=[A["GR.IC.MILITARY POLICE"]],I[170800]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[170900]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[171e3]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[171100]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[18e4]=[A["GR.EQ.PACK ANIMAL"]],I[19e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE SUPPORT"]],I[190100]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE TRANSLOADER"]],I[190200]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE TRANSPORTER"]],I[190300]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE CRANE/LOADING DEVICE"]],I[190400]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]],I[190500]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE WARHEAD TRANSPORTER"]],I[2e5]=[],I[200100]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[200200]=[A["ST.IC.BOMB"]],I[200300]=[A["ST.IC.BOOBY TRAP"]],I[200400]=[A["GR.EQ.CBRN EQUIPMENT"]],I[200500]=[A["GR.EQ.COMPUTER SYSTEM"]],I[200600]=[A["GR.EQ.COMMAND LAUNCH EQUIPMENT (CLE)"]],I[200700]=[A["GR.EQ.GENERATOR SET"]],I[200800]=[A["GR.EQ.GROUND-BASED MIDCOURSE DEFENSE (GMD) FIRE CONTROL (GFC) CENTER"]],I[200900]=[A["GR.EQ.IN-FLIGHT INTERCEPTOR COMMUNICATIONS SYSTEM (IFICS) DATA TERMINAL (IDT)"]],I[201e3]=[A["GR.EQ.LASER"]],I[201100]=[A["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]],I[201200]=[A["GR.IC.SUSTAINMENT"]],I[201300]=[A["GR.EQ.TENT"]],I[201301]=[A["GR.EQ.TENT CIVILIAN"]],I[201302]=[A["GR.EQ.TENT MILITARY"]],I[201400]=[A["GR.EQ.UNIT DEPLOYMENT SHIPMENTS"]],I[201500]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[201501]=[A["GR.IC.MEDICAL EVACUATION HELICOPTER"]],I[21e4]=[],I[210100]=[A["GR.EQ.LAND MINE"]],I[210200]=[A["GR.EQ.ANTIPERSONNEL LAND MINE"]],I[210300]=[A["GR.EQ.ANTITANK MINE"]],I[210400]=[A["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]],I[210500]=[A["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]],I[22e4]=[],I[220100]=[A["GR.EQ.SENSOR"]],I[220200]=[A["GR.EQ.SENSOR EMPLACED"]],I[220300]=[A["GR.EQ.RADAR"]],I[23e4]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[230100]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.M1.MEDEVAC"]],I[230200]=[A["GR.IC.FIRE PROTECTION"]],I[24e4]=[A["GR.IC.MANUAL TRACK"]],I[25e4]=[A["GR.IC.AVIATION ROTARY WING"]],t["01"]=[A["GR.M1.BIOLOGICAL"]],t["02"]=[A["GR.M1.CHEMICAL"]],t["03"]=[A["GR.M1.EARLY WARNING RADAR"]],t["04"]=[A["GR.M1.INTRUSION"]],t["05"]=[A["GR.M1.NUCLEAR"]],t["06"]=[A["GR.M1.RADIOLOGICAL"]],t["07"]=[A["GR.M1.UPGRADED EARLY WARNING RADAR"]],t["08"]=[A["GR.M1.HIJACKING"]],t["09"]=[A["GR.M1.CIVILIAN"]],t[10]=[A["GR.M1.TILT-ROTOR"]],t[11]=[],t[12]=[A["GR.M1.MULTI-PURPOSE BLADE"]],t[13]=[A["GR.M1.TANK-WIDTH MINE PLOW"]],t[14]=[A["GR.M1.BRIDGING"]],t[15]=[A["GR.M1.CYBERSPACE"]],t[16]=[A["GR.M1.ARMORED"]],t[17]=[A["GR.M1.ATTACK"]],t[18]=[A["GR.M1.CARGO"]],t[19]=[A["GR.M1.MAINTENANCE"]],t[20]=[A["GR.M1.MEDEVAC"]],t[21]=[A["GR.IN.M1.PETROLEUM"]],t[22]=[A["GR.M1.UTILITY"]],t[23]=[A["GR.M1.WATER"]],t[24]=[A["GR.M1.ROBOTIC"]],E["01"]=[A["GR.M2.CYBERSPACE"]],E["02"]=[A["GR.M2.LIGHT"]],E["03"]=[A["GR.M2.MEDIUM"]],E["04"]=[A["GR.M2.RAILROAD"]],E["05"]=[A["GR.M2.TRACKED"]],E["06"]=[A["GR.M2.TRACTOR TRAILER"]],E["07"]=[A["GR.M2.WHEELED LIMITED"]],E["08"]=[A["GR.M2.WHEELED"]],E["09"]=[A["GR.M2.ROBOTIC"]];var T={11e4:140,110100:140,110101:140,110102:140,110103:140,110200:140,110201:140,110202:140,110203:140,110300:140,110301:140,110302:140,110303:140,110400:135,110500:140,110501:140,110502:140,110503:140,110600:140,110601:140,110602:140,110603:140,110700:140,110701:140,110702:140,110703:140,110800:140,110801:140,110802:140,110803:140,110900:140,110901:140,110902:140,110903:140,111e3:140,111001:140,111002:140,111003:140,111100:140,111101:140,111102:140,111103:140,111104:140,111105:140,111106:140,111107:140,111108:140,111109:140,111200:140,111201:140,111202:140,111203:140,111300:140,111301:140,111302:140,111303:140,111400:140,111401:140,111402:140,111403:140,111500:140,111501:140,111502:140,111503:140,111600:140,111601:140,111602:140,111603:140,111701:140,111702:140,111703:140,111800:140,111900:140,112e3:140,12e4:129,120100:129,120101:130,120102:130,120103:130,120104:130,120105:120,120106:120,120107:120,120108:130,120109:130,120110:140,120200:130,120201:130,120202:130,120203:130,120300:130,120301:130,120302:130,120303:130,13e4:129,130100:115,130200:130,130300:130,130400:135,130500:120,130600:120,130700:120,130701:130,130800:130,130801:130,130900:120,130901:130,130902:130,131e3:115,131001:130,131002:130,131003:140,131100:130,131101:130,131200:130,131300:130,131400:140,131500:140,131600:140,140100:130,140200:130,140300:130,140400:130,140500:130,140600:140,140601:140,140602:140,140603:140,140700:140,140800:140,140900:130,141e3:130,141100:140,141200:130,141201:130,141202:130,150100:130,150200:140,160100:132.5,160101:132.5,160102:132.5,160103:132.5,160200:132.5,160201:132.5,160202:132.5,160203:132.5,160300:132.5,160301:132.5,160302:132.5,160303:132.5,160400:132.5,160401:132.5,160402:132.5,160403:132.5,160500:132.5,160501:132.5,160502:132.5,160503:132.5,160600:132.5,160601:132.5,160602:132.5,160603:132.5,160700:132.5,160701:132.5,160702:132.5,160703:132.5,160800:115,160900:115,17e4:149.03125,170100:118.75,170200:133.21875,170300:135.21875,170400:118.75,170500:138.1875,170600:118.75,170700:118.75,170800:118,170900:118,171e3:135,171100:135,18e4:125,19e4:129,190100:129,190200:129,190300:129,190400:129,190500:129,200100:140,200200:118.75,200300:120,200400:140,200500:132,200600:118.75,200700:118.75,200800:118.75,200900:119.36222839355469,201e3:145,201100:120,201200:118,201300:124.36222076416016,201301:120,201302:120,201400:118.75,201500:140,201501:115,210100:122,210200:122,210300:122,210400:118.75,210500:122,220100:140,220200:136,220300:120,23e4:135,230100:132.5,230200:120,24e4:118.75};for(var S in T)T.hasOwnProperty(S)&&(R[S]={x1:50,x2:150,y1:50,y2:T[S]})}}},J={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"20"==e&&(I[11e4]=[A["GR.IC.MILITARY"]],I[110100]=[A["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]],I[110200]=[s._scale(1.4,A["GR.IC.FF.CLASS V"])],I[110300]=[A["GR.IC.FF.CLASS V"],A["GR.IC.FF.SUPPLY"]],I[110400]=[A["GR.EQ.TANK"]],I[110500]=[A["ST.IC.BLACK LIST LOCATION"]],I[110600]=[A["GR.IC.CBRN"]],I[110700]=[A["GR.EQ.DOZER"]],I[110701]=[A["GR.IN.IC.BRIDGE"]],I[110800]=[A["GR.IC.EQUIPMENT MANUFACTURE"]],I[110900]=[A["GR.I.GOVERNMENT"]],I[111e3]=[A["ST.IC.GRAY LIST LOCATION"]],I[111100]=[A["ST.IC.MASS GRAVE LOCATION"]],I[111200]=[A["GR.IN.IC.MILITARY/CIVILIAN.MATERIEL"],A["GR.IC.FF.SUPPLY"]],I[111300]=[A["GR.IN.IC.MINE"]],I[111400]=[A["GR.EQ.MISSILE LAUNCHER"]],I[111500]=[s._scale(.8,A["AC.IC.RADIOACTIVE MATERIAL"])],I[111600]=[A["GR.IN.IC.MILITARY/CIVILIAN.PRINTED MEDIA"]],I[111700]=[A["ST.IC.SAFE HOUSE"]],I[111800]=[A["ST.IC.WHITE LIST LOCATION"]],I[111900]=[A["GR.EQ.TENT"]],I[111901]=[A["GR.EQ.TENT"],A["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],I[111902]=[A["GR.EQ.TENT"],A["GR.M1.TRAINING CAMP"]],I[112e3]=[A["GR.IN.IC.INDUSTRIAL SITE"],A["GR.IN.IC.WAREHOUSE/STORAGE FACILITY"]],I[112100]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[112101]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[112102]=[A["GR.IC.FF.BORDER PATROL"]],I[112103]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[112104]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[112105]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[112106]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[112107]=[A["GR.IC.LAW ENFORCEMENT"]],I[112108]=[A["GR.IC.FF.PRISON"]],I[112109]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[112110]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[112111]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[112112]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[112200]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[112201]=[A["GR.IC.FIRE PROTECTION"]],I[112202]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[12e4]=[],I[120100]=[A["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]],I[120101]=[A["GR.IN.IC.AGRICULTURAL LABORATORY"]],I[120102]=[A["GR.IN.IC.ANIMAL FEEDLOT"]],I[120103]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.COMMERCIAL"]],I[120104]=[A["GR.IN.IC.FARM/RANCH"]],I[120105]=[A["ST.IC.FOOD DISTRIBUTION"]],I[120106]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.PRODUCTION"]],I[120107]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.RETAIL"]],I[120108]=[A["GR.IN.IC.GRAIN STORAGE"]],I[120200]=[A["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]],I[120201]=[A["GR.IN.IC.ATM"]],I[120202]=[A["GR.IN.IC.BANK"]],I[120203]=[A["GR.IN.IC.BULLION STORAGE"]],I[120204]=[A["GR.IN.IC.INFRASTRUCTURE.BANKING FINANCE AND INSURANCE INFRASTRUCTURE.ECONOMIC INFRASTRUCTURE ASSET"]],I[120205]=[A["GR.IN.IC.FEDERAL RESERVE BANK"]],I[120206]=[A["GR.IN.IC.FINANCIAL EXCHANGE"]],I[120207]=[A["GR.IN.IC.FINANCIAL SERVICES, OTHER"]],I[120300]=[A["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]],I[120301]=[A["GR.IN.IC.CHEMICAL PLANT"]],I[120302]=[A["GR.IN.IC.FIREARMS MANUFACTURER"]],I[120303]=[A["GR.IN.IC.FIREARMS RETAILER"]],I[120304]=[A["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]],I[120305]=[A["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]],I[120306]=[A["GR.IN.IC.INDUSTRIAL SITE"]],I[120307]=[A["GR.IN.IC.LANDFILL"]],I[120308]=[A["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]],I[120309]=[A["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]],I[120310]=[A["GR.IN.IC.TOXIC RELEASE INVENTORY"]],I[120400]=[A["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]],I[120401]=[A["GR.IN.IC.COLLEGE/UNIVERSITY"]],I[120402]=[A["GR.IN.IC.SCHOOL"]],I[120500]=[A["GR.IN.IC.ELECTRIC POWER"]],I[120501]=[s._scale(.6,A["GR.IN.IC.ELECTRIC POWER"])],I[120502]=[s._translate(0,15,s._scale(.75,A["GR.IN.IC.ELECTRIC POWER"])),A["AC.M1.GENERATION STATION"]],I[120503]=[A["GR.IN.IC.NATURAL GAS FACILITY"]],I[120504]=[s._scale(1.5,A["GR.IC.FF.CLASS III"])],I[120505]=[A["GR.IC.FF.CLASS III"]],I[120506]=[A["GR.IN.IC.PROPANE FACILITY"]],I[120600]=[A["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]],I[120700]=[],I[120701]=[A["GR.IC.FF.MEDICAL"]],I[120702]=[A["GR.IC.FF.MEDICAL"],A["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I[120800]=[A["GR.IN.IC.MILITARY INFRASTRUCTURE"]],I[120801]=[A["GR.IN.IC.BASE"],A["AC.M1.MILITARY ARMORY"]],I[120802]=[A["GR.IN.IC.BASE"]],I[120900]=[A["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]],I[120901]=[A["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]],I[120902]=[A["GR.IN.IC.POST OFFICE"]],I[121e3]=[A["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]],I[121001]=[A["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]],I[121002]=[A["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]],I[121003]=[A["GR.IN.IC.RECREATIONAL AREA"]],I[121004]=[A["GR.IN.IC.RELIGIOUS INSTITUTION"]],I[121100]=[A["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]],I[121101]=[A["GR.IN.IC.ADULT DAY CARE"]],I[121102]=[A["GR.IN.IC.CHILD DAY CARE"]],I[121103]=[A["GR.IN.IC.ELDER CARE"]],I[121200]=[A["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]],I[121201]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[121202]=[A["GR.IN.IC.INFRASTRUCTURE.TELECOMMUNICATIONS INFRASTRUCTURE.TELECOMMUNICATIONS"]],I[121203]=[A["GR.IN.IC.TELECOMMUNICATIONS TOWER"]],I[121300]=[s._scale(1.5,A["GR.IC.TRANSPORTATION"])],I[121301]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.AIRPORT OF DEBARKATION"]],I[121302]=[A["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]],I[121303]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I[121304]=[A["GR.IC.FERRY"]],I[121305]=[A["GR.IN.IC.HELICOPTER LANDING SITE"]],I[121306]=[A["GR.IC.MAINTENANCE"]],I[121307]=[A["GR.IC.RAILHEAD"]],I[121308]=[A["GR.IN.IC.REST STOP"]],I[121309]=[A["GR.IC.TRANSPORTATION"],A["GR.M1.NAVAL"]],I[121310]=[A["GR.IC.NAVAL"],A["GR.M1.YARD"]],I[121311]=[A["GR.IN.IC.TOLL FACILITY"]],I[121312]=[A["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]],I[121313]=[A["GR.IN.IC.TUNNEL"]],I[121400]=[A["GR.IC.WATER"]],I[121401]=[A["GR.IN.IC.CONTROL VALVE"]],I[121402]=[A["GR.IN.IC.DAM"]],I[121403]=[A["GR.IN.IC.DISCHARGE OUTFALL"]],I[121404]=[A["GR.IN.IC.GROUND WATER WELL"]],I[121405]=[A["GR.IN.IC.PUMPING STATION"]],I[121406]=[A["GR.IN.IC.RESERVOIR"]],I[121407]=[A["GR.IN.IC.STORAGE TOWER"]],I[121408]=[A["GR.IN.IC.SURFACE WATER INTAKE"]],I[121409]=[A["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]],I[121410]=[A["GR.IC.WATER"]],I[121411]=[A["GR.IC.WATER PURIFICATION"]],t["01"]=[A["GR.M1.BIOLOGICAL"]],t["02"]=[A["GR.M1.CHEMICAL"]],t["03"]=[A["GR.M1.NUCLEAR"]],t["04"]=[A["GR.IN.M1.RADIOLOGICAL"]],t["05"]=[A["GR.M1.DECONTAMINATION"]],t["06"]=[A["GR.IN.M1.COAL"]],t["07"]=[A["GR.IN.M1.GEOTHERMAL"]],t["08"]=[A["GR.IN.M1.HYDROELECTRIC"]],t["09"]=[A["GR.IN.M1.NATURAL GAS"]],t[10]=[A["GR.IN.M1.PETROLEUM"]],t[11]=[A["GR.IN.M1.CIVILIAN"]],t[12]=[A["GR.IN.M1.CIVILIAN TELEPHONE"]],t[13]=[A["GR.IN.M1.CIVILIAN TELEVISION"]],t[14]=[A["GR.M1.CYBERSPACE"]],t[15]=[A["GR.M1.JOINT NETWORK NODE"]],t[16]=[A["GR.M1.COMMAND POST NODE"]],E["01"]=[A["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]],E["02"]=[A["GR.IN.M2.CHEMICAL WARFARE PRODUCTION"]],E["03"]=[A["GR.IN.M2.NUCLEAR WARFARE PRODUCTION"]],E["04"]=[A["GR.IN.M2.RADIOLOGICAL WARFARE PRODUCTION"]],E["05"]=[A["GR.IN.M2.ATOMIC ENERGY REACTOR"]],E["06"]=[A["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],E["07"]=[A["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]],E["08"]=[A["GR.IN.M2.WEAPONS GRADE PRODUCTION"]],E["09"]=[A["GR.M2.CYBERSPACE"]])}},Z={type:"number",getMetadata:u,getIcons:v,iconParts:d,icons:function(I,t,E,R,e,A,C){"30"==e&&(I[11e4]=[A["SE.IC.MILITARY"]],I[12e4]=[A["SE.IC.COMBATANT"]],I[120100]=[A["SE.IC.CARRIER"]],I[120200]=[A["SE.IC.SURFACE COMBATANT, LINE"]],I[120201]=[A["SE.IC.BATTLESHIP"]],I[120202]=[A["SE.IC.CRUISER, GUIDED MISSILE"]],I[120203]=[A["SE.IC.DESTROYER"]],I[120204]=[A["SE.IC.FRIGATE"]],I[120205]=[A["SE.IC.CORVETTE"]],I[120206]=[A["SE.IC.LITTORAL COMBATANT SHIP"]],I[120300]=[A["SE.IC.AMPHIBIOUS WARFARE SHIP"]],I[120301]=[A["SE.IC.AMPHIBIOUS FORCE FLAGSHIP"]],I[120302]=[A["SE.IC.AMPHIBIOUS ASSAULT"]],I[120303]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]],I[120304]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, MULTI-PURPOSE"]],I[120305]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, HELICOPTER"]],I[120306]=[A["SE.IC.AMPHIBIOUS TRANSPORT, DOCK"]],I[120307]=[A["SE.IC.LANDING SHIP"]],I[120308]=[A["SE.IC.LANDING CRAFT"]],I[120400]=[A["SE.IC.MINE WARFARE VESSEL"]],I[120401]=[A["SE.IC.MINELAYER"]],I[120402]=[A["SE.IC.MINESWEEPER"]],I[120403]=[A["SE.IC.MINESWEEPER, DRONE"]],I[120404]=[A["SE.IC.MINEHUNTER"]],I[120405]=[A["SE.IC.MINE COUNTERMEASURES"]],I[120406]=[A["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]],I[120500]=[A["SE.IC.PATROL"]],I[120501]=[A["SE.IC.PATROL CRAFT"]],I[120502]=[A["SE.IC.PATROL GUN"]],I[120600]=[A["SE.IC.SEA SURFACE DECOY"]],I[120700]=[A["SE.IC.UNMANNED SURFACE WATER VEHICLE"]],I[120800]=[A["SE.IC.MILITARY SPEEDBOAT"]],I[120801]=[A["SE.IC.MILITARY SPEEDBOAT, RIGID-HULL INFLATABLE BOAT"]],I[120900]=[A["SE.IC.MILITARY JETSKI"]],I[121e3]=[A["SE.IC.NAVY TASK ORGANIZATION UNIT"]],I[121001]=[A["SE.IC.NAVY TASK ELEMENT"]],I[121002]=[A["SE.IC.NAVY TASK FORCE"]],I[121003]=[A["SE.IC.NAVY TASK GROUP"]],I[121004]=[A["SE.IC.NAVY TASK UNIT"]],I[121005]=[A["SE.IC.CONVOY"]],I[121100]=[A["SE.IC.RADAR"]],I[13e4]=[A["SE.IC.NONCOMBATANT"]],I[130100]=[A["SE.IC.AUXILIARY SHIP"]],I[130101]=[A["SE.IC.AMMUNITION SHIP"]],I[130102]=[A["SE.IC.STORES SHIP"]],I[130103]=[A["SE.IC.AUXILIARY FLAG OR COMMAND SHIP"]],I[130104]=[A["SE.IC.INTELLIGENCE COLLECTOR"]],I[130105]=[A["SE.IC.OCEAN RESEARCH SHIP"]],I[130106]=[A["SE.IC.SURVEY SHIP"]],I[130107]=[A["SE.IC.HOSPITAL SHIP2"]],I[130108]=[A["SE.IC.CARGO SHIP"]],I[130109]=[A["SE.IC.COMBAT SUPPORT SHIP, FAST"]],I[130110]=[A["SE.IC.OILER, REPLENISHMENT"]],I[130111]=[A["SE.IC.REPAIR SHIP"]],I[130112]=[A["SE.IC.SUBMARINE TENDER"]],I[130113]=[A["SE.IC.TUG, OCEAN GOING"]],I[130200]=[A["SE.IC.SERVICE CRAFT, YARD, GENERAL"]],I[130201]=[A["SE.IC.BARGE, NOT SELF-PROPELLED"]],I[130202]=[A["SE.IC.BARGE, SELF-PROPELLED"]],I[130203]=[A["SE.IC.TUG, HARBOUR"]],I[130204]=[A["SE.IC.LAUNCH"]],I[14e4]=[A["SE.IC.CIVILIAN"]],I[140100]=[A["SE.IC.MERCHANT SHIP, GENERAL"]],I[140101]=[A["SE.IC.CARGO, GENERAL"]],I[140102]=[A["SE.IC.CONTAINER SHIP"]],I[140103]=[A["SE.IC.DREDGE"]],I[140104]=[A["SE.IC.ROLL ON-ROLL OFF"]],I[140105]=[A["SE.IC.FERRY"]],I[140106]=[A["SE.IC.HEAVY LIFT"]],I[140107]=[A["SE.IC.HOVERCRAFT 2525D"]],I[140108]=[A["SE.IC.MERCHANT SHIP, LASH CARRIER (WITH BARGES)"]],I[140109]=[A["SE.IC.OILER/TANKER"]],I[140110]=[A["SE.IC.PASSENGER SHIP"]],I[140111]=[A["SE.IC.TUG, OCEAN GOING CIVILIAN"]],I[140112]=[A["SE.IC.TOW"]],I[140113]=[A["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]],I[140114]=[A["SE.IC.JUNK/DHOW"]],I[140115]=[A["SE.IC.BARGE, NOT SELF-PROPELLED"]],I[140116]=[A["SE.IC.HOSPITAL SHIP"]],I[140200]=[A["SE.IC.FISHING VESSEL"]],I[140201]=[A["SE.IC.DRIFTER"]],I[140202]=[A["SE.IC.TRAWLER"]],I[140203]=[A["SE.IC.FISHING VESSEL DREDGE"]],I[140300]=[A["SE.IC.LAW ENFORCEMENT VESSEL"]],I[140400]=[A["SE.IC.LEISURE CRAFT, SAILING BOAT"]],I[140500]=[A["SE.IC.LEISURE CRAFT, MOTORIZED"]],I[140501]=[A["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]],I[140502]=[A["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]],I[140600]=[A["SE.IC.LEISURE CRAFT, JETSKI"]],I[140700]=[A["SE.IC.UNMANNED SURFACE WATER VEHICLE (USV)"]],I[15e4]=[A["SE.IC.OWN SHIP"]],I[16e4]=[A["SE.IC.FUSED TRACK"]],I[17e4]=[A["SE.IC.MANUAL TRACK"]],t["01"]=[A["SE.M1.OWN SHIP"]],t["02"]=[A["SE.M1.ANTIAIR WARFARE"]],t["03"]=[A["SE.M1.ANTISUBMARINE WARFARE"]],t["04"]=[A["SE.M1.ESCORT"]],t["05"]=[A["SE.M1.ELECTRONIC WARFARE"]],t["06"]=[A["SE.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]],t["07"]=[A["SE.M1.MINE COUNTER MEASURES"]],t["08"]=[A["SE.M1.MISSILE DEFENSE"]],t["09"]=[A["SE.M1.MEDICAL"]],t[10]=[A["SE.M1.MINE WARFARE"]],t[11]=[A["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]],t[12]=[A["SE.M1.SPECIAL OPERATIONS FORCE"]],t[13]=[A["SE.M1.SURFACE WARFARE"]],t[14]=[A["SE.M1.BALLISTIC MISSILE"]],t[15]=[A["SE.M1.GUIDED MISSILE"]],t[16]=[A["SE.M1.OTHER GUIDED MISSILE"]],t[17]=[A["SE.M1.TORPEDO"]],t[18]=[A["SE.M1.DRONE-EQUIPPED"]],t[19]=[A["SE.M1.HELICOPTER-EQUIPPED"]],t[20]=[A["SE.M1.BALLISTIC MISSILE DEFENSE, SHOOTER"]],t[21]=[A["SE.M1.BALLISTIC MISSILE DEFENSE, LONG- RANGE SURVEILLANCE AND TRACK (LRS&T)"]],t[22]=[A["SE.M1.SEA-BASE X-BAND"]],t[23]=[A["SE.M1.HIJACKING/HIJACKED"]],t[24]=[A["SE.M1.HIJACKER"]],t[25]=[A["SE.M1.CYBERSPACE"]],E["01"]=[A["SE.M2.NUCLEAR POWERED"]],E["02"]=[A["SE.M2.HEAVY"]],E["03"]=[A["SE.M2.LIGHT"]],E["04"]=[A["SE.M2.MEDIUM"]],E["05"]=[A["SE.M2.DOCK"]],E["06"]=[A["SE.M2.LOGISTICS"]],E["07"]=[A["SE.M2.TANK"]],E["08"]=[A["SE.M2.VEHICLE"]],E["09"]=[A["SE.M2.FAST"]],E[10]=[A["SE.M2.AIR-CUSHIONED (USA ONLY)"]],E[11]=[A["SE.M2.AIR-CUSHIONED"]],E[12]=[A["SE.M2.HYDROFOIL"]],E[13]=[A["SE.M2.AUTONOMOUS CONTROL"]],E[14]=[A["SE.M2.REMOTELY PILOTED"]],E[15]=[A["SE.M2.EXPENDABLE"]],E[16]=[A["SE.M2.CYBERSPACE"]])}},q={type:"number",getMetadata:u,getIcons:v,iconParts:D,icons:function(I,t,E,R,e,A,C){"35"==e&&(I[11e4]=[A["SU.IC.MILITARY"]],I[110100]=[A["SU.IC.SUBMARINE"]],I[110101]=[A["SU.IC.SUBMARINE, SURFACED"]],I[110102]=[A["SU.IC.SUBMARINE, SNORKELING"]],I[110103]=[A["SU.IC.SUBMARINE, BOTTOMED"]],I[110200]=[A["SU.IC.OTHER SUBMERSIBLE"]],I[110300]=[A["SU.IC.NON-SUBMARINE"]],I[110400]=[A["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I[110500]=[A["SU.IC.DIVER, MILITARY"]],I[12e4]=[A["SU.IC.CIVILIAN"]],I[120100]=[A["SU.IC.SUBMERSIBLE, CIVILIAN"]],I[120200]=[A["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV), CIVILIAN"]],I[120300]=[A["SU.IC.DIVER, CIVILIAN"]],I[13e4]=[A["SU.IC.UNDERWATER WEAPON"]],I[130100]=[A["SU.IC.TORPEDO"]],I[130200]=[A["SU.IC.IMPROVISED EXPLOSIVE DEVICE (IED)"]],I[130300]=[A["SU.IC.UNDERWATER DECOY DSymbol"]],I[14e4]=[A["SU.IC.ECHO TRACKER CLASSIFIER (ETC)/POSSIBLE CONTACT (POSCON)"]],I[15e4]=[A["SU.IC.FUSED TRACK"]],I[16e4]=[A["SU.IC.MANUAL TRACK"]],I[2e5]=[A["SU.IC.SEABED INSTALLATION, MAN-MADE, MILITARY"]],I[21e4]=[A["SU.IC.SEABED INSTALLATION, MAN-MADE, NON-MILITARY"]],t["01"]=[A["SU.M1.ANTISUBMARINE WARFARE"]],t["02"]=[A["SU.M1.AUXILIARY"]],t["03"]=[A["SU.M1.COMMAND AND CONTROL"]],t["04"]=[A["SU.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]],t["05"]=[A["SU.M1.MINE COUNTERMEASURES"]],t["06"]=[A["SU.M1.MINE WARFARE"]],t["07"]=[A["SU.M1.SURFACE WARFARE"]],t["08"]=[A["SU.M1.ATTACK"]],t["09"]=[A["SU.M1.BALLISTIC MISSILE"]],t[10]=[A["SU.M1.GUIDED MISSILE"]],t[11]=[A["SU.M1.OTHER GUIDED MISSILES (POINT DEFENCE)"]],t[12]=[A["SU.M1.SPECIAL OPERATIONS FORCE"]],t[13]=[A["SU.M1.POSSIBLE SUBMARINE - LOW 1"]],t[14]=[A["SU.M1.POSSIBLE SUBMARINE - LOW 2"]],t[15]=[A["SU.M1.POSSIBLE SUBMARINE - HIGH 3"]],t[16]=[A["SU.M1.POSSIBLE SUBMARINE - HIGH 4"]],t[17]=[A["SU.M1.PROBABLE SUBMARINE"]],t[18]=[A["SU.M1.CERTAIN SUBMARINE"]],t[19]=[A["SU.M1.ANTI-TORPEDO TORPEDO"]],t[20]=[A["SU.M1.HIJACKING/HIJACKED"]],t[21]=[A["SU.M1.HIJACKER"]],t[22]=[A["SU.M1.CYBERSPACE"]],E["01"]=[A["SU.M2.AIR INDEPENDENT PROPULSION"]],E["02"]=[A["SU.M2.DIESEL PROPULSION"]],E["03"]=[A["SU.M2.DIESEL - TYPE 1"]],E["04"]=[A["SU.M2.DIESEL - TYPE 2"]],E["05"]=[A["SU.M2.DIESEL - TYPE 3"]],E["06"]=[A["SU.M2.NUCLEAR POWERED"]],E["07"]=[A["SU.M2.NUCLEAR - TYPE 1"]],E["08"]=[A["SU.M2.NUCLEAR - TYPE 2"]],E["09"]=[A["SU.M2.NUCLEAR - TYPE 3"]],E[10]=[A["SU.M2.NUCLEAR - TYPE 4"]],E[11]=[A["SU.M2.NUCLEAR - TYPE 5"]],E[12]=[A["SU.M2.NUCLEAR - TYPE 6"]],E[13]=[A["SU.M2.NUCLEAR - TYPE 7"]],E[14]=[A["SU.M2.AUTONOMOUS CONTROL"]],E[15]=[A["SU.M2.REMOTELY PILOTED"]],E[16]=[A["SU.M2.EXPENDABLE"]],E[17]=[A["SU.M2.CYBERSPACE"]])}},j={type:"number",getMetadata:u,getIcons:v,iconParts:D,icons:function(I,t,E,R,e,A,C){"36"==e&&(I[11e4]=[A["SU.IC.SEA MINE"]],I[110100]=[A["SU.IC.SEA MINE - BOTTOM"]],I[110200]=[A["SU.IC.SEA MINE - MOORED"]],I[110300]=[A["SU.IC.SEA MINE - FLOATING"]],I[110400]=[A["SU.IC.SEA MINE - RISING"]],I[110500]=[A["SU.IC.SEA MINE (IN OTHER POSITION)"]],I[110600]=[A["SU.IC.SEA MINE - KINGFISHER"]],I[110700]=[A["SU.IC.SEA MINE - SMALL OBJECT"]],I[110800]=[A["SU.IC.SEA MINE EXERCISE MINE"]],I[110801]=[A["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]],I[110802]=[A["SU.IC.SEA MINE EXERCISE MINE - MOORED"]],I[110803]=[A["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]],I[110804]=[A["SU.IC.SEA MINE EXERCISE MINE - RISING"]],I[110900]=[A["SU.IC.SEA MINE NEUTRALIZED"]],I[110901]=[A["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]],I[110902]=[A["SU.IC.SEA MINE NEUTRALIZED - MOORED"]],I[110903]=[A["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]],I[110904]=[A["SU.IC.SEA MINE NEUTRALIZED - RISING"]],I[110905]=[A["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]],I[12e4]=[A["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]],I[13e4]=[A["SU.IC.SEA MINE DECOY"]],I[130100]=[A["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]],I[130200]=[A["SU.IC.SEA MINE DECOY, MOORED"]],I[14e4]=[],I[140100]=[s._scale(1.3,A["SU.IC.SEA MINE MILCO"])],I[140101]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]])],I[140102]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]])],I[140103]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]])],I[140104]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]])],I[140105]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]])],I[140200]=[A["SU.IC.SEA MINE MILCO - BOTTOM"]],I[140201]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140202]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140203]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140204]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140205]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[140300]=[A["SU.IC.SEA MINE MILCO - MOORED"]],I[140301]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140302]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140303]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140304]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140305]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[140400]=[A["SU.IC.SEA MINE MILCO - FLOATING"]],I[140401]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140402]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140403]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140404]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140405]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[15e4]=[s._scale(1.3,A["SU.IC.SEA MINE MILEC"])],I[150100]=[A["SU.IC.SEA MINE MILEC - BOTTOM"]],I[150200]=[A["SU.IC.SEA MINE MILEC - MOORED"]],I[150300]=[A["SU.IC.SEA MINE MILEC - FLOATING"]],I[16e4]=[s._scale(1.3,A["SU.IC.SEA MINE NEGATIVE REACQUISITION"])],I[160100]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]],I[160200]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]],I[160300]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]],I[17e4]=[s._scale(1.3,A["SU.IC.SEA MINE GENERAL OBSTRUCTOR"])],I[170100]=[A["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]],I[18e4]=[s._scale(1.3,A["SU.IC.SEA MINE MINE ANCHOR"])],I[19e4]=[s._scale(1.3,A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"])],I[190100]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]],I[190200]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]],I[190300]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]],I[2e5]=[A["SU.IC.ENVIRONMENTAL REPORT LOCATION"]],I[21e4]=[A["SU.IC.DIVE REPORT LOCATION"]])}},$={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"40"==e&&(I[11e4]=[],I[110100]=[A["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]],I[110101]=[s._scale(1.5,A["ST.IC.ARREST"])],I[110102]=[A["ST.IC.ARSON/FIRE"]],I[110103]=[A["ST.IC.INDIVIDUAL"],A["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I[110104]=[A["ST.IC.DRIVE-BY SHOOTING"]],I[110105]=[A["ST.IC.DRUG RELATED ACTIVITIES"]],I[110106]=[A["ST.IC.EXTORTION"]],I[110107]=[A["ST.IC.GRAFFITI"]],I[110108]=[A["ST.IC.KILLING VICTIM"]],I[110109]=[A["ST.IC.POISONING"]],I[110110]=[A["ST.IC.RIOT"]],I[110111]=[s._scale(1.5,A["ST.IC.BOOBY TRAP"])],I[110112]=[A["ST.IC.HOUSE"],A["ST.M1.EVICTION"]],I[110113]=[A["ST.IC.BLACK MARKETING"]],I[110114]=[A["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]],I[110115]=[A["GR.IC.FF.JAIL BREAK"]],I[110116]=[A["ST.IC.ROBBERY"]],I[110117]=[A["ST.IC.THEFT"]],I[110118]=[A["ST.IC.BURGLARY"]],I[110119]=[A["ST.IC.SMUGGLING"]],I[110120]=[A["ST.IC.ROCK THROWING"]],I[110121]=[A["ST.IC.COMPOSITE LOSS"],A["ST.M1.DEAD BODY"]],I[110122]=[A["ST.IC.SABOTAGE"]],I[110123]=[s._translate(0,10,s._scale(.8,A["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"])),A["AC.M1.THREAT"]],I[110200]=[A["ST.IC.BOMB"]],I[110201]=[A["ST.IC.BOMB"],A["AC.M1.THREAT"]],I[110300]=[A["ST.IC.IED"]],I[110301]=[A["ST.IC.EXPLOSION"],A["ST.IC.IED"]],I[110302]=[s._translate(0,15,s._scale(.7,[A["ST.IC.EXPLOSION"],A["ST.IC.IED"]])),A["ST.M1.PREMATURE"]],I[110303]=[A["ST.IC.IED"],A["GR.IC.FF.SUPPLY"]],I[110304]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.IED"]],I[110400]=[A["AC.IC.SHOOTING"]],I[110401]=[A["ST.IC.SNIPING"]],I[110500]=[A["ST.IC.ILLEGAL DRUG OPERATION"]],I[110501]=[A["ST.IC.ILLEGAL DRUG OPERATION"],A["ST.M1.TRAFFICKING"]],I[110502]=[A["ST.IC.ILLEGAL DRUG OPERATION"],A["ST.M1.LABRATORY"]],I[110600]=[A["ST.IC.EXPLOSION"]],I[110601]=[A["ST.IC.EXPLOSION"],A["ST.IC.GRENADE"]],I[110602]=[A["ST.IC.EXPLOSION"],A["ST.IC.INCENDIARY"]],I[110603]=[A["ST.IC.EXPLOSION"],A["ST.IC.MINE"]],I[110604]=[A["ST.IC.EXPLOSION"],s._scale(.6,A["GR.EQ.MORTAR"])],I[110605]=[A["ST.IC.EXPLOSION"],s._scale(.6,A["GR.EQ.SINGLE ROCKET LAUNCHER"])],I[110606]=[s._scale(.7,A["ST.IC.BOMB"]),A["ST.IC.EXPLOSION"]],I[12e4]=[A["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]],I[120100]=[A["ST.IC.DEMONSTRATION"]],I[13e4]=[],I[130100]=[A["ST.IC.PATROLLING"]],I[130200]=[A["ST.IC.PSYCHOLOGICAL OPERATIONS"]],I[130201]=[A["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]],I[130300]=[A["ST.IC.SEARCHING"]],I[130400]=[],I[130401]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.WILLING"]],I[130402]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.COERCED/IMPRESSED"]],I[130500]=[A["ST.IC.MINE LAYING"]],I[130600]=[A["ST.IC.SPY"]],I[130700]=[A["ST.IC.WARRANT SERVED"]],I[130800]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.EXFILTRATION"]],I[130900]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.INFILTRATION"]],I[131e3]=[A["ST.IC.GROUP"],A["ST.M1.MEETING"]],I[131001]=[A["ST.IC.POLLING PLACE/ELECTION"]],I[131100]=[A["ST.IC.HOUSE"],A["ST.M1.RAID"]],I[131200]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[131201]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]],I[131202]=[A["ST.IC.FOOD DISTRIBUTION"]],I[131203]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]],I[131204]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY OPERATIONS CENTER"]],I[131205]=[A["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]],I[131206]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY SHELTER"]],I[131207]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY STAGING AREA"]],I[131208]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.WATER"]],I[131300]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[131301]=[A["AC.IC.EMT STATION LOCATION"]],I[131302]=[A["AC.IC.HEALTH DEPARTMENT FACILITY"]],I[131303]=[A["AC.IC.MEDICAL FACILITIES OUTPATIENT"]],I[131304]=[A["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]],I[131305]=[A["AC.IC.PHARMACY"]],I[131306]=[A["AC.IC.TRIAGE"]],I[131400]=[A["GR.IC.FIRE PROTECTION"]],I[131401]=[A["AC.IC.FIRE HYDRANT"]],I[131402]=[s._scale(1.5,A["GR.IC.FIRE PROTECTION"])],I[131403]=[A["AC.IC.OTHER WATER SUPPLY LOCATION"]],I[131500]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[131501]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[131502]=[A["GR.IC.FF.BORDER PATROL"]],I[131503]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[131504]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[131505]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[131506]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[131507]=[A["GR.IC.LAW ENFORCEMENT"]],I[131508]=[A["GR.IC.FF.PRISON"]],I[131509]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[131510]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[131511]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[131512]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[131513]=[A["ST.IC.INTERNAL SECURITY FORCE"]],I[14e4]=[A["AC.IC.FIRE EVENT"]],I[140100]=[A["AC.IC.FIRE ORIGIN"]],I[140200]=[A["AC.IC.SMOKE"]],I[140300]=[A["AC.IC.HOT SPOT"]],I[140400]=[A["AC.IC.NON-REsIdENTIAL FIRE"]],I[140500]=[A["AC.IC.REsIdENTIAL FIRE"]],I[140600]=[A["AC.IC.SCHOOL FIRE"]],I[140700]=[A["AC.IC.SPECIAL NEEDS FIRE"]],I[140800]=[A["AC.IC.WILD FIRE"]],I[15e4]=[],I[150100]=[A["AC.IC.HAZARDOUS MATERIALS INCIDENT"]],I[150101]=[A["AC.IC.CHEMICAL AGENT"]],I[150102]=[A["AC.IC.CORROSIVE MATERIAL"]],I[150103]=[A["AC.IC.HAZARDOUS WHEN WET"]],I[150104]=[A["AC.IC.EXPLOSIVE MATERIAL"]],I[150105]=[A["AC.IC.FLAMMABLE GAS"]],I[150106]=[A["AC.IC.FLAMMABLE LIQUID"]],I[150107]=[A["AC.IC.FLAMMABLE SOLID"]],I[150108]=[A["AC.IC.NON-FLAMMABLE GAS"]],I[150109]=[A["AC.IC.ORGANIC PEROXIDE"]],I[150110]=[A["AC.IC.OXIDIZER"]],I[150111]=[A["AC.IC.RADIOACTIVE MATERIAL"]],I[150112]=[A["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]],I[150113]=[A["AC.IC.TOXIC GAS"]],I[150114]=[A["AC.IC.TOXIC INFECTIOUS MATERIAL"]],I[150115]=[A["AC.IC.UNEXPLODED ORDNANCE"]],I[16e4]=[A["GR.IC.TRANSPORTATION"]],I[160100]=[A["ST.IC.HIJACKING (AIRPLANE)"]],I[160200]=[A["ST.IC.HIJACKING (BOAT)"]],I[160300]=[A["GR.EQ.TRAIN LOCOMOTIVE"]],I[160400]=[A["ST.IC.KNOWN INSURGENT VEHICLE"]],I[160500]=[A["ST.IC.EXPLOSION"],s._scale(.7,A["ST.IC.KNOWN INSURGENT VEHICLE"])],I[17e4]=[A["ST.IC.NATURAL EVENT"]],I[170100]=[A["ST.IC.GEOLOGIC"]],I[170101]=[A["AC.IC.AFTERSHOCK"]],I[170102]=[A["AC.IC.AVALANCHE"]],I[170103]=[A["AC.IC.EARTHQUAKE EPICENTER"]],I[170104]=[A["AC.IC.LANDSLIDE"]],I[170105]=[A["AC.IC.SUBSIDENCE"]],I[170106]=[A["AC.IC.VOLCANIC ERUPTION"]],I[170107]=[A["AC.IC.VOLCANIC THREAT"]],I[170108]=[A["AC.IC.CAVE ENTRANCE"]],I[170200]=[A["ST.IC.HYDRO-METEOROLOGICAL"]],I[170201]=[A["AC.IC.DROUGHT"]],I[170202]=[A["AC.IC.FLOOD"]],I[170203]=[A["AC.IC.TSUNAMI"]],I[170300]=[A["ST.IC.INFESTATION"]],I[170301]=[A["AC.IC.BIRD"]],I[170302]=[A["AC.IC.INSECT"]],I[170303]=[A["AC.IC.MICROBIAL"]],I[170304]=[A["AC.IC.REPTILE"]],I[170305]=[A["AC.IC.RODENT"]],I[18e4]=[],I[180100]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.LEADER"],A["ST.M2.RELIGIOUS"]],I[180200]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.SPEAKER"]],t["01"]=[A["ST.M1.ASSASSINATION"]],t["02"]=[A["ST.M1.EXECUTION (WRONGFUL KILLING)"]],t["03"]=[A["ST.M1.HIJACKING/HIJACKED"]],t["04"]=[A["ST.M1.HOUSE-TO-HOUSE"]],t["05"]=[A["ST.M1.KIDNAPPING"]],t["06"]=[A["ST.M1.MURDER"]],t["07"]=[A["ST.M1.PIRACY"]],t["08"]=[A["ST.M1.RAPE"]],t["09"]=[A["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],t[10]=[A["ST.M1.PIRATE"]],t[11]=[A["ST.M1.FALSE"]],t[12]=[A["ST.M1.FIND"]],t[13]=[A["ST.M1.FOUND AND CLEARED"]],t[14]=[A["ST.M1.HOAX (DECOY)"]],t[15]=[A["ST.M1.ATTEMPTED"]],t[16]=[A["ST.M1.ACCIDENT"]],t[17]=[A["ST.M1.INCIDENT"]],t[18]=[A["ST.M1.THEFT"]],t[19]=[A["GR.M1.HIJACKER"]],t[20]=[A["GR.M1.CYBERSPACE"]],E["01"]=[A["GR.M2.CYBERSPACE"]],E["02"]=[A["GR.M2.SECURITY FORCE ASSISTANCE"]])}},II={type:"number",getMetadata:u,getIcons:v,iconParts:f,icons:function(I,t,E,R,e,A,C){"50"!=e&&"51"!=e&&"52"!=e&&"53"!=e&&"54"!=e||(I[11e4]=[],I[110100]=[A["SI.IC.COMMUNICATIONS"]],I[110200]=[A["SI.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I[110300]=[A["SI.IC.RADAR"]],t["01"]=[A["SI.M1.ANTI-AIRCRAFT FIRE CONTROL"]],t["02"]=[A["SI.M1.AIRBORNE SEARCH AND BOMBING"]],t["03"]=[A["SI.M1.AIRBORNE INTERCEPT"]],t["04"]=[A["SI.M1.ALTIMETER"]],t["05"]=[A["SI.M1.AIRBORNE RECONNAISSANCE AND MAPPING"]],t["06"]=[A["SI.M1.AIR TRAFFIC CONTROL"]],t["07"]=[A["SI.M1.BEACON TRANSPONDER (NOT IFF)"]],t["08"]=[A["SI.M1.BATTLEFIELD SURVEILLANCE"]],t["09"]=[A["SI.M1.CONTROLLED APPROACH"]],t[10]=[A["SI.M1.CONTROLLED INTERCEPT"]],t[11]=[A["SI.M1.CELLULAR/MOBILE"]],t[12]=[A["SI.M1.COASTAL SURVEILLANCE"]],t[13]=[A["SI.M1.DECOY/MIMIC"]],t[14]=[A["SI.M1.DATA TRANSMISSION"]],t[15]=[A["SI.M1.EARTH SURVEILLANCE"]],t[16]=[A["SI.M1.EARLY WARNING"]],t[17]=[A["SI.M1.FIRE CONTROL"]],t[18]=[A["SI.M1.GROUND MAPPING"]],t[19]=[A["SI.M1.HEIGHT FINDING"]],t[20]=[A["SI.M1.HARBOR SURVEILLANCE"]],t[21]=[A["SI.M1.IDENTIFICATION, FRIEND OR FOE (INTERROGATOR)"]],t[22]=[A["SI.M1.INSTRUMENT LANDING SYSTEM"]],t[23]=[A["SI.M1.IONOSPHERIC SOUNDING"]],t[24]=[A["SI.M1.IDENTIFICATION, FRIEND OR FOE (TRANSPONDER)"]],t[25]=[A["SI.M1.BARRAGE JAMMER"]],t[26]=[A["SI.M1.CLICK JAMMER"]],t[27]=[A["SI.M1.DECEPTIVE JAMMER"]],t[28]=[A["SI.M1.FREQUENCY SWEPT JAMMER"]],t[29]=[A["SI.M1.JAMMER (GENERAL)"]],t[30]=[A["SI.M1.NOISE JAMMER"]],t[31]=[A["SI.M1.PULSED JAMMER"]],t[32]=[A["SI.M1.REPEATER JAMMER"]],t[33]=[A["SI.M1.SPOT NOISE JAMMER"]],t[34]=[A["SI.M1.TRANSPONDER JAMMER"]],t[35]=[A["SI.M1.MISSILE ACQUISITION"]],t[36]=[A["SI.M1.MISSILE CONTROL"]],t[37]=[A["SI.M1.MISSILE DOWNLINK"]],t[38]=[A["SI.M1.METEOROLOGICAL"]],t[39]=[A["SI.M1.MULTI-FUNCTION"]],t[40]=[A["SI.M1.MISSILE GUIDANCE"]],t[41]=[A["SI.M1.MISSILE HOMING"]],t[42]=[A["SI.M1.MISSILE TRACKING"]],t[43]=[A["SI.M1.NAVIGATIONAL/GENERAL"]],t[44]=[A["SI.M1.NAVIGATIONAL/DISTANCE MEASURING EQUIPMENT"]],t[45]=[A["SI.M1.NAVIGATION/TERRAIN FOLLOWING"]],t[46]=[A["SI.M1.NAVIGATIONAL/WEATHER AVOIDANCE"]],t[47]=[A["SI.M1.OMNI-LINE OF SIGHT (LOS)"]],t[48]=[A["SI.M1.PROXIMITY USE"]],t[49]=[A["SI.M1.POINT-TO-POINT LINE OF SIGHT (LOS)"]],t[50]=[A["SI.M1.INSTRUMENTATION"]],t[51]=[A["SI.M1.RANGE ONLY"]],t[52]=[A["SI.M1.SONOBUOY"]],t[53]=[A["SI.M1.SATELLITE DOWNLINK"]],t[54]=[A["SI.M1.SPACE"]],t[55]=[A["SI.M1.SURFACE SEARCH"]],t[56]=[A["SI.M1.SHELL TRACKING"]],t[57]=[A["SI.M1.SATELLITE UPLINK"]],t[58]=[A["SI.M1.TARGET ACQUISITION"]],t[59]=[A["SI.M1.TARGET ILLUMINATION"]],t[60]=[A["SI.M1.TROPOSPHERIC SCATTER"]],t[61]=[A["SI.M1.TARGET TRACKING"]],t[62]=[A["SI.M1.UNKNOWN"]],t[63]=[A["SI.M1.VIDEO REMOTING"]],t[64]=[A["SI.M1.EXPERIMENTAL"]],t[65]=[A["SI.M1.CYBER"]],E["01"]=[A["SI.M2.CYBER"]])}};var tI={type:"number",getMetadata:u,getIcons:v,iconParts:V,labels:function(I){var t={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:30},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},E={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},R={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}};I[130100]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},additionalInformation1:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:30},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I[130200]=t,I[130300]=t,I[130400]={},I[130500]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I[130600]={},I[130700]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I[130800]=t,I[130900]=t,I[131001]=E,I[131002]=E,I[131003]=E,I[131100]=t,I[131200]=t,I[131300]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:40,fontweight:"bold"}},I[131301]={},I[131400]=t,I[131500]=t,I[131600]=t,I[131700]={},I[131800]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I[131900]={uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:115,fontsize:40}},I[132e3]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[132100]={uniqueDesignation:{stroke:!1,textanchor:"start",x:100,y:110,fontsize:35,fill:"rgb(255,255,255)",fontweight:"bold"}},I[160100]={},I[160200]={},I[160201]={},I[160202]={},I[160203]={},I[160204]={},I[160205]={},I[160300]={uniqueDesignation:{stroke:!1,textanchor:"start",x:110,y:90,fontsize:40}},I[160400]=E,I[18e4]={},I[180100]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35}},I[180200]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35}},I[180300]={},I[180400]={},I[180500]={},I[180600]={uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:70,fontsize:35}},I[180700]={},I[180800]={},I[180900]={},I[181e3]={},I[181100]={},I[181200]={},I[181300]={},I[181400]={},I[181500]={},I[181600]={},I[181700]={},I[181800]={},I[181900]={},I[182e3]={},I[182100]={},I[182200]={},I[182300]={},I[182400]={},I[182500]={},I[200400]={},I[200500]={},I[200600]={},I[200700]={},I[210100]={},I[210200]={},I[210300]={},I[210400]={},I[210500]={},I[210600]={altitudeDepth:{stroke:!1,textanchor:"start",x:150,y:70,fontsize:35}},I[210700]={},I[210800]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:35}},I[210900]={},I[211e3]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:80,fontsize:35}},I[211100]={},I[211200]={},I[211300]={},I[211400]={},I[211500]={},I[211600]={},I[211700]={},I[211800]={},I[211900]={},I[212e3]={},I[212100]={},I[212200]={},I[212300]={},I[212400]={},I[212500]={},I[212600]={},I[212700]={},I[212800]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45}},I[212900]={},I[212901]={},I[212902]={},I[212903]={},I[212904]={},I[213e3]={},I[213100]={},I[213200]={},I[213300]={},I[213400]={},I[213500]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213501]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213502]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213503]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213504]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213505]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213506]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213507]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213508]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213509]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213510]={},I[213511]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213512]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213513]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213514]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213515]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213600]={},I[213700]={},I[213800]={},I[213900]={},I[214e3]={},I[214100]={},I[214200]={},I[214300]={},I[214400]={},I[214500]={},I[214600]={},I[214700]={},I[214800]={},I[214900]={dtg:{stroke:!1,textanchor:"start",x:180,y:75,fontsize:30},dtg1:{stroke:!1,textanchor:"start",x:180,y:100,fontsize:30},uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:125,fontsize:30}},I[215e3]={},I[215100]={},I[215200]={},I[215300]={},I[215400]={},I[215500]={},I[215600]={dtg:{stroke:!1,textanchor:"start",x:180,y:75,fontsize:30},dtg1:{stroke:!1,textanchor:"start",x:180,y:100,fontsize:30},uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:125,fontsize:30}},I[215700]={},I[215800]={},I[215900]={},I[216e3]={},I[216100]={},I[216200]={},I[216300]={},I[216400]={},I[216500]={},I[216600]={},I[216700]={},I[216800]={},I[216900]={},I[217e3]={},I[217100]={},I[217200]={},I[217300]={},I[217400]={},I[217500]={},I[217600]={},I[217700]={},I[217800]={},I[217900]={},I[218e3]={},I[218100]={},I[218200]={},I[218300]={},I[218500]={},I[218600]={},I[218700]={},I[218800]={},I[218900]={},I[219e3]={},I[219100]={},I[219200]={},I[240601]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},targetNumber:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[240602]={targetNumber:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[240603]={},I[240900]={uniqueDesignation:{stroke:!1,textanchor:"start",x:195,y:110,fontsize:35,fontweight:"bold"}},I[250100]=E,I[250200]=E,I[250300]=E,I[250400]=E,I[250500]=E,I[250600]={uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:80,fontsize:35}},I[270601]={},I[270602]={},I[270603]={},I[270701]={},I[280100]={},I[280200]={},I[280201]={},I[280300]={},I[280400]={},I[280500]={},I[280600]={},I[280700]={},I[280800]=t,I[280900]={},I[281e3]={},I[281100]={},I[281200]={},I[281300]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281301]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281400]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281500]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281600]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281700]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281800]=t,I[281801]=t,I[281802]=t,I[281803]=t,I[281804]=t,I[281805]=t,I[281806]=t,I[281807]=t,I[281808]=t,I[281809]=t,I[281901]={},I[281902]={},I[281903]={},I[282001]={altitudeDepth:{stroke:!1,textanchor:"start",x:120,y:60,fontsize:40,fontweight:"bold"}},I[282002]={altitudeDepth:{stroke:!1,textanchor:"start",x:115,y:60,fontsize:40,fontweight:"bold"}},I[320100]={},I[320101]=t,I[320102]=t,I[320103]=t,I[320104]=t,I[320200]=t,I[320300]=t,I[320400]=t,I[320500]=t,I[320600]=t,I[320700]=t,I[320800]=t,I[320900]=t,I[321e3]=t,I[321100]=t,I[321200]=t,I[321300]=t,I[321400]=t,I[321500]=t,I[321600]=t,I[321700]=R,I[321701]=R,I[321702]=R,I[321703]=R,I[321704]=R,I[321705]=R,I[321706]={},I[321707]=E,I[321708]=E,I[321709]=E,I[321710]=E,I[321711]=E,I[321712]=E,I[321713]=E,I[321714]=E,I[321715]=E,I[321716]=E,I[321800]=R,I[340300]={},I[340400]={},I[340900]={},I[341400]={},I[341600]={},I[342800]={},I[350101]={},I[350102]={},I[350103]={},I[350201]={},I[350202]={},I[350203]={}},icons:function(I,t,E,R,e,A,C){"25"==e&&(I[130100]=A["TP.ACTION POINT"],R[130100]={x1:60,x2:140,y1:-60},I[130200]=A["TP.ACTION AMNESTY POINT"],R[130200]={x1:60,x2:140,y1:-60},I[130300]=A["TP.ACTION CHECK POINT"],R[130300]={x1:60,x2:140,y1:-60},I[130400]=A["TP.CENTRE OF MAIN EFFORT"],R[130400]={x1:25,x2:175,y1:65,y2:135},I[130500]=A["TP.CONTACT POINT"],R[130500]={x1:50,x2:150,y1:50,y2:150},I[130600]=A["TP.COORDINATION POINT"],R[130600]={x1:50,x2:150,y1:50,y2:150},I[130700]=A["TP.DECISION POINT"],R[130700]={x1:30,x2:170,y1:25,y2:160},I[130800]=A["TP.DISTRESS CALL"],R[130800]={x1:60,x2:140,y1:-60},I[130900]=A["TP.ENTRY CONTROL POINT"],R[130900]={x1:60,x2:140,y1:-60},I[131001]=A["TP.FLY-TO-POINT (SONOBUOY)"],R[131001]={x1:60,x2:140,y1:-60},I[131002]=A["TP.FLY-TO-POINT (WEAPON)"],R[131002]={x1:60,x2:140,y1:-60},I[131003]=A["TP.FLY-TO-POINT (NORMAL)"],R[131003]={x1:60,x2:140,y1:-60},I[131100]=A["TP.ACTION LINKUP POINT"],R[131100]={x1:60,x2:140,y1:-60},I[131200]=A["TP.ACTION PASSAGE POINT"],R[131200]={x1:60,x2:140,y1:-60},I[131300]=A["TP.POINT OF INTEREST"],R[131300]={x1:50,x2:150,y1:-25},I[131301]=A["POINT OF INTEREST – LAUNCH EVENT"],R[131301]={x1:50,x2:150,y1:-25},I[131400]=A["TP.ACTION RALLY POINT"],R[131400]={x1:60,x2:140,y1:-60},I[131500]=A["TP.ACTION RELEASE POINT"],R[131500]={x1:60,x2:140,y1:-60},I[131600]=A["TP.ACTION START POINT"],R[131600]={x1:60,x2:140,y1:-60},I[131700]=A["TP.SPECIAL POINT"],R[131700]={x1:40,x2:160,y1:40,y2:160},I[131800]=A["TP.WAYPOINT"],R[131800]={x1:60,x2:140,y1:60,y2:140},I[131900]=A["TP.AIRFIELD"],R[131900]={x1:35,x2:165,y1:60,y2:125},I[132e3]=A["TP.TARGET HANDOVER"],R[132e3]={x1:40,x2:160,y1:40,y2:160},I[132100]=A["TP.KEY TERRAIN"],I[160100]=A["TP.OBSERVATION POST/OUTPOST"],R[160100]={x1:50,x2:150,y1:40,y2:150},I[160200]=A["TP.OBSERVATION POST/OUTPOST"],R[160200]={x1:50,x2:150,y1:40,y2:150},I[160201]=A["TP.OBSERVATION POST/RECONNAISSANCE"],R[160201]={x1:50,x2:150,y1:40,y2:150},I[160202]=A["TP.FORWARD OBSERVER POSITION"],R[160202]={x1:50,x2:150,y1:40,y2:150},I[160203]=A["TP.CBRN OBSERVATION POST"],R[160203]={x1:50,x2:150,y1:40,y2:150},I[160204]=A["TP.SENSOR OUTPOST"],R[160204]={x1:50,x2:150,y1:40,y2:150},I[160205]=A["TP.COMBAT OUTPOST"],R[160205]={x1:50,x2:150,y1:40,y2:150},I[160300]=A["TP.TARGET REFERENCE"],I[160400]=A["TP.POINT OF DEPARTURE"],R[160400]={x1:60,x2:140,y1:-60},I[18e4]=A["TP.AIR CONTROL POINT"],R[18e4]={x1:60,x2:140,y1:40,y2:160},I[180100]=A["TP.AIR CONTROL POINT (ACP)"],R[180100]={x1:50,x2:150,y1:50,y2:150},I[180200]=A["TP.COMMUNICATIONS CHECKPOINT"],R[180200]={x1:50,x2:150,y1:50,y2:150},I[180300]=A["TP.DOWNED AIRCREW PICKUP POINT"],R[180300]={x1:60,x2:140,y1:-60},I[180400]=A["TP.PULL-UP POINT"],R[180400]={x1:50,x2:240,y1:50,y2:150},I[180500]=A["TP.AIR CONTROL RENDEZVOUS"],R[180500]={x1:60,x2:140,y1:30,y2:170},I[180600]=A["TP.TACAN"],R[180600]={x1:60,x2:140,y1:30,y2:170},I[180700]=A["TP.CAP STATION"],R[180700]={x1:60,x2:140,y1:30,y2:170},I[180800]=A["TP.AEW STATION"],R[180800]={x1:60,x2:140,y1:30,y2:170},I[180900]=A["TP.FIXED WING"],I[181e3]=A["TP.STRIKE IP"],R[181e3]={x1:60,x2:140,y1:30,y2:170},I[181100]=A["TP.REPLENISHMENT STATION"],R[181100]={x1:60,x2:140,y1:30,y2:170},I[181200]=A["TP.TANKING"],R[181200]={x1:60,x2:140,y1:30,y2:170},I[181300]=A["TP.SUCAP - ROTARY WING"],R[181300]={x1:60,x2:140,y1:40,y2:160},I[181400]=A["TP.SUCAP - FIXED WING"],R[181400]={x1:60,x2:140,y1:40,y2:160},I[181500]=A["TP.SUCAP - ROTARY WING"],R[181500]={x1:60,x2:140,y1:40,y2:160},I[181600]=A["TP.MIW - FIXED WING"],R[181600]={x1:60,x2:140,y1:40,y2:160},I[181700]=A["TP.MIW - ROTARY WING"],R[181700]={x1:60,x2:140,y1:40,y2:160},I[181800]=A["TP.TOMCAT"],R[181800]={x1:60,x2:140,y1:30,y2:170},I[181900]=A["TP.RESCUE"],R[181900]={x1:60,x2:140,y1:30,y2:170},I[182e3]=A["TP.UNMANNED AERIAL SYSTEM"],R[182e3]={x1:60,x2:140,y1:30,y2:170},I[182100]=A["TP.VTUA"],R[182100]={x1:60,x2:140,y1:30,y2:170},I[182200]=A["TP.ORBIT"],R[182200]={x1:60,x2:140,y1:30,y2:170},I[182300]=A["TP.ORBIT - FIGURE EIGHT"],R[182300]={x1:60,x2:140,y1:30,y2:170},I[182400]=A["TP.ORBIT - RACE TRACK"],R[182400]={x1:60,x2:140,y1:30,y2:170},I[182500]=A["TP.ORBIT - RANDOM, CLOSED"],R[182500]={x1:60,x2:140,y1:30,y2:170},I[200400]=A["TP.SHIP AREA OF INTEREST (AEGIS ONLY)"],I[200500]=A["TP.ACTIVE MANOEUVRE AREA (AEGIS ONLY)"],R[200500]={x1:40,x2:160,y1:40,y2:160},I[200600]=A.TODO,I[200700]=A.TODO,I[210100]=A["TP.PLAN SHIP"],R[210100]={x1:50,x2:150,y1:50,y2:150},I[210200]=A["TP.AIM POINT"],R[210200]={x1:50,x2:150,y1:50,y2:150},I[210300]=A["TP.DEFENDED ASSET"],I[210400]=A["TP.DROP POINT"],R[210400]={x1:50,x2:150,y1:50,y2:120},I[210500]=A["TP.ENTRY POINT"],R[210500]={x1:50,x2:150,y1:50},I[210600]=A["TP.AIR DETONATION"],I[210700]=A["TP.GROUND ZERO"],R[210700]={x1:50,x2:150,y1:30},I[210800]=A["TP.IMPACT POINT"],R[210800]={x1:50,x2:150,y1:50,y2:150},I[210900]=A["TP.PREDICTED IMPACT POINT"],R[210900]={x1:50,x2:150,y1:50,y2:150},I[211e3]=A["TP.LAUNCHED TORPEDO (AEGIS ONLY)"],R[211e3]={x1:50,x2:150,y1:90,y2:110},I[211100]=A["TP.MSL DETECT POINT"],R[211100]={x1:50,x2:150,y1:30},I[211200]=A["TP.ACOUSTIC COUNTER MEASURE (DECOY)"],R[211200]={x1:50,x2:150,y1:30},I[211300]=A["TP.ELECTRONIC COUNTER MEASURES (ECM) DECOY"],R[211300]={x1:50,x2:150,y1:50,y2:150},I[211400]=A["TP.BRIEF CONTACT"],R[211400]={x1:50,x2:150,y1:0,y2:100},I[211500]=A["TP.DATUM"],R[211500]={x1:50,x2:150,y1:50,y2:150},I[211600]=A["TP.BT BOUY DROP"],R[211600]={x1:50,x2:150,y1:40,y2:160},I[211700]=A["TP.REPORTED BOTTOMED SUB"],I[211800]=A["TP.MOVING HAVEN"],R[211800]={x1:40,x2:160,y1:50,y2:150},I[211900]=A["TP.SCREEN CENTRE"],I[212e3]=A["TP.LOST CONTACT"],R[212e3]={x1:50,x2:150,y1:0,y2:100},I[212100]=A["TP.SINKER"],R[212100]={x1:50,x2:150,y1:0,y2:100},I[212200]=A["TP.TRIAL TRACK"],R[212200]={x1:50,x2:150,y1:0,y2:100},I[212300]=A["TP.FIX ACOUSTIC"],I[212400]=A["TP.FIX ELECTRO-MAGNETIC"],I[212500]=A["TP.ELECTRO MAGNETIC - MAGNETIC ANOMALY DETECTION (MAD)"],R[212500]={x1:50,x2:150,y1:50,y2:180},I[212600]=A["TP.FIX ELECTRO-OPTICAL"],I[212700]=A["TP.TARGET REFERENCE"],I[212800]=A["TP.HARBOR"],R[212800]={x1:50,x2:150,y1:50,y2:150},I[212900]=A["TP.HARBOR"],R[212900]={x1:50,x2:150,y1:50,y2:150},I[212901]=A["TP.HARBOR POINT A"],R[212901]={x1:50,x2:150,y1:50,y2:150},I[212902]=A["TP.HARBOR POINT Q"],R[212902]={x1:50,x2:150,y1:50,y2:150},I[212903]=A["TP.HARBOR POINT X"],R[212903]={x1:50,x2:150,y1:50,y2:150},I[212904]=A["TP.HARBOR POINT Y"],R[212904]={x1:50,x2:150,y1:50,y2:150},I[213e3]=A["TP.DIP POSITION"],R[213e3]={x1:50,x2:150,y1:50,y2:150},I[213100]=A["TP.SEARCH"],R[213100]={x1:50,x2:150,y1:50,y2:150},I[213200]=A["TP.SEARCH AREA"],R[213200]={x1:50,x2:150,y1:50,y2:150},I[213300]=A["TP.SEARCH CENTER"],R[213300]={x1:50,x2:150,y1:50,y2:150},I[213400]=A["TP.NAVIGATIONAL REFERENCE"],I[213500]=A["TP.SONOBUOY"],R[213500]={x1:60,x2:140,y1:-10,y2:160},I[213501]=A["TP.SONOBUOY ANM"],R[213501]={x1:60,x2:140,y1:-10,y2:160},I[213502]=A["TP.SONOBUOY ATAC"],R[213502]={x1:60,x2:140,y1:-10,y2:160},I[213503]=A["TP.SONOBUOY BARRA"],R[213503]={x1:60,x2:140,y1:-10,y2:160},I[213504]=A["TP.SONOBUOY BATHYTHERMOGRAPH TRANSMITTING SONOBUOY (BT)"],R[213504]={x1:60,x2:140,y1:-10,y2:160},I[213505]=A["TP.SONOBUOY COMMAND ACTIVE MULTIBEAM SONOBUOY (CAMBS)"],R[213505]={x1:60,x2:140,y1:-10,y2:160},I[213506]=A["TP.SONOBUOY CASS"],R[213506]={x1:60,x2:140,y1:-10,y2:160},I[213507]=A["TP.SONOBUOY DIFAR"],R[213507]={x1:60,x2:140,y1:-10,y2:160},I[213508]=A["TP.SONOBUOY DICASS"],R[213508]={x1:60,x2:140,y1:-10,y2:160},I[213509]=A["TP.SONOBUOY EXPENDABLE RELIABLE ACOUSTIC PATH SONOBUOY (ERAPS)"],R[213509]={x1:60,x2:140,y1:-10,y2:160},I[213510]=A["TP.SONOBUOY EXPIRED"],R[213510]={x1:40,x2:160,y1:-10,y2:160},I[213511]=A["TP.SONOBUOY KINGPIN"],R[213511]={x1:40,x2:160,y1:-10,y2:160},I[213512]=A["TP.SONOBUOY LOFAR"],R[213512]={x1:40,x2:160,y1:-10,y2:160},I[213513]=A["TP.SONOBUOY PATTERN CENTER"],R[213513]={x1:40,x2:160,y1:-10,y2:160},I[213514]=A["TP.SONOBUOY RO"],R[213514]={x1:40,x2:160,y1:-10,y2:160},I[213515]=A["TP.SONOBUOY VLAD"],R[213515]={x1:40,x2:160,y1:-10,y2:160},I[213600]=A["TP.REFERENCE POINT"],R[213600]={x1:40,x2:160,y1:40,y2:160},I[213700]=A["TP.SPECIAL POINT"],R[213700]={x1:40,x2:160,y1:40,y2:160},I[213800]=A["TP.NAVIGATIONAL REFERENCE"],R[213800]={x1:40,x2:160,y1:40,y2:160},I[213900]=A["TP.DLRP"],R[213900]={x1:40,x2:160,y1:40,y2:160},I[214e3]=A["FORWARD OBSERVER / SPOTTER POSITION"],R[214e3]={x1:40,x2:160,y1:60,y2:140},I[214100]=A["TP.VITAL AREA CENTRE"],R[214100]={x1:40,x2:160,y1:60,y2:140},I[214200]=A["TP.CORRIDOR TAB"],R[214200]={x1:40,x2:160,y1:40,y2:160},I[214300]=A["TP.ENEMY POINT"],R[214300]={x1:40,x2:160,y1:40,y2:160},I[214400]=A["TP.MARSHALL POINT"],R[214400]={x1:40,x2:160,y1:40,y2:160},I[214500]=A["TP.POINT OF INTENDED MOVEMENT"],R[214500]={x1:40,x2:160,y1:40,y2:160},I[214600]=A["TP.PRE-LANDFALL WAYPOINT"],R[214600]={x1:40,x2:160,y1:40,y2:160},I[214700]=A["TP.ESTIMATED POSITION (EP)"],R[214700]={x1:40,x2:160,y1:40,y2:160},I[214800]=A["TP.REFERENCE POINT WAYPOINT"],R[214800]={x1:40,x2:160,y1:40,y2:160},I[214900]=A["TP.SUB SURFACE CONTROL STATION"],R[214900]={x1:30,x2:170,y1:60,y2:140},I[215e3]=A["TP.SUBMARINE CONTROL STATION"],R[215e3]={x1:30,x2:170,y1:60,y2:140},I[215100]=A["TP.ASW SUBMARINE CONTROL STATION"],R[215100]={x1:30,x2:170,y1:60,y2:140},I[215200]=A["TP.(UUV) CONTROL STATION"],R[215200]={x1:30,x2:170,y1:60,y2:140},I[215300]=A["TP.UUV - ASW CONTROL STATION"],R[215300]={x1:30,x2:170,y1:60,y2:140},I[215400]=A["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SUBSURFACE STATION"],R[215400]={x1:30,x2:170,y1:60,y2:140},I[215500]=A["TP.UUV - SUW CONTROL STATION"],R[215500]={x1:30,x2:170,y1:60,y2:140},I[215600]=A["TP.SEA SURFACE CONTROL STATION"],R[215600]={x1:30,x2:170,y1:60,y2:140},I[215700]=A["TP.ASW CONTROL STATION"],R[215700]={x1:30,x2:170,y1:60,y2:140},I[215800]=A["TP.MINE WARFARE SURFACE STATION"],R[215800]={x1:30,x2:170,y1:60,y2:140},I[215900]=A["TP.NON-COMBATANT SURFACE STATION"],R[215900]={x1:30,x2:170,y1:60,y2:140},I[216e3]=A["TP.PICKET CONTROL STATION"],R[216e3]={x1:30,x2:170,y1:60,y2:140},I[216100]=A["TP.RENDEZVOUS CONTROL POINT"],R[216100]={x1:30,x2:170,y1:60,y2:140},I[216200]=A["TP.REPLENISHMENT AT SEA SURFACE STATION"],R[216200]={x1:30,x2:170,y1:60,y2:140},I[216300]=A["TP.RESCUE CONTROL POINT"],R[216300]={x1:30,x2:170,y1:60,y2:140},I[216400]=A["TP.SUW CONTROL STATION"],R[216400]={x1:30,x2:170,y1:60,y2:140},I[216500]=A["TP.(USV) CONTROL STATION"],R[216500]={x1:30,x2:170,y1:60,y2:140},I[216600]=A["TP.USV - ASW CONTROL STATION"],R[216600]={x1:30,x2:170,y1:60,y2:140},I[216700]=A["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SURFACE STATION"],R[216700]={x1:30,x2:170,y1:60,y2:140},I[216800]=A["TP.(RMV) USV CONTROL STATION"],R[216800]={x1:30,x2:170,y1:60,y2:140},I[216900]=A["TP.USV - SUW CONTROL STATION"],R[216900]={x1:30,x2:170,y1:60,y2:140},I[217e3]=A["TP.SHORE CONTROL STATION"],R[217e3]={x1:40,x2:160,y1:40,y2:160},I[217100]=A["TP.ROUTE"],R[217100]={x1:30,x2:170,y1:60,y2:140},I[217200]=A["TP.ROUTE DIVERSIONS"],R[217200]={x1:30,x2:170,y1:60,y2:170},I[217300]=A["TP.ROUTE POINT R"],R[217300]={x1:30,x2:170,y1:60,y2:170},I[217400]=A["TP.PICKET ROUTE"],R[217400]={x1:30,x2:170,y1:60,y2:170},I[217500]=A["TP.POINT R ROUTE"],R[217500]={x1:30,x2:170,y1:60,y2:170},I[217600]=A["TP.RENDEZVOUS ROUTE"],R[217600]={x1:30,x2:170,y1:60,y2:170},I[217700]=A["TP.ROUTE WAYPOINT"],R[217700]={x1:30,x2:170,y1:60,y2:170},I[217800]=A["TP.CLUTTER, STATIONARY OR CEASE REPORTING"],I[217900]=A["TP.TENTATIVE OR PROVISIONAL TRACK"],I[218e3]=A["TP.DISTRESSED VESSEL"],I[218100]=A["TP.DITCHED AIRCRAFT"],I[218200]=A["TP.PERSON IN WATER"],I[218300]=A["TP.ICEBERG"],R[218300]={x1:50,x2:150,y1:50,y2:150},I[218500]=A["TP.OIL RIG/PLATFORM"],R[218500]={x1:30,x2:170,y1:60,y2:140},I[218600]=A["TP.SEA MINELIKE"],R[218600]={x1:40,x2:160,y1:40,y2:150},I[218700]=A["TP.BOTTOM RETURN"],R[218700]={x1:40,x2:160,y1:40,y2:100},I[218800]=A["TP.INSTALLATION/MANMADE"],R[218800]={x1:40,x2:160,y1:40,y2:100},I[218900]=A["TP.MARINE LIFE"],R[218900]={x1:100,x2:220,y1:70,y2:130},I[219e3]=A["TP.SEA ANOMALY"],R[219e3]={x1:50,x2:150,y1:30,y2:120},I[219100]=A["TP.WRECK, DANGEROUS"],R[219100]={x1:40,x2:160,y1:70,y2:130},I[219200]=A["TP.WRECK, NON DANGEROUS"],R[219200]={x1:40,x2:160,y1:70,y2:130},I[240601]=A["TP.POINT/SINGLE TARGET"],I[240602]=A["TP.NUCLEAR TARGET"],I[240603]=A["TP.TARGETRECORDED (AEGIS ONLY)"],R[240603]={x1:0,x2:200,y1:50,y2:150},I[240900]=A["TP.FIRE SUPPORT STATION"],R[240900]={x1:50,x2:200,y1:50,y2:150},I[250100]=A["TP.FIRING POINT"],R[250100]={x1:60,x2:140,y1:-60},I[250200]=A["TP.HIDE POINT"],R[250200]={x1:60,x2:140,y1:-60},I[250300]=A["TP.LAUNCH POINT"],R[250300]={x1:60,x2:140,y1:-60},I[250400]=A["TP.RELOAD POINT"],R[250400]={x1:60,x2:140,y1:-60},I[250500]=A["TP.SURVEY CONTROL POINT"],R[250500]={x1:60,x2:140,y1:-60},I[250600]=A["TP.KNOWN POINT"],I[270701]=A["TP.MINEFIELD, STATIC"],R[270701]={x1:25,x2:175,y1:65,y2:145},I[280100]=A.TODO,I[280200]=A["TP.ANTIPERSONNEL (AP) MINES"],I[280201]=A["TP.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS"],R[280201]={x1:40,x2:180,y1:40,y2:150},I[280300]=A["TP.ANTITANK MINE (AT)"],I[280400]=A["TP.(AT) ANTIHANDLING DEVICE"],R[280400]={x1:60,x2:140,y1:40,y2:195},I[280500]=A["TP.WIDE AREA MINES"],I[280600]=A["TP.UNSPECIFIED MINE"],I[280700]=A["TP.BOOBY TRAP"],I[280800]=A["TP.ENGINEER REGULATING POINT"],R[280800]={x1:60,x2:140,y1:-60},I[280900]=A["TP.EARTHWORK/FORTIFICATION"],I[281e3]=A["TP.SURFACE SHELTER"],I[281100]=A["TP.UNDERGROUND SHELTER"],I[281200]=A["TP.FORT"],I[281300]=A["TP.CHEMICAL EVENT"],R[281300]={x1:25,x2:175,y1:-10},I[281301]=A["TP.CHEMICAL – TOXIC INDUSTRIAL MATERIAL"],R[281301]={x1:25,x2:175,y1:-10},I[281400]=A["TP.BIOLOGICAL EVENT"],R[281400]={x1:25,x2:175,y1:-10},I[281401]=A["TP.BIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"],R[281401]={x1:25,x2:175,y1:-10},I[281500]=A["TP.NUCLEAR EVENT"],R[281500]={x1:25,x2:175,y1:-10},I[281600]=A["TP.NUCLEAR EVENT"],R[281600]={x1:25,x2:175,y1:-10},I[281700]=A["TP.RADIOLOGICAL EVENT"],R[281700]={x1:25,x2:175,y1:-10},I[281701]=A["TP.RADIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"],R[281701]={x1:25,x2:175,y1:-10},I[281800]=A["TP.DECON SITE/POINT"],R[281800]={x1:60,x2:140,y1:-60},I[281801]=A["TP.ALTERNATE DECON SITE/POINT"],R[281801]={x1:60,x2:140,y1:-60},I[281802]=A["TP.DECON SITE/POINT (EQUIPMENT)"],R[281802]={x1:60,x2:140,y1:-60},I[281803]=A["TP.DECON SITE/POINT (TROOPS)"],R[281803]={x1:60,x2:140,y1:-60},I[281804]=A["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],R[281804]={x1:60,x2:140,y1:-60},I[281805]=A["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],R[281805]={x1:60,x2:140,y1:-60},I[281806]=A["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],R[281806]={x1:60,x2:140,y1:-60},I[281807]=A["TP.MAIN EQUIPMENT DECONTAMINATION POINT/SITE"],R[281807]={x1:60,x2:140,y1:-60},I[281808]=A["TP.FORWARD TROOP DECONTAMINATION POINT/SITE"],R[281808]={x1:60,x2:140,y1:-60},I[281809]=A["TP.WOUNDED PERSONNEL DECONTAMINATION SITE"],R[281809]={x1:60,x2:140,y1:-60},I[281901]=A["TP.FIXED AND PREFABRICATED"],R[281901]={x1:60,x2:140,y1:30},I[281902]=A["TP.TETRAHEDRONS"],R[281902]={x1:60,x2:140,y1:30},I[281903]=A["TP.TETRAHEDRONS MOVABLE"],R[281903]={x1:60,x2:140,y1:30},I[282001]=A["TP.TOWER LOW"],R[282001]={x1:50,x2:150,y1:30,y2:120},I[282002]=A["TP.TOWER HIGH"],R[282002]={x1:50,x2:150,y1:30,y2:120},I[320100]=A["TP.AMBULANCE EXCHANGE POINT"],R[320100]={x1:60,x2:140,y1:-60},I[320101]=A["TP.AMBULANCE EXCHANGE POINT"],R[320101]={x1:60,x2:140,y1:-60},I[320102]=A["TP.AMBULANCE CONTROL POINT"],R[320102]={x1:60,x2:140,y1:-60},I[320103]=A["TP.AMBULANCE LOAD POINT"],R[320103]={x1:60,x2:140,y1:-60},I[320104]=A["TP.AMBULANCE RELAY POINT"],R[320104]={x1:60,x2:140,y1:-60},I[320200]=A["TP.AMMUNITION SUPPLY POINT (ASP)"],R[320200]={x1:60,x2:140,y1:-60},I[320300]=A["TP.AMMUNITION TRANSFER POINT (ATP)"],R[320300]={x1:60,x2:140,y1:-60},I[320400]=A["TP.CANNIBALIZATION POINT"],R[320400]={x1:60,x2:140,y1:-60},I[320500]=A["TP.CASUALTY COLLECTION POINT"],R[320500]={x1:60,x2:140,y1:-60},I[320600]=A["TP.CIVILIAN COLLECTION POINT"],R[320600]={x1:60,x2:140,y1:-60},I[320700]=A["TP.DETAINEE COLLECTION POINT"],R[320700]={x1:60,x2:140,y1:-60},I[320800]=A["TP.EPW COLLECTION POINT"],R[320800]={x1:60,x2:140,y1:-60},I[320900]=A["TP.LOGISTICS RELEASE POINT"],R[320900]={x1:60,x2:140,y1:-60},I[321e3]=A["TP.MAINTENANCE COLLECTION POINT"],R[321e3]={x1:60,x2:140,y1:-60},I[321100]=A["TP.MEDICAL EVACUATION (MEDEVAC) PICKUP POINT"],R[321100]={x1:60,x2:140,y1:-60},I[321200]=A["TP.REARM, REFUEL AND RESUPPLY POINT"],R[321200]={x1:60,x2:140,y1:-60},I[321300]=A["TP.REFUEL ON THE MOVE POINT"],R[321300]={x1:60,x2:140,y1:-60},I[321400]=A["TP.TRAFFIC CONTROL POST"],R[321400]={x1:60,x2:140,y1:-60},I[321500]=A["TP.TRAILER TRANSFER POINT"],R[321500]={x1:60,x2:140,y1:-60},I[321600]=A["TP.UNIT MAINTENANCE COLLECTION POINT"],R[321600]={x1:60,x2:140,y1:-60},I[321700]=A["TP.SUPPLY POINT"],R[321700]={x1:60,x2:140,y1:-60},I[321701]=A["TP.NATO CLASS I"],R[321701]={x1:60,x2:140,y1:-60},I[321702]=A["TP.NATO CLASS II"],R[321702]={x1:60,x2:140,y1:-60},I[321703]=A["TP.NATO CLASS III"],R[321703]={x1:60,x2:140,y1:-60},I[321704]=A["TP.NATO CLASS IV"],R[321704]={x1:60,x2:140,y1:-60},I[321705]=A["TP.NATO CLASS V"],R[321705]={x1:60,x2:140,y1:-60},I[321706]=A["TP.SUPPLY POINT"],R[321706]={x1:60,x2:140,y1:-60},I[321707]=A["TP.SP CLASS I"],R[321707]={x1:60,x2:140,y1:-60},I[321708]=A["TP.SP CLASS II"],R[321708]={x1:60,x2:140,y1:-60},I[321709]=A["TP.SP CLASS III"],R[321709]={x1:60,x2:140,y1:-60},I[321710]=A["TP.SP CLASS IV"],R[321710]={x1:60,x2:140,y1:-60},I[321711]=A["TP.SP CLASS V"],R[321711]={x1:60,x2:140,y1:-60},I[321712]=A["TP.SP CLASS VI"],R[321712]={x1:60,x2:140,y1:-60},I[321713]=A["TP.SP CLASS VII"],R[321713]={x1:60,x2:140,y1:-60},I[321714]=A["TP.SP CLASS VIII"],R[321714]={x1:60,x2:140,y1:-60},I[321715]=A["TP.SP CLASS IX"],R[321715]={x1:60,x2:140,y1:-60},I[321716]=A["TP.SP CLASS X"],R[321716]={x1:60,x2:140,y1:-60},I[321800]=A["TP.MEDICAL SUPPLY POINT"],R[321800]={x1:60,x2:140,y1:-60},I[340900]=A["TP.DESTROY"],R[340900]={x1:0,x2:200,y1:40,y2:160},I[341400]=A["TP.INTERDICT"],R[341400]={x1:0,x2:200,y1:40,y2:160},I[341600]=A["TP.NEUTRALIZE"],R[341600]={x1:0,x2:200,y1:40,y2:160},I[342800]=A["TP.SUPPRESS"],R[342800]={x1:0,x2:200,y1:40,y2:160},I[350101]=A["MAN MADE SPACE DEBRIS SMALL"],I[350102]=A["MAN MADE SPACE DEBRIS MEDIUM"],I[350103]=A["MAN MADE SPACE DEBRIS BIG"],I[350201]=A["NATURAL SPACE DEBRIS SMALL"],I[350202]=A["NATURAL SPACE DEBRIS MEDIUM"],I[350203]=A["NATURAL SPACE DEBRIS BIG"],t[13]=[A["TP.M1.UNSPECIFIED"]],t[14]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[15]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[16]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[17]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[18]=[A["TP.M1.WIDE AREA ANTITANK MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[19]=[A["TP.M1.MINE CLUSTER 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.MINE CLUSTER 3"]],t[20]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[21]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTIPERSONNEL MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[22]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[23]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[24]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[25]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[26]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[27]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[28]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[29]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTITANK MINE 3"]],t[30]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[31]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTITANK MINE 3"]],t[32]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[33]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[34]=[A["TP.M1.WIDE AREA ANTITANK MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[35]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTITANK MINE 3"]],t[36]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[37]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[38]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.MINE CLUSTER 3"]],t[39]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[40]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[41]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[42]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[43]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.MINE CLUSTER 3"]],t[44]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[45]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[46]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[47]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[48]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[49]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.MINE CLUSTER 3"]],t[50]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]])}},EI=[Q,g,b,K,X,w,_,J,Z,q,j,$,II,{type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"27"==e&&(I[11e4]=[],I[110100]=[],I[110101]=[A["GR.IC.FF.INFANTRY DISMOUNTED"]],I[110102]=[A["GR.IC.FF.MEDICAL"]],I[110103]=[A["GR.IC.FF.RECONNAISSANCE DISMOUNTED"]],I[110104]=[A["GR.IC.FF.SIGNAL DISMOUNTED"]],I[110200]=[],I[110201]=[A["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I[110202]=[A["GR.IC.FIELD ARTILLERY OBSERVER"]],I[110203]=[A["GR.IC.JOINT FIRE SUPPORT"]],I[110204]=[A["GR.IC.LIAISON"]],I[110205]=[A["GR.IC.MESSENGER"]],I[110206]=[A["GR.IC.MILITARY POLICE"]],I[110207]=[A["GR.IC.OBSERVER/OBSERVATION"]],I[110208]=[A["GR.IC.SECURITY"]],I[110209]=[A["GR.IC.SNIPER"]],I[110210]=[A["GR.IC.SPECIAL OPERATIONS FORCES"]],I[110300]=[],I[110301]=[A["GR.EQ.RIFLE"]],I[110302]=[A["GR.EQ.RIFLE"],A["GR.EQ.SHORT RANGE"]],I[110303]=[A["GR.EQ.RIFLE"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110304]=[A["GR.EQ.RIFLE"],A["GR.EQ.LONG RANGE"]],I[110305]=[A["GR.EQ.MACHINE GUN"]],I[110306]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.SHORT RANGE"]],I[110307]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110308]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.LONG RANGE"]],I[110309]=[A["GR.EQ.GRENADE LAUNCHER"]],I[110310]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.SHORT RANGE"])],I[110311]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.INTERMEDIATE RANGE"])],I[110312]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.LONG RANGE"])],I[110313]=[A["GR.EQ.FLAME THROWER"]],I[110314]=[A["GR.EQ.MORTAR"]],I[110315]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"]],I[110316]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I[110400]=[],I[110401]=[A["GR.EQ.NON-LETHAL WEAPON"]],I[110402]=A["GR.EQ.NON-LETHAL GRENADE LAUNCHER"],I[110403]=[A["GR.EQ.TASER"]],I[12e4]=[],I[120100]=[],I[120101]=[A["GR.IC.LAW ENFORCEMENT"]],t["01"]=[A["GR.M1.CLOSE PROTECTION"]],t["02"]=[A["GR.M1.CROWD AND RIOT CONTROL"]],t["03"]=[A["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]],t["04"]=[A["GR.M1.SECURITY"]],t["05"]=[A["GR.M1.SNIPER"]],t["06"]=[A["GR.M1.SPECIAL WEAPONS AND TACTICS"]],t["07"]=[A["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],t["08"]=[A["GR.M1.MULTINATIONAL"]],t["09"]=[A["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]],t[10]=[A["ST.M1.GOVERNMENT ORGANIZATION"]],t[11]=[A["GR.M1.VIDEO IMAGERY"]],t[12]=[A["GR.M1.J1"]],t[13]=[A["GR.M1.J2"]],t[14]=[A["GR.M1.J3"]],t[15]=[A["GR.M1.J4"]],t[16]=[A["GR.M1.J5"]],t[17]=[A["GR.M1.J6"]],t[18]=[A["GR.M1.J7"]],t[19]=[A["GR.M1.J8"]],t[20]=[A["GR.M1.J9"]],t[21]=[A["GR.M1.OF-1"]],t[22]=[A["GR.M1.OF-2"]],t[23]=[A["GR.M1.OF-3"]],t[24]=[A["GR.M1.OF-4"]],t[25]=[A["GR.M1.OF-5"]],t[26]=[A["GR.M1.OF-6"]],t[27]=[A["GR.M1.OF-7"]],t[28]=[A["GR.M1.OF-8"]],t[29]=[A["GR.M1.OF-9"]],t[30]=[A["GR.M1.OF-10"]],t[31]=[A["GR.M1.OF-D"]],t[32]=[A["GR.M1.OR-1"]],t[33]=[A["GR.M1.OR-2"]],t[34]=[A["GR.M1.OR-3"]],t[35]=[A["GR.M1.OR-4"]],t[36]=[A["GR.M1.OR-5"]],t[37]=[A["GR.M1.OR-6"]],t[38]=[A["GR.M1.OR-7"]],t[39]=[A["GR.M1.OR-8"]],t[40]=[A["GR.M1.OR-9"]],t[41]=[A["GR.M1.WO-1"]],t[42]=[A["GR.M1.WO-2"]],t[43]=[A["GR.M1.WO-3"]],t[44]=[A["GR.M1.WO-4"]],t[45]=[A["GR.M1.WO-5"]],t[46]=[A["GR.M1.INDIVIDUAL"]],t[47]=[A["GR.M1.TEAM"]],t[48]=[A["GR.M1.SQUAD"]],t[49]=[A["GR.M1.SECTION"]],t[50]=[A["GR.M1.PLATOON"]],t[51]=[A["GR.M1.COMPANY"]],t[52]=[A["GR.M1.BATTALION"]],t[53]=[A["GR.M1.REGIMENT"]],t[54]=[A["GR.M1.BRIGADE"]],t[55]=[A["GR.M1.DIVISION"]],E["01"]=[A["GR.M2.AIRBORNE"]],E["02"]=[A["GR.M2.BICYCLE EQUIPPED"]],E["03"]=[A["GR.M2.DEMOLITION"]],E["04"]=[A["GR.M2.J1"]],E["05"]=[A["GR.M2.J2"]],E["06"]=[A["GR.M2.J3"]],E["07"]=[A["GR.M2.J4"]],E["08"]=[A["GR.M2.J5"]],E["09"]=[A["GR.M2.J6"]],E[10]=[A["GR.M2.J7"]],E[11]=[A["GR.M2.J8"]],E[12]=[A["GR.M2.J9"]],E[13]=[A["GR.M2.MOUNTAIN"]],E[14]=[A["GR.M2.OF-1"]],E[15]=[A["GR.M2.OF-2"]],E[16]=[A["GR.M2.OF-3"]],E[17]=[A["GR.M2.OF-4"]],E[18]=[A["GR.M2.OF-5"]],E[19]=[A["GR.M2.OF-6"]],E[20]=[A["GR.M2.OF-7"]],E[21]=[A["GR.M2.OF-8"]],E[22]=[A["GR.M2.OF-9"]],E[23]=[A["GR.M2.OF-10"]],E[24]=[A["GR.M2.OF-D"]],E[25]=[A["GR.M2.OR-1"]],E[26]=[A["GR.M2.OR-2"]],E[27]=[A["GR.M2.OR-3"]],E[28]=[A["GR.M2.OR-4"]],E[29]=[A["GR.M2.OR-5"]],E[30]=[A["GR.M2.OR-6"]],E[31]=[A["GR.M2.OR-7"]],E[32]=[A["GR.M2.OR-8"]],E[33]=[A["GR.M2.OR-9"]],E[34]=[A["GR.M2.WO-1"]],E[35]=[A["GR.M2.WO-2"]],E[36]=[A["GR.M2.WO-3"]],E[37]=[A["GR.M2.WO-4"]],E[38]=[A["GR.M2.WO-5"]],E[39]=[A["GR.M2.SKI"]])}},tI],RI=[Q,g,b,K,X,w,_,J,Z,q,j,$,II,{type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"60"==e&&(I[11e4]=[],I[110100]=[A["CY.IC.COMBAT MISSION TEAM"]],I[110200]=[A["CY.IC.NATIONAL MISSION TEAM"]],I[110300]=[A["CY.IC.CYBER PROTECTION TEAM"]],I[110400]=[A["CY.IC.NATION STATE CYBER THREAT ACTOR"]],I[110500]=[A["CY.IC.NON NATION STATE CYBER THREAT ACTOR"]])}},tI];return s.addIcons(B),s.addIcons(Y),s.addIcons(W),s.addIcons(EI),s.addIcons(RI),s.Path2D=function(I,t){var E,R,e,A,C,T,S,N,O,G,o;I.beginPath();var M=t.match(/([MCLHV][^MCLHV]*)/gi);for(S=0;S<M.length;S++){if("M"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),O=E=parseFloat(o[0]),G=R=parseFloat(o[1]),I.moveTo(E,R),N=2;N<o.length;N+=2)E=parseFloat(o[N]),R=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("m"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),O=E=E?E+parseFloat(o[0]):parseFloat(o[0]),G=R=R?R+parseFloat(o[1]):parseFloat(o[1]),I.moveTo(E,R),N=2;N<o.length;N+=2)E+=parseFloat(o[N]),R+=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("L"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=2)E=parseFloat(o[N]),R=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("l"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=2)E+=parseFloat(o[N]),R+=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("C"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=6)e=parseFloat(o[N]),A=parseFloat(o[N+1]),C=parseFloat(o[N+2]),T=parseFloat(o[N+3]),E=parseFloat(o[N+4]),R=parseFloat(o[N+5]),I.bezierCurveTo(e,A,C,T,E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("c"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=6)e=E+parseFloat(o[N]),A=R+parseFloat(o[N+1]),C=E+parseFloat(o[N+2]),T=R+parseFloat(o[N+3]),E+=parseFloat(o[N+4]),R+=parseFloat(o[N+5]),I.bezierCurveTo(e,A,C,T,E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("H"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)E=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("h"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)E+=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("V"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)R=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("v"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)R+=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}}},s});
|
||
}).call(this)}).call(this,require('_process'))
|
||
|
||
},{"_process":3}],3:[function(require,module,exports){
|
||
// shim for using process in browser
|
||
var process = module.exports = {};
|
||
|
||
// cached from whatever global is present so that test runners that stub it
|
||
// don't break things. But we need to wrap it in a try catch in case it is
|
||
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
||
// function because try/catches deoptimize in certain engines.
|
||
|
||
var cachedSetTimeout;
|
||
var cachedClearTimeout;
|
||
|
||
function defaultSetTimout() {
|
||
throw new Error('setTimeout has not been defined');
|
||
}
|
||
function defaultClearTimeout () {
|
||
throw new Error('clearTimeout has not been defined');
|
||
}
|
||
(function () {
|
||
try {
|
||
if (typeof setTimeout === 'function') {
|
||
cachedSetTimeout = setTimeout;
|
||
} else {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
} catch (e) {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
try {
|
||
if (typeof clearTimeout === 'function') {
|
||
cachedClearTimeout = clearTimeout;
|
||
} else {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} catch (e) {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} ())
|
||
function runTimeout(fun) {
|
||
if (cachedSetTimeout === setTimeout) {
|
||
//normal enviroments in sane situations
|
||
return setTimeout(fun, 0);
|
||
}
|
||
// if setTimeout wasn't available but was latter defined
|
||
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
||
cachedSetTimeout = setTimeout;
|
||
return setTimeout(fun, 0);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedSetTimeout(fun, 0);
|
||
} catch(e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedSetTimeout.call(null, fun, 0);
|
||
} catch(e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
||
return cachedSetTimeout.call(this, fun, 0);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
function runClearTimeout(marker) {
|
||
if (cachedClearTimeout === clearTimeout) {
|
||
//normal enviroments in sane situations
|
||
return clearTimeout(marker);
|
||
}
|
||
// if clearTimeout wasn't available but was latter defined
|
||
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
||
cachedClearTimeout = clearTimeout;
|
||
return clearTimeout(marker);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedClearTimeout(marker);
|
||
} catch (e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedClearTimeout.call(null, marker);
|
||
} catch (e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
||
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
||
return cachedClearTimeout.call(this, marker);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
var queue = [];
|
||
var draining = false;
|
||
var currentQueue;
|
||
var queueIndex = -1;
|
||
|
||
function cleanUpNextTick() {
|
||
if (!draining || !currentQueue) {
|
||
return;
|
||
}
|
||
draining = false;
|
||
if (currentQueue.length) {
|
||
queue = currentQueue.concat(queue);
|
||
} else {
|
||
queueIndex = -1;
|
||
}
|
||
if (queue.length) {
|
||
drainQueue();
|
||
}
|
||
}
|
||
|
||
function drainQueue() {
|
||
if (draining) {
|
||
return;
|
||
}
|
||
var timeout = runTimeout(cleanUpNextTick);
|
||
draining = true;
|
||
|
||
var len = queue.length;
|
||
while(len) {
|
||
currentQueue = queue;
|
||
queue = [];
|
||
while (++queueIndex < len) {
|
||
if (currentQueue) {
|
||
currentQueue[queueIndex].run();
|
||
}
|
||
}
|
||
queueIndex = -1;
|
||
len = queue.length;
|
||
}
|
||
currentQueue = null;
|
||
draining = false;
|
||
runClearTimeout(timeout);
|
||
}
|
||
|
||
process.nextTick = function (fun) {
|
||
var args = new Array(arguments.length - 1);
|
||
if (arguments.length > 1) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
args[i - 1] = arguments[i];
|
||
}
|
||
}
|
||
queue.push(new Item(fun, args));
|
||
if (queue.length === 1 && !draining) {
|
||
runTimeout(drainQueue);
|
||
}
|
||
};
|
||
|
||
// v8 likes predictible objects
|
||
function Item(fun, array) {
|
||
this.fun = fun;
|
||
this.array = array;
|
||
}
|
||
Item.prototype.run = function () {
|
||
this.fun.apply(null, this.array);
|
||
};
|
||
process.title = 'browser';
|
||
process.browser = true;
|
||
process.env = {};
|
||
process.argv = [];
|
||
process.version = ''; // empty string to avoid regexp issues
|
||
process.versions = {};
|
||
|
||
function noop() {}
|
||
|
||
process.on = noop;
|
||
process.addListener = noop;
|
||
process.once = noop;
|
||
process.off = noop;
|
||
process.removeListener = noop;
|
||
process.removeAllListeners = noop;
|
||
process.emit = noop;
|
||
process.prependListener = noop;
|
||
process.prependOnceListener = noop;
|
||
|
||
process.listeners = function (name) { return [] }
|
||
|
||
process.binding = function (name) {
|
||
throw new Error('process.binding is not supported');
|
||
};
|
||
|
||
process.cwd = function () { return '/' };
|
||
process.chdir = function (dir) {
|
||
throw new Error('process.chdir is not supported');
|
||
};
|
||
process.umask = function() { return 0; };
|
||
|
||
},{}],4:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Button_instances, _Button_container, _Button_srcs, _Button_callback, _Button_img, _Button_state, _Button_onClick;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Button = void 0;
|
||
class Button {
|
||
constructor(ID, srcs, callback) {
|
||
_Button_instances.add(this);
|
||
_Button_container.set(this, void 0);
|
||
_Button_srcs.set(this, void 0);
|
||
_Button_callback.set(this, void 0);
|
||
_Button_img.set(this, void 0);
|
||
_Button_state.set(this, 0);
|
||
__classPrivateFieldSet(this, _Button_container, document.getElementById(ID), "f");
|
||
__classPrivateFieldSet(this, _Button_srcs, srcs, "f");
|
||
__classPrivateFieldSet(this, _Button_callback, callback, "f");
|
||
if (__classPrivateFieldGet(this, _Button_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _Button_img, document.createElement("img"), "f");
|
||
__classPrivateFieldGet(this, _Button_img, "f").src = __classPrivateFieldGet(this, _Button_srcs, "f")[__classPrivateFieldGet(this, _Button_state, "f")];
|
||
__classPrivateFieldGet(this, _Button_container, "f").appendChild(__classPrivateFieldGet(this, _Button_img, "f"));
|
||
__classPrivateFieldGet(this, _Button_container, "f").addEventListener("click", () => __classPrivateFieldGet(this, _Button_instances, "m", _Button_onClick).call(this));
|
||
}
|
||
}
|
||
setState(state) {
|
||
if (state < __classPrivateFieldGet(this, _Button_srcs, "f").length) {
|
||
__classPrivateFieldSet(this, _Button_state, state, "f");
|
||
__classPrivateFieldGet(this, _Button_img, "f").src = __classPrivateFieldGet(this, _Button_srcs, "f")[__classPrivateFieldGet(this, _Button_state, "f")];
|
||
}
|
||
}
|
||
getState() {
|
||
return __classPrivateFieldGet(this, _Button_state, "f");
|
||
}
|
||
}
|
||
exports.Button = Button;
|
||
_Button_container = new WeakMap(), _Button_srcs = new WeakMap(), _Button_callback = new WeakMap(), _Button_img = new WeakMap(), _Button_state = new WeakMap(), _Button_instances = new WeakSet(), _Button_onClick = function _Button_onClick() {
|
||
if (__classPrivateFieldGet(this, _Button_img, "f") != null) {
|
||
this.setState(__classPrivateFieldGet(this, _Button_state, "f") < __classPrivateFieldGet(this, _Button_srcs, "f").length - 1 ? __classPrivateFieldGet(this, _Button_state, "f") + 1 : 0);
|
||
if (__classPrivateFieldGet(this, _Button_callback, "f"))
|
||
__classPrivateFieldGet(this, _Button_callback, "f").call(this, __classPrivateFieldGet(this, _Button_state, "f"));
|
||
}
|
||
};
|
||
},{}],5:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Dropdown_container, _Dropdown_options, _Dropdown_open, _Dropdown_content, _Dropdown_callback;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Dropdown = void 0;
|
||
class Dropdown {
|
||
constructor(ID, options, callback) {
|
||
var _a;
|
||
_Dropdown_container.set(this, void 0);
|
||
_Dropdown_options.set(this, void 0);
|
||
_Dropdown_open.set(this, void 0);
|
||
_Dropdown_content.set(this, void 0);
|
||
_Dropdown_callback.set(this, void 0);
|
||
__classPrivateFieldSet(this, _Dropdown_container, document.getElementById(ID), "f");
|
||
__classPrivateFieldSet(this, _Dropdown_options, options, "f");
|
||
__classPrivateFieldSet(this, _Dropdown_callback, callback, "f");
|
||
this.close();
|
||
(_a = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", () => {
|
||
__classPrivateFieldGet(this, _Dropdown_open, "f") ? this.close() : this.open();
|
||
});
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null && __classPrivateFieldGet(this, _Dropdown_options, "f").length > 0)
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").innerHTML = __classPrivateFieldGet(this, _Dropdown_options, "f")[0];
|
||
}
|
||
open() {
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _Dropdown_open, true, "f");
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").classList.add("olympus-dropdown-open");
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").classList.remove("olympus-dropdown-closed");
|
||
__classPrivateFieldSet(this, _Dropdown_content, document.createElement("div"), "f");
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").classList.add("olympus-dropdown-content");
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.width = (__classPrivateFieldGet(this, _Dropdown_container, "f").offsetWidth - __classPrivateFieldGet(this, _Dropdown_container, "f").offsetHeight) + "px";
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.left = __classPrivateFieldGet(this, _Dropdown_container, "f").offsetLeft + "px";
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.top = __classPrivateFieldGet(this, _Dropdown_container, "f").offsetTop + __classPrivateFieldGet(this, _Dropdown_container, "f").offsetHeight + "px";
|
||
console.log(__classPrivateFieldGet(this, _Dropdown_container, "f"));
|
||
document.body.appendChild(__classPrivateFieldGet(this, _Dropdown_content, "f"));
|
||
var height = 2;
|
||
for (let optionID in __classPrivateFieldGet(this, _Dropdown_options, "f")) {
|
||
var node = document.createElement("div");
|
||
node.classList.add("olympus-dropdown-element");
|
||
node.appendChild(document.createTextNode(__classPrivateFieldGet(this, _Dropdown_options, "f")[optionID]));
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").appendChild(node);
|
||
height += node.offsetHeight + 2;
|
||
node.addEventListener('click', () => {
|
||
this.close();
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null)
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").innerHTML = __classPrivateFieldGet(this, _Dropdown_options, "f")[optionID];
|
||
if (__classPrivateFieldGet(this, _Dropdown_callback, "f") != null)
|
||
__classPrivateFieldGet(this, _Dropdown_callback, "f").call(this, __classPrivateFieldGet(this, _Dropdown_options, "f")[optionID]);
|
||
});
|
||
}
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.height = height + "px";
|
||
}
|
||
}
|
||
close() {
|
||
var _a, _b;
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _Dropdown_open, false, "f");
|
||
(_a = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _a === void 0 ? void 0 : _a.classList.remove("olympus-dropdown-open");
|
||
(_b = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _b === void 0 ? void 0 : _b.classList.add("olympus-dropdown-closed");
|
||
if (__classPrivateFieldGet(this, _Dropdown_content, "f") != null)
|
||
document.body.removeChild(__classPrivateFieldGet(this, _Dropdown_content, "f"));
|
||
}
|
||
}
|
||
}
|
||
exports.Dropdown = Dropdown;
|
||
_Dropdown_container = new WeakMap(), _Dropdown_options = new WeakMap(), _Dropdown_open = new WeakMap(), _Dropdown_content = new WeakMap(), _Dropdown_callback = new WeakMap();
|
||
},{}],6:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _SelectionScroll_instances, _SelectionScroll_container, _SelectionScroll_display, _SelectionScroll_onSwitch;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectionScroll = void 0;
|
||
const __1 = require("..");
|
||
class SelectionScroll {
|
||
constructor(id) {
|
||
var _a;
|
||
_SelectionScroll_instances.add(this);
|
||
_SelectionScroll_container.set(this, void 0);
|
||
_SelectionScroll_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _SelectionScroll_container, document.getElementById(id), "f");
|
||
__classPrivateFieldSet(this, _SelectionScroll_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null) {
|
||
(_a = __classPrivateFieldGet(this, _SelectionScroll_container, "f").querySelector("#coalition-switch")) === null || _a === void 0 ? void 0 : _a.addEventListener('change', (e) => __classPrivateFieldGet(this, _SelectionScroll_instances, "m", _SelectionScroll_onSwitch).call(this, e));
|
||
__classPrivateFieldSet(this, _SelectionScroll_display, __classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show(x, y, options, callback, showCoalition) {
|
||
/* Hide to remove buttons, if present */
|
||
this.hide();
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null && options.length >= 1) {
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display = __classPrivateFieldGet(this, _SelectionScroll_display, "f");
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.left = x - 110 + "px";
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.top = y - 110 + "px";
|
||
var scroll = __classPrivateFieldGet(this, _SelectionScroll_container, "f").querySelector(".olympus-selection-scroll");
|
||
if (scroll != null) {
|
||
for (let optionID in options) {
|
||
var node = document.createElement("div");
|
||
node.classList.add("olympus-selection-scroll-element");
|
||
if (typeof options[optionID] === 'string' || options[optionID] instanceof String) {
|
||
node.appendChild(document.createTextNode(options[optionID]));
|
||
node.addEventListener('click', () => callback(options[optionID]));
|
||
}
|
||
else {
|
||
node.appendChild(document.createTextNode(options[optionID].tooltip));
|
||
node.addEventListener('click', () => options[optionID].callback());
|
||
}
|
||
scroll.appendChild(node);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
hide() {
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display = "none";
|
||
var buttons = __classPrivateFieldGet(this, _SelectionScroll_container, "f").querySelectorAll(".olympus-selection-scroll-element");
|
||
var scroll = __classPrivateFieldGet(this, _SelectionScroll_container, "f").querySelector(".olympus-selection-scroll");
|
||
if (scroll != null) {
|
||
for (let child of buttons) {
|
||
scroll.removeChild(child);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
exports.SelectionScroll = SelectionScroll;
|
||
_SelectionScroll_container = new WeakMap(), _SelectionScroll_display = new WeakMap(), _SelectionScroll_instances = new WeakSet(), _SelectionScroll_onSwitch = function _SelectionScroll_onSwitch(e) {
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null) {
|
||
if (e.currentTarget.checked) {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionScroll_container, "f")).getPropertyValue("--red-coalition-color"));
|
||
(0, __1.setActiveCoalition)("red");
|
||
}
|
||
else {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionScroll_container, "f")).getPropertyValue("--blue-coalition-color"));
|
||
(0, __1.setActiveCoalition)("blue");
|
||
}
|
||
}
|
||
};
|
||
},{"..":9}],7:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _SelectionWheel_instances, _SelectionWheel_container, _SelectionWheel_display, _SelectionWheel_onSwitch;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectionWheel = void 0;
|
||
const __1 = require("..");
|
||
const utils_1 = require("../other/utils");
|
||
class SelectionWheel {
|
||
constructor(id) {
|
||
var _a;
|
||
_SelectionWheel_instances.add(this);
|
||
_SelectionWheel_container.set(this, void 0);
|
||
_SelectionWheel_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _SelectionWheel_container, document.getElementById(id), "f");
|
||
__classPrivateFieldSet(this, _SelectionWheel_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
(_a = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelector("#coalition-switch")) === null || _a === void 0 ? void 0 : _a.addEventListener('change', (e) => __classPrivateFieldGet(this, _SelectionWheel_instances, "m", _SelectionWheel_onSwitch).call(this, e));
|
||
__classPrivateFieldSet(this, _SelectionWheel_display, __classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show(x, y, options, showCoalition) {
|
||
/* Hide to remove buttons, if present */
|
||
this.hide();
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display = __classPrivateFieldGet(this, _SelectionWheel_display, "f");
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.left = x - 110 + "px";
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.top = y - 110 + "px";
|
||
var angularSize = 360 / options.length;
|
||
var r = 80;
|
||
/* Create the buttons */
|
||
for (let id in options) {
|
||
var button = document.createElement("div");
|
||
button.classList.add("selection-wheel-button");
|
||
button.style.left = x - 25 + "px";
|
||
button.style.top = y - 25 + "px";
|
||
button.addEventListener('click', (e) => options[id].callback(e));
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").appendChild(button);
|
||
var angle = parseInt(id) * angularSize;
|
||
button.style.opacity = "1";
|
||
button.style.left = x + r * Math.sin((0, utils_1.deg2rad)(angle)) - 25 + "px";
|
||
button.style.top = y - r * Math.cos((0, utils_1.deg2rad)(angle)) - 25 + "px";
|
||
var image = document.createElement("img");
|
||
image.classList.add("selection-wheel-image");
|
||
image.src = `images/buttons/${options[id].src}`;
|
||
image.title = options[id].tooltip;
|
||
if ('tint' in options[id]) {
|
||
button.style.setProperty('background-color', options[id].tint);
|
||
image.style.opacity = "0";
|
||
}
|
||
button.appendChild(image);
|
||
}
|
||
/* Hide the coalition switch if required */
|
||
var switchContainer = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelector("#coalition-switch-container");
|
||
if (showCoalition == false) {
|
||
switchContainer.style.display = "none";
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--neutral-coalition-color"));
|
||
}
|
||
else {
|
||
switchContainer.style.display = "block";
|
||
if ((0, __1.getActiveCoalition)() == "blue")
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--blue-coalition-color"));
|
||
else
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--red-coalition-color"));
|
||
}
|
||
}
|
||
}
|
||
hide() {
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display = "none";
|
||
var buttons = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelectorAll(".selection-wheel-button");
|
||
for (let child of buttons) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").removeChild(child);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
exports.SelectionWheel = SelectionWheel;
|
||
_SelectionWheel_container = new WeakMap(), _SelectionWheel_display = new WeakMap(), _SelectionWheel_instances = new WeakSet(), _SelectionWheel_onSwitch = function _SelectionWheel_onSwitch(e) {
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
if (e.currentTarget.checked) {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--red-coalition-color"));
|
||
(0, __1.setActiveCoalition)("red");
|
||
}
|
||
else {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--blue-coalition-color"));
|
||
(0, __1.setActiveCoalition)("blue");
|
||
}
|
||
}
|
||
};
|
||
},{"..":9,"../other/utils":14}],8:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.changeAltitude = exports.changeSpeed = exports.cloneUnit = exports.attackUnit = exports.spawnAircraft = exports.spawnGroundUnit = exports.spawnSmoke = exports.addDestination = exports.getDataFromDCS = void 0;
|
||
const __1 = require("..");
|
||
const utils_1 = require("../other/utils");
|
||
/* Edit here to change server address */
|
||
var RESTaddress = "http://localhost:30000/restdemo";
|
||
function getDataFromDCS(callback) {
|
||
/* Request the updated unit data from the server */
|
||
var xmlHttp = new XMLHttpRequest();
|
||
xmlHttp.open("GET", RESTaddress, true);
|
||
xmlHttp.onload = function (e) {
|
||
var data = JSON.parse(xmlHttp.responseText);
|
||
callback(data);
|
||
(0, __1.setConnected)(true);
|
||
};
|
||
xmlHttp.onerror = function () {
|
||
console.error("An error occurred during the XMLHttpRequest");
|
||
(0, __1.setConnected)(false);
|
||
};
|
||
xmlHttp.send(null);
|
||
}
|
||
exports.getDataFromDCS = getDataFromDCS;
|
||
function addDestination(ID, path) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => { };
|
||
var command = { "ID": ID, "path": path };
|
||
var data = { "setPath": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.addDestination = addDestination;
|
||
function spawnSmoke(color, latlng) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + color + " smoke at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "color": color, "location": latlng };
|
||
var data = { "smoke": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnSmoke = spawnSmoke;
|
||
function spawnGroundUnit(type, latlng, coalition) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + coalition + " " + type + " at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "type": type, "location": latlng, "coalition": coalition };
|
||
var data = { "spawnGround": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnGroundUnit = spawnGroundUnit;
|
||
function spawnAircraft(type, latlng, coalition, payloadName = null, airbaseName = null) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + coalition + " " + type + " at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "type": type, "location": latlng, "coalition": coalition, "payloadName": payloadName != null ? payloadName : "", "airbaseName": airbaseName != null ? airbaseName : "" };
|
||
var data = { "spawnAir": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnAircraft = spawnAircraft;
|
||
function attackUnit(ID, targetID) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Unit " + (0, __1.getUnitsManager)().getUnitByID(ID).unitName + " attack " + (0, __1.getUnitsManager)().getUnitByID(targetID).unitName);
|
||
}
|
||
};
|
||
var command = { "ID": ID, "targetID": targetID };
|
||
var data = { "attackUnit": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.attackUnit = attackUnit;
|
||
function cloneUnit(ID) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Unit " + (0, __1.getUnitsManager)().getUnitByID(ID).unitName + " cloned");
|
||
}
|
||
};
|
||
var command = { "ID": ID };
|
||
var data = { "cloneUnit": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.cloneUnit = cloneUnit;
|
||
function changeSpeed(ID, speedChange) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log((0, __1.getUnitsManager)().getUnitByID(ID).unitName + " speed change request: " + speedChange);
|
||
}
|
||
};
|
||
var command = { "ID": ID, "change": speedChange };
|
||
var data = { "changeSpeed": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.changeSpeed = changeSpeed;
|
||
function changeAltitude(ID, altitudeChange) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log((0, __1.getUnitsManager)().getUnitByID(ID).unitName + " altitude change request: " + altitudeChange);
|
||
}
|
||
};
|
||
var command = { "ID": ID, "change": altitudeChange };
|
||
var data = { "changeAltitude": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.changeAltitude = changeAltitude;
|
||
},{"..":9,"../other/utils":14}],9:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getVisibilitySettings = exports.getConnected = exports.setConnected = exports.getActiveCoalition = exports.setActiveCoalition = exports.getUnitInfoPanel = exports.getUnitsManager = exports.getSelectionScroll = exports.getSelectionWheel = exports.getMap = exports.update = void 0;
|
||
const map_1 = require("./map/map");
|
||
const dcs_1 = require("./dcs/dcs");
|
||
const selectionwheel_1 = require("./controls/selectionwheel");
|
||
const unitsmanager_1 = require("./units/unitsmanager");
|
||
const unitinfopanel_1 = require("./panels/unitinfopanel");
|
||
const selectionscroll_1 = require("./controls/selectionscroll");
|
||
const dropdown_1 = require("./controls/dropdown");
|
||
const connectionstatuspanel_1 = require("./panels/connectionstatuspanel");
|
||
const button_1 = require("./controls/button");
|
||
const missiondata_1 = require("./missiondata/missiondata");
|
||
/* TODO: should this be a class? */
|
||
var map;
|
||
var selectionWheel;
|
||
var selectionScroll;
|
||
var unitsManager;
|
||
var unitInfoPanel;
|
||
var activeCoalition;
|
||
var scenarioDropdown;
|
||
var mapSourceDropdown;
|
||
var connected;
|
||
var connectionStatusPanel;
|
||
var missionData;
|
||
var slowButton;
|
||
var fastButton;
|
||
var climbButton;
|
||
var descendButton;
|
||
var userVisibilityButton;
|
||
var aiVisibilityButton;
|
||
var weaponVisibilityButton;
|
||
var deadVisibilityButton;
|
||
function setup() {
|
||
/* Initialize */
|
||
map = new map_1.Map('map-container');
|
||
selectionWheel = new selectionwheel_1.SelectionWheel("selection-wheel");
|
||
selectionScroll = new selectionscroll_1.SelectionScroll("selection-scroll");
|
||
unitsManager = new unitsmanager_1.UnitsManager();
|
||
unitInfoPanel = new unitinfopanel_1.UnitInfoPanel("unit-info-panel");
|
||
scenarioDropdown = new dropdown_1.Dropdown("scenario-dropdown", ["Caucasus", "Syria", "Marianas", "Nevada", "South Atlantic", "The channel"], () => { });
|
||
mapSourceDropdown = new dropdown_1.Dropdown("map-source-dropdown", map.getLayers(), (option) => map.setLayer(option));
|
||
connectionStatusPanel = new connectionstatuspanel_1.ConnectionStatusPanel("connection-status-panel");
|
||
missionData = new missiondata_1.MissionData();
|
||
/* Unit control buttons */
|
||
slowButton = new button_1.Button("slow-button", ["images/buttons/slow.svg"], () => { getUnitsManager().selectedUnitsChangeSpeed("slow"); });
|
||
fastButton = new button_1.Button("fast-button", ["images/buttons/fast.svg"], () => { getUnitsManager().selectedUnitsChangeSpeed("fast"); });
|
||
climbButton = new button_1.Button("climb-button", ["images/buttons/climb.svg"], () => { getUnitsManager().selectedUnitsChangeAltitude("climb"); });
|
||
descendButton = new button_1.Button("descend-button", ["images/buttons/descend.svg"], () => { getUnitsManager().selectedUnitsChangeAltitude("descend"); });
|
||
/* Visibility buttons */
|
||
userVisibilityButton = new button_1.Button("user-visibility-button", ["images/buttons/user-full.svg", "images/buttons/user-partial.svg", "images/buttons/user-none.svg", "images/buttons/user-hidden.svg"], () => { });
|
||
aiVisibilityButton = new button_1.Button("ai-visibility-button", ["images/buttons/ai-full.svg", "images/buttons/ai-partial.svg", "images/buttons/ai-none.svg", "images/buttons/ai-hidden.svg"], () => { });
|
||
weaponVisibilityButton = new button_1.Button("weapon-visibility-button", ["images/buttons/weapon-partial.svg", "images/buttons/weapon-none.svg", "images/buttons/weapon-hidden.svg"], () => { });
|
||
deadVisibilityButton = new button_1.Button("dead-visibility-button", ["images/buttons/dead.svg", "images/buttons/dead-hidden.svg"], () => { });
|
||
aiVisibilityButton.setState(1);
|
||
weaponVisibilityButton.setState(1);
|
||
deadVisibilityButton.setState(1);
|
||
/* Default values */
|
||
activeCoalition = "blue";
|
||
connected = false;
|
||
requestUpdate();
|
||
}
|
||
function requestUpdate() {
|
||
(0, dcs_1.getDataFromDCS)(update);
|
||
/* Main update rate = 250ms is minimum time, equal to server update time. */
|
||
setTimeout(() => requestUpdate(), getConnected() ? 250 : 1000);
|
||
connectionStatusPanel.update(getConnected());
|
||
}
|
||
function update(data) {
|
||
unitsManager.update(data);
|
||
missionData.update(data);
|
||
}
|
||
exports.update = update;
|
||
function getMap() {
|
||
return map;
|
||
}
|
||
exports.getMap = getMap;
|
||
function getSelectionWheel() {
|
||
return selectionWheel;
|
||
}
|
||
exports.getSelectionWheel = getSelectionWheel;
|
||
function getSelectionScroll() {
|
||
return selectionScroll;
|
||
}
|
||
exports.getSelectionScroll = getSelectionScroll;
|
||
function getUnitsManager() {
|
||
return unitsManager;
|
||
}
|
||
exports.getUnitsManager = getUnitsManager;
|
||
function getUnitInfoPanel() {
|
||
return unitInfoPanel;
|
||
}
|
||
exports.getUnitInfoPanel = getUnitInfoPanel;
|
||
function setActiveCoalition(newActiveCoalition) {
|
||
activeCoalition = newActiveCoalition;
|
||
}
|
||
exports.setActiveCoalition = setActiveCoalition;
|
||
function getActiveCoalition() {
|
||
return activeCoalition;
|
||
}
|
||
exports.getActiveCoalition = getActiveCoalition;
|
||
function setConnected(newConnected) {
|
||
connected = newConnected;
|
||
}
|
||
exports.setConnected = setConnected;
|
||
function getConnected() {
|
||
return connected;
|
||
}
|
||
exports.getConnected = getConnected;
|
||
function getVisibilitySettings() {
|
||
var visibility = {
|
||
user: "",
|
||
ai: "",
|
||
weapon: "",
|
||
dead: ""
|
||
};
|
||
switch (userVisibilityButton.getState()) {
|
||
case 0:
|
||
visibility.user = "full";
|
||
break;
|
||
case 1:
|
||
visibility.user = "partial";
|
||
break;
|
||
case 2:
|
||
visibility.user = "none";
|
||
break;
|
||
case 3:
|
||
visibility.user = "hidden";
|
||
break;
|
||
}
|
||
switch (aiVisibilityButton.getState()) {
|
||
case 0:
|
||
visibility.ai = "full";
|
||
break;
|
||
case 1:
|
||
visibility.ai = "partial";
|
||
break;
|
||
case 2:
|
||
visibility.ai = "none";
|
||
break;
|
||
case 3:
|
||
visibility.ai = "hidden";
|
||
break;
|
||
}
|
||
switch (weaponVisibilityButton.getState()) {
|
||
case 0:
|
||
visibility.weapon = "partial";
|
||
break;
|
||
case 1:
|
||
visibility.weapon = "none";
|
||
break;
|
||
case 2:
|
||
visibility.weapon = "hidden";
|
||
break;
|
||
}
|
||
switch (deadVisibilityButton.getState()) {
|
||
case 0:
|
||
visibility.dead = "none";
|
||
break;
|
||
case 1:
|
||
visibility.dead = "hidden";
|
||
break;
|
||
}
|
||
return visibility;
|
||
}
|
||
exports.getVisibilitySettings = getVisibilitySettings;
|
||
window.onload = setup;
|
||
},{"./controls/button":4,"./controls/dropdown":5,"./controls/selectionscroll":6,"./controls/selectionwheel":7,"./dcs/dcs":8,"./map/map":11,"./missiondata/missiondata":13,"./panels/connectionstatuspanel":15,"./panels/unitinfopanel":16,"./units/unitsmanager":21}],10:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.BoxSelect = void 0;
|
||
const leaflet_1 = require("leaflet");
|
||
const leaflet_2 = require("leaflet");
|
||
const leaflet_3 = require("leaflet");
|
||
const leaflet_4 = require("leaflet");
|
||
const leaflet_5 = require("leaflet");
|
||
const leaflet_6 = require("leaflet");
|
||
exports.BoxSelect = leaflet_1.Handler.extend({
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
this._container = map.getContainer();
|
||
this._pane = map.getPanes().overlayPane;
|
||
this._resetStateTimeout = 0;
|
||
map.on('unload', this._destroy, this);
|
||
},
|
||
addHooks: function () {
|
||
leaflet_4.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
removeHooks: function () {
|
||
leaflet_4.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
moved: function () {
|
||
return this._moved;
|
||
},
|
||
_destroy: function () {
|
||
leaflet_3.DomUtil.remove(this._pane);
|
||
delete this._pane;
|
||
},
|
||
_resetState: function () {
|
||
this._resetStateTimeout = 0;
|
||
this._moved = false;
|
||
},
|
||
_clearDeferredResetState: function () {
|
||
if (this._resetStateTimeout !== 0) {
|
||
clearTimeout(this._resetStateTimeout);
|
||
this._resetStateTimeout = 0;
|
||
}
|
||
},
|
||
_onMouseDown: function (e) {
|
||
if (((e.which !== 3) && (e.button !== 2))) {
|
||
return false;
|
||
}
|
||
// Clear the deferred resetState if it hasn't executed yet, otherwise it
|
||
// will interrupt the interaction and orphan a box element in the container.
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
leaflet_3.DomUtil.disableTextSelection();
|
||
leaflet_3.DomUtil.disableImageDrag();
|
||
this._startPoint = this._map.mouseEventToContainerPoint(e);
|
||
//@ts-ignore
|
||
leaflet_4.DomEvent.on(document, {
|
||
contextmenu: leaflet_4.DomEvent.stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
_onMouseMove: function (e) {
|
||
if (!this._moved) {
|
||
this._moved = true;
|
||
this._box = leaflet_3.DomUtil.create('div', 'leaflet-zoom-box', this._container);
|
||
leaflet_3.DomUtil.addClass(this._container, 'leaflet-crosshair');
|
||
this._map.fire('boxzoomstart');
|
||
}
|
||
this._point = this._map.mouseEventToContainerPoint(e);
|
||
var bounds = new leaflet_6.Bounds(this._point, this._startPoint), size = bounds.getSize();
|
||
if (bounds.min != undefined)
|
||
leaflet_3.DomUtil.setPosition(this._box, bounds.min);
|
||
this._box.style.width = size.x + 'px';
|
||
this._box.style.height = size.y + 'px';
|
||
},
|
||
_finish: function () {
|
||
if (this._moved) {
|
||
leaflet_3.DomUtil.remove(this._box);
|
||
leaflet_3.DomUtil.removeClass(this._container, 'leaflet-crosshair');
|
||
}
|
||
leaflet_3.DomUtil.enableTextSelection();
|
||
leaflet_3.DomUtil.enableImageDrag();
|
||
//@ts-ignore
|
||
leaflet_4.DomEvent.off(document, {
|
||
contextmenu: leaflet_4.DomEvent.stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
_onMouseUp: function (e) {
|
||
if ((e.which !== 3) && (e.button !== 2)) {
|
||
return;
|
||
}
|
||
this._finish();
|
||
if (!this._moved) {
|
||
return;
|
||
}
|
||
// Postpone to next JS tick so internal click event handling
|
||
// still see it as "moved".
|
||
setTimeout(leaflet_2.Util.bind(this._resetState, this), 0);
|
||
var bounds = new leaflet_5.LatLngBounds(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point));
|
||
this._map.fire('selectionend', { selectionBounds: bounds });
|
||
},
|
||
_onKeyDown: function (e) {
|
||
if (e.keyCode === 27) {
|
||
this._finish();
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
}
|
||
}
|
||
});
|
||
},{"leaflet":1}],11:[function(require,module,exports){
|
||
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
}) : function(o, v) {
|
||
o["default"] = v;
|
||
});
|
||
var __importStar = (this && this.__importStar) || function (mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
__setModuleDefault(result, mod);
|
||
return result;
|
||
};
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Map_instances, _Map_state, _Map_layer, _Map_preventRightClick, _Map_rightClickTimer, _Map_onClick, _Map_onDoubleClick, _Map_onContextMenu, _Map_onSelectionEnd, _Map_groundUnitSpawnMenu, _Map_smokeSpawnMenu, _Map_explosionSpawnMenu, _Map_aircraftSpawnMenu, _Map_selectAircraft, _Map_unitSelectPayload, _Map_selectGroundUnit;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Map = void 0;
|
||
const L = __importStar(require("leaflet"));
|
||
const __1 = require("..");
|
||
const dcs_1 = require("../dcs/dcs");
|
||
const payloadNames_1 = require("../units/payloadNames");
|
||
const unitTypes_1 = require("../units/unitTypes");
|
||
const boxselect_1 = require("./boxselect");
|
||
L.Map.addInitHook('addHandler', 'boxSelect', boxselect_1.BoxSelect);
|
||
class Map extends L.Map {
|
||
constructor(ID) {
|
||
/* Init the leaflet map */
|
||
//@ts-ignore
|
||
super(ID, { doubleClickZoom: false, zoomControl: false, boxZoom: false, boxSelect: true });
|
||
_Map_instances.add(this);
|
||
_Map_state.set(this, void 0);
|
||
_Map_layer.set(this, void 0);
|
||
_Map_preventRightClick.set(this, false);
|
||
_Map_rightClickTimer.set(this, 0);
|
||
this.setView([37.23, -115.8], 12);
|
||
this.setLayer("ArcGIS Satellite");
|
||
/* Init the state machine */
|
||
__classPrivateFieldSet(this, _Map_state, "IDLE", "f");
|
||
/* Register event handles */
|
||
this.on("click", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onClick).call(this, e));
|
||
this.on("dblclick", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onDoubleClick).call(this, e));
|
||
this.on("contextmenu", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onContextMenu).call(this, e));
|
||
this.on('selectionend', (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onSelectionEnd).call(this, e));
|
||
}
|
||
setLayer(layerName) {
|
||
var _a;
|
||
if (__classPrivateFieldGet(this, _Map_layer, "f") != null) {
|
||
this.removeLayer(__classPrivateFieldGet(this, _Map_layer, "f"));
|
||
}
|
||
if (layerName == "ArcGIS Satellite") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer("https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", {
|
||
attribution: "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"
|
||
}), "f");
|
||
}
|
||
else if (layerName == "USGS Topo") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', {
|
||
maxZoom: 20,
|
||
attribution: 'Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "OpenStreetMap Mapnik") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||
maxZoom: 19,
|
||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "OPENVKarte") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', {
|
||
maxZoom: 18,
|
||
attribution: 'Map <a href="https://memomaps.de/">memomaps.de</a> <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, map data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "Esri.DeLorme") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer/tile/{z}/{y}/{x}', {
|
||
attribution: 'Tiles © Esri — Copyright: ©2012 DeLorme',
|
||
minZoom: 1,
|
||
maxZoom: 11
|
||
}), "f");
|
||
}
|
||
else if (layerName == "CyclOSM") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', {
|
||
maxZoom: 20,
|
||
attribution: '<a href="https://github.com/cyclosm/cyclosm-cartocss-style/releases" title="CyclOSM - Open Bicycle render">CyclOSM</a> | Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
(_a = __classPrivateFieldGet(this, _Map_layer, "f")) === null || _a === void 0 ? void 0 : _a.addTo(this);
|
||
}
|
||
getLayers() {
|
||
return ["ArcGIS Satellite", "USGS Topo", "OpenStreetMap Mapnik", "OPENVKarte", "Esri.DeLorme", "CyclOSM"];
|
||
}
|
||
/* State machine */
|
||
setState(state) {
|
||
__classPrivateFieldSet(this, _Map_state, state, "f");
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") === "IDLE") {
|
||
L.DomUtil.removeClass(this.getContainer(), 'crosshair-cursor-enabled');
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "MOVE_UNIT") {
|
||
L.DomUtil.addClass(this.getContainer(), 'crosshair-cursor-enabled');
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "ATTACK") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "FORMATION") {
|
||
}
|
||
}
|
||
getState() {
|
||
return __classPrivateFieldGet(this, _Map_state, "f");
|
||
}
|
||
/* Selection wheel */
|
||
showSelectionWheel(e, options, showCoalition) {
|
||
var x = e.x;
|
||
var y = e.y;
|
||
(0, __1.getSelectionWheel)().show(x, y, options, showCoalition);
|
||
}
|
||
hideSelectionWheel() {
|
||
(0, __1.getSelectionWheel)().hide();
|
||
}
|
||
/* Selection scroll */
|
||
showSelectionScroll(e, options, callback, showCoalition = false) {
|
||
var x = e.x;
|
||
var y = e.y;
|
||
(0, __1.getSelectionScroll)().show(x, y, options, callback, showCoalition);
|
||
}
|
||
hideSelectionScroll() {
|
||
(0, __1.getSelectionScroll)().hide();
|
||
}
|
||
/* Spawn from air base */
|
||
spawnFromAirbase(e) {
|
||
__classPrivateFieldGet(this, _Map_instances, "m", _Map_aircraftSpawnMenu).call(this, e);
|
||
}
|
||
}
|
||
exports.Map = Map;
|
||
_Map_state = new WeakMap(), _Map_layer = new WeakMap(), _Map_preventRightClick = new WeakMap(), _Map_rightClickTimer = new WeakMap(), _Map_instances = new WeakSet(), _Map_onClick = function _Map_onClick(e) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") === "IDLE") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "MOVE_UNIT") {
|
||
if (!e.originalEvent.ctrlKey) {
|
||
(0, __1.getUnitsManager)().clearDestinations();
|
||
}
|
||
(0, __1.getUnitsManager)().addDestination(e.latlng);
|
||
}
|
||
}, _Map_onDoubleClick = function _Map_onDoubleClick(e) {
|
||
var spawnEvent = { x: e.originalEvent.x, y: e.originalEvent.y, latlng: e.latlng, airbaseName: null, coalitionID: null };
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") == "IDLE") {
|
||
var options = [
|
||
{ "tooltip": "Spawn air unit", "src": "spawnAir.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_aircraftSpawnMenu).call(this, spawnEvent) },
|
||
{ "tooltip": "Spawn ground unit", "src": "spawnGround.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_groundUnitSpawnMenu).call(this, spawnEvent) },
|
||
{ "tooltip": "Smoke", "src": "spawnSmoke.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_smokeSpawnMenu).call(this, spawnEvent) },
|
||
//{ "tooltip": "Explosion", "src": "spawnExplosion.png", "callback": () => this.#explosionSpawnMenu(e) }
|
||
];
|
||
this.showSelectionScroll(spawnEvent, options, () => { }, true);
|
||
}
|
||
}, _Map_onContextMenu = function _Map_onContextMenu(e) {
|
||
__classPrivateFieldSet(this, _Map_rightClickTimer, setTimeout(() => {
|
||
if (!__classPrivateFieldGet(this, _Map_preventRightClick, "f")) {
|
||
this.setState("IDLE");
|
||
(0, __1.getUnitsManager)().deselectAllUnits();
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
}
|
||
__classPrivateFieldSet(this, _Map_preventRightClick, false, "f");
|
||
}, 200), "f");
|
||
}, _Map_onSelectionEnd = function _Map_onSelectionEnd(e) {
|
||
clearTimeout(__classPrivateFieldGet(this, _Map_rightClickTimer, "f"));
|
||
__classPrivateFieldSet(this, _Map_preventRightClick, true, "f");
|
||
(0, __1.getUnitsManager)().selectFromBounds(e.selectionBounds);
|
||
}, _Map_groundUnitSpawnMenu = function _Map_groundUnitSpawnMenu(e) {
|
||
var options = [
|
||
{ 'coalition': true, 'tooltip': 'Howitzer', 'src': 'spawnHowitzer.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "Howitzers") },
|
||
{ 'coalition': true, 'tooltip': 'SAM', 'src': 'spawnSAM.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "SAM") },
|
||
{ 'coalition': true, 'tooltip': 'IFV', 'src': 'spawnIFV.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "IFV") },
|
||
{ 'coalition': true, 'tooltip': 'Tank', 'src': 'spawnTank.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "Tanks") },
|
||
{ 'coalition': true, 'tooltip': 'MLRS', 'src': 'spawnMLRS.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "MLRS") },
|
||
{ 'coalition': true, 'tooltip': 'Radar', 'src': 'spawnRadar.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "Radar") },
|
||
{ 'coalition': true, 'tooltip': 'Unarmed', 'src': 'spawnUnarmed.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectGroundUnit).call(this, e, "Unarmed") }
|
||
];
|
||
this.showSelectionScroll(e, options, () => { }, true);
|
||
}, _Map_smokeSpawnMenu = function _Map_smokeSpawnMenu(e) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = [
|
||
{ 'tooltip': 'Red smoke', 'src': 'spawnSmoke.png', 'callback': () => { this.hideSelectionWheel(); this.hideSelectionScroll(); (0, dcs_1.spawnSmoke)('red', e.latlng); }, 'tint': 'red' },
|
||
{ 'tooltip': 'White smoke', 'src': 'spawnSmoke.png', 'callback': () => { this.hideSelectionWheel(); this.hideSelectionScroll(); (0, dcs_1.spawnSmoke)('white', e.latlng); }, 'tint': 'white' },
|
||
{ 'tooltip': 'Blue smoke', 'src': 'spawnSmoke.png', 'callback': () => { this.hideSelectionWheel(); this.hideSelectionScroll(); (0, dcs_1.spawnSmoke)('blue', e.latlng); }, 'tint': 'blue' },
|
||
{ 'tooltip': 'Green smoke', 'src': 'spawnSmoke.png', 'callback': () => { this.hideSelectionWheel(); this.hideSelectionScroll(); (0, dcs_1.spawnSmoke)('green', e.latlng); }, 'tint': 'green' },
|
||
{ 'tooltip': 'Orange smoke', 'src': 'spawnSmoke.png', 'callback': () => { this.hideSelectionWheel(); this.hideSelectionScroll(); (0, dcs_1.spawnSmoke)('orange', e.latlng); }, 'tint': 'orange' },
|
||
];
|
||
this.showSelectionScroll(e, options, () => { }, true);
|
||
}, _Map_explosionSpawnMenu = function _Map_explosionSpawnMenu(e) {
|
||
}, _Map_aircraftSpawnMenu = function _Map_aircraftSpawnMenu(e) {
|
||
var options = [
|
||
{ 'coalition': true, 'tooltip': 'CAP', 'src': 'spawnCAP.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "CAP") },
|
||
{ 'coalition': true, 'tooltip': 'CAS', 'src': 'spawnCAS.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "CAS") },
|
||
{ 'coalition': true, 'tooltip': 'Tanker', 'src': 'spawnTanker.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "tanker") },
|
||
{ 'coalition': true, 'tooltip': 'AWACS', 'src': 'spawnAWACS.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "awacs") },
|
||
{ 'coalition': true, 'tooltip': 'Strike', 'src': 'spawnStrike.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "strike") },
|
||
{ 'coalition': true, 'tooltip': 'Drone', 'src': 'spawnDrone.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "drone") },
|
||
{ 'coalition': true, 'tooltip': 'Transport', 'src': 'spawnTransport.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "transport") },
|
||
];
|
||
this.showSelectionScroll(e, options, () => { }, true);
|
||
}, _Map_selectAircraft = function _Map_selectAircraft(e, group) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = unitTypes_1.unitTypes.air[group];
|
||
if (options != undefined)
|
||
options.sort();
|
||
else
|
||
options = [];
|
||
this.showSelectionScroll(e, options, (unitType) => {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
__classPrivateFieldGet(this, _Map_instances, "m", _Map_unitSelectPayload).call(this, e, unitType);
|
||
});
|
||
}, _Map_unitSelectPayload = function _Map_unitSelectPayload(e, unitType) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = [];
|
||
options = payloadNames_1.payloadNames[unitType];
|
||
if (options != undefined && options.length > 0) {
|
||
options.sort();
|
||
this.showSelectionScroll({ x: e.x, y: e.y, latlng: e.latlng }, options, (payloadName) => {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
(0, dcs_1.spawnAircraft)(unitType, e.latlng, (0, __1.getActiveCoalition)(), payloadName, e.airbaseName);
|
||
});
|
||
}
|
||
else {
|
||
(0, dcs_1.spawnAircraft)(unitType, e.latlng, (0, __1.getActiveCoalition)());
|
||
}
|
||
}, _Map_selectGroundUnit = function _Map_selectGroundUnit(e, group) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = unitTypes_1.unitTypes.vehicles[group];
|
||
options.sort();
|
||
this.showSelectionScroll(e, options, (unitType) => {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
(0, dcs_1.spawnGroundUnit)(unitType, e.latlng, (0, __1.getActiveCoalition)());
|
||
});
|
||
};
|
||
},{"..":9,"../dcs/dcs":8,"../units/payloadNames":17,"../units/unitTypes":19,"./boxselect":10,"leaflet":1}],12:[function(require,module,exports){
|
||
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
}) : function(o, v) {
|
||
o["default"] = v;
|
||
});
|
||
var __importStar = (this && this.__importStar) || function (mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
__setModuleDefault(result, mod);
|
||
return result;
|
||
};
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _AirbaseMarker_name, _AirbaseMarker_coalitionID;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.AirbaseMarker = void 0;
|
||
const L = __importStar(require("leaflet"));
|
||
class AirbaseMarker extends L.Marker {
|
||
constructor(options) {
|
||
super(options.position, { riseOnHover: true });
|
||
_AirbaseMarker_name.set(this, "");
|
||
_AirbaseMarker_coalitionID.set(this, -1);
|
||
__classPrivateFieldSet(this, _AirbaseMarker_name, options.name, "f");
|
||
var icon = new L.DivIcon({
|
||
html: `<table class="airbasemarker-container" id="container">
|
||
<tr>
|
||
<td>
|
||
<img class="airbasemarker-icon" id="icon" src="${options.src}">
|
||
<div class="airbasemarker-name" id="name">${options.name}</div>
|
||
</td>
|
||
</tr>
|
||
</table>`,
|
||
className: 'airbase-marker'
|
||
}); // Set the marker, className must be set to avoid white square
|
||
this.setIcon(icon);
|
||
}
|
||
setCoalitionID(coalitionID) {
|
||
__classPrivateFieldSet(this, _AirbaseMarker_coalitionID, coalitionID, "f");
|
||
var element = this.getElement();
|
||
if (element != null) {
|
||
var img = element.querySelector("#icon");
|
||
if (img != null) {
|
||
img.classList.remove("airbasemarker-icon-blue");
|
||
img.classList.remove("airbasemarker-icon-red");
|
||
if (__classPrivateFieldGet(this, _AirbaseMarker_coalitionID, "f") == 2) {
|
||
img.classList.add("airbasemarker-icon-blue");
|
||
}
|
||
else if (__classPrivateFieldGet(this, _AirbaseMarker_coalitionID, "f") == 1) {
|
||
img.classList.add("airbasemarker-icon-red");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
getName() {
|
||
return __classPrivateFieldGet(this, _AirbaseMarker_name, "f");
|
||
}
|
||
getCoalitionID() {
|
||
return __classPrivateFieldGet(this, _AirbaseMarker_coalitionID, "f");
|
||
}
|
||
}
|
||
exports.AirbaseMarker = AirbaseMarker;
|
||
_AirbaseMarker_name = new WeakMap(), _AirbaseMarker_coalitionID = new WeakMap();
|
||
},{"leaflet":1}],13:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _MissionData_instances, _MissionData_airbases, _MissionData_airbasesMarkers, _MissionData_drawAirbases, _MissionData_onAirbaseClick;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.MissionData = void 0;
|
||
const leaflet_1 = require("leaflet");
|
||
const __1 = require("..");
|
||
const airbasemarker_1 = require("./airbasemarker");
|
||
class MissionData {
|
||
constructor() {
|
||
_MissionData_instances.add(this);
|
||
//#bullseye : any; //TODO declare interface
|
||
//#bullseyeMarker : Marker;
|
||
_MissionData_airbases.set(this, void 0); //TODO declare interface
|
||
_MissionData_airbasesMarkers.set(this, void 0);
|
||
//this.#bullseye = undefined;
|
||
//this.#bullseyeMarker = undefined;
|
||
__classPrivateFieldSet(this, _MissionData_airbasesMarkers, {}, "f");
|
||
}
|
||
update(data) {
|
||
//this.#bullseye = data.missionData.bullseye;
|
||
__classPrivateFieldSet(this, _MissionData_airbases, data.airbases, "f");
|
||
//this.#drawBullseye();
|
||
__classPrivateFieldGet(this, _MissionData_instances, "m", _MissionData_drawAirbases).call(this);
|
||
}
|
||
}
|
||
exports.MissionData = MissionData;
|
||
_MissionData_airbases = new WeakMap(), _MissionData_airbasesMarkers = new WeakMap(), _MissionData_instances = new WeakSet(), _MissionData_drawAirbases = function _MissionData_drawAirbases() {
|
||
for (let idx in __classPrivateFieldGet(this, _MissionData_airbases, "f")) {
|
||
var airbase = __classPrivateFieldGet(this, _MissionData_airbases, "f")[idx];
|
||
if (__classPrivateFieldGet(this, _MissionData_airbasesMarkers, "f")[idx] === undefined) {
|
||
__classPrivateFieldGet(this, _MissionData_airbasesMarkers, "f")[idx] = new airbasemarker_1.AirbaseMarker({
|
||
position: new leaflet_1.LatLng(airbase.lat, airbase.lng),
|
||
name: airbase.callsign,
|
||
src: "images/airbase.png"
|
||
}).addTo((0, __1.getMap)());
|
||
__classPrivateFieldGet(this, _MissionData_airbasesMarkers, "f")[idx].on('click', (e) => __classPrivateFieldGet(this, _MissionData_instances, "m", _MissionData_onAirbaseClick).call(this, e));
|
||
}
|
||
else {
|
||
__classPrivateFieldGet(this, _MissionData_airbasesMarkers, "f")[idx].setCoalitionID(airbase.coalition);
|
||
}
|
||
}
|
||
}, _MissionData_onAirbaseClick = function _MissionData_onAirbaseClick(e) {
|
||
var spawnEvent = { x: e.originalEvent.x, y: e.originalEvent.y, latlng: e.latlng, airbaseName: e.sourceTarget.getName(), coalitionID: e.sourceTarget.getCoalitionID() };
|
||
(0, __1.getMap)().spawnFromAirbase(spawnEvent);
|
||
};
|
||
},{"..":9,"./airbasemarker":12,"leaflet":1}],14:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.rad2deg = exports.deg2rad = exports.ConvertDDToDMS = exports.bearing = exports.distance = void 0;
|
||
function distance(lat1, lon1, lat2, lon2) {
|
||
const R = 6371e3; // metres
|
||
const φ1 = deg2rad(lat1); // φ, λ in radians
|
||
const φ2 = deg2rad(lat2);
|
||
const Δφ = deg2rad(lat2 - lat1);
|
||
const Δλ = deg2rad(lon2 - lon1);
|
||
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
|
||
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||
const d = R * c; // in metres
|
||
return d;
|
||
}
|
||
exports.distance = distance;
|
||
function bearing(lat1, lon1, lat2, lon2) {
|
||
const φ1 = deg2rad(lat1); // φ, λ in radians
|
||
const φ2 = deg2rad(lat2);
|
||
const λ1 = deg2rad(lon1); // φ, λ in radians
|
||
const λ2 = deg2rad(lon2);
|
||
const y = Math.sin(λ2 - λ1) * Math.cos(φ2);
|
||
const x = Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(λ2 - λ1);
|
||
const θ = Math.atan2(y, x);
|
||
const brng = (rad2deg(θ) + 360) % 360; // in degrees
|
||
return brng;
|
||
}
|
||
exports.bearing = bearing;
|
||
const zeroPad = function (num, places) {
|
||
var string = String(num);
|
||
while (string.length < places) {
|
||
string += "0";
|
||
}
|
||
return string;
|
||
};
|
||
function ConvertDDToDMS(D, lng) {
|
||
var dir = D < 0 ? (lng ? "W" : "S") : lng ? "E" : "N";
|
||
var deg = 0 | (D < 0 ? (D = -D) : D);
|
||
var min = 0 | (((D += 1e-9) % 1) * 60);
|
||
var sec = (0 | (((D * 60) % 1) * 6000)) / 100;
|
||
var dec = Math.round((sec - Math.floor(sec)) * 100);
|
||
var sec = Math.floor(sec);
|
||
if (lng)
|
||
return dir + zeroPad(deg, 3) + "°" + zeroPad(min, 2) + "'" + zeroPad(sec, 2) + "." + zeroPad(dec, 2) + "\"";
|
||
else
|
||
return dir + zeroPad(deg, 2) + "°" + zeroPad(min, 2) + "'" + zeroPad(sec, 2) + "." + zeroPad(dec, 2) + "\"";
|
||
}
|
||
exports.ConvertDDToDMS = ConvertDDToDMS;
|
||
function deg2rad(deg) {
|
||
var pi = Math.PI;
|
||
return deg * (pi / 180);
|
||
}
|
||
exports.deg2rad = deg2rad;
|
||
function rad2deg(rad) {
|
||
var pi = Math.PI;
|
||
return rad / (pi / 180);
|
||
}
|
||
exports.rad2deg = rad2deg;
|
||
},{}],15:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _ConnectionStatusPanel_element;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.ConnectionStatusPanel = void 0;
|
||
class ConnectionStatusPanel {
|
||
constructor(ID) {
|
||
_ConnectionStatusPanel_element.set(this, void 0);
|
||
__classPrivateFieldSet(this, _ConnectionStatusPanel_element, document.getElementById(ID), "f");
|
||
}
|
||
update(connected) {
|
||
if (__classPrivateFieldGet(this, _ConnectionStatusPanel_element, "f") != null) {
|
||
var div = __classPrivateFieldGet(this, _ConnectionStatusPanel_element, "f").querySelector("#status-string");
|
||
if (div != null) {
|
||
if (connected) {
|
||
div.innerHTML = "Connected";
|
||
div.classList.add("olympus-status-connected");
|
||
div.classList.remove("olympus-status-disconnected");
|
||
}
|
||
else {
|
||
div.innerHTML = "Disconnected";
|
||
div.classList.add("olympus-status-disconnected");
|
||
div.classList.remove("olympus-status-connected");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
exports.ConnectionStatusPanel = ConnectionStatusPanel;
|
||
_ConnectionStatusPanel_element = new WeakMap();
|
||
},{}],16:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitInfoPanel_element, _UnitInfoPanel_display;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.UnitInfoPanel = void 0;
|
||
const utils_1 = require("../other/utils");
|
||
class UnitInfoPanel {
|
||
constructor(ID) {
|
||
_UnitInfoPanel_element.set(this, void 0);
|
||
_UnitInfoPanel_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_element, document.getElementById(ID), "f");
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _UnitInfoPanel_element, "f") != null) {
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_display, __classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show() {
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display = __classPrivateFieldGet(this, _UnitInfoPanel_display, "f");
|
||
}
|
||
hide() {
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display = "none";
|
||
}
|
||
update(unit) {
|
||
var _a, _b;
|
||
if (__classPrivateFieldGet(this, _UnitInfoPanel_element, "f") != null) {
|
||
var els = __classPrivateFieldGet(this, _UnitInfoPanel_element, "f").getElementsByClassName("js-loadout-element");
|
||
while (els.length > 0)
|
||
(_a = __classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#loadout-data")) === null || _a === void 0 ? void 0 : _a.removeChild(els[0]);
|
||
for (let index in unit.ammo) {
|
||
var ammo = unit.ammo[index];
|
||
var displayName = ammo.desc.displayName;
|
||
var amount = ammo.count;
|
||
var el = document.createElement("div");
|
||
el.classList.add("js-loadout-element", "rectangular-container-dark");
|
||
el.innerHTML = amount + "x" + displayName;
|
||
(_b = __classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#loadout-data")) === null || _b === void 0 ? void 0 : _b.appendChild(el);
|
||
}
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#unit-name").innerHTML = unit.unitName;
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#group-name").innerHTML = unit.groupName;
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#name").innerHTML = unit.name;
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#heading").innerHTML = String(Math.floor((0, utils_1.rad2deg)(unit.heading)) + " °");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#altitude").innerHTML = String(Math.floor(unit.altitude / 0.3048) + " ft");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#ground-speed").innerHTML = String(Math.floor(unit.speed * 1.94384) + " kts");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#fuel").innerHTML = String(unit.fuel + "%");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#latitude").innerHTML = (0, utils_1.ConvertDDToDMS)(unit.latitude, false);
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#longitude").innerHTML = (0, utils_1.ConvertDDToDMS)(unit.longitude, true);
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#task").innerHTML = unit.currentTask !== "" ? unit.currentTask : "Not controlled";
|
||
}
|
||
}
|
||
}
|
||
exports.UnitInfoPanel = UnitInfoPanel;
|
||
_UnitInfoPanel_element = new WeakMap(), _UnitInfoPanel_display = new WeakMap();
|
||
},{"../other/utils":14}],17:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.payloadNames = void 0;
|
||
exports.payloadNames = { "A-10A": ["MK-84*2 , LAU-68*2 , AGM-65K*2", "LAU-68-MK5*6", "AGM-65K*2,Mk20*6,AIM-9*2,ECM", "Mk-82*6,AIM-9*2,ECM", "Mk20*6,AIM-9*2,ECM", "AGM-65D*4,AIM-9*2,ECM", "AGM-65K, AGM-65D", "ECM", "Mk-82*6, Mk-84*2", "Mk20*8", "AGM-65K*2,Mk-84*2,AIM-9*2,ECM", "AGM-65K*2,Mk-82*6,AIM-9*2,ECM", "Mk-84*2,AIM-9*2,ECM", "AGM-65K*2,Mk84*2,Mk82*4,AIM-9M*2,ECM", "AGM-65H*6,Mk82*10,AIM-9M*2,ECM"], "A-10C": ["LAU-68 42 rkt M156 WP, AIM-9*2, ECM", "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", "SUU-25*9,AIM-9*2,ECM", "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", "Mk-82AIR*8,AIM-9*2,ECM", "MK-84*2,LAU-68*2,AGM-65K*2", "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", "Mk-82*6,Mk-84*2,AIM-9*2,ECM", "Mk-84*4,AIM-9*2,ECM", "Mk-82*8,AIM-9*2,ECM", "BDU-33*12, TGP, CAP-9*1", "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", "BDU-33*6, TGP, CAP-9*1", "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", "TGP", "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", "GBU-12*6,GBU-10*2,TGP, AIM-9*2", "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", "AGM-65D*4,TGP, ECM, AIM-9*2", "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", "CBU-103*4, M151*14, AIM-9*2, ECM", "CBU-87*4, M151*42, AIM-9*2, ECM", "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", "CBU-87*4, M151*28, AIM-9*2,ECM", "M151*98, Mk-82*2,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", "TGP, CAP-9*1, BDU-50LGB*4", "GBU-12*14,TGP, AIM-9*2", "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", "GBU-38*4,GBU-31*2,TGP, AIM-9*2", "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP"], "A-10C_2": ["LAU-68 42 rkt M156 WP, AIM-9*2, ECM", "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", "SUU-25*9,AIM-9*2,ECM", "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", "Mk-82AIR*8,AIM-9*2,ECM", "MK-84*2,LAU-68*2,AGM-65K*2", "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", "Mk-82*6,Mk-84*2,AIM-9*2,ECM", "Mk-84*4,AIM-9*2,ECM", "Mk-82*8,AIM-9*2,ECM", "BDU-33*12, TGP, CAP-9*1", "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", "BDU-33*6, TGP, CAP-9*1", "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", "TGP", "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", "GBU-12*6,GBU-10*2,TGP, AIM-9*2", "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", "AGM-65D*4,TGP, ECM, AIM-9*2", "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", "CBU-103*4, M151*14, AIM-9*2, ECM", "CBU-87*4, M151*42, AIM-9*2, ECM", "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", "CBU-87*4, M151*28, AIM-9*2,ECM", "M151*98, Mk-82*2,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", "TGP, CAP-9*1, BDU-50LGB*4", "GBU-12*14,TGP, AIM-9*2", "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", "GBU-38*4,GBU-31*2,TGP, AIM-9*2", "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", "AGM-65E*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,TGP", "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", "AGM-65E*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", "Mk-82*20,AIM-9*2,ECM", "Mk-82*6,AIM-9*2,TGP,ECM", "Mk-84*6,AIM-9*2,TGP,ECM", "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", "GBU-38*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-12*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-10*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-31*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-54*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM"], "AH-64D_BLK_II": ["4 * Fuel Tank 230 gal", "2 * M261: M151 (6PD), 2 * Hellfire station: 4*AGM-114K", "4 * Hellfire station: 4*AGM-114K", "4 * M261: M151 (6PD)", "2 * M261: M151 (6PD), 2 * Fuel Tank 230 gal", "2 * Fuel Tank 230 gal, 2 * Hellfire station: 4*AGM-114K", "2 * M261: A/B - M151 (6PD), E - M274 (6SK), 2 * Hellfire station: 4*AGM-114K", "2 * M261: A/B - M151 (6PD), E - M257 (6IL), 2 * Hellfire station: 4*AGM-114K", "2 * M261: C - M257 (6IL), D/E - M151 (6PD), 2 * Hellfire station: 4*AGM-114K", "2 * M261: C - M274 (6SK), D/E - M151 (6PD), 2 * Hellfire station: 4*AGM-114K"], "AJS37": ["Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", "Anti-ship: RB-04E*2, RB-74*2, XT", "Anti-ship (Heavy Mav): RB-75T*4, XT", "Hard Target (Countermeasures): RB-05, XT, KB, U22", "Hard Target (MAV): RB-75T*2, RB-74*2, XT", "Ferry Flight: XT", "CAS (75 GUN): RB-75*2, AKAN", "CAP: RB-74*4, XT", "Countermeasures Escort: U/22A, KB", "Strike: BK90 (MJ1)*2, RB-74*2, XT", "CAS: AKAN, RB-05A", "CAP (6 AAM): RB-74*4, RB-24J*2, XT", "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", "CAP / Intecept: RB-05A*2, RB-74*2, XT", "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", "SEAD: RB-75T*2, U22/A, KB, XT", "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", "New Payload", "CAP (AJ37): RB-24J*2", "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", "Bombs High-drag: SB71HD*16, XT, RB-24J", "Anti-ship (Light Mav): RB-75*4, XT", "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", "Illumination: LYSB*8, XT", "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", "CAP (Gun): AKAN*2, RB-74*2, XT", "Hard Target: RB-05A*2, RB-74*2, XT", "RB-05*2, XT", "CAS: ARAK M70 HE*4, XT", "Runway Strike: SB71HD*16, RB-24J, XT"], "AV8BNA": ["H-L-H 2", "AFAC 1", "AS 1", "H-M-H 3", "Interdiction 1 (H-H-H-H)", "Interdiction 2 (H-H-H-H)", "AFAC 3", "Interdiction 3 (H-L-L-H)", "H-M-H 1", "H-L-H 1", "PGM 2 (H-H-H-H)", "L-L-L 1", "AFAC 2", "H-M-H 2", "Area Suppression", "Rockets 1", "AS 2", "Helo Escort 1", "PGM 1 (H-H-H-H)", "Helo Escort 2", "PGM 3 (H-H-H-H)", "Anti Armor", "RA 1 (H-M-M-H)", "Stand Off 1", "Stand Off 2", "Stand Off 3", "Iron Hand 1", "Iron Hand 2"], "C-101CC": ["2*AIM-9P, DEFA 553 CANNON (I)", "2*AIM-9M, DEFA 553 CANNON (I)", "2*AIM-9P, DEFA 533 CANNON (II)", "2*AIM-9P, AN-M3 CANNON (IV)", "2*R.550 MAGIC, DEFA 553 CANNON", "2*AIM-9M, AN-M3 CANNON (III)", "2*AIM-9P, DEFA 553 CANNON", "2*R.550 MAGIC, DEFA 553 CANNON (III)", "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", "2*AIM-9M, AN-M3 CANNON", "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", "2* SEA EAGLE, DEFA-553 CANNON", "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", "2*R.550 MAGIC, DEFA 553 CANNON (IV)", "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", "2*AIM-9M, DEFA 553 CANNON (IV)", "2*R.550 MAGIC, AN-M3 CANNON (II)", "2*R550 Magic, DEFA 553 CANNON (I)", "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", "2*AIM-9P, AN-M3 CANNON (III)", "2*AIM-9M, DEFA 533 CANNON (II)", "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON"], "C-101EB": ["Smoke System: White Smoke", "Smoke System: White Smoke+Red Colorant", "Smoke System: White Smoke+Yellow Colorant"], "H-6J": ["YJ-12 x 2", "YJ-12 x 4", "YJ-83K x 6", "250-2 HD Bomb x 12 in Bay", "250-2 HD Bomb x 24 in Bay", "250-3 LD Bomb x 36", "KD-63 x 4", "KD-20 x 6", "KD-20 x 4", "KD-63 x 2, KD-20 x 4", "KD-63 x 2, KD-20 x 2"], "J-11A": ["FAB-100x36,R-73x2,ECM", "FAB-250x8,R-73x2,ECM", "FAB-500x8,R-73x2,ECM", "S-8KOMx80,FAB-250x4,R-73x2,ECM", "S-13x20,FAB-250x4,R-73x2,ECM", "S-25x4,FAB-500x4,R-73x2,ECM", "R-27ERx4,R-27ETx2,R-73x2,ECM", "R-77x6,R-73x2,ECM", "R-27ERx6,R-73x2,ECM", "R-77x4,R-27ETx2,R-73x2,ECM", "R-77x4,R-27ERx2,R-73x2,ECM", "BetAB-500ShPx6,R-73x2,ECM", "R-73x4,ECM", "R-77x2,R-27ETx2,R-73x2,ECM", "R-77x6,R-73x4", "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", "R-27ETx2,R-27ERx4,R-73x2,ECM", "S-8TsMx80,FAB-250x4,R-73x2,ECM", "S-8OFP2x80,FAB-250x4,R-73x2,ECM", "FAB-250x18,R-73x2,ECM", "2*S8-KOMx2, R-73x2, ECM", "2*S8-OFP2x2, R-73x2, ECM", "FAB-250x4, 2*FAB-500x2, R-73x2", "FAB-250x4, 2*FAB-250x2, R-73x2", "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2"], "JF-17": ["PL-5Ex2, C802AKx2, 800L Tank", "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", "PL-5Ex2, 800L Tank, WMD7", "PL-5Ex2, GBU-10x2, WMD7", "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", "PL-5Ex2, 1100L Tankx2, 800L Tank", "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", "PL-5Ex2, 1100L Tankx2, WMD7", "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", "PL-5Ex2, Mk-84x3", "PL-5Ex2, 2*Mk5x2, 800L Tank", "PL-5Ex2, Unguided 90mmx2, 800L Tank", "PL-5Ex2, 2*Mk5x2, Mk-83x3", "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", "PL-5Ex2, 2x1100L Tank", "PL-5Ex2, SD-10x2, 2x1100L Tank", "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", "PL-5Ex2, 800L Tank", "PL-5Ex2, SD-10x2, 800L Tank", "PL-5Ex2, 2*SD-10x2, 800L Tank", "PL-5Ex2, SD-10x2, SPJ", "PL-5Ex2, SPJ", "PL-5Ex2, 2*SD-10x2, SPJ", "PL-5Ex2", "PL-5Ex2, SD-10x2", "PL-5Ex2, 2*SD-10", "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", "PL-5Ex2, WMD7", "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", "PL-5Ex2, C-701 CCDx2, SPJ", "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", "PL-5Ex2, 2*Type-200Ax2", "PL-5Ex2, Type-200Ax2", "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7"], "WingLoong-I": ["AKD-10 x 2"], "Christen Eagle II": ["Smoke - white"], "F-16C_50": ["AIM-120B*2, AIM-9M*4, FUEL*3", "AIM-120B*4, AIM-9M*2, FUEL*3", "AIM-120B*6, FUEL*3", "AIM-120C*2, AIM-9X*4, FUEL*2", "AIM-120C*4, AIM-9X*2, FUEL*3", "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", "AIM-120C*4, AIM-9X*2, FUEL*2", "AIM-120C*6, FUEL*3", "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", "AIM-120C*6, FUEL*2, ECM", "AIM-120C*6, FUEL*2, ECM, TGP", "AIM-120C*6, FUEL*2", "AIM-120C*6, FUEL*3, TGP", "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP"], "F-5E-3": ["Mk-82LD*4,AIM-9P*2,Fuel 275", "AIM-9P*2, Fuel 275*3", "AIM-9P5*2, Fuel 275*3", "AIM-9P*2, Fuel 150*3", "AIM-9P5*2, Fuel 150*3", "Mk-82SE*4,AIM-9P*2,Fuel 275", "CBU-52B*4,AIM-9P*2,Fuel 275", "LAU-3 HE*4,AIM-9P*2,Fuel 275", "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", "LAU-68 HE*4,AIM-9P*2,Fuel 275", "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", "M-117*4,AIM-9P*2,Fuel 275", "GBU-12*4,AIM-9P*2,Fuel 275", "CBU-52B*5,AIM-9*2", "Mk-82LD*5,AIM-9*2", "Mk-82SE*5,AIM-9*2", "Mk-82LD*7,AIM-9P*2, Fuel 275*2", "Mk-82SE*7,AIM-9P*2, Fuel 275*2", "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "M-117*5,AIM-9*2", "AIM-9P*2, Fuel 275", "AIM-9P*2, Fuel 150", "AIM-9P5*2, Fuel 275", "AIM-9P5*2, Fuel 150", "AIM-9B*2, Fuel 275", "AIM-9B*2, Fuel 150", "AIM-9B*2, Fuel 275*3", "AIM-9B*2, Fuel 150*3", "AN/ASQ-T50, AIM-9P, Fuel 150", "AIM-9B*2", "AIM-9P*2", "AIM-9P5*2", "Antiship Mk82"], "F-5E": ["Mk-82LD*4,AIM-9P*2,Fuel 275", "AIM-9P*2, Fuel 275*3", "AIM-9P5*2, Fuel 275*3", "AIM-9P*2, Fuel 150*3", "AIM-9P5*2, Fuel 150*3", "Mk-82SE*4,AIM-9P*2,Fuel 275", "CBU-52B*4,AIM-9P*2,Fuel 275", "LAU-3 HE*4,AIM-9P*2,Fuel 275", "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", "LAU-68 HE*4,AIM-9P*2,Fuel 275", "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", "M-117*4,AIM-9P*2,Fuel 275", "GBU-12*4,AIM-9P*2,Fuel 275", "CBU-52B*5,AIM-9*2", "Mk-82LD*5,AIM-9*2", "Mk-82SE*5,AIM-9*2", "Mk-82LD*7,AIM-9P*2, Fuel 275*2", "Mk-82SE*7,AIM-9P*2, Fuel 275*2", "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "M-117*5,AIM-9*2", "AIM-9P*2, Fuel 275", "AIM-9P*2, Fuel 150", "AIM-9P5*2, Fuel 275", "AIM-9P5*2, Fuel 150", "AIM-9B*2, Fuel 275", "AIM-9B*2, Fuel 150", "AIM-9B*2, Fuel 275*3", "AIM-9B*2, Fuel 150*3", "AN/ASQ-T50, AIM-9P, Fuel 150", "AIM-9B*2", "AIM-9P*2", "AIM-9P5*2"], "F-86F Sabre": ["120gal Fuel*2", "200gal Fuel*2", "120gal Fuel*2, 200gal Fuel*2", "GAR-8*2", "120gal Fuel*2, GAR-8*2", "HVAR*16", "200gal Fuel*2, HVARx2*4", "AN-M64*2", "200gal Fuel*2, AN-M64*2", "M117*2"], "F-14A-135-GR": ["XT*2", "AIM-54A-MK47*6, AIM-9L*2, XT*2", "AIM-7F*6, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", "AIM-54A-MK47*4, AIM-9L*4, XT*2", "AIM-54A-MK47*4, AIM-9M*4, XT*2", "AIM-54A-MK60*4, AIM-9M*4, XT*2", "AIM-7F*4, AIM-9L*4, XT*2", "AIM-7F*4, AIM-9L*4, XT*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN"], "F-14A-95-GR": ["AIM-54A-MK47*6, AIM-9L*2", "AIM-54A-MK47*6, AIM-9L*2", "AIM-54A-MK60*6, AIM-9L*2", "AIM-7F*6, AIM-9L*2", "AIM-7F*6, AIM-9L*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK60*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK60*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK47*4, AIM-9L*4", "AIM-54A-MK47*4, AIM-9L*4", "AIM-54A-MK60*4, AIM-9L*4", "AIM-7F*4, AIM-9L*4", "AIM-7F*4, AIM-9L*4", "AIM-54A-MK47*2, AIM-7F*3, AIM-9L*2", "AIM-54A-MK47*2, AIM-7F*3, AIM-9L*2", "AIM-54A-MK60*2, AIM-7F*3, AIM-9L*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-20*2"], "F-14B": ["XT*2", "AIM-54A-MK47*6, AIM-9M*2, XT*2", "AIM-54A-MK47*6, AIM-9L*2, XT*2", "AIM-54A-MK60*6, AIM-9M*2, XT*2", "AIM-54C-MK47*6, AIM-9M*2, XT*2", "AIM-7M*6, AIM-9M*2, XT*2", "AIM-7M*6, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-9M*4, XT*2", "AIM-54A-MK60*4, AIM-9M*4, XT*2", "AIM-54C-MK47*4, AIM-9M*4, XT*2", "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", "AIM-7M*4, AIM-9L*4, XT*2", "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN"], "FA-18C_hornet": ["AIM-9M*6, AIM-7M*2, FUEL*3", "AIM-9M*6, AIM-7M*2, FUEL*2", "AIM-9M*2, MK-84*2, FUEL*2", "AIM-9M*2, MK-83*4, FUEL*2", "Carrier Landing", "AIM-9M*2, AIM-7M*4, FUEL*3", "AIM-9M*2, CBU-99*4, FUEL*2", "AIM-9M*2, MK-82SE*4, FUEL*2", "AIM-9M*2, MK-20*4, FUEL*2", "AIM-9M*2, MK-82*4, FUEL*2", "AIM-9M*2, AIM-7M*2, FUEL*2", "AIM-9M*2, MK-83*2, FUEL*2", "AIM-9M*2, ZUNI*4, FUEL*2", "AIM-9M*2, LAU-61*4, FUEL*2", "AIM-9M*2, LAU-68*4, FUEL*2", "AIM-9M*2, AIM-7M*2, FUEL*1", "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*6, FUEL*3", "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", "AIM-9M*2, ATFLIR, FUEL", "AIM-9M*2, ATFLIR, FUEL*2"], "I-16": ["6xRS-82", "2xFAB-100", "6xRS-82, 2xFAB-100", "6xRS-82, 2xDropTank-93L", "2xDropTank-93L"], "Ka-50": ["4xFAB-500", "2xFuel tank, 2xKMGU AP", "80xS-8 TsM", "2xFuel tank, 40xS-8", "80xS-8", "4xKMGU AT", "2xKMGU AP", "2xFuel tank, 12x9A4172", "2xFuel tank, 2xUPK-23", "12x9A4172, 40xS-8", "12x9A4172, 2xKMGU AT", "4xKMGU AP", "2xFAB-250, 2xFuel tank", "12x9A4172, 2xFAB-500", "20xS-13", "40xS-8", "12x9A4172, 2xUPK-23", "2xKMGU AT", "6x9A4172", "2xFuel tank, 2xKMGU AT", "4xFuel tank", "2xKMGU AP, 12x9A4172", "12x9A4172", "2xFuel tank", "40xS-8 TsM, 12x9A4172", "2xFAB-500", "40xS-8 TsM, 2xFuel tank", "4xUPK-23", "10xS-13", "40xS-8 TsM", "12x9A4172, 10xS-13", "2xFuel tank, 2xFAB-500", "2xFAB-250", "4xFAB-250", "2xFuel tank, 10xS-13", "2xFAB-250, 12x9A4172", "2xUPK-23"], "Ka-50_3": ["4xIgla", "2xKh-25ML, 10xS-13, 4xIgla", "12x9A4172, 40xS-8KOM, 4xIgla", "12x9A4172, 40xS-8OFP, 4xIgla", "12x9A4172, 40xS-13, 4xIgla", "80xS-8KOM, 4xIgla", "80xS-8OFP, 4xIgla", "20xS-20, 4xIgla", "4xUPK-23, 4xIgla", "10xS-13, 2xFAB-500, 4xIgla", "10xS-13, 2xFAB-250, 4xIgla", "80xS-8OM, 4xIgla", "80xS-8TsM, 4xIgla", "40xS-8OFP, 2xFuel, 4xIgla", "12x9A4172, 2xFuel, 4xIgla"], "L-39C": ["SAB-100x2", "R-3Sx2", "Smokes", "Central Smoke", "FAB-100x2", "S-5KOx32"], "L-39ZA": ["S-5KOx32", "S-5KOx64", "S-5KOx32, PTB-150x2", "S-5KOx32, PTB-350x2", "S-5KOx32, FAB-100x2", "OFAB-100 Jupiter x4, FAB-100x2", "FAB-100x2", "FAB-100x4", "OFAB-100 Jupiter x8", "FAB-100x2, PTB-150x2", "FAB-100x2, PTB-350x2", "PK-3x4", "PK-3x2, PTB-150x2", "R-60Mx2", "SAB-100x4", "R-3Sx2", "R-3Sx2, PK-3x2", "R-60Mx2, PK-3x2"], "M-2000C": ["Fox", "Fox / Magic (QRA)", "Alpha / S530D", "Fox / S530D / Magic", "Fox / S530D / Magic / Eclair", "Bravo", "Bravo / Magic", "Kilo", "Kilo / Magic", "Bravo / 4xMk-82 / Magic", "Bravo / GBU-12 / Magic", "Bravo / 2xGBU-12 / Magic", "Bravo / GBU-16 / Magic", "Bravo / GBU-24 / Magic", "Bravo / BAP-100 / Magic", "Bravo / 4xSnakeEye / Magic", "Fox / 4xMk-82 / Magic", "Kilo / 4xMk-82 / Magic"], "MB-339A": ["A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", "A - 2*320L TipTanks [Clean]", "Recon", "Training", "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", "Runway Interdiction", "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", "A - 2*320L TipTanks + 6*Mk.82LD", "Runway Interdiction (36*BAP-100)", "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)"], "MB-339APAN": ["PAN - Smoke White", "PAN - Smoke White and Color Red", "PAN - Fuel External [RED SMOKE]", "PAN - Full Payload [RED SMOKE] + 2*320L TipTanks", "PAN - Full Payload [GREEN SMOKE] + 2*320L TipTanks", "PAN - Fuel External [GREEN SMOKE]", "PAN - Full Payload [RED SMOKE] + 2*500L TipTanks", "PAN - Smoke White and Color Green", "PAN - Full Payload [GREEN SMOKE] + 2*500L TipTanks"], "Mi-24P": ["2xB8V20 (S-8KOM)+8xATGM 9M114", "2xB8V20 ( S-8KOM)+4xATGM 9M114", "4xB8V20 (S-8KOM)+4xATGM 9M114", "2xB8V20 (S-8KOM)+2xBombs-250+4xATGM 9M114", "2xB8V20 (S-8OFP2)+4xATGM 9M114", "4xUB-32A (S-5KO)+4xATGM 9M114", "4xGUV-1 AP30+4xATGM 9M114", "2xGUV-1 AP30+4xATGM 9M114", "2xGUV-1 (GUN 12.7+2x7.62) +4xATGM 9M114", "2xKMGU (96 AO 2.5RT)+8xATGM 9M114", "2xB-13L+4xATGM 9M114", "2xS-24B+4xATGM 9M114", "4xS-24B+4xATGM 9M114", "2xBombs-500+4xATGM 9M114", "4xBombs-250+4ATGM 9M114", "2xRBK-500 (PTAB-1M)+4xATGM 9M114", "2xRBK-500U (OAB 2.5RT)+4xATGM 9M114", "4xRBK-250 (42 PTAB 2.5M) +4ATGM 9M114", "4xRBK-250-275 (150 AO-1SCh)+4ATGM 9M114", "4xPTB-450 Fuel tank"], "MiG-19P": ["PTB-760 x 2", "K-13A x 2, PTB-760 x 2", "K-13A x 2", "K-13A x 2, ORO-57K x 2, PTB-760 x 2", "ORO-57K x 2, PTB-760 x 2", "ORO-57K x 4", "ORO-57K x 2", "FAB-100M x 2, ORO-57K x 2", "FAB-250 x 2, ORO-57K x 2", "FAB-100M x 2", "FAB-250 x 2"], "MiG-21Bis": ["Patrol, long range", "Patrol, medium range", "Patrol, short range", "Hard targets, BOMBS", "Unknown or mixed targets, BOMBS + ROCKETS", "Soft targets, CLUSTERS + ROCKETS", "Soft targets, CLUSTERS", "Soft targets, scattered", "Few big targets, GROM + BOMBS", "Very hard target, PENETRATION", "Aerial attack, hard targets, CLUSTERS", "Hard targets, ROCKETS, PENETRATION", "Soft targets, ROCKETS, BLAST-FRAGMENTS", "Long range, MIX", "Long range, RADAR GUIDED MISSILES", "Long range, INFRA RED MISSILES", "Escort", "Escort, JAMMER", "Night, ILLUMINATOR", "Long range, JAMMER", "Soft targets, UPK + ROCKETS", "Soft targets, UPK + CLUSTERS", "Patrol, JAMMER", "NUCLEAR A", "NUCLEAR B", "Short range", "AEROBATIC"], "Mirage-F1B": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1BD": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1BE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530EM", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1BQ": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1C-200": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1C": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530EM", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1CG": ["2*AIM-9 JULI, 2*R530IR, 1*Fuel Tank", "4*AIM-9 JULI, 2*R530IR, 1*Fuel Tank", "2*AIM-9 JULI, 2*R530EM, 1*Fuel Tank", "2*AIM-9 JULI, R530IR", "2*AIM-9 JULI, 1*R530IR, 2*Fuel Tank", "2*AIM-9 JULI, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*AIM-9 JULI, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9 JULI, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CH": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CJ": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CK": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CR": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CT": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CZ": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1DDA": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1ED": ["2*R550 Magic II, 2*S530, 1*Fuel Tank", "2*R550 Magic II", "2*R550 Magic II, 2*Fuel Tank", "2*R550 Magic II, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic II, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic II, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EDA": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530EM", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1EH": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EQ": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1JA": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1M-CE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1M-EE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "SA342L": ["M621, 8xSNEB68 EAP", "M621, 8xSNEB68 EAP, IR Deflector", "M621, 8xSNEB68 EAP, IR Deflector, Sand Filter"], "SA342M": ["HOT3x4", "IR Deflector", "Hot3x4, FAS, IR Deflector", "HOT3x2", "Hot3x4, IR Deflector", "Hot3x2, IR Deflector"], "SA342Minigun": ["IR Deflector", "IR Deflector, Sand Filter"], "SA342Mistral": ["Mistral x 4", "Mistral x 4, IR Deflector", "Mistral x 4, IR Deflector, Sand Filter"], "A-20G": ["500 lb GP bomb LD*4"], "Bf-109K-4": ["Fuel Tank", "SC250", "SC500"], "FW-190A8": ["Without pylon", "SC 50 * 4", "AB 250 (w/ SD 10A)", "AB 250 (w/ SD 2)", "AB 500 (w/ SD 10A)", "SC 250 L2", "SC 250 J", "SC 500 J", "SC 500 L2", "SD 250 Stg", "SD 500 A", "Fuel Tank 300 liters", "BR 21"], "FW-190D9": ["SC500", "Fuel Tank", "R4M", "BR 21"], "MosquitoFBMkVI": ["250 lb S.A.P*2; 500 lb S.A.P.*2", "500 lb GP Mk.V*2, 500 lb GP Short tail*2", "100 gal Drop tank*2, 500 lb MC Short tail*2", "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", "500 lb GP Short tail*4"], "P-47D-30": ["AN-M65*2", "Fuel150*2", "AN-M64*2, Fuel110", "AN-M57*3"], "P-47D-30bl1": ["AN-M57*2", "AN-M64*2, Fuel110"], "P-47D-40": ["AN-M65*2", "Fuel150*2", "AN-M57*3", "AN-M64*2, Fuel110", "M8*6, AN-M57*2, Fuel110", "HVAR*10, Fuel110"], "P-51D-30-NA": ["Fuel75*2", "HVAR*6,Fuel75*2", "HVAR*6,M64*2", "HVAR*6", "M64*2", "HVAR*10", "Smokes"], "P-51D": ["Fuel75*2", "HVAR*6,Fuel75*2", "HVAR*6,M64*2", "HVAR*6", "M64*2", "HVAR*10", "Smokes"], "A-50": [], "AH-1W": ["14xHYDRA-70 WP", "38xHYDRA-70 WP", "8xBGM-71, 14xHYDRA-70", "8xBGM-71, 14xHYDRA-70 WP", "8xBGM-71, 38xHYDRA-70 WP", "14xHYDRA-70", "38xHYDRA-70", "8xAGM-114", "28xHYDRA-70", "8xBGM-71, 38xHYDRA-70", "8xAGM-114, 38xHYDRA-70 WP", "8xBGM-71", "8xAGM-114, 14xHYDRA-70 WP", "76xHYDRA-70", "8xAGM-114, 38xHYDRA-70", "8xAGM-114, 14xHYDRA-70"], "AH-64A": ["8xAGM-114", "38xHYDRA-70 WP", "76xHYDRA-70", "8xAGM-114, 38xHYDRA-70 WP", "38xHYDRA-70", "8xAGM-114, 38xHYDRA-70", "AGM-114K*16"], "AH-64D": ["76xHYDRA-70", "38xHYDRA-70", "38xHYDRA-70 WP", "8xAGM-114", "8xAGM-114, 38xHYDRA-70 WP", "8xAGM-114, 38xHYDRA-70", "AGM-114K*16"], "An-26B": [], "An-30M": [], "B-1B": ["Mk-82*84", "AGM-154*12", "GBU-38*48", "CBU-87*30", "CBU-97*30", "GBU-38*16, CBU-97*20", "Mk-84*24", "GBU-31*24", "GBU-31(V)3/B*24", "GBU-31*8, GBU-38*32"], "B-52H": ["Mk-84*18", "Mk 82*51", "Mk20*18", "AGM-86C*20", "AGM-84A*8"], "C-130": [], "C-17A": [], "CH-47D": [], "CH-53E": [], "E-2C": [], "E-3A": [], "F-117A": ["GBU-12*2", "GBU-10*2", "GBU-27*2"], "F-14A": ["AIM-9*2", "AIM-54C*6,AIM-9*2", "AIM-54C*4,AIM-9*2,AIM-7*2"], "F-15C": ["AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", "AIM-9*2,AIM-120*6,Fuel", "AIM-9*4,AIM-120*4,Fuel*3", "AIM-9*4,AIM-120*4,Fuel", "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", "AIM-9*2,AIM-120*6,Fuel*3", "AIM-9*4,AIM-7*4,Fuel", "AIM-120*8,Fuel", "AIM-9*4,AIM-7*4,Fuel*3", "AIM-120*8,Fuel*3", "AIM-9*2,AIM-120*2,AIM-7*4,Fuel"], "F-15E": ["AIM-120B*2,AIM-9M*2,FUEL*3,CBU-87*6,Mk-82AIR*6", "AIM-120B*2,AIM-9M*2,FUEL*3,CBU-97*12", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82*12", "AIM-120B*4,AIM-120C*4,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,GBU-31*4,AGM-65H,AGM-65D", "AIM-120B*2,AIM-9M*2,FUEL,CBU-103*2,GBU-12,GBU-38,AGM-154C*2", "AIM-120B*4,AIM-9M*4,FUEL*3", "AIM-120B*2,AIM-9M*2,AIM-120C*2,AIM-7M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-31*4,AGM-154C*2", "AIM-120B*2,AIM-9M*2,AIM-7M*4,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-84*8", "AIM-120B*2,AIM-9M*2,FUEL,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-65D*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-65K*2", "AIM-120C*2,AIM-9M*4,AIM-7M*2,FUEL*3", "AIM-9M*4,AIM-7M*4,FUEL*3", "AIM-120C*2,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,Mk-84*8,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82AIR*12", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*2,GBU-38*2,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*2,GBU-38*2,AGM-65H,AGM-65D", "AIM-120B*2,AIM-120C*4,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82*6,Mk-82AIR*6", "AIM-120B*2,AIM-9M*2,FUEL,CBU-103*2,GBU-12,GBU-38,AGM-65H*2", "AIM-120B*2,AIM-9M*2,FUEL,AGM-65D*2", "AIM-120B*2,AIM-9M*2,FUEL*2,SUU-25*2,GBU-12,GBU-38", "AIM-120B*6,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,Mk-82AIR*12,AGM-154C*2", "AIM-120C*6,AIM-9M*2,FUEL*3", "GBU-31(V)3/B*5, AIM-120C*2, AIM-9M*2"], "F-16A MLU": ["Fuel*3", "AGM-88*2, AGM-65D*2, AIM-120B*2, ECM", "Mk-82*6,AIM-120*2,ECM,Fuel*2", "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "AGM88*2,AGM-65D*6,AIM-120*2,AIM-9*2,ECM", "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2", "AIM-9*4,ECM", "Mk20*4,AIM-9*2,ECM,Fuel*2", "AIM-120*6,ECM", "AIM-120*4,AIM-9*2,ECM", "AGM88, AGM-65D, AIM-120*2,Fuel*2,ECM", "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-9*4,ECM,Fuel*2", "AIM-120*4,AIM-9*2,ECM,Fuel*2", "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "Mk-84*2,AIM-9*2,ECM,Fuel*2", "AIM-120*6,ECM,Fuel*2", "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AGM-88*2,AGM-65D*2,AIM-120B*2,AIM-9M*2,ECM", "Mk20*2,AIM-120*2,ECM,Fuel*2", "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120B*2_AIM-9M*2_AGM-119*4_ALQ-131"], "F-16A": ["AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "Mk20*4,AIM-9*2,ECM,Fuel*2", "AIM-9*4,ECM,Fuel*2", "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120*4,AIM-9*2,ECM,Fuel*2", "AGM88*2_AGM-65D*6_AIM-120*2_AIM-9*2_ECM", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2", "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2", "AIM-120*6,ECM,Fuel*2", "AIM-120*6,ECM", "AIM-9*4,ECM", "Fuel*3", "Mk-84*2,AIM-9*2,ECM,Fuel*2", "AIM-120*4,AIM-9*2,ECM", "Mk-82*6,AIM-120*2,ECM,Fuel*2", "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "Mk20*2,AIM-120*2,ECM,Fuel*2", "AGM-119*2,AIM-120B*2,AIM-9M*2,ALQ-184,Fuel*2"], "F-16C bl.50": ["AIM-120B*4, AIM-9M*2, Fuel", "AIM-120C*4, AIM-9M*2, Fuel", "AGM-65G*2, AIM-120C*2, AIM-9M*2, Fuel, ECM", "AGM-65D*6, AIM-120B*2, AIM-9M*2, ECM, Fuel", "Mk86*6, AIM-9M*4, ECM, Fuel", "CBU-97*4, AIM-9M*4, Fuel", "CBU-87*4, AIM-9M*4, Fuel", "AGM-65D*2, CBU-87*2, AIM-9M*4, Fuel", "AGM-65D*2, CBU-97*2, AIM-9M*4, Fuel", "Mk84*2, AIM-9M*4, ECM, Fuel", "GBU-31v1*2, AIM-9M*4, ECM, Fuel", "GBU-31v3*2, AIM-9M*4, ECM, Fuel", "GBU-31v1*2, Mk82*6, AIM-9M*4, Fuel", "Mk84*4, AIM-9M*4, Fuel", "Mk82*12, AIM-9M*4, Fuel", "AGM-154C*2, AIM-9M*4, ECM, Fuel"], "F-16C bl.52d": ["AGM-88*2, AGM-65D*2, AIM-120B*2, ECM,LIGHTNING", "Mk-82*6,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AGM88*2,AGM-65D*6,AIM-120*2,AIM-9*2,ECM,LIGHTNING", "AGM-65D*4,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-31*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-31(v)*2,ECM,Fuel*2,LIGHTNING", "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2,LIGHTNING", "Copy AIM-120*2,GBU-38*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-10*2,ECM,Fuel*2,LIGHTNING", "Mk-84*2,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AGM-154*2,AIM-120*2,ECM,Fuel*2,LIGHTNING", "Mk-82AIR*6,AIM-120*2,ECM,Fuel*2,LITENING", "CBU97*4,AIM120*2,ECM,Fuel*2,LITENING", "AGM-88*2,AGM-65D*2,AIM-120B*2,AIM-9M*2,ECM,LITENING", "CBU87*2,AIM-120*2,ECM,Fuel*2,LITENING", "AGM88, AGM-65D, AIM-120*2,Fuel*2,ECM,LITENING", "AIM-120*2,GBU-12*2,ECM,Fuel*2,LITENING", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2,LITENING", "AGM-65G*4,AIM-120C*2,AIM-9M*2,ECM", "AIM-120C*4,AIM-9M*2,ECM,Fuel*2", "AIM-120B*4,AIM-9M*2,ECM,Fuel*2", "AIM-9M*4,Fuel*2", "AIM-120C*2,AIM-120B*2,AIM-9M*2,Fuel*3", "AIM-9P*4", "AIM-9M*2,ECM"], "F-4E": ["AIM-9*4,AIM-7*4", "AGM45*2_AGM-65D*4_AIM7*2_ECM", "AGM-45*2,AIM-7*2,Fuel*2,ECM", "Mk-82*18,AIM-7*2,ECM", "GBU-12*2,AIM-7*2,Fuel*2,ECM", "Mk20*12,AIM-7*2,ECM", "Mk-82*6,AIM-7*2,Fuel*2,ECM", "GBU-10*2,AIM-7*2,Fuel*2,ECM", "Mk20*6,AIM-7*2,Fuel*2,ECM", "AGM-45*4,AIM-7*2,ECM", "AGM-65K*4,AIM-7*2,Fuel*2,ECM", "Fuel*3", "AIM-9*4,AIM-7*4,Fuel*2", "Mk-84*2,AIM-7*2,ECM", "AGM-65K*4,AIM-7M*4,Fuel*3"], "F/A-18A": ["GBU-16*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*6,Fuel", "Mk-84*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-65D*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM88*4_AIM9*2_AIM7_FLIR Pod_Fuel", "AIM-9*4,Fuel*3", "LAU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-88*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel", "MK-82*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*4,AIM-7*2,Fuel*3", "AGM-65K*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "Fuel*3", "AGM88*2_AGM65D*2_AIM9*2_AIM7_FLIR Pod_Fuel", "GBU-12*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*4,AIM-7*4,Fuel", "Mk20*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84A*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3"], "F/A-18C": ["AGM-62*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-12*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "Fuel*3", "Mk-84*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-16*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-154*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-120*4,AIM-9*2,Fuel*3", "AGM-65D*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM88*2_AGM65D*2_AIM9*2_AIM7_FLIR Pod_Fuel", "AGM88*4_AIM9*2_AIM7_FLIR Pod_Fuel", "AIM-9*2,AIM-7*6,Fuel", "Mk20*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-120*6,AIM-9*2,Fuel", "LAU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*2,AIM-7*4,Fuel*3", "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel", "AIM-120*2,AIM-9*2,AIM-7*2,Fuel*3", "AGM-88*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84E*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "MK-82*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84A*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9M*2,AGM-65D*2,Mk-82*4,FLIR Pod,Fuel", "AIM-120*4,AIM-9*2,AIM-7*2,Fuel", "AGM-65K*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3"], "IL-76MD": [], "IL-78M": [], "Ka-27": [], "Ka-52": ["APU-6 Vikhr-M*2, Kh-25ML*2", "APU-6 Vikhr-M*2", "B-8*4", "KMGU-2 (AO-2.5RT)*4", "B-8*2, APU-6 Vikhr-M*2", "FAB-500*2", "UB-13*2", "FAB-250*4", "Kh-25ML*2, R-73*2"], "KC-10A": [], "KC-135": [], "Mi-24V": ["2xFAB-500", "10xS-13", "2xFAB-250", "4x9M114, 2xFuel tank", "128xS-5", "80xS-8 TsM", "4x9M114, 40xS-8 TsM", "64xS-5", "8x9M114", "4x9M114, 80xS-8", "4x9M114, 128xS-5", "2xKMGU AP", "4xFuel tank", "4xUPK-23", "4x9M114, 10xS-13", "4x9M114, 80xS-8 TsM", "4x9M114", "80xS-8", "40xS-8 TsM", "8x9M114, 40xS-8 TsM", "8x9M114, 10xS-13", "2xFuel tank", "4x9M114, 4xUPK-23", "2xUPK-23", "8x9M114, 64xS-5", "8x9M114, 40xS-8", "20xS-13", "40xS-8", "8x9M114, 2xUPK-23"], "Mi-26": [], "Mi-28N": ["2xFAB-250", "4xFuel tank", "80xS-8", "4xKMGU AP", "4xUPK-23", "16x9M114, 10xS-13", "4xFAB-500", "16x9M114, 2xFAB-500", "40xS-8", "40xS-8 TsM", "2xKMGU AP", "2xUPK-23", "16x9M114, 2xUPK-23", "2xFAB-500", "16x9M114, 40xS-8", "16x9M114", "20xS-13", "16x9M114, 2xKMGU AP", "4xFAB-250", "4xKMGU AT", "16x9M114, 40xS-8 TsM", "80xS-8 TsM", "2xKMGU AT", "9x9M114", "2xFuel tank", "10xS-13", "2xFAB-250, 16x9M114", "16x9M114, 2xKMGU AT"], "Mi-8MT": ["4 x B8", "4 x B8 + 2GUV_AP-30 (GrL 30mm)", "2 x UPK +2 x B8", "2 xB8 + 2GUV_YaKB (MG-12.7+7.62)+ 2GUV_AP-30 (GrL 30mm)", "6 x FAB-100", "2 x B8 + 2 x UPK-23-250", "2 x UPK--23-250"], "MiG-15bis": ["2*FAB-50", "2*FAB-100M", "2*300L", "2*400L", "2*600L", "Fuel tank 300", "Fuel tank 400"], "MiG-23MLD": ["R-60M*4", "B-8*2,R-60M*2,Fuel-800", "UB-32*2,R-60M*2,Fuel-800", "R-24R*2,R-60M*4,Fuel-800", "R-24R,R-24T,R-60M*4,Fuel-800", "R-60M*4,Fuel-800", "FAB-500*2,R-60M*2,Fuel-800", "R-24R*2,R-60M*4", "FAB-250*2,R-60M*2,Fuel-800", "RBK-250*2,R-60M*2,Fuel-800", "RBK-500*2,R-60M*2,Fuel-800", "R-24R,R-24T,R-60M*4"], "MiG-25PD": ["R-40R*2,R-40T*2", "R-40R*4", "R-40R*2,R-60M*2"], "MiG-25RBT": ["FAB-500x2_60x2", "R-60M*2"], "MiG-27K": ["FAB-250*6,R-60M*2,Fuel", "BetAB-500ShP*2,FAB-250*2,R-60*2", "Kh-25MR*2,R-60M*2,Fuel", "Kh-29L*2,R-60M*2,Fuel", "B-8*4", "BetAB-500*2,FAB-500*2,R-60*2", "Kh-25MPU*2,R-60M*2,Fuel", "Kh-29T*2,R-60M*2,Fuel", "FAB-500*2,FAB-250*2,R-60M*2,Fuel", "Kh-25ML*2,R-60M*2,Fuel", "KAB-500*2,R-60M*2,Fuel", "RBK-500AO*2,RBK-250*2,R-60M*2", "UB-32*4", "Kh-29L*2,R-60*2,Fuel"], "MiG-29A": ["Fuel-1150*2,Fuel-1500", "RBK-500AO*4,R-73*2,Fuel", "FAB-250*4,R-73*2,Fuel", "B-8*4,R-73*2,Fuel", "R-60M*4,R-27R*2", "R-73*4,R-27R*2,Fuel-1500", "R-73*6,Fuel-1500", "R-60M*6,Fuel-1500", "S-24*4,R-73*2,Fuel", "FAB-500*4,R-73*2,Fuel", "R-60M*6", "BetAB-500*4,R-73*2,Fuel", "R-73*6", "R-73*2,R-60M*2,R-27R*2,Fuel-1500", "R-60M*4,R-27R*2,Fuel-1500", "RBK-250*4,R-73*2,Fuel", "R-73*4,R-27R*2", "R-73*2,R-60M*2,R-27R*2", "S-24*2,FAB-500*2,R-73*2,Fuel"], "MiG-29G": ["R-73*6,Fuel-1500", "R-73*4,R-27R*2,Fuel-1500", "R-73*2,R-60M*2,R-27R*2", "R-60M*4,R-27R*2,Fuel-1500", "R-73*6", "R-60M*4,R-27R*2", "R-73*4,R-27R*2", "Fuel-1150*2,Fuel-1500", "R-60M*6", "R-60M*6,Fuel-1500", "R-73*2,R-60M*2,R-27R*2,Fuel-1500"], "MiG-29S": ["R-73*2,R-60M*2,R-27R*2", "R-73*4,R-27R*2,Fuel-1500", "R-73*6,Fuel-1500", "R-60M*6,Fuel-1500", "S-24*4,R-73*2,Fuel", "FAB-500*4,R-73*2,Fuel", "BetAB-500*4,R-73*2,Fuel", "RBK-500AO*4,R-73*2,Fuel", "R-73*2,R-60M*2,R-27R*2,Fuel-1500", "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", "B-8*4,R-73*2,Fuel", "RBK-250*4,R-73*2,Fuel", "R-73*6", "Fuel-1150*2,Fuel-1500", "R-60M*6", "R-60M*4,R-27R*2", "R-73*4,R-27R*2", "R-77*4,R-73*2", "FAB-250*4,R-73*2,Fuel", "R-60M*4,R-27R*2,Fuel-1500", "R-77*4,R-73*2,Fuel-1500", "S-24*2,FAB-500*2,R-73*2,Fuel"], "MiG-31": ["R-40T*2,R-33*4", "R-40T,R-33*4,R-40R", "R-40R*2,R-33*4", "R-60M*4,R-33*4"], "Mirage 2000-5": ["R 550*2,MICA IR*4", "R 550*2,MICA IR*2,MICA AR*2,Fuel*3", "R 550*2,MICA AR*4,Fuel*3", "R 550*2,SUPER 530F*2,Fuel", "Fuel*3", "R 550*2,MICA IR*4,Fuel*3", "R 550*2,MICA AR*4", "R 550*2,SUPER 530F*2"], "MQ-9 Reaper": ["GBU-12*4", "GBU-38*4", "AGM-114K*8,GBU-38*2", "AGM-114K*12"], "OH-58D": ["2xAGM-114, 7xHYDRA-70", "4xAGM-114", "M-3, 7xHYDRA-70", "2xAGM-114, M-3", "14xHYDRA-70", "14xHYDRA-70 WP"], "RQ-1A Predator": ["AGM-114K*2"], "S-3B": ["AGM-84A*2, Mk-82*2", "AGM-84E*2", "AGM-65D, AGM-65K, Mk20*4", "AGM-65D, AGM-65K, Mk82*4", "Mk82*10", "Mk84*2, Mk82*4", "ZUNI Mk71*8, Mk20*4"], "SH-3W": [], "SH-60B": ["AGM-119"], "Su-17M4": ["UB-32*4,R-60M*2,FAB-250*4", "FAB-100*24,R-60M*2", "UB-32*4,R-60M*2,Fuel*2", "B-8*4,R-60M*2,FAB-250*4", "Kh-29L*2,R-60M*2,Fuel*2", "B-8*4,R-60M*2,Fuel*2", "Kh-29T*2,R-60M*2,Fuel*2", "BetAB-500*6,R-60M*2", "Kh-25MR*4,R-60M*2,Fuel*2", "S-24*4,R-60M*2,Fuel*2", "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", "FAB-250*16,R-60M*2", "Kh-25ML*4,R-60M*2,Fuel*2", "RBK-500AO*4,SPPU-22*2,R-60M*2", "S-24*4,R-60M*2,FAB-250*4", "Fuel*4", "FAB-500*6,R-60M*2", "Kh-25ML*2,Kh-29L*2,R-60*2"], "Su-24M": ["UB-13*4,FAB-500*2", "Kh-31A*2,R-60M*2,Fuel", "UB-13*4", "KAB-500*4,R-60M*2", "S-25*2,Fuel*3", "Kh31P*2_Kh25ML*2_L-081", "B-8*2,Fuel*3", "FAB-1500*2,R-60M*2", "S-24*4", "BetAB-500*4,R-60M*2", "Kh-25ML*4", "Kh-25MR*4", "FAB-100*24", "Kh-31A*2,R-60M*2", "UB-13*2,Fuel*3", "B-8*2,Fuel*2", "Kh58*2_Kh25ML*2_L-081", "RBK-250*8", "UB-32*4", "Kh-29L*2,R-60M*2", "S-24*2,Fuel*3", "Kh25MPU*2_Kh25ML*2_L-081", "FAB-500*4,R-60M*2", "FAB-250*8", "Fuel*3", "RBK-500AO*4,R-60M*2", "KAB-1500*2,R-60M*2,Fuel", "UB-32*4,FAB-250*4", "Kh-29T*2,R-60M*2", "UB-32*2,Fuel*3", "Kh-59M*2,R-60M*2,Fuel", "S-25*4", "B-8*6"], "Su-24MR": ["SHPIL,ETHER,R-60M*2", "Fuel*2", "TANGAZH,ETHER,R-60M*2,Fuel*2", "TANGAZH,ETHER,R-60M*2", "SHPIL,ETHER,R-60M*2,Fuel*2"], "Su-25": ["RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "S-25L*6,UB-13*2,R-60M*2", "S-25*6,SPPU-22*2,R-60M*2", "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", "S-8KOM*120,R-60M*2,Fuel*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", "RBK-500AO*6,R-60M*2,Fuel*2", "RBK-250*8,R-60M*2", "Kh-29L*2,Kh-25ML*4,R-60M*2", "RBK-250*4,S-8KOM*80,R-60M*2", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", "S-8TsM*160,R-60*2", "Kh-25ML*4,R-60M*2,Fuel*2", "BetAB-500ShP*8,R-60M*2", "SAB-100*8,R-60*2", "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", "FAB-500*6,R-60M*2,Fuel*2", "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", "Kh-29L*2,R-60M*2,Fuel*2", "FAB-100*32,R-60M*2", "FAB-100*16,R-60M*2,Fuel*2", "FAB-250*6,R-60M*2,Fuel*2", "BetAB-500*6,R-60M*2,Fuel*2", "S-25*6,R-60M*2,Fuel*2", "UB-13*6,R-60M*2,Fuel*2", "Kh-25*4,Kh-29T*2,R-60*2", "S-25L*6,R-60*2,Fuel*2"], "Su-25T": ["FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", "BetAB-500ShP*8,R-60M*2", "UB-13*6,R-60M*2,Fuel*2", "Kh-29T*2,R-73*2,Fuel*2,MPS-410", "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", "KH-29T*2, VIKHR*2, ECM", "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "FAB-500*6,R-60M*2,Fuel*2", "Fuel*4", "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", "S-8KOM*120,R-60M*2,Fuel*2", "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", "FAB-250*6,R-60M*2,Fuel*2", "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", "FAB-100*32,R-60M*2", "RBK-250*8,R-60M*2", "S-25L*6,UB-13*2,R-60M*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "S-25*2,SPPU-22*4,R-60M*2,R-73*2", "KMGU-2 (AO-2.5RT)*8,R-60M*2", "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", "S-25*6,R-60M*2,Fuel*2", "RBK-500AO*6,R-60M*2,Fuel*2", "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", "RBK-250*4,UB-32*4,R-60M*2", "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", "BetAB-500*6,R-60M*2,Fuel*2", "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", "FAB-100*16,R-60M*2,Fuel*2", "Kh-29L*2,Kh-25ML*4,R-73*2,ECM"], "Su-25TM": ["BetAB-500ShP*6,R-73*2,ECM", "APU-8 Vikhr-M*2,R-60M*2,R-73*2,SPPU-22*2,Mercury LLTV Pod", "Kh-29T*2,Kh-25ML*2,R-73*2,Fuel*2,ECM", "Kh-58*2_Kh-25MPU*4_R-73*2_L-081_MPS410", "S-25L*6,UB-13*2,R-60M*2", "Kh-35*2_R-73*2_Fuel*2_MPS410_Kopyo-25", "Kh-31A*2_R-73*2_Fuel*2_MPS410_Kopyo-25", "Fuel*4", "BetAB-500*6,R-60M*2,Fuel*2", "KAB-500Kr*2,Kh-25ML*2,R-73*2,Fuel*2,ECM", "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,ECM", "UB-13*6,R-60M*2,Fuel*2", "S-25*2,SPPU-22*4,R-60M*2,R-73*2", "Kh-31P*2_Kh-25ML*4_R-73*2_L-081_MPS410", "UB-32*6,R-60M*2,Fuel*2", "FAB-100*16,R-60M*2,Fuel*2", "FAB-250*6,R-60M*2,Fuel*2", "FAB-500*6,R-60M*2,Fuel*2", "Kh-25MPU*4_R-73*2_Fuel*2_L-081_MPS410", "S-25*6,R-60M*2,Fuel*2", "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "Kh-31P*2_Kh-25MPU*4_R-73*2_L-081_MPS410", "RBK-500AO*6,R-60M*2,Fuel*2", "FAB-100*32,R-60M*2", "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", "RBK-250*8,R-60M*2", "APU-8 Vikhr-M*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,ECM", "RBK-250*4,UB-32*4,R-60M*2", "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2"], "Su-27": ["R-73*4,R-27ER*4,R-27ET*2", "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", "BetAB-500ShP*6,R-73*2,ECM", "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", "R-73*2,R-27ER*6,ECM", "R-73*6", "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", "R-73*4,R-27ER*6", "R-73*2,R-27ER*4,R-27ET*2,ECM", "R-73*4,ECM", "ECM", "FAB-500*6,R-73*2,ECM", "S-25*2,FAB-500*4,R-73*4", "S-25*4, FAB-500*4, R-73*2, ECM", "CAS S-8KOM Rockets + RBK-500 PTAB1", "CAS S-8OFP Rockets + FAB-500 Bombs", "CAS S-8OFP Rockets", "CAS S-8OFP Rockets + FAB-100 Bombs", "CAS S-8KOM Rockets + FAB-100 Bombs", "CAS S-13 Rockets", "CAS S-8KOM Rockets + FAB-250 Bombs", "CAS S-8KOM Rockets + RBK-250 PTAB2.5", "CAS S-8KOM Rockets", "CAS S-8KOM Rockets + FAB-500 Bombs", "CAS S-8KOM Rockets + RBK-500 PTAB10", "CAS S-8KOM Rockets + KMGU PTAB", " CAS S-25 Rockets", "CAS S-25 Rockets + FAB-500 Bombs"], "Su-30": ["R-73*2,R-77*6,ECM", "R-73*2,R-27T*2,R-27R*4", "RBK-500AO*6,R-73*2,ECM", "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", "R-73*4,R-27T*2,R-27R*4", "R-73*2,R-77*2,Kh-35*2,ECM", "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", "FAB-250*4,B-8*2,R-73*2,ECM", "ECM", "KAB-1500*2,R-73*2,R-77*2,ECM", "RBK-250*6,R-73*2,ECM", "R-73*4,R-77*6", "FAB-250*4,S-25*2,R-73*2,ECM", "R-73*2,R-27R*2,R-27ER*4,ECM", "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", "FAB-1500*2,R-73*2,R-77*2,ECM", "R-73*4,R-27T*2,R-27ER*2,R-77*2", "Kh-59M*2,R-73*2,R-77*2,ECM", "FAB-500*6,R-73*2,ECM", "R-73*4,R-27R*2,R-27ER*4", "Kh-29L*4,R-73*2,R-77*2,ECM", "BetAB-500*6,R-73*2,ECM", "R-73*4", "FAB-250*4,UB-13*2,R-73*2,ECM", "R-73*2,R-77*4,R-27ER*2,ECM", "KAB-500*4,R-73*2,R-77*2,ECM", "FAB-250*6,R-73*2,ECM", "R-73*4,R-77*4,R-27ER*2", "Kh-29T*4,R-73*2,R-77*2,ECM", "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", "Kh-31P*4,R-73*2,R-77*2,ECM"], "Su-33": ["RBK-250*6,R-73*2,R-27R*2,ECM", "R-73*4", "R-73*4,R-27R*2,R-27ER*6", "R-73*2,R-27ET*2,R-27ER*6,ECM", "R-73*4,R-27ET*2,R-27ER*6", "FAB-250*6,R-73*2,R-27R*2,ECM", "R-73*2,R-27R*2,R-27ER*6,ECM", "ECM", "BetAB-500*6,R-73*2,R-27R*2,ECM", "RBK-500AO*6,R-73*2,R-27R*2,ECM", "UB-13*4,FAB-250*4,R-73*2,ECM", "S-25*4,FAB-250*4,R-73*2,ECM", "FAB-500*6,R-73*2,R-27R*2,ECM", "B-8*4,FAB-250*4,R-73*2,ECM", "S-25*4,FAB-500*4,R-73*4", "CAS S-8KOM rockets + FAB500", "CAS S-8OFP rockets + FAB500", "CAS S-13 Rockets + FAB500", "CAS S-13 Rockets + FAB100", "CAS S-8KOM rockets + FAB250", "CAS S-25 Rockets + FAB500", "CAS S-8KOM rockets + RBK500 PTAB10", "CAS S-8KOM rockets + RBK500 PTAB1"], "Su-34": ["UB-13*4,FAB-250*4,R-73*2,ECM", "FAB-100*28,R-73*2,ECM", "BetAB-500*8,R-73*2,ECM", "Kh-29L*4,R-73*2,R-77*2,ECM", "KAB-500*4,R-73*2,R-77*2,ECM", "RBK-250 PTAB-2.5M*8,R-73*2,ECM", "FAB-250*8,R-73*2,ECM", "ECM", "Kh-29T*4,R-73*2,R-77*2,ECM", "RBK-500 PTAB-10-5*8,R-73*2,ECM", "FAB-1500*3,R-73*2,R-77*2,ECM", "Kh-59M*2,R-73*2,R-77*2,ECM", "B-8*6,R-73*2,R-27R*2,ECM", "FAB-500*8,R-73*2,ECM", "KAB-1500*2,R-73*2,R-77*2,ECM", "Kh-29T*4,R-73*2,R-27R*2,ECM", "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", "Kh-31A*6,R-73*2,R-27R*2,ECM", "Kh-31P*4,R-73*2,R-27R*2,ECM", "Kh-29L*4,R-73*2,R-27R*2,ECM"], "Tornado GR4": ["AIM-9M*2, Fuel*2, ECM", "ALARM*4, Fuel*2, ECM", "GBU-16*2, AIM-9M*2, Fuel*2, ECM", "BL755*4, AIM-9M*2, Fuel*2, ECM", "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM"], "Tornado IDS": ["Kormoran*2,AIM-9*2,Fuel*2", "GBU-16*2,AIM-9*2,Fuel*2", "Fuel*2", "AGM-88*4,AIM-9*2,ECM", "AGM-88*2,AIM-9*2,Fuel*2,ECM", "Kormoran*4,AIM-9*2", "Kormoran*2,AIM-9*2,AGM-88*2", "Mk-82*4,AIM-9*2,Fuel*2"], "Tu-142": ["Kh-35*6"], "Tu-160": ["Kh-65*12"], "Tu-22M3": ["Kh-22N", "Kh-22N*2", "FAB-250*69", "FAB-500*33", "FAB-500*33, FAB-250*36", "FAB-250*33"], "Tu-95MS": ["Kh-65*6"], "UH-1H": ["M134 Minigun*2, XM158*2"], "UH-60A": [] };
|
||
},{}],18:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Unit_instances, _Unit_selectable, _Unit_selected, _Unit_preventClick, _Unit_pathMarkers, _Unit_pathPolyline, _Unit_targetsPolylines, _Unit_marker, _Unit_timer, _Unit_onClick, _Unit_onDoubleClick, _Unit_executeAction, _Unit_updateMarker, _Unit_drawPath, _Unit_clearPath, _Unit_drawTargets, _Unit_clearTargets;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Bomb = exports.Missile = exports.Weapon = exports.NavyUnit = exports.GroundUnit = exports.Helicopter = exports.Aircraft = exports.AirUnit = exports.Unit = void 0;
|
||
const leaflet_1 = require("leaflet");
|
||
const __1 = require("..");
|
||
const unitmarker_1 = require("./unitmarker");
|
||
const dcs_1 = require("../dcs/dcs");
|
||
var pathIcon = new leaflet_1.Icon({
|
||
iconUrl: 'images/marker-icon.png',
|
||
shadowUrl: 'images/marker-shadow.png',
|
||
iconAnchor: [13, 41]
|
||
});
|
||
class Unit {
|
||
static getConstructor(name) {
|
||
if (name === "GroundUnit")
|
||
return GroundUnit;
|
||
if (name === "Aircraft")
|
||
return Aircraft;
|
||
if (name === "Helicopter")
|
||
return Helicopter;
|
||
if (name === "Missile")
|
||
return Missile;
|
||
if (name === "Bomb")
|
||
return Bomb;
|
||
if (name === "NavyUnit")
|
||
return NavyUnit;
|
||
}
|
||
constructor(ID, marker) {
|
||
_Unit_instances.add(this);
|
||
this.ID = -1;
|
||
this.leader = false;
|
||
this.wingman = false;
|
||
this.wingmen = [];
|
||
this.formation = "";
|
||
this.name = "";
|
||
this.unitName = "";
|
||
this.groupName = "";
|
||
this.latitude = 0;
|
||
this.longitude = 0;
|
||
this.altitude = 0;
|
||
this.heading = 0;
|
||
this.speed = 0;
|
||
this.coalitionID = -1;
|
||
this.alive = true;
|
||
this.currentTask = "";
|
||
this.fuel = 0;
|
||
this.type = null;
|
||
this.flags = null;
|
||
this.activePath = null;
|
||
this.ammo = null;
|
||
this.targets = null;
|
||
_Unit_selectable.set(this, void 0);
|
||
_Unit_selected.set(this, false);
|
||
_Unit_preventClick.set(this, false);
|
||
_Unit_pathMarkers.set(this, []);
|
||
_Unit_pathPolyline.set(this, void 0);
|
||
_Unit_targetsPolylines.set(this, void 0);
|
||
_Unit_marker.set(this, void 0);
|
||
_Unit_timer.set(this, 0);
|
||
this.ID = ID;
|
||
__classPrivateFieldSet(this, _Unit_selectable, true, "f");
|
||
/* The marker is set by the inherited class */
|
||
__classPrivateFieldSet(this, _Unit_marker, marker, "f");
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").on('click', (e) => __classPrivateFieldGet(this, _Unit_instances, "m", _Unit_onClick).call(this, e));
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").on('dblclick', (e) => __classPrivateFieldGet(this, _Unit_instances, "m", _Unit_onDoubleClick).call(this, e));
|
||
__classPrivateFieldSet(this, _Unit_pathPolyline, new leaflet_1.Polyline([], { color: '#2d3e50', weight: 3, opacity: 0.5, smoothFactor: 1 }), "f");
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").addTo((0, __1.getMap)());
|
||
__classPrivateFieldSet(this, _Unit_targetsPolylines, [], "f");
|
||
}
|
||
update(response) {
|
||
for (let entry in response) {
|
||
// @ts-ignore
|
||
this[entry] = response[entry];
|
||
}
|
||
/* Dead units can't be selected */
|
||
this.setSelected(this.getSelected() && this.alive);
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_updateMarker).call(this);
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_clearTargets).call(this);
|
||
if (this.getSelected()) {
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_drawPath).call(this);
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_drawTargets).call(this);
|
||
}
|
||
else
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_clearPath).call(this);
|
||
/*
|
||
this.wingmen = [];
|
||
if (response["wingmenIDs"] != null)
|
||
{
|
||
for (let ID of response["wingmenIDs"])
|
||
{
|
||
this.wingmen.push(unitsManager.getUnitByID(ID));
|
||
}
|
||
}
|
||
*/
|
||
}
|
||
setSelected(selected) {
|
||
/* Only alive units can be selected. Some units are not selectable (weapons) */
|
||
if ((this.alive || !selected) && __classPrivateFieldGet(this, _Unit_selectable, "f") && __classPrivateFieldGet(this, _Unit_selected, "f") != selected) {
|
||
__classPrivateFieldSet(this, _Unit_selected, selected, "f");
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").setSelected(selected);
|
||
(0, __1.getUnitsManager)().onUnitSelection();
|
||
}
|
||
}
|
||
getSelected() {
|
||
return __classPrivateFieldGet(this, _Unit_selected, "f");
|
||
}
|
||
setSelectable(selectable) {
|
||
__classPrivateFieldSet(this, _Unit_selectable, selectable, "f");
|
||
}
|
||
getSelectable() {
|
||
return __classPrivateFieldGet(this, _Unit_selectable, "f");
|
||
}
|
||
addDestination(latlng) {
|
||
var path = {};
|
||
if (this.activePath != null) {
|
||
path = this.activePath;
|
||
path[(Object.keys(path).length + 1).toString()] = latlng;
|
||
}
|
||
else {
|
||
path = { "1": latlng };
|
||
}
|
||
(0, dcs_1.addDestination)(this.ID, path);
|
||
}
|
||
clearDestinations() {
|
||
this.activePath = null;
|
||
}
|
||
getHidden() {
|
||
return false;
|
||
}
|
||
attackUnit(targetID) {
|
||
/* Call DCS attackUnit function */
|
||
if (this.ID != targetID) {
|
||
(0, dcs_1.attackUnit)(this.ID, targetID);
|
||
}
|
||
else {
|
||
// TODO: show a message
|
||
}
|
||
}
|
||
changeSpeed(speedChange) {
|
||
(0, dcs_1.changeSpeed)(this.ID, speedChange);
|
||
}
|
||
changeAltitude(altitudeChange) {
|
||
(0, dcs_1.changeAltitude)(this.ID, altitudeChange);
|
||
}
|
||
}
|
||
exports.Unit = Unit;
|
||
_Unit_selectable = new WeakMap(), _Unit_selected = new WeakMap(), _Unit_preventClick = new WeakMap(), _Unit_pathMarkers = new WeakMap(), _Unit_pathPolyline = new WeakMap(), _Unit_targetsPolylines = new WeakMap(), _Unit_marker = new WeakMap(), _Unit_timer = new WeakMap(), _Unit_instances = new WeakSet(), _Unit_onClick = function _Unit_onClick(e) {
|
||
__classPrivateFieldSet(this, _Unit_timer, setTimeout(() => {
|
||
if (!__classPrivateFieldGet(this, _Unit_preventClick, "f")) {
|
||
if ((0, __1.getMap)().getState() === 'IDLE' || (0, __1.getMap)().getState() === 'MOVE_UNIT' || e.originalEvent.ctrlKey) {
|
||
if (!e.originalEvent.ctrlKey) {
|
||
(0, __1.getUnitsManager)().deselectAllUnits();
|
||
}
|
||
this.setSelected(true);
|
||
}
|
||
}
|
||
__classPrivateFieldSet(this, _Unit_preventClick, false, "f");
|
||
}, 200), "f");
|
||
}, _Unit_onDoubleClick = function _Unit_onDoubleClick(e) {
|
||
clearTimeout(__classPrivateFieldGet(this, _Unit_timer, "f"));
|
||
__classPrivateFieldSet(this, _Unit_preventClick, true, "f");
|
||
var options = [
|
||
'Attack',
|
||
];
|
||
//if (!this.leader && !this.wingman) {
|
||
// options.push({ 'tooltip': 'Create formation', 'src': 'formation.png', 'callback': () => { getMap().hideSelectionWheel(); /*unitsManager.createFormation(this.ID);*/ } });
|
||
//}
|
||
(0, __1.getMap)().showSelectionScroll(e.originalEvent, options, (action) => __classPrivateFieldGet(this, _Unit_instances, "m", _Unit_executeAction).call(this, action));
|
||
}, _Unit_executeAction = function _Unit_executeAction(action) {
|
||
(0, __1.getMap)().hideSelectionScroll();
|
||
if (action === "Attack")
|
||
(0, __1.getUnitsManager)().attackUnit(this.ID);
|
||
}, _Unit_updateMarker = function _Unit_updateMarker() {
|
||
/* Add the marker if not present */
|
||
if (!(0, __1.getMap)().hasLayer(__classPrivateFieldGet(this, _Unit_marker, "f")) && !this.getHidden()) {
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").addTo((0, __1.getMap)());
|
||
}
|
||
/* Hide the marker if necessary*/
|
||
if ((0, __1.getMap)().hasLayer(__classPrivateFieldGet(this, _Unit_marker, "f")) && this.getHidden()) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_marker, "f"));
|
||
}
|
||
else {
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").setLatLng(new leaflet_1.LatLng(this.latitude, this.longitude));
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").draw({
|
||
heading: this.heading,
|
||
speed: this.speed,
|
||
altitude: this.altitude,
|
||
alive: this.alive
|
||
});
|
||
}
|
||
}, _Unit_drawPath = function _Unit_drawPath() {
|
||
if (this.activePath != null) {
|
||
var _points = [];
|
||
_points.push(new leaflet_1.LatLng(this.latitude, this.longitude));
|
||
/* Add markers if missing */
|
||
while (__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length < Object.keys(this.activePath).length) {
|
||
var marker = new leaflet_1.Marker([0, 0], { icon: pathIcon }).addTo((0, __1.getMap)());
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f").push(marker);
|
||
}
|
||
/* Remove markers if too many */
|
||
while (__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length > Object.keys(this.activePath).length) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length - 1]);
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f").splice(__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length - 1, 1);
|
||
}
|
||
/* Update the position of the existing markers (to avoid creating markers uselessly) */
|
||
for (let WP in this.activePath) {
|
||
var destination = this.activePath[WP];
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[parseInt(WP) - 1].setLatLng([destination.lat, destination.lng]);
|
||
_points.push(new leaflet_1.LatLng(destination.lat, destination.lng));
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").setLatLngs(_points);
|
||
}
|
||
}
|
||
}, _Unit_clearPath = function _Unit_clearPath() {
|
||
for (let WP in __classPrivateFieldGet(this, _Unit_pathMarkers, "f")) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[WP]);
|
||
}
|
||
__classPrivateFieldSet(this, _Unit_pathMarkers, [], "f");
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").setLatLngs([]);
|
||
}, _Unit_drawTargets = function _Unit_drawTargets() {
|
||
for (let typeIndex in this.targets) {
|
||
for (let index in this.targets[typeIndex]) {
|
||
var targetData = this.targets[typeIndex][index];
|
||
var target = (0, __1.getUnitsManager)().getUnitByID(targetData.object["id_"]);
|
||
if (target != null) {
|
||
var startLatLng = new leaflet_1.LatLng(this.latitude, this.longitude);
|
||
var endLatLng = new leaflet_1.LatLng(target.latitude, target.longitude);
|
||
var color;
|
||
if (typeIndex === "radar") {
|
||
color = "#FFFF00";
|
||
}
|
||
else if (typeIndex === "visual") {
|
||
color = "#FF00FF";
|
||
}
|
||
else if (typeIndex === "rwr") {
|
||
color = "#00FF00";
|
||
}
|
||
else {
|
||
color = "#FFFFFF";
|
||
}
|
||
var targetPolyline = new leaflet_1.Polyline([startLatLng, endLatLng], { color: color, weight: 3, opacity: 1, smoothFactor: 1 });
|
||
targetPolyline.addTo((0, __1.getMap)());
|
||
__classPrivateFieldGet(this, _Unit_targetsPolylines, "f").push(targetPolyline);
|
||
}
|
||
}
|
||
}
|
||
}, _Unit_clearTargets = function _Unit_clearTargets() {
|
||
for (let index in __classPrivateFieldGet(this, _Unit_targetsPolylines, "f")) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_targetsPolylines, "f")[index]);
|
||
}
|
||
};
|
||
class AirUnit extends Unit {
|
||
getHidden() {
|
||
if (this.alive) {
|
||
if (this.flags.user && (0, __1.getVisibilitySettings)().user === "hidden")
|
||
return true;
|
||
else if (!this.flags.user && (0, __1.getVisibilitySettings)().ai === "hidden")
|
||
return true;
|
||
}
|
||
else
|
||
return (0, __1.getVisibilitySettings)().dead === "hidden";
|
||
return false;
|
||
}
|
||
}
|
||
exports.AirUnit = AirUnit;
|
||
class Aircraft extends AirUnit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.AircraftMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Aircraft = Aircraft;
|
||
class Helicopter extends AirUnit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.HelicopterMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Helicopter = Helicopter;
|
||
class GroundUnit extends Unit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.GroundUnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
getHidden() {
|
||
if (this.alive) {
|
||
if (this.flags.user && (0, __1.getVisibilitySettings)().user === "hidden")
|
||
return true;
|
||
else if (!this.flags.user && (0, __1.getVisibilitySettings)().ai === "hidden")
|
||
return true;
|
||
}
|
||
else
|
||
return (0, __1.getVisibilitySettings)().dead === "hidden";
|
||
return false;
|
||
}
|
||
}
|
||
exports.GroundUnit = GroundUnit;
|
||
class NavyUnit extends Unit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.NavyUnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
getHidden() {
|
||
if (this.alive) {
|
||
if (this.flags.user && (0, __1.getVisibilitySettings)().user === "hidden")
|
||
return true;
|
||
else if (!this.flags.user && (0, __1.getVisibilitySettings)().ai === "hidden")
|
||
return true;
|
||
}
|
||
else
|
||
return (0, __1.getVisibilitySettings)().dead === "hidden";
|
||
return false;
|
||
}
|
||
}
|
||
exports.NavyUnit = NavyUnit;
|
||
class Weapon extends Unit {
|
||
constructor(ID, marker) {
|
||
super(ID, marker);
|
||
this.setSelectable(false);
|
||
}
|
||
getHidden() {
|
||
if (this.alive) {
|
||
if (!this.flags.user && (0, __1.getVisibilitySettings)().weapon === "hidden")
|
||
return true;
|
||
}
|
||
else
|
||
return (0, __1.getVisibilitySettings)().dead === "hidden";
|
||
return false;
|
||
}
|
||
}
|
||
exports.Weapon = Weapon;
|
||
class Missile extends Weapon {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.WeaponMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Missile = Missile;
|
||
class Bomb extends Weapon {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.WeaponMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Bomb = Bomb;
|
||
},{"..":9,"../dcs/dcs":8,"./unitmarker":20,"leaflet":1}],19:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.unitTypes = void 0;
|
||
exports.unitTypes = {};
|
||
/* NAVY */
|
||
exports.unitTypes.navy = {};
|
||
exports.unitTypes.navy.blue = [
|
||
"VINSON",
|
||
"PERRY",
|
||
"TICONDEROG"
|
||
];
|
||
exports.unitTypes.navy.red = [
|
||
"ALBATROS",
|
||
"KUZNECOW",
|
||
"MOLNIYA",
|
||
"MOSCOW",
|
||
"NEUSTRASH",
|
||
"PIOTR",
|
||
"REZKY"
|
||
];
|
||
exports.unitTypes.navy.civil = [
|
||
"ELNYA",
|
||
"Dry-cargo ship-2",
|
||
"Dry-cargo ship-1",
|
||
"ZWEZDNY"
|
||
];
|
||
exports.unitTypes.navy.submarine = [
|
||
"KILO",
|
||
"SOM"
|
||
];
|
||
exports.unitTypes.navy.speedboat = [
|
||
"speedboat"
|
||
];
|
||
/* VEHICLES (GROUND) */
|
||
exports.unitTypes.vehicles = [];
|
||
exports.unitTypes.vehicles.Howitzers = [
|
||
"2B11 mortar",
|
||
"SAU Gvozdika",
|
||
"SAU Msta",
|
||
"SAU Akatsia",
|
||
"SAU 2-C9",
|
||
"M-109"
|
||
];
|
||
exports.unitTypes.vehicles.IFV = [
|
||
"AAV7",
|
||
"BMD-1",
|
||
"BMP-1",
|
||
"BMP-2",
|
||
"BMP-3",
|
||
"Boman",
|
||
"BRDM-2",
|
||
"BTR-80",
|
||
"BTR_D",
|
||
"Bunker",
|
||
"Cobra",
|
||
"LAV-25",
|
||
"M1043 HMMWV Armament",
|
||
"M1045 HMMWV TOW",
|
||
"M1126 Stryker ICV",
|
||
"M-113",
|
||
"M1134 Stryker ATGM",
|
||
"M-2 Bradley",
|
||
"Marder",
|
||
"MCV-80",
|
||
"MTLB",
|
||
"Paratrooper RPG-16",
|
||
"Paratrooper AKS-74",
|
||
"Sandbox",
|
||
"Soldier AK",
|
||
"Infantry AK",
|
||
"Soldier M249",
|
||
"Soldier M4",
|
||
"Soldier M4 GRG",
|
||
"Soldier RPG",
|
||
"TPZ"
|
||
];
|
||
exports.unitTypes.vehicles.MLRS = [
|
||
"Grad-URAL",
|
||
"Uragan_BM-27",
|
||
"Smerch",
|
||
"MLRS"
|
||
];
|
||
exports.unitTypes.vehicles.SAM = [
|
||
"2S6 Tunguska",
|
||
"Kub 2P25 ln",
|
||
"5p73 s-125 ln",
|
||
"S-300PS 5P85C ln",
|
||
"S-300PS 5P85D ln",
|
||
"SA-11 Buk LN 9A310M1",
|
||
"Osa 9A33 ln",
|
||
"Tor 9A331",
|
||
"Strela-10M3",
|
||
"Strela-1 9P31",
|
||
"SA-11 Buk CC 9S470M1",
|
||
"SA-8 Osa LD 9T217",
|
||
"Patriot AMG",
|
||
"Patriot ECS",
|
||
"Gepard",
|
||
"Hawk pcp",
|
||
"SA-18 Igla manpad",
|
||
"SA-18 Igla comm",
|
||
"Igla manpad INS",
|
||
"SA-18 Igla-S manpad",
|
||
"SA-18 Igla-S comm",
|
||
"Vulcan",
|
||
"Hawk ln",
|
||
"M48 Chaparral",
|
||
"M6 Linebacker",
|
||
"Patriot ln",
|
||
"M1097 Avenger",
|
||
"Patriot EPP",
|
||
"Patriot cp",
|
||
"Roland ADS",
|
||
"S-300PS 54K6 cp",
|
||
"Stinger manpad GRG",
|
||
"Stinger manpad dsr",
|
||
"Stinger comm dsr",
|
||
"Stinger manpad",
|
||
"Stinger comm",
|
||
"ZSU-23-4 Shilka",
|
||
"ZU-23 Emplacement Closed",
|
||
"ZU-23 Emplacement",
|
||
"ZU-23 Closed Insurgent",
|
||
"Ural-375 ZU-23 Insurgent",
|
||
"ZU-23 Insurgent",
|
||
"Ural-375 ZU-23"
|
||
];
|
||
exports.unitTypes.vehicles.Radar = [
|
||
"1L13 EWR",
|
||
"Kub 1S91 str",
|
||
"S-300PS 40B6M tr",
|
||
"S-300PS 40B6MD sr",
|
||
"55G6 EWR",
|
||
"S-300PS 64H6E sr",
|
||
"SA-11 Buk SR 9S18M1",
|
||
"Dog Ear radar",
|
||
"Hawk tr",
|
||
"Hawk sr",
|
||
"Patriot str",
|
||
"Hawk cwar",
|
||
"p-19 s-125 sr",
|
||
"Roland Radar",
|
||
"snr s-125 tr"
|
||
];
|
||
exports.unitTypes.vehicles.Structures = [
|
||
"house1arm",
|
||
"house2arm",
|
||
"outpost_road",
|
||
"outpost",
|
||
"houseA_arm"
|
||
];
|
||
exports.unitTypes.vehicles.Tanks = [
|
||
"Challenger2",
|
||
"Leclerc",
|
||
"Leopard1A3",
|
||
"Leopard-2",
|
||
"M-60",
|
||
"M1128 Stryker MGS",
|
||
"M-1 Abrams",
|
||
"T-55",
|
||
"T-72B",
|
||
"T-80UD",
|
||
"T-90"
|
||
];
|
||
exports.unitTypes.vehicles.Unarmed = [
|
||
"Ural-4320 APA-5D",
|
||
"ATMZ-5",
|
||
"ATZ-10",
|
||
"GAZ-3307",
|
||
"GAZ-3308",
|
||
"GAZ-66",
|
||
"M978 HEMTT Tanker",
|
||
"HEMTT TFFT",
|
||
"IKARUS Bus",
|
||
"KAMAZ Truck",
|
||
"LAZ Bus",
|
||
"Hummer",
|
||
"M 818",
|
||
"MAZ-6303",
|
||
"Predator GCS",
|
||
"Predator TrojanSpirit",
|
||
"Suidae",
|
||
"Tigr_233036",
|
||
"Trolley bus",
|
||
"UAZ-469",
|
||
"Ural ATsP-6",
|
||
"Ural-375 PBU",
|
||
"Ural-375",
|
||
"Ural-4320-31",
|
||
"Ural-4320T",
|
||
"VAZ Car",
|
||
"ZiL-131 APA-80",
|
||
"SKP-11",
|
||
"ZIL-131 KUNG",
|
||
"ZIL-4331"
|
||
];
|
||
/* AIRPLANES */
|
||
exports.unitTypes.air = {};
|
||
exports.unitTypes.air.CAP = [
|
||
"F-4E",
|
||
"F/A-18C",
|
||
"MiG-29S",
|
||
"F-14A",
|
||
"Su-27",
|
||
"MiG-23MLD",
|
||
"Su-33",
|
||
"MiG-25RBT",
|
||
"Su-30",
|
||
"MiG-31",
|
||
"Mirage 2000-5",
|
||
"F-15C",
|
||
"F-5E",
|
||
"F-16C bl.52d",
|
||
];
|
||
exports.unitTypes.air.CAS = [
|
||
"Tornado IDS",
|
||
"F-4E",
|
||
"F/A-18C",
|
||
"MiG-27K",
|
||
"A-10C",
|
||
"Su-25",
|
||
"Su-34",
|
||
"Su-17M4",
|
||
"F-15E",
|
||
];
|
||
exports.unitTypes.air.strike = [
|
||
"Tu-22M3",
|
||
"B-52H",
|
||
"F-111F",
|
||
"Tu-95MS",
|
||
"Su-24M",
|
||
"Tu-160",
|
||
"F-117A",
|
||
"B-1B",
|
||
"Tu-142",
|
||
];
|
||
exports.unitTypes.air.tanker = [
|
||
"S-3B Tanker",
|
||
"KC-135",
|
||
"IL-78M",
|
||
];
|
||
exports.unitTypes.air.awacs = [
|
||
"A-50",
|
||
"E-3A",
|
||
"E-2D",
|
||
];
|
||
exports.unitTypes.air.drone = [
|
||
"MQ-1A Predator",
|
||
"MQ-9 Reaper",
|
||
];
|
||
exports.unitTypes.air.transport = [
|
||
"C-130",
|
||
"An-26B",
|
||
"An-30M",
|
||
"C-17A",
|
||
"IL-76MD",
|
||
];
|
||
},{}],20:[function(require,module,exports){
|
||
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
}) : function(o, v) {
|
||
o["default"] = v;
|
||
});
|
||
var __importStar = (this && this.__importStar) || function (mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
__setModuleDefault(result, mod);
|
||
return result;
|
||
};
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitMarker_instances, _UnitMarker_unitName, _UnitMarker_name, _UnitMarker_human, _UnitMarker_alive, _UnitMarker_selected, _UnitMarker_computeMarkerCode;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.WeaponMarker = exports.NavyUnitMarker = exports.GroundUnitMarker = exports.HelicopterMarker = exports.AircraftMarker = exports.AirUnitMarker = exports.UnitMarker = void 0;
|
||
const L = __importStar(require("leaflet"));
|
||
const milsymbol_1 = require("milsymbol");
|
||
const __1 = require("..");
|
||
class UnitMarker extends L.Marker {
|
||
constructor(options) {
|
||
super(new L.LatLng(0, 0), { riseOnHover: true });
|
||
_UnitMarker_instances.add(this);
|
||
_UnitMarker_unitName.set(this, void 0);
|
||
_UnitMarker_name.set(this, void 0);
|
||
_UnitMarker_human.set(this, void 0);
|
||
_UnitMarker_alive.set(this, true);
|
||
_UnitMarker_selected.set(this, false);
|
||
__classPrivateFieldSet(this, _UnitMarker_unitName, options.unitName, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_name, options.name, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_human, options.human, "f");
|
||
var symbol = new milsymbol_1.Symbol(__classPrivateFieldGet(this, _UnitMarker_instances, "m", _UnitMarker_computeMarkerCode).call(this, options), { size: 25 });
|
||
var img = symbol.asCanvas().toDataURL('image/png');
|
||
var coalition = "";
|
||
if (options.coalitionID == 1)
|
||
coalition = "red";
|
||
else if (options.coalitionID == 2)
|
||
coalition = "blue";
|
||
else
|
||
coalition = "neutral";
|
||
var icon = new L.DivIcon({
|
||
html: `<table class="unit-marker-container" id="container">
|
||
<tr>
|
||
<td>
|
||
<div class="${coalition}" id="background"></div>
|
||
<div class="${coalition}" id="ring"></div>
|
||
<div class="unit-marker-icon" id="icon"><img src="${img}"></div>
|
||
<div class="unit-marker-unitName" id="unitName">${__classPrivateFieldGet(this, _UnitMarker_unitName, "f")}</div>
|
||
<div class="unit-marker-altitude" id="altitude"></div>
|
||
<div class="unit-marker-speed" id="speed"></div>
|
||
<div class="unit-marker-name" id="name">${__classPrivateFieldGet(this, _UnitMarker_name, "f")}</div>
|
||
</td>
|
||
</tr>
|
||
</table>`,
|
||
className: 'unit-marker'
|
||
});
|
||
this.setIcon(icon);
|
||
}
|
||
onAdd(map) {
|
||
super.onAdd(map);
|
||
this.addEventListener('mouseover', function (e) { var _a; (_a = e.target) === null || _a === void 0 ? void 0 : _a.setHovered(true); });
|
||
this.addEventListener('mouseout', function (e) { var _a; (_a = e.target) === null || _a === void 0 ? void 0 : _a.setHovered(false); });
|
||
return this;
|
||
}
|
||
draw(data) {
|
||
var _a, _b;
|
||
__classPrivateFieldSet(this, _UnitMarker_alive, data.alive, "f");
|
||
var element = this.getElement();
|
||
if (element != null) {
|
||
var nameDiv = element.querySelector("#name");
|
||
var unitNameDiv = element.querySelector("#unitName");
|
||
var container = element.querySelector("#container");
|
||
var icon = element.querySelector("#icon");
|
||
var altitudeDiv = element.querySelector("#altitude");
|
||
var speedDiv = element.querySelector("#speed");
|
||
/* If visibility is full show all labels */
|
||
nameDiv.style.display = '';
|
||
unitNameDiv.style.display = '';
|
||
altitudeDiv.style.display = '';
|
||
speedDiv.style.display = '';
|
||
/* If visibility is partial shown only icon and unit name. If none, shown only icon. */
|
||
if (this.getVisibility() === "partial" || this.getVisibility() === "none") {
|
||
unitNameDiv.style.display = 'none';
|
||
altitudeDiv.style.display = 'none';
|
||
speedDiv.style.display = 'none';
|
||
}
|
||
if (this.getVisibility() === "none")
|
||
nameDiv.style.display = 'none';
|
||
nameDiv.style.left = (-(nameDiv.offsetWidth - container.offsetWidth) / 2) + "px";
|
||
unitNameDiv.style.left = (-(unitNameDiv.offsetWidth - container.offsetWidth) / 2) + "px";
|
||
icon.style.transform = "rotate(" + data.heading + "rad)";
|
||
altitudeDiv.innerHTML = String(Math.round(data.altitude / 0.3048 / 100) / 10);
|
||
speedDiv.innerHTML = String(Math.round(data.speed * 1.94384));
|
||
if (!__classPrivateFieldGet(this, _UnitMarker_alive, "f")) {
|
||
(_b = (_a = this.getElement()) === null || _a === void 0 ? void 0 : _a.querySelector("#icon")) === null || _b === void 0 ? void 0 : _b.classList.add("unit-marker-dead");
|
||
}
|
||
}
|
||
}
|
||
setSelected(selected) {
|
||
var _a, _b, _c, _d, _e, _f;
|
||
__classPrivateFieldSet(this, _UnitMarker_selected, selected, "f");
|
||
(_b = (_a = this.getElement()) === null || _a === void 0 ? void 0 : _a.querySelector("#icon")) === null || _b === void 0 ? void 0 : _b.classList.remove("unit-marker-hovered");
|
||
(_d = (_c = this.getElement()) === null || _c === void 0 ? void 0 : _c.querySelector("#ring")) === null || _d === void 0 ? void 0 : _d.classList.toggle("unit-marker-selected", selected);
|
||
(_f = (_e = this.getElement()) === null || _e === void 0 ? void 0 : _e.querySelector("#background")) === null || _f === void 0 ? void 0 : _f.classList.toggle("unit-marker-selected", selected);
|
||
}
|
||
getSelected() {
|
||
return __classPrivateFieldGet(this, _UnitMarker_selected, "f");
|
||
}
|
||
setHovered(hovered) {
|
||
var _a, _b;
|
||
(_b = (_a = this.getElement()) === null || _a === void 0 ? void 0 : _a.querySelector("#icon")) === null || _b === void 0 ? void 0 : _b.classList.toggle("unit-marker-hovered", hovered && __classPrivateFieldGet(this, _UnitMarker_alive, "f"));
|
||
}
|
||
getHuman() {
|
||
return __classPrivateFieldGet(this, _UnitMarker_human, "f");
|
||
}
|
||
getAlive() {
|
||
return __classPrivateFieldGet(this, _UnitMarker_alive, "f");
|
||
}
|
||
getVisibility() {
|
||
return "full";
|
||
}
|
||
}
|
||
exports.UnitMarker = UnitMarker;
|
||
_UnitMarker_unitName = new WeakMap(), _UnitMarker_name = new WeakMap(), _UnitMarker_human = new WeakMap(), _UnitMarker_alive = new WeakMap(), _UnitMarker_selected = new WeakMap(), _UnitMarker_instances = new WeakSet(), _UnitMarker_computeMarkerCode = function _UnitMarker_computeMarkerCode(options) {
|
||
var identity = "00";
|
||
var set = "00";
|
||
var entity = "00";
|
||
var entityType = "00";
|
||
var entitySubtype = "00";
|
||
var sectorOneModifier = "00";
|
||
var sectorTwoModifier = "00";
|
||
/* Identity */
|
||
if (options.coalitionID == 1)
|
||
identity = "06"; /* Hostile */
|
||
else if (options.coalitionID == 2)
|
||
identity = "03"; /* Friendly */
|
||
else
|
||
identity = "04"; /* Neutral */
|
||
/* Air */
|
||
if (options.type.level1 == 1) {
|
||
set = "01";
|
||
entity = "11";
|
||
if (options.type.level2 == 1)
|
||
entityType = "01";
|
||
else if (options.type.level2 == 1)
|
||
entityType = "02";
|
||
if (options.type.level3 == 1)
|
||
entitySubtype = "04";
|
||
else if (options.type.level3 == 2)
|
||
entitySubtype = "05";
|
||
else if (options.type.level3 == 3)
|
||
entitySubtype = "04";
|
||
else if (options.type.level3 == 4)
|
||
entitySubtype = "02";
|
||
else if (options.type.level3 == 5)
|
||
entitySubtype = "00";
|
||
else if (options.type.level3 == 6)
|
||
entitySubtype = "00";
|
||
}
|
||
/* Ground */
|
||
else if (options.type.level1 == 2) {
|
||
set = "10";
|
||
entity = "12";
|
||
entityType = "05";
|
||
}
|
||
/* Navy */
|
||
else if (options.type.level1 == 3)
|
||
set = "30";
|
||
/* Weapon */
|
||
else if (options.type.level1 == 4) {
|
||
set = "02";
|
||
entity = "11";
|
||
if (options.type.level3 == 7) {
|
||
sectorOneModifier = "01";
|
||
sectorTwoModifier = "01";
|
||
}
|
||
else if (options.type.level3 == 8) {
|
||
sectorOneModifier = "01";
|
||
sectorTwoModifier = "02";
|
||
}
|
||
else if (options.type.level3 == 34) {
|
||
sectorOneModifier = "02";
|
||
sectorTwoModifier = "01";
|
||
}
|
||
else if (options.type.level3 == 11) {
|
||
sectorOneModifier = "02";
|
||
sectorTwoModifier = "02";
|
||
}
|
||
}
|
||
return `10${identity}${set}0000${entity}${entityType}${entitySubtype}${sectorOneModifier}${sectorTwoModifier}`;
|
||
};
|
||
class AirUnitMarker extends UnitMarker {
|
||
getVisibility() {
|
||
if (this.getSelected())
|
||
return "full";
|
||
if (this.getHuman())
|
||
return (0, __1.getVisibilitySettings)().user;
|
||
else if (!this.getAlive())
|
||
return "none";
|
||
else
|
||
return (0, __1.getVisibilitySettings)().ai;
|
||
}
|
||
}
|
||
exports.AirUnitMarker = AirUnitMarker;
|
||
class AircraftMarker extends AirUnitMarker {
|
||
}
|
||
exports.AircraftMarker = AircraftMarker;
|
||
class HelicopterMarker extends AirUnitMarker {
|
||
}
|
||
exports.HelicopterMarker = HelicopterMarker;
|
||
class GroundUnitMarker extends UnitMarker {
|
||
/* Are user driven units recognized as human? */
|
||
getVisibility() {
|
||
if (this.getSelected())
|
||
return "full";
|
||
if (this.getHuman())
|
||
return (0, __1.getVisibilitySettings)().user;
|
||
else if (!this.getAlive())
|
||
return "none";
|
||
else
|
||
return (0, __1.getVisibilitySettings)().ai;
|
||
}
|
||
}
|
||
exports.GroundUnitMarker = GroundUnitMarker;
|
||
class NavyUnitMarker extends UnitMarker {
|
||
getVisibility() {
|
||
if (this.getSelected())
|
||
return "full";
|
||
if (!this.getAlive())
|
||
return "none";
|
||
else
|
||
return (0, __1.getVisibilitySettings)().ai;
|
||
}
|
||
}
|
||
exports.NavyUnitMarker = NavyUnitMarker;
|
||
class WeaponMarker extends UnitMarker {
|
||
getVisibility() {
|
||
if (this.getSelected())
|
||
return "full";
|
||
if (!this.getAlive())
|
||
return "none";
|
||
else
|
||
return (0, __1.getVisibilitySettings)().weapon;
|
||
}
|
||
}
|
||
exports.WeaponMarker = WeaponMarker;
|
||
},{"..":9,"leaflet":1,"milsymbol":2}],21:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitsManager_units, _UnitsManager_copiedUnits;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.UnitsManager = void 0;
|
||
const leaflet_1 = require("leaflet");
|
||
const __1 = require("..");
|
||
const unit_1 = require("./unit");
|
||
class UnitsManager {
|
||
constructor() {
|
||
_UnitsManager_units.set(this, void 0);
|
||
_UnitsManager_copiedUnits.set(this, void 0);
|
||
__classPrivateFieldSet(this, _UnitsManager_units, {}, "f");
|
||
__classPrivateFieldSet(this, _UnitsManager_copiedUnits, [], "f");
|
||
}
|
||
addUnit(ID, data) {
|
||
/* The name of the unit category is exactly the same as the constructor name */
|
||
var constructor = unit_1.Unit.getConstructor(data.category);
|
||
if (constructor != undefined) {
|
||
var options = {
|
||
unitName: data.unitName,
|
||
name: data.name,
|
||
human: data.human,
|
||
coalitionID: data.coalitionID,
|
||
type: data.type
|
||
};
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID] = new constructor(ID, options);
|
||
}
|
||
}
|
||
getUnitByID(ID) {
|
||
return __classPrivateFieldGet(this, _UnitsManager_units, "f")[ID];
|
||
}
|
||
removeUnit(ID) {
|
||
}
|
||
deselectAllUnits() {
|
||
for (let ID in __classPrivateFieldGet(this, _UnitsManager_units, "f")) {
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].setSelected(false);
|
||
}
|
||
}
|
||
update(data) {
|
||
for (let ID in data["units"]) {
|
||
/* Create the unit if missing from the local array, then update the data. Drawing is handled by leaflet. */
|
||
if (!(ID in __classPrivateFieldGet(this, _UnitsManager_units, "f"))) {
|
||
this.addUnit(parseInt(ID), data["units"][ID]);
|
||
}
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[parseInt(ID)].update(data["units"][ID]);
|
||
}
|
||
if (this.getSelectedUnits().length == 1) {
|
||
(0, __1.getUnitInfoPanel)().show();
|
||
(0, __1.getUnitInfoPanel)().update(this.getSelectedUnits()[0]);
|
||
}
|
||
else {
|
||
(0, __1.getUnitInfoPanel)().hide();
|
||
}
|
||
}
|
||
onUnitSelection() {
|
||
if (this.getSelectedUnits().length > 0) {
|
||
(0, __1.getMap)().setState("MOVE_UNIT");
|
||
//unitControlPanel.setEnabled(true);
|
||
}
|
||
else {
|
||
(0, __1.getMap)().setState("IDLE");
|
||
//unitControlPanel.setEnabled(false);
|
||
}
|
||
}
|
||
selectFromBounds(bounds) {
|
||
this.deselectAllUnits();
|
||
for (let ID in __classPrivateFieldGet(this, _UnitsManager_units, "f")) {
|
||
var latlng = new leaflet_1.LatLng(__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].latitude, __classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].longitude);
|
||
if (bounds.contains(latlng)) {
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].setSelected(true);
|
||
}
|
||
}
|
||
}
|
||
getSelectedUnits() {
|
||
var selectedUnits = [];
|
||
for (let ID in __classPrivateFieldGet(this, _UnitsManager_units, "f")) {
|
||
if (__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].getSelected()) {
|
||
selectedUnits.push(__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID]);
|
||
}
|
||
}
|
||
return selectedUnits;
|
||
}
|
||
addDestination(latlng) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.addDestination(latlng);
|
||
}
|
||
}
|
||
clearDestinations() {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.clearDestinations();
|
||
}
|
||
}
|
||
selectedUnitsChangeSpeed(speedChange) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
selectedUnits[idx].changeSpeed(speedChange);
|
||
}
|
||
}
|
||
selectedUnitsChangeAltitude(altitudeChange) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
selectedUnits[idx].changeAltitude(altitudeChange);
|
||
}
|
||
}
|
||
// handleKeyEvent(e)
|
||
// {
|
||
// if (e.originalEvent.code === 'KeyC' && e.originalEvent.ctrlKey)
|
||
// {
|
||
// this.copyUnits();
|
||
// }
|
||
// else if (e.originalEvent.code === 'KeyV' && e.originalEvent.ctrlKey)
|
||
// {
|
||
// this.pasteUnits();
|
||
// }
|
||
// }
|
||
// copyUnits()
|
||
// {
|
||
// this.#copiedUnits = this.getSelectedUnits();
|
||
// }
|
||
// pasteUnits()
|
||
// {
|
||
// for (let idx in this.#copiedUnits)
|
||
// {
|
||
// var unit = this.#copiedUnits[idx];
|
||
// cloneUnit(unit.ID);
|
||
// }
|
||
// }
|
||
attackUnit(ID) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
/* If a unit is a wingman, send the command to its leader */
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.attackUnit(ID);
|
||
}
|
||
}
|
||
}
|
||
exports.UnitsManager = UnitsManager;
|
||
_UnitsManager_units = new WeakMap(), _UnitsManager_copiedUnits = new WeakMap();
|
||
},{"..":9,"./unit":18,"leaflet":1}]},{},[9])
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQtc3JjLmpzIiwibm9kZV9tb2R1bGVzL21pbHN5bWJvbC9kaXN0L21pbHN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJzcmMvY29udHJvbHMvYnV0dG9uLnRzIiwic3JjL2NvbnRyb2xzL2Ryb3Bkb3duLnRzIiwic3JjL2NvbnRyb2xzL3NlbGVjdGlvbnNjcm9sbC50cyIsInNyYy9jb250cm9scy9zZWxlY3Rpb253aGVlbC50cyIsInNyYy9kY3MvZGNzLnRzIiwic3JjL2luZGV4LnRzIiwic3JjL21hcC9ib3hzZWxlY3QudHMiLCJzcmMvbWFwL21hcC50cyIsInNyYy9taXNzaW9uZGF0YS9haXJiYXNlbWFya2VyLnRzIiwic3JjL21pc3Npb25kYXRhL21pc3Npb25kYXRhLnRzIiwic3JjL290aGVyL3V0aWxzLnRzIiwic3JjL3BhbmVscy9jb25uZWN0aW9uc3RhdHVzcGFuZWwudHMiLCJzcmMvcGFuZWxzL3VuaXRpbmZvcGFuZWwudHMiLCJzcmMvdW5pdHMvcGF5bG9hZE5hbWVzLnRzIiwic3JjL3VuaXRzL3VuaXQudHMiLCJzcmMvdW5pdHMvdW5pdFR5cGVzLnRzIiwic3JjL3VuaXRzL3VuaXRtYXJrZXIudHMiLCJzcmMvdW5pdHMvdW5pdHNtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDam5jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4TEEsTUFBYSxNQUFNO0lBT2YsWUFBWSxFQUFVLEVBQUUsSUFBYyxFQUFFLFFBQTBCOztRQU5sRSxvQ0FBK0I7UUFDL0IsK0JBQWdCO1FBQ2hCLG1DQUE0QjtRQUM1Qiw4QkFBVTtRQUNWLHdCQUFpQixDQUFDLEVBQUM7UUFHZix1QkFBQSxJQUFJLHFCQUFjLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUM5Qyx1QkFBQSxJQUFJLGdCQUFTLElBQUksTUFBQSxDQUFDO1FBQ2xCLHVCQUFBLElBQUksb0JBQWEsUUFBUSxNQUFBLENBQUM7UUFDMUIsSUFBSSx1QkFBQSxJQUFJLHlCQUFXLElBQUksSUFBSSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksZUFBUSxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFBLENBQUM7WUFDMUMsdUJBQUEsSUFBSSxtQkFBSyxDQUFDLEdBQUcsR0FBRyx1QkFBQSxJQUFJLG9CQUFNLENBQUMsdUJBQUEsSUFBSSxxQkFBTyxDQUFDLENBQUM7WUFDeEMsdUJBQUEsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLG1CQUFLLENBQUMsQ0FBQztZQUN2Qyx1QkFBQSxJQUFJLHlCQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksMENBQVMsTUFBYixJQUFJLENBQVcsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLElBQUksS0FBSyxHQUFHLHVCQUFBLElBQUksb0JBQU0sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsdUJBQUEsSUFBSSxpQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQix1QkFBQSxJQUFJLG1CQUFLLENBQUMsR0FBRyxHQUFHLHVCQUFBLElBQUksb0JBQU0sQ0FBQyx1QkFBQSxJQUFJLHFCQUFPLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyx1QkFBQSxJQUFJLHFCQUFPLENBQUM7SUFDdkIsQ0FBQztDQVNKO0FBckNELHdCQXFDQzs7SUFOTyxJQUFJLHVCQUFBLElBQUksbUJBQUssSUFBSSxJQUFJLEVBQUU7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBQSxJQUFJLHFCQUFPLEdBQUcsdUJBQUEsSUFBSSxvQkFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUFBLElBQUkscUJBQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksdUJBQUEsSUFBSSx3QkFBVTtZQUNkLHVCQUFBLElBQUksd0JBQVUsTUFBZCxJQUFJLEVBQVcsdUJBQUEsSUFBSSxxQkFBTyxDQUFDLENBQUM7S0FDbkM7QUFDTCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDTCxNQUFhLFFBQVE7SUFPakIsWUFBWSxFQUFVLEVBQUUsT0FBaUIsRUFBRSxRQUEwQjs7UUFOckUsc0NBQStCO1FBQy9CLG9DQUFtQjtRQUNuQixpQ0FBZ0I7UUFDaEIsb0NBQXVCO1FBQ3ZCLHFDQUE2QjtRQUd6Qix1QkFBQSxJQUFJLHVCQUFjLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUM5Qyx1QkFBQSxJQUFJLHFCQUFZLE9BQU8sTUFBQSxDQUFDO1FBQ3hCLHVCQUFBLElBQUksc0JBQWEsUUFBUSxNQUFBLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osTUFBQSx1QkFBQSxJQUFJLDJCQUFXLDBDQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDNUMsdUJBQUEsSUFBSSxzQkFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksdUJBQUEsSUFBSSwyQkFBVyxJQUFJLElBQUksSUFBSSx1QkFBQSxJQUFJLHlCQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDbkQsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFNBQVMsR0FBRyx1QkFBQSxJQUFJLHlCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLHVCQUFBLElBQUksMkJBQVcsSUFBSSxJQUFJLEVBQUU7WUFDekIsdUJBQUEsSUFBSSxrQkFBUyxJQUFJLE1BQUEsQ0FBQztZQUNsQix1QkFBQSxJQUFJLDJCQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3ZELHVCQUFBLElBQUksMkJBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDNUQsdUJBQUEsSUFBSSxxQkFBWSxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFBLENBQUM7WUFDOUMsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4RCx1QkFBQSxJQUFJLHlCQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLHVCQUFBLElBQUksMkJBQVcsQ0FBQyxXQUFXLEdBQUcsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUVoRyx1QkFBQSxJQUFJLHlCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyx1QkFBQSxJQUFJLDJCQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM3RCx1QkFBQSxJQUFJLHlCQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyx1QkFBQSxJQUFJLDJCQUFXLENBQUMsU0FBUyxHQUFHLHVCQUFBLElBQUksMkJBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLENBQUM7WUFFekMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsS0FBSyxJQUFJLFFBQVEsSUFBSSx1QkFBQSxJQUFJLHlCQUFTLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyx1QkFBQSxJQUFJLHlCQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSx1QkFBQSxJQUFJLHlCQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2IsSUFBSSx1QkFBQSxJQUFJLDJCQUFXLElBQUksSUFBSTt3QkFDdkIsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFNBQVMsR0FBRyx1QkFBQSxJQUFJLHlCQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELElBQUksdUJBQUEsSUFBSSwwQkFBVSxJQUFJLElBQUk7d0JBQ3RCLHVCQUFBLElBQUksMEJBQVUsTUFBZCxJQUFJLEVBQVcsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7Z0JBQy9DLENBQUMsQ0FBQyxDQUFBO2FBQ0w7WUFDRCx1QkFBQSxJQUFJLHlCQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELEtBQUs7O1FBQ0QsSUFBSSx1QkFBQSxJQUFJLDJCQUFXLElBQUksSUFBSSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksa0JBQVMsS0FBSyxNQUFBLENBQUM7WUFDbkIsTUFBQSx1QkFBQSxJQUFJLDJCQUFXLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUMzRCxNQUFBLHVCQUFBLElBQUksMkJBQVcsMENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzFELElBQUksdUJBQUEsSUFBSSx5QkFBUyxJQUFJLElBQUk7Z0JBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUkseUJBQVMsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztDQUNKO0FBN0RELDRCQTZEQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNURELDBCQUF3QztBQUV4QyxNQUFhLGVBQWU7SUFJeEIsWUFBWSxFQUFVOzs7UUFIdEIsNkNBQStCO1FBQy9CLDJDQUFpQjtRQUdiLHVCQUFBLElBQUksOEJBQWMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBQSxDQUFDO1FBQzlDLHVCQUFBLElBQUksNEJBQVksRUFBRSxNQUFBLENBQUM7UUFDbkIsSUFBSSx1QkFBQSxJQUFJLGtDQUFXLElBQUksSUFBSSxFQUFFO1lBQ3pCLE1BQUEsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQywwQ0FBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksNkRBQVUsTUFBZCxJQUFJLEVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN4Ryx1QkFBQSxJQUFJLDRCQUFZLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxNQUFBLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBWSxFQUFFLFFBQTBCLEVBQUUsYUFBc0I7UUFDdkYsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVaLElBQUksdUJBQUEsSUFBSSxrQ0FBVyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNoRCx1QkFBQSxJQUFJLGtDQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBQSxJQUFJLGdDQUFTLENBQUM7WUFDOUMsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDNUMsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDM0MsSUFBSSxNQUFNLEdBQUcsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hFLElBQUksTUFBTSxJQUFJLElBQUksRUFDbEI7Z0JBQ0ksS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7b0JBQzFCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7b0JBQ3ZELElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxNQUFNLEVBQUM7d0JBQzdFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRTt5QkFDSTt3QkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBQ3RFO29CQUNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSx1QkFBQSxJQUFJLGtDQUFXLElBQUksSUFBSSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN2QyxJQUFJLE9BQU8sR0FBRyx1QkFBQSxJQUFJLGtDQUFXLENBQUMsZ0JBQWdCLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNwRixJQUFJLE1BQU0sR0FBRyx1QkFBQSxJQUFJLGtDQUFXLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUNsQjtnQkFDSSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRTtvQkFDdkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDN0I7YUFDSjtTQUNKO0lBQ0wsQ0FBQztDQWNKO0FBcEVELDBDQW9FQztpTUFaYSxDQUFNO0lBQ1osSUFBSSx1QkFBQSxJQUFJLGtDQUFXLElBQUksSUFBSSxFQUFFO1FBQ3pCLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDekIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUNwSixJQUFBLHNCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO2FBQ0k7WUFDRCxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQ3JKLElBQUEsc0JBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7S0FDSjtBQUNMLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEVMLDBCQUE0RDtBQUM1RCwwQ0FBeUM7QUFFekMsTUFBYSxjQUFjO0lBSXZCLFlBQVksRUFBVTs7O1FBSHRCLDRDQUErQjtRQUMvQiwwQ0FBaUI7UUFHYix1QkFBQSxJQUFJLDZCQUFjLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUM5Qyx1QkFBQSxJQUFJLDJCQUFZLEVBQUUsTUFBQSxDQUFDO1FBQ25CLElBQUksdUJBQUEsSUFBSSxpQ0FBVyxJQUFJLElBQUksRUFBRTtZQUN6QixNQUFBLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsMENBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJEQUFVLE1BQWQsSUFBSSxFQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEcsdUJBQUEsSUFBSSwyQkFBWSx1QkFBQSxJQUFJLGlDQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sTUFBQSxDQUFDO1lBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLE9BQVksRUFBRSxhQUFzQjtRQUMzRCx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVosSUFBSSx1QkFBQSxJQUFJLGlDQUFXLElBQUksSUFBSSxFQUFFO1lBQ3pCLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHVCQUFBLElBQUksK0JBQVMsQ0FBQztZQUM5Qyx1QkFBQSxJQUFJLGlDQUFXLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztZQUM1Qyx1QkFBQSxJQUFJLGlDQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztZQUUzQyxJQUFJLFdBQVcsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFWCx3QkFBd0I7WUFDeEIsS0FBSyxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUU7Z0JBQ3BCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQy9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSx1QkFBQSxJQUFJLGlDQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBRWhFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNsQyxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO2lCQUM3QjtnQkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO1lBRUQsMkNBQTJDO1lBQzNDLElBQUksZUFBZSxHQUFnQix1QkFBQSxJQUFJLGlDQUFXLENBQUMsYUFBYSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDaEcsSUFBSSxhQUFhLElBQUksS0FBSyxFQUFFO2dCQUN4QixlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3ZDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQyx1QkFBQSxJQUFJLGlDQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7YUFDM0o7aUJBQ0k7Z0JBQ0QsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN4QyxJQUFJLElBQUEsc0JBQWtCLEdBQUUsSUFBSSxNQUFNO29CQUM5QixRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDOztvQkFFckosUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQzthQUMzSjtTQUNKO0lBQ0wsQ0FBQztJQUVELElBQUk7UUFDQSxJQUFJLHVCQUFBLElBQUksaUNBQVcsSUFBSSxJQUFJLEVBQUU7WUFDekIsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzFFLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO2dCQUN2Qix1QkFBQSxJQUFJLGlDQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDO0NBY0o7QUF4RkQsd0NBd0ZDOzRMQVphLENBQU07SUFDWixJQUFJLHVCQUFBLElBQUksaUNBQVcsSUFBSSxJQUFJLEVBQUU7UUFDekIsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUN6QixRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQ3BKLElBQUEsc0JBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7YUFDSTtZQUNELFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQyx1QkFBQSxJQUFJLGlDQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDckosSUFBQSxzQkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztTQUM5QjtLQUNKO0FBQ0wsQ0FBQzs7Ozs7QUN6RkwsMEJBQW1EO0FBQ25ELDBDQUFnRDtBQUVoRCx3Q0FBd0M7QUFDeEMsSUFBSSxXQUFXLEdBQUcsaUNBQWlDLENBQUM7QUFFcEQsU0FBZ0IsY0FBYyxDQUFDLFFBQTBCO0lBQ3JELG1EQUFtRDtJQUNuRCxJQUFJLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV2QyxPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixJQUFBLGdCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLE9BQU8sR0FBRztRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM3RCxJQUFBLGdCQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixDQUFDO0FBaEJELHdDQWdCQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxFQUFVLEVBQUUsSUFBUztJQUNoRCxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLElBQUksT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDeEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFFakMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQVZELHdDQVVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFnQjtJQUN0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQzFCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLFlBQVksR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3SDtJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDckQsSUFBSSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFFL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWRELGdDQWNDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLElBQVksRUFBRSxNQUFnQixFQUFFLFNBQWlCO0lBQzdFLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUEsc0JBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDeEk7SUFDTCxDQUFDLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDM0UsSUFBSSxJQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFFckMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWRELDBDQWNDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLElBQVksRUFBRSxNQUFnQixFQUFFLFNBQWlCLEVBQUUsY0FBNkIsSUFBSSxFQUFFLGNBQTZCLElBQUk7SUFDakosSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekQsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4STtJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFBLENBQUMsQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDO0lBQ3BMLElBQUksSUFBSSxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBRWxDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFkRCxzQ0FjQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxFQUFVLEVBQUUsUUFBZ0I7SUFDbkQsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekQsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUEsbUJBQWUsR0FBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLElBQUEsbUJBQWUsR0FBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNySTtJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDakQsSUFBSSxJQUFJLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFFcEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWRELGdDQWNDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLEVBQVU7SUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekQsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUEsbUJBQWUsR0FBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUM7U0FDakY7SUFDTCxDQUFDLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzQixJQUFJLElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUVuQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBZEQsOEJBY0M7QUFFRCxTQUFnQixXQUFXLENBQUMsRUFBVSxFQUFFLFdBQW1CO0lBQ3ZELElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsbUJBQWUsR0FBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcseUJBQXlCLEdBQUcsV0FBVyxDQUFDLENBQUM7U0FDckc7SUFDTCxDQUFDLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxDQUFBO0lBQy9DLElBQUksSUFBSSxHQUFHLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBQyxDQUFBO0lBRW5DLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFkRCxrQ0FjQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxFQUFVLEVBQUUsY0FBc0I7SUFDN0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDekQsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxtQkFBZSxHQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyw0QkFBNEIsR0FBRyxjQUFjLENBQUMsQ0FBQztTQUMzRztJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFDLENBQUE7SUFDbEQsSUFBSSxJQUFJLEdBQUcsRUFBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUMsQ0FBQTtJQUV0QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBZEQsd0NBY0M7Ozs7O0FDbkpELG1DQUErQjtBQUMvQixtQ0FBMEM7QUFDMUMsOERBQTJEO0FBQzNELHVEQUFvRDtBQUNwRCwwREFBdUQ7QUFDdkQsZ0VBQTZEO0FBQzdELGtEQUErQztBQUMvQywwRUFBdUU7QUFDdkUsOENBQTJDO0FBQzNDLDJEQUF3RDtBQUV4RCxtQ0FBbUM7QUFDbkMsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJLGNBQThCLENBQUM7QUFDbkMsSUFBSSxlQUFnQyxDQUFDO0FBQ3JDLElBQUksWUFBMEIsQ0FBQztBQUMvQixJQUFJLGFBQTRCLENBQUM7QUFDakMsSUFBSSxlQUF1QixDQUFDO0FBQzVCLElBQUksZ0JBQTBCLENBQUM7QUFDL0IsSUFBSSxpQkFBMkIsQ0FBQztBQUNoQyxJQUFJLFNBQWtCLENBQUM7QUFDdkIsSUFBSSxxQkFBNEMsQ0FBQztBQUNqRCxJQUFJLFdBQXdCLENBQUM7QUFFN0IsSUFBSSxVQUFrQixDQUFDO0FBQ3ZCLElBQUksVUFBa0IsQ0FBQztBQUN2QixJQUFJLFdBQW1CLENBQUM7QUFDeEIsSUFBSSxhQUFxQixDQUFDO0FBQzFCLElBQUksb0JBQTRCLENBQUM7QUFDakMsSUFBSSxrQkFBMEIsQ0FBQztBQUMvQixJQUFJLHNCQUE4QixDQUFDO0FBQ25DLElBQUksb0JBQTRCLENBQUM7QUFFakMsU0FBUyxLQUFLO0lBQ1YsZ0JBQWdCO0lBQ2hCLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQixjQUFjLEdBQUcsSUFBSSwrQkFBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkQsZUFBZSxHQUFHLElBQUksaUNBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzFELFlBQVksR0FBRyxJQUFJLDJCQUFZLEVBQUUsQ0FBQztJQUNsQyxhQUFhLEdBQUcsSUFBSSw2QkFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckQsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlJLGlCQUFpQixHQUFHLElBQUksbUJBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuSCxxQkFBcUIsR0FBRyxJQUFJLDZDQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0UsV0FBVyxHQUFHLElBQUkseUJBQVcsRUFBRSxDQUFDO0lBRWhDLDBCQUEwQjtJQUMxQixVQUFVLEdBQUcsSUFBSSxlQUFNLENBQUMsYUFBYSxFQUFFLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25JLFVBQVUsR0FBRyxJQUFJLGVBQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkksV0FBVyxHQUFHLElBQUksZUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxSSxhQUFhLEdBQUcsSUFBSSxlQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEosd0JBQXdCO0lBQ3hCLG9CQUFvQixHQUFHLElBQUksZUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUMsOEJBQThCLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5TSxrQkFBa0IsR0FBRyxJQUFJLGVBQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLDRCQUE0QixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbE0sc0JBQXNCLEdBQUcsSUFBSSxlQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hMLG9CQUFvQixHQUFHLElBQUksZUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUMseUJBQXlCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV0SSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0Isc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqQyxvQkFBb0I7SUFDcEIsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUN6QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLGFBQWEsRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGFBQWE7SUFDbEIsSUFBQSxvQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLDRFQUE0RTtJQUM1RSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QscUJBQXFCLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxJQUFVO0lBQzdCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBSEQsd0JBR0M7QUFFRCxTQUFnQixNQUFNO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUZELHdCQUVDO0FBRUQsU0FBZ0IsaUJBQWlCO0lBQzdCLE9BQU8sY0FBYyxDQUFDO0FBQzFCLENBQUM7QUFGRCw4Q0FFQztBQUVELFNBQWdCLGtCQUFrQjtJQUM5QixPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBRkQsZ0RBRUM7QUFFRCxTQUFnQixlQUFlO0lBQzNCLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLGdCQUFnQjtJQUM1QixPQUFPLGFBQWEsQ0FBQztBQUN6QixDQUFDO0FBRkQsNENBRUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxrQkFBMEI7SUFDekQsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBQ3pDLENBQUM7QUFGRCxnREFFQztBQUVELFNBQWdCLGtCQUFrQjtJQUM5QixPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBRkQsZ0RBRUM7QUFFRCxTQUFnQixZQUFZLENBQUMsWUFBcUI7SUFDOUMsU0FBUyxHQUFHLFlBQVksQ0FBQTtBQUM1QixDQUFDO0FBRkQsb0NBRUM7QUFFRCxTQUFnQixZQUFZO0lBQ3hCLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLHFCQUFxQjtJQUNqQyxJQUFJLFVBQVUsR0FBRztRQUNiLElBQUksRUFBRSxFQUFFO1FBQ1IsRUFBRSxFQUFFLEVBQUU7UUFDTixNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1gsQ0FBQztJQUVGLFFBQVEsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDckMsS0FBSyxDQUFDO1lBQ0YsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFBQyxNQUFNO1FBQ3BDLEtBQUssQ0FBQztZQUNGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQUMsTUFBTTtRQUN2QyxLQUFLLENBQUM7WUFDRixVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUFDLE1BQU07UUFDcEMsS0FBSyxDQUFDO1lBQ0YsVUFBVSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFBQyxNQUFNO0tBQ3pDO0lBRUQsUUFBUSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNuQyxLQUFLLENBQUM7WUFDRixVQUFVLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUFDLE1BQU07UUFDbEMsS0FBSyxDQUFDO1lBQ0YsVUFBVSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFBQyxNQUFNO1FBQ3JDLEtBQUssQ0FBQztZQUNGLFVBQVUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQUMsTUFBTTtRQUNsQyxLQUFLLENBQUM7WUFDRixVQUFVLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUFDLE1BQU07S0FDdkM7SUFFRCxRQUFRLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ3ZDLEtBQUssQ0FBQztZQUNGLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQUMsTUFBTTtRQUN6QyxLQUFLLENBQUM7WUFDRixVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUFDLE1BQU07UUFDdEMsS0FBSyxDQUFDO1lBQ0YsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFBQyxNQUFNO0tBQzNDO0lBRUQsUUFBUSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNyQyxLQUFLLENBQUM7WUFDRixVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUFDLE1BQU07UUFDcEMsS0FBSyxDQUFDO1lBQ0YsVUFBVSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFBQyxNQUFNO0tBQ3pDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQTlDRCxzREE4Q0M7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7Ozs7QUNuS3RCLHFDQUFpQztBQUNqQyxxQ0FBK0I7QUFDL0IscUNBQWtDO0FBQ2xDLHFDQUFtQztBQUNuQyxxQ0FBdUM7QUFDdkMscUNBQWtDO0FBRXZCLFFBQUEsU0FBUyxHQUFHLGlCQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFVBQVUsRUFBRSxVQUFVLEdBQVE7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUSxFQUFFO1FBQ1Qsa0JBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsV0FBVyxFQUFFO1FBQ1osa0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsS0FBSyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLEVBQUU7UUFDVCxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXLEVBQUU7UUFDWixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0IsRUFBRTtRQUN6QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxDQUFDLEVBQUU7WUFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7U0FDNUI7SUFDRixDQUFDO0lBRUQsWUFBWSxFQUFFLFVBQVUsQ0FBTTtRQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUU1RCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixpQkFBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0IsaUJBQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxZQUFZO1FBQ1osa0JBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ3JCLFdBQVcsRUFBRSxrQkFBUSxDQUFDLElBQUk7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTtZQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDeEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxZQUFZLEVBQUUsVUFBVSxDQUFNO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RSxpQkFBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxnQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUNsRCxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTVCLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxTQUFTO1lBQzFCLGlCQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sRUFBRTtRQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsaUJBQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsaUJBQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlCLGlCQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFMUIsWUFBWTtRQUNaLGtCQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUN0QixXQUFXLEVBQUUsa0JBQVEsQ0FBQyxJQUFJO1lBQzFCLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDeEIsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsVUFBVSxFQUFFLFVBQVUsQ0FBTTtRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFcEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDN0IsNERBQTREO1FBQzVELDJCQUEyQjtRQUMzQixVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksTUFBTSxHQUFHLElBQUksc0JBQVksQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFVBQVUsRUFBRSxVQUFVLENBQU07UUFDM0IsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbkI7SUFDRixDQUFDO0NBQ0QsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbklILDJDQUE0QjtBQUM1QiwwQkFBZ0c7QUFDaEcsb0NBQXdFO0FBQ3hFLHdEQUFxRDtBQUNyRCxrREFBK0M7QUFDL0MsMkNBQXdDO0FBRXhDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUscUJBQVMsQ0FBQyxDQUFDO0FBYXhELE1BQWEsR0FBSSxTQUFRLENBQUMsQ0FBQyxHQUFHO0lBTTFCLFlBQVksRUFBVTtRQUNsQiwwQkFBMEI7UUFDMUIsWUFBWTtRQUNaLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs7UUFSL0YsNkJBQWU7UUFDZiw2QkFBcUI7UUFDckIsaUNBQThCLEtBQUssRUFBQztRQUNwQywrQkFBMkIsQ0FBQyxFQUFDO1FBTXpCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFbEMsNEJBQTRCO1FBQzVCLHVCQUFBLElBQUksY0FBVSxNQUFNLE1BQUEsQ0FBQztRQUVyQiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksb0NBQVMsTUFBYixJQUFJLEVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsdUJBQUEsSUFBSSwwQ0FBZSxNQUFuQixJQUFJLEVBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksMENBQWUsTUFBbkIsSUFBSSxFQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFpQjs7UUFDdEIsSUFBSSx1QkFBQSxJQUFJLGtCQUFPLElBQUksSUFBSSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQUEsSUFBSSxrQkFBTyxDQUFDLENBQUE7U0FDaEM7UUFFRCxJQUFJLFNBQVMsSUFBSSxrQkFBa0IsRUFBRTtZQUNqQyx1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQywrRkFBK0YsRUFBRTtnQkFDdkgsV0FBVyxFQUFFLCtJQUErSTthQUMvSixDQUFDLE1BQUEsQ0FBQztTQUNOO2FBQ0ksSUFBSSxTQUFTLElBQUksV0FBVyxFQUFFO1lBQy9CLHVCQUFBLElBQUksY0FBVSxDQUFDLENBQUMsU0FBUyxDQUFDLDBGQUEwRixFQUFFO2dCQUNsSCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxXQUFXLEVBQUUsOEVBQThFO2FBQzlGLENBQUMsTUFBQSxDQUFDO1NBQ047YUFDSSxJQUFJLFNBQVMsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQyx1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnREFBZ0QsRUFBRTtnQkFDeEUsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLHlGQUF5RjthQUN6RyxDQUFDLE1BQUEsQ0FBQztTQUNOO2FBQ0ksSUFBSSxTQUFTLElBQUksWUFBWSxFQUFFO1lBQ2hDLHVCQUFBLElBQUksY0FBVSxDQUFDLENBQUMsU0FBUyxDQUFDLHdEQUF3RCxFQUFFO2dCQUNoRixPQUFPLEVBQUUsRUFBRTtnQkFDWCxXQUFXLEVBQUUsNE5BQTROO2FBQzVPLENBQUMsTUFBQSxDQUFDO1NBQ047YUFDSSxJQUFJLFNBQVMsSUFBSSxjQUFjLEVBQUU7WUFDbEMsdUJBQUEsSUFBSSxjQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsa0hBQWtILEVBQUU7Z0JBQzFJLFdBQVcsRUFBRSx5REFBeUQ7Z0JBQ3RFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxFQUFFO2FBQ2QsQ0FBQyxNQUFBLENBQUM7U0FDTjthQUNJLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUM3Qix1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxtRUFBbUUsRUFBRTtnQkFDM0YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLDROQUE0TjthQUM1TyxDQUFDLE1BQUEsQ0FBQztTQUNOO1FBQ0QsTUFBQSx1QkFBQSxJQUFJLGtCQUFPLDBDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUM3RyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLHVCQUFBLElBQUksY0FBVSxLQUFLLE1BQUEsQ0FBQztRQUVwQixJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxNQUFNLEVBQUU7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDekU7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQUU7WUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDdEU7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxRQUFRLEVBQUU7U0FFbEM7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQUU7U0FFckM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sdUJBQUEsSUFBSSxrQkFBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsa0JBQWtCLENBQUMsQ0FBMEIsRUFBRSxPQUFZLEVBQUUsYUFBc0I7UUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFBLHFCQUFpQixHQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFBLHFCQUFpQixHQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixtQkFBbUIsQ0FBQyxDQUEwQixFQUFFLE9BQVksRUFBRSxRQUEwQixFQUFFLGdCQUF5QixLQUFLO1FBQ3BILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osSUFBQSxzQkFBa0IsR0FBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUEsc0JBQWtCLEdBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBaURELHlCQUF5QjtJQUN6QixnQkFBZ0IsQ0FBQyxDQUFhO1FBRTFCLHVCQUFBLElBQUksOENBQW1CLE1BQXZCLElBQUksRUFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQThGSjtBQXJRRCxrQkFxUUM7Mk1BaEpZLENBQU07SUFDWCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQixJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxNQUFNLEVBQUU7S0FFM0I7U0FDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQUU7UUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQzFCLElBQUEsbUJBQWUsR0FBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDekM7UUFDRCxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQzdDO0FBQ0wsQ0FBQyxtREFFYyxDQUFNO0lBQ2pCLElBQUksVUFBVSxHQUFlLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUNsSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sSUFBSSxNQUFNLEVBQUU7UUFDdkIsSUFBSSxPQUFPLEdBQUc7WUFDVixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDhDQUFtQixNQUF2QixJQUFJLEVBQW9CLFVBQVUsQ0FBQyxFQUFFO1lBQzdHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSxnREFBcUIsTUFBekIsSUFBSSxFQUFzQixVQUFVLENBQUMsRUFBRTtZQUNySCxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLFVBQVUsQ0FBQyxFQUFFO1lBQ25HLHdHQUF3RztTQUMzRyxDQUFBO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pFO0FBQ0wsQ0FBQyxtREFFYyxDQUFNO0lBQ2pCLHVCQUFBLElBQUksd0JBQW9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDcEMsSUFBSSxDQUFDLHVCQUFBLElBQUksOEJBQW1CLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixJQUFBLG1CQUFlLEdBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsdUJBQUEsSUFBSSwwQkFBc0IsS0FBSyxNQUFBLENBQUM7SUFDcEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFBLENBQUM7QUFDWixDQUFDLHFEQUVlLENBQU07SUFFbEIsWUFBWSxDQUFDLHVCQUFBLElBQUksNEJBQWlCLENBQUMsQ0FBQztJQUNwQyx1QkFBQSxJQUFJLDBCQUFzQixJQUFJLE1BQUEsQ0FBQztJQUMvQixJQUFBLG1CQUFlLEdBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUQsQ0FBQywrREFTb0IsQ0FBYTtJQUM5QixJQUFJLE9BQU8sR0FBRztRQUNWLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFJLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBa0IsTUFBdEIsSUFBSSxFQUFtQixDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUM7UUFDbEksRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVMsS0FBSyxFQUFFLGNBQWMsRUFBTyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBa0IsTUFBdEIsSUFBSSxFQUFtQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUM7UUFDNUgsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVMsS0FBSyxFQUFFLGNBQWMsRUFBTyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBa0IsTUFBdEIsSUFBSSxFQUFtQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUM7UUFDNUgsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVEsS0FBSyxFQUFFLGVBQWUsRUFBTSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBa0IsTUFBdEIsSUFBSSxFQUFtQixDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUM7UUFDOUgsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVEsS0FBSyxFQUFFLGVBQWUsRUFBTSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSw2Q0FBa0IsTUFBdEIsSUFBSSxFQUFtQixDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUM7UUFDN0gsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFLLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDZDQUFrQixNQUF0QixJQUFJLEVBQW1CLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBQztRQUM5SCxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBSyxLQUFLLEVBQUUsa0JBQWtCLEVBQUcsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksNkNBQWtCLE1BQXRCLElBQUksRUFBbUIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFDO0tBQ25JLENBQUE7SUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyxxREFFZSxDQUFhO0lBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxHQUFHO1FBQ1YsRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUEsZ0JBQVUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUM7UUFDOUssRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFLLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUEsZ0JBQVUsRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUM7UUFDbEwsRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFNLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUEsZ0JBQVUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUM7UUFDaEwsRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFLLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUEsZ0JBQVUsRUFBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUM7UUFDbEwsRUFBQyxTQUFTLEVBQUUsY0FBYyxFQUFJLEtBQUssRUFBRSxnQkFBZ0IsRUFBRyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUEsZ0JBQVUsRUFBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUM7S0FDdkwsQ0FBQTtJQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDLDZEQUVtQixDQUFhO0FBRWpDLENBQUMsMkRBRWtCLENBQWE7SUFDNUIsSUFBSSxPQUFPLEdBQUc7UUFDVixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNoSCxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNoSCxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksMkNBQWdCLE1BQXBCLElBQUksRUFBaUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ3pILEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSwyQ0FBZ0IsTUFBcEIsSUFBSSxFQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDdEgsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN6SCxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksMkNBQWdCLE1BQXBCLElBQUksRUFBaUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3RILEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSwyQ0FBZ0IsTUFBcEIsSUFBSSxFQUFpQixDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUU7S0FDckksQ0FBQTtJQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDLHFEQUdlLENBQWEsRUFBRSxLQUFhO0lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxHQUFHLHFCQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLElBQUksT0FBTyxJQUFJLFNBQVM7UUFDcEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDOztRQUVmLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFnQixFQUFFLEVBQUU7UUFDdEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsdUJBQUEsSUFBSSw4Q0FBbUIsTUFBdkIsSUFBSSxFQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLDJEQUdrQixDQUFhLEVBQUUsUUFBZ0I7SUFDOUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRywyQkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLElBQUksT0FBTyxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM1QyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFdBQW1CLEVBQUUsRUFBRTtZQUMxRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFBLG1CQUFhLEVBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBQSxzQkFBa0IsR0FBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7S0FDTjtTQUNJO1FBQ0QsSUFBQSxtQkFBYSxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUEsc0JBQWtCLEdBQUUsQ0FBQyxDQUFDO0tBQzNEO0FBQ0wsQ0FBQyx5REFHaUIsQ0FBTSxFQUFFLEtBQWE7SUFFbkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0IsSUFBSSxPQUFPLEdBQUcscUJBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFnQixFQUFFLEVBQUU7UUFDdEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBQSxxQkFBZSxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUEsc0JBQWtCLEdBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hSTCwyQ0FBNEI7QUFTNUIsTUFBYSxhQUFjLFNBQVEsQ0FBQyxDQUFDLE1BQU07SUFLdkMsWUFBWSxPQUF1QjtRQUUvQixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBTG5ELDhCQUFnQixFQUFFLEVBQUM7UUFDbkIscUNBQXVCLENBQUMsQ0FBQyxFQUFDO1FBTXRCLHVCQUFBLElBQUksdUJBQVMsT0FBTyxDQUFDLElBQUksTUFBQSxDQUFDO1FBRTFCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQixJQUFJLEVBQUU7Ozs2RUFHMkQsT0FBTyxDQUFDLEdBQUc7d0VBQ2hCLE9BQU8sQ0FBQyxJQUFJOzs7eUJBRzNEO1lBQ2IsU0FBUyxFQUFFLGdCQUFnQjtTQUFDLENBQUMsQ0FBQyxDQUFHLDhEQUE4RDtRQUNuRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjLENBQUMsV0FBbUI7UUFFOUIsdUJBQUEsSUFBSSw4QkFBZ0IsV0FBVyxNQUFBLENBQUM7UUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxJQUFJLElBQUksRUFDbkI7WUFDSSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLElBQUksR0FBRyxJQUFJLElBQUksRUFDZjtnQkFDSSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLHVCQUFBLElBQUksa0NBQWEsSUFBSSxDQUFDLEVBQzFCO29CQUNJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7aUJBQ2hEO3FCQUNJLElBQUksdUJBQUEsSUFBSSxrQ0FBYSxJQUFJLENBQUMsRUFDL0I7b0JBQ0ksR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztpQkFDL0M7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFFSCxPQUFPLHVCQUFBLElBQUksMkJBQU0sQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUVWLE9BQU8sdUJBQUEsSUFBSSxrQ0FBYSxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQXhERCxzQ0F3REM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pFRCxxQ0FBeUM7QUFDekMsMEJBQTRCO0FBRTVCLG1EQUFnRDtBQUVoRCxNQUFhLFdBQVc7SUFPcEI7O1FBTEEsaURBQWlEO1FBQ2pELDJCQUEyQjtRQUMzQix3Q0FBc0IsQ0FBQyx3QkFBd0I7UUFDL0MsK0NBQWtEO1FBSTlDLDZCQUE2QjtRQUM3QixtQ0FBbUM7UUFDbkMsdUJBQUEsSUFBSSxnQ0FBb0IsRUFBRSxNQUFBLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFTO1FBRVosNkNBQTZDO1FBQzdDLHVCQUFBLElBQUkseUJBQWEsSUFBSSxDQUFDLFFBQVEsTUFBQSxDQUFDO1FBQy9CLHVCQUF1QjtRQUN2Qix1QkFBQSxJQUFJLHlEQUFjLE1BQWxCLElBQUksQ0FBZ0IsQ0FBQztJQUN6QixDQUFDO0NBdUNKO0FBM0RELGtDQTJEQzs7SUF2Qk8sS0FBSyxJQUFJLEdBQUcsSUFBSSx1QkFBQSxJQUFJLDZCQUFVLEVBQzlCO1FBQ0ksSUFBSSxPQUFPLEdBQUcsdUJBQUEsSUFBSSw2QkFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pDLElBQUksdUJBQUEsSUFBSSxvQ0FBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQzVDO1lBQ0ksdUJBQUEsSUFBSSxvQ0FBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLDZCQUFhLENBQUM7Z0JBQzNDLFFBQVEsRUFBRSxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQ3RCLEdBQUcsRUFBRSxvQkFBb0I7YUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUEsVUFBTSxHQUFFLENBQUMsQ0FBQztZQUNoRCx1QkFBQSxJQUFJLG9DQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksMkRBQWdCLE1BQXBCLElBQUksRUFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRTthQUVEO1lBQ0ksdUJBQUEsSUFBSSxvQ0FBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hFO0tBQ0o7QUFDTCxDQUFDLHFFQUVlLENBQU07SUFFbEIsSUFBSSxVQUFVLEdBQWUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFDLENBQUM7SUFDakwsSUFBQSxVQUFNLEdBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQyxDQUFDOzs7OztBQy9ETCxTQUFnQixRQUFRLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWTtJQUMzRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTO0lBQzNCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRWhDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVk7SUFFN0IsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBYkQsNEJBYUM7QUFFRCxTQUFnQixPQUFPLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWTtJQUMxRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7SUFDNUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGFBQWE7SUFFcEQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQVhELDBCQVdDO0FBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFXLEVBQUUsTUFBYztJQUNqRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRTtRQUMzQixNQUFNLElBQUksR0FBRyxDQUFDO0tBQ2pCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFBO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLENBQVMsRUFBRSxHQUFZO0lBQ2xELElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3RELElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzlDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHO1FBQ0gsT0FBTyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7O1FBRTVHLE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BILENBQUM7QUFYRCx3Q0FXQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxHQUFXO0lBQy9CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUhELDBCQUdDO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLEdBQVc7SUFDL0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBSEQsMEJBR0M7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekRELE1BQWEscUJBQXFCO0lBRzlCLFlBQVksRUFBVTtRQUZ0QixpREFBcUI7UUFHakIsdUJBQUEsSUFBSSxrQ0FBeUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBQSxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBa0I7UUFDckIsSUFBSSx1QkFBQSxJQUFJLHNDQUFTLElBQUksSUFBSSxFQUFFO1lBQ3ZCLElBQUksR0FBRyxHQUFHLHVCQUFBLElBQUksc0NBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4RCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsR0FBRyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBQzVCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7b0JBQzlDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7aUJBQ3ZEO3FCQUNJO29CQUNELEdBQUcsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO29CQUMvQixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUNqRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUNwRDthQUNKO1NBQ0o7SUFDTCxDQUFDO0NBQ0o7QUF4QkQsc0RBd0JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QkQsMENBQXlEO0FBR3pELE1BQWEsYUFBYTtJQUl0QixZQUFZLEVBQVU7UUFIdEIseUNBQXFCO1FBQ3JCLHlDQUFpQjtRQUdiLHVCQUFBLElBQUksMEJBQXlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUN6RCx1QkFBQSxJQUFJLDBCQUFZLEVBQUUsTUFBQSxDQUFDO1FBQ25CLElBQUksdUJBQUEsSUFBSSw4QkFBUyxJQUFJLElBQUksRUFBRTtZQUN2Qix1QkFBQSxJQUFJLDBCQUFZLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxNQUFBLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQsSUFBSTtRQUNBLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLHVCQUFBLElBQUksOEJBQVMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSTtRQUNBLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVU7O1FBQ2IsSUFBSSx1QkFBQSxJQUFJLDhCQUFTLElBQUksSUFBSSxFQUFFO1lBQ3ZCLElBQUksR0FBRyxHQUFHLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUNqQixNQUFBLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RSxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUN4QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN4QixJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUN0QyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO2dCQUNwRSxFQUFFLENBQUMsU0FBUyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO2dCQUMxQyxNQUFBLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqRTtZQUVELHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckUsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN2RSx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzVELHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFFLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUEsZUFBTyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3RHLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFFLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDekcsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM1Ryx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztZQUMxRSx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRix1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1Rix1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUMsZ0JBQWdCLENBQUM7U0FDakg7SUFDTCxDQUFDO0NBQ0o7QUFqREQsc0NBaURDOzs7Ozs7QUNwRFUsUUFBQSxZQUFZLEdBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGtEQUFrRCxFQUFFLHFDQUFxQyxFQUFFLHNCQUFzQixFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLHVEQUF1RCxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLGdEQUFnRCxFQUFFLCtDQUErQyxFQUFFLDZEQUE2RCxFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLCtEQUErRCxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsRUFBRSxzQ0FBc0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxvQ0FBb0MsRUFBRSxpREFBaUQsRUFBRSwwQ0FBMEMsRUFBRSxpRUFBaUUsRUFBRSxnREFBZ0QsRUFBRSxrQ0FBa0MsRUFBRSxpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRSw0Q0FBNEMsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxxRUFBcUUsRUFBRSxpREFBaUQsRUFBRSxvQ0FBb0MsRUFBRSx3REFBd0QsRUFBRSwrQ0FBK0MsRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxrREFBa0QsRUFBRSwwREFBMEQsRUFBRSxrREFBa0QsRUFBRSwrQkFBK0IsRUFBRSx1Q0FBdUMsRUFBRSxnQ0FBZ0MsRUFBRSxtREFBbUQsRUFBRSwwQ0FBMEMsRUFBRSxxQ0FBcUMsRUFBRSw0Q0FBNEMsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGtEQUFrRCxFQUFFLHFDQUFxQyxFQUFFLHNCQUFzQixFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLHVEQUF1RCxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLGdEQUFnRCxFQUFFLCtDQUErQyxFQUFFLDZEQUE2RCxFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLCtEQUErRCxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsRUFBRSxzQ0FBc0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxvQ0FBb0MsRUFBRSxpREFBaUQsRUFBRSwwQ0FBMEMsRUFBRSxpRUFBaUUsRUFBRSxnREFBZ0QsRUFBRSxrQ0FBa0MsRUFBRSxpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRSw0Q0FBNEMsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxxRUFBcUUsRUFBRSxpREFBaUQsRUFBRSxvQ0FBb0MsRUFBRSx3REFBd0QsRUFBRSwrQ0FBK0MsRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxrREFBa0QsRUFBRSwwREFBMEQsRUFBRSxrREFBa0QsRUFBRSwrQkFBK0IsRUFBRSx1Q0FBdUMsRUFBRSxnQ0FBZ0MsRUFBRSxtREFBbUQsRUFBRSwwQ0FBMEMsRUFBRSxxQ0FBcUMsRUFBRSw0Q0FBNEMsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsRUFBRSxnREFBZ0QsRUFBRSxxQ0FBcUMsRUFBRSxrREFBa0QsRUFBRSxtREFBbUQsRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSw2Q0FBNkMsRUFBRSwyREFBMkQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSwwREFBMEQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHdEQUF3RCxFQUFFLGtDQUFrQyxFQUFFLHNCQUFzQixFQUFFLDZDQUE2QyxFQUFFLHlEQUF5RCxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMscURBQXFELEVBQUUsa0NBQWtDLEVBQUUscUNBQXFDLEVBQUUsbURBQW1ELEVBQUUsMENBQTBDLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUsa0JBQWtCLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUsbUJBQW1CLEVBQUUsb0NBQW9DLEVBQUUsNkNBQTZDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUsK0JBQStCLEVBQUUsMkNBQTJDLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLCtDQUErQyxFQUFFLHdDQUF3QyxFQUFFLG9DQUFvQyxFQUFFLDZDQUE2QyxFQUFFLDBCQUEwQixFQUFFLHlDQUF5QyxFQUFFLGdDQUFnQyxFQUFFLG9DQUFvQyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxzQ0FBc0MsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSw2QkFBNkIsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSxzQ0FBc0MsRUFBRSxzQ0FBc0MsRUFBRSx3Q0FBd0MsRUFBRSxvQ0FBb0MsRUFBRSx3QkFBd0IsRUFBRSxxQ0FBcUMsRUFBRSwrQkFBK0IsRUFBRSw2Q0FBNkMsRUFBRSw4Q0FBOEMsRUFBRSxxQ0FBcUMsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw2Q0FBNkMsRUFBRSw4Q0FBOEMsRUFBRSw4QkFBOEIsRUFBRSxnQ0FBZ0MsRUFBRSxvREFBb0QsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLDJCQUEyQixFQUFFLHdDQUF3QyxFQUFFLDJDQUEyQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsZUFBZSxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLGdDQUFnQyxFQUFFLGdDQUFnQyxFQUFFLDhDQUE4QyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsOEJBQThCLEVBQUUsNENBQTRDLEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQUUsMENBQTBDLEVBQUUsNkNBQTZDLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsNkJBQTZCLEVBQUUsMENBQTBDLEVBQUUscUNBQXFDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUscUNBQXFDLEVBQUUsaUNBQWlDLEVBQUUsb0NBQW9DLEVBQUUsd0NBQXdDLEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUsNkNBQTZDLEVBQUUsOENBQThDLEVBQUUsNENBQTRDLEVBQUUsOENBQThDLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUscUNBQXFDLEVBQUUsMkJBQTJCLEVBQUUsbUNBQW1DLEVBQUUsdUJBQXVCLEVBQUUsZ0NBQWdDLEVBQUUsa0NBQWtDLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxxQ0FBcUMsRUFBRSw2Q0FBNkMsRUFBRSwyQ0FBMkMsRUFBRSxpQ0FBaUMsRUFBRSxlQUFlLEVBQUUsd0NBQXdDLEVBQUUsMkJBQTJCLEVBQUUsMkNBQTJDLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUseUNBQXlDLEVBQUUsK0NBQStDLEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLG1DQUFtQyxFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLHdDQUF3QyxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLGtEQUFrRCxFQUFFLGlEQUFpRCxFQUFFLGtEQUFrRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLGlEQUFpRCxFQUFFLG1EQUFtRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGlEQUFpRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLHFEQUFxRCxFQUFFLHFEQUFxRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLDBEQUEwRCxFQUFFLG1EQUFtRCxFQUFFLHdEQUF3RCxFQUFFLGdEQUFnRCxFQUFFLHlDQUF5QyxFQUFFLDhDQUE4QyxFQUFFLHNDQUFzQyxFQUFFLGlEQUFpRCxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSwwQ0FBMEMsRUFBRSwwQ0FBMEMsRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsbURBQW1ELEVBQUUsbURBQW1ELEVBQUUsbURBQW1ELEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLEVBQUUsNERBQTRELEVBQUUsNERBQTRELENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsb0RBQW9ELEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsb0NBQW9DLEVBQUUsMEJBQTBCLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLDZDQUE2QyxFQUFFLDZDQUE2QyxFQUFFLDREQUE0RCxFQUFFLDREQUE0RCxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsaUJBQWlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0RBQWdELEVBQUUsZ0NBQWdDLEVBQUUsaURBQWlELEVBQUUseUNBQXlDLEVBQUUsMERBQTBELEVBQUUsNkRBQTZELEVBQUUsaURBQWlELEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSw4QkFBOEIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxnQ0FBZ0MsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsOEJBQThCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsK0RBQStELEVBQUUsNkJBQTZCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSw2RUFBNkUsRUFBRSxpRkFBaUYsRUFBRSw0RUFBNEUsRUFBRSx5REFBeUQsRUFBRSx5REFBeUQsRUFBRSxrRUFBa0UsRUFBRSxxQkFBcUIsRUFBRSw4RUFBOEUsRUFBRSxtRkFBbUYsRUFBRSw4RUFBOEUsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0MsRUFBRSxnREFBZ0QsRUFBRSx1RkFBdUYsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLG1CQUFtQixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLGtEQUFrRCxFQUFFLG9EQUFvRCxFQUFFLG1DQUFtQyxFQUFFLGtEQUFrRCxFQUFFLG1DQUFtQyxFQUFFLG9EQUFvRCxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsK0JBQStCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMkNBQTJDLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUNBQXlDLEVBQUUsbUNBQW1DLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsa0NBQWtDLEVBQUUscUNBQXFDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLHFDQUFxQyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLDJDQUEyQyxFQUFFLGtDQUFrQyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLG9DQUFvQyxFQUFFLHdDQUF3QyxFQUFFLGlCQUFpQixFQUFFLG1DQUFtQyxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixFQUFFLDhEQUE4RCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsMERBQTBELEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUscUNBQXFDLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsK0RBQStELEVBQUUsK0RBQStELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsbUVBQW1FLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLHVDQUF1QyxFQUFFLGdFQUFnRSxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixFQUFFLDhEQUE4RCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLCtEQUErRCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGtFQUFrRSxFQUFFLGtFQUFrRSxFQUFFLHVEQUF1RCxFQUFFLHVEQUF1RCxFQUFFLHNFQUFzRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSx1Q0FBdUMsRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxvQ0FBb0MsRUFBRSx1Q0FBdUMsRUFBRSwwREFBMEQsRUFBRSxzQ0FBc0MsRUFBRSxzQ0FBc0MsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLHVDQUF1QyxFQUFFLGdFQUFnRSxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsMERBQTBELEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxrQ0FBa0MsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsY0FBYyxFQUFFLDJCQUEyQixDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsYUFBYSxFQUFFLDJCQUEyQixFQUFFLHdDQUF3QyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSwwQ0FBMEMsRUFBRSw2Q0FBNkMsRUFBRSwyQ0FBMkMsRUFBRSwrREFBK0QsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxrQ0FBa0MsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGdEQUFnRCxFQUFFLHNDQUFzQyxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLG1EQUFtRCxFQUFFLDZEQUE2RCxFQUFFLDRCQUE0QixFQUFFLGdEQUFnRCxFQUFFLHVEQUF1RCxFQUFFLDhDQUE4QyxFQUFFLHFDQUFxQyxFQUFFLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFDQUFxQyxFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDZDQUE2QyxFQUFFLHdDQUF3QyxFQUFFLHVEQUF1RCxFQUFFLDREQUE0RCxFQUFFLHVDQUF1QyxFQUFFLCtDQUErQyxFQUFFLDREQUE0RCxFQUFFLG9DQUFvQyxFQUFFLG1EQUFtRCxFQUFFLDRCQUE0QixFQUFFLGlEQUFpRCxFQUFFLDRCQUE0QixFQUFFLHNDQUFzQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLHNDQUFzQyxFQUFFLDhCQUE4QixFQUFFLHNDQUFzQyxFQUFFLHlDQUF5QyxFQUFFLHdDQUF3QyxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsc0NBQXNDLEVBQUUseUNBQXlDLEVBQUUsb0JBQW9CLEVBQUUsOEJBQThCLEVBQUUsdUNBQXVDLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsNkJBQTZCLEVBQUUsZ0RBQWdELEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSx5Q0FBeUMsRUFBRSw4QkFBOEIsRUFBRSx5Q0FBeUMsRUFBRSx5Q0FBeUMsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRSx5Q0FBeUMsRUFBRSw2QkFBNkIsRUFBRSw4Q0FBOEMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLDZCQUE2QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLDZCQUE2QixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlDQUFpQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsZ0RBQWdELEVBQUUsd0NBQXdDLEVBQUUsbURBQW1ELEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsaURBQWlELEVBQUUsOENBQThDLEVBQUUseUNBQXlDLEVBQUUsd0NBQXdDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQUUscURBQXFELEVBQUUsdUNBQXVDLEVBQUUsK0NBQStDLEVBQUUsd0NBQXdDLEVBQUUsa0RBQWtELEVBQUUsbUNBQW1DLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCLEVBQUUsdUNBQXVDLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLDZCQUE2QixFQUFFLHNCQUFzQixFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLGNBQWMsRUFBRSx1Q0FBdUMsRUFBRSx5Q0FBeUMsRUFBRSxtQ0FBbUMsRUFBRSxnQkFBZ0IsRUFBRSx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx5Q0FBeUMsRUFBRSxRQUFRLEVBQUUsNENBQTRDLEVBQUUsd0NBQXdDLEVBQUUsc0JBQXNCLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSxRQUFRLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsMEJBQTBCLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsbUNBQW1DLEVBQUUsc0JBQXNCLEVBQUUsc0NBQXNDLEVBQUUsd0JBQXdCLEVBQUUsd0NBQXdDLEVBQUUsd0JBQXdCLEVBQUUscUNBQXFDLEVBQUUsa0NBQWtDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUsMENBQTBDLEVBQUUsZ0NBQWdDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUIsRUFBRSx5REFBeUQsRUFBRSxhQUFhLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsaUJBQWlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxpQ0FBaUMsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsa0NBQWtDLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxrQ0FBa0MsRUFBRSwyQkFBMkIsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSxxQ0FBcUMsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsb0NBQW9DLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSwrQkFBK0IsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLGlEQUFpRCxFQUFFLDJCQUEyQixFQUFFLGlDQUFpQyxFQUFFLHNDQUFzQyxFQUFFLHVDQUF1QyxFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLGtDQUFrQyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLG9DQUFvQyxFQUFFLDBCQUEwQixFQUFFLG1DQUFtQyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsb0RBQW9ELEVBQUUsNkNBQTZDLEVBQUUsb0NBQW9DLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsZ0NBQWdDLEVBQUUscUNBQXFDLEVBQUUsa0NBQWtDLEVBQUUsd0JBQXdCLEVBQUUsbUNBQW1DLEVBQUUscUNBQXFDLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLG1FQUFtRSxFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDBCQUEwQixFQUFFLGlEQUFpRCxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLDZCQUE2QixFQUFFLG1FQUFtRSxFQUFFLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLCtDQUErQyxFQUFFLDJCQUEyQixFQUFFLHNDQUFzQyxFQUFFLDRCQUE0QixFQUFFLGtDQUFrQyxFQUFFLDJCQUEyQixFQUFFLCtCQUErQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsMkRBQTJELEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseUJBQXlCLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLHlDQUF5QyxFQUFFLDZDQUE2QyxFQUFFLHdCQUF3QixFQUFFLGlDQUFpQyxFQUFFLHdDQUF3QyxFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHVDQUF1QyxFQUFFLHVCQUF1QixFQUFFLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHlDQUF5QyxFQUFFLDRCQUE0QixFQUFFLG9CQUFvQixFQUFFLGtDQUFrQyxFQUFFLG1CQUFtQixFQUFFLHVEQUF1RCxFQUFFLDJCQUEyQixFQUFFLHVDQUF1QyxFQUFFLGlDQUFpQyxFQUFFLGtDQUFrQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsZ0NBQWdDLEVBQUUsMkJBQTJCLEVBQUUsa0NBQWtDLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDBDQUEwQyxFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsZ0NBQWdDLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsb0JBQW9CLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsa0JBQWtCLEVBQUUsb0NBQW9DLEVBQUUsc0NBQXNDLEVBQUUsb0JBQW9CLEVBQUUsb0NBQW9DLEVBQUUscUNBQXFDLEVBQUUsZ0NBQWdDLEVBQUUsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBRSxxQ0FBcUMsRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxvQ0FBb0MsRUFBRSw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLG9DQUFvQyxFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxxQ0FBcUMsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLDhCQUE4QixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsb0NBQW9DLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSxnQ0FBZ0MsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUsc0NBQXNDLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxpQ0FBaUMsRUFBRSxnQ0FBZ0MsRUFBRSxvQ0FBb0MsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBbDYvRCxxQ0FBeUQ7QUFFekQsMEJBQW9FO0FBQ3BFLDZDQUEySTtBQUMzSSxvQ0FBcUY7QUFFckYsSUFBSSxRQUFRLEdBQUcsSUFBSSxjQUFJLENBQUM7SUFDcEIsT0FBTyxFQUFFLHdCQUF3QjtJQUNqQyxTQUFTLEVBQUUsMEJBQTBCO0lBQ3JDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDdkIsQ0FBQyxDQUFDO0FBRUgsTUFBYSxJQUFJO0lBaUNiLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUM5QixJQUFJLElBQUksS0FBSyxZQUFZO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDN0MsSUFBSSxJQUFJLEtBQUssVUFBVTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3pDLElBQUksSUFBSSxLQUFLLFlBQVk7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDdkMsSUFBSSxJQUFJLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLElBQUksSUFBSSxLQUFLLFVBQVU7WUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxFQUFVLEVBQUUsTUFBa0I7O1FBekMxQyxPQUFFLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsZ0JBQVcsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUN6QixVQUFLLEdBQVksSUFBSSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsU0FBSSxHQUFRLElBQUksQ0FBQztRQUNqQixVQUFLLEdBQVEsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBUSxJQUFJLENBQUM7UUFDdkIsU0FBSSxHQUFRLElBQUksQ0FBQztRQUNqQixZQUFPLEdBQVEsSUFBSSxDQUFDO1FBRXBCLG1DQUFxQjtRQUNyQix5QkFBcUIsS0FBSyxFQUFDO1FBQzNCLDZCQUF5QixLQUFLLEVBQUM7UUFDL0IsNEJBQXlCLEVBQUUsRUFBQztRQUM1QixxQ0FBd0I7UUFDeEIseUNBQThCO1FBQzlCLCtCQUFvQjtRQUNwQixzQkFBaUIsQ0FBQyxFQUFDO1FBWWYsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFYix1QkFBQSxJQUFJLG9CQUFlLElBQUksTUFBQSxDQUFDO1FBRXhCLDhDQUE4QztRQUM5Qyx1QkFBQSxJQUFJLGdCQUFXLE1BQU0sTUFBQSxDQUFDO1FBQ3RCLHVCQUFBLElBQUksb0JBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLHNDQUFTLE1BQWIsSUFBSSxFQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksNENBQWUsTUFBbkIsSUFBSSxFQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELHVCQUFBLElBQUksc0JBQWlCLElBQUksa0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBQSxDQUFDO1FBQ3RHLHVCQUFBLElBQUksMEJBQWMsQ0FBQyxLQUFLLENBQUMsSUFBQSxVQUFNLEdBQUUsQ0FBQyxDQUFDO1FBQ25DLHVCQUFBLElBQUksMEJBQXFCLEVBQUUsTUFBQSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBYztRQUNqQixLQUFLLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUN4QixhQUFhO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFbEQsdUJBQUEsSUFBSSwyQ0FBYyxNQUFsQixJQUFJLENBQWdCLENBQUM7UUFFckIsdUJBQUEsSUFBSSwyQ0FBYyxNQUFsQixJQUFJLENBQWdCLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQ3RCO1lBQ0ksdUJBQUEsSUFBSSx1Q0FBVSxNQUFkLElBQUksQ0FBWSxDQUFDO1lBQ2pCLHVCQUFBLElBQUksMENBQWEsTUFBakIsSUFBSSxDQUFlLENBQUM7U0FDdkI7O1lBRUcsdUJBQUEsSUFBSSx3Q0FBVyxNQUFmLElBQUksQ0FBYSxDQUFDO1FBRXRCOzs7Ozs7Ozs7VUFTRTtJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBaUI7UUFDekIsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksdUJBQUEsSUFBSSx3QkFBWSxJQUFJLHVCQUFBLElBQUksc0JBQVUsSUFBSSxRQUFRLEVBQUU7WUFDN0UsdUJBQUEsSUFBSSxrQkFBYSxRQUFRLE1BQUEsQ0FBQztZQUMxQix1QkFBQSxJQUFJLG9CQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUEsbUJBQWUsR0FBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLHVCQUFBLElBQUksc0JBQVUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQW1CO1FBQzdCLHVCQUFBLElBQUksb0JBQWUsVUFBVSxNQUFBLENBQUM7SUFDbEMsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLHVCQUFBLElBQUksd0JBQVksQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWdCO1FBQzNCLElBQUksSUFBSSxHQUFRLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQzVEO2FBQ0k7WUFDRCxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFBLG9CQUFjLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBNklELFVBQVUsQ0FBQyxRQUFnQjtRQUN2QixrQ0FBa0M7UUFDbEMsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsRUFBRTtZQUNyQixJQUFBLGdCQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNqQzthQUNJO1lBQ0QsdUJBQXVCO1NBQzFCO0lBQ0wsQ0FBQztJQUdELFdBQVcsQ0FBQyxXQUFtQjtRQUU1QixJQUFBLGlCQUFXLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYyxDQUFDLGNBQXNCO1FBRWpDLElBQUEsb0JBQWMsRUFBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0F1Q0o7QUF2VUQsb0JBdVVDO3dWQXJNWSxDQUFNO0lBQ1gsdUJBQUEsSUFBSSxlQUFVLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxDQUFDLHVCQUFBLElBQUksMEJBQWMsRUFBRTtZQUNyQixJQUFJLElBQUEsVUFBTSxHQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxJQUFJLElBQUEsVUFBTSxHQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO2dCQUNsRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7b0JBQzFCLElBQUEsbUJBQWUsR0FBRSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3hDO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUI7U0FDSjtRQUNELHVCQUFBLElBQUksc0JBQWlCLEtBQUssTUFBQSxDQUFDO0lBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBQSxDQUFDO0FBQ1osQ0FBQyxxREFFYyxDQUFNO0lBQ2pCLFlBQVksQ0FBQyx1QkFBQSxJQUFJLG1CQUFPLENBQUMsQ0FBQztJQUMxQix1QkFBQSxJQUFJLHNCQUFpQixJQUFJLE1BQUEsQ0FBQztJQUUxQixJQUFJLE9BQU8sR0FBRztRQUNWLFFBQVE7S0FDWCxDQUFBO0lBRUQsc0NBQXNDO0lBQ3RDLCtLQUErSztJQUMvSyxHQUFHO0lBRUgsSUFBQSxVQUFNLEdBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsdUJBQUEsSUFBSSw0Q0FBZSxNQUFuQixJQUFJLEVBQWdCLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUcsQ0FBQyxxREFFYyxNQUFjO0lBQ3pCLElBQUEsVUFBTSxHQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixJQUFJLE1BQU0sS0FBSyxRQUFRO1FBQ25CLElBQUEsbUJBQWUsR0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQztJQUdHLG1DQUFtQztJQUNuQyxJQUFJLENBQUMsSUFBQSxVQUFNLEdBQUUsQ0FBQyxRQUFRLENBQUMsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDdkQsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLEtBQUssQ0FBQyxJQUFBLFVBQU0sR0FBRSxDQUFDLENBQUM7S0FDaEM7SUFFRCxpQ0FBaUM7SUFDakMsSUFBSSxJQUFBLFVBQU0sR0FBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBQSxJQUFJLG9CQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDckQsSUFBQSxVQUFNLEdBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLENBQUM7S0FDdEM7U0FFRDtRQUNJLHVCQUFBLElBQUksb0JBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxnQkFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLElBQUksQ0FBQztZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNwQixDQUFDLENBQUM7S0FDTjtBQUNMLENBQUM7SUFHRyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3pCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXhELDRCQUE0QjtRQUM1QixPQUFPLHVCQUFBLElBQUkseUJBQWEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ25FLElBQUksTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFBLFVBQU0sR0FBRSxDQUFDLENBQUM7WUFDcEUsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztRQUVELGdDQUFnQztRQUNoQyxPQUFPLHVCQUFBLElBQUkseUJBQWEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ25FLElBQUEsVUFBTSxHQUFFLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUkseUJBQWEsQ0FBQyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLE1BQU0sQ0FBQyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUM1RDtRQUVELHVGQUF1RjtRQUN2RixLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0Qyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEYsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRCx1QkFBQSxJQUFJLDBCQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7QUFDTCxDQUFDO0lBR0csS0FBSyxJQUFJLEVBQUUsSUFBSSx1QkFBQSxJQUFJLHlCQUFhLEVBQUU7UUFDOUIsSUFBQSxVQUFNLEdBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0M7SUFDRCx1QkFBQSxJQUFJLHFCQUFnQixFQUFFLE1BQUEsQ0FBQztJQUN2Qix1QkFBQSxJQUFJLDBCQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7SUFLRyxLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQ2xDO1FBQ0ksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUN6QztZQUNJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxNQUFNLEdBQUcsSUFBQSxtQkFBZSxHQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUNwRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUM7Z0JBQ2YsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUMzRCxJQUFJLFNBQVMsR0FBRyxJQUFJLGdCQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBRTdELElBQUksS0FBSyxDQUFDO2dCQUNWLElBQUksU0FBUyxLQUFLLE9BQU8sRUFDekI7b0JBQ0ksS0FBSyxHQUFHLFNBQVMsQ0FBQztpQkFDckI7cUJBQ0ksSUFBSSxTQUFTLEtBQUssUUFBUSxFQUMvQjtvQkFDSSxLQUFLLEdBQUcsU0FBUyxDQUFDO2lCQUNyQjtxQkFDSSxJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQzVCO29CQUNJLEtBQUssR0FBRyxTQUFTLENBQUM7aUJBQ3JCO3FCQUVEO29CQUNJLEtBQUssR0FBRyxTQUFTLENBQUM7aUJBQ3JCO2dCQUNELElBQUksY0FBYyxHQUFHLElBQUksa0JBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUNwSCxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUEsVUFBTSxHQUFFLENBQUMsQ0FBQztnQkFDL0IsdUJBQUEsSUFBSSw4QkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7YUFDOUM7U0FDSjtLQUNKO0FBQ0wsQ0FBQztJQUlHLEtBQUssSUFBSSxLQUFLLElBQUksdUJBQUEsSUFBSSw4QkFBa0IsRUFDeEM7UUFDSSxJQUFBLFVBQU0sR0FBRSxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLDhCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7S0FDdEQ7QUFDTCxDQUFDO0FBK0RMLE1BQWEsT0FBUSxTQUFRLElBQUk7SUFDN0IsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFDZDtZQUNJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBQSx5QkFBcUIsR0FBRSxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUM1RCxPQUFPLElBQUksQ0FBQTtpQkFDVixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBQSx5QkFBcUIsR0FBRSxDQUFDLEVBQUUsS0FBSyxRQUFRO2dCQUNoRSxPQUFPLElBQUksQ0FBQTtTQUNsQjs7WUFFRyxPQUFPLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFBO1FBQ3BELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQWJELDBCQWFDO0FBRUQsTUFBYSxRQUFTLFNBQVEsT0FBTztJQUNqQyxZQUFZLEVBQVUsRUFBRSxPQUFzQjtRQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLDJCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFMRCw0QkFLQztBQUVELE1BQWEsVUFBVyxTQUFRLE9BQU87SUFDbkMsWUFBWSxFQUFVLEVBQUUsT0FBc0I7UUFDMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSw2QkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQUxELGdDQUtDO0FBRUQsTUFBYSxVQUFXLFNBQVEsSUFBSTtJQUNoQyxZQUFZLEVBQVUsRUFBRSxPQUFzQjtRQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLDZCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQ2Q7WUFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFDNUQsT0FBTyxJQUFJLENBQUE7aUJBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxFQUFFLEtBQUssUUFBUTtnQkFDaEUsT0FBTyxJQUFJLENBQUE7U0FDbEI7O1lBRUcsT0FBTyxJQUFBLHlCQUFxQixHQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQTtRQUNwRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0o7QUFsQkQsZ0NBa0JDO0FBRUQsTUFBYSxRQUFTLFNBQVEsSUFBSTtJQUM5QixZQUFZLEVBQVUsRUFBRSxPQUFzQjtRQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLDJCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFDZDtZQUNJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBQSx5QkFBcUIsR0FBRSxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUM1RCxPQUFPLElBQUksQ0FBQTtpQkFDVixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBQSx5QkFBcUIsR0FBRSxDQUFDLEVBQUUsS0FBSyxRQUFRO2dCQUNoRSxPQUFPLElBQUksQ0FBQTtTQUNsQjs7WUFFRyxPQUFPLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFBO1FBQ3BELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQWxCRCw0QkFrQkM7QUFFRCxNQUFhLE1BQU8sU0FBUSxJQUFJO0lBQzVCLFlBQVksRUFBVSxFQUFFLE1BQWtCO1FBRXRDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFDZDtZQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFBLHlCQUFxQixHQUFFLENBQUMsTUFBTSxLQUFLLFFBQVE7Z0JBQy9ELE9BQU8sSUFBSSxDQUFBO1NBQ2xCOztZQUVHLE9BQU8sSUFBQSx5QkFBcUIsR0FBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUE7UUFDcEQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBakJELHdCQWlCQztBQUVELE1BQWEsT0FBUSxTQUFRLE1BQU07SUFDL0IsWUFBWSxFQUFVLEVBQUUsT0FBc0I7UUFDMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSx5QkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBTEQsMEJBS0M7QUFFRCxNQUFhLElBQUssU0FBUSxNQUFNO0lBQzVCLFlBQVksRUFBVSxFQUFFLE9BQXNCO1FBQzFDLElBQUksTUFBTSxHQUFHLElBQUkseUJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQUxELG9CQUtDOzs7OztBQ3ZiVSxRQUFBLFNBQVMsR0FBUSxFQUFFLENBQUM7QUFDL0IsVUFBVTtBQUNWLGlCQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNwQixpQkFBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7SUFDbEIsUUFBUTtJQUNSLE9BQU87SUFDUCxZQUFZO0NBQ2YsQ0FBQTtBQUVELGlCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRztJQUNqQixVQUFVO0lBQ1YsVUFBVTtJQUNWLFNBQVM7SUFDVCxRQUFRO0lBQ1IsV0FBVztJQUNYLE9BQU87SUFDUCxPQUFPO0NBQ1YsQ0FBQTtBQUVELGlCQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRztJQUNuQixPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixTQUFTO0NBQ1osQ0FBQTtBQUVELGlCQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUN2QixNQUFNO0lBQ04sS0FBSztDQUNSLENBQUE7QUFFRCxpQkFBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUc7SUFDdkIsV0FBVztDQUNkLENBQUE7QUFFRCx1QkFBdUI7QUFDdkIsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0FBQ3ZCLGlCQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRztJQUMzQixhQUFhO0lBQ2IsY0FBYztJQUNkLFVBQVU7SUFDVixhQUFhO0lBQ2IsVUFBVTtJQUNWLE9BQU87Q0FDVixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHO0lBQ3JCLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixPQUFPO0lBQ1AsUUFBUTtJQUNSLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxvQkFBb0I7SUFDcEIsYUFBYTtJQUNiLFFBQVE7SUFDUixRQUFRO0lBQ1IsTUFBTTtJQUNOLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsU0FBUztJQUNULFlBQVk7SUFDWixhQUFhO0lBQ2IsY0FBYztJQUNkLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLEtBQUs7Q0FDUixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHO0lBQ3RCLFdBQVc7SUFDWCxjQUFjO0lBQ2QsUUFBUTtJQUNSLE1BQU07Q0FDVCxDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHO0lBQ3JCLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLGFBQWE7SUFDYixXQUFXO0lBQ1gsYUFBYTtJQUNiLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixhQUFhO0lBQ2IsUUFBUTtJQUNSLFVBQVU7SUFDVixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixTQUFTO0lBQ1QsZUFBZTtJQUNmLGVBQWU7SUFDZixZQUFZO0lBQ1osZUFBZTtJQUNmLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtDQUNuQixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHO0lBQ3ZCLFVBQVU7SUFDVixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixlQUFlO0lBQ2YsU0FBUztJQUNULFNBQVM7SUFDVCxhQUFhO0lBQ2IsV0FBVztJQUNYLGVBQWU7SUFDZixjQUFjO0lBQ2QsY0FBYztDQUNqQixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHO0lBQzVCLFdBQVc7SUFDWCxXQUFXO0lBQ1gsY0FBYztJQUNkLFNBQVM7SUFDVCxZQUFZO0NBQ2YsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRztJQUN2QixhQUFhO0lBQ2IsU0FBUztJQUNULFlBQVk7SUFDWixXQUFXO0lBQ1gsTUFBTTtJQUNOLG1CQUFtQjtJQUNuQixZQUFZO0lBQ1osTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1IsTUFBTTtDQUNULENBQUE7QUFFRCxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUc7SUFDekIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixRQUFRO0lBQ1IsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixZQUFZO0lBQ1osYUFBYTtJQUNiLFNBQVM7SUFDVCxRQUFRO0lBQ1IsT0FBTztJQUNQLFVBQVU7SUFDVixjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLFNBQVM7SUFDVCxhQUFhO0lBQ2IsY0FBYztJQUNkLFVBQVU7SUFDVixjQUFjO0lBQ2QsWUFBWTtJQUNaLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLGNBQWM7SUFDZCxVQUFVO0NBQ2IsQ0FBQTtBQUVELGVBQWU7QUFDZixpQkFBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUE7QUFFbEIsaUJBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHO0lBQ2hCLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsV0FBVztJQUNYLE9BQU87SUFDUCxXQUFXO0lBQ1gsT0FBTztJQUNQLFFBQVE7SUFDUixlQUFlO0lBQ2YsT0FBTztJQUNQLE1BQU07SUFDTixjQUFjO0NBQ2pCLENBQUE7QUFFRCxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUc7SUFDaEIsYUFBYTtJQUNiLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0NBQ1YsQ0FBQTtBQUVELGlCQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRztJQUNuQixTQUFTO0lBQ1QsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsTUFBTTtJQUNOLFFBQVE7Q0FDWCxDQUFBO0FBRUQsaUJBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHO0lBQ25CLGFBQWE7SUFDYixRQUFRO0lBQ1IsUUFBUTtDQUNYLENBQUE7QUFFRCxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUc7SUFDbEIsTUFBTTtJQUNOLE1BQU07SUFDTixNQUFNO0NBQ1QsQ0FBQTtBQUVELGlCQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRztJQUNsQixnQkFBZ0I7SUFDaEIsYUFBYTtDQUNoQixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHO0lBQ3RCLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCxTQUFTO0NBQ1osQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25SRCwyQ0FBNEI7QUFDNUIseUNBQWtDO0FBQ2xDLDBCQUEwQztBQWlCMUMsTUFBYSxVQUFXLFNBQVEsQ0FBQyxDQUFDLE1BQU07SUFPcEMsWUFBWSxPQUFzQjtRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOztRQVByRCx1Q0FBaUI7UUFDakIsbUNBQWE7UUFDYixvQ0FBZTtRQUNmLDRCQUFrQixJQUFJLEVBQUE7UUFDdEIsK0JBQXFCLEtBQUssRUFBQTtRQUl0Qix1QkFBQSxJQUFJLHdCQUFhLE9BQU8sQ0FBQyxRQUFRLE1BQUEsQ0FBQztRQUNsQyx1QkFBQSxJQUFJLG9CQUFTLE9BQU8sQ0FBQyxJQUFJLE1BQUEsQ0FBQztRQUMxQix1QkFBQSxJQUFJLHFCQUFVLE9BQU8sQ0FBQyxLQUFLLE1BQUEsQ0FBQztRQUU1QixJQUFJLE1BQU0sR0FBRyxJQUFJLGtCQUFNLENBQUMsdUJBQUEsSUFBSSw0REFBbUIsTUFBdkIsSUFBSSxFQUFvQixPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDO1lBQ3hCLFNBQVMsR0FBRyxLQUFLLENBQUE7YUFDaEIsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUM7WUFDN0IsU0FBUyxHQUFHLE1BQU0sQ0FBQTs7WUFFbEIsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUV6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDckIsSUFBSSxFQUFFOzs7MENBR3dCLFNBQVM7MENBQ1QsU0FBUztnRkFDNkIsR0FBRzs4RUFDTCx1QkFBQSxJQUFJLDRCQUFVOzs7c0VBR3RCLHVCQUFBLElBQUksd0JBQU07Ozt5QkFHdkQ7WUFDYixTQUFTLEVBQUUsYUFBYTtTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBVTtRQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQU0sWUFBSSxNQUFBLENBQUMsQ0FBQyxNQUFNLDBDQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFNLFlBQUksTUFBQSxDQUFDLENBQUMsTUFBTSwwQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBZ0I7O1FBQ2pCLHVCQUFBLElBQUkscUJBQVUsSUFBSSxDQUFDLEtBQUssTUFBQSxDQUFDO1FBQ3pCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDakIsSUFBSSxPQUFPLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsSUFBSSxXQUFXLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxTQUFTLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakUsSUFBSSxJQUFJLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsSUFBSSxXQUFXLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxRQUFRLEdBQWdCLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFNUQsMkNBQTJDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUMzQixXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDL0IsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUU1Qix1RkFBdUY7WUFDdkYsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxNQUFNLEVBQ3pFO2dCQUNJLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDbkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7YUFDbkM7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxNQUFNO2dCQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFFbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pGLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUV6RixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDekQsV0FBVyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM5RSxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsdUJBQUEsSUFBSSx5QkFBTyxFQUNoQjtnQkFDSSxNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsRUFBRSwwQ0FBRSxhQUFhLENBQUMsT0FBTyxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoRjtTQUNKO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFpQjs7UUFDekIsdUJBQUEsSUFBSSx3QkFBYSxRQUFRLE1BQUEsQ0FBQztRQUMxQixNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsRUFBRSwwQ0FBRSxhQUFhLENBQUMsT0FBTyxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRixNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsRUFBRSwwQ0FBRSxhQUFhLENBQUMsT0FBTyxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUYsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsMENBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyx1QkFBQSxJQUFJLDRCQUFVLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFnQjs7UUFDdkIsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsMENBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sSUFBSSx1QkFBQSxJQUFJLHlCQUFPLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sdUJBQUEsSUFBSSx5QkFBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyx1QkFBQSxJQUFJLHlCQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBaUZKO0FBck1ELGdDQXFNQztrU0EvRXNCLE9BQXNCO0lBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDZixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUU3QixjQUFjO0lBQ2QsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUM7UUFDeEIsUUFBUSxHQUFHLElBQUksQ0FBQSxDQUFDLGFBQWE7U0FDNUIsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUM7UUFDN0IsUUFBUSxHQUFHLElBQUksQ0FBQSxDQUFDLGNBQWM7O1FBRTlCLFFBQVEsR0FBRyxJQUFJLENBQUEsQ0FBQyxhQUFhO0lBRWpDLFNBQVM7SUFDVCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFBO1FBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUNiLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN4QixVQUFVLEdBQUcsSUFBSSxDQUFBO2FBQ2hCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixVQUFVLEdBQUcsSUFBSSxDQUFBO1FBRXJCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN4QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzVCO0lBRUQsWUFBWTtTQUNQLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUNqQztRQUNJLEdBQUcsR0FBRyxJQUFJLENBQUE7UUFDVixNQUFNLEdBQUcsSUFBSSxDQUFBO1FBQ2IsVUFBVSxHQUFHLElBQUksQ0FBQTtLQUNwQjtJQUNELFVBQVU7U0FDTCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQTtJQUNkLFlBQVk7U0FDUCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDakM7UUFDSSxHQUFHLEdBQUcsSUFBSSxDQUFBO1FBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUNiLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUM1QjtZQUNJLGlCQUFpQixHQUFHLElBQUksQ0FBQTtZQUN4QixpQkFBaUIsR0FBRyxJQUFJLENBQUE7U0FDM0I7YUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDakM7WUFDSSxpQkFBaUIsR0FBRyxJQUFJLENBQUE7WUFDeEIsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1NBQzNCO2FBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQ2xDO1lBQ0ksaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1lBQ3hCLGlCQUFpQixHQUFHLElBQUksQ0FBQTtTQUMzQjthQUNJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxFQUNsQztZQUNJLGlCQUFpQixHQUFHLElBQUksQ0FBQTtZQUN4QixpQkFBaUIsR0FBRyxJQUFJLENBQUE7U0FDM0I7S0FDSjtJQUVELE9BQU8sS0FBSyxRQUFRLEdBQUcsR0FBRyxPQUFPLE1BQU0sR0FBRyxVQUFVLEdBQUcsYUFBYSxHQUFHLGlCQUFpQixHQUFHLGlCQUFpQixFQUFFLENBQUE7QUFDbEgsQ0FBQztBQUdMLE1BQWEsYUFBYyxTQUFRLFVBQVU7SUFDekMsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixPQUFPLE1BQU0sQ0FBQztRQUVsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxJQUFJLENBQUM7YUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsT0FBTyxNQUFNLENBQUM7O1lBRWQsT0FBTyxJQUFBLHlCQUFxQixHQUFFLENBQUMsRUFBRSxDQUFDO0lBQzFDLENBQUM7Q0FDSjtBQVpELHNDQVlDO0FBRUQsTUFBYSxjQUFlLFNBQVEsYUFBYTtDQUNoRDtBQURELHdDQUNDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSxhQUFhO0NBQ2xEO0FBREQsNENBQ0M7QUFFRCxNQUFhLGdCQUFpQixTQUFRLFVBQVU7SUFDNUMsZ0RBQWdEO0lBQ2hELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTyxNQUFNLENBQUM7UUFFbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFBLHlCQUFxQixHQUFFLENBQUMsSUFBSSxDQUFDO2FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3JCLE9BQU8sTUFBTSxDQUFDOztZQUVkLE9BQU8sSUFBQSx5QkFBcUIsR0FBRSxDQUFDLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQ0o7QUFiRCw0Q0FhQztBQUVELE1BQWEsY0FBZSxTQUFRLFVBQVU7SUFDMUMsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixPQUFPLE1BQU0sQ0FBQztRQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixPQUFPLE1BQU0sQ0FBQzs7WUFFZCxPQUFPLElBQUEseUJBQXFCLEdBQUUsQ0FBQyxFQUFFLENBQUM7SUFDMUMsQ0FBQztDQUNKO0FBVkQsd0NBVUM7QUFFRCxNQUFhLFlBQWEsU0FBUSxVQUFVO0lBQ3hDLGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTyxNQUFNLENBQUM7UUFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsT0FBTyxNQUFNLENBQUM7O1lBRWQsT0FBTyxJQUFBLHlCQUFxQixHQUFFLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUM7Q0FDSjtBQVZELG9DQVVDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25SRCxxQ0FBK0M7QUFDL0MsMEJBQThDO0FBQzlDLGlDQUEwQztBQUUxQyxNQUFhLFlBQVk7SUFJckI7UUFIQSxzQ0FBK0I7UUFDL0IsNENBQXFCO1FBR2pCLHVCQUFBLElBQUksdUJBQVUsRUFBRSxNQUFBLENBQUM7UUFDakIsdUJBQUEsSUFBSSw2QkFBZ0IsRUFBRSxNQUFBLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVLEVBQUUsSUFBUztRQUN6QiwrRUFBK0U7UUFDL0UsSUFBSSxXQUFXLEdBQUcsV0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLElBQUksU0FBUyxFQUFFO1lBQzFCLElBQUksT0FBTyxHQUFHO2dCQUNWLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDbEIsQ0FBQTtZQUNELHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQVU7UUFDbEIsT0FBTyx1QkFBQSxJQUFJLDJCQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFVO0lBRXJCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixLQUFLLElBQUksRUFBRSxJQUFJLHVCQUFBLElBQUksMkJBQU8sRUFBRTtZQUN4Qix1QkFBQSxJQUFJLDJCQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFTO1FBQ1osS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsMkdBQTJHO1lBQzNHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSx1QkFBQSxJQUFJLDJCQUFPLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakQ7WUFDRCx1QkFBQSxJQUFJLDJCQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JDLElBQUEsb0JBQWdCLEdBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixJQUFBLG9CQUFnQixHQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNELElBQUEsb0JBQWdCLEdBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLElBQUEsVUFBTSxHQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9CLG9DQUFvQztTQUN2QzthQUNJO1lBQ0QsSUFBQSxVQUFNLEdBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIscUNBQXFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQW9CO1FBRWpDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLEtBQUssSUFBSSxFQUFFLElBQUksdUJBQUEsSUFBSSwyQkFBTyxFQUMxQjtZQUNJLElBQUksTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FBQyx1QkFBQSxJQUFJLDJCQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzNCO2dCQUNJLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7U0FDSjtJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxJQUFJLEVBQUUsSUFBSSx1QkFBQSxJQUFJLDJCQUFPLEVBQUU7WUFDeEIsSUFBSSx1QkFBQSxJQUFJLDJCQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSwyQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdkM7U0FDSjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBZ0I7UUFDM0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxhQUFhLEVBQUU7WUFDM0IsSUFBSSxhQUFhLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLGlDQUFpQztZQUNqQyxHQUFHO1lBQ0gsNERBQTREO1lBQzVELEdBQUc7WUFDSCxhQUFhLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLEtBQUssSUFBSSxHQUFHLElBQUksYUFBYSxFQUFFO1lBQzNCLElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxpQ0FBaUM7WUFDakMsR0FBRztZQUNILDREQUE0RDtZQUM1RCxHQUFHO1lBQ0gsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsV0FBbUI7UUFFeEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxhQUFhLEVBQzdCO1lBQ0ksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxjQUFzQjtRQUU5QyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLElBQUksR0FBRyxJQUFJLGFBQWEsRUFDN0I7WUFDSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJO0lBQ0osc0VBQXNFO0lBQ3RFLFFBQVE7SUFDUiw0QkFBNEI7SUFDNUIsUUFBUTtJQUNSLDJFQUEyRTtJQUMzRSxRQUFRO0lBQ1IsNkJBQTZCO0lBQzdCLFFBQVE7SUFDUixJQUFJO0lBRUosY0FBYztJQUNkLElBQUk7SUFDSixtREFBbUQ7SUFDbkQsSUFBSTtJQUVKLGVBQWU7SUFDZixJQUFJO0lBQ0oseUNBQXlDO0lBQ3pDLFFBQVE7SUFDUiw2Q0FBNkM7SUFDN0MsOEJBQThCO0lBQzlCLFFBQVE7SUFDUixJQUFJO0lBRUosVUFBVSxDQUFDLEVBQVU7UUFDakIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxhQUFhLEVBQUU7WUFDM0IsNERBQTREO1lBQzVELElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxpQ0FBaUM7WUFDakMsR0FBRztZQUNILDREQUE0RDtZQUM1RCxHQUFHO1lBQ0gsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoQztJQUNMLENBQUM7Q0F5REo7QUFsT0Qsb0NBa09DIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyogQHByZXNlcnZlXG4gKiBMZWFmbGV0IDEuOS4zLCBhIEpTIGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHMuIGh0dHBzOi8vbGVhZmxldGpzLmNvbVxuICogKGMpIDIwMTAtMjAyMiBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5sZWFmbGV0ID0ge30pKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHZlcnNpb24gPSBcIjEuOS4zXCI7XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIFV0aWxcclxuICAgKlxyXG4gICAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMsIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqL1xyXG5cclxuICAvLyBAZnVuY3Rpb24gZXh0ZW5kKGRlc3Q6IE9iamVjdCwgc3JjPzogT2JqZWN0KTogT2JqZWN0XHJcbiAgLy8gTWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBgc3JjYCBvYmplY3QgKG9yIG11bHRpcGxlIG9iamVjdHMpIGludG8gYGRlc3RgIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgbGF0dGVyLiBIYXMgYW4gYEwuZXh0ZW5kYCBzaG9ydGN1dC5cclxuICBmdW5jdGlvbiBleHRlbmQoZGVzdCkge1xyXG4gIFx0dmFyIGksIGosIGxlbiwgc3JjO1xyXG5cclxuICBcdGZvciAoaiA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGogPCBsZW47IGorKykge1xyXG4gIFx0XHRzcmMgPSBhcmd1bWVudHNbal07XHJcbiAgXHRcdGZvciAoaSBpbiBzcmMpIHtcclxuICBcdFx0XHRkZXN0W2ldID0gc3JjW2ldO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gZGVzdDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjcmVhdGUocHJvdG86IE9iamVjdCwgcHJvcGVydGllcz86IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIENvbXBhdGliaWxpdHkgcG9seWZpbGwgZm9yIFtPYmplY3QuY3JlYXRlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvY3JlYXRlKVxyXG4gIHZhciBjcmVhdGUkMiA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcclxuICBcdGZ1bmN0aW9uIEYoKSB7fVxyXG4gIFx0cmV0dXJuIGZ1bmN0aW9uIChwcm90bykge1xyXG4gIFx0XHRGLnByb3RvdHlwZSA9IHByb3RvO1xyXG4gIFx0XHRyZXR1cm4gbmV3IEYoKTtcclxuICBcdH07XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGJpbmQoZm46IEZ1bmN0aW9uLCDigKYpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gYm91bmQgdG8gdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGxpa2UgW0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kKS5cclxuICAvLyBIYXMgYSBgTC5iaW5kKClgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIGJpbmQoZm4sIG9iaikge1xyXG4gIFx0dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG5cclxuICBcdGlmIChmbi5iaW5kKSB7XHJcbiAgXHRcdHJldHVybiBmbi5iaW5kLmFwcGx5KGZuLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG5cclxuICBcdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBmbi5hcHBseShvYmosIGFyZ3MubGVuZ3RoID8gYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IGFyZ3VtZW50cyk7XHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgLy8gQHByb3BlcnR5IGxhc3RJZDogTnVtYmVyXHJcbiAgLy8gTGFzdCB1bmlxdWUgSUQgdXNlZCBieSBbYHN0YW1wKClgXSgjdXRpbC1zdGFtcClcclxuICB2YXIgbGFzdElkID0gMDtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHN0YW1wKG9iajogT2JqZWN0KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgdW5pcXVlIElEIG9mIGFuIG9iamVjdCwgYXNzaWduaW5nIGl0IG9uZSBpZiBpdCBkb2Vzbid0IGhhdmUgaXQuXHJcbiAgZnVuY3Rpb24gc3RhbXAob2JqKSB7XHJcbiAgXHRpZiAoISgnX2xlYWZsZXRfaWQnIGluIG9iaikpIHtcclxuICBcdFx0b2JqWydfbGVhZmxldF9pZCddID0gKytsYXN0SWQ7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gb2JqLl9sZWFmbGV0X2lkO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRocm90dGxlKGZuOiBGdW5jdGlvbiwgdGltZTogTnVtYmVyLCBjb250ZXh0OiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBmdW5jdGlvbiBgZm5gIHdpdGggdGhlIGdpdmVuIHNjb3BlIGBjb250ZXh0YFxyXG4gIC8vIChzbyB0aGF0IHRoZSBgdGhpc2Aga2V5d29yZCByZWZlcnMgdG8gYGNvbnRleHRgIGluc2lkZSBgZm5gJ3MgY29kZSkuIFRoZSBmdW5jdGlvblxyXG4gIC8vIGBmbmAgd2lsbCBiZSBjYWxsZWQgbm8gbW9yZSB0aGFuIG9uZSB0aW1lIHBlciBnaXZlbiBhbW91bnQgb2YgYHRpbWVgLiBUaGUgYXJndW1lbnRzXHJcbiAgLy8gcmVjZWl2ZWQgYnkgdGhlIGJvdW5kIGZ1bmN0aW9uIHdpbGwgYmUgYW55IGFyZ3VtZW50cyBwYXNzZWQgd2hlbiBiaW5kaW5nIHRoZVxyXG4gIC8vIGZ1bmN0aW9uLCBmb2xsb3dlZCBieSBhbnkgYXJndW1lbnRzIHBhc3NlZCB3aGVuIGludm9raW5nIHRoZSBib3VuZCBmdW5jdGlvbi5cclxuICAvLyBIYXMgYW4gYEwudGhyb3R0bGVgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aW1lLCBjb250ZXh0KSB7XHJcbiAgXHR2YXIgbG9jaywgYXJncywgd3JhcHBlckZuLCBsYXRlcjtcclxuXHJcbiAgXHRsYXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gcmVzZXQgbG9jayBhbmQgY2FsbCBpZiBxdWV1ZWRcclxuICBcdFx0bG9jayA9IGZhbHNlO1xyXG4gIFx0XHRpZiAoYXJncykge1xyXG4gIFx0XHRcdHdyYXBwZXJGbi5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICBcdFx0XHRhcmdzID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcblxyXG4gIFx0d3JhcHBlckZuID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAobG9jaykge1xyXG4gIFx0XHRcdC8vIGNhbGxlZCB0b28gc29vbiwgcXVldWUgdG8gY2FsbCBsYXRlclxyXG4gIFx0XHRcdGFyZ3MgPSBhcmd1bWVudHM7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIGNhbGwgYW5kIGxvY2sgdW50aWwgbGF0ZXJcclxuICBcdFx0XHRmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xyXG4gIFx0XHRcdHNldFRpbWVvdXQobGF0ZXIsIHRpbWUpO1xyXG4gIFx0XHRcdGxvY2sgPSB0cnVlO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdHJldHVybiB3cmFwcGVyRm47XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gd3JhcE51bShudW06IE51bWJlciwgcmFuZ2U6IE51bWJlcltdLCBpbmNsdWRlTWF4PzogQm9vbGVhbik6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIG51bWJlciBgbnVtYCBtb2R1bG8gYHJhbmdlYCBpbiBzdWNoIGEgd2F5IHNvIGl0IGxpZXMgd2l0aGluXHJcbiAgLy8gYHJhbmdlWzBdYCBhbmQgYHJhbmdlWzFdYC4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgYWx3YXlzIHNtYWxsZXIgdGhhblxyXG4gIC8vIGByYW5nZVsxXWAgdW5sZXNzIGBpbmNsdWRlTWF4YCBpcyBzZXQgdG8gYHRydWVgLlxyXG4gIGZ1bmN0aW9uIHdyYXBOdW0oeCwgcmFuZ2UsIGluY2x1ZGVNYXgpIHtcclxuICBcdHZhciBtYXggPSByYW5nZVsxXSxcclxuICBcdCAgICBtaW4gPSByYW5nZVswXSxcclxuICBcdCAgICBkID0gbWF4IC0gbWluO1xyXG4gIFx0cmV0dXJuIHggPT09IG1heCAmJiBpbmNsdWRlTWF4ID8geCA6ICgoeCAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZhbHNlRm4oKTogRnVuY3Rpb25cclxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggYWx3YXlzIHJldHVybnMgYGZhbHNlYC5cclxuICBmdW5jdGlvbiBmYWxzZUZuKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZvcm1hdE51bShudW06IE51bWJlciwgcHJlY2lzaW9uPzogTnVtYmVyfGZhbHNlKTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIGBudW1gIHJvdW5kZWQgd2l0aCBzcGVjaWZpZWQgYHByZWNpc2lvbmAuXHJcbiAgLy8gVGhlIGRlZmF1bHQgYHByZWNpc2lvbmAgdmFsdWUgaXMgNiBkZWNpbWFsIHBsYWNlcy5cclxuICAvLyBgZmFsc2VgIGNhbiBiZSBwYXNzZWQgdG8gc2tpcCBhbnkgcHJvY2Vzc2luZyAoY2FuIGJlIHVzZWZ1bCB0byBhdm9pZCByb3VuZC1vZmYgZXJyb3JzKS5cclxuICBmdW5jdGlvbiBmb3JtYXROdW0obnVtLCBwcmVjaXNpb24pIHtcclxuICBcdGlmIChwcmVjaXNpb24gPT09IGZhbHNlKSB7IHJldHVybiBudW07IH1cclxuICBcdHZhciBwb3cgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2IDogcHJlY2lzaW9uKTtcclxuICBcdHJldHVybiBNYXRoLnJvdW5kKG51bSAqIHBvdykgLyBwb3c7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gdHJpbShzdHI6IFN0cmluZyk6IFN0cmluZ1xyXG4gIC8vIENvbXBhdGliaWxpdHkgcG9seWZpbGwgZm9yIFtTdHJpbmcucHJvdG90eXBlLnRyaW1dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9UcmltKVxyXG4gIGZ1bmN0aW9uIHRyaW0oc3RyKSB7XHJcbiAgXHRyZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzcGxpdFdvcmRzKHN0cjogU3RyaW5nKTogU3RyaW5nW11cclxuICAvLyBUcmltcyBhbmQgc3BsaXRzIHRoZSBzdHJpbmcgb24gd2hpdGVzcGFjZSBhbmQgcmV0dXJucyB0aGUgYXJyYXkgb2YgcGFydHMuXHJcbiAgZnVuY3Rpb24gc3BsaXRXb3JkcyhzdHIpIHtcclxuICBcdHJldHVybiB0cmltKHN0cikuc3BsaXQoL1xccysvKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzZXRPcHRpb25zKG9iajogT2JqZWN0LCBvcHRpb25zOiBPYmplY3QpOiBPYmplY3RcclxuICAvLyBNZXJnZXMgdGhlIGdpdmVuIHByb3BlcnRpZXMgdG8gdGhlIGBvcHRpb25zYCBvZiB0aGUgYG9iamAgb2JqZWN0LCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBvcHRpb25zLiBTZWUgYENsYXNzIG9wdGlvbnNgLiBIYXMgYW4gYEwuc2V0T3B0aW9uc2Agc2hvcnRjdXQuXHJcbiAgZnVuY3Rpb24gc2V0T3B0aW9ucyhvYmosIG9wdGlvbnMpIHtcclxuICBcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ29wdGlvbnMnKSkge1xyXG4gIFx0XHRvYmoub3B0aW9ucyA9IG9iai5vcHRpb25zID8gY3JlYXRlJDIob2JqLm9wdGlvbnMpIDoge307XHJcbiAgXHR9XHJcbiAgXHRmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcclxuICBcdFx0b2JqLm9wdGlvbnNbaV0gPSBvcHRpb25zW2ldO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG9iai5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBhcmFtU3RyaW5nKG9iajogT2JqZWN0LCBleGlzdGluZ1VybD86IFN0cmluZywgdXBwZXJjYXNlPzogQm9vbGVhbik6IFN0cmluZ1xyXG4gIC8vIENvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgcGFyYW1ldGVyIFVSTCBzdHJpbmcsIGUuZy4gYHthOiBcImZvb1wiLCBiOiBcImJhclwifWBcclxuICAvLyB0cmFuc2xhdGVzIHRvIGAnP2E9Zm9vJmI9YmFyJ2AuIElmIGBleGlzdGluZ1VybGAgaXMgc2V0LCB0aGUgcGFyYW1ldGVycyB3aWxsXHJcbiAgLy8gYmUgYXBwZW5kZWQgYXQgdGhlIGVuZC4gSWYgYHVwcGVyY2FzZWAgaXMgYHRydWVgLCB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGxcclxuICAvLyBiZSB1cHBlcmNhc2VkIChlLmcuIGAnP0E9Zm9vJkI9YmFyJ2ApXHJcbiAgZnVuY3Rpb24gZ2V0UGFyYW1TdHJpbmcob2JqLCBleGlzdGluZ1VybCwgdXBwZXJjYXNlKSB7XHJcbiAgXHR2YXIgcGFyYW1zID0gW107XHJcbiAgXHRmb3IgKHZhciBpIGluIG9iaikge1xyXG4gIFx0XHRwYXJhbXMucHVzaChlbmNvZGVVUklDb21wb25lbnQodXBwZXJjYXNlID8gaS50b1VwcGVyQ2FzZSgpIDogaSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gKCghZXhpc3RpbmdVcmwgfHwgZXhpc3RpbmdVcmwuaW5kZXhPZignPycpID09PSAtMSkgPyAnPycgOiAnJicpICsgcGFyYW1zLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHZhciB0ZW1wbGF0ZVJlID0gL1xceyAqKFtcXHdfIC1dKykgKlxcfS9nO1xyXG5cclxuICAvLyBAZnVuY3Rpb24gdGVtcGxhdGUoc3RyOiBTdHJpbmcsIGRhdGE6IE9iamVjdCk6IFN0cmluZ1xyXG4gIC8vIFNpbXBsZSB0ZW1wbGF0aW5nIGZhY2lsaXR5LCBhY2NlcHRzIGEgdGVtcGxhdGUgc3RyaW5nIG9mIHRoZSBmb3JtIGAnSGVsbG8ge2F9LCB7Yn0nYFxyXG4gIC8vIGFuZCBhIGRhdGEgb2JqZWN0IGxpa2UgYHthOiAnZm9vJywgYjogJ2Jhcid9YCwgcmV0dXJucyBldmFsdWF0ZWQgc3RyaW5nXHJcbiAgLy8gYCgnSGVsbG8gZm9vLCBiYXInKWAuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHN0cmluZ3MgZm9yXHJcbiAgLy8gZGF0YSB2YWx1ZXMg4oCUIHRoZXkgd2lsbCBiZSBldmFsdWF0ZWQgcGFzc2luZyBgZGF0YWAgYXMgYW4gYXJndW1lbnQuXHJcbiAgZnVuY3Rpb24gdGVtcGxhdGUoc3RyLCBkYXRhKSB7XHJcbiAgXHRyZXR1cm4gc3RyLnJlcGxhY2UodGVtcGxhdGVSZSwgZnVuY3Rpb24gKHN0ciwga2V5KSB7XHJcbiAgXHRcdHZhciB2YWx1ZSA9IGRhdGFba2V5XTtcclxuXHJcbiAgXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgJyArIHN0cik7XHJcblxyXG4gIFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gIFx0XHRcdHZhbHVlID0gdmFsdWUoZGF0YSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHZhbHVlO1xyXG4gIFx0fSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gaXNBcnJheShvYmopOiBCb29sZWFuXHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW0FycmF5LmlzQXJyYXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXkpXHJcbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScpO1xyXG4gIH07XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBpbmRleE9mKGFycmF5OiBBcnJheSwgZWw6IE9iamVjdCk6IE51bWJlclxyXG4gIC8vIENvbXBhdGliaWxpdHkgcG9seWZpbGwgZm9yIFtBcnJheS5wcm90b3R5cGUuaW5kZXhPZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5kZXhPZilcclxuICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbCkge1xyXG4gIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpZiAoYXJyYXlbaV0gPT09IGVsKSB7IHJldHVybiBpOyB9XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICAvLyBAcHJvcGVydHkgZW1wdHlJbWFnZVVybDogU3RyaW5nXHJcbiAgLy8gRGF0YSBVUkkgc3RyaW5nIGNvbnRhaW5pbmcgYSBiYXNlNjQtZW5jb2RlZCBlbXB0eSBHSUYgaW1hZ2UuXHJcbiAgLy8gVXNlZCBhcyBhIGhhY2sgdG8gZnJlZSBtZW1vcnkgZnJvbSB1bnVzZWQgaW1hZ2VzIG9uIFdlYktpdC1wb3dlcmVkXHJcbiAgLy8gbW9iaWxlIGRldmljZXMgKGJ5IHNldHRpbmcgaW1hZ2UgYHNyY2AgdG8gdGhpcyBzdHJpbmcpLlxyXG4gIHZhciBlbXB0eUltYWdlVXJsID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUQvQUN3QUFBQUFBUUFCQUFBQ0FEcz0nO1xyXG5cclxuICAvLyBpbnNwaXJlZCBieSBodHRwczovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cclxuXHJcbiAgZnVuY3Rpb24gZ2V0UHJlZml4ZWQobmFtZSkge1xyXG4gIFx0cmV0dXJuIHdpbmRvd1snd2Via2l0JyArIG5hbWVdIHx8IHdpbmRvd1snbW96JyArIG5hbWVdIHx8IHdpbmRvd1snbXMnICsgbmFtZV07XHJcbiAgfVxyXG5cclxuICB2YXIgbGFzdFRpbWUgPSAwO1xyXG5cclxuICAvLyBmYWxsYmFjayBmb3IgSUUgNy04XHJcbiAgZnVuY3Rpb24gdGltZW91dERlZmVyKGZuKSB7XHJcbiAgXHR2YXIgdGltZSA9ICtuZXcgRGF0ZSgpLFxyXG4gIFx0ICAgIHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtICh0aW1lIC0gbGFzdFRpbWUpKTtcclxuXHJcbiAgXHRsYXN0VGltZSA9IHRpbWUgKyB0aW1lVG9DYWxsO1xyXG4gIFx0cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZuLCB0aW1lVG9DYWxsKTtcclxuICB9XHJcblxyXG4gIHZhciByZXF1ZXN0Rm4gPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGdldFByZWZpeGVkKCdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKSB8fCB0aW1lb3V0RGVmZXI7XHJcbiAgdmFyIGNhbmNlbEZuID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IGdldFByZWZpeGVkKCdDYW5jZWxBbmltYXRpb25GcmFtZScpIHx8XHJcbiAgXHRcdGdldFByZWZpeGVkKCdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnKSB8fCBmdW5jdGlvbiAoaWQpIHsgd2luZG93LmNsZWFyVGltZW91dChpZCk7IH07XHJcblxyXG4gIC8vIEBmdW5jdGlvbiByZXF1ZXN0QW5pbUZyYW1lKGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCwgaW1tZWRpYXRlPzogQm9vbGVhbik6IE51bWJlclxyXG4gIC8vIFNjaGVkdWxlcyBgZm5gIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGJyb3dzZXIgcmVwYWludHMuIGBmbmAgaXMgYm91bmQgdG9cclxuICAvLyBgY29udGV4dGAgaWYgZ2l2ZW4uIFdoZW4gYGltbWVkaWF0ZWAgaXMgc2V0LCBgZm5gIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBpZlxyXG4gIC8vIHRoZSBicm93c2VyIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgc3VwcG9ydCBmb3JcclxuICAvLyBbYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvd2luZG93L3JlcXVlc3RBbmltYXRpb25GcmFtZSksXHJcbiAgLy8gb3RoZXJ3aXNlIGl0J3MgZGVsYXllZC4gUmV0dXJucyBhIHJlcXVlc3QgSUQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QuXHJcbiAgZnVuY3Rpb24gcmVxdWVzdEFuaW1GcmFtZShmbiwgY29udGV4dCwgaW1tZWRpYXRlKSB7XHJcbiAgXHRpZiAoaW1tZWRpYXRlICYmIHJlcXVlc3RGbiA9PT0gdGltZW91dERlZmVyKSB7XHJcbiAgXHRcdGZuLmNhbGwoY29udGV4dCk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRyZXR1cm4gcmVxdWVzdEZuLmNhbGwod2luZG93LCBiaW5kKGZuLCBjb250ZXh0KSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY2FuY2VsQW5pbUZyYW1lKGlkOiBOdW1iZXIpOiB1bmRlZmluZWRcclxuICAvLyBDYW5jZWxzIGEgcHJldmlvdXMgYHJlcXVlc3RBbmltRnJhbWVgLiBTZWUgYWxzbyBbd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvd2luZG93L2NhbmNlbEFuaW1hdGlvbkZyYW1lKS5cclxuICBmdW5jdGlvbiBjYW5jZWxBbmltRnJhbWUoaWQpIHtcclxuICBcdGlmIChpZCkge1xyXG4gIFx0XHRjYW5jZWxGbi5jYWxsKHdpbmRvdywgaWQpO1xyXG4gIFx0fVxyXG4gIH1cblxuICB2YXIgVXRpbCA9IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgY3JlYXRlOiBjcmVhdGUkMixcbiAgICBiaW5kOiBiaW5kLFxuICAgIGdldCBsYXN0SWQgKCkgeyByZXR1cm4gbGFzdElkOyB9LFxuICAgIHN0YW1wOiBzdGFtcCxcbiAgICB0aHJvdHRsZTogdGhyb3R0bGUsXG4gICAgd3JhcE51bTogd3JhcE51bSxcbiAgICBmYWxzZUZuOiBmYWxzZUZuLFxuICAgIGZvcm1hdE51bTogZm9ybWF0TnVtLFxuICAgIHRyaW06IHRyaW0sXG4gICAgc3BsaXRXb3Jkczogc3BsaXRXb3JkcyxcbiAgICBzZXRPcHRpb25zOiBzZXRPcHRpb25zLFxuICAgIGdldFBhcmFtU3RyaW5nOiBnZXRQYXJhbVN0cmluZyxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsXG4gICAgaXNBcnJheTogaXNBcnJheSxcbiAgICBpbmRleE9mOiBpbmRleE9mLFxuICAgIGVtcHR5SW1hZ2VVcmw6IGVtcHR5SW1hZ2VVcmwsXG4gICAgcmVxdWVzdEZuOiByZXF1ZXN0Rm4sXG4gICAgY2FuY2VsRm46IGNhbmNlbEZuLFxuICAgIHJlcXVlc3RBbmltRnJhbWU6IHJlcXVlc3RBbmltRnJhbWUsXG4gICAgY2FuY2VsQW5pbUZyYW1lOiBjYW5jZWxBbmltRnJhbWVcbiAgfTtcblxuICAvLyBAY2xhc3MgQ2xhc3NcclxuICAvLyBAYWthIEwuQ2xhc3NcclxuXHJcbiAgLy8gQHNlY3Rpb25cclxuICAvLyBAdW5pbmhlcml0YWJsZVxyXG5cclxuICAvLyBUaGFua3MgdG8gSm9obiBSZXNpZyBhbmQgRGVhbiBFZHdhcmRzIGZvciBpbnNwaXJhdGlvbiFcclxuXHJcbiAgZnVuY3Rpb24gQ2xhc3MoKSB7fVxyXG5cclxuICBDbGFzcy5leHRlbmQgPSBmdW5jdGlvbiAocHJvcHMpIHtcclxuXHJcbiAgXHQvLyBAZnVuY3Rpb24gZXh0ZW5kKHByb3BzOiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIFx0Ly8gW0V4dGVuZHMgdGhlIGN1cnJlbnQgY2xhc3NdKCNjbGFzcy1pbmhlcml0YW5jZSkgZ2l2ZW4gdGhlIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQuXHJcbiAgXHQvLyBSZXR1cm5zIGEgSmF2YXNjcmlwdCBmdW5jdGlvbiB0aGF0IGlzIGEgY2xhc3MgY29uc3RydWN0b3IgKHRvIGJlIGNhbGxlZCB3aXRoIGBuZXdgKS5cclxuICBcdHZhciBOZXdDbGFzcyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHNldE9wdGlvbnModGhpcyk7XHJcblxyXG4gIFx0XHQvLyBjYWxsIHRoZSBjb25zdHJ1Y3RvclxyXG4gIFx0XHRpZiAodGhpcy5pbml0aWFsaXplKSB7XHJcbiAgXHRcdFx0dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGNhbGwgYWxsIGNvbnN0cnVjdG9yIGhvb2tzXHJcbiAgXHRcdHRoaXMuY2FsbEluaXRIb29rcygpO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR2YXIgcGFyZW50UHJvdG8gPSBOZXdDbGFzcy5fX3N1cGVyX18gPSB0aGlzLnByb3RvdHlwZTtcclxuXHJcbiAgXHR2YXIgcHJvdG8gPSBjcmVhdGUkMihwYXJlbnRQcm90byk7XHJcbiAgXHRwcm90by5jb25zdHJ1Y3RvciA9IE5ld0NsYXNzO1xyXG5cclxuICBcdE5ld0NsYXNzLnByb3RvdHlwZSA9IHByb3RvO1xyXG5cclxuICBcdC8vIGluaGVyaXQgcGFyZW50J3Mgc3RhdGljc1xyXG4gIFx0Zm9yICh2YXIgaSBpbiB0aGlzKSB7XHJcbiAgXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkgJiYgaSAhPT0gJ3Byb3RvdHlwZScgJiYgaSAhPT0gJ19fc3VwZXJfXycpIHtcclxuICBcdFx0XHROZXdDbGFzc1tpXSA9IHRoaXNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHQvLyBtaXggc3RhdGljIHByb3BlcnRpZXMgaW50byB0aGUgY2xhc3NcclxuICBcdGlmIChwcm9wcy5zdGF0aWNzKSB7XHJcbiAgXHRcdGV4dGVuZChOZXdDbGFzcywgcHJvcHMuc3RhdGljcyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gbWl4IGluY2x1ZGVzIGludG8gdGhlIHByb3RvdHlwZVxyXG4gIFx0aWYgKHByb3BzLmluY2x1ZGVzKSB7XHJcbiAgXHRcdGNoZWNrRGVwcmVjYXRlZE1peGluRXZlbnRzKHByb3BzLmluY2x1ZGVzKTtcclxuICBcdFx0ZXh0ZW5kLmFwcGx5KG51bGwsIFtwcm90b10uY29uY2F0KHByb3BzLmluY2x1ZGVzKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gbWl4IGdpdmVuIHByb3BlcnRpZXMgaW50byB0aGUgcHJvdG90eXBlXHJcbiAgXHRleHRlbmQocHJvdG8sIHByb3BzKTtcclxuICBcdGRlbGV0ZSBwcm90by5zdGF0aWNzO1xyXG4gIFx0ZGVsZXRlIHByb3RvLmluY2x1ZGVzO1xyXG5cclxuICBcdC8vIG1lcmdlIG9wdGlvbnNcclxuICBcdGlmIChwcm90by5vcHRpb25zKSB7XHJcbiAgXHRcdHByb3RvLm9wdGlvbnMgPSBwYXJlbnRQcm90by5vcHRpb25zID8gY3JlYXRlJDIocGFyZW50UHJvdG8ub3B0aW9ucykgOiB7fTtcclxuICBcdFx0ZXh0ZW5kKHByb3RvLm9wdGlvbnMsIHByb3BzLm9wdGlvbnMpO1xyXG4gIFx0fVxyXG5cclxuICBcdHByb3RvLl9pbml0SG9va3MgPSBbXTtcclxuXHJcbiAgXHQvLyBhZGQgbWV0aG9kIGZvciBjYWxsaW5nIGFsbCBob29rc1xyXG4gIFx0cHJvdG8uY2FsbEluaXRIb29rcyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbml0SG9va3NDYWxsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAocGFyZW50UHJvdG8uY2FsbEluaXRIb29rcykge1xyXG4gIFx0XHRcdHBhcmVudFByb3RvLmNhbGxJbml0SG9va3MuY2FsbCh0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5faW5pdEhvb2tzQ2FsbGVkID0gdHJ1ZTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwcm90by5faW5pdEhvb2tzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0cHJvdG8uX2luaXRIb29rc1tpXS5jYWxsKHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdHJldHVybiBOZXdDbGFzcztcclxuICB9O1xyXG5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGluY2x1ZGUocHJvcGVydGllczogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFtJbmNsdWRlcyBhIG1peGluXSgjY2xhc3MtaW5jbHVkZXMpIGludG8gdGhlIGN1cnJlbnQgY2xhc3MuXHJcbiAgQ2xhc3MuaW5jbHVkZSA9IGZ1bmN0aW9uIChwcm9wcykge1xyXG4gIFx0dmFyIHBhcmVudE9wdGlvbnMgPSB0aGlzLnByb3RvdHlwZS5vcHRpb25zO1xyXG4gIFx0ZXh0ZW5kKHRoaXMucHJvdG90eXBlLCBwcm9wcyk7XHJcbiAgXHRpZiAocHJvcHMub3B0aW9ucykge1xyXG4gIFx0XHR0aGlzLnByb3RvdHlwZS5vcHRpb25zID0gcGFyZW50T3B0aW9ucztcclxuICBcdFx0dGhpcy5tZXJnZU9wdGlvbnMocHJvcHMub3B0aW9ucyk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gbWVyZ2VPcHRpb25zKG9wdGlvbnM6IE9iamVjdCk6IHRoaXNcclxuICAvLyBbTWVyZ2VzIGBvcHRpb25zYF0oI2NsYXNzLW9wdGlvbnMpIGludG8gdGhlIGRlZmF1bHRzIG9mIHRoZSBjbGFzcy5cclxuICBDbGFzcy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0ZXh0ZW5kKHRoaXMucHJvdG90eXBlLm9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGFkZEluaXRIb29rKGZuOiBGdW5jdGlvbik6IHRoaXNcclxuICAvLyBBZGRzIGEgW2NvbnN0cnVjdG9yIGhvb2tdKCNjbGFzcy1jb25zdHJ1Y3Rvci1ob29rcykgdG8gdGhlIGNsYXNzLlxyXG4gIENsYXNzLmFkZEluaXRIb29rID0gZnVuY3Rpb24gKGZuKSB7IC8vIChGdW5jdGlvbikgfHwgKFN0cmluZywgYXJncy4uLilcclxuICBcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcclxuXHJcbiAgXHR2YXIgaW5pdCA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyA/IGZuIDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzW2ZuXS5hcHBseSh0aGlzLCBhcmdzKTtcclxuICBcdH07XHJcblxyXG4gIFx0dGhpcy5wcm90b3R5cGUuX2luaXRIb29rcyA9IHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MgfHwgW107XHJcbiAgXHR0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzLnB1c2goaW5pdCk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyhpbmNsdWRlcykge1xyXG4gIFx0LyogZ2xvYmFsIEw6IHRydWUgKi9cclxuICBcdGlmICh0eXBlb2YgTCA9PT0gJ3VuZGVmaW5lZCcgfHwgIUwgfHwgIUwuTWl4aW4pIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0aW5jbHVkZXMgPSBpc0FycmF5KGluY2x1ZGVzKSA/IGluY2x1ZGVzIDogW2luY2x1ZGVzXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IGluY2x1ZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdGlmIChpbmNsdWRlc1tpXSA9PT0gTC5NaXhpbi5FdmVudHMpIHtcclxuICBcdFx0XHRjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgaW5jbHVkZSBvZiBMLk1peGluLkV2ZW50czogJyArXHJcbiAgXHRcdFx0XHQndGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHJlbGVhc2VzLCAnICtcclxuICBcdFx0XHRcdCdwbGVhc2UgaW5oZXJpdCBmcm9tIEwuRXZlbnRlZCBpbnN0ZWFkLicsIG5ldyBFcnJvcigpLnN0YWNrKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBFdmVudGVkXHJcbiAgICogQGFrYSBMLkV2ZW50ZWRcclxuICAgKiBAaW5oZXJpdHMgQ2xhc3NcclxuICAgKlxyXG4gICAqIEEgc2V0IG9mIG1ldGhvZHMgc2hhcmVkIGJldHdlZW4gZXZlbnQtcG93ZXJlZCBjbGFzc2VzIChsaWtlIGBNYXBgIGFuZCBgTWFya2VyYCkuIEdlbmVyYWxseSwgZXZlbnRzIGFsbG93IHlvdSB0byBleGVjdXRlIHNvbWUgZnVuY3Rpb24gd2hlbiBzb21ldGhpbmcgaGFwcGVucyB3aXRoIGFuIG9iamVjdCAoZS5nLiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIG1hcCwgY2F1c2luZyB0aGUgbWFwIHRvIGZpcmUgYCdjbGljaydgIGV2ZW50KS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIG1hcC5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XHJcbiAgICogXHRhbGVydChlLmxhdGxuZyk7XHJcbiAgICogfSApO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogTGVhZmxldCBkZWFscyB3aXRoIGV2ZW50IGxpc3RlbmVycyBieSByZWZlcmVuY2UsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBhIGxpc3RlbmVyIGFuZCB0aGVuIHJlbW92ZSBpdCwgZGVmaW5lIGl0IGFzIGEgZnVuY3Rpb246XHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIGZ1bmN0aW9uIG9uQ2xpY2soZSkgeyAuLi4gfVxyXG4gICAqXHJcbiAgICogbWFwLm9uKCdjbGljaycsIG9uQ2xpY2spO1xyXG4gICAqIG1hcC5vZmYoJ2NsaWNrJywgb25DbGljayk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBFdmVudHMgPSB7XHJcbiAgXHQvKiBAbWV0aG9kIG9uKHR5cGU6IFN0cmluZywgZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0ICogQWRkcyBhIGxpc3RlbmVyIGZ1bmN0aW9uIChgZm5gKSB0byBhIHBhcnRpY3VsYXIgZXZlbnQgdHlwZSBvZiB0aGUgb2JqZWN0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgY29udGV4dCBvZiB0aGUgbGlzdGVuZXIgKG9iamVjdCB0aGUgdGhpcyBrZXl3b3JkIHdpbGwgcG9pbnQgdG8pLiBZb3UgY2FuIGFsc28gcGFzcyBzZXZlcmFsIHNwYWNlLXNlcGFyYXRlZCB0eXBlcyAoZS5nLiBgJ2NsaWNrIGRibGNsaWNrJ2ApLlxyXG4gIFx0ICpcclxuICBcdCAqIEBhbHRlcm5hdGl2ZVxyXG4gIFx0ICogQG1ldGhvZCBvbihldmVudE1hcDogT2JqZWN0KTogdGhpc1xyXG4gIFx0ICogQWRkcyBhIHNldCBvZiB0eXBlL2xpc3RlbmVyIHBhaXJzLCBlLmcuIGB7Y2xpY2s6IG9uQ2xpY2ssIG1vdXNlbW92ZTogb25Nb3VzZU1vdmV9YFxyXG4gIFx0ICovXHJcbiAgXHRvbjogZnVuY3Rpb24gKHR5cGVzLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdFx0Ly8gdHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXHJcbiAgXHRcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0Ly8gd2UgZG9uJ3QgcHJvY2VzcyBzcGFjZS1zZXBhcmF0ZWQgZXZlbnRzIGhlcmUgZm9yIHBlcmZvcm1hbmNlO1xyXG4gIFx0XHRcdFx0Ly8gaXQncyBhIGhvdCBwYXRoIHNpbmNlIExheWVyIHVzZXMgdGhlIG9uKG9iaikgc3ludGF4XHJcbiAgXHRcdFx0XHR0aGlzLl9vbih0eXBlLCB0eXBlc1t0eXBlXSwgZm4pO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Ly8gdHlwZXMgY2FuIGJlIGEgc3RyaW5nIG9mIHNwYWNlLXNlcGFyYXRlZCB3b3Jkc1xyXG4gIFx0XHRcdHR5cGVzID0gc3BsaXRXb3Jkcyh0eXBlcyk7XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvKiBAbWV0aG9kIG9mZih0eXBlOiBTdHJpbmcsIGZuPzogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgXHQgKiBSZW1vdmVzIGEgcHJldmlvdXNseSBhZGRlZCBsaXN0ZW5lciBmdW5jdGlvbi4gSWYgbm8gZnVuY3Rpb24gaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHJlbW92ZSBhbGwgdGhlIGxpc3RlbmVycyBvZiB0aGF0IHBhcnRpY3VsYXIgZXZlbnQgZnJvbSB0aGUgb2JqZWN0LiBOb3RlIHRoYXQgaWYgeW91IHBhc3NlZCBhIGN1c3RvbSBjb250ZXh0IHRvIGBvbmAsIHlvdSBtdXN0IHBhc3MgdGhlIHNhbWUgY29udGV4dCB0byBgb2ZmYCBpbiBvcmRlciB0byByZW1vdmUgdGhlIGxpc3RlbmVyLlxyXG4gIFx0ICpcclxuICBcdCAqIEBhbHRlcm5hdGl2ZVxyXG4gIFx0ICogQG1ldGhvZCBvZmYoZXZlbnRNYXA6IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIFJlbW92ZXMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycy5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb2ZmOiB0aGlzXHJcbiAgXHQgKiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgdG8gYWxsIGV2ZW50cyBvbiB0aGUgb2JqZWN0LiBUaGlzIGluY2x1ZGVzIGltcGxpY2l0bHkgYXR0YWNoZWQgZXZlbnRzLlxyXG4gIFx0ICovXHJcbiAgXHRvZmY6IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gIFx0XHRcdC8vIGNsZWFyIGFsbCBsaXN0ZW5lcnMgaWYgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2V2ZW50cztcclxuXHJcbiAgXHRcdH0gZWxzZSBpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRcdHRoaXMuX29mZih0eXBlLCB0eXBlc1t0eXBlXSwgZm4pO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0dHlwZXMgPSBzcGxpdFdvcmRzKHR5cGVzKTtcclxuXHJcbiAgXHRcdFx0dmFyIHJlbW92ZUFsbCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XHJcbiAgXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHRpZiAocmVtb3ZlQWxsKSB7XHJcbiAgXHRcdFx0XHRcdHRoaXMuX29mZih0eXBlc1tpXSk7XHJcbiAgXHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHR0aGlzLl9vZmYodHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBhdHRhY2ggbGlzdGVuZXIgKHdpdGhvdXQgc3ludGFjdGljIHN1Z2FyIG5vdylcclxuICBcdF9vbjogZnVuY3Rpb24gKHR5cGUsIGZuLCBjb250ZXh0LCBfb25jZSkge1xyXG4gIFx0XHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCd3cm9uZyBsaXN0ZW5lciB0eXBlOiAnICsgdHlwZW9mIGZuKTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGNoZWNrIGlmIGZuIGFscmVhZHkgdGhlcmVcclxuICBcdFx0aWYgKHRoaXMuX2xpc3RlbnModHlwZSwgZm4sIGNvbnRleHQpICE9PSBmYWxzZSkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGNvbnRleHQgPT09IHRoaXMpIHtcclxuICBcdFx0XHQvLyBMZXNzIG1lbW9yeSBmb290cHJpbnQuXHJcbiAgXHRcdFx0Y29udGV4dCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG5ld0xpc3RlbmVyID0ge2ZuOiBmbiwgY3R4OiBjb250ZXh0fTtcclxuICBcdFx0aWYgKF9vbmNlKSB7XHJcbiAgXHRcdFx0bmV3TGlzdGVuZXIub25jZSA9IHRydWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcclxuICBcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gdGhpcy5fZXZlbnRzW3R5cGVdIHx8IFtdO1xyXG4gIFx0XHR0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChuZXdMaXN0ZW5lcik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vZmY6IGZ1bmN0aW9uICh0eXBlLCBmbiwgY29udGV4dCkge1xyXG4gIFx0XHR2YXIgbGlzdGVuZXJzLFxyXG4gIFx0XHQgICAgaSxcclxuICBcdFx0ICAgIGxlbjtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5fZXZlbnRzKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgXHRcdGlmICghbGlzdGVuZXJzKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeyAvLyByZW1vdmUgYWxsXHJcbiAgXHRcdFx0aWYgKHRoaXMuX2ZpcmluZ0NvdW50KSB7XHJcbiAgXHRcdFx0XHQvLyBTZXQgYWxsIHJlbW92ZWQgbGlzdGVuZXJzIHRvIG5vb3BcclxuICBcdFx0XHRcdC8vIHNvIHRoZXkgYXJlIG5vdCBjYWxsZWQgaWYgcmVtb3ZlIGhhcHBlbnMgaW4gZmlyZVxyXG4gIFx0XHRcdFx0Zm9yIChpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHRcdGxpc3RlbmVyc1tpXS5mbiA9IGZhbHNlRm47XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdC8vIGNsZWFyIGFsbCBsaXN0ZW5lcnMgZm9yIGEgdHlwZSBpZiBmdW5jdGlvbiBpc24ndCBzcGVjaWZpZWRcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gIFx0XHRcdGNvbnNvbGUud2Fybignd3JvbmcgbGlzdGVuZXIgdHlwZTogJyArIHR5cGVvZiBmbik7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBmaW5kIGZuIGFuZCByZW1vdmUgaXRcclxuICBcdFx0dmFyIGluZGV4ID0gdGhpcy5fbGlzdGVucyh0eXBlLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdGlmIChpbmRleCAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHR2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaW5kZXhdO1xyXG4gIFx0XHRcdGlmICh0aGlzLl9maXJpbmdDb3VudCkge1xyXG4gIFx0XHRcdFx0Ly8gc2V0IHRoZSByZW1vdmVkIGxpc3RlbmVyIHRvIG5vb3Agc28gdGhhdCdzIG5vdCBjYWxsZWQgaWYgcmVtb3ZlIGhhcHBlbnMgaW4gZmlyZVxyXG4gIFx0XHRcdFx0bGlzdGVuZXIuZm4gPSBmYWxzZUZuO1xyXG5cclxuICBcdFx0XHRcdC8qIGNvcHkgYXJyYXkgaW4gY2FzZSBldmVudHMgYXJlIGJlaW5nIGZpcmVkICovXHJcbiAgXHRcdFx0XHR0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0bGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmaXJlKHR5cGU6IFN0cmluZywgZGF0YT86IE9iamVjdCwgcHJvcGFnYXRlPzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIEZpcmVzIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBkYXRhXHJcbiAgXHQvLyBvYmplY3Qg4oCUIHRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gd2lsbCBjb250YWluIGl0c1xyXG4gIFx0Ly8gcHJvcGVydGllcy4gVGhlIGV2ZW50IGNhbiBvcHRpb25hbGx5IGJlIHByb3BhZ2F0ZWQgdG8gZXZlbnQgcGFyZW50cy5cclxuICBcdGZpcmU6IGZ1bmN0aW9uICh0eXBlLCBkYXRhLCBwcm9wYWdhdGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLmxpc3RlbnModHlwZSwgcHJvcGFnYXRlKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGV2ZW50ID0gZXh0ZW5kKHt9LCBkYXRhLCB7XHJcbiAgXHRcdFx0dHlwZTogdHlwZSxcclxuICBcdFx0XHR0YXJnZXQ6IHRoaXMsXHJcbiAgXHRcdFx0c291cmNlVGFyZ2V0OiBkYXRhICYmIGRhdGEuc291cmNlVGFyZ2V0IHx8IHRoaXNcclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fZXZlbnRzKSB7XHJcbiAgXHRcdFx0dmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcclxuICBcdFx0XHRpZiAobGlzdGVuZXJzKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9maXJpbmdDb3VudCA9ICh0aGlzLl9maXJpbmdDb3VudCArIDEpIHx8IDE7XHJcbiAgXHRcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHRcdHZhciBsID0gbGlzdGVuZXJzW2ldO1xyXG4gIFx0XHRcdFx0XHQvLyBvZmYgb3ZlcndyaXRlcyBsLmZuLCBzbyB3ZSBuZWVkIHRvIGNvcHkgZm4gdG8gYSB2YXJcclxuICBcdFx0XHRcdFx0dmFyIGZuID0gbC5mbjtcclxuICBcdFx0XHRcdFx0aWYgKGwub25jZSkge1xyXG4gIFx0XHRcdFx0XHRcdHRoaXMub2ZmKHR5cGUsIGZuLCBsLmN0eCk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0Zm4uY2FsbChsLmN0eCB8fCB0aGlzLCBldmVudCk7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0dGhpcy5fZmlyaW5nQ291bnQtLTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChwcm9wYWdhdGUpIHtcclxuICBcdFx0XHQvLyBwcm9wYWdhdGUgdGhlIGV2ZW50IHRvIHBhcmVudHMgKHNldCB3aXRoIGFkZEV2ZW50UGFyZW50KVxyXG4gIFx0XHRcdHRoaXMuX3Byb3BhZ2F0ZUV2ZW50KGV2ZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGlzdGVucyh0eXBlOiBTdHJpbmcsIHByb3BhZ2F0ZT86IEJvb2xlYW4pOiBCb29sZWFuXHJcbiAgXHQvLyBAbWV0aG9kIGxpc3RlbnModHlwZTogU3RyaW5nLCBmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QsIHByb3BhZ2F0ZT86IEJvb2xlYW4pOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBhIHBhcnRpY3VsYXIgZXZlbnQgdHlwZSBoYXMgYW55IGxpc3RlbmVycyBhdHRhY2hlZCB0byBpdC5cclxuICBcdC8vIFRoZSB2ZXJpZmljYXRpb24gY2FuIG9wdGlvbmFsbHkgYmUgcHJvcGFnYXRlZCwgaXQgd2lsbCByZXR1cm4gYHRydWVgIGlmIHBhcmVudHMgaGF2ZSB0aGUgbGlzdGVuZXIgYXR0YWNoZWQgdG8gaXQuXHJcbiAgXHRsaXN0ZW5zOiBmdW5jdGlvbiAodHlwZSwgZm4sIGNvbnRleHQsIHByb3BhZ2F0ZSkge1xyXG4gIFx0XHRpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdcInN0cmluZ1wiIHR5cGUgYXJndW1lbnQgZXhwZWN0ZWQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBpbnB1dCBgZm5gIHZhbHVlLCBiZWNhdXNlIHdlIG5lZWQgdG8gdXNlIGl0IGZvciBwcm9wYWdhdGlvblxyXG4gIFx0XHR2YXIgX2ZuID0gZm47XHJcbiAgXHRcdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHRwcm9wYWdhdGUgPSAhIWZuO1xyXG4gIFx0XHRcdF9mbiA9IHVuZGVmaW5lZDtcclxuICBcdFx0XHRjb250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzICYmIHRoaXMuX2V2ZW50c1t0eXBlXTtcclxuICBcdFx0aWYgKGxpc3RlbmVycyAmJiBsaXN0ZW5lcnMubGVuZ3RoKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX2xpc3RlbnModHlwZSwgX2ZuLCBjb250ZXh0KSAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHRcdHJldHVybiB0cnVlO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHByb3BhZ2F0ZSkge1xyXG4gIFx0XHRcdC8vIGFsc28gY2hlY2sgcGFyZW50cyBmb3IgbGlzdGVuZXJzIGlmIGV2ZW50IHByb3BhZ2F0ZXNcclxuICBcdFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHNbaWRdLmxpc3RlbnModHlwZSwgZm4sIGNvbnRleHQsIHByb3BhZ2F0ZSkpIHsgcmV0dXJuIHRydWU7IH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIGZhbHNlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyByZXR1cm5zIHRoZSBpbmRleCAobnVtYmVyKSBvciBmYWxzZVxyXG4gIFx0X2xpc3RlbnM6IGZ1bmN0aW9uICh0eXBlLCBmbiwgY29udGV4dCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2V2ZW50cykge1xyXG4gIFx0XHRcdHJldHVybiBmYWxzZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXSB8fCBbXTtcclxuICBcdFx0aWYgKCFmbikge1xyXG4gIFx0XHRcdHJldHVybiAhIWxpc3RlbmVycy5sZW5ndGg7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChjb250ZXh0ID09PSB0aGlzKSB7XHJcbiAgXHRcdFx0Ly8gTGVzcyBtZW1vcnkgZm9vdHByaW50LlxyXG4gIFx0XHRcdGNvbnRleHQgPSB1bmRlZmluZWQ7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRpZiAobGlzdGVuZXJzW2ldLmZuID09PSBmbiAmJiBsaXN0ZW5lcnNbaV0uY3R4ID09PSBjb250ZXh0KSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gaTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvbmNlKOKApik6IHRoaXNcclxuICBcdC8vIEJlaGF2ZXMgYXMgW2BvbijigKYpYF0oI2V2ZW50ZWQtb24pLCBleGNlcHQgdGhlIGxpc3RlbmVyIHdpbGwgb25seSBnZXQgZmlyZWQgb25jZSBhbmQgdGhlbiByZW1vdmVkLlxyXG4gIFx0b25jZTogZnVuY3Rpb24gKHR5cGVzLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdFx0Ly8gdHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXHJcbiAgXHRcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0Ly8gd2UgZG9uJ3QgcHJvY2VzcyBzcGFjZS1zZXBhcmF0ZWQgZXZlbnRzIGhlcmUgZm9yIHBlcmZvcm1hbmNlO1xyXG4gIFx0XHRcdFx0Ly8gaXQncyBhIGhvdCBwYXRoIHNpbmNlIExheWVyIHVzZXMgdGhlIG9uKG9iaikgc3ludGF4XHJcbiAgXHRcdFx0XHR0aGlzLl9vbih0eXBlLCB0eXBlc1t0eXBlXSwgZm4sIHRydWUpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Ly8gdHlwZXMgY2FuIGJlIGEgc3RyaW5nIG9mIHNwYWNlLXNlcGFyYXRlZCB3b3Jkc1xyXG4gIFx0XHRcdHR5cGVzID0gc3BsaXRXb3Jkcyh0eXBlcyk7XHJcblxyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZXNbaV0sIGZuLCBjb250ZXh0LCB0cnVlKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEV2ZW50UGFyZW50KG9iajogRXZlbnRlZCk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gZXZlbnQgcGFyZW50IC0gYW4gYEV2ZW50ZWRgIHRoYXQgd2lsbCByZWNlaXZlIHByb3BhZ2F0ZWQgZXZlbnRzXHJcbiAgXHRhZGRFdmVudFBhcmVudDogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR0aGlzLl9ldmVudFBhcmVudHMgPSB0aGlzLl9ldmVudFBhcmVudHMgfHwge307XHJcbiAgXHRcdHRoaXMuX2V2ZW50UGFyZW50c1tzdGFtcChvYmopXSA9IG9iajtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRXZlbnRQYXJlbnQob2JqOiBFdmVudGVkKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyBhbiBldmVudCBwYXJlbnQsIHNvIGl0IHdpbGwgc3RvcCByZWNlaXZpbmcgcHJvcGFnYXRlZCBldmVudHNcclxuICBcdHJlbW92ZUV2ZW50UGFyZW50OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW3N0YW1wKG9iaildO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcHJvcGFnYXRlRXZlbnQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2V2ZW50UGFyZW50cykge1xyXG4gIFx0XHRcdHRoaXMuX2V2ZW50UGFyZW50c1tpZF0uZmlyZShlLnR5cGUsIGV4dGVuZCh7XHJcbiAgXHRcdFx0XHRsYXllcjogZS50YXJnZXQsXHJcbiAgXHRcdFx0XHRwcm9wYWdhdGVkRnJvbTogZS50YXJnZXRcclxuICBcdFx0XHR9LCBlKSwgdHJ1ZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBhbGlhc2VzOyB3ZSBzaG91bGQgZGl0Y2ggdGhvc2UgZXZlbnR1YWxseVxyXG5cclxuICAvLyBAbWV0aG9kIGFkZEV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKVxyXG4gIEV2ZW50cy5hZGRFdmVudExpc3RlbmVyID0gRXZlbnRzLm9uO1xyXG5cclxuICAvLyBAbWV0aG9kIHJlbW92ZUV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb2ZmKOKApilgXSgjZXZlbnRlZC1vZmYpXHJcblxyXG4gIC8vIEBtZXRob2QgY2xlYXJBbGxFdmVudExpc3RlbmVycyjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvZmYoKWBdKCNldmVudGVkLW9mZilcclxuICBFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5jbGVhckFsbEV2ZW50TGlzdGVuZXJzID0gRXZlbnRzLm9mZjtcclxuXHJcbiAgLy8gQG1ldGhvZCBhZGRPbmVUaW1lRXZlbnRMaXN0ZW5lcijigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvbmNlKOKApilgXSgjZXZlbnRlZC1vbmNlKVxyXG4gIEV2ZW50cy5hZGRPbmVUaW1lRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5vbmNlO1xyXG5cclxuICAvLyBAbWV0aG9kIGZpcmVFdmVudCjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BmaXJlKOKApilgXSgjZXZlbnRlZC1maXJlKVxyXG4gIEV2ZW50cy5maXJlRXZlbnQgPSBFdmVudHMuZmlyZTtcclxuXHJcbiAgLy8gQG1ldGhvZCBoYXNFdmVudExpc3RlbmVycyjigKYpOiBCb29sZWFuXHJcbiAgLy8gQWxpYXMgdG8gW2BsaXN0ZW5zKOKApilgXSgjZXZlbnRlZC1saXN0ZW5zKVxyXG4gIEV2ZW50cy5oYXNFdmVudExpc3RlbmVycyA9IEV2ZW50cy5saXN0ZW5zO1xyXG5cclxuICB2YXIgRXZlbnRlZCA9IENsYXNzLmV4dGVuZChFdmVudHMpO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFBvaW50XHJcbiAgICogQGFrYSBMLlBvaW50XHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgcG9pbnQgd2l0aCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBpbiBwaXhlbHMuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9pbnQgPSBMLnBvaW50KDIwMCwgMzAwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgYW5kIG9wdGlvbnMgdGhhdCBhY2NlcHQgYFBvaW50YCBvYmplY3RzIGFsc28gYWNjZXB0IHRoZW0gaW4gYSBzaW1wbGUgQXJyYXkgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAucGFuQnkoWzIwMCwgMzAwXSk7XHJcbiAgICogbWFwLnBhbkJ5KEwucG9pbnQoMjAwLCAzMDApKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgUG9pbnRgIGRvZXMgbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXHJcbiAgICogd2hpY2ggbWVhbnMgbmV3IGNsYXNzZXMgY2FuJ3QgaW5oZXJpdCBmcm9tIGl0LCBhbmQgbmV3IG1ldGhvZHNcclxuICAgKiBjYW4ndCBiZSBhZGRlZCB0byBpdCB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIFBvaW50KHgsIHksIHJvdW5kKSB7XHJcbiAgXHQvLyBAcHJvcGVydHkgeDogTnVtYmVyOyBUaGUgYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnggPSAocm91bmQgPyBNYXRoLnJvdW5kKHgpIDogeCk7XHJcbiAgXHQvLyBAcHJvcGVydHkgeTogTnVtYmVyOyBUaGUgYHlgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnkgPSAocm91bmQgPyBNYXRoLnJvdW5kKHkpIDogeSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHJ1bmMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uICh2KSB7XHJcbiAgXHRyZXR1cm4gdiA+IDAgPyBNYXRoLmZsb29yKHYpIDogTWF0aC5jZWlsKHYpO1xyXG4gIH07XHJcblxyXG4gIFBvaW50LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsb25lKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludC5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQgYW5kIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgXHRhZGQ6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHQvLyBub24tZGVzdHJ1Y3RpdmUsIHJldHVybnMgYSBuZXcgcG9pbnRcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdC8vIGRlc3RydWN0aXZlLCB1c2VkIGRpcmVjdGx5IGZvciBwZXJmb3JtYW5jZSBpbiBzaXR1YXRpb25zIHdoZXJlIGl0J3Mgc2FmZSB0byBtb2RpZnkgZXhpc3RpbmcgcG9pbnRcclxuICBcdFx0dGhpcy54ICs9IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSArPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzdWJ0cmFjdChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHBvaW50IGZyb20gdGhlIGN1cnJlbnQuXHJcbiAgXHRzdWJ0cmFjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3N1YnRyYWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dGhpcy54IC09IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSAtPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXZpZGVCeShudW06IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgZGl2aXNpb24gb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnkgdGhlIGdpdmVuIG51bWJlci5cclxuICBcdGRpdmlkZUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9kaXZpZGVCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHR0aGlzLnggLz0gbnVtO1xyXG4gIFx0XHR0aGlzLnkgLz0gbnVtO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtdWx0aXBseUJ5KG51bTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBwb2ludCBieSB0aGUgZ2l2ZW4gbnVtYmVyLlxyXG4gIFx0bXVsdGlwbHlCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tdWx0aXBseUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHRoaXMueCAqPSBudW07XHJcbiAgXHRcdHRoaXMueSAqPSBudW07XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNjYWxlQnkoc2NhbGU6IFBvaW50KTogUG9pbnRcclxuICBcdC8vIE11bHRpcGx5IGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieSBlYWNoIGNvb3JkaW5hdGUgb2ZcclxuICBcdC8vIGBzY2FsZWAuIEluIGxpbmVhciBhbGdlYnJhIHRlcm1zLCBtdWx0aXBseSB0aGUgcG9pbnQgYnkgdGhlXHJcbiAgXHQvLyBbc2NhbGluZyBtYXRyaXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjYWxpbmdfJTI4Z2VvbWV0cnklMjkjTWF0cml4X3JlcHJlc2VudGF0aW9uKVxyXG4gIFx0Ly8gZGVmaW5lZCBieSBgc2NhbGVgLlxyXG4gIFx0c2NhbGVCeTogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54ICogcG9pbnQueCwgdGhpcy55ICogcG9pbnQueSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW5zY2FsZUJ5KHNjYWxlOiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBJbnZlcnNlIG9mIGBzY2FsZUJ5YC4gRGl2aWRlIGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieVxyXG4gIFx0Ly8gZWFjaCBjb29yZGluYXRlIG9mIGBzY2FsZWAuXHJcbiAgXHR1bnNjYWxlQnk6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMueCAvIHBvaW50LngsIHRoaXMueSAvIHBvaW50LnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJvdW5kKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHJvdW5kZWQgY29vcmRpbmF0ZXMuXHJcbiAgXHRyb3VuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcm91bmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5yb3VuZCh0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGZsb29yKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIGZsb29yZWQgY29vcmRpbmF0ZXMgKHJvdW5kZWQgZG93bikuXHJcbiAgXHRmbG9vcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmxvb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5mbG9vcih0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNlaWwoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHBvaW50IHdpdGggY2VpbGVkIGNvb3JkaW5hdGVzIChyb3VuZGVkIHVwKS5cclxuICBcdGNlaWw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2VpbDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLnggPSBNYXRoLmNlaWwodGhpcy54KTtcclxuICBcdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRydW5jKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHRydW5jYXRlZCBjb29yZGluYXRlcyAocm91bmRlZCB0b3dhcmRzIHplcm8pLlxyXG4gIFx0dHJ1bmM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RydW5jOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMueCA9IHRydW5jKHRoaXMueCk7XHJcbiAgXHRcdHRoaXMueSA9IHRydW5jKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGRpc3RhbmNlVG8ob3RoZXJQb2ludDogUG9pbnQpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGNhcnRlc2lhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgZ2l2ZW4gcG9pbnRzLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHR2YXIgeCA9IHBvaW50LnggLSB0aGlzLngsXHJcbiAgXHRcdCAgICB5ID0gcG9pbnQueSAtIHRoaXMueTtcclxuXHJcbiAgXHRcdHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyUG9pbnQ6IFBvaW50KTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIHBvaW50IGhhcyB0aGUgc2FtZSBjb29yZGluYXRlcy5cclxuICBcdGVxdWFsczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gcG9pbnQueCA9PT0gdGhpcy54ICYmXHJcbiAgXHRcdCAgICAgICBwb2ludC55ID09PSB0aGlzLnk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJQb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBwb2ludCBhcmUgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGN1cnJlbnQgcG9pbnQgY29vcmRpbmF0ZXMgKGluIGFic29sdXRlIHZhbHVlcykuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5hYnMocG9pbnQueCkgPD0gTWF0aC5hYnModGhpcy54KSAmJlxyXG4gIFx0XHQgICAgICAgTWF0aC5hYnMocG9pbnQueSkgPD0gTWF0aC5hYnModGhpcy55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXHJcbiAgXHR0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gJ1BvaW50KCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLngpICsgJywgJyArXHJcbiAgXHRcdCAgICAgICAgZm9ybWF0TnVtKHRoaXMueSkgKyAnKSc7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5wb2ludCh4OiBOdW1iZXIsIHk6IE51bWJlciwgcm91bmQ/OiBCb29sZWFuKVxyXG4gIC8vIENyZWF0ZXMgYSBQb2ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMuIElmIG9wdGlvbmFsIGByb3VuZGAgaXMgc2V0IHRvIHRydWUsIHJvdW5kcyB0aGUgYHhgIGFuZCBgeWAgdmFsdWVzLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogTnVtYmVyW10pXHJcbiAgLy8gRXhwZWN0cyBhbiBhcnJheSBvZiB0aGUgZm9ybSBgW3gsIHldYCBpbnN0ZWFkLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogT2JqZWN0KVxyXG4gIC8vIEV4cGVjdHMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHt4OiBOdW1iZXIsIHk6IE51bWJlcn1gIGluc3RlYWQuXHJcbiAgZnVuY3Rpb24gdG9Qb2ludCh4LCB5LCByb3VuZCkge1xyXG4gIFx0aWYgKHggaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRyZXR1cm4geDtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KHgpKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeFswXSwgeFsxXSk7XHJcbiAgXHR9XHJcbiAgXHRpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwpIHtcclxuICBcdFx0cmV0dXJuIHg7XHJcbiAgXHR9XHJcbiAgXHRpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmICd4JyBpbiB4ICYmICd5JyBpbiB4KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeC54LCB4LnkpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIEJvdW5kc1xyXG4gICAqIEBha2EgTC5Cb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBhcmVhIGluIHBpeGVsIGNvb3JkaW5hdGVzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHAxID0gTC5wb2ludCgxMCwgMTApLFxyXG4gICAqIHAyID0gTC5wb2ludCg0MCwgNjApLFxyXG4gICAqIGJvdW5kcyA9IEwuYm91bmRzKHAxLCBwMik7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBBbGwgTGVhZmxldCBtZXRob2RzIHRoYXQgYWNjZXB0IGBCb3VuZHNgIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBvdGhlckJvdW5kcy5pbnRlcnNlY3RzKFtbMTAsIDEwXSwgWzQwLCA2MF1dKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBCb3VuZHMoYSwgYikge1xyXG4gIFx0aWYgKCFhKSB7IHJldHVybjsgfVxyXG5cclxuICBcdHZhciBwb2ludHMgPSBiID8gW2EsIGJdIDogYTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKHBvaW50c1tpXSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBCb3VuZHMucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQocG9pbnQ6IFBvaW50KTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kcyB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50LlxyXG5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQob3RoZXJCb3VuZHM6IEJvdW5kcyk6IHRoaXNcclxuICBcdC8vIEV4dGVuZCB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIGJvdW5kc1xyXG4gIFx0ZXh0ZW5kOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBtaW4yLCBtYXgyO1xyXG4gIFx0XHRpZiAoIW9iaikgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFBvaW50IHx8IHR5cGVvZiBvYmpbMF0gPT09ICdudW1iZXInIHx8ICd4JyBpbiBvYmopIHtcclxuICBcdFx0XHRtaW4yID0gbWF4MiA9IHRvUG9pbnQob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0JvdW5kcyhvYmopO1xyXG4gIFx0XHRcdG1pbjIgPSBvYmoubWluO1xyXG4gIFx0XHRcdG1heDIgPSBvYmoubWF4O1xyXG5cclxuICBcdFx0XHRpZiAoIW1pbjIgfHwgIW1heDIpIHsgcmV0dXJuIHRoaXM7IH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQHByb3BlcnR5IG1pbjogUG9pbnRcclxuICBcdFx0Ly8gVGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHQvLyBAcHJvcGVydHkgbWF4OiBQb2ludFxyXG4gIFx0XHQvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHRpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xyXG4gIFx0XHRcdHRoaXMubWluID0gbWluMi5jbG9uZSgpO1xyXG4gIFx0XHRcdHRoaXMubWF4ID0gbWF4Mi5jbG9uZSgpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHRoaXMubWluLnggPSBNYXRoLm1pbihtaW4yLngsIHRoaXMubWluLngpO1xyXG4gIFx0XHRcdHRoaXMubWF4LnggPSBNYXRoLm1heChtYXgyLngsIHRoaXMubWF4LngpO1xyXG4gIFx0XHRcdHRoaXMubWluLnkgPSBNYXRoLm1pbihtaW4yLnksIHRoaXMubWluLnkpO1xyXG4gIFx0XHRcdHRoaXMubWF4LnkgPSBNYXRoLm1heChtYXgyLnksIHRoaXMubWF4LnkpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcihyb3VuZD86IEJvb2xlYW4pOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uIChyb3VuZCkge1xyXG4gIFx0XHRyZXR1cm4gdG9Qb2ludChcclxuICBcdFx0ICAgICAgICAodGhpcy5taW4ueCArIHRoaXMubWF4LngpIC8gMixcclxuICBcdFx0ICAgICAgICAodGhpcy5taW4ueSArIHRoaXMubWF4LnkpIC8gMiwgcm91bmQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdHRvbUxlZnQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdHRvbS1sZWZ0IHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRCb3R0b21MZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMubWluLngsIHRoaXMubWF4LnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFRvcFJpZ2h0KCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB0b3AtcmlnaHQgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldFRvcFJpZ2h0OiBmdW5jdGlvbiAoKSB7IC8vIC0+IFBvaW50XHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMubWF4LngsIHRoaXMubWluLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFRvcExlZnQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHRvcC1sZWZ0IHBvaW50IG9mIHRoZSBib3VuZHMgKGkuZS4gW2B0aGlzLm1pbmBdKCNib3VuZHMtbWluKSkuXHJcbiAgXHRnZXRUb3BMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1pbjsgLy8gbGVmdCwgdG9wXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm90dG9tUmlnaHQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdHRvbS1yaWdodCBwb2ludCBvZiB0aGUgYm91bmRzIChpLmUuIFtgdGhpcy5tYXhgXSgjYm91bmRzLW1heCkpLlxyXG4gIFx0Z2V0Qm90dG9tUmlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMubWF4OyAvLyByaWdodCwgYm90dG9tXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U2l6ZSgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IEJvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWlucyhwb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBnaXZlbiBwb2ludC5cclxuICBcdGNvbnRhaW5zOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBtaW4sIG1heDtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRcdG9iaiA9IHRvUG9pbnQob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob2JqIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdFx0bWluID0gb2JqLm1pbjtcclxuICBcdFx0XHRtYXggPSBvYmoubWF4O1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG1pbiA9IG1heCA9IG9iajtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIChtaW4ueCA+PSB0aGlzLm1pbi54KSAmJlxyXG4gIFx0XHQgICAgICAgKG1heC54IDw9IHRoaXMubWF4LngpICYmXHJcbiAgXHRcdCAgICAgICAobWluLnkgPj0gdGhpcy5taW4ueSkgJiZcclxuICBcdFx0ICAgICAgIChtYXgueSA8PSB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpbnRlcnNlY3RzKG90aGVyQm91bmRzOiBCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGludGVyc2VjdHMgdGhlIGdpdmVuIGJvdW5kcy4gVHdvIGJvdW5kc1xyXG4gIFx0Ly8gaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykgeyAvLyAoQm91bmRzKSAtPiBCb29sZWFuXHJcbiAgXHRcdGJvdW5kcyA9IHRvQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgbWluID0gdGhpcy5taW4sXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLm1heCxcclxuICBcdFx0ICAgIG1pbjIgPSBib3VuZHMubWluLFxyXG4gIFx0XHQgICAgbWF4MiA9IGJvdW5kcy5tYXgsXHJcbiAgXHRcdCAgICB4SW50ZXJzZWN0cyA9IChtYXgyLnggPj0gbWluLngpICYmIChtaW4yLnggPD0gbWF4LngpLFxyXG4gIFx0XHQgICAgeUludGVyc2VjdHMgPSAobWF4Mi55ID49IG1pbi55KSAmJiAobWluMi55IDw9IG1heC55KTtcclxuXHJcbiAgXHRcdHJldHVybiB4SW50ZXJzZWN0cyAmJiB5SW50ZXJzZWN0cztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvdmVybGFwcyhvdGhlckJvdW5kczogQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBvdmVybGFwcyB0aGUgZ2l2ZW4gYm91bmRzLiBUd28gYm91bmRzXHJcbiAgXHQvLyBvdmVybGFwIGlmIHRoZWlyIGludGVyc2VjdGlvbiBpcyBhbiBhcmVhLlxyXG4gIFx0b3ZlcmxhcHM6IGZ1bmN0aW9uIChib3VuZHMpIHsgLy8gKEJvdW5kcykgLT4gQm9vbGVhblxyXG4gIFx0XHRib3VuZHMgPSB0b0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIG1pbiA9IHRoaXMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5tYXgsXHJcbiAgXHRcdCAgICBtaW4yID0gYm91bmRzLm1pbixcclxuICBcdFx0ICAgIG1heDIgPSBib3VuZHMubWF4LFxyXG4gIFx0XHQgICAgeE92ZXJsYXBzID0gKG1heDIueCA+IG1pbi54KSAmJiAobWluMi54IDwgbWF4LngpLFxyXG4gIFx0XHQgICAgeU92ZXJsYXBzID0gKG1heDIueSA+IG1pbi55KSAmJiAobWluMi55IDwgbWF4LnkpO1xyXG5cclxuICBcdFx0cmV0dXJuIHhPdmVybGFwcyAmJiB5T3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNWYWxpZCgpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYm91bmRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC5cclxuICBcdGlzVmFsaWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhKHRoaXMubWluICYmIHRoaXMubWF4KTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFkKGJ1ZmZlclJhdGlvOiBOdW1iZXIpOiBCb3VuZHNcclxuICBcdC8vIFJldHVybnMgYm91bmRzIGNyZWF0ZWQgYnkgZXh0ZW5kaW5nIG9yIHJldHJhY3RpbmcgdGhlIGN1cnJlbnQgYm91bmRzIGJ5IGEgZ2l2ZW4gcmF0aW8gaW4gZWFjaCBkaXJlY3Rpb24uXHJcbiAgXHQvLyBGb3IgZXhhbXBsZSwgYSByYXRpbyBvZiAwLjUgZXh0ZW5kcyB0aGUgYm91bmRzIGJ5IDUwJSBpbiBlYWNoIGRpcmVjdGlvbi5cclxuICBcdC8vIE5lZ2F0aXZlIHZhbHVlcyB3aWxsIHJldHJhY3QgdGhlIGJvdW5kcy5cclxuICBcdHBhZDogZnVuY3Rpb24gKGJ1ZmZlclJhdGlvKSB7XHJcbiAgXHRcdHZhciBtaW4gPSB0aGlzLm1pbixcclxuICBcdFx0bWF4ID0gdGhpcy5tYXgsXHJcbiAgXHRcdGhlaWdodEJ1ZmZlciA9IE1hdGguYWJzKG1pbi54IC0gbWF4LngpICogYnVmZmVyUmF0aW8sXHJcbiAgXHRcdHdpZHRoQnVmZmVyID0gTWF0aC5hYnMobWluLnkgLSBtYXgueSkgKiBidWZmZXJSYXRpbztcclxuXHJcblxyXG4gIFx0XHRyZXR1cm4gdG9Cb3VuZHMoXHJcbiAgXHRcdFx0dG9Qb2ludChtaW4ueCAtIGhlaWdodEJ1ZmZlciwgbWluLnkgLSB3aWR0aEJ1ZmZlciksXHJcbiAgXHRcdFx0dG9Qb2ludChtYXgueCArIGhlaWdodEJ1ZmZlciwgbWF4LnkgKyB3aWR0aEJ1ZmZlcikpO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBlcXVhbHMob3RoZXJCb3VuZHM6IEJvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgaXMgZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxyXG4gIFx0ZXF1YWxzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGlmICghYm91bmRzKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICBcdFx0Ym91bmRzID0gdG9Cb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLm1pbi5lcXVhbHMoYm91bmRzLmdldFRvcExlZnQoKSkgJiZcclxuICBcdFx0XHR0aGlzLm1heC5lcXVhbHMoYm91bmRzLmdldEJvdHRvbVJpZ2h0KCkpO1xyXG4gIFx0fSxcclxuICB9O1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5ib3VuZHMoY29ybmVyMTogUG9pbnQsIGNvcm5lcjI6IFBvaW50KVxyXG4gIC8vIENyZWF0ZXMgYSBCb3VuZHMgb2JqZWN0IGZyb20gdHdvIGNvcm5lcnMgY29vcmRpbmF0ZSBwYWlycy5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLmJvdW5kcyhwb2ludHM6IFBvaW50W10pXHJcbiAgLy8gQ3JlYXRlcyBhIEJvdW5kcyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gIGZ1bmN0aW9uIHRvQm91bmRzKGEsIGIpIHtcclxuICBcdGlmICghYSB8fCBhIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIExhdExuZ0JvdW5kc1xyXG4gICAqIEBha2EgTC5MYXRMbmdCb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBnZW9ncmFwaGljYWwgYXJlYSBvbiBhIG1hcC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBjb3JuZXIxID0gTC5sYXRMbmcoNDAuNzEyLCAtNzQuMjI3KSxcclxuICAgKiBjb3JuZXIyID0gTC5sYXRMbmcoNDAuNzc0LCAtNzQuMTI1KSxcclxuICAgKiBib3VuZHMgPSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxLCBjb3JuZXIyKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgdGhhdCBhY2NlcHQgTGF0TG5nQm91bmRzIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAuZml0Qm91bmRzKFtcclxuICAgKiBcdFs0MC43MTIsIC03NC4yMjddLFxyXG4gICAqIFx0WzQwLjc3NCwgLTc0LjEyNV1cclxuICAgKiBdKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIENhdXRpb246IGlmIHRoZSBhcmVhIGNyb3NzZXMgdGhlIGFudGltZXJpZGlhbiAob2Z0ZW4gY29uZnVzZWQgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBEYXRlIExpbmUpLCB5b3UgbXVzdCBzcGVjaWZ5IGNvcm5lcnMgX291dHNpZGVfIHRoZSBbLTE4MCwgMTgwXSBkZWdyZWVzIGxvbmdpdHVkZSByYW5nZS5cclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgTGF0TG5nQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBMYXRMbmdCb3VuZHMoY29ybmVyMSwgY29ybmVyMikgeyAvLyAoTGF0TG5nLCBMYXRMbmcpIG9yIChMYXRMbmdbXSlcclxuICBcdGlmICghY29ybmVyMSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHR2YXIgbGF0bG5ncyA9IGNvcm5lcjIgPyBbY29ybmVyMSwgY29ybmVyMl0gOiBjb3JuZXIxO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXRsbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKGxhdGxuZ3NbaV0pO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgTGF0TG5nQm91bmRzLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChsYXRsbmc6IExhdExuZyk6IHRoaXNcclxuICBcdC8vIEV4dGVuZCB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50XHJcblxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kIHRoZSBib3VuZHMgdG8gY29udGFpbiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRleHRlbmQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIsIG5lMjtcclxuXHJcbiAgXHRcdGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmcpIHtcclxuICBcdFx0XHRzdzIgPSBvYmo7XHJcbiAgXHRcdFx0bmUyID0gb2JqO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmdCb3VuZHMpIHtcclxuICBcdFx0XHRzdzIgPSBvYmouX3NvdXRoV2VzdDtcclxuICBcdFx0XHRuZTIgPSBvYmouX25vcnRoRWFzdDtcclxuXHJcbiAgXHRcdFx0aWYgKCFzdzIgfHwgIW5lMikgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZXR1cm4gb2JqID8gdGhpcy5leHRlbmQodG9MYXRMbmcob2JqKSB8fCB0b0xhdExuZ0JvdW5kcyhvYmopKSA6IHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghc3cgJiYgIW5lKSB7XHJcbiAgXHRcdFx0dGhpcy5fc291dGhXZXN0ID0gbmV3IExhdExuZyhzdzIubGF0LCBzdzIubG5nKTtcclxuICBcdFx0XHR0aGlzLl9ub3J0aEVhc3QgPSBuZXcgTGF0TG5nKG5lMi5sYXQsIG5lMi5sbmcpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XHJcbiAgXHRcdFx0c3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcclxuICBcdFx0XHRuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xyXG4gIFx0XHRcdG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhZChidWZmZXJSYXRpbzogTnVtYmVyKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGJvdW5kcyBjcmVhdGVkIGJ5IGV4dGVuZGluZyBvciByZXRyYWN0aW5nIHRoZSBjdXJyZW50IGJvdW5kcyBieSBhIGdpdmVuIHJhdGlvIGluIGVhY2ggZGlyZWN0aW9uLlxyXG4gIFx0Ly8gRm9yIGV4YW1wbGUsIGEgcmF0aW8gb2YgMC41IGV4dGVuZHMgdGhlIGJvdW5kcyBieSA1MCUgaW4gZWFjaCBkaXJlY3Rpb24uXHJcbiAgXHQvLyBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCByZXRyYWN0IHRoZSBib3VuZHMuXHJcbiAgXHRwYWQ6IGZ1bmN0aW9uIChidWZmZXJSYXRpbykge1xyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIGhlaWdodEJ1ZmZlciA9IE1hdGguYWJzKHN3LmxhdCAtIG5lLmxhdCkgKiBidWZmZXJSYXRpbyxcclxuICBcdFx0ICAgIHdpZHRoQnVmZmVyID0gTWF0aC5hYnMoc3cubG5nIC0gbmUubG5nKSAqIGJ1ZmZlclJhdGlvO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgbmV3IExhdExuZyhzdy5sYXQgLSBoZWlnaHRCdWZmZXIsIHN3LmxuZyAtIHdpZHRoQnVmZmVyKSxcclxuICBcdFx0ICAgICAgICBuZXcgTGF0TG5nKG5lLmxhdCArIGhlaWdodEJ1ZmZlciwgbmUubG5nICsgd2lkdGhCdWZmZXIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxhdCArIHRoaXMuX25vcnRoRWFzdC5sYXQpIC8gMixcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxuZyArIHRoaXMuX25vcnRoRWFzdC5sbmcpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U291dGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc291dGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0U291dGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhFYXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtZWFzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSwgdGhpcy5nZXRXZXN0KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNvdXRoRWFzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoLWVhc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldFNvdXRoRWFzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyh0aGlzLmdldFNvdXRoKCksIHRoaXMuZ2V0RWFzdCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRXZXN0KCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgd2VzdCBsb25naXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0V2VzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTb3V0aCgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoIGxhdGl0dWRlIG9mIHRoZSBib3VuZHNcclxuICBcdGdldFNvdXRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVhc3QoKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBlYXN0IGxvbmdpdHVkZSBvZiB0aGUgYm91bmRzXHJcbiAgXHRnZXRFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3QubG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE5vcnRoKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGggbGF0aXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0Tm9ydGg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IExhdExuZ0JvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMgKGxhdGxuZzogTGF0TG5nKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKG9iaikgeyAvLyAoTGF0TG5nQm91bmRzKSBvciAoTGF0TG5nKSAtPiBCb29sZWFuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBMYXRMbmcgfHwgJ2xhdCcgaW4gb2JqKSB7XHJcbiAgXHRcdFx0b2JqID0gdG9MYXRMbmcob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0xhdExuZ0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiwgbmUyO1xyXG5cclxuICBcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIExhdExuZ0JvdW5kcykge1xyXG4gIFx0XHRcdHN3MiA9IG9iai5nZXRTb3V0aFdlc3QoKTtcclxuICBcdFx0XHRuZTIgPSBvYmouZ2V0Tm9ydGhFYXN0KCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0c3cyID0gbmUyID0gb2JqO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gKHN3Mi5sYXQgPj0gc3cubGF0KSAmJiAobmUyLmxhdCA8PSBuZS5sYXQpICYmXHJcbiAgXHRcdCAgICAgICAoc3cyLmxuZyA+PSBzdy5sbmcpICYmIChuZTIubG5nIDw9IG5lLmxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW50ZXJzZWN0cyhvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBpbnRlcnNlY3RzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIgPSBib3VuZHMuZ2V0U291dGhXZXN0KCksXHJcbiAgXHRcdCAgICBuZTIgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCksXHJcblxyXG4gIFx0XHQgICAgbGF0SW50ZXJzZWN0cyA9IChuZTIubGF0ID49IHN3LmxhdCkgJiYgKHN3Mi5sYXQgPD0gbmUubGF0KSxcclxuICBcdFx0ICAgIGxuZ0ludGVyc2VjdHMgPSAobmUyLmxuZyA+PSBzdy5sbmcpICYmIChzdzIubG5nIDw9IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0SW50ZXJzZWN0cyAmJiBsbmdJbnRlcnNlY3RzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG92ZXJsYXBzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIG92ZXJsYXBzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgb3ZlcmxhcCBpZiB0aGVpciBpbnRlcnNlY3Rpb24gaXMgYW4gYXJlYS5cclxuICBcdG92ZXJsYXBzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiA9IGJvdW5kcy5nZXRTb3V0aFdlc3QoKSxcclxuICBcdFx0ICAgIG5lMiA9IGJvdW5kcy5nZXROb3J0aEVhc3QoKSxcclxuXHJcbiAgXHRcdCAgICBsYXRPdmVybGFwcyA9IChuZTIubGF0ID4gc3cubGF0KSAmJiAoc3cyLmxhdCA8IG5lLmxhdCksXHJcbiAgXHRcdCAgICBsbmdPdmVybGFwcyA9IChuZTIubG5nID4gc3cubG5nKSAmJiAoc3cyLmxuZyA8IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0T3ZlcmxhcHMgJiYgbG5nT3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9CQm94U3RyaW5nKCk6IFN0cmluZ1xyXG4gIFx0Ly8gUmV0dXJucyBhIHN0cmluZyB3aXRoIGJvdW5kaW5nIGJveCBjb29yZGluYXRlcyBpbiBhICdzb3V0aHdlc3RfbG5nLHNvdXRod2VzdF9sYXQsbm9ydGhlYXN0X2xuZyxub3J0aGVhc3RfbGF0JyBmb3JtYXQuIFVzZWZ1bCBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byB3ZWIgc2VydmljZXMgdGhhdCByZXR1cm4gZ2VvIGRhdGEuXHJcbiAgXHR0b0JCb3hTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIFt0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXRTb3V0aCgpLCB0aGlzLmdldEVhc3QoKSwgdGhpcy5nZXROb3J0aCgpXS5qb2luKCcsJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMsIG1heE1hcmdpbj86IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgaXMgZXF1aXZhbGVudCAod2l0aGluIGEgc21hbGwgbWFyZ2luIG9mIGVycm9yKSB0byB0aGUgZ2l2ZW4gYm91bmRzLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChib3VuZHMsIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIWJvdW5kcykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmVxdWFscyhib3VuZHMuZ2V0U291dGhXZXN0KCksIG1heE1hcmdpbikgJiZcclxuICBcdFx0ICAgICAgIHRoaXMuX25vcnRoRWFzdC5lcXVhbHMoYm91bmRzLmdldE5vcnRoRWFzdCgpLCBtYXhNYXJnaW4pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGlzVmFsaWQoKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJvdW5kcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXHJcbiAgXHRpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhISh0aGlzLl9zb3V0aFdlc3QgJiYgdGhpcy5fbm9ydGhFYXN0KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBUT0RPIEludGVybmF0aW9uYWwgZGF0ZSBsaW5lP1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxOiBMYXRMbmcsIGNvcm5lcjI6IExhdExuZylcclxuICAvLyBDcmVhdGVzIGEgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGJ5IGRlZmluaW5nIHR3byBkaWFnb25hbGx5IG9wcG9zaXRlIGNvcm5lcnMgb2YgdGhlIHJlY3RhbmdsZS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmdCb3VuZHMobGF0bG5nczogTGF0TG5nW10pXHJcbiAgLy8gQ3JlYXRlcyBhIGBMYXRMbmdCb3VuZHNgIG9iamVjdCBkZWZpbmVkIGJ5IHRoZSBnZW9ncmFwaGljYWwgcG9pbnRzIGl0IGNvbnRhaW5zLiBWZXJ5IHVzZWZ1bCBmb3Igem9vbWluZyB0aGUgbWFwIHRvIGZpdCBhIHBhcnRpY3VsYXIgc2V0IG9mIGxvY2F0aW9ucyB3aXRoIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIGZ1bmN0aW9uIHRvTGF0TG5nQm91bmRzKGEsIGIpIHtcclxuICBcdGlmIChhIGluc3RhbmNlb2YgTGF0TG5nQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qIEBjbGFzcyBMYXRMbmdcclxuICAgKiBAYWthIEwuTGF0TG5nXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggYSBjZXJ0YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogdmFyIGxhdGxuZyA9IEwubGF0TG5nKDUwLjUsIDMwLjUpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQWxsIExlYWZsZXQgbWV0aG9kcyB0aGF0IGFjY2VwdCBMYXRMbmcgb2JqZWN0cyBhbHNvIGFjY2VwdCB0aGVtIGluIGEgc2ltcGxlIEFycmF5IGZvcm0gYW5kIHNpbXBsZSBvYmplY3QgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogbWFwLnBhblRvKFs1MCwgMzBdKTtcclxuICAgKiBtYXAucGFuVG8oe2xvbjogMzAsIGxhdDogNTB9KTtcclxuICAgKiBtYXAucGFuVG8oe2xhdDogNTAsIGxuZzogMzB9KTtcclxuICAgKiBtYXAucGFuVG8oTC5sYXRMbmcoNTAsIDMwKSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYExhdExuZ2AgZG9lcyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiB3aGljaCBtZWFucyBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gaXQsIGFuZCBuZXcgbWV0aG9kc1xyXG4gICAqIGNhbid0IGJlIGFkZGVkIHRvIGl0IHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gTGF0TG5nKGxhdCwgbG5nLCBhbHQpIHtcclxuICBcdGlmIChpc05hTihsYXQpIHx8IGlzTmFOKGxuZykpIHtcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgnICsgbGF0ICsgJywgJyArIGxuZyArICcpJyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxhdDogTnVtYmVyXHJcbiAgXHQvLyBMYXRpdHVkZSBpbiBkZWdyZWVzXHJcbiAgXHR0aGlzLmxhdCA9ICtsYXQ7XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxuZzogTnVtYmVyXHJcbiAgXHQvLyBMb25naXR1ZGUgaW4gZGVncmVlc1xyXG4gIFx0dGhpcy5sbmcgPSArbG5nO1xyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBhbHQ6IE51bWJlclxyXG4gIFx0Ly8gQWx0aXR1ZGUgaW4gbWV0ZXJzIChvcHRpb25hbClcclxuICBcdGlmIChhbHQgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHR0aGlzLmFsdCA9ICthbHQ7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBMYXRMbmcucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBlcXVhbHMob3RoZXJMYXRMbmc6IExhdExuZywgbWF4TWFyZ2luPzogTnVtYmVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGBMYXRMbmdgIHBvaW50IGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uICh3aXRoaW4gYSBzbWFsbCBtYXJnaW4gb2YgZXJyb3IpLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChvYmosIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdG9iaiA9IHRvTGF0TG5nKG9iaik7XHJcblxyXG4gIFx0XHR2YXIgbWFyZ2luID0gTWF0aC5tYXgoXHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnModGhpcy5sYXQgLSBvYmoubGF0KSxcclxuICBcdFx0ICAgICAgICBNYXRoLmFicyh0aGlzLmxuZyAtIG9iai5sbmcpKTtcclxuXHJcbiAgXHRcdHJldHVybiBtYXJnaW4gPD0gKG1heE1hcmdpbiA9PT0gdW5kZWZpbmVkID8gMS4wRS05IDogbWF4TWFyZ2luKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS5cclxuICBcdHRvU3RyaW5nOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiAnTGF0TG5nKCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxhdCwgcHJlY2lzaW9uKSArICcsICcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxuZywgcHJlY2lzaW9uKSArICcpJztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZVRvKG90aGVyTGF0TG5nOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIChpbiBtZXRlcnMpIHRvIHRoZSBnaXZlbiBgTGF0TG5nYCBjYWxjdWxhdGVkIHVzaW5nIHRoZSBbU3BoZXJpY2FsIExhdyBvZiBDb3NpbmVzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGhlcmljYWxfbGF3X29mX2Nvc2luZXMpLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKG90aGVyKSB7XHJcbiAgXHRcdHJldHVybiBFYXJ0aC5kaXN0YW5jZSh0aGlzLCB0b0xhdExuZyhvdGhlcikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXAoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgbmV3IGBMYXRMbmdgIG9iamVjdCB3aXRoIHRoZSBsb25naXR1ZGUgd3JhcHBlZCBzbyBpdCdzIGFsd2F5cyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIEVhcnRoLndyYXBMYXRMbmcodGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9Cb3VuZHMoc2l6ZUluTWV0ZXJzOiBOdW1iZXIpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgYSBuZXcgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGluIHdoaWNoIGVhY2ggYm91bmRhcnkgaXMgYHNpemVJbk1ldGVycy8yYCBtZXRlcnMgYXBhcnQgZnJvbSB0aGUgYExhdExuZ2AuXHJcbiAgXHR0b0JvdW5kczogZnVuY3Rpb24gKHNpemVJbk1ldGVycykge1xyXG4gIFx0XHR2YXIgbGF0QWNjdXJhY3kgPSAxODAgKiBzaXplSW5NZXRlcnMgLyA0MDA3NTAxNyxcclxuICBcdFx0ICAgIGxuZ0FjY3VyYWN5ID0gbGF0QWNjdXJhY3kgLyBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLmxhdCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdG9MYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgW3RoaXMubGF0IC0gbGF0QWNjdXJhY3ksIHRoaXMubG5nIC0gbG5nQWNjdXJhY3ldLFxyXG4gIFx0XHQgICAgICAgIFt0aGlzLmxhdCArIGxhdEFjY3VyYWN5LCB0aGlzLmxuZyArIGxuZ0FjY3VyYWN5XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMubGF0LCB0aGlzLmxuZywgdGhpcy5hbHQpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcobGF0aXR1ZGU6IE51bWJlciwgbG9uZ2l0dWRlOiBOdW1iZXIsIGFsdGl0dWRlPzogTnVtYmVyKTogTGF0TG5nXHJcbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggdGhlIGdpdmVuIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgKGFuZCBvcHRpb25hbGx5IGFsdGl0dWRlKS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIEV4cGVjdHMgYW4gYXJyYXkgb2YgdGhlIGZvcm0gYFtOdW1iZXIsIE51bWJlcl1gIG9yIGBbTnVtYmVyLCBOdW1iZXIsIE51bWJlcl1gIGluc3RlYWQuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nKGNvb3JkczogT2JqZWN0KTogTGF0TG5nXHJcbiAgLy8gRXhwZWN0cyBhbiBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHtsYXQ6IE51bWJlciwgbG5nOiBOdW1iZXJ9YCBvciBge2xhdDogTnVtYmVyLCBsbmc6IE51bWJlciwgYWx0OiBOdW1iZXJ9YCBpbnN0ZWFkLlxyXG5cclxuICBmdW5jdGlvbiB0b0xhdExuZyhhLCBiLCBjKSB7XHJcbiAgXHRpZiAoYSBpbnN0YW5jZW9mIExhdExuZykge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KGEpICYmIHR5cGVvZiBhWzBdICE9PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDMpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdLCBhWzJdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDIpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdH1cclxuICBcdGlmIChhID09PSB1bmRlZmluZWQgfHwgYSA9PT0gbnVsbCkge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgJ2xhdCcgaW4gYSkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhhLmxhdCwgJ2xuZycgaW4gYSA/IGEubG5nIDogYS5sb24sIGEuYWx0KTtcclxuICBcdH1cclxuICBcdGlmIChiID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhhLCBiLCBjKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuQmFzZVxyXG4gICAqIE9iamVjdCB0aGF0IGRlZmluZXMgY29vcmRpbmF0ZSByZWZlcmVuY2Ugc3lzdGVtcyBmb3IgcHJvamVjdGluZ1xyXG4gICAqIGdlb2dyYXBoaWNhbCBwb2ludHMgaW50byBwaXhlbCAoc2NyZWVuKSBjb29yZGluYXRlcyBhbmQgYmFjayAoYW5kIHRvXHJcbiAgICogY29vcmRpbmF0ZXMgaW4gb3RoZXIgdW5pdHMgZm9yIFtXTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9NYXBfU2VydmljZSkgc2VydmljZXMpLiBTZWVcclxuICAgKiBbc3BhdGlhbCByZWZlcmVuY2Ugc3lzdGVtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGF0aWFsX3JlZmVyZW5jZV9zeXN0ZW0pLlxyXG4gICAqXHJcbiAgICogTGVhZmxldCBkZWZpbmVzIHRoZSBtb3N0IHVzdWFsIENSU3MgYnkgZGVmYXVsdC4gSWYgeW91IHdhbnQgdG8gdXNlIGFcclxuICAgKiBDUlMgbm90IGRlZmluZWQgYnkgZGVmYXVsdCwgdGFrZSBhIGxvb2sgYXQgdGhlXHJcbiAgICogW1Byb2o0TGVhZmxldF0oaHR0cHM6Ly9naXRodWIuY29tL2thcnRlbmEvUHJvajRMZWFmbGV0KSBwbHVnaW4uXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgdGhlIENSUyBpbnN0YW5jZXMgZG8gbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXHJcbiAgICogYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4gQWxzbywgbmV3IGNsYXNzZXMgY2FuJ3QgaW5oZXJpdCBmcm9tIHRoZW0sXHJcbiAgICogYW5kIG1ldGhvZHMgY2FuJ3QgYmUgYWRkZWQgdG8gdGhlbSB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXHJcbiAgICovXHJcblxyXG4gIHZhciBDUlMgPSB7XHJcbiAgXHQvLyBAbWV0aG9kIGxhdExuZ1RvUG9pbnQobGF0bG5nOiBMYXRMbmcsIHpvb206IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBQcm9qZWN0cyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgaW50byBwaXhlbCBjb29yZGluYXRlcyBmb3IgYSBnaXZlbiB6b29tLlxyXG4gIFx0bGF0TG5nVG9Qb2ludDogZnVuY3Rpb24gKGxhdGxuZywgem9vbSkge1xyXG4gIFx0XHR2YXIgcHJvamVjdGVkUG9pbnQgPSB0aGlzLnByb2plY3Rpb24ucHJvamVjdChsYXRsbmcpLFxyXG4gIFx0XHQgICAgc2NhbGUgPSB0aGlzLnNjYWxlKHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShwcm9qZWN0ZWRQb2ludCwgc2NhbGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBvaW50VG9MYXRMbmcocG9pbnQ6IFBvaW50LCB6b29tOiBOdW1iZXIpOiBMYXRMbmdcclxuICBcdC8vIFRoZSBpbnZlcnNlIG9mIGBsYXRMbmdUb1BvaW50YC4gUHJvamVjdHMgcGl4ZWwgY29vcmRpbmF0ZXMgb24gYSBnaXZlblxyXG4gIFx0Ly8gem9vbSBpbnRvIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcy5cclxuICBcdHBvaW50VG9MYXRMbmc6IGZ1bmN0aW9uIChwb2ludCwgem9vbSkge1xyXG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLnNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgdW50cmFuc2Zvcm1lZFBvaW50ID0gdGhpcy50cmFuc2Zvcm1hdGlvbi51bnRyYW5zZm9ybShwb2ludCwgc2NhbGUpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdGlvbi51bnByb2plY3QodW50cmFuc2Zvcm1lZFBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIFByb2plY3RzIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBpbnRvIGNvb3JkaW5hdGVzIGluIHVuaXRzIGFjY2VwdGVkIGZvclxyXG4gIFx0Ly8gdGhpcyBDUlMgKGUuZy4gbWV0ZXJzIGZvciBFUFNHOjM4NTcsIGZvciBwYXNzaW5nIGl0IHRvIFdNUyBzZXJ2aWNlcykuXHJcbiAgXHRwcm9qZWN0OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLnByb2plY3Rpb24ucHJvamVjdChsYXRsbmcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMYXRMbmdcclxuICBcdC8vIEdpdmVuIGEgcHJvamVjdGVkIGNvb3JkaW5hdGUgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBMYXRMbmcuXHJcbiAgXHQvLyBUaGUgaW52ZXJzZSBvZiBgcHJvamVjdGAuXHJcbiAgXHR1bnByb2plY3Q6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChwb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2NhbGUoem9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzY2FsZSB1c2VkIHdoZW4gdHJhbnNmb3JtaW5nIHByb2plY3RlZCBjb29yZGluYXRlcyBpbnRvXHJcbiAgXHQvLyBwaXhlbCBjb29yZGluYXRlcyBmb3IgYSBwYXJ0aWN1bGFyIHpvb20uIEZvciBleGFtcGxlLCBpdCByZXR1cm5zXHJcbiAgXHQvLyBgMjU2ICogMl56b29tYCBmb3IgTWVyY2F0b3ItYmFzZWQgQ1JTLlxyXG4gIFx0c2NhbGU6IGZ1bmN0aW9uICh6b29tKSB7XHJcbiAgXHRcdHJldHVybiAyNTYgKiBNYXRoLnBvdygyLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB6b29tKHNjYWxlOiBOdW1iZXIpOiBOdW1iZXJcclxuICBcdC8vIEludmVyc2Ugb2YgYHNjYWxlKClgLCByZXR1cm5zIHRoZSB6b29tIGxldmVsIGNvcnJlc3BvbmRpbmcgdG8gYSBzY2FsZVxyXG4gIFx0Ly8gZmFjdG9yIG9mIGBzY2FsZWAuXHJcbiAgXHR6b29tOiBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICBcdFx0cmV0dXJuIE1hdGgubG9nKHNjYWxlIC8gMjU2KSAvIE1hdGguTE4yO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFByb2plY3RlZEJvdW5kcyh6b29tOiBOdW1iZXIpOiBCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIHByb2plY3Rpb24ncyBib3VuZHMgc2NhbGVkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgdGhlIHByb3ZpZGVkIGB6b29tYC5cclxuICBcdGdldFByb2plY3RlZEJvdW5kczogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0aWYgKHRoaXMuaW5maW5pdGUpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgXHRcdHZhciBiID0gdGhpcy5wcm9qZWN0aW9uLmJvdW5kcyxcclxuICBcdFx0ICAgIHMgPSB0aGlzLnNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgbWluID0gdGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm0oYi5taW4sIHMpLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm0oYi5tYXgsIHMpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBCb3VuZHMobWluLCBtYXgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGRpc3RhbmNlKGxhdGxuZzE6IExhdExuZywgbGF0bG5nMjogTGF0TG5nKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMuXHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGNvZGU6IFN0cmluZ1xyXG4gIFx0Ly8gU3RhbmRhcmQgY29kZSBuYW1lIG9mIHRoZSBDUlMgcGFzc2VkIGludG8gV01TIHNlcnZpY2VzIChlLmcuIGAnRVBTRzozODU3J2ApXHJcbiAgXHQvL1xyXG4gIFx0Ly8gQHByb3BlcnR5IHdyYXBMbmc6IE51bWJlcltdXHJcbiAgXHQvLyBBbiBhcnJheSBvZiB0d28gbnVtYmVycyBkZWZpbmluZyB3aGV0aGVyIHRoZSBsb25naXR1ZGUgKGhvcml6b250YWwpIGNvb3JkaW5hdGVcclxuICBcdC8vIGF4aXMgd3JhcHMgYXJvdW5kIGEgZ2l2ZW4gcmFuZ2UgYW5kIGhvdy4gRGVmYXVsdHMgdG8gYFstMTgwLCAxODBdYCBpbiBtb3N0XHJcbiAgXHQvLyBnZW9ncmFwaGljYWwgQ1JTcy4gSWYgYHVuZGVmaW5lZGAsIHRoZSBsb25naXR1ZGUgYXhpcyBkb2VzIG5vdCB3cmFwIGFyb3VuZC5cclxuICBcdC8vXHJcbiAgXHQvLyBAcHJvcGVydHkgd3JhcExhdDogTnVtYmVyW11cclxuICBcdC8vIExpa2UgYHdyYXBMbmdgLCBidXQgZm9yIHRoZSBsYXRpdHVkZSAodmVydGljYWwpIGF4aXMuXHJcblxyXG4gIFx0Ly8gd3JhcExuZzogW21pbiwgbWF4XSxcclxuICBcdC8vIHdyYXBMYXQ6IFttaW4sIG1heF0sXHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGluZmluaXRlOiBCb29sZWFuXHJcbiAgXHQvLyBJZiB0cnVlLCB0aGUgY29vcmRpbmF0ZSBzcGFjZSB3aWxsIGJlIHVuYm91bmRlZCAoaW5maW5pdGUgaW4gYm90aCBheGVzKVxyXG4gIFx0aW5maW5pdGU6IGZhbHNlLFxyXG5cclxuICBcdC8vIEBtZXRob2Qgd3JhcExhdExuZyhsYXRsbmc6IExhdExuZyk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyBhIGBMYXRMbmdgIHdoZXJlIGxhdCBhbmQgbG5nIGhhcyBiZWVuIHdyYXBwZWQgYWNjb3JkaW5nIHRvIHRoZVxyXG4gIFx0Ly8gQ1JTJ3MgYHdyYXBMYXRgIGFuZCBgd3JhcExuZ2AgcHJvcGVydGllcywgaWYgdGhleSBhcmUgb3V0c2lkZSB0aGUgQ1JTJ3MgYm91bmRzLlxyXG4gIFx0d3JhcExhdExuZzogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR2YXIgbG5nID0gdGhpcy53cmFwTG5nID8gd3JhcE51bShsYXRsbmcubG5nLCB0aGlzLndyYXBMbmcsIHRydWUpIDogbGF0bG5nLmxuZyxcclxuICBcdFx0ICAgIGxhdCA9IHRoaXMud3JhcExhdCA/IHdyYXBOdW0obGF0bG5nLmxhdCwgdGhpcy53cmFwTGF0LCB0cnVlKSA6IGxhdGxuZy5sYXQsXHJcbiAgXHRcdCAgICBhbHQgPSBsYXRsbmcuYWx0O1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcobGF0LCBsbmcsIGFsdCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgd3JhcExhdExuZ0JvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcyk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyBhIGBMYXRMbmdCb3VuZHNgIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZ2l2ZW4gb25lLCBlbnN1cmluZ1xyXG4gIFx0Ly8gdGhhdCBpdHMgY2VudGVyIGlzIHdpdGhpbiB0aGUgQ1JTJ3MgYm91bmRzLlxyXG4gIFx0Ly8gT25seSBhY2NlcHRzIGFjdHVhbCBgTC5MYXRMbmdCb3VuZHNgIGluc3RhbmNlcywgbm90IGFycmF5cy5cclxuICBcdHdyYXBMYXRMbmdCb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMpIHtcclxuICBcdFx0dmFyIGNlbnRlciA9IGJvdW5kcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IHRoaXMud3JhcExhdExuZyhjZW50ZXIpLFxyXG4gIFx0XHQgICAgbGF0U2hpZnQgPSBjZW50ZXIubGF0IC0gbmV3Q2VudGVyLmxhdCxcclxuICBcdFx0ICAgIGxuZ1NoaWZ0ID0gY2VudGVyLmxuZyAtIG5ld0NlbnRlci5sbmc7XHJcblxyXG4gIFx0XHRpZiAobGF0U2hpZnQgPT09IDAgJiYgbG5nU2hpZnQgPT09IDApIHtcclxuICBcdFx0XHRyZXR1cm4gYm91bmRzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgc3cgPSBib3VuZHMuZ2V0U291dGhXZXN0KCksXHJcbiAgXHRcdCAgICBuZSA9IGJvdW5kcy5nZXROb3J0aEVhc3QoKSxcclxuICBcdFx0ICAgIG5ld1N3ID0gbmV3IExhdExuZyhzdy5sYXQgLSBsYXRTaGlmdCwgc3cubG5nIC0gbG5nU2hpZnQpLFxyXG4gIFx0XHQgICAgbmV3TmUgPSBuZXcgTGF0TG5nKG5lLmxhdCAtIGxhdFNoaWZ0LCBuZS5sbmcgLSBsbmdTaGlmdCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZ0JvdW5kcyhuZXdTdywgbmV3TmUpO1xyXG4gIFx0fVxyXG4gIH07XG5cbiAgLypcbiAgICogQG5hbWVzcGFjZSBDUlNcbiAgICogQGNycyBMLkNSUy5FYXJ0aFxuICAgKlxuICAgKiBTZXJ2ZXMgYXMgdGhlIGJhc2UgZm9yIENSUyB0aGF0IGFyZSBnbG9iYWwgc3VjaCB0aGF0IHRoZXkgY292ZXIgdGhlIGVhcnRoLlxuICAgKiBDYW4gb25seSBiZSB1c2VkIGFzIHRoZSBiYXNlIGZvciBvdGhlciBDUlMgYW5kIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5LFxuICAgKiBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgYGNvZGVgLCBgcHJvamVjdGlvbmAgb3IgYHRyYW5zZm9ybWF0aW9uYC4gYGRpc3RhbmNlKClgIHJldHVybnNcbiAgICogbWV0ZXJzLlxuICAgKi9cblxuICB2YXIgRWFydGggPSBleHRlbmQoe30sIENSUywge1xuICBcdHdyYXBMbmc6IFstMTgwLCAxODBdLFxuXG4gIFx0Ly8gTWVhbiBFYXJ0aCBSYWRpdXMsIGFzIHJlY29tbWVuZGVkIGZvciB1c2UgYnlcbiAgXHQvLyB0aGUgSW50ZXJuYXRpb25hbCBVbmlvbiBvZiBHZW9kZXN5IGFuZCBHZW9waHlzaWNzLFxuICBcdC8vIHNlZSBodHRwczovL3Jvc2V0dGFjb2RlLm9yZy93aWtpL0hhdmVyc2luZV9mb3JtdWxhXG4gIFx0UjogNjM3MTAwMCxcblxuICBcdC8vIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdlb2dyYXBoaWNhbCBwb2ludHMgdXNpbmcgc3BoZXJpY2FsIGxhdyBvZiBjb3NpbmVzIGFwcHJveGltYXRpb25cbiAgXHRkaXN0YW5jZTogZnVuY3Rpb24gKGxhdGxuZzEsIGxhdGxuZzIpIHtcbiAgXHRcdHZhciByYWQgPSBNYXRoLlBJIC8gMTgwLFxuICBcdFx0ICAgIGxhdDEgPSBsYXRsbmcxLmxhdCAqIHJhZCxcbiAgXHRcdCAgICBsYXQyID0gbGF0bG5nMi5sYXQgKiByYWQsXG4gIFx0XHQgICAgc2luRExhdCA9IE1hdGguc2luKChsYXRsbmcyLmxhdCAtIGxhdGxuZzEubGF0KSAqIHJhZCAvIDIpLFxuICBcdFx0ICAgIHNpbkRMb24gPSBNYXRoLnNpbigobGF0bG5nMi5sbmcgLSBsYXRsbmcxLmxuZykgKiByYWQgLyAyKSxcbiAgXHRcdCAgICBhID0gc2luRExhdCAqIHNpbkRMYXQgKyBNYXRoLmNvcyhsYXQxKSAqIE1hdGguY29zKGxhdDIpICogc2luRExvbiAqIHNpbkRMb24sXG4gIFx0XHQgICAgYyA9IDIgKiBNYXRoLmF0YW4yKE1hdGguc3FydChhKSwgTWF0aC5zcXJ0KDEgLSBhKSk7XG4gIFx0XHRyZXR1cm4gdGhpcy5SICogYztcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBQcm9qZWN0aW9uXHJcbiAgICogQHByb2plY3Rpb24gTC5Qcm9qZWN0aW9uLlNwaGVyaWNhbE1lcmNhdG9yXHJcbiAgICpcclxuICAgKiBTcGhlcmljYWwgTWVyY2F0b3IgcHJvamVjdGlvbiDigJQgdGhlIG1vc3QgY29tbW9uIHByb2plY3Rpb24gZm9yIG9ubGluZSBtYXBzLFxyXG4gICAqIHVzZWQgYnkgYWxtb3N0IGFsbCBmcmVlIGFuZCBjb21tZXJjaWFsIHRpbGUgcHJvdmlkZXJzLiBBc3N1bWVzIHRoYXQgRWFydGggaXNcclxuICAgKiBhIHNwaGVyZS4gVXNlZCBieSB0aGUgYEVQU0c6Mzg1N2AgQ1JTLlxyXG4gICAqL1xyXG5cclxuICB2YXIgZWFydGhSYWRpdXMgPSA2Mzc4MTM3O1xyXG5cclxuICB2YXIgU3BoZXJpY2FsTWVyY2F0b3IgPSB7XHJcblxyXG4gIFx0UjogZWFydGhSYWRpdXMsXHJcbiAgXHRNQVhfTEFUSVRVREU6IDg1LjA1MTEyODc3OTgsXHJcblxyXG4gIFx0cHJvamVjdDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR2YXIgZCA9IE1hdGguUEkgLyAxODAsXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLk1BWF9MQVRJVFVERSxcclxuICBcdFx0ICAgIGxhdCA9IE1hdGgubWF4KE1hdGgubWluKG1heCwgbGF0bG5nLmxhdCksIC1tYXgpLFxyXG4gIFx0XHQgICAgc2luID0gTWF0aC5zaW4obGF0ICogZCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KFxyXG4gIFx0XHRcdHRoaXMuUiAqIGxhdGxuZy5sbmcgKiBkLFxyXG4gIFx0XHRcdHRoaXMuUiAqIE1hdGgubG9nKCgxICsgc2luKSAvICgxIC0gc2luKSkgLyAyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dmFyIGQgPSAxODAgLyBNYXRoLlBJO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcoXHJcbiAgXHRcdFx0KDIgKiBNYXRoLmF0YW4oTWF0aC5leHAocG9pbnQueSAvIHRoaXMuUikpIC0gKE1hdGguUEkgLyAyKSkgKiBkLFxyXG4gIFx0XHRcdHBvaW50LnggKiBkIC8gdGhpcy5SKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ym91bmRzOiAoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgZCA9IGVhcnRoUmFkaXVzICogTWF0aC5QSTtcclxuICBcdFx0cmV0dXJuIG5ldyBCb3VuZHMoWy1kLCAtZF0sIFtkLCBkXSk7XHJcbiAgXHR9KSgpXHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBUcmFuc2Zvcm1hdGlvblxyXG4gICAqIEBha2EgTC5UcmFuc2Zvcm1hdGlvblxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhbiBhZmZpbmUgdHJhbnNmb3JtYXRpb246IGEgc2V0IG9mIGNvZWZmaWNpZW50cyBgYWAsIGBiYCwgYGNgLCBgZGBcclxuICAgKiBmb3IgdHJhbnNmb3JtaW5nIGEgcG9pbnQgb2YgYSBmb3JtIGAoeCwgeSlgIGludG8gYChhKnggKyBiLCBjKnkgKyBkKWAgYW5kIGRvaW5nXHJcbiAgICogdGhlIHJldmVyc2UuIFVzZWQgYnkgTGVhZmxldCBpbiBpdHMgcHJvamVjdGlvbnMgY29kZS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciB0cmFuc2Zvcm1hdGlvbiA9IEwudHJhbnNmb3JtYXRpb24oMiwgNSwgLTEsIDEwKSxcclxuICAgKiBcdHAgPSBMLnBvaW50KDEsIDIpLFxyXG4gICAqIFx0cDIgPSB0cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm0ocCksIC8vICBMLnBvaW50KDcsIDgpXHJcbiAgICogXHRwMyA9IHRyYW5zZm9ybWF0aW9uLnVudHJhbnNmb3JtKHAyKTsgLy8gIEwucG9pbnQoMSwgMilcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcblxyXG4gIC8vIGZhY3RvcnkgbmV3IEwuVHJhbnNmb3JtYXRpb24oYTogTnVtYmVyLCBiOiBOdW1iZXIsIGM6IE51bWJlciwgZDogTnVtYmVyKVxyXG4gIC8vIENyZWF0ZXMgYSBgVHJhbnNmb3JtYXRpb25gIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2VmZmljaWVudHMuXHJcbiAgZnVuY3Rpb24gVHJhbnNmb3JtYXRpb24oYSwgYiwgYywgZCkge1xyXG4gIFx0aWYgKGlzQXJyYXkoYSkpIHtcclxuICBcdFx0Ly8gdXNlIGFycmF5IHByb3BlcnRpZXNcclxuICBcdFx0dGhpcy5fYSA9IGFbMF07XHJcbiAgXHRcdHRoaXMuX2IgPSBhWzFdO1xyXG4gIFx0XHR0aGlzLl9jID0gYVsyXTtcclxuICBcdFx0dGhpcy5fZCA9IGFbM107XHJcbiAgXHRcdHJldHVybjtcclxuICBcdH1cclxuICBcdHRoaXMuX2EgPSBhO1xyXG4gIFx0dGhpcy5fYiA9IGI7XHJcbiAgXHR0aGlzLl9jID0gYztcclxuICBcdHRoaXMuX2QgPSBkO1xyXG4gIH1cclxuXHJcbiAgVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCB0cmFuc2Zvcm0ocG9pbnQ6IFBvaW50LCBzY2FsZT86IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgcG9pbnQsIG9wdGlvbmFsbHkgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gc2NhbGUuXHJcbiAgXHQvLyBPbmx5IGFjY2VwdHMgYWN0dWFsIGBMLlBvaW50YCBpbnN0YW5jZXMsIG5vdCBhcnJheXMuXHJcbiAgXHR0cmFuc2Zvcm06IGZ1bmN0aW9uIChwb2ludCwgc2NhbGUpIHsgLy8gKFBvaW50LCBOdW1iZXIpIC0+IFBvaW50XHJcbiAgXHRcdHJldHVybiB0aGlzLl90cmFuc2Zvcm0ocG9pbnQuY2xvbmUoKSwgc2NhbGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBkZXN0cnVjdGl2ZSB0cmFuc2Zvcm0gKGZhc3RlcilcclxuICBcdF90cmFuc2Zvcm06IGZ1bmN0aW9uIChwb2ludCwgc2NhbGUpIHtcclxuICBcdFx0c2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gIFx0XHRwb2ludC54ID0gc2NhbGUgKiAodGhpcy5fYSAqIHBvaW50LnggKyB0aGlzLl9iKTtcclxuICBcdFx0cG9pbnQueSA9IHNjYWxlICogKHRoaXMuX2MgKiBwb2ludC55ICsgdGhpcy5fZCk7XHJcbiAgXHRcdHJldHVybiBwb2ludDtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1bnRyYW5zZm9ybShwb2ludDogUG9pbnQsIHNjYWxlPzogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHJldmVyc2UgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGdpdmVuIHBvaW50LCBvcHRpb25hbGx5IGRpdmlkZWRcclxuICBcdC8vIGJ5IHRoZSBnaXZlbiBzY2FsZS4gT25seSBhY2NlcHRzIGFjdHVhbCBgTC5Qb2ludGAgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0dW50cmFuc2Zvcm06IGZ1bmN0aW9uIChwb2ludCwgc2NhbGUpIHtcclxuICBcdFx0c2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KFxyXG4gIFx0XHQgICAgICAgIChwb2ludC54IC8gc2NhbGUgLSB0aGlzLl9iKSAvIHRoaXMuX2EsXHJcbiAgXHRcdCAgICAgICAgKHBvaW50LnkgLyBzY2FsZSAtIHRoaXMuX2QpIC8gdGhpcy5fYyk7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gZmFjdG9yeSBMLnRyYW5zZm9ybWF0aW9uKGE6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcilcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC50cmFuc2Zvcm1hdGlvbihhOiBOdW1iZXIsIGI6IE51bWJlciwgYzogTnVtYmVyLCBkOiBOdW1iZXIpXHJcbiAgLy8gSW5zdGFudGlhdGVzIGEgVHJhbnNmb3JtYXRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIGNvZWZmaWNpZW50cy5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC50cmFuc2Zvcm1hdGlvbihjb2VmZmljaWVudHM6IEFycmF5KTogVHJhbnNmb3JtYXRpb25cclxuICAvLyBFeHBlY3RzIGFuIGNvZWZmaWNpZW50cyBhcnJheSBvZiB0aGUgZm9ybVxyXG4gIC8vIGBbYTogTnVtYmVyLCBiOiBOdW1iZXIsIGM6IE51bWJlciwgZDogTnVtYmVyXWAuXHJcblxyXG4gIGZ1bmN0aW9uIHRvVHJhbnNmb3JtYXRpb24oYSwgYiwgYywgZCkge1xyXG4gIFx0cmV0dXJuIG5ldyBUcmFuc2Zvcm1hdGlvbihhLCBiLCBjLCBkKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuRVBTRzM4NTdcclxuICAgKlxyXG4gICAqIFRoZSBtb3N0IGNvbW1vbiBDUlMgZm9yIG9ubGluZSBtYXBzLCB1c2VkIGJ5IGFsbW9zdCBhbGwgZnJlZSBhbmQgY29tbWVyY2lhbFxyXG4gICAqIHRpbGUgcHJvdmlkZXJzLiBVc2VzIFNwaGVyaWNhbCBNZXJjYXRvciBwcm9qZWN0aW9uLiBTZXQgaW4gYnkgZGVmYXVsdCBpblxyXG4gICAqIE1hcCdzIGBjcnNgIG9wdGlvbi5cclxuICAgKi9cclxuXHJcbiAgdmFyIEVQU0czODU3ID0gZXh0ZW5kKHt9LCBFYXJ0aCwge1xyXG4gIFx0Y29kZTogJ0VQU0c6Mzg1NycsXHJcbiAgXHRwcm9qZWN0aW9uOiBTcGhlcmljYWxNZXJjYXRvcixcclxuXHJcbiAgXHR0cmFuc2Zvcm1hdGlvbjogKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHNjYWxlID0gMC41IC8gKE1hdGguUEkgKiBTcGhlcmljYWxNZXJjYXRvci5SKTtcclxuICBcdFx0cmV0dXJuIHRvVHJhbnNmb3JtYXRpb24oc2NhbGUsIDAuNSwgLXNjYWxlLCAwLjUpO1xyXG4gIFx0fSgpKVxyXG4gIH0pO1xyXG5cclxuICB2YXIgRVBTRzkwMDkxMyA9IGV4dGVuZCh7fSwgRVBTRzM4NTcsIHtcclxuICBcdGNvZGU6ICdFUFNHOjkwMDkxMydcclxuICB9KTtcblxuICAvLyBAbmFtZXNwYWNlIFNWRzsgQHNlY3Rpb25cbiAgLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgaW5zdGFudGlhdGluZyBMLlNWRzpcblxuICAvLyBAZnVuY3Rpb24gY3JlYXRlKG5hbWU6IFN0cmluZyk6IFNWR0VsZW1lbnRcbiAgLy8gUmV0dXJucyBhIGluc3RhbmNlIG9mIFtTVkdFbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvU1ZHRWxlbWVudCksXG4gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsYXNzIG5hbWUgcGFzc2VkLiBGb3IgZXhhbXBsZSwgdXNpbmcgJ2xpbmUnIHdpbGwgcmV0dXJuXG4gIC8vIGFuIGluc3RhbmNlIG9mIFtTVkdMaW5lRWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1NWR0xpbmVFbGVtZW50KS5cbiAgZnVuY3Rpb24gc3ZnQ3JlYXRlKG5hbWUpIHtcbiAgXHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIG5hbWUpO1xuICB9XG5cbiAgLy8gQGZ1bmN0aW9uIHBvaW50c1RvUGF0aChyaW5nczogUG9pbnRbXSwgY2xvc2VkOiBCb29sZWFuKTogU3RyaW5nXG4gIC8vIEdlbmVyYXRlcyBhIFNWRyBwYXRoIHN0cmluZyBmb3IgbXVsdGlwbGUgcmluZ3MsIHdpdGggZWFjaCByaW5nIHR1cm5pbmdcbiAgLy8gaW50byBcIk0uLkwuLkwuLlwiIGluc3RydWN0aW9uc1xuICBmdW5jdGlvbiBwb2ludHNUb1BhdGgocmluZ3MsIGNsb3NlZCkge1xuICBcdHZhciBzdHIgPSAnJyxcbiAgXHRpLCBqLCBsZW4sIGxlbjIsIHBvaW50cywgcDtcblxuICBcdGZvciAoaSA9IDAsIGxlbiA9IHJpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRwb2ludHMgPSByaW5nc1tpXTtcblxuICBcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBvaW50cy5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgXHRcdFx0cCA9IHBvaW50c1tqXTtcbiAgXHRcdFx0c3RyICs9IChqID8gJ0wnIDogJ00nKSArIHAueCArICcgJyArIHAueTtcbiAgXHRcdH1cblxuICBcdFx0Ly8gY2xvc2VzIHRoZSByaW5nIGZvciBwb2x5Z29uczsgXCJ4XCIgaXMgVk1MIHN5bnRheFxuICBcdFx0c3RyICs9IGNsb3NlZCA/IChCcm93c2VyLnN2ZyA/ICd6JyA6ICd4JykgOiAnJztcbiAgXHR9XG5cbiAgXHQvLyBTVkcgY29tcGxhaW5zIGFib3V0IGVtcHR5IHBhdGggc3RyaW5nc1xuICBcdHJldHVybiBzdHIgfHwgJ00wIDAnO1xuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIEJyb3dzZXJcclxuICAgKiBAYWthIEwuQnJvd3NlclxyXG4gICAqXHJcbiAgICogQSBuYW1lc3BhY2Ugd2l0aCBzdGF0aWMgcHJvcGVydGllcyBmb3IgYnJvd3Nlci9mZWF0dXJlIGRldGVjdGlvbiB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIGlmIChMLkJyb3dzZXIuaWVsdDkpIHtcclxuICAgKiAgIGFsZXJ0KCdVcGdyYWRlIHlvdXIgYnJvd3NlciwgZHVkZSEnKTtcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGllOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGFsbCBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9ucyAobm90IEVkZ2UpLlxyXG4gIHZhciBpZSA9ICdBY3RpdmVYT2JqZWN0JyBpbiB3aW5kb3c7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBpZWx0OTogQm9vbGVhbjsgYHRydWVgIGZvciBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9ucyBsZXNzIHRoYW4gOS5cclxuICB2YXIgaWVsdDkgPSBpZSAmJiAhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcjtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGVkZ2U6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIEVkZ2Ugd2ViIGJyb3dzZXIuXHJcbiAgdmFyIGVkZ2UgPSAnbXNMYXVuY2hVcmknIGluIG5hdmlnYXRvciAmJiAhKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHdlYmtpdDogQm9vbGVhbjtcclxuICAvLyBgdHJ1ZWAgZm9yIHdlYmtpdC1iYXNlZCBicm93c2VycyBsaWtlIENocm9tZSBhbmQgU2FmYXJpIChpbmNsdWRpbmcgbW9iaWxlIHZlcnNpb25zKS5cclxuICB2YXIgd2Via2l0ID0gdXNlckFnZW50Q29udGFpbnMoJ3dlYmtpdCcpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgYW5kcm9pZDogQm9vbGVhblxyXG4gIC8vICoqRGVwcmVjYXRlZC4qKiBgdHJ1ZWAgZm9yIGFueSBicm93c2VyIHJ1bm5pbmcgb24gYW4gQW5kcm9pZCBwbGF0Zm9ybS5cclxuICB2YXIgYW5kcm9pZCA9IHVzZXJBZ2VudENvbnRhaW5zKCdhbmRyb2lkJyk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbmRyb2lkMjM6IEJvb2xlYW47ICoqRGVwcmVjYXRlZC4qKiBgdHJ1ZWAgZm9yIGJyb3dzZXJzIHJ1bm5pbmcgb24gQW5kcm9pZCAyIG9yIEFuZHJvaWQgMy5cclxuICB2YXIgYW5kcm9pZDIzID0gdXNlckFnZW50Q29udGFpbnMoJ2FuZHJvaWQgMicpIHx8IHVzZXJBZ2VudENvbnRhaW5zKCdhbmRyb2lkIDMnKTtcclxuXHJcbiAgLyogU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNzk2MTI2NiBmb3IgZGV0YWlscyBvbiBkZXRlY3Rpbmcgc3RvY2sgQW5kcm9pZCAqL1xyXG4gIHZhciB3ZWJraXRWZXIgPSBwYXJzZUludCgvV2ViS2l0XFwvKFswLTldKyl8JC8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KVsxXSwgMTApOyAvLyBhbHNvIG1hdGNoZXMgQXBwbGVXZWJLaXRcclxuICAvLyBAcHJvcGVydHkgYW5kcm9pZFN0b2NrOiBCb29sZWFuOyAqKkRlcHJlY2F0ZWQuKiogYHRydWVgIGZvciB0aGUgQW5kcm9pZCBzdG9jayBicm93c2VyIChpLmUuIG5vdCBDaHJvbWUpXHJcbiAgdmFyIGFuZHJvaWRTdG9jayA9IGFuZHJvaWQgJiYgdXNlckFnZW50Q29udGFpbnMoJ0dvb2dsZScpICYmIHdlYmtpdFZlciA8IDUzNyAmJiAhKCdBdWRpb05vZGUnIGluIHdpbmRvdyk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBvcGVyYTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgT3BlcmEgYnJvd3NlclxyXG4gIHZhciBvcGVyYSA9ICEhd2luZG93Lm9wZXJhO1xyXG5cclxuICAvLyBAcHJvcGVydHkgY2hyb21lOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHRoZSBDaHJvbWUgYnJvd3Nlci5cclxuICB2YXIgY2hyb21lID0gIWVkZ2UgJiYgdXNlckFnZW50Q29udGFpbnMoJ2Nocm9tZScpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgZ2Vja286IEJvb2xlYW47IGB0cnVlYCBmb3IgZ2Vja28tYmFzZWQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LlxyXG4gIHZhciBnZWNrbyA9IHVzZXJBZ2VudENvbnRhaW5zKCdnZWNrbycpICYmICF3ZWJraXQgJiYgIW9wZXJhICYmICFpZTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHNhZmFyaTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgU2FmYXJpIGJyb3dzZXIuXHJcbiAgdmFyIHNhZmFyaSA9ICFjaHJvbWUgJiYgdXNlckFnZW50Q29udGFpbnMoJ3NhZmFyaScpO1xyXG5cclxuICB2YXIgcGhhbnRvbSA9IHVzZXJBZ2VudENvbnRhaW5zKCdwaGFudG9tJyk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBvcGVyYTEyOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciB0aGUgT3BlcmEgYnJvd3NlciBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zICh2ZXJzaW9uIDEyIG9yIGxhdGVyKS5cclxuICB2YXIgb3BlcmExMiA9ICdPVHJhbnNpdGlvbicgaW4gc3R5bGU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3aW46IEJvb2xlYW47IGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBXaW5kb3dzIHBsYXRmb3JtXHJcbiAgdmFyIHdpbiA9IG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSA9PT0gMDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGllM2Q6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb25zIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGllM2QgPSBpZSAmJiAoJ3RyYW5zaXRpb24nIGluIHN0eWxlKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHdlYmtpdDNkOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHdlYmtpdC1iYXNlZCBicm93c2VycyBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciB3ZWJraXQzZCA9ICgnV2ViS2l0Q1NTTWF0cml4JyBpbiB3aW5kb3cpICYmICgnbTExJyBpbiBuZXcgd2luZG93LldlYktpdENTU01hdHJpeCgpKSAmJiAhYW5kcm9pZDIzO1xyXG5cclxuICAvLyBAcHJvcGVydHkgZ2Vja28zZDogQm9vbGVhbjsgYHRydWVgIGZvciBnZWNrby1iYXNlZCBicm93c2VycyBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciBnZWNrbzNkID0gJ01velBlcnNwZWN0aXZlJyBpbiBzdHlsZTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGFueTNkOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3Jtcy5cclxuICB2YXIgYW55M2QgPSAhd2luZG93LkxfRElTQUJMRV8zRCAmJiAoaWUzZCB8fCB3ZWJraXQzZCB8fCBnZWNrbzNkKSAmJiAhb3BlcmExMiAmJiAhcGhhbnRvbTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZTogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgcnVubmluZyBpbiBhIG1vYmlsZSBkZXZpY2UuXHJcbiAgdmFyIG1vYmlsZSA9IHR5cGVvZiBvcmllbnRhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgfHwgdXNlckFnZW50Q29udGFpbnMoJ21vYmlsZScpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbW9iaWxlV2Via2l0OiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGFsbCB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGVXZWJraXQgPSBtb2JpbGUgJiYgd2Via2l0O1xyXG5cclxuICAvLyBAcHJvcGVydHkgbW9iaWxlV2Via2l0M2Q6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFsbCB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgaW4gYSBtb2JpbGUgZGV2aWNlIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIG1vYmlsZVdlYmtpdDNkID0gbW9iaWxlICYmIHdlYmtpdDNkO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbXNQb2ludGVyOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBicm93c2VycyBpbXBsZW1lbnRpbmcgdGhlIE1pY3Jvc29mdCB0b3VjaCBldmVudHMgbW9kZWwgKG5vdGFibHkgSUUxMCkuXHJcbiAgdmFyIG1zUG9pbnRlciA9ICF3aW5kb3cuUG9pbnRlckV2ZW50ICYmIHdpbmRvdy5NU1BvaW50ZXJFdmVudDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHBvaW50ZXI6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFsbCBicm93c2VycyBzdXBwb3J0aW5nIFtwb2ludGVyIGV2ZW50c10oaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kbjQzMzI0NCUyOHY9dnMuODUlMjkuYXNweCkuXHJcbiAgdmFyIHBvaW50ZXIgPSAhISh3aW5kb3cuUG9pbnRlckV2ZW50IHx8IG1zUG9pbnRlcik7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB0b3VjaE5hdGl2ZTogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHN1cHBvcnRpbmcgW3RvdWNoIGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1RvdWNoX2V2ZW50cykuXHJcbiAgLy8gKipUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4qKiB0aGF0IHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBjb21wdXRlciB3aXRoXHJcbiAgLy8gYSB0b3VjaHNjcmVlbiwgaXQgb25seSBtZWFucyB0aGF0IHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YgdW5kZXJzdGFuZGluZ1xyXG4gIC8vIHRvdWNoIGV2ZW50cy5cclxuICB2YXIgdG91Y2hOYXRpdmUgPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgISF3aW5kb3cuVG91Y2hFdmVudDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHRvdWNoOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgc3VwcG9ydGluZyBlaXRoZXIgW3RvdWNoXSgjYnJvd3Nlci10b3VjaCkgb3IgW3BvaW50ZXJdKCNicm93c2VyLXBvaW50ZXIpIGV2ZW50cy5cclxuICAvLyBOb3RlOiBwb2ludGVyIGV2ZW50cyB3aWxsIGJlIHByZWZlcnJlZCAoaWYgYXZhaWxhYmxlKSwgYW5kIHByb2Nlc3NlZCBmb3IgYWxsIGB0b3VjaCpgIGxpc3RlbmVycy5cclxuICB2YXIgdG91Y2ggPSAhd2luZG93LkxfTk9fVE9VQ0ggJiYgKHRvdWNoTmF0aXZlIHx8IHBvaW50ZXIpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbW9iaWxlT3BlcmE6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXIgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGVPcGVyYSA9IG1vYmlsZSAmJiBvcGVyYTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZUdlY2tvOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBnZWNrby1iYXNlZCBicm93c2VycyBydW5uaW5nIGluIGEgbW9iaWxlIGRldmljZS5cclxuICB2YXIgbW9iaWxlR2Vja28gPSBtb2JpbGUgJiYgZ2Vja287XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSByZXRpbmE6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGJyb3dzZXJzIG9uIGEgaGlnaC1yZXNvbHV0aW9uIFwicmV0aW5hXCIgc2NyZWVuIG9yIG9uIGFueSBzY3JlZW4gd2hlbiBicm93c2VyJ3MgZGlzcGxheSB6b29tIGlzIG1vcmUgdGhhbiAxMDAlLlxyXG4gIHZhciByZXRpbmEgPSAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgKHdpbmRvdy5zY3JlZW4uZGV2aWNlWERQSSAvIHdpbmRvdy5zY3JlZW4ubG9naWNhbFhEUEkpKSA+IDE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBwYXNzaXZlRXZlbnRzOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgcGFzc2l2ZSBldmVudHMuXHJcbiAgdmFyIHBhc3NpdmVFdmVudHMgPSAoZnVuY3Rpb24gKCkge1xyXG4gIFx0dmFyIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IGZhbHNlO1xyXG4gIFx0dHJ5IHtcclxuICBcdFx0dmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xyXG4gIFx0XHRcdGdldDogZnVuY3Rpb24gKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGdldHRlci1yZXR1cm5cclxuICBcdFx0XHRcdHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IHRydWU7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9KTtcclxuICBcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0JywgZmFsc2VGbiwgb3B0cyk7XHJcbiAgXHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIGZhbHNlRm4sIG9wdHMpO1xyXG4gIFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHQvLyBFcnJvcnMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIHNpbmNlIHRoaXMgaXMgb25seSBhIGJyb3dzZXIgc3VwcG9ydCB0ZXN0LlxyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbjtcclxuICB9KCkpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgY2FudmFzOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9DYW52YXNfQVBJKS5cclxuICB2YXIgY2FudmFzJDEgPSAoZnVuY3Rpb24gKCkge1xyXG4gIFx0cmV0dXJuICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dDtcclxuICB9KCkpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgc3ZnOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgW1NWR10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHKS5cclxuICB2YXIgc3ZnJDEgPSAhIShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiYgc3ZnQ3JlYXRlKCdzdmcnKS5jcmVhdGVTVkdSZWN0KTtcclxuXHJcbiAgdmFyIGlubGluZVN2ZyA9ICEhc3ZnJDEgJiYgKGZ1bmN0aW9uICgpIHtcclxuICBcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBcdGRpdi5pbm5lckhUTUwgPSAnPHN2Zy8+JztcclxuICBcdHJldHVybiAoZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQubmFtZXNwYWNlVVJJKSA9PT0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcclxuICB9KSgpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgdm1sOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIFtWTUxdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZlY3Rvcl9NYXJrdXBfTGFuZ3VhZ2UpLlxyXG4gIHZhciB2bWwgPSAhc3ZnJDEgJiYgKGZ1bmN0aW9uICgpIHtcclxuICBcdHRyeSB7XHJcbiAgXHRcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBcdFx0ZGl2LmlubmVySFRNTCA9ICc8djpzaGFwZSBhZGo9XCIxXCIvPic7XHJcblxyXG4gIFx0XHR2YXIgc2hhcGUgPSBkaXYuZmlyc3RDaGlsZDtcclxuICBcdFx0c2hhcGUuc3R5bGUuYmVoYXZpb3IgPSAndXJsKCNkZWZhdWx0I1ZNTCknO1xyXG5cclxuICBcdFx0cmV0dXJuIHNoYXBlICYmICh0eXBlb2Ygc2hhcGUuYWRqID09PSAnb2JqZWN0Jyk7XHJcblxyXG4gIFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9XHJcbiAgfSgpKTtcclxuXHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtYWM6IEJvb2xlYW47IGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBNYWMgcGxhdGZvcm1cclxuICB2YXIgbWFjID0gbmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ01hYycpID09PSAwO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbWFjOiBCb29sZWFuOyBgdHJ1ZWAgd2hlbiB0aGUgYnJvd3NlciBpcyBydW5uaW5nIGluIGEgTGludXggcGxhdGZvcm1cclxuICB2YXIgbGludXggPSBuYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZignTGludXgnKSA9PT0gMDtcclxuXHJcbiAgZnVuY3Rpb24gdXNlckFnZW50Q29udGFpbnMoc3RyKSB7XHJcbiAgXHRyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc3RyKSA+PSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIHZhciBCcm93c2VyID0ge1xyXG4gIFx0aWU6IGllLFxyXG4gIFx0aWVsdDk6IGllbHQ5LFxyXG4gIFx0ZWRnZTogZWRnZSxcclxuICBcdHdlYmtpdDogd2Via2l0LFxyXG4gIFx0YW5kcm9pZDogYW5kcm9pZCxcclxuICBcdGFuZHJvaWQyMzogYW5kcm9pZDIzLFxyXG4gIFx0YW5kcm9pZFN0b2NrOiBhbmRyb2lkU3RvY2ssXHJcbiAgXHRvcGVyYTogb3BlcmEsXHJcbiAgXHRjaHJvbWU6IGNocm9tZSxcclxuICBcdGdlY2tvOiBnZWNrbyxcclxuICBcdHNhZmFyaTogc2FmYXJpLFxyXG4gIFx0cGhhbnRvbTogcGhhbnRvbSxcclxuICBcdG9wZXJhMTI6IG9wZXJhMTIsXHJcbiAgXHR3aW46IHdpbixcclxuICBcdGllM2Q6IGllM2QsXHJcbiAgXHR3ZWJraXQzZDogd2Via2l0M2QsXHJcbiAgXHRnZWNrbzNkOiBnZWNrbzNkLFxyXG4gIFx0YW55M2Q6IGFueTNkLFxyXG4gIFx0bW9iaWxlOiBtb2JpbGUsXHJcbiAgXHRtb2JpbGVXZWJraXQ6IG1vYmlsZVdlYmtpdCxcclxuICBcdG1vYmlsZVdlYmtpdDNkOiBtb2JpbGVXZWJraXQzZCxcclxuICBcdG1zUG9pbnRlcjogbXNQb2ludGVyLFxyXG4gIFx0cG9pbnRlcjogcG9pbnRlcixcclxuICBcdHRvdWNoOiB0b3VjaCxcclxuICBcdHRvdWNoTmF0aXZlOiB0b3VjaE5hdGl2ZSxcclxuICBcdG1vYmlsZU9wZXJhOiBtb2JpbGVPcGVyYSxcclxuICBcdG1vYmlsZUdlY2tvOiBtb2JpbGVHZWNrbyxcclxuICBcdHJldGluYTogcmV0aW5hLFxyXG4gIFx0cGFzc2l2ZUV2ZW50czogcGFzc2l2ZUV2ZW50cyxcclxuICBcdGNhbnZhczogY2FudmFzJDEsXHJcbiAgXHRzdmc6IHN2ZyQxLFxyXG4gIFx0dm1sOiB2bWwsXHJcbiAgXHRpbmxpbmVTdmc6IGlubGluZVN2ZyxcclxuICBcdG1hYzogbWFjLFxyXG4gIFx0bGludXg6IGxpbnV4XHJcbiAgfTtcblxuICAvKlxuICAgKiBFeHRlbmRzIEwuRG9tRXZlbnQgdG8gcHJvdmlkZSB0b3VjaCBzdXBwb3J0IGZvciBJbnRlcm5ldCBFeHBsb3JlciBhbmQgV2luZG93cy1iYXNlZCBkZXZpY2VzLlxuICAgKi9cblxuICB2YXIgUE9JTlRFUl9ET1dOID0gICBCcm93c2VyLm1zUG9pbnRlciA/ICdNU1BvaW50ZXJEb3duJyAgIDogJ3BvaW50ZXJkb3duJztcbiAgdmFyIFBPSU5URVJfTU9WRSA9ICAgQnJvd3Nlci5tc1BvaW50ZXIgPyAnTVNQb2ludGVyTW92ZScgICA6ICdwb2ludGVybW92ZSc7XG4gIHZhciBQT0lOVEVSX1VQID0gICAgIEJyb3dzZXIubXNQb2ludGVyID8gJ01TUG9pbnRlclVwJyAgICAgOiAncG9pbnRlcnVwJztcbiAgdmFyIFBPSU5URVJfQ0FOQ0VMID0gQnJvd3Nlci5tc1BvaW50ZXIgPyAnTVNQb2ludGVyQ2FuY2VsJyA6ICdwb2ludGVyY2FuY2VsJztcbiAgdmFyIHBFdmVudCA9IHtcbiAgXHR0b3VjaHN0YXJ0ICA6IFBPSU5URVJfRE9XTixcbiAgXHR0b3VjaG1vdmUgICA6IFBPSU5URVJfTU9WRSxcbiAgXHR0b3VjaGVuZCAgICA6IFBPSU5URVJfVVAsXG4gIFx0dG91Y2hjYW5jZWwgOiBQT0lOVEVSX0NBTkNFTFxuICB9O1xuICB2YXIgaGFuZGxlID0ge1xuICBcdHRvdWNoc3RhcnQgIDogX29uUG9pbnRlclN0YXJ0LFxuICBcdHRvdWNobW92ZSAgIDogX2hhbmRsZVBvaW50ZXIsXG4gIFx0dG91Y2hlbmQgICAgOiBfaGFuZGxlUG9pbnRlcixcbiAgXHR0b3VjaGNhbmNlbCA6IF9oYW5kbGVQb2ludGVyXG4gIH07XG4gIHZhciBfcG9pbnRlcnMgPSB7fTtcbiAgdmFyIF9wb2ludGVyRG9jTGlzdGVuZXIgPSBmYWxzZTtcblxuICAvLyBQcm92aWRlcyBhIHRvdWNoIGV2ZW50cyB3cmFwcGVyIGZvciAobXMpcG9pbnRlciBldmVudHMuXG4gIC8vIHJlZiBodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMjg5MFxuXG4gIGZ1bmN0aW9uIGFkZFBvaW50ZXJMaXN0ZW5lcihvYmosIHR5cGUsIGhhbmRsZXIpIHtcbiAgXHRpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gIFx0XHRfYWRkUG9pbnRlckRvY0xpc3RlbmVyKCk7XG4gIFx0fVxuICBcdGlmICghaGFuZGxlW3R5cGVdKSB7XG4gIFx0XHRjb25zb2xlLndhcm4oJ3dyb25nIGV2ZW50IHNwZWNpZmllZDonLCB0eXBlKTtcbiAgXHRcdHJldHVybiBmYWxzZUZuO1xuICBcdH1cbiAgXHRoYW5kbGVyID0gaGFuZGxlW3R5cGVdLmJpbmQodGhpcywgaGFuZGxlcik7XG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIocEV2ZW50W3R5cGVdLCBoYW5kbGVyLCBmYWxzZSk7XG4gIFx0cmV0dXJuIGhhbmRsZXI7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyKSB7XG4gIFx0aWYgKCFwRXZlbnRbdHlwZV0pIHtcbiAgXHRcdGNvbnNvbGUud2Fybignd3JvbmcgZXZlbnQgc3BlY2lmaWVkOicsIHR5cGUpO1xuICBcdFx0cmV0dXJuO1xuICBcdH1cbiAgXHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihwRXZlbnRbdHlwZV0sIGhhbmRsZXIsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nbG9iYWxQb2ludGVyRG93bihlKSB7XG4gIFx0X3BvaW50ZXJzW2UucG9pbnRlcklkXSA9IGU7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlck1vdmUoZSkge1xuICBcdGlmIChfcG9pbnRlcnNbZS5wb2ludGVySWRdKSB7XG4gIFx0XHRfcG9pbnRlcnNbZS5wb2ludGVySWRdID0gZTtcbiAgXHR9XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlclVwKGUpIHtcbiAgXHRkZWxldGUgX3BvaW50ZXJzW2UucG9pbnRlcklkXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hZGRQb2ludGVyRG9jTGlzdGVuZXIoKSB7XG4gIFx0Ly8gbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoYXQgcG9pbnRlcnMgYW5kIGhvdyBtYW55IGFyZSBhY3RpdmUgdG8gcHJvdmlkZSBlLnRvdWNoZXMgZW11bGF0aW9uXG4gIFx0aWYgKCFfcG9pbnRlckRvY0xpc3RlbmVyKSB7XG4gIFx0XHQvLyB3ZSBsaXN0ZW4gZG9jdW1lbnQgYXMgYW55IGRyYWdzIHRoYXQgZW5kIGJ5IG1vdmluZyB0aGUgdG91Y2ggb2ZmIHRoZSBzY3JlZW4gZ2V0IGZpcmVkIHRoZXJlXG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfRE9XTiwgX2dsb2JhbFBvaW50ZXJEb3duLCB0cnVlKTtcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9NT1ZFLCBfZ2xvYmFsUG9pbnRlck1vdmUsIHRydWUpO1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX1VQLCBfZ2xvYmFsUG9pbnRlclVwLCB0cnVlKTtcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9DQU5DRUwsIF9nbG9iYWxQb2ludGVyVXAsIHRydWUpO1xuXG4gIFx0XHRfcG9pbnRlckRvY0xpc3RlbmVyID0gdHJ1ZTtcbiAgXHR9XG4gIH1cblxuICBmdW5jdGlvbiBfaGFuZGxlUG9pbnRlcihoYW5kbGVyLCBlKSB7XG4gIFx0aWYgKGUucG9pbnRlclR5cGUgPT09IChlLk1TUE9JTlRFUl9UWVBFX01PVVNFIHx8ICdtb3VzZScpKSB7IHJldHVybjsgfVxuXG4gIFx0ZS50b3VjaGVzID0gW107XG4gIFx0Zm9yICh2YXIgaSBpbiBfcG9pbnRlcnMpIHtcbiAgXHRcdGUudG91Y2hlcy5wdXNoKF9wb2ludGVyc1tpXSk7XG4gIFx0fVxuICBcdGUuY2hhbmdlZFRvdWNoZXMgPSBbZV07XG5cbiAgXHRoYW5kbGVyKGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gX29uUG9pbnRlclN0YXJ0KGhhbmRsZXIsIGUpIHtcbiAgXHQvLyBJRTEwIHNwZWNpZmljOiBNc1RvdWNoIG5lZWRzIHByZXZlbnREZWZhdWx0LiBTZWUgIzIwMDBcbiAgXHRpZiAoZS5NU1BPSU5URVJfVFlQRV9UT1VDSCAmJiBlLnBvaW50ZXJUeXBlID09PSBlLk1TUE9JTlRFUl9UWVBFX1RPVUNIKSB7XG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHR9XG4gIFx0X2hhbmRsZVBvaW50ZXIoaGFuZGxlciwgZSk7XG4gIH1cblxuICAvKlxyXG4gICAqIEV4dGVuZHMgdGhlIGV2ZW50IGhhbmRsaW5nIGNvZGUgd2l0aCBkb3VibGUgdGFwIHN1cHBvcnQgZm9yIG1vYmlsZSBicm93c2Vycy5cclxuICAgKlxyXG4gICAqIE5vdGU6IGN1cnJlbnRseSBtb3N0IGJyb3dzZXJzIGZpcmUgbmF0aXZlIGRibGNsaWNrLCB3aXRoIG9ubHkgYSBmZXcgZXhjZXB0aW9uc1xyXG4gICAqIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL0xlYWZsZXQvTGVhZmxldC9pc3N1ZXMvNzAxMiNpc3N1ZWNvbW1lbnQtNTk1MDg3Mzg2KVxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBtYWtlRGJsY2xpY2soZXZlbnQpIHtcclxuICBcdC8vIGluIG1vZGVybiBicm93c2VycyBgdHlwZWAgY2Fubm90IGJlIGp1c3Qgb3ZlcnJpZGRlbjpcclxuICBcdC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9HZXR0ZXJfb25seVxyXG4gIFx0dmFyIG5ld0V2ZW50ID0ge30sXHJcbiAgXHQgICAgcHJvcCwgaTtcclxuICBcdGZvciAoaSBpbiBldmVudCkge1xyXG4gIFx0XHRwcm9wID0gZXZlbnRbaV07XHJcbiAgXHRcdG5ld0V2ZW50W2ldID0gcHJvcCAmJiBwcm9wLmJpbmQgPyBwcm9wLmJpbmQoZXZlbnQpIDogcHJvcDtcclxuICBcdH1cclxuICBcdGV2ZW50ID0gbmV3RXZlbnQ7XHJcbiAgXHRuZXdFdmVudC50eXBlID0gJ2RibGNsaWNrJztcclxuICBcdG5ld0V2ZW50LmRldGFpbCA9IDI7XHJcbiAgXHRuZXdFdmVudC5pc1RydXN0ZWQgPSBmYWxzZTtcclxuICBcdG5ld0V2ZW50Ll9zaW11bGF0ZWQgPSB0cnVlOyAvLyBmb3IgZGVidWcgcHVycG9zZXNcclxuICBcdHJldHVybiBuZXdFdmVudDtcclxuICB9XHJcblxyXG4gIHZhciBkZWxheSA9IDIwMDtcclxuICBmdW5jdGlvbiBhZGREb3VibGVUYXBMaXN0ZW5lcihvYmosIGhhbmRsZXIpIHtcclxuICBcdC8vIE1vc3QgYnJvd3NlcnMgaGFuZGxlIGRvdWJsZSB0YXAgbmF0aXZlbHlcclxuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIGhhbmRsZXIpO1xyXG5cclxuICBcdC8vIE9uIHNvbWUgcGxhdGZvcm1zIHRoZSBicm93c2VyIGRvZXNuJ3QgZmlyZSBuYXRpdmUgZGJsY2xpY2tzIGZvciB0b3VjaCBldmVudHMuXHJcbiAgXHQvLyBJdCBzZWVtcyB0aGF0IGluIGFsbCBzdWNoIGNhc2VzIGBkZXRhaWxgIHByb3BlcnR5IG9mIGBjbGlja2AgZXZlbnQgaXMgYWx3YXlzIGAxYC5cclxuICBcdC8vIFNvIGhlcmUgd2UgcmVseSBvbiB0aGF0IGZhY3QgdG8gYXZvaWQgZXhjZXNzaXZlICdkYmxjbGljaycgc2ltdWxhdGlvbiB3aGVuIG5vdCBuZWVkZWQuXHJcbiAgXHR2YXIgbGFzdCA9IDAsXHJcbiAgXHQgICAgZGV0YWlsO1xyXG4gIFx0ZnVuY3Rpb24gc2ltRGJsY2xpY2soZSkge1xyXG4gIFx0XHRpZiAoZS5kZXRhaWwgIT09IDEpIHtcclxuICBcdFx0XHRkZXRhaWwgPSBlLmRldGFpbDsgLy8ga2VlcCBpbiBzeW5jIHRvIGF2b2lkIGZhbHNlIGRibGNsaWNrIGluIHNvbWUgY2FzZXNcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnIHx8XHJcbiAgXHRcdFx0KGUuc291cmNlQ2FwYWJpbGl0aWVzICYmICFlLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSkge1xyXG5cclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIFdoZW4gY2xpY2tpbmcgb24gYW4gPGlucHV0PiwgdGhlIGJyb3dzZXIgZ2VuZXJhdGVzIGEgY2xpY2sgb24gaXRzXHJcbiAgXHRcdC8vIDxsYWJlbD4gKGFuZCB2aWNlIHZlcnNhKSB0cmlnZ2VyaW5nIHR3byBjbGlja3MgaW4gcXVpY2sgc3VjY2Vzc2lvbi5cclxuICBcdFx0Ly8gVGhpcyBpZ25vcmVzIGNsaWNrcyBvbiBlbGVtZW50cyB3aGljaCBhcmUgYSBsYWJlbCB3aXRoIGEgJ2ZvcidcclxuICBcdFx0Ly8gYXR0cmlidXRlIChvciBjaGlsZHJlbiBvZiBzdWNoIGEgbGFiZWwpLCBidXQgbm90IGNoaWxkcmVuIG9mXHJcbiAgXHRcdC8vIGEgPGlucHV0Pi5cclxuICBcdFx0dmFyIHBhdGggPSBnZXRQcm9wYWdhdGlvblBhdGgoZSk7XHJcbiAgXHRcdGlmIChwYXRoLnNvbWUoZnVuY3Rpb24gKGVsKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCAmJiBlbC5hdHRyaWJ1dGVzLmZvcjtcclxuICBcdFx0fSkgJiZcclxuICBcdFx0XHQhcGF0aC5zb21lKGZ1bmN0aW9uIChlbCkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIChcclxuICBcdFx0XHRcdFx0ZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XHJcbiAgXHRcdFx0XHRcdGVsIGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnRcclxuICBcdFx0XHRcdCk7XHJcbiAgXHRcdFx0fSlcclxuICBcdFx0KSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbm93ID0gRGF0ZS5ub3coKTtcclxuICBcdFx0aWYgKG5vdyAtIGxhc3QgPD0gZGVsYXkpIHtcclxuICBcdFx0XHRkZXRhaWwrKztcclxuICBcdFx0XHRpZiAoZGV0YWlsID09PSAyKSB7XHJcbiAgXHRcdFx0XHRoYW5kbGVyKG1ha2VEYmxjbGljayhlKSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGRldGFpbCA9IDE7XHJcbiAgXHRcdH1cclxuICBcdFx0bGFzdCA9IG5vdztcclxuICBcdH1cclxuXHJcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzaW1EYmxjbGljayk7XHJcblxyXG4gIFx0cmV0dXJuIHtcclxuICBcdFx0ZGJsY2xpY2s6IGhhbmRsZXIsXHJcbiAgXHRcdHNpbURibGNsaWNrOiBzaW1EYmxjbGlja1xyXG4gIFx0fTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZURvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlcnMpIHtcclxuICBcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIGhhbmRsZXJzLmRibGNsaWNrKTtcclxuICBcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXJzLnNpbURibGNsaWNrKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIERvbVV0aWxcclxuICAgKlxyXG4gICAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCB0aGUgW0RPTV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0RvY3VtZW50X09iamVjdF9Nb2RlbClcclxuICAgKiB0cmVlLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseS5cclxuICAgKlxyXG4gICAqIE1vc3QgZnVuY3Rpb25zIGV4cGVjdGluZyBvciByZXR1cm5pbmcgYSBgSFRNTEVsZW1lbnRgIGFsc28gd29yayBmb3JcclxuICAgKiBTVkcgZWxlbWVudHMuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBjbGFzc2VzIHJlZmVyIHRvIENTUyBjbGFzc2VzXHJcbiAgICogaW4gSFRNTCBhbmQgU1ZHIGNsYXNzZXMgaW4gU1ZHLlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLy8gQHByb3BlcnR5IFRSQU5TRk9STTogU3RyaW5nXHJcbiAgLy8gVmVuZG9yLXByZWZpeGVkIHRyYW5zZm9ybSBzdHlsZSBuYW1lIChlLmcuIGAnd2Via2l0VHJhbnNmb3JtJ2AgZm9yIFdlYktpdCkuXHJcbiAgdmFyIFRSQU5TRk9STSA9IHRlc3RQcm9wKFxyXG4gIFx0Wyd0cmFuc2Zvcm0nLCAnd2Via2l0VHJhbnNmb3JtJywgJ09UcmFuc2Zvcm0nLCAnTW96VHJhbnNmb3JtJywgJ21zVHJhbnNmb3JtJ10pO1xyXG5cclxuICAvLyB3ZWJraXRUcmFuc2l0aW9uIGNvbWVzIGZpcnN0IGJlY2F1c2Ugc29tZSBicm93c2VyIHZlcnNpb25zIHRoYXQgZHJvcCB2ZW5kb3IgcHJlZml4IGRvbid0IGRvXHJcbiAgLy8gdGhlIHNhbWUgZm9yIHRoZSB0cmFuc2l0aW9uZW5kIGV2ZW50LCBpbiBwYXJ0aWN1bGFyIHRoZSBBbmRyb2lkIDQuMSBzdG9jayBicm93c2VyXHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBUUkFOU0lUSU9OOiBTdHJpbmdcclxuICAvLyBWZW5kb3ItcHJlZml4ZWQgdHJhbnNpdGlvbiBzdHlsZSBuYW1lLlxyXG4gIHZhciBUUkFOU0lUSU9OID0gdGVzdFByb3AoXHJcbiAgXHRbJ3dlYmtpdFRyYW5zaXRpb24nLCAndHJhbnNpdGlvbicsICdPVHJhbnNpdGlvbicsICdNb3pUcmFuc2l0aW9uJywgJ21zVHJhbnNpdGlvbiddKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IFRSQU5TSVRJT05fRU5EOiBTdHJpbmdcclxuICAvLyBWZW5kb3ItcHJlZml4ZWQgdHJhbnNpdGlvbmVuZCBldmVudCBuYW1lLlxyXG4gIHZhciBUUkFOU0lUSU9OX0VORCA9XHJcbiAgXHRUUkFOU0lUSU9OID09PSAnd2Via2l0VHJhbnNpdGlvbicgfHwgVFJBTlNJVElPTiA9PT0gJ09UcmFuc2l0aW9uJyA/IFRSQU5TSVRJT04gKyAnRW5kJyA6ICd0cmFuc2l0aW9uZW5kJztcclxuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXQoaWQ6IFN0cmluZ3xIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgLy8gUmV0dXJucyBhbiBlbGVtZW50IGdpdmVuIGl0cyBET00gaWQsIG9yIHJldHVybnMgdGhlIGVsZW1lbnQgaXRzZWxmXHJcbiAgLy8gaWYgaXQgd2FzIHBhc3NlZCBkaXJlY3RseS5cclxuICBmdW5jdGlvbiBnZXQoaWQpIHtcclxuICBcdHJldHVybiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIDogaWQ7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U3R5bGUoZWw6IEhUTUxFbGVtZW50LCBzdHlsZUF0dHJpYjogU3RyaW5nKTogU3RyaW5nXHJcbiAgLy8gUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgY2VydGFpbiBzdHlsZSBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCxcclxuICAvLyBpbmNsdWRpbmcgY29tcHV0ZWQgdmFsdWVzIG9yIHZhbHVlcyBzZXQgdGhyb3VnaCBDU1MuXHJcbiAgZnVuY3Rpb24gZ2V0U3R5bGUoZWwsIHN0eWxlKSB7XHJcbiAgXHR2YXIgdmFsdWUgPSBlbC5zdHlsZVtzdHlsZV0gfHwgKGVsLmN1cnJlbnRTdHlsZSAmJiBlbC5jdXJyZW50U3R5bGVbc3R5bGVdKTtcclxuXHJcbiAgXHRpZiAoKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJ2F1dG8nKSAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldykge1xyXG4gIFx0XHR2YXIgY3NzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCk7XHJcbiAgXHRcdHZhbHVlID0gY3NzID8gY3NzW3N0eWxlXSA6IG51bGw7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gdmFsdWUgPT09ICdhdXRvJyA/IG51bGwgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjcmVhdGUodGFnTmFtZTogU3RyaW5nLCBjbGFzc05hbWU/OiBTdHJpbmcsIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICAvLyBDcmVhdGVzIGFuIEhUTUwgZWxlbWVudCB3aXRoIGB0YWdOYW1lYCwgc2V0cyBpdHMgY2xhc3MgdG8gYGNsYXNzTmFtZWAsIGFuZCBvcHRpb25hbGx5IGFwcGVuZHMgaXQgdG8gYGNvbnRhaW5lcmAgZWxlbWVudC5cclxuICBmdW5jdGlvbiBjcmVhdGUkMSh0YWdOYW1lLCBjbGFzc05hbWUsIGNvbnRhaW5lcikge1xyXG4gIFx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcclxuICBcdGVsLmNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCAnJztcclxuXHJcbiAgXHRpZiAoY29udGFpbmVyKSB7XHJcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gZWw7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVtb3ZlKGVsOiBIVE1MRWxlbWVudClcclxuICAvLyBSZW1vdmVzIGBlbGAgZnJvbSBpdHMgcGFyZW50IGVsZW1lbnRcclxuICBmdW5jdGlvbiByZW1vdmUoZWwpIHtcclxuICBcdHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xyXG4gIFx0aWYgKHBhcmVudCkge1xyXG4gIFx0XHRwYXJlbnQucmVtb3ZlQ2hpbGQoZWwpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGVtcHR5KGVsOiBIVE1MRWxlbWVudClcclxuICAvLyBSZW1vdmVzIGFsbCBvZiBgZWxgJ3MgY2hpbGRyZW4gZWxlbWVudHMgZnJvbSBgZWxgXHJcbiAgZnVuY3Rpb24gZW1wdHkoZWwpIHtcclxuICBcdHdoaWxlIChlbC5maXJzdENoaWxkKSB7XHJcbiAgXHRcdGVsLnJlbW92ZUNoaWxkKGVsLmZpcnN0Q2hpbGQpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRvRnJvbnQoZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIE1ha2VzIGBlbGAgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudCwgc28gaXQgcmVuZGVycyBpbiBmcm9udCBvZiB0aGUgb3RoZXIgY2hpbGRyZW4uXHJcbiAgZnVuY3Rpb24gdG9Gcm9udChlbCkge1xyXG4gIFx0dmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgXHRpZiAocGFyZW50ICYmIHBhcmVudC5sYXN0Q2hpbGQgIT09IGVsKSB7XHJcbiAgXHRcdHBhcmVudC5hcHBlbmRDaGlsZChlbCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gdG9CYWNrKGVsOiBIVE1MRWxlbWVudClcclxuICAvLyBNYWtlcyBgZWxgIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50LCBzbyBpdCByZW5kZXJzIGJlaGluZCB0aGUgb3RoZXIgY2hpbGRyZW4uXHJcbiAgZnVuY3Rpb24gdG9CYWNrKGVsKSB7XHJcbiAgXHR2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcclxuICBcdGlmIChwYXJlbnQgJiYgcGFyZW50LmZpcnN0Q2hpbGQgIT09IGVsKSB7XHJcbiAgXHRcdHBhcmVudC5pbnNlcnRCZWZvcmUoZWwsIHBhcmVudC5maXJzdENoaWxkKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBoYXNDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZyk6IEJvb2xlYW5cclxuICAvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZWxlbWVudCdzIGNsYXNzIGF0dHJpYnV0ZSBjb250YWlucyBgbmFtZWAuXHJcbiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIG5hbWUpIHtcclxuICBcdGlmIChlbC5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRyZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKG5hbWUpO1xyXG4gIFx0fVxyXG4gIFx0dmFyIGNsYXNzTmFtZSA9IGdldENsYXNzKGVsKTtcclxuICBcdHJldHVybiBjbGFzc05hbWUubGVuZ3RoID4gMCAmJiBuZXcgUmVnRXhwKCcoXnxcXFxccyknICsgbmFtZSArICcoXFxcXHN8JCknKS50ZXN0KGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gYWRkQ2xhc3MoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBTdHJpbmcpXHJcbiAgLy8gQWRkcyBgbmFtZWAgdG8gdGhlIGVsZW1lbnQncyBjbGFzcyBhdHRyaWJ1dGUuXHJcbiAgZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIG5hbWUpIHtcclxuICBcdGlmIChlbC5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHR2YXIgY2xhc3NlcyA9IHNwbGl0V29yZHMobmFtZSk7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBjbGFzc2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0ZWwuY2xhc3NMaXN0LmFkZChjbGFzc2VzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIGlmICghaGFzQ2xhc3MoZWwsIG5hbWUpKSB7XHJcbiAgXHRcdHZhciBjbGFzc05hbWUgPSBnZXRDbGFzcyhlbCk7XHJcbiAgXHRcdHNldENsYXNzKGVsLCAoY2xhc3NOYW1lID8gY2xhc3NOYW1lICsgJyAnIDogJycpICsgbmFtZSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBTdHJpbmcpXHJcbiAgLy8gUmVtb3ZlcyBgbmFtZWAgZnJvbSB0aGUgZWxlbWVudCdzIGNsYXNzIGF0dHJpYnV0ZS5cclxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdGVsLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRzZXRDbGFzcyhlbCwgdHJpbSgoJyAnICsgZ2V0Q2xhc3MoZWwpICsgJyAnKS5yZXBsYWNlKCcgJyArIG5hbWUgKyAnICcsICcgJykpKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzZXRDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZylcclxuICAvLyBTZXRzIHRoZSBlbGVtZW50J3MgY2xhc3MuXHJcbiAgZnVuY3Rpb24gc2V0Q2xhc3MoZWwsIG5hbWUpIHtcclxuICBcdGlmIChlbC5jbGFzc05hbWUuYmFzZVZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdGVsLmNsYXNzTmFtZSA9IG5hbWU7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHQvLyBpbiBjYXNlIG9mIFNWRyBlbGVtZW50XHJcbiAgXHRcdGVsLmNsYXNzTmFtZS5iYXNlVmFsID0gbmFtZTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRDbGFzcyhlbDogSFRNTEVsZW1lbnQpOiBTdHJpbmdcclxuICAvLyBSZXR1cm5zIHRoZSBlbGVtZW50J3MgY2xhc3MuXHJcbiAgZnVuY3Rpb24gZ2V0Q2xhc3MoZWwpIHtcclxuICBcdC8vIENoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGFuIFNWR0VsZW1lbnRJbnN0YW5jZSBhbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudCBpbnN0ZWFkXHJcbiAgXHQvLyAoUmVxdWlyZWQgZm9yIGxpbmtlZCBTVkcgZWxlbWVudHMgaW4gSUUxMS4pXHJcbiAgXHRpZiAoZWwuY29ycmVzcG9uZGluZ0VsZW1lbnQpIHtcclxuICBcdFx0ZWwgPSBlbC5jb3JyZXNwb25kaW5nRWxlbWVudDtcclxuICBcdH1cclxuICBcdHJldHVybiBlbC5jbGFzc05hbWUuYmFzZVZhbCA9PT0gdW5kZWZpbmVkID8gZWwuY2xhc3NOYW1lIDogZWwuY2xhc3NOYW1lLmJhc2VWYWw7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0T3BhY2l0eShlbDogSFRNTEVsZW1lbnQsIG9wYWNpdHk6IE51bWJlcilcclxuICAvLyBTZXQgdGhlIG9wYWNpdHkgb2YgYW4gZWxlbWVudCAoaW5jbHVkaW5nIG9sZCBJRSBzdXBwb3J0KS5cclxuICAvLyBgb3BhY2l0eWAgbXVzdCBiZSBhIG51bWJlciBmcm9tIGAwYCB0byBgMWAuXHJcbiAgZnVuY3Rpb24gc2V0T3BhY2l0eShlbCwgdmFsdWUpIHtcclxuICBcdGlmICgnb3BhY2l0eScgaW4gZWwuc3R5bGUpIHtcclxuICBcdFx0ZWwuc3R5bGUub3BhY2l0eSA9IHZhbHVlO1xyXG4gIFx0fSBlbHNlIGlmICgnZmlsdGVyJyBpbiBlbC5zdHlsZSkge1xyXG4gIFx0XHRfc2V0T3BhY2l0eUlFKGVsLCB2YWx1ZSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfc2V0T3BhY2l0eUlFKGVsLCB2YWx1ZSkge1xyXG4gIFx0dmFyIGZpbHRlciA9IGZhbHNlLFxyXG4gIFx0ICAgIGZpbHRlck5hbWUgPSAnRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEnO1xyXG5cclxuICBcdC8vIGZpbHRlcnMgY29sbGVjdGlvbiB0aHJvd3MgYW4gZXJyb3IgaWYgd2UgdHJ5IHRvIHJldHJpZXZlIGEgZmlsdGVyIHRoYXQgZG9lc24ndCBleGlzdFxyXG4gIFx0dHJ5IHtcclxuICBcdFx0ZmlsdGVyID0gZWwuZmlsdGVycy5pdGVtKGZpbHRlck5hbWUpO1xyXG4gIFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHQvLyBkb24ndCBzZXQgb3BhY2l0eSB0byAxIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBzZXQgYW4gb3BhY2l0eSxcclxuICBcdFx0Ly8gaXQgaXNuJ3QgbmVlZGVkIGFuZCBicmVha3MgdHJhbnNwYXJlbnQgcG5ncy5cclxuICBcdFx0aWYgKHZhbHVlID09PSAxKSB7IHJldHVybjsgfVxyXG4gIFx0fVxyXG5cclxuICBcdHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCk7XHJcblxyXG4gIFx0aWYgKGZpbHRlcikge1xyXG4gIFx0XHRmaWx0ZXIuRW5hYmxlZCA9ICh2YWx1ZSAhPT0gMTAwKTtcclxuICBcdFx0ZmlsdGVyLk9wYWNpdHkgPSB2YWx1ZTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGVsLnN0eWxlLmZpbHRlciArPSAnIHByb2dpZDonICsgZmlsdGVyTmFtZSArICcob3BhY2l0eT0nICsgdmFsdWUgKyAnKSc7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gdGVzdFByb3AocHJvcHM6IFN0cmluZ1tdKTogU3RyaW5nfGZhbHNlXHJcbiAgLy8gR29lcyB0aHJvdWdoIHRoZSBhcnJheSBvZiBzdHlsZSBuYW1lcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgbmFtZVxyXG4gIC8vIHRoYXQgaXMgYSB2YWxpZCBzdHlsZSBuYW1lIGZvciBhbiBlbGVtZW50LiBJZiBubyBzdWNoIG5hbWUgaXMgZm91bmQsXHJcbiAgLy8gaXQgcmV0dXJucyBmYWxzZS4gVXNlZnVsIGZvciB2ZW5kb3ItcHJlZml4ZWQgc3R5bGVzIGxpa2UgYHRyYW5zZm9ybWAuXHJcbiAgZnVuY3Rpb24gdGVzdFByb3AocHJvcHMpIHtcclxuICBcdHZhciBzdHlsZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdGlmIChwcm9wc1tpXSBpbiBzdHlsZSkge1xyXG4gIFx0XHRcdHJldHVybiBwcm9wc1tpXTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldFRyYW5zZm9ybShlbDogSFRNTEVsZW1lbnQsIG9mZnNldDogUG9pbnQsIHNjYWxlPzogTnVtYmVyKVxyXG4gIC8vIFJlc2V0cyB0aGUgM0QgQ1NTIHRyYW5zZm9ybSBvZiBgZWxgIHNvIGl0IGlzIHRyYW5zbGF0ZWQgYnkgYG9mZnNldGAgcGl4ZWxzXHJcbiAgLy8gYW5kIG9wdGlvbmFsbHkgc2NhbGVkIGJ5IGBzY2FsZWAuIERvZXMgbm90IGhhdmUgYW4gZWZmZWN0IGlmIHRoZVxyXG4gIC8vIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IDNEIENTUyB0cmFuc2Zvcm1zLlxyXG4gIGZ1bmN0aW9uIHNldFRyYW5zZm9ybShlbCwgb2Zmc2V0LCBzY2FsZSkge1xyXG4gIFx0dmFyIHBvcyA9IG9mZnNldCB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcblxyXG4gIFx0ZWwuc3R5bGVbVFJBTlNGT1JNXSA9XHJcbiAgXHRcdChCcm93c2VyLmllM2QgP1xyXG4gIFx0XHRcdCd0cmFuc2xhdGUoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCknIDpcclxuICBcdFx0XHQndHJhbnNsYXRlM2QoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCwwKScpICtcclxuICBcdFx0KHNjYWxlID8gJyBzY2FsZSgnICsgc2NhbGUgKyAnKScgOiAnJyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0UG9zaXRpb24oZWw6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogUG9pbnQpXHJcbiAgLy8gU2V0cyB0aGUgcG9zaXRpb24gb2YgYGVsYCB0byBjb29yZGluYXRlcyBzcGVjaWZpZWQgYnkgYHBvc2l0aW9uYCxcclxuICAvLyB1c2luZyBDU1MgdHJhbnNsYXRlIG9yIHRvcC9sZWZ0IHBvc2l0aW9uaW5nIGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlclxyXG4gIC8vICh1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBwb3NpdGlvbiBpdHMgbGF5ZXJzKS5cclxuICBmdW5jdGlvbiBzZXRQb3NpdGlvbihlbCwgcG9pbnQpIHtcclxuXHJcbiAgXHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRlbC5fbGVhZmxldF9wb3MgPSBwb2ludDtcclxuICBcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHJcbiAgXHRpZiAoQnJvd3Nlci5hbnkzZCkge1xyXG4gIFx0XHRzZXRUcmFuc2Zvcm0oZWwsIHBvaW50KTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGVsLnN0eWxlLmxlZnQgPSBwb2ludC54ICsgJ3B4JztcclxuICBcdFx0ZWwuc3R5bGUudG9wID0gcG9pbnQueSArICdweCc7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0UG9zaXRpb24oZWw6IEhUTUxFbGVtZW50KTogUG9pbnRcclxuICAvLyBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiBhbiBlbGVtZW50IHByZXZpb3VzbHkgcG9zaXRpb25lZCB3aXRoIHNldFBvc2l0aW9uLlxyXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKGVsKSB7XHJcbiAgXHQvLyB0aGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgZm9yIGVsZW1lbnRzIHByZXZpb3VzbHkgcG9zaXRpb25lZCB1c2luZyBzZXRQb3NpdGlvbixcclxuICBcdC8vIHNvIGl0J3Mgc2FmZSB0byBjYWNoZSB0aGUgcG9zaXRpb24gZm9yIHBlcmZvcm1hbmNlXHJcblxyXG4gIFx0cmV0dXJuIGVsLl9sZWFmbGV0X3BvcyB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZGlzYWJsZVRleHRTZWxlY3Rpb24oKVxyXG4gIC8vIFByZXZlbnRzIHRoZSB1c2VyIGZyb20gZ2VuZXJhdGluZyBgc2VsZWN0c3RhcnRgIERPTSBldmVudHMsIHVzdWFsbHkgZ2VuZXJhdGVkXHJcbiAgLy8gd2hlbiB0aGUgdXNlciBkcmFncyB0aGUgbW91c2UgdGhyb3VnaCBhIHBhZ2Ugd2l0aCB0ZXh0LiBVc2VkIGludGVybmFsbHlcclxuICAvLyBieSBMZWFmbGV0IHRvIG92ZXJyaWRlIHRoZSBiZWhhdmlvdXIgb2YgYW55IGNsaWNrLWFuZC1kcmFnIGludGVyYWN0aW9uIG9uXHJcbiAgLy8gdGhlIG1hcC4gQWZmZWN0cyBkcmFnIGludGVyYWN0aW9ucyBvbiB0aGUgd2hvbGUgZG9jdW1lbnQuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBlbmFibGVUZXh0U2VsZWN0aW9uKClcclxuICAvLyBDYW5jZWxzIHRoZSBlZmZlY3RzIG9mIGEgcHJldmlvdXMgW2BMLkRvbVV0aWwuZGlzYWJsZVRleHRTZWxlY3Rpb25gXSgjZG9tdXRpbC1kaXNhYmxldGV4dHNlbGVjdGlvbikuXHJcbiAgdmFyIGRpc2FibGVUZXh0U2VsZWN0aW9uO1xyXG4gIHZhciBlbmFibGVUZXh0U2VsZWN0aW9uO1xyXG4gIHZhciBfdXNlclNlbGVjdDtcclxuICBpZiAoJ29uc2VsZWN0c3RhcnQnIGluIGRvY3VtZW50KSB7XHJcbiAgXHRkaXNhYmxlVGV4dFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0b24od2luZG93LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XHJcbiAgXHR9O1xyXG4gIFx0ZW5hYmxlVGV4dFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0b2ZmKHdpbmRvdywgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0fTtcclxuICB9IGVsc2Uge1xyXG4gIFx0dmFyIHVzZXJTZWxlY3RQcm9wZXJ0eSA9IHRlc3RQcm9wKFxyXG4gIFx0XHRbJ3VzZXJTZWxlY3QnLCAnV2Via2l0VXNlclNlbGVjdCcsICdPVXNlclNlbGVjdCcsICdNb3pVc2VyU2VsZWN0JywgJ21zVXNlclNlbGVjdCddKTtcclxuXHJcbiAgXHRkaXNhYmxlVGV4dFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHVzZXJTZWxlY3RQcm9wZXJ0eSkge1xyXG4gIFx0XHRcdHZhciBzdHlsZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcclxuICBcdFx0XHRfdXNlclNlbGVjdCA9IHN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV07XHJcbiAgXHRcdFx0c3R5bGVbdXNlclNlbGVjdFByb3BlcnR5XSA9ICdub25lJztcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuICBcdGVuYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh1c2VyU2VsZWN0UHJvcGVydHkpIHtcclxuICBcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVbdXNlclNlbGVjdFByb3BlcnR5XSA9IF91c2VyU2VsZWN0O1xyXG4gIFx0XHRcdF91c2VyU2VsZWN0ID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVJbWFnZURyYWcoKVxyXG4gIC8vIEFzIFtgTC5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLCBidXRcclxuICAvLyBmb3IgYGRyYWdzdGFydGAgRE9NIGV2ZW50cywgdXN1YWxseSBnZW5lcmF0ZWQgd2hlbiB0aGUgdXNlciBkcmFncyBhbiBpbWFnZS5cclxuICBmdW5jdGlvbiBkaXNhYmxlSW1hZ2VEcmFnKCkge1xyXG4gIFx0b24od2luZG93LCAnZHJhZ3N0YXJ0JywgcHJldmVudERlZmF1bHQpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGVuYWJsZUltYWdlRHJhZygpXHJcbiAgLy8gQ2FuY2VscyB0aGUgZWZmZWN0cyBvZiBhIHByZXZpb3VzIFtgTC5Eb21VdGlsLmRpc2FibGVJbWFnZURyYWdgXSgjZG9tdXRpbC1kaXNhYmxldGV4dHNlbGVjdGlvbikuXHJcbiAgZnVuY3Rpb24gZW5hYmxlSW1hZ2VEcmFnKCkge1xyXG4gIFx0b2ZmKHdpbmRvdywgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIHZhciBfb3V0bGluZUVsZW1lbnQsIF9vdXRsaW5lU3R5bGU7XHJcbiAgLy8gQGZ1bmN0aW9uIHByZXZlbnRPdXRsaW5lKGVsOiBIVE1MRWxlbWVudClcclxuICAvLyBNYWtlcyB0aGUgW291dGxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy9vdXRsaW5lKVxyXG4gIC8vIG9mIHRoZSBlbGVtZW50IGBlbGAgaW52aXNpYmxlLiBVc2VkIGludGVybmFsbHkgYnkgTGVhZmxldCB0byBwcmV2ZW50XHJcbiAgLy8gZm9jdXNhYmxlIGVsZW1lbnRzIGZyb20gZGlzcGxheWluZyBhbiBvdXRsaW5lIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYVxyXG4gIC8vIGRyYWcgaW50ZXJhY3Rpb24gb24gdGhlbS5cclxuICBmdW5jdGlvbiBwcmV2ZW50T3V0bGluZShlbGVtZW50KSB7XHJcbiAgXHR3aGlsZSAoZWxlbWVudC50YWJJbmRleCA9PT0gLTEpIHtcclxuICBcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICBcdH1cclxuICBcdGlmICghZWxlbWVudC5zdHlsZSkgeyByZXR1cm47IH1cclxuICBcdHJlc3RvcmVPdXRsaW5lKCk7XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQgPSBlbGVtZW50O1xyXG4gIFx0X291dGxpbmVTdHlsZSA9IGVsZW1lbnQuc3R5bGUub3V0bGluZTtcclxuICBcdGVsZW1lbnQuc3R5bGUub3V0bGluZSA9ICdub25lJztcclxuICBcdG9uKHdpbmRvdywgJ2tleWRvd24nLCByZXN0b3JlT3V0bGluZSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVzdG9yZU91dGxpbmUoKVxyXG4gIC8vIENhbmNlbHMgdGhlIGVmZmVjdHMgb2YgYSBwcmV2aW91cyBbYEwuRG9tVXRpbC5wcmV2ZW50T3V0bGluZWBdKCkuXHJcbiAgZnVuY3Rpb24gcmVzdG9yZU91dGxpbmUoKSB7XHJcbiAgXHRpZiAoIV9vdXRsaW5lRWxlbWVudCkgeyByZXR1cm47IH1cclxuICBcdF9vdXRsaW5lRWxlbWVudC5zdHlsZS5vdXRsaW5lID0gX291dGxpbmVTdHlsZTtcclxuICBcdF9vdXRsaW5lRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICBcdF9vdXRsaW5lU3R5bGUgPSB1bmRlZmluZWQ7XHJcbiAgXHRvZmYod2luZG93LCAna2V5ZG93bicsIHJlc3RvcmVPdXRsaW5lKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRTaXplZFBhcmVudE5vZGUoZWw6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICAvLyBGaW5kcyB0aGUgY2xvc2VzdCBwYXJlbnQgbm9kZSB3aGljaCBzaXplICh3aWR0aCBhbmQgaGVpZ2h0KSBpcyBub3QgbnVsbC5cclxuICBmdW5jdGlvbiBnZXRTaXplZFBhcmVudE5vZGUoZWxlbWVudCkge1xyXG4gIFx0ZG8ge1xyXG4gIFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gIFx0fSB3aGlsZSAoKCFlbGVtZW50Lm9mZnNldFdpZHRoIHx8ICFlbGVtZW50Lm9mZnNldEhlaWdodCkgJiYgZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSk7XHJcbiAgXHRyZXR1cm4gZWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRTY2FsZShlbDogSFRNTEVsZW1lbnQpOiBPYmplY3RcclxuICAvLyBDb21wdXRlcyB0aGUgQ1NTIHNjYWxlIGN1cnJlbnRseSBhcHBsaWVkIG9uIHRoZSBlbGVtZW50LlxyXG4gIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHhgIGFuZCBgeWAgbWVtYmVycyBhcyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY2FsZXMgcmVzcGVjdGl2ZWx5LFxyXG4gIC8vIGFuZCBgYm91bmRpbmdDbGllbnRSZWN0YCBhcyB0aGUgcmVzdWx0IG9mIFtgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9nZXRCb3VuZGluZ0NsaWVudFJlY3QpLlxyXG4gIGZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcclxuICBcdHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gUmVhZC1vbmx5IGluIG9sZCBicm93c2Vycy5cclxuXHJcbiAgXHRyZXR1cm4ge1xyXG4gIFx0XHR4OiByZWN0LndpZHRoIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxLFxyXG4gIFx0XHR5OiByZWN0LmhlaWdodCAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEsXHJcbiAgXHRcdGJvdW5kaW5nQ2xpZW50UmVjdDogcmVjdFxyXG4gIFx0fTtcclxuICB9XG5cbiAgdmFyIERvbVV0aWwgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIFRSQU5TRk9STTogVFJBTlNGT1JNLFxuICAgIFRSQU5TSVRJT046IFRSQU5TSVRJT04sXG4gICAgVFJBTlNJVElPTl9FTkQ6IFRSQU5TSVRJT05fRU5ELFxuICAgIGdldDogZ2V0LFxuICAgIGdldFN0eWxlOiBnZXRTdHlsZSxcbiAgICBjcmVhdGU6IGNyZWF0ZSQxLFxuICAgIHJlbW92ZTogcmVtb3ZlLFxuICAgIGVtcHR5OiBlbXB0eSxcbiAgICB0b0Zyb250OiB0b0Zyb250LFxuICAgIHRvQmFjazogdG9CYWNrLFxuICAgIGhhc0NsYXNzOiBoYXNDbGFzcyxcbiAgICBhZGRDbGFzczogYWRkQ2xhc3MsXG4gICAgcmVtb3ZlQ2xhc3M6IHJlbW92ZUNsYXNzLFxuICAgIHNldENsYXNzOiBzZXRDbGFzcyxcbiAgICBnZXRDbGFzczogZ2V0Q2xhc3MsXG4gICAgc2V0T3BhY2l0eTogc2V0T3BhY2l0eSxcbiAgICB0ZXN0UHJvcDogdGVzdFByb3AsXG4gICAgc2V0VHJhbnNmb3JtOiBzZXRUcmFuc2Zvcm0sXG4gICAgc2V0UG9zaXRpb246IHNldFBvc2l0aW9uLFxuICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbixcbiAgICBnZXQgZGlzYWJsZVRleHRTZWxlY3Rpb24gKCkgeyByZXR1cm4gZGlzYWJsZVRleHRTZWxlY3Rpb247IH0sXG4gICAgZ2V0IGVuYWJsZVRleHRTZWxlY3Rpb24gKCkgeyByZXR1cm4gZW5hYmxlVGV4dFNlbGVjdGlvbjsgfSxcbiAgICBkaXNhYmxlSW1hZ2VEcmFnOiBkaXNhYmxlSW1hZ2VEcmFnLFxuICAgIGVuYWJsZUltYWdlRHJhZzogZW5hYmxlSW1hZ2VEcmFnLFxuICAgIHByZXZlbnRPdXRsaW5lOiBwcmV2ZW50T3V0bGluZSxcbiAgICByZXN0b3JlT3V0bGluZTogcmVzdG9yZU91dGxpbmUsXG4gICAgZ2V0U2l6ZWRQYXJlbnROb2RlOiBnZXRTaXplZFBhcmVudE5vZGUsXG4gICAgZ2V0U2NhbGU6IGdldFNjYWxlXG4gIH07XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIERvbUV2ZW50XHJcbiAgICogVXRpbGl0eSBmdW5jdGlvbnMgdG8gd29yayB3aXRoIHRoZSBbRE9NIGV2ZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0V2ZW50KSwgdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkuXHJcbiAgICovXHJcblxyXG4gIC8vIEluc3BpcmVkIGJ5IEpvaG4gUmVzaWcsIERlYW4gRWR3YXJkcyBhbmQgWVVJIGFkZEV2ZW50IGltcGxlbWVudGF0aW9ucy5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIG9uKGVsOiBIVE1MRWxlbWVudCwgdHlwZXM6IFN0cmluZywgZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIEFkZHMgYSBsaXN0ZW5lciBmdW5jdGlvbiAoYGZuYCkgdG8gYSBwYXJ0aWN1bGFyIERPTSBldmVudCB0eXBlIG9mIHRoZVxyXG4gIC8vIGVsZW1lbnQgYGVsYC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGNvbnRleHQgb2YgdGhlIGxpc3RlbmVyXHJcbiAgLy8gKG9iamVjdCB0aGUgYHRoaXNgIGtleXdvcmQgd2lsbCBwb2ludCB0bykuIFlvdSBjYW4gYWxzbyBwYXNzIHNldmVyYWxcclxuICAvLyBzcGFjZS1zZXBhcmF0ZWQgdHlwZXMgKGUuZy4gYCdjbGljayBkYmxjbGljaydgKS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZ1bmN0aW9uIG9uKGVsOiBIVE1MRWxlbWVudCwgZXZlbnRNYXA6IE9iamVjdCwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICAvLyBBZGRzIGEgc2V0IG9mIHR5cGUvbGlzdGVuZXIgcGFpcnMsIGUuZy4gYHtjbGljazogb25DbGljaywgbW91c2Vtb3ZlOiBvbk1vdXNlTW92ZX1gXHJcbiAgZnVuY3Rpb24gb24ob2JqLCB0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRpZiAodHlwZXMgJiYgdHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7XHJcbiAgXHRcdFx0YWRkT25lKG9iaiwgdHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0dHlwZXMgPSBzcGxpdFdvcmRzKHR5cGVzKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdGFkZE9uZShvYmosIHR5cGVzW2ldLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHZhciBldmVudHNLZXkgPSAnX2xlYWZsZXRfZXZlbnRzJztcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIG9mZihlbDogSFRNTEVsZW1lbnQsIHR5cGVzOiBTdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICAvLyBSZW1vdmVzIGEgcHJldmlvdXNseSBhZGRlZCBsaXN0ZW5lciBmdW5jdGlvbi5cclxuICAvLyBOb3RlIHRoYXQgaWYgeW91IHBhc3NlZCBhIGN1c3RvbSBjb250ZXh0IHRvIG9uLCB5b3UgbXVzdCBwYXNzIHRoZSBzYW1lXHJcbiAgLy8gY29udGV4dCB0byBgb2ZmYCBpbiBvcmRlciB0byByZW1vdmUgdGhlIGxpc3RlbmVyLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZnVuY3Rpb24gb2ZmKGVsOiBIVE1MRWxlbWVudCwgZXZlbnRNYXA6IE9iamVjdCwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICAvLyBSZW1vdmVzIGEgc2V0IG9mIHR5cGUvbGlzdGVuZXIgcGFpcnMsIGUuZy4gYHtjbGljazogb25DbGljaywgbW91c2Vtb3ZlOiBvbk1vdXNlTW92ZX1gXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmdW5jdGlvbiBvZmYoZWw6IEhUTUxFbGVtZW50LCB0eXBlczogU3RyaW5nKTogdGhpc1xyXG4gIC8vIFJlbW92ZXMgYWxsIHByZXZpb3VzbHkgYWRkZWQgbGlzdGVuZXJzIG9mIGdpdmVuIHR5cGVzLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZnVuY3Rpb24gb2ZmKGVsOiBIVE1MRWxlbWVudCk6IHRoaXNcclxuICAvLyBSZW1vdmVzIGFsbCBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVycyBmcm9tIGdpdmVuIEhUTUxFbGVtZW50XHJcbiAgZnVuY3Rpb24gb2ZmKG9iaiwgdHlwZXMsIGZuLCBjb250ZXh0KSB7XHJcblxyXG4gIFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcclxuICBcdFx0YmF0Y2hSZW1vdmUob2JqKTtcclxuICBcdFx0ZGVsZXRlIG9ialtldmVudHNLZXldO1xyXG5cclxuICBcdH0gZWxzZSBpZiAodHlwZXMgJiYgdHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0fVxyXG5cclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdHR5cGVzID0gc3BsaXRXb3Jkcyh0eXBlcyk7XHJcblxyXG4gIFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xyXG4gIFx0XHRcdGJhdGNoUmVtb3ZlKG9iaiwgZnVuY3Rpb24gKHR5cGUpIHtcclxuICBcdFx0XHRcdHJldHVybiBpbmRleE9mKHR5cGVzLCB0eXBlKSAhPT0gLTE7XHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHRyZW1vdmVPbmUob2JqLCB0eXBlc1tpXSwgZm4sIGNvbnRleHQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYmF0Y2hSZW1vdmUob2JqLCBmaWx0ZXJGbikge1xyXG4gIFx0Zm9yICh2YXIgaWQgaW4gb2JqW2V2ZW50c0tleV0pIHtcclxuICBcdFx0dmFyIHR5cGUgPSBpZC5zcGxpdCgvXFxkLylbMF07XHJcbiAgXHRcdGlmICghZmlsdGVyRm4gfHwgZmlsdGVyRm4odHlwZSkpIHtcclxuICBcdFx0XHRyZW1vdmVPbmUob2JqLCB0eXBlLCBudWxsLCBudWxsLCBpZCk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XHJcblxyXG4gIHZhciBtb3VzZVN1YnN0ID0ge1xyXG4gIFx0bW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXHJcbiAgXHRtb3VzZWxlYXZlOiAnbW91c2VvdXQnLFxyXG4gIFx0d2hlZWw6ICEoJ29ud2hlZWwnIGluIHdpbmRvdykgJiYgJ21vdXNld2hlZWwnXHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lKG9iaiwgdHlwZSwgZm4sIGNvbnRleHQpIHtcclxuICBcdHZhciBpZCA9IHR5cGUgKyBzdGFtcChmbikgKyAoY29udGV4dCA/ICdfJyArIHN0YW1wKGNvbnRleHQpIDogJycpO1xyXG5cclxuICBcdGlmIChvYmpbZXZlbnRzS2V5XSAmJiBvYmpbZXZlbnRzS2V5XVtpZF0pIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHJldHVybiBmbi5jYWxsKGNvbnRleHQgfHwgb2JqLCBlIHx8IHdpbmRvdy5ldmVudCk7XHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBvcmlnaW5hbEhhbmRsZXIgPSBoYW5kbGVyO1xyXG5cclxuICBcdGlmICghQnJvd3Nlci50b3VjaE5hdGl2ZSAmJiBCcm93c2VyLnBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdC8vIE5lZWRzIERvbUV2ZW50LlBvaW50ZXIuanNcclxuICBcdFx0aGFuZGxlciA9IGFkZFBvaW50ZXJMaXN0ZW5lcihvYmosIHR5cGUsIGhhbmRsZXIpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoQnJvd3Nlci50b3VjaCAmJiAodHlwZSA9PT0gJ2RibGNsaWNrJykpIHtcclxuICBcdFx0aGFuZGxlciA9IGFkZERvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlcik7XHJcblxyXG4gIFx0fSBlbHNlIGlmICgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gb2JqKSB7XHJcblxyXG4gIFx0XHRpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IHR5cGUgPT09ICd0b3VjaG1vdmUnIHx8IHR5cGUgPT09ICd3aGVlbCcgfHwgIHR5cGUgPT09ICdtb3VzZXdoZWVsJykge1xyXG4gIFx0XHRcdG9iai5hZGRFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0gfHwgdHlwZSwgaGFuZGxlciwgQnJvd3Nlci5wYXNzaXZlRXZlbnRzID8ge3Bhc3NpdmU6IGZhbHNlfSA6IGZhbHNlKTtcclxuXHJcbiAgXHRcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xyXG4gIFx0XHRcdGhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRcdFx0ZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIFx0XHRcdFx0aWYgKGlzRXh0ZXJuYWxUYXJnZXQob2JqLCBlKSkge1xyXG4gIFx0XHRcdFx0XHRvcmlnaW5hbEhhbmRsZXIoZSk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fTtcclxuICBcdFx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcihtb3VzZVN1YnN0W3R5cGVdLCBoYW5kbGVyLCBmYWxzZSk7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG9iai5hZGRFdmVudExpc3RlbmVyKHR5cGUsIG9yaWdpbmFsSGFuZGxlciwgZmFsc2UpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0b2JqLmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBoYW5kbGVyKTtcclxuICBcdH1cclxuXHJcbiAgXHRvYmpbZXZlbnRzS2V5XSA9IG9ialtldmVudHNLZXldIHx8IHt9O1xyXG4gIFx0b2JqW2V2ZW50c0tleV1baWRdID0gaGFuZGxlcjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU9uZShvYmosIHR5cGUsIGZuLCBjb250ZXh0LCBpZCkge1xyXG4gIFx0aWQgPSBpZCB8fCB0eXBlICsgc3RhbXAoZm4pICsgKGNvbnRleHQgPyAnXycgKyBzdGFtcChjb250ZXh0KSA6ICcnKTtcclxuICBcdHZhciBoYW5kbGVyID0gb2JqW2V2ZW50c0tleV0gJiYgb2JqW2V2ZW50c0tleV1baWRdO1xyXG5cclxuICBcdGlmICghaGFuZGxlcikgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdGlmICghQnJvd3Nlci50b3VjaE5hdGl2ZSAmJiBCcm93c2VyLnBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdHJlbW92ZVBvaW50ZXJMaXN0ZW5lcihvYmosIHR5cGUsIGhhbmRsZXIpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoQnJvd3Nlci50b3VjaCAmJiAodHlwZSA9PT0gJ2RibGNsaWNrJykpIHtcclxuICBcdFx0cmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIob2JqLCBoYW5kbGVyKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBvYmopIHtcclxuXHJcbiAgXHRcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0gfHwgdHlwZSwgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdG9iai5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgaGFuZGxlcik7XHJcbiAgXHR9XHJcblxyXG4gIFx0b2JqW2V2ZW50c0tleV1baWRdID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZXY6IERPTUV2ZW50KTogdGhpc1xyXG4gIC8vIFN0b3AgdGhlIGdpdmVuIGV2ZW50IGZyb20gcHJvcGFnYXRpb24gdG8gcGFyZW50IGVsZW1lbnRzLiBVc2VkIGluc2lkZSB0aGUgbGlzdGVuZXIgZnVuY3Rpb25zOlxyXG4gIC8vIGBgYGpzXHJcbiAgLy8gTC5Eb21FdmVudC5vbihkaXYsICdjbGljaycsIGZ1bmN0aW9uIChldikge1xyXG4gIC8vIFx0TC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24oZXYpO1xyXG4gIC8vIH0pO1xyXG4gIC8vIGBgYFxyXG4gIGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKSB7XHJcblxyXG4gIFx0aWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgXHR9IGVsc2UgaWYgKGUub3JpZ2luYWxFdmVudCkgeyAgLy8gSW4gY2FzZSBvZiBMZWFmbGV0IGV2ZW50LlxyXG4gIFx0XHRlLm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQgPSB0cnVlO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnd2hlZWwnYCBldmVudHMgKHBsdXMgYnJvd3NlciB2YXJpYW50cykuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGVsKSB7XHJcbiAgXHRhZGRPbmUoZWwsICd3aGVlbCcsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnY2xpY2snYCwgYCdkYmxjbGljaydgLCBgJ2NvbnRleHRtZW51J2AsXHJcbiAgLy8gYCdtb3VzZWRvd24nYCBhbmQgYCd0b3VjaHN0YXJ0J2AgZXZlbnRzIChwbHVzIGJyb3dzZXIgdmFyaWFudHMpLlxyXG4gIGZ1bmN0aW9uIGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGVsKSB7XHJcbiAgXHRvbihlbCwgJ21vdXNlZG93biB0b3VjaHN0YXJ0IGRibGNsaWNrIGNvbnRleHRtZW51Jywgc3RvcFByb3BhZ2F0aW9uKTtcclxuICBcdGVsWydfbGVhZmxldF9kaXNhYmxlX2NsaWNrJ10gPSB0cnVlO1xyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXY6IERPTUV2ZW50KTogdGhpc1xyXG4gIC8vIFByZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgRE9NIEV2ZW50IGBldmAgZnJvbSBoYXBwZW5pbmcgKHN1Y2ggYXNcclxuICAvLyBmb2xsb3dpbmcgYSBsaW5rIGluIHRoZSBocmVmIG9mIHRoZSBhIGVsZW1lbnQsIG9yIGRvaW5nIGEgUE9TVCByZXF1ZXN0XHJcbiAgLy8gd2l0aCBwYWdlIHJlbG9hZCB3aGVuIGEgYDxmb3JtPmAgaXMgc3VibWl0dGVkKS5cclxuICAvLyBVc2UgaXQgaW5zaWRlIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChlKSB7XHJcbiAgXHRpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gIFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlLnJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzdG9wKGV2OiBET01FdmVudCk6IHRoaXNcclxuICAvLyBEb2VzIGBzdG9wUHJvcGFnYXRpb25gIGFuZCBgcHJldmVudERlZmF1bHRgIGF0IHRoZSBzYW1lIHRpbWUuXHJcbiAgZnVuY3Rpb24gc3RvcChlKSB7XHJcbiAgXHRwcmV2ZW50RGVmYXVsdChlKTtcclxuICBcdHN0b3BQcm9wYWdhdGlvbihlKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFByb3BhZ2F0aW9uUGF0aChldjogRE9NRXZlbnQpOiBBcnJheVxyXG4gIC8vIENvbXBhdGliaWxpdHkgcG9seWZpbGwgZm9yIFtgRXZlbnQuY29tcG9zZWRQYXRoKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvY29tcG9zZWRQYXRoKS5cclxuICAvLyBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGBIVE1MRWxlbWVudGBzIHRoYXQgdGhlIGdpdmVuIERPTSBldmVudFxyXG4gIC8vIHNob3VsZCBwcm9wYWdhdGUgdG8gKGlmIG5vdCBzdG9wcGVkKS5cclxuICBmdW5jdGlvbiBnZXRQcm9wYWdhdGlvblBhdGgoZXYpIHtcclxuICBcdGlmIChldi5jb21wb3NlZFBhdGgpIHtcclxuICBcdFx0cmV0dXJuIGV2LmNvbXBvc2VkUGF0aCgpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBwYXRoID0gW107XHJcbiAgXHR2YXIgZWwgPSBldi50YXJnZXQ7XHJcblxyXG4gIFx0d2hpbGUgKGVsKSB7XHJcbiAgXHRcdHBhdGgucHVzaChlbCk7XHJcbiAgXHRcdGVsID0gZWwucGFyZW50Tm9kZTtcclxuICBcdH1cclxuICBcdHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRNb3VzZVBvc2l0aW9uKGV2OiBET01FdmVudCwgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiBQb2ludFxyXG4gIC8vIEdldHMgbm9ybWFsaXplZCBtb3VzZSBwb3NpdGlvbiBmcm9tIGEgRE9NIGV2ZW50IHJlbGF0aXZlIHRvIHRoZVxyXG4gIC8vIGBjb250YWluZXJgIChib3JkZXIgZXhjbHVkZWQpIG9yIHRvIHRoZSB3aG9sZSBwYWdlIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgZnVuY3Rpb24gZ2V0TW91c2VQb3NpdGlvbihlLCBjb250YWluZXIpIHtcclxuICBcdGlmICghY29udGFpbmVyKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBzY2FsZSA9IGdldFNjYWxlKGNvbnRhaW5lciksXHJcbiAgXHQgICAgb2Zmc2V0ID0gc2NhbGUuYm91bmRpbmdDbGllbnRSZWN0OyAvLyBsZWZ0IGFuZCB0b3AgIHZhbHVlcyBhcmUgaW4gcGFnZSBzY2FsZSAobGlrZSB0aGUgZXZlbnQgY2xpZW50WC9ZKVxyXG5cclxuICBcdHJldHVybiBuZXcgUG9pbnQoXHJcbiAgXHRcdC8vIG9mZnNldC5sZWZ0L3RvcCB2YWx1ZXMgYXJlIGluIHBhZ2Ugc2NhbGUgKGxpa2UgY2xpZW50WC9ZKSxcclxuICBcdFx0Ly8gd2hlcmVhcyBjbGllbnRMZWZ0L1RvcCAoYm9yZGVyIHdpZHRoKSB2YWx1ZXMgYXJlIHRoZSBvcmlnaW5hbCB2YWx1ZXMgKGJlZm9yZSBDU1Mgc2NhbGUgYXBwbGllcykuXHJcbiAgXHRcdChlLmNsaWVudFggLSBvZmZzZXQubGVmdCkgLyBzY2FsZS54IC0gY29udGFpbmVyLmNsaWVudExlZnQsXHJcbiAgXHRcdChlLmNsaWVudFkgLSBvZmZzZXQudG9wKSAvIHNjYWxlLnkgLSBjb250YWluZXIuY2xpZW50VG9wXHJcbiAgXHQpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vICBleGNlcHQgLCBTYWZhcmkgYW5kXHJcbiAgLy8gV2UgbmVlZCBkb3VibGUgdGhlIHNjcm9sbCBwaXhlbHMgKHNlZSAjNzQwMyBhbmQgIzQ1MzgpIGZvciBhbGwgQnJvd3NlcnNcclxuICAvLyBleGNlcHQgT1NYIChNYWMpIC0+IDN4LCBDaHJvbWUgcnVubmluZyBvbiBMaW51eCAxeFxyXG5cclxuICB2YXIgd2hlZWxQeEZhY3RvciA9XHJcbiAgXHQoQnJvd3Nlci5saW51eCAmJiBCcm93c2VyLmNocm9tZSkgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6XHJcbiAgXHRCcm93c2VyLm1hYyA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICogMyA6XHJcbiAgXHR3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDAgPyAyICogd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xyXG4gIC8vIEBmdW5jdGlvbiBnZXRXaGVlbERlbHRhKGV2OiBET01FdmVudCk6IE51bWJlclxyXG4gIC8vIEdldHMgbm9ybWFsaXplZCB3aGVlbCBkZWx0YSBmcm9tIGEgd2hlZWwgRE9NIGV2ZW50LCBpbiB2ZXJ0aWNhbFxyXG4gIC8vIHBpeGVscyBzY3JvbGxlZCAobmVnYXRpdmUgaWYgc2Nyb2xsaW5nIGRvd24pLlxyXG4gIC8vIEV2ZW50cyBmcm9tIHBvaW50aW5nIGRldmljZXMgd2l0aG91dCBwcmVjaXNlIHNjcm9sbGluZyBhcmUgbWFwcGVkIHRvXHJcbiAgLy8gYSBiZXN0IGd1ZXNzIG9mIDYwIHBpeGVscy5cclxuICBmdW5jdGlvbiBnZXRXaGVlbERlbHRhKGUpIHtcclxuICBcdHJldHVybiAoQnJvd3Nlci5lZGdlKSA/IGUud2hlZWxEZWx0YVkgLyAyIDogLy8gRG9uJ3QgdHJ1c3Qgd2luZG93LWdlb21ldHJ5LWJhc2VkIGRlbHRhXHJcbiAgXHQgICAgICAgKGUuZGVsdGFZICYmIGUuZGVsdGFNb2RlID09PSAwKSA/IC1lLmRlbHRhWSAvIHdoZWVsUHhGYWN0b3IgOiAvLyBQaXhlbHNcclxuICBcdCAgICAgICAoZS5kZWx0YVkgJiYgZS5kZWx0YU1vZGUgPT09IDEpID8gLWUuZGVsdGFZICogMjAgOiAvLyBMaW5lc1xyXG4gIFx0ICAgICAgIChlLmRlbHRhWSAmJiBlLmRlbHRhTW9kZSA9PT0gMikgPyAtZS5kZWx0YVkgKiA2MCA6IC8vIFBhZ2VzXHJcbiAgXHQgICAgICAgKGUuZGVsdGFYIHx8IGUuZGVsdGFaKSA/IDAgOlx0Ly8gU2tpcCBob3Jpem9udGFsL2RlcHRoIHdoZWVsIGV2ZW50c1xyXG4gIFx0ICAgICAgIGUud2hlZWxEZWx0YSA/IChlLndoZWVsRGVsdGFZIHx8IGUud2hlZWxEZWx0YSkgLyAyIDogLy8gTGVnYWN5IElFIHBpeGVsc1xyXG4gIFx0ICAgICAgIChlLmRldGFpbCAmJiBNYXRoLmFicyhlLmRldGFpbCkgPCAzMjc2NSkgPyAtZS5kZXRhaWwgKiAyMCA6IC8vIExlZ2FjeSBNb3ogbGluZXNcclxuICBcdCAgICAgICBlLmRldGFpbCA/IGUuZGV0YWlsIC8gLTMyNzY1ICogNjAgOiAvLyBMZWdhY3kgTW96IHBhZ2VzXHJcbiAgXHQgICAgICAgMDtcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIGlmIGVsZW1lbnQgcmVhbGx5IGxlZnQvZW50ZXJlZCB0aGUgZXZlbnQgdGFyZ2V0IChmb3IgbW91c2VlbnRlci9tb3VzZWxlYXZlKVxyXG4gIGZ1bmN0aW9uIGlzRXh0ZXJuYWxUYXJnZXQoZWwsIGUpIHtcclxuXHJcbiAgXHR2YXIgcmVsYXRlZCA9IGUucmVsYXRlZFRhcmdldDtcclxuXHJcbiAgXHRpZiAoIXJlbGF0ZWQpIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgXHR0cnkge1xyXG4gIFx0XHR3aGlsZSAocmVsYXRlZCAmJiAocmVsYXRlZCAhPT0gZWwpKSB7XHJcbiAgXHRcdFx0cmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcclxuICBcdFx0fVxyXG4gIFx0fSBjYXRjaCAoZXJyKSB7XHJcbiAgXHRcdHJldHVybiBmYWxzZTtcclxuICBcdH1cclxuICBcdHJldHVybiAocmVsYXRlZCAhPT0gZWwpO1xyXG4gIH1cblxuICB2YXIgRG9tRXZlbnQgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICBzdG9wUHJvcGFnYXRpb246IHN0b3BQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246IGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjogZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24sXG4gICAgcHJldmVudERlZmF1bHQ6IHByZXZlbnREZWZhdWx0LFxuICAgIHN0b3A6IHN0b3AsXG4gICAgZ2V0UHJvcGFnYXRpb25QYXRoOiBnZXRQcm9wYWdhdGlvblBhdGgsXG4gICAgZ2V0TW91c2VQb3NpdGlvbjogZ2V0TW91c2VQb3NpdGlvbixcbiAgICBnZXRXaGVlbERlbHRhOiBnZXRXaGVlbERlbHRhLFxuICAgIGlzRXh0ZXJuYWxUYXJnZXQ6IGlzRXh0ZXJuYWxUYXJnZXQsXG4gICAgYWRkTGlzdGVuZXI6IG9uLFxuICAgIHJlbW92ZUxpc3RlbmVyOiBvZmZcbiAgfTtcblxuICAvKlxuICAgKiBAY2xhc3MgUG9zQW5pbWF0aW9uXG4gICAqIEBha2EgTC5Qb3NBbmltYXRpb25cbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcbiAgICogVXNlZCBpbnRlcm5hbGx5IGZvciBwYW5uaW5nIGFuaW1hdGlvbnMsIHV0aWxpemluZyBDU1MzIFRyYW5zaXRpb25zIGZvciBtb2Rlcm4gYnJvd3NlcnMgYW5kIGEgdGltZXIgZmFsbGJhY2sgZm9yIElFNi05LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgbXlQb3NpdGlvbk1hcmtlciA9IEwubWFya2VyKFs0OC44NjQ3MTYsIDIuMjk0Njk0XSkuYWRkVG8obWFwKTtcbiAgICpcbiAgICogbXlQb3NpdGlvbk1hcmtlci5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgKiBcdHZhciBwb3MgPSBtYXAubGF0TG5nVG9MYXllclBvaW50KG15UG9zaXRpb25NYXJrZXIuZ2V0TGF0TG5nKCkpO1xuICAgKiBcdHBvcy55IC09IDI1O1xuICAgKiBcdHZhciBmeCA9IG5ldyBMLlBvc0FuaW1hdGlvbigpO1xuICAgKlxuICAgKiBcdGZ4Lm9uY2UoJ2VuZCcsZnVuY3Rpb24oKSB7XG4gICAqIFx0XHRwb3MueSArPSAyNTtcbiAgICogXHRcdGZ4LnJ1bihteVBvc2l0aW9uTWFya2VyLl9pY29uLCBwb3MsIDAuOCk7XG4gICAqIFx0fSk7XG4gICAqXG4gICAqIFx0ZngucnVuKG15UG9zaXRpb25NYXJrZXIuX2ljb24sIHBvcywgMC4zKTtcbiAgICogfSk7XG4gICAqXG4gICAqIGBgYFxuICAgKlxuICAgKiBAY29uc3RydWN0b3IgTC5Qb3NBbmltYXRpb24oKVxuICAgKiBDcmVhdGVzIGEgYFBvc0FuaW1hdGlvbmAgb2JqZWN0LlxuICAgKlxuICAgKi9cblxuICB2YXIgUG9zQW5pbWF0aW9uID0gRXZlbnRlZC5leHRlbmQoe1xuXG4gIFx0Ly8gQG1ldGhvZCBydW4oZWw6IEhUTUxFbGVtZW50LCBuZXdQb3M6IFBvaW50LCBkdXJhdGlvbj86IE51bWJlciwgZWFzZUxpbmVhcml0eT86IE51bWJlcilcbiAgXHQvLyBSdW4gYW4gYW5pbWF0aW9uIG9mIGEgZ2l2ZW4gZWxlbWVudCB0byBhIG5ldyBwb3NpdGlvbiwgb3B0aW9uYWxseSBzZXR0aW5nXG4gIFx0Ly8gZHVyYXRpb24gaW4gc2Vjb25kcyAoYDAuMjVgIGJ5IGRlZmF1bHQpIGFuZCBlYXNpbmcgbGluZWFyaXR5IGZhY3RvciAoM3JkXG4gIFx0Ly8gYXJndW1lbnQgb2YgdGhlIFtjdWJpYyBiZXppZXIgY3VydmVdKGh0dHBzOi8vY3ViaWMtYmV6aWVyLmNvbS8jMCwwLC41LDEpLFxuICBcdC8vIGAwLjVgIGJ5IGRlZmF1bHQpLlxuICBcdHJ1bjogZnVuY3Rpb24gKGVsLCBuZXdQb3MsIGR1cmF0aW9uLCBlYXNlTGluZWFyaXR5KSB7XG4gIFx0XHR0aGlzLnN0b3AoKTtcblxuICBcdFx0dGhpcy5fZWwgPSBlbDtcbiAgXHRcdHRoaXMuX2luUHJvZ3Jlc3MgPSB0cnVlO1xuICBcdFx0dGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbiB8fCAwLjI1O1xuICBcdFx0dGhpcy5fZWFzZU91dFBvd2VyID0gMSAvIE1hdGgubWF4KGVhc2VMaW5lYXJpdHkgfHwgMC41LCAwLjIpO1xuXG4gIFx0XHR0aGlzLl9zdGFydFBvcyA9IGdldFBvc2l0aW9uKGVsKTtcbiAgXHRcdHRoaXMuX29mZnNldCA9IG5ld1Bvcy5zdWJ0cmFjdCh0aGlzLl9zdGFydFBvcyk7XG4gIFx0XHR0aGlzLl9zdGFydFRpbWUgPSArbmV3IERhdGUoKTtcblxuICBcdFx0Ly8gQGV2ZW50IHN0YXJ0OiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0c1xuICBcdFx0dGhpcy5maXJlKCdzdGFydCcpO1xuXG4gIFx0XHR0aGlzLl9hbmltYXRlKCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc3RvcCgpXG4gIFx0Ly8gU3RvcHMgdGhlIGFuaW1hdGlvbiAoaWYgY3VycmVudGx5IHJ1bm5pbmcpLlxuICBcdHN0b3A6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5faW5Qcm9ncmVzcykgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fc3RlcCh0cnVlKTtcbiAgXHRcdHRoaXMuX2NvbXBsZXRlKCk7XG4gIFx0fSxcblxuICBcdF9hbmltYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyBhbmltYXRpb24gbG9vcFxuICBcdFx0dGhpcy5fYW5pbUlkID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hbmltYXRlLCB0aGlzKTtcbiAgXHRcdHRoaXMuX3N0ZXAoKTtcbiAgXHR9LFxuXG4gIFx0X3N0ZXA6IGZ1bmN0aW9uIChyb3VuZCkge1xuICBcdFx0dmFyIGVsYXBzZWQgPSAoK25ldyBEYXRlKCkpIC0gdGhpcy5fc3RhcnRUaW1lLFxuICBcdFx0ICAgIGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24gKiAxMDAwO1xuXG4gIFx0XHRpZiAoZWxhcHNlZCA8IGR1cmF0aW9uKSB7XG4gIFx0XHRcdHRoaXMuX3J1bkZyYW1lKHRoaXMuX2Vhc2VPdXQoZWxhcHNlZCAvIGR1cmF0aW9uKSwgcm91bmQpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fcnVuRnJhbWUoMSk7XG4gIFx0XHRcdHRoaXMuX2NvbXBsZXRlKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9ydW5GcmFtZTogZnVuY3Rpb24gKHByb2dyZXNzLCByb3VuZCkge1xuICBcdFx0dmFyIHBvcyA9IHRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeShwcm9ncmVzcykpO1xuICBcdFx0aWYgKHJvdW5kKSB7XG4gIFx0XHRcdHBvcy5fcm91bmQoKTtcbiAgXHRcdH1cbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX2VsLCBwb3MpO1xuXG4gIFx0XHQvLyBAZXZlbnQgc3RlcDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIGNvbnRpbnVvdXNseSBkdXJpbmcgdGhlIGFuaW1hdGlvbi5cbiAgXHRcdHRoaXMuZmlyZSgnc3RlcCcpO1xuICBcdH0sXG5cbiAgXHRfY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltSWQpO1xuXG4gIFx0XHR0aGlzLl9pblByb2dyZXNzID0gZmFsc2U7XG4gIFx0XHQvLyBAZXZlbnQgZW5kOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMuXG4gIFx0XHR0aGlzLmZpcmUoJ2VuZCcpO1xuICBcdH0sXG5cbiAgXHRfZWFzZU91dDogZnVuY3Rpb24gKHQpIHtcbiAgXHRcdHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHQsIHRoaXMuX2Vhc2VPdXRQb3dlcik7XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBNYXBcclxuICAgKiBAYWthIEwuTWFwXHJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcclxuICAgKlxyXG4gICAqIFRoZSBjZW50cmFsIGNsYXNzIG9mIHRoZSBBUEkg4oCUIGl0IGlzIHVzZWQgdG8gY3JlYXRlIGEgbWFwIG9uIGEgcGFnZSBhbmQgbWFuaXB1bGF0ZSBpdC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIC8vIGluaXRpYWxpemUgdGhlIG1hcCBvbiB0aGUgXCJtYXBcIiBkaXYgd2l0aCBhIGdpdmVuIGNlbnRlciBhbmQgem9vbVxyXG4gICAqIHZhciBtYXAgPSBMLm1hcCgnbWFwJywge1xyXG4gICAqIFx0Y2VudGVyOiBbNTEuNTA1LCAtMC4wOV0sXHJcbiAgICogXHR6b29tOiAxM1xyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICovXHJcblxyXG4gIHZhciBNYXAgPSBFdmVudGVkLmV4dGVuZCh7XHJcblxyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAc2VjdGlvbiBNYXAgU3RhdGUgT3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIGNyczogQ1JTID0gTC5DUlMuRVBTRzM4NTdcclxuICBcdFx0Ly8gVGhlIFtDb29yZGluYXRlIFJlZmVyZW5jZSBTeXN0ZW1dKCNjcnMpIHRvIHVzZS4gRG9uJ3QgY2hhbmdlIHRoaXMgaWYgeW91J3JlIG5vdFxyXG4gIFx0XHQvLyBzdXJlIHdoYXQgaXQgbWVhbnMuXHJcbiAgXHRcdGNyczogRVBTRzM4NTcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNlbnRlcjogTGF0TG5nID0gdW5kZWZpbmVkXHJcbiAgXHRcdC8vIEluaXRpYWwgZ2VvZ3JhcGhpYyBjZW50ZXIgb2YgdGhlIG1hcFxyXG4gIFx0XHRjZW50ZXI6IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbTogTnVtYmVyID0gdW5kZWZpbmVkXHJcbiAgXHRcdC8vIEluaXRpYWwgbWFwIHpvb20gbGV2ZWxcclxuICBcdFx0em9vbTogdW5kZWZpbmVkLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAqXHJcbiAgXHRcdC8vIE1pbmltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwLlxyXG4gIFx0XHQvLyBJZiBub3Qgc3BlY2lmaWVkIGFuZCBhdCBsZWFzdCBvbmUgYEdyaWRMYXllcmAgb3IgYFRpbGVMYXllcmAgaXMgaW4gdGhlIG1hcCxcclxuICBcdFx0Ly8gdGhlIGxvd2VzdCBvZiB0aGVpciBgbWluWm9vbWAgb3B0aW9ucyB3aWxsIGJlIHVzZWQgaW5zdGVhZC5cclxuICBcdFx0bWluWm9vbTogdW5kZWZpbmVkLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhab29tOiBOdW1iZXIgPSAqXHJcbiAgXHRcdC8vIE1heGltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwLlxyXG4gIFx0XHQvLyBJZiBub3Qgc3BlY2lmaWVkIGFuZCBhdCBsZWFzdCBvbmUgYEdyaWRMYXllcmAgb3IgYFRpbGVMYXllcmAgaXMgaW4gdGhlIG1hcCxcclxuICBcdFx0Ly8gdGhlIGhpZ2hlc3Qgb2YgdGhlaXIgYG1heFpvb21gIG9wdGlvbnMgd2lsbCBiZSB1c2VkIGluc3RlYWQuXHJcbiAgXHRcdG1heFpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbGF5ZXJzOiBMYXllcltdID0gW11cclxuICBcdFx0Ly8gQXJyYXkgb2YgbGF5ZXJzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFwIGluaXRpYWxseVxyXG4gIFx0XHRsYXllcnM6IFtdLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhCb3VuZHM6IExhdExuZ0JvdW5kcyA9IG51bGxcclxuICBcdFx0Ly8gV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBtYXAgcmVzdHJpY3RzIHRoZSB2aWV3IHRvIHRoZSBnaXZlblxyXG4gIFx0XHQvLyBnZW9ncmFwaGljYWwgYm91bmRzLCBib3VuY2luZyB0aGUgdXNlciBiYWNrIGlmIHRoZSB1c2VyIHRyaWVzIHRvIHBhblxyXG4gIFx0XHQvLyBvdXRzaWRlIHRoZSB2aWV3LiBUbyBzZXQgdGhlIHJlc3RyaWN0aW9uIGR5bmFtaWNhbGx5LCB1c2VcclxuICBcdFx0Ly8gW2BzZXRNYXhCb3VuZHNgXSgjbWFwLXNldG1heGJvdW5kcykgbWV0aG9kLlxyXG4gIFx0XHRtYXhCb3VuZHM6IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcmVuZGVyZXI6IFJlbmRlcmVyID0gKlxyXG4gIFx0XHQvLyBUaGUgZGVmYXVsdCBtZXRob2QgZm9yIGRyYXdpbmcgdmVjdG9yIGxheWVycyBvbiB0aGUgbWFwLiBgTC5TVkdgXHJcbiAgXHRcdC8vIG9yIGBMLkNhbnZhc2AgYnkgZGVmYXVsdCBkZXBlbmRpbmcgb24gYnJvd3NlciBzdXBwb3J0LlxyXG4gIFx0XHRyZW5kZXJlcjogdW5kZWZpbmVkLFxyXG5cclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIEFuaW1hdGlvbiBPcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbUFuaW1hdGlvbjogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFwIHpvb20gYW5pbWF0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQgaXQncyBlbmFibGVkXHJcbiAgXHRcdC8vIGluIGFsbCBicm93c2VycyB0aGF0IHN1cHBvcnQgQ1NTMyBUcmFuc2l0aW9ucyBleGNlcHQgQW5kcm9pZC5cclxuICBcdFx0em9vbUFuaW1hdGlvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbUFuaW1hdGlvblRocmVzaG9sZDogTnVtYmVyID0gNFxyXG4gIFx0XHQvLyBXb24ndCBhbmltYXRlIHpvb20gaWYgdGhlIHpvb20gZGlmZmVyZW5jZSBleGNlZWRzIHRoaXMgdmFsdWUuXHJcbiAgXHRcdHpvb21BbmltYXRpb25UaHJlc2hvbGQ6IDQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGZhZGVBbmltYXRpb246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIHRpbGUgZmFkZSBhbmltYXRpb24gaXMgZW5hYmxlZC4gQnkgZGVmYXVsdCBpdCdzIGVuYWJsZWRcclxuICBcdFx0Ly8gaW4gYWxsIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBDU1MzIFRyYW5zaXRpb25zIGV4Y2VwdCBBbmRyb2lkLlxyXG4gIFx0XHRmYWRlQW5pbWF0aW9uOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXJrZXJab29tQW5pbWF0aW9uOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIG1hcmtlcnMgYW5pbWF0ZSB0aGVpciB6b29tIHdpdGggdGhlIHpvb20gYW5pbWF0aW9uLCBpZiBkaXNhYmxlZFxyXG4gIFx0XHQvLyB0aGV5IHdpbGwgZGlzYXBwZWFyIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBhbmltYXRpb24uIEJ5IGRlZmF1bHQgaXQnc1xyXG4gIFx0XHQvLyBlbmFibGVkIGluIGFsbCBicm93c2VycyB0aGF0IHN1cHBvcnQgQ1NTMyBUcmFuc2l0aW9ucyBleGNlcHQgQW5kcm9pZC5cclxuICBcdFx0bWFya2VyWm9vbUFuaW1hdGlvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdHJhbnNmb3JtM0RMaW1pdDogTnVtYmVyID0gMl4yM1xyXG4gIFx0XHQvLyBEZWZpbmVzIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBDU1MgdHJhbnNsYXRpb24gdHJhbnNmb3JtLiBUaGUgZGVmYXVsdFxyXG4gIFx0XHQvLyB2YWx1ZSBzaG91bGQgbm90IGJlIGNoYW5nZWQgdW5sZXNzIGEgd2ViIGJyb3dzZXIgcG9zaXRpb25zIGxheWVycyBpblxyXG4gIFx0XHQvLyB0aGUgd3JvbmcgcGxhY2UgYWZ0ZXIgZG9pbmcgYSBsYXJnZSBgcGFuQnlgLlxyXG4gIFx0XHR0cmFuc2Zvcm0zRExpbWl0OiA4Mzg4NjA4LCAvLyBQcmVjaXNpb24gbGltaXQgb2YgYSAzMi1iaXQgZmxvYXRcclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tU25hcDogTnVtYmVyID0gMVxyXG4gIFx0XHQvLyBGb3JjZXMgdGhlIG1hcCdzIHpvb20gbGV2ZWwgdG8gYWx3YXlzIGJlIGEgbXVsdGlwbGUgb2YgdGhpcywgcGFydGljdWxhcmx5XHJcbiAgXHRcdC8vIHJpZ2h0IGFmdGVyIGEgW2BmaXRCb3VuZHMoKWBdKCNtYXAtZml0Ym91bmRzKSBvciBhIHBpbmNoLXpvb20uXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIHRoZSB6b29tIGxldmVsIHNuYXBzIHRvIHRoZSBuZWFyZXN0IGludGVnZXI7IGxvd2VyIHZhbHVlc1xyXG4gIFx0XHQvLyAoZS5nLiBgMC41YCBvciBgMC4xYCkgYWxsb3cgZm9yIGdyZWF0ZXIgZ3JhbnVsYXJpdHkuIEEgdmFsdWUgb2YgYDBgXHJcbiAgXHRcdC8vIG1lYW5zIHRoZSB6b29tIGxldmVsIHdpbGwgbm90IGJlIHNuYXBwZWQgYWZ0ZXIgYGZpdEJvdW5kc2Agb3IgYSBwaW5jaC16b29tLlxyXG4gIFx0XHR6b29tU25hcDogMSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbURlbHRhOiBOdW1iZXIgPSAxXHJcbiAgXHRcdC8vIENvbnRyb2xzIGhvdyBtdWNoIHRoZSBtYXAncyB6b29tIGxldmVsIHdpbGwgY2hhbmdlIGFmdGVyIGFcclxuICBcdFx0Ly8gW2B6b29tSW4oKWBdKCNtYXAtem9vbWluKSwgW2B6b29tT3V0KClgXSgjbWFwLXpvb21vdXQpLCBwcmVzc2luZyBgK2BcclxuICBcdFx0Ly8gb3IgYC1gIG9uIHRoZSBrZXlib2FyZCwgb3IgdXNpbmcgdGhlIFt6b29tIGNvbnRyb2xzXSgjY29udHJvbC16b29tKS5cclxuICBcdFx0Ly8gVmFsdWVzIHNtYWxsZXIgdGhhbiBgMWAgKGUuZy4gYDAuNWApIGFsbG93IGZvciBncmVhdGVyIGdyYW51bGFyaXR5LlxyXG4gIFx0XHR6b29tRGVsdGE6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRyYWNrUmVzaXplOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBtYXAgYXV0b21hdGljYWxseSBoYW5kbGVzIGJyb3dzZXIgd2luZG93IHJlc2l6ZSB0byB1cGRhdGUgaXRzZWxmLlxyXG4gIFx0XHR0cmFja1Jlc2l6ZTogdHJ1ZVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoaWQsIG9wdGlvbnMpIHsgLy8gKEhUTUxFbGVtZW50IG9yIFN0cmluZywgT2JqZWN0KVxyXG4gIFx0XHRvcHRpb25zID0gc2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdC8vIE1ha2Ugc3VyZSB0byBhc3NpZ24gaW50ZXJuYWwgZmxhZ3MgYXQgdGhlIGJlZ2lubmluZyxcclxuICBcdFx0Ly8gdG8gYXZvaWQgaW5jb25zaXN0ZW50IHN0YXRlIGluIHNvbWUgZWRnZSBjYXNlcy5cclxuICBcdFx0dGhpcy5faGFuZGxlcnMgPSBbXTtcclxuICBcdFx0dGhpcy5fbGF5ZXJzID0ge307XHJcbiAgXHRcdHRoaXMuX3pvb21Cb3VuZExheWVycyA9IHt9O1xyXG4gIFx0XHR0aGlzLl9zaXplQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0Q29udGFpbmVyKGlkKTtcclxuICBcdFx0dGhpcy5faW5pdExheW91dCgpO1xyXG5cclxuICBcdFx0Ly8gaGFjayBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0xlYWZsZXQvTGVhZmxldC9pc3N1ZXMvMTk4MFxyXG4gIFx0XHR0aGlzLl9vblJlc2l6ZSA9IGJpbmQodGhpcy5fb25SZXNpemUsIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5faW5pdEV2ZW50cygpO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMubWF4Qm91bmRzKSB7XHJcbiAgXHRcdFx0dGhpcy5zZXRNYXhCb3VuZHMob3B0aW9ucy5tYXhCb3VuZHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy56b29tICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aGlzLl96b29tID0gdGhpcy5fbGltaXRab29tKG9wdGlvbnMuem9vbSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLmNlbnRlciAmJiBvcHRpb25zLnpvb20gIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdHRoaXMuc2V0Vmlldyh0b0xhdExuZyhvcHRpb25zLmNlbnRlciksIG9wdGlvbnMuem9vbSwge3Jlc2V0OiB0cnVlfSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuY2FsbEluaXRIb29rcygpO1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSBvbiBicm93c2VycyB3aXRob3V0IGhhcmR3YXJlLWFjY2VsZXJhdGVkIHRyYW5zaXRpb25zIG9yIG9sZCBBbmRyb2lkL09wZXJhXHJcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IFRSQU5TSVRJT04gJiYgQnJvd3Nlci5hbnkzZCAmJiAhQnJvd3Nlci5tb2JpbGVPcGVyYSAmJlxyXG4gIFx0XHRcdFx0dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb247XHJcblxyXG4gIFx0XHQvLyB6b29tIHRyYW5zaXRpb25zIHJ1biB3aXRoIHRoZSBzYW1lIGR1cmF0aW9uIGZvciBhbGwgbGF5ZXJzLCBzbyBpZiBvbmUgb2YgdHJhbnNpdGlvbmVuZCBldmVudHNcclxuICBcdFx0Ly8gaGFwcGVucyBhZnRlciBzdGFydGluZyB6b29tIGFuaW1hdGlvbiAocHJvcGFnYXRpbmcgdG8gdGhlIG1hcCBwYW5lKSwgd2Uga25vdyB0aGF0IGl0IGVuZGVkIGdsb2JhbGx5XHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHR0aGlzLl9jcmVhdGVBbmltUHJveHkoKTtcclxuICBcdFx0XHRvbih0aGlzLl9wcm94eSwgVFJBTlNJVElPTl9FTkQsIHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2FkZExheWVycyh0aGlzLm9wdGlvbnMubGF5ZXJzKTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIG1vZGlmeWluZyBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFZpZXcoY2VudGVyOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9ucz86IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgKGdlb2dyYXBoaWNhbCBjZW50ZXIgYW5kIHpvb20pIHdpdGggdGhlIGdpdmVuXHJcbiAgXHQvLyBhbmltYXRpb24gb3B0aW9ucy5cclxuICBcdHNldFZpZXc6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl96b29tIDogdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG4gIFx0XHRjZW50ZXIgPSB0aGlzLl9saW1pdENlbnRlcih0b0xhdExuZyhjZW50ZXIpLCB6b29tLCB0aGlzLm9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIFx0XHR0aGlzLl9zdG9wKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmICFvcHRpb25zLnJlc2V0ICYmIG9wdGlvbnMgIT09IHRydWUpIHtcclxuXHJcbiAgXHRcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnpvb20gPSBleHRlbmQoe2FuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZX0sIG9wdGlvbnMuem9vbSk7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnBhbiA9IGV4dGVuZCh7YW5pbWF0ZTogb3B0aW9ucy5hbmltYXRlLCBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbn0sIG9wdGlvbnMucGFuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIHRyeSBhbmltYXRpbmcgcGFuIG9yIHpvb21cclxuICBcdFx0XHR2YXIgbW92ZWQgPSAodGhpcy5fem9vbSAhPT0gem9vbSkgP1xyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRab29tICYmIHRoaXMuX3RyeUFuaW1hdGVkWm9vbShjZW50ZXIsIHpvb20sIG9wdGlvbnMuem9vbSkgOlxyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRQYW4oY2VudGVyLCBvcHRpb25zLnBhbik7XHJcblxyXG4gIFx0XHRcdGlmIChtb3ZlZCkge1xyXG4gIFx0XHRcdFx0Ly8gcHJldmVudCByZXNpemUgaGFuZGxlciBjYWxsLCB0aGUgdmlldyB3aWxsIHJlZnJlc2ggYWZ0ZXIgYW5pbWF0aW9uIGFueXdheVxyXG4gIFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lcik7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGlvbiBkaWRuJ3Qgc3RhcnQsIGp1c3QgcmVzZXQgdGhlIG1hcCB2aWV3XHJcbiAgXHRcdHRoaXMuX3Jlc2V0VmlldyhjZW50ZXIsIHpvb20sIG9wdGlvbnMucGFuICYmIG9wdGlvbnMucGFuLm5vTW92ZVN0YXJ0KTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpvb20oem9vbTogTnVtYmVyLCBvcHRpb25zPzogWm9vbS9wYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHpvb20gb2YgdGhlIG1hcC5cclxuICBcdHNldFpvb206IGZ1bmN0aW9uICh6b29tLCBvcHRpb25zKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fem9vbSA9IHpvb207XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLCB6b29tLCB7em9vbTogb3B0aW9uc30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb21JbihkZWx0YT86IE51bWJlciwgb3B0aW9ucz86IFpvb20gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIEluY3JlYXNlcyB0aGUgem9vbSBvZiB0aGUgbWFwIGJ5IGBkZWx0YWAgKFtgem9vbURlbHRhYF0oI21hcC16b29tZGVsdGEpIGJ5IGRlZmF1bHQpLlxyXG4gIFx0em9vbUluOiBmdW5jdGlvbiAoZGVsdGEsIG9wdGlvbnMpIHtcclxuICBcdFx0ZGVsdGEgPSBkZWx0YSB8fCAoQnJvd3Nlci5hbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tICsgZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb21PdXQoZGVsdGE/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBEZWNyZWFzZXMgdGhlIHpvb20gb2YgdGhlIG1hcCBieSBgZGVsdGFgIChbYHpvb21EZWx0YWBdKCNtYXAtem9vbWRlbHRhKSBieSBkZWZhdWx0KS5cclxuICBcdHpvb21PdXQ6IGZ1bmN0aW9uIChkZWx0YSwgb3B0aW9ucykge1xyXG4gIFx0XHRkZWx0YSA9IGRlbHRhIHx8IChCcm93c2VyLmFueTNkID8gdGhpcy5vcHRpb25zLnpvb21EZWx0YSA6IDEpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRab29tKHRoaXMuX3pvb20gLSBkZWx0YSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Wm9vbUFyb3VuZChsYXRsbmc6IExhdExuZywgem9vbTogTnVtYmVyLCBvcHRpb25zOiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBab29tcyB0aGUgbWFwIHdoaWxlIGtlZXBpbmcgYSBzcGVjaWZpZWQgZ2VvZ3JhcGhpY2FsIHBvaW50IG9uIHRoZSBtYXBcclxuICBcdC8vIHN0YXRpb25hcnkgKGUuZy4gdXNlZCBpbnRlcm5hbGx5IGZvciBzY3JvbGwgem9vbSBhbmQgZG91YmxlLWNsaWNrIHpvb20pLlxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpvb21Bcm91bmQob2Zmc2V0OiBQb2ludCwgem9vbTogTnVtYmVyLCBvcHRpb25zOiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBab29tcyB0aGUgbWFwIHdoaWxlIGtlZXBpbmcgYSBzcGVjaWZpZWQgcGl4ZWwgb24gdGhlIG1hcCAocmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lcikgc3RhdGlvbmFyeS5cclxuICBcdHNldFpvb21Bcm91bmQ6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20sIG9wdGlvbnMpIHtcclxuICBcdFx0dmFyIHNjYWxlID0gdGhpcy5nZXRab29tU2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLFxyXG4gIFx0XHQgICAgY29udGFpbmVyUG9pbnQgPSBsYXRsbmcgaW5zdGFuY2VvZiBQb2ludCA/IGxhdGxuZyA6IHRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChsYXRsbmcpLFxyXG5cclxuICBcdFx0ICAgIGNlbnRlck9mZnNldCA9IGNvbnRhaW5lclBvaW50LnN1YnRyYWN0KHZpZXdIYWxmKS5tdWx0aXBseUJ5KDEgLSAxIC8gc2NhbGUpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gdGhpcy5jb250YWluZXJQb2ludFRvTGF0TG5nKHZpZXdIYWxmLmFkZChjZW50ZXJPZmZzZXQpKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnNldFZpZXcobmV3Q2VudGVyLCB6b29tLCB7em9vbTogb3B0aW9uc30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0Qm91bmRzQ2VudGVyWm9vbTogZnVuY3Rpb24gKGJvdW5kcywgb3B0aW9ucykge1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgXHRcdGJvdW5kcyA9IGJvdW5kcy5nZXRCb3VuZHMgPyBib3VuZHMuZ2V0Qm91bmRzKCkgOiB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIHBhZGRpbmdUTCA9IHRvUG9pbnQob3B0aW9ucy5wYWRkaW5nVG9wTGVmdCB8fCBvcHRpb25zLnBhZGRpbmcgfHwgWzAsIDBdKSxcclxuICBcdFx0ICAgIHBhZGRpbmdCUiA9IHRvUG9pbnQob3B0aW9ucy5wYWRkaW5nQm90dG9tUmlnaHQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcblxyXG4gIFx0XHQgICAgem9vbSA9IHRoaXMuZ2V0Qm91bmRzWm9vbShib3VuZHMsIGZhbHNlLCBwYWRkaW5nVEwuYWRkKHBhZGRpbmdCUikpO1xyXG5cclxuICBcdFx0em9vbSA9ICh0eXBlb2Ygb3B0aW9ucy5tYXhab29tID09PSAnbnVtYmVyJykgPyBNYXRoLm1pbihvcHRpb25zLm1heFpvb20sIHpvb20pIDogem9vbTtcclxuXHJcbiAgXHRcdGlmICh6b29tID09PSBJbmZpbml0eSkge1xyXG4gIFx0XHRcdHJldHVybiB7XHJcbiAgXHRcdFx0XHRjZW50ZXI6IGJvdW5kcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0XHRcdHpvb206IHpvb21cclxuICBcdFx0XHR9O1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgcGFkZGluZ09mZnNldCA9IHBhZGRpbmdCUi5zdWJ0cmFjdChwYWRkaW5nVEwpLmRpdmlkZUJ5KDIpLFxyXG5cclxuICBcdFx0ICAgIHN3UG9pbnQgPSB0aGlzLnByb2plY3QoYm91bmRzLmdldFNvdXRoV2VzdCgpLCB6b29tKSxcclxuICBcdFx0ICAgIG5lUG9pbnQgPSB0aGlzLnByb2plY3QoYm91bmRzLmdldE5vcnRoRWFzdCgpLCB6b29tKSxcclxuICBcdFx0ICAgIGNlbnRlciA9IHRoaXMudW5wcm9qZWN0KHN3UG9pbnQuYWRkKG5lUG9pbnQpLmRpdmlkZUJ5KDIpLmFkZChwYWRkaW5nT2Zmc2V0KSwgem9vbSk7XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdGNlbnRlcjogY2VudGVyLFxyXG4gIFx0XHRcdHpvb206IHpvb21cclxuICBcdFx0fTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmaXRCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBmaXRCb3VuZHMgb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFNldHMgYSBtYXAgdmlldyB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBnZW9ncmFwaGljYWwgYm91bmRzIHdpdGggdGhlXHJcbiAgXHQvLyBtYXhpbXVtIHpvb20gbGV2ZWwgcG9zc2libGUuXHJcbiAgXHRmaXRCb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAoIWJvdW5kcy5pc1ZhbGlkKCkpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0JvdW5kcyBhcmUgbm90IHZhbGlkLicpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5fZ2V0Qm91bmRzQ2VudGVyWm9vbShib3VuZHMsIG9wdGlvbnMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KHRhcmdldC5jZW50ZXIsIHRhcmdldC56b29tLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmaXRXb3JsZChvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIGEgbWFwIHZpZXcgdGhhdCBtb3N0bHkgY29udGFpbnMgdGhlIHdob2xlIHdvcmxkIHdpdGggdGhlIG1heGltdW1cclxuICBcdC8vIHpvb20gbGV2ZWwgcG9zc2libGUuXHJcbiAgXHRmaXRXb3JsZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLCAtMTgwXSwgWzkwLCAxODBdXSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFuVG8obGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0byBhIGdpdmVuIGNlbnRlci5cclxuICBcdHBhblRvOiBmdW5jdGlvbiAoY2VudGVyLCBvcHRpb25zKSB7IC8vIChMYXRMbmcpXHJcbiAgXHRcdHJldHVybiB0aGlzLnNldFZpZXcoY2VudGVyLCB0aGlzLl96b29tLCB7cGFuOiBvcHRpb25zfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFuQnkob2Zmc2V0OiBQb2ludCwgb3B0aW9ucz86IFBhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gUGFucyB0aGUgbWFwIGJ5IGEgZ2l2ZW4gbnVtYmVyIG9mIHBpeGVscyAoYW5pbWF0ZWQpLlxyXG4gIFx0cGFuQnk6IGZ1bmN0aW9uIChvZmZzZXQsIG9wdGlvbnMpIHtcclxuICBcdFx0b2Zmc2V0ID0gdG9Qb2ludChvZmZzZXQpLnJvdW5kKCk7XHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICBcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHRcdH1cclxuICBcdFx0Ly8gSWYgd2UgcGFuIHRvbyBmYXIsIENocm9tZSBnZXRzIGlzc3VlcyB3aXRoIHRpbGVzXHJcbiAgXHRcdC8vIGFuZCBtYWtlcyB0aGVtIGRpc2FwcGVhciBvciBhcHBlYXIgaW4gdGhlIHdyb25nIHBsYWNlIChzbGlnaHRseSBvZmZzZXQpICMyNjAyXHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgIT09IHRydWUgJiYgIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG9mZnNldCkpIHtcclxuICBcdFx0XHR0aGlzLl9yZXNldFZpZXcodGhpcy51bnByb2plY3QodGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLmFkZChvZmZzZXQpKSwgdGhpcy5nZXRab29tKCkpO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX3BhbkFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltID0gbmV3IFBvc0FuaW1hdGlvbigpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLm9uKHtcclxuICBcdFx0XHRcdCdzdGVwJzogdGhpcy5fb25QYW5UcmFuc2l0aW9uU3RlcCxcclxuICBcdFx0XHRcdCdlbmQnOiB0aGlzLl9vblBhblRyYW5zaXRpb25FbmRcclxuICBcdFx0XHR9LCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gZG9uJ3QgZmlyZSBtb3Zlc3RhcnQgaWYgYW5pbWF0aW5nIGluZXJ0aWFcclxuICBcdFx0aWYgKCFvcHRpb25zLm5vTW92ZVN0YXJ0KSB7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCdtb3Zlc3RhcnQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gYW5pbWF0ZSBwYW4gdW5sZXNzIGFuaW1hdGU6IGZhbHNlIHNwZWNpZmllZFxyXG4gIFx0XHRpZiAob3B0aW9ucy5hbmltYXRlICE9PSBmYWxzZSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXBhbi1hbmltJyk7XHJcblxyXG4gIFx0XHRcdHZhciBuZXdQb3MgPSB0aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3Qob2Zmc2V0KS5yb3VuZCgpO1xyXG4gIFx0XHRcdHRoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsIG5ld1Bvcywgb3B0aW9ucy5kdXJhdGlvbiB8fCAwLjI1LCBvcHRpb25zLmVhc2VMaW5lYXJpdHkpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHRoaXMuX3Jhd1BhbkJ5KG9mZnNldCk7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCdtb3ZlJykuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmbHlUbyhsYXRsbmc6IExhdExuZywgem9vbT86IE51bWJlciwgb3B0aW9ucz86IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgKGdlb2dyYXBoaWNhbCBjZW50ZXIgYW5kIHpvb20pIHBlcmZvcm1pbmcgYSBzbW9vdGhcclxuICBcdC8vIHBhbi16b29tIGFuaW1hdGlvbi5cclxuICBcdGZseVRvOiBmdW5jdGlvbiAodGFyZ2V0Q2VudGVyLCB0YXJnZXRab29tLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgIUJyb3dzZXIuYW55M2QpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KHRhcmdldENlbnRlciwgdGFyZ2V0Wm9vbSwgb3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3N0b3AoKTtcclxuXHJcbiAgXHRcdHZhciBmcm9tID0gdGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLFxyXG4gIFx0XHQgICAgdG8gPSB0aGlzLnByb2plY3QodGFyZ2V0Q2VudGVyKSxcclxuICBcdFx0ICAgIHNpemUgPSB0aGlzLmdldFNpemUoKSxcclxuICBcdFx0ICAgIHN0YXJ0Wm9vbSA9IHRoaXMuX3pvb207XHJcblxyXG4gIFx0XHR0YXJnZXRDZW50ZXIgPSB0b0xhdExuZyh0YXJnZXRDZW50ZXIpO1xyXG4gIFx0XHR0YXJnZXRab29tID0gdGFyZ2V0Wm9vbSA9PT0gdW5kZWZpbmVkID8gc3RhcnRab29tIDogdGFyZ2V0Wm9vbTtcclxuXHJcbiAgXHRcdHZhciB3MCA9IE1hdGgubWF4KHNpemUueCwgc2l6ZS55KSxcclxuICBcdFx0ICAgIHcxID0gdzAgKiB0aGlzLmdldFpvb21TY2FsZShzdGFydFpvb20sIHRhcmdldFpvb20pLFxyXG4gIFx0XHQgICAgdTEgPSAodG8uZGlzdGFuY2VUbyhmcm9tKSkgfHwgMSxcclxuICBcdFx0ICAgIHJobyA9IDEuNDIsXHJcbiAgXHRcdCAgICByaG8yID0gcmhvICogcmhvO1xyXG5cclxuICBcdFx0ZnVuY3Rpb24gcihpKSB7XHJcbiAgXHRcdFx0dmFyIHMxID0gaSA/IC0xIDogMSxcclxuICBcdFx0XHQgICAgczIgPSBpID8gdzEgOiB3MCxcclxuICBcdFx0XHQgICAgdDEgPSB3MSAqIHcxIC0gdzAgKiB3MCArIHMxICogcmhvMiAqIHJobzIgKiB1MSAqIHUxLFxyXG4gIFx0XHRcdCAgICBiMSA9IDIgKiBzMiAqIHJobzIgKiB1MSxcclxuICBcdFx0XHQgICAgYiA9IHQxIC8gYjEsXHJcbiAgXHRcdFx0ICAgIHNxID0gTWF0aC5zcXJ0KGIgKiBiICsgMSkgLSBiO1xyXG5cclxuICBcdFx0XHQgICAgLy8gd29ya2Fyb3VuZCBmb3IgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uIGJ1ZyB3aGVuIHNxID0gMCwgbG9nID0gLUluZmluaXRlLFxyXG4gIFx0XHRcdCAgICAvLyB0aHVzIHRyaWdnZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBpbiBmbHlUb1xyXG4gIFx0XHRcdCAgICB2YXIgbG9nID0gc3EgPCAwLjAwMDAwMDAwMSA/IC0xOCA6IE1hdGgubG9nKHNxKTtcclxuXHJcbiAgXHRcdFx0cmV0dXJuIGxvZztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZnVuY3Rpb24gc2luaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgLSBNYXRoLmV4cCgtbikpIC8gMjsgfVxyXG4gIFx0XHRmdW5jdGlvbiBjb3NoKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSArIE1hdGguZXhwKC1uKSkgLyAyOyB9XHJcbiAgXHRcdGZ1bmN0aW9uIHRhbmgobikgeyByZXR1cm4gc2luaChuKSAvIGNvc2gobik7IH1cclxuXHJcbiAgXHRcdHZhciByMCA9IHIoMCk7XHJcblxyXG4gIFx0XHRmdW5jdGlvbiB3KHMpIHsgcmV0dXJuIHcwICogKGNvc2gocjApIC8gY29zaChyMCArIHJobyAqIHMpKTsgfVxyXG4gIFx0XHRmdW5jdGlvbiB1KHMpIHsgcmV0dXJuIHcwICogKGNvc2gocjApICogdGFuaChyMCArIHJobyAqIHMpIC0gc2luaChyMCkpIC8gcmhvMjsgfVxyXG5cclxuICBcdFx0ZnVuY3Rpb24gZWFzZU91dCh0KSB7IHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHQsIDEuNSk7IH1cclxuXHJcbiAgXHRcdHZhciBzdGFydCA9IERhdGUubm93KCksXHJcbiAgXHRcdCAgICBTID0gKHIoMSkgLSByMCkgLyByaG8sXHJcbiAgXHRcdCAgICBkdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb24gPyAxMDAwICogb3B0aW9ucy5kdXJhdGlvbiA6IDEwMDAgKiBTICogMC44O1xyXG5cclxuICBcdFx0ZnVuY3Rpb24gZnJhbWUoKSB7XHJcbiAgXHRcdFx0dmFyIHQgPSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIGR1cmF0aW9uLFxyXG4gIFx0XHRcdCAgICBzID0gZWFzZU91dCh0KSAqIFM7XHJcblxyXG4gIFx0XHRcdGlmICh0IDw9IDEpIHtcclxuICBcdFx0XHRcdHRoaXMuX2ZseVRvRnJhbWUgPSByZXF1ZXN0QW5pbUZyYW1lKGZyYW1lLCB0aGlzKTtcclxuXHJcbiAgXHRcdFx0XHR0aGlzLl9tb3ZlKFxyXG4gIFx0XHRcdFx0XHR0aGlzLnVucHJvamVjdChmcm9tLmFkZCh0by5zdWJ0cmFjdChmcm9tKS5tdWx0aXBseUJ5KHUocykgLyB1MSkpLCBzdGFydFpvb20pLFxyXG4gIFx0XHRcdFx0XHR0aGlzLmdldFNjYWxlWm9vbSh3MCAvIHcocyksIHN0YXJ0Wm9vbSksXHJcbiAgXHRcdFx0XHRcdHtmbHlUbzogdHJ1ZX0pO1xyXG5cclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpc1xyXG4gIFx0XHRcdFx0XHQuX21vdmUodGFyZ2V0Q2VudGVyLCB0YXJnZXRab29tKVxyXG4gIFx0XHRcdFx0XHQuX21vdmVFbmQodHJ1ZSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlU3RhcnQodHJ1ZSwgb3B0aW9ucy5ub01vdmVTdGFydCk7XHJcblxyXG4gIFx0XHRmcmFtZS5jYWxsKHRoaXMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmbHlUb0JvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IGZpdEJvdW5kcyBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdmlldyBvZiB0aGUgbWFwIHdpdGggYSBzbW9vdGggYW5pbWF0aW9uIGxpa2UgW2BmbHlUb2BdKCNtYXAtZmx5dG8pLFxyXG4gIFx0Ly8gYnV0IHRha2VzIGEgYm91bmRzIHBhcmFtZXRlciBsaWtlIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIFx0Zmx5VG9Cb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuICBcdFx0dmFyIHRhcmdldCA9IHRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20oYm91bmRzLCBvcHRpb25zKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuZmx5VG8odGFyZ2V0LmNlbnRlciwgdGFyZ2V0Lnpvb20sIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE1heEJvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcyk6IHRoaXNcclxuICBcdC8vIFJlc3RyaWN0cyB0aGUgbWFwIHZpZXcgdG8gdGhlIGdpdmVuIGJvdW5kcyAoc2VlIHRoZSBbbWF4Qm91bmRzXSgjbWFwLW1heGJvdW5kcykgb3B0aW9uKS5cclxuICBcdHNldE1heEJvdW5kczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMubGlzdGVucygnbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpIHtcclxuICBcdFx0XHR0aGlzLm9mZignbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghYm91bmRzLmlzVmFsaWQoKSkge1xyXG4gIFx0XHRcdHRoaXMub3B0aW9ucy5tYXhCb3VuZHMgPSBudWxsO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLm9wdGlvbnMubWF4Qm91bmRzID0gYm91bmRzO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcygpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5vbignbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TWluWm9vbSh6b29tOiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSBsb3dlciBsaW1pdCBmb3IgdGhlIGF2YWlsYWJsZSB6b29tIGxldmVscyAoc2VlIHRoZSBbbWluWm9vbV0oI21hcC1taW56b29tKSBvcHRpb24pLlxyXG4gIFx0c2V0TWluWm9vbTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0dmFyIG9sZFpvb20gPSB0aGlzLm9wdGlvbnMubWluWm9vbTtcclxuICBcdFx0dGhpcy5vcHRpb25zLm1pblpvb20gPSB6b29tO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCAmJiBvbGRab29tICE9PSB6b29tKSB7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCd6b29tbGV2ZWxzY2hhbmdlJyk7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLmdldFpvb20oKSA8IHRoaXMub3B0aW9ucy5taW5ab29tKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRab29tKHpvb20pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TWF4Wm9vbSh6b29tOiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB1cHBlciBsaW1pdCBmb3IgdGhlIGF2YWlsYWJsZSB6b29tIGxldmVscyAoc2VlIHRoZSBbbWF4Wm9vbV0oI21hcC1tYXh6b29tKSBvcHRpb24pLlxyXG4gIFx0c2V0TWF4Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0dmFyIG9sZFpvb20gPSB0aGlzLm9wdGlvbnMubWF4Wm9vbTtcclxuICBcdFx0dGhpcy5vcHRpb25zLm1heFpvb20gPSB6b29tO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCAmJiBvbGRab29tICE9PSB6b29tKSB7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCd6b29tbGV2ZWxzY2hhbmdlJyk7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLmdldFpvb20oKSA+IHRoaXMub3B0aW9ucy5tYXhab29tKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRab29tKHpvb20pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFuSW5zaWRlQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogUGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBQYW5zIHRoZSBtYXAgdG8gdGhlIGNsb3Nlc3QgdmlldyB0aGF0IHdvdWxkIGxpZSBpbnNpZGUgdGhlIGdpdmVuIGJvdW5kcyAoaWYgaXQncyBub3QgYWxyZWFkeSksIGNvbnRyb2xsaW5nIHRoZSBhbmltYXRpb24gdXNpbmcgdGhlIG9wdGlvbnMgc3BlY2lmaWMsIGlmIGFueS5cclxuICBcdHBhbkluc2lkZUJvdW5kczogZnVuY3Rpb24gKGJvdW5kcywgb3B0aW9ucykge1xyXG4gIFx0XHR0aGlzLl9lbmZvcmNpbmdCb3VuZHMgPSB0cnVlO1xyXG4gIFx0XHR2YXIgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IHRoaXMuX2xpbWl0Q2VudGVyKGNlbnRlciwgdGhpcy5fem9vbSwgdG9MYXRMbmdCb3VuZHMoYm91bmRzKSk7XHJcblxyXG4gIFx0XHRpZiAoIWNlbnRlci5lcXVhbHMobmV3Q2VudGVyKSkge1xyXG4gIFx0XHRcdHRoaXMucGFuVG8obmV3Q2VudGVyLCBvcHRpb25zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fZW5mb3JjaW5nQm91bmRzID0gZmFsc2U7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhbkluc2lkZShsYXRsbmc6IExhdExuZywgb3B0aW9ucz86IHBhZGRpbmcgb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0aGUgbWluaW11bSBhbW91bnQgdG8gbWFrZSB0aGUgYGxhdGxuZ2AgdmlzaWJsZS4gVXNlXHJcbiAgXHQvLyBwYWRkaW5nIG9wdGlvbnMgdG8gZml0IHRoZSBkaXNwbGF5IHRvIG1vcmUgcmVzdHJpY3RlZCBib3VuZHMuXHJcbiAgXHQvLyBJZiBgbGF0bG5nYCBpcyBhbHJlYWR5IHdpdGhpbiB0aGUgKG9wdGlvbmFsbHkgcGFkZGVkKSBkaXNwbGF5IGJvdW5kcyxcclxuICBcdC8vIHRoZSBtYXAgd2lsbCBub3QgYmUgcGFubmVkLlxyXG4gIFx0cGFuSW5zaWRlOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICBcdFx0dmFyIHBhZGRpbmdUTCA9IHRvUG9pbnQob3B0aW9ucy5wYWRkaW5nVG9wTGVmdCB8fCBvcHRpb25zLnBhZGRpbmcgfHwgWzAsIDBdKSxcclxuICBcdFx0ICAgIHBhZGRpbmdCUiA9IHRvUG9pbnQob3B0aW9ucy5wYWRkaW5nQm90dG9tUmlnaHQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwaXhlbENlbnRlciA9IHRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSxcclxuICBcdFx0ICAgIHBpeGVsUG9pbnQgPSB0aGlzLnByb2plY3QobGF0bG5nKSxcclxuICBcdFx0ICAgIHBpeGVsQm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgcGFkZGVkQm91bmRzID0gdG9Cb3VuZHMoW3BpeGVsQm91bmRzLm1pbi5hZGQocGFkZGluZ1RMKSwgcGl4ZWxCb3VuZHMubWF4LnN1YnRyYWN0KHBhZGRpbmdCUildKSxcclxuICBcdFx0ICAgIHBhZGRlZFNpemUgPSBwYWRkZWRCb3VuZHMuZ2V0U2l6ZSgpO1xyXG5cclxuICBcdFx0aWYgKCFwYWRkZWRCb3VuZHMuY29udGFpbnMocGl4ZWxQb2ludCkpIHtcclxuICBcdFx0XHR0aGlzLl9lbmZvcmNpbmdCb3VuZHMgPSB0cnVlO1xyXG4gIFx0XHRcdHZhciBjZW50ZXJPZmZzZXQgPSBwaXhlbFBvaW50LnN1YnRyYWN0KHBhZGRlZEJvdW5kcy5nZXRDZW50ZXIoKSk7XHJcbiAgXHRcdFx0dmFyIG9mZnNldCA9IHBhZGRlZEJvdW5kcy5leHRlbmQocGl4ZWxQb2ludCkuZ2V0U2l6ZSgpLnN1YnRyYWN0KHBhZGRlZFNpemUpO1xyXG4gIFx0XHRcdHBpeGVsQ2VudGVyLnggKz0gY2VudGVyT2Zmc2V0LnggPCAwID8gLW9mZnNldC54IDogb2Zmc2V0Lng7XHJcbiAgXHRcdFx0cGl4ZWxDZW50ZXIueSArPSBjZW50ZXJPZmZzZXQueSA8IDAgPyAtb2Zmc2V0LnkgOiBvZmZzZXQueTtcclxuICBcdFx0XHR0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KHBpeGVsQ2VudGVyKSwgb3B0aW9ucyk7XHJcbiAgXHRcdFx0dGhpcy5fZW5mb3JjaW5nQm91bmRzID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW52YWxpZGF0ZVNpemUob3B0aW9uczogWm9vbS9wYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBzbyDigJRcclxuICBcdC8vIGNhbGwgaXQgYWZ0ZXIgeW91J3ZlIGNoYW5nZWQgdGhlIG1hcCBzaXplIGR5bmFtaWNhbGx5LCBhbHNvIGFuaW1hdGluZ1xyXG4gIFx0Ly8gcGFuIGJ5IGRlZmF1bHQuIElmIGBvcHRpb25zLnBhbmAgaXMgYGZhbHNlYCwgcGFubmluZyB3aWxsIG5vdCBvY2N1ci5cclxuICBcdC8vIElmIGBvcHRpb25zLmRlYm91bmNlTW92ZWVuZGAgaXMgYHRydWVgLCBpdCB3aWxsIGRlbGF5IGBtb3ZlZW5kYCBldmVudCBzb1xyXG4gIFx0Ly8gdGhhdCBpdCBkb2Vzbid0IGhhcHBlbiBvZnRlbiBldmVuIGlmIHRoZSBtZXRob2QgaXMgY2FsbGVkIG1hbnlcclxuICBcdC8vIHRpbWVzIGluIGEgcm93LlxyXG5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBpbnZhbGlkYXRlU2l6ZShhbmltYXRlOiBCb29sZWFuKTogdGhpc1xyXG4gIFx0Ly8gQ2hlY2tzIGlmIHRoZSBtYXAgY29udGFpbmVyIHNpemUgY2hhbmdlZCBhbmQgdXBkYXRlcyB0aGUgbWFwIGlmIHNvIOKAlFxyXG4gIFx0Ly8gY2FsbCBpdCBhZnRlciB5b3UndmUgY2hhbmdlZCB0aGUgbWFwIHNpemUgZHluYW1pY2FsbHksIGFsc28gYW5pbWF0aW5nXHJcbiAgXHQvLyBwYW4gYnkgZGVmYXVsdC5cclxuICBcdGludmFsaWRhdGVTaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2xvYWRlZCkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0b3B0aW9ucyA9IGV4dGVuZCh7XHJcbiAgXHRcdFx0YW5pbWF0ZTogZmFsc2UsXHJcbiAgXHRcdFx0cGFuOiB0cnVlXHJcbiAgXHRcdH0sIG9wdGlvbnMgPT09IHRydWUgPyB7YW5pbWF0ZTogdHJ1ZX0gOiBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHZhciBvbGRTaXplID0gdGhpcy5nZXRTaXplKCk7XHJcbiAgXHRcdHRoaXMuX3NpemVDaGFuZ2VkID0gdHJ1ZTtcclxuICBcdFx0dGhpcy5fbGFzdENlbnRlciA9IG51bGw7XHJcblxyXG4gIFx0XHR2YXIgbmV3U2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpLFxyXG4gIFx0XHQgICAgb2xkQ2VudGVyID0gb2xkU2l6ZS5kaXZpZGVCeSgyKS5yb3VuZCgpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gbmV3U2l6ZS5kaXZpZGVCeSgyKS5yb3VuZCgpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gb2xkQ2VudGVyLnN1YnRyYWN0KG5ld0NlbnRlcik7XHJcblxyXG4gIFx0XHRpZiAoIW9mZnNldC54ICYmICFvZmZzZXQueSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAmJiBvcHRpb25zLnBhbikge1xyXG4gIFx0XHRcdHRoaXMucGFuQnkob2Zmc2V0KTtcclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0aWYgKG9wdGlvbnMucGFuKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9yYXdQYW5CeShvZmZzZXQpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dGhpcy5maXJlKCdtb3ZlJyk7XHJcblxyXG4gIFx0XHRcdGlmIChvcHRpb25zLmRlYm91bmNlTW92ZWVuZCkge1xyXG4gIFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lcik7XHJcbiAgXHRcdFx0XHR0aGlzLl9zaXplVGltZXIgPSBzZXRUaW1lb3V0KGJpbmQodGhpcy5maXJlLCB0aGlzLCAnbW92ZWVuZCcpLCAyMDApO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHR0aGlzLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCByZXNpemU6IFJlc2l6ZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBpcyByZXNpemVkLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdyZXNpemUnLCB7XHJcbiAgXHRcdFx0b2xkU2l6ZTogb2xkU2l6ZSxcclxuICBcdFx0XHRuZXdTaXplOiBuZXdTaXplXHJcbiAgXHRcdH0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNZXRob2RzIGZvciBtb2RpZnlpbmcgbWFwIHN0YXRlXHJcbiAgXHQvLyBAbWV0aG9kIHN0b3AoKTogdGhpc1xyXG4gIFx0Ly8gU3RvcHMgdGhlIGN1cnJlbnRseSBydW5uaW5nIGBwYW5Ub2Agb3IgYGZseVRvYCBhbmltYXRpb24sIGlmIGFueS5cclxuICBcdHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5zZXRab29tKHRoaXMuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSk7XHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLnpvb21TbmFwKSB7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCd2aWV3cmVzZXQnKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc3RvcCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBHZW9sb2NhdGlvbiBtZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGxvY2F0ZShvcHRpb25zPzogTG9jYXRlIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBUcmllcyB0byBsb2NhdGUgdGhlIHVzZXIgdXNpbmcgdGhlIEdlb2xvY2F0aW9uIEFQSSwgZmlyaW5nIGEgW2Bsb2NhdGlvbmZvdW5kYF0oI21hcC1sb2NhdGlvbmZvdW5kKVxyXG4gIFx0Ly8gZXZlbnQgd2l0aCBsb2NhdGlvbiBkYXRhIG9uIHN1Y2Nlc3Mgb3IgYSBbYGxvY2F0aW9uZXJyb3JgXSgjbWFwLWxvY2F0aW9uZXJyb3IpIGV2ZW50IG9uIGZhaWx1cmUsXHJcbiAgXHQvLyBhbmQgb3B0aW9uYWxseSBzZXRzIHRoZSBtYXAgdmlldyB0byB0aGUgdXNlcidzIGxvY2F0aW9uIHdpdGggcmVzcGVjdCB0b1xyXG4gIFx0Ly8gZGV0ZWN0aW9uIGFjY3VyYWN5IChvciB0byB0aGUgd29ybGQgdmlldyBpZiBnZW9sb2NhdGlvbiBmYWlsZWQpLlxyXG4gIFx0Ly8gTm90ZSB0aGF0LCBpZiB5b3VyIHBhZ2UgZG9lc24ndCB1c2UgSFRUUFMsIHRoaXMgbWV0aG9kIHdpbGwgZmFpbCBpblxyXG4gIFx0Ly8gbW9kZXJuIGJyb3dzZXJzIChbQ2hyb21lIDUwIGFuZCBuZXdlcl0oaHR0cHM6Ly9zaXRlcy5nb29nbGUuY29tL2EvY2hyb21pdW0ub3JnL2Rldi9Ib21lL2Nocm9taXVtLXNlY3VyaXR5L2RlcHJlY2F0aW5nLXBvd2VyZnVsLWZlYXR1cmVzLW9uLWluc2VjdXJlLW9yaWdpbnMpKVxyXG4gIFx0Ly8gU2VlIGBMb2NhdGUgb3B0aW9uc2AgZm9yIG1vcmUgZGV0YWlscy5cclxuICBcdGxvY2F0ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdG9wdGlvbnMgPSB0aGlzLl9sb2NhdGVPcHRpb25zID0gZXh0ZW5kKHtcclxuICBcdFx0XHR0aW1lb3V0OiAxMDAwMCxcclxuICBcdFx0XHR3YXRjaDogZmFsc2VcclxuICBcdFx0XHQvLyBzZXRWaWV3OiBmYWxzZVxyXG4gIFx0XHRcdC8vIG1heFpvb206IDxOdW1iZXI+XHJcbiAgXHRcdFx0Ly8gbWF4aW11bUFnZTogMFxyXG4gIFx0XHRcdC8vIGVuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2VcclxuICBcdFx0fSwgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHRpZiAoISgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikpIHtcclxuICBcdFx0XHR0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtcclxuICBcdFx0XHRcdGNvZGU6IDAsXHJcbiAgXHRcdFx0XHRtZXNzYWdlOiAnR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZC4nXHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBvblJlc3BvbnNlID0gYmluZCh0aGlzLl9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlLCB0aGlzKSxcclxuICBcdFx0ICAgIG9uRXJyb3IgPSBiaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsIHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMud2F0Y2gpIHtcclxuICBcdFx0XHR0aGlzLl9sb2NhdGlvbldhdGNoSWQgPVxyXG4gIFx0XHRcdCAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24ob25SZXNwb25zZSwgb25FcnJvciwgb3B0aW9ucyk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihvblJlc3BvbnNlLCBvbkVycm9yLCBvcHRpb25zKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzdG9wTG9jYXRlKCk6IHRoaXNcclxuICBcdC8vIFN0b3BzIHdhdGNoaW5nIGxvY2F0aW9uIHByZXZpb3VzbHkgaW5pdGlhdGVkIGJ5IGBtYXAubG9jYXRlKHt3YXRjaDogdHJ1ZX0pYFxyXG4gIFx0Ly8gYW5kIGFib3J0cyByZXNldHRpbmcgdGhlIG1hcCB2aWV3IGlmIG1hcC5sb2NhdGUgd2FzIGNhbGxlZCB3aXRoXHJcbiAgXHQvLyBge3NldFZpZXc6IHRydWV9YC5cclxuICBcdHN0b3BMb2NhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbiAmJiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCkge1xyXG4gIFx0XHRcdG5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKHRoaXMuX2xvY2F0ZU9wdGlvbnMpIHtcclxuICBcdFx0XHR0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXcgPSBmYWxzZTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBjID0gZXJyb3IuY29kZSxcclxuICBcdFx0ICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8XHJcbiAgXHRcdCAgICAgICAgICAgIChjID09PSAxID8gJ3Blcm1pc3Npb24gZGVuaWVkJyA6XHJcbiAgXHRcdCAgICAgICAgICAgIChjID09PSAyID8gJ3Bvc2l0aW9uIHVuYXZhaWxhYmxlJyA6ICd0aW1lb3V0JykpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyAmJiAhdGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5maXRXb3JsZCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBMb2NhdGlvbiBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGxvY2F0aW9uZXJyb3I6IEVycm9yRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBnZW9sb2NhdGlvbiAodXNpbmcgdGhlIFtgbG9jYXRlYF0oI21hcC1sb2NhdGUpIG1ldGhvZCkgZmFpbGVkLlxyXG4gIFx0XHR0aGlzLmZpcmUoJ2xvY2F0aW9uZXJyb3InLCB7XHJcbiAgXHRcdFx0Y29kZTogYyxcclxuICBcdFx0XHRtZXNzYWdlOiAnR2VvbG9jYXRpb24gZXJyb3I6ICcgKyBtZXNzYWdlICsgJy4nXHJcbiAgXHRcdH0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTogZnVuY3Rpb24gKHBvcykge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBsYXQgPSBwb3MuY29vcmRzLmxhdGl0dWRlLFxyXG4gIFx0XHQgICAgbG5nID0gcG9zLmNvb3Jkcy5sb25naXR1ZGUsXHJcbiAgXHRcdCAgICBsYXRsbmcgPSBuZXcgTGF0TG5nKGxhdCwgbG5nKSxcclxuICBcdFx0ICAgIGJvdW5kcyA9IGxhdGxuZy50b0JvdW5kcyhwb3MuY29vcmRzLmFjY3VyYWN5ICogMiksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucztcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLnNldFZpZXcpIHtcclxuICBcdFx0XHR2YXIgem9vbSA9IHRoaXMuZ2V0Qm91bmRzWm9vbShib3VuZHMpO1xyXG4gIFx0XHRcdHRoaXMuc2V0VmlldyhsYXRsbmcsIG9wdGlvbnMubWF4Wm9vbSA/IE1hdGgubWluKHpvb20sIG9wdGlvbnMubWF4Wm9vbSkgOiB6b29tKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGRhdGEgPSB7XHJcbiAgXHRcdFx0bGF0bG5nOiBsYXRsbmcsXHJcbiAgXHRcdFx0Ym91bmRzOiBib3VuZHMsXHJcbiAgXHRcdFx0dGltZXN0YW1wOiBwb3MudGltZXN0YW1wXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpIGluIHBvcy5jb29yZHMpIHtcclxuICBcdFx0XHRpZiAodHlwZW9mIHBvcy5jb29yZHNbaV0gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0XHRkYXRhW2ldID0gcG9zLmNvb3Jkc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBsb2NhdGlvbmZvdW5kOiBMb2NhdGlvbkV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gZ2VvbG9jYXRpb24gKHVzaW5nIHRoZSBbYGxvY2F0ZWBdKCNtYXAtbG9jYXRlKSBtZXRob2QpXHJcbiAgXHRcdC8vIHdlbnQgc3VjY2Vzc2Z1bGx5LlxyXG4gIFx0XHR0aGlzLmZpcmUoJ2xvY2F0aW9uZm91bmQnLCBkYXRhKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gVE9ETyBBcHByb3ByaWF0ZSBkb2NzIHNlY3Rpb24/XHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEhhbmRsZXIobmFtZTogU3RyaW5nLCBIYW5kbGVyQ2xhc3M6IEZ1bmN0aW9uKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhIG5ldyBgSGFuZGxlcmAgdG8gdGhlIG1hcCwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxyXG4gIFx0YWRkSGFuZGxlcjogZnVuY3Rpb24gKG5hbWUsIEhhbmRsZXJDbGFzcykge1xyXG4gIFx0XHRpZiAoIUhhbmRsZXJDbGFzcykgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGhhbmRsZXIgPSB0aGlzW25hbWVdID0gbmV3IEhhbmRsZXJDbGFzcyh0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zW25hbWVdKSB7XHJcbiAgXHRcdFx0aGFuZGxlci5lbmFibGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlKCk6IHRoaXNcclxuICBcdC8vIERlc3Ryb3lzIHRoZSBtYXAgYW5kIGNsZWFycyBhbGwgcmVsYXRlZCBldmVudCBsaXN0ZW5lcnMuXHJcbiAgXHRyZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHModHJ1ZSk7XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKSB7IHRoaXMub2ZmKCdtb3ZlZW5kJywgdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKTsgfVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX2NvbnRhaW5lcklkICE9PSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01hcCBjb250YWluZXIgaXMgYmVpbmcgcmV1c2VkIGJ5IGFub3RoZXIgaW5zdGFuY2UnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dHJ5IHtcclxuICBcdFx0XHQvLyB0aHJvd3MgZXJyb3IgaW4gSUU2LThcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkO1xyXG4gIFx0XHRcdGRlbGV0ZSB0aGlzLl9jb250YWluZXJJZDtcclxuICBcdFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHRcdC8qZXNsaW50LWRpc2FibGUgKi9cclxuICBcdFx0XHR0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQgPSB1bmRlZmluZWQ7XHJcbiAgXHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG4gIFx0XHRcdHRoaXMuX2NvbnRhaW5lcklkID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9jYXRpb25XYXRjaElkICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aGlzLnN0b3BMb2NhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fc3RvcCgpO1xyXG5cclxuICBcdFx0cmVtb3ZlKHRoaXMuX21hcFBhbmUpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2NsZWFyQ29udHJvbFBvcykge1xyXG4gIFx0XHRcdHRoaXMuX2NsZWFyQ29udHJvbFBvcygpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLl9yZXNpemVSZXF1ZXN0KSB7XHJcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX3Jlc2l6ZVJlcXVlc3QpO1xyXG4gIFx0XHRcdHRoaXMuX3Jlc2l6ZVJlcXVlc3QgPSBudWxsO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9jbGVhckhhbmRsZXJzKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gTWFwIHN0YXRlIGNoYW5nZSBldmVudHNcclxuICBcdFx0XHQvLyBAZXZlbnQgdW5sb2FkOiBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBpcyBkZXN0cm95ZWQgd2l0aCBbcmVtb3ZlXSgjbWFwLXJlbW92ZSkgbWV0aG9kLlxyXG4gIFx0XHRcdHRoaXMuZmlyZSgndW5sb2FkJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpO1xyXG4gIFx0XHRmb3IgKGkgaW4gdGhpcy5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2ldLnJlbW92ZSgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGZvciAoaSBpbiB0aGlzLl9wYW5lcykge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9wYW5lc1tpXSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IFtdO1xyXG4gIFx0XHR0aGlzLl9wYW5lcyA9IFtdO1xyXG4gIFx0XHRkZWxldGUgdGhpcy5fbWFwUGFuZTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX3JlbmRlcmVyO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE90aGVyIE1ldGhvZHNcclxuICBcdC8vIEBtZXRob2QgY3JlYXRlUGFuZShuYW1lOiBTdHJpbmcsIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENyZWF0ZXMgYSBuZXcgW21hcCBwYW5lXSgjbWFwLXBhbmUpIHdpdGggdGhlIGdpdmVuIG5hbWUgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5LFxyXG4gIFx0Ly8gdGhlbiByZXR1cm5zIGl0LiBUaGUgcGFuZSBpcyBjcmVhdGVkIGFzIGEgY2hpbGQgb2YgYGNvbnRhaW5lcmAsIG9yXHJcbiAgXHQvLyBhcyBhIGNoaWxkIG9mIHRoZSBtYWluIG1hcCBwYW5lIGlmIG5vdCBzZXQuXHJcbiAgXHRjcmVhdGVQYW5lOiBmdW5jdGlvbiAobmFtZSwgY29udGFpbmVyKSB7XHJcbiAgXHRcdHZhciBjbGFzc05hbWUgPSAnbGVhZmxldC1wYW5lJyArIChuYW1lID8gJyBsZWFmbGV0LScgKyBuYW1lLnJlcGxhY2UoJ1BhbmUnLCAnJykgKyAnLXBhbmUnIDogJycpLFxyXG4gIFx0XHQgICAgcGFuZSA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUsIGNvbnRhaW5lciB8fCB0aGlzLl9tYXBQYW5lKTtcclxuXHJcbiAgXHRcdGlmIChuYW1lKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuZXNbbmFtZV0gPSBwYW5lO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBwYW5lO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNZXRob2RzIGZvciBHZXR0aW5nIE1hcCBTdGF0ZVxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q2VudGVyKCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGNlbnRlciBvZiB0aGUgbWFwIHZpZXdcclxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9jaGVja0lmTG9hZGVkKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbGFzdENlbnRlciAmJiAhdGhpcy5fbW92ZWQoKSkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzLl9sYXN0Q2VudGVyLmNsb25lKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX2dldENlbnRlckxheWVyUG9pbnQoKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Wm9vbSgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgbWFwIHZpZXdcclxuICBcdGdldFpvb206IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3pvb207XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGJvdW5kcyB2aXNpYmxlIGluIHRoZSBjdXJyZW50IG1hcCB2aWV3XHJcbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxcclxuICBcdFx0ICAgIHN3ID0gdGhpcy51bnByb2plY3QoYm91bmRzLmdldEJvdHRvbUxlZnQoKSksXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMudW5wcm9qZWN0KGJvdW5kcy5nZXRUb3BSaWdodCgpKTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nQm91bmRzKHN3LCBuZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TWluWm9vbSgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIG1pbmltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwIChpZiBzZXQgaW4gdGhlIGBtaW5ab29tYCBvcHRpb24gb2YgdGhlIG1hcCBvciBvZiBhbnkgbGF5ZXJzKSwgb3IgYDBgIGJ5IGRlZmF1bHQuXHJcbiAgXHRnZXRNaW5ab29tOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fbGF5ZXJzTWluWm9vbSB8fCAwIDogdGhpcy5vcHRpb25zLm1pblpvb207XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TWF4Wm9vbSgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIG1heGltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwIChpZiBzZXQgaW4gdGhlIGBtYXhab29tYCBvcHRpb24gb2YgdGhlIG1hcCBvciBvZiBhbnkgbGF5ZXJzKS5cclxuICBcdGdldE1heFpvb206IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tID09PSB1bmRlZmluZWQgP1xyXG4gIFx0XHRcdCh0aGlzLl9sYXllcnNNYXhab29tID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IHRoaXMuX2xheWVyc01heFpvb20pIDpcclxuICBcdFx0XHR0aGlzLm9wdGlvbnMubWF4Wm9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHNab29tKGJvdW5kczogTGF0TG5nQm91bmRzLCBpbnNpZGU/OiBCb29sZWFuLCBwYWRkaW5nPzogUG9pbnQpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIG1heGltdW0gem9vbSBsZXZlbCBvbiB3aGljaCB0aGUgZ2l2ZW4gYm91bmRzIGZpdCB0byB0aGUgbWFwXHJcbiAgXHQvLyB2aWV3IGluIGl0cyBlbnRpcmV0eS4gSWYgYGluc2lkZWAgKG9wdGlvbmFsKSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgbWV0aG9kXHJcbiAgXHQvLyBpbnN0ZWFkIHJldHVybnMgdGhlIG1pbmltdW0gem9vbSBsZXZlbCBvbiB3aGljaCB0aGUgbWFwIHZpZXcgZml0cyBpbnRvXHJcbiAgXHQvLyB0aGUgZ2l2ZW4gYm91bmRzIGluIGl0cyBlbnRpcmV0eS5cclxuICBcdGdldEJvdW5kc1pvb206IGZ1bmN0aW9uIChib3VuZHMsIGluc2lkZSwgcGFkZGluZykgeyAvLyAoTGF0TG5nQm91bmRzWywgQm9vbGVhbiwgUG9pbnRdKSAtPiBOdW1iZXJcclxuICBcdFx0Ym91bmRzID0gdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuICBcdFx0cGFkZGluZyA9IHRvUG9pbnQocGFkZGluZyB8fCBbMCwgMF0pO1xyXG5cclxuICBcdFx0dmFyIHpvb20gPSB0aGlzLmdldFpvb20oKSB8fCAwLFxyXG4gIFx0XHQgICAgbWluID0gdGhpcy5nZXRNaW5ab29tKCksXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLmdldE1heFpvb20oKSxcclxuICBcdFx0ICAgIG53ID0gYm91bmRzLmdldE5vcnRoV2VzdCgpLFxyXG4gIFx0XHQgICAgc2UgPSBib3VuZHMuZ2V0U291dGhFYXN0KCksXHJcbiAgXHRcdCAgICBzaXplID0gdGhpcy5nZXRTaXplKCkuc3VidHJhY3QocGFkZGluZyksXHJcbiAgXHRcdCAgICBib3VuZHNTaXplID0gdG9Cb3VuZHModGhpcy5wcm9qZWN0KHNlLCB6b29tKSwgdGhpcy5wcm9qZWN0KG53LCB6b29tKSkuZ2V0U2l6ZSgpLFxyXG4gIFx0XHQgICAgc25hcCA9IEJyb3dzZXIuYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbVNuYXAgOiAxLFxyXG4gIFx0XHQgICAgc2NhbGV4ID0gc2l6ZS54IC8gYm91bmRzU2l6ZS54LFxyXG4gIFx0XHQgICAgc2NhbGV5ID0gc2l6ZS55IC8gYm91bmRzU2l6ZS55LFxyXG4gIFx0XHQgICAgc2NhbGUgPSBpbnNpZGUgPyBNYXRoLm1heChzY2FsZXgsIHNjYWxleSkgOiBNYXRoLm1pbihzY2FsZXgsIHNjYWxleSk7XHJcblxyXG4gIFx0XHR6b29tID0gdGhpcy5nZXRTY2FsZVpvb20oc2NhbGUsIHpvb20pO1xyXG5cclxuICBcdFx0aWYgKHNuYXApIHtcclxuICBcdFx0XHR6b29tID0gTWF0aC5yb3VuZCh6b29tIC8gKHNuYXAgLyAxMDApKSAqIChzbmFwIC8gMTAwKTsgLy8gZG9uJ3QganVtcCBpZiB3aXRoaW4gMSUgb2YgYSBzbmFwIGxldmVsXHJcbiAgXHRcdFx0em9vbSA9IGluc2lkZSA/IE1hdGguY2VpbCh6b29tIC8gc25hcCkgKiBzbmFwIDogTWF0aC5mbG9vcih6b29tIC8gc25hcCkgKiBzbmFwO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHpvb20pKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTaXplKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG1hcCBjb250YWluZXIgKGluIHBpeGVscykuXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fc2l6ZSB8fCB0aGlzLl9zaXplQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuX3NpemUgPSBuZXcgUG9pbnQoXHJcbiAgXHRcdFx0XHR0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggfHwgMCxcclxuICBcdFx0XHRcdHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgMCk7XHJcblxyXG4gIFx0XHRcdHRoaXMuX3NpemVDaGFuZ2VkID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3NpemUuY2xvbmUoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbEJvdW5kcygpOiBCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgY3VycmVudCBtYXAgdmlldyBpbiBwcm9qZWN0ZWQgcGl4ZWxcclxuICBcdC8vIGNvb3JkaW5hdGVzIChzb21ldGltZXMgdXNlZnVsIGluIGxheWVyIGFuZCBvdmVybGF5IGltcGxlbWVudGF0aW9ucykuXHJcbiAgXHRnZXRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHR2YXIgdG9wTGVmdFBvaW50ID0gdGhpcy5fZ2V0VG9wTGVmdFBvaW50KGNlbnRlciwgem9vbSk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHRvcExlZnRQb2ludCwgdG9wTGVmdFBvaW50LmFkZCh0aGlzLmdldFNpemUoKSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBUT0RPOiBDaGVjayBzZW1hbnRpY3MgLSBpc24ndCB0aGUgcGl4ZWwgb3JpZ2luIHRoZSAwLDAgY29vcmQgcmVsYXRpdmUgdG9cclxuICBcdC8vIHRoZSBtYXAgcGFuZT8gXCJsZWZ0IHBvaW50IG9mIHRoZSBtYXAgbGF5ZXJcIiBjYW4gYmUgY29uZnVzaW5nLCBzcGVjaWFsbHlcclxuICBcdC8vIHNpbmNlIHRoZXJlIGNhbiBiZSBuZWdhdGl2ZSBvZmZzZXRzLlxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbE9yaWdpbigpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcHJvamVjdGVkIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AgbGVmdCBwb2ludCBvZlxyXG4gIFx0Ly8gdGhlIG1hcCBsYXllciAodXNlZnVsIGluIGN1c3RvbSBsYXllciBhbmQgb3ZlcmxheSBpbXBsZW1lbnRhdGlvbnMpLlxyXG4gIFx0Z2V0UGl4ZWxPcmlnaW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcGl4ZWxPcmlnaW47XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UGl4ZWxXb3JsZEJvdW5kcyh6b29tPzogTnVtYmVyKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB3b3JsZCdzIGJvdW5kcyBpbiBwaXhlbCBjb29yZGluYXRlcyBmb3Igem9vbSBsZXZlbCBgem9vbWAuXHJcbiAgXHQvLyBJZiBgem9vbWAgaXMgb21pdHRlZCwgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyB1c2VkLlxyXG4gIFx0Z2V0UGl4ZWxXb3JsZEJvdW5kczogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZ2V0UHJvamVjdGVkQm91bmRzKHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuZ2V0Wm9vbSgpIDogem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE90aGVyIE1ldGhvZHNcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmUocGFuZTogU3RyaW5nfEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgYSBbbWFwIHBhbmVdKCNtYXAtcGFuZSksIGdpdmVuIGl0cyBuYW1lIG9yIGl0cyBIVE1MIGVsZW1lbnQgKGl0cyBpZGVudGl0eSkuXHJcbiAgXHRnZXRQYW5lOiBmdW5jdGlvbiAocGFuZSkge1xyXG4gIFx0XHRyZXR1cm4gdHlwZW9mIHBhbmUgPT09ICdzdHJpbmcnID8gdGhpcy5fcGFuZXNbcGFuZV0gOiBwYW5lO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmVzKCk6IE9iamVjdFxyXG4gIFx0Ly8gUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgW3BhbmVzXSgjbWFwLXBhbmUpIGFzIGtleXMgYW5kXHJcbiAgXHQvLyB0aGUgcGFuZXMgYXMgdmFsdWVzLlxyXG4gIFx0Z2V0UGFuZXM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3BhbmVzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENvbnRhaW5lcjogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtYXAuXHJcbiAgXHRnZXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIENvbnZlcnNpb24gTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Wm9vbVNjYWxlKHRvWm9vbTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzY2FsZSBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBhIG1hcCB0cmFuc2l0aW9uIGZyb20gem9vbSBsZXZlbFxyXG4gIFx0Ly8gYGZyb21ab29tYCB0byBgdG9ab29tYC4gVXNlZCBpbnRlcm5hbGx5IHRvIGhlbHAgd2l0aCB6b29tIGFuaW1hdGlvbnMuXHJcbiAgXHRnZXRab29tU2NhbGU6IGZ1bmN0aW9uICh0b1pvb20sIGZyb21ab29tKSB7XHJcbiAgXHRcdC8vIFRPRE8gcmVwbGFjZSB3aXRoIHVuaXZlcnNhbCBpbXBsZW1lbnRhdGlvbiBhZnRlciByZWZhY3RvcmluZyBwcm9qZWN0aW9uc1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHRyZXR1cm4gY3JzLnNjYWxlKHRvWm9vbSkgLyBjcnMuc2NhbGUoZnJvbVpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNjYWxlWm9vbShzY2FsZTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB6b29tIGxldmVsIHRoYXQgdGhlIG1hcCB3b3VsZCBlbmQgdXAgYXQsIGlmIGl0IGlzIGF0IGBmcm9tWm9vbWBcclxuICBcdC8vIGxldmVsIGFuZCBldmVyeXRoaW5nIGlzIHNjYWxlZCBieSBhIGZhY3RvciBvZiBgc2NhbGVgLiBJbnZlcnNlIG9mXHJcbiAgXHQvLyBbYGdldFpvb21TY2FsZWBdKCNtYXAtZ2V0Wm9vbVNjYWxlKS5cclxuICBcdGdldFNjYWxlWm9vbTogZnVuY3Rpb24gKHNjYWxlLCBmcm9tWm9vbSkge1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHR2YXIgem9vbSA9IGNycy56b29tKHNjYWxlICogY3JzLnNjYWxlKGZyb21ab29tKSk7XHJcbiAgXHRcdHJldHVybiBpc05hTih6b29tKSA/IEluZmluaXR5IDogem9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nLCB6b29tOiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgYSBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSBgTGF0TG5nYCBhY2NvcmRpbmcgdG8gdGhlIHByb2plY3Rpb25cclxuICBcdC8vIG9mIHRoZSBtYXAncyBDUlMsIHRoZW4gc2NhbGVzIGl0IGFjY29yZGluZyB0byBgem9vbWAgYW5kIHRoZSBDUlMnc1xyXG4gIFx0Ly8gYFRyYW5zZm9ybWF0aW9uYC4gVGhlIHJlc3VsdCBpcyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvXHJcbiAgXHQvLyB0aGUgQ1JTIG9yaWdpbi5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KHRvTGF0TG5nKGxhdGxuZyksIHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQsIHpvb206IE51bWJlcik6IExhdExuZ1xyXG4gIFx0Ly8gSW52ZXJzZSBvZiBbYHByb2plY3RgXSgjbWFwLXByb2plY3QpLlxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKHRvUG9pbnQocG9pbnQpLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXllclBvaW50VG9MYXRMbmcocG9pbnQ6IFBvaW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0bGF5ZXJQb2ludFRvTGF0TG5nOiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dmFyIHByb2plY3RlZFBvaW50ID0gdG9Qb2ludChwb2ludCkuYWRkKHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChwcm9qZWN0ZWRQb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0bGF0TG5nVG9MYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdCh0b0xhdExuZyhsYXRsbmcpKS5fcm91bmQoKTtcclxuICBcdFx0cmV0dXJuIHByb2plY3RlZFBvaW50Ll9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXBMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgYSBgTGF0TG5nYCB3aGVyZSBgbGF0YCBhbmQgYGxuZ2AgaGFzIGJlZW4gd3JhcHBlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAgXHQvLyBtYXAncyBDUlMncyBgd3JhcExhdGAgYW5kIGB3cmFwTG5nYCBwcm9wZXJ0aWVzLCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZVxyXG4gIFx0Ly8gQ1JTJ3MgYm91bmRzLlxyXG4gIFx0Ly8gQnkgZGVmYXVsdCB0aGlzIG1lYW5zIGxvbmdpdHVkZSBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgZGF0ZWxpbmUgc28gaXRzXHJcbiAgXHQvLyB2YWx1ZSBpcyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXBMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyh0b0xhdExuZyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ0JvdW5kc2Agd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSBnaXZlbiBvbmUsIGVuc3VyaW5nIHRoYXRcclxuICBcdC8vIGl0cyBjZW50ZXIgaXMgd2l0aGluIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHQvLyBCeSBkZWZhdWx0IHRoaXMgbWVhbnMgdGhlIGNlbnRlciBsb25naXR1ZGUgaXMgd3JhcHBlZCBhcm91bmQgdGhlIGRhdGVsaW5lIHNvIGl0c1xyXG4gIFx0Ly8gdmFsdWUgaXMgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXMsIGFuZCB0aGUgbWFqb3JpdHkgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Ly8gb3ZlcmxhcHMgdGhlIENSUydzIGJvdW5kcy5cclxuICBcdHdyYXBMYXRMbmdCb3VuZHM6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh0b0xhdExuZ0JvdW5kcyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZShsYXRsbmcxOiBMYXRMbmcsIGxhdGxuZzI6IExhdExuZyk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGFjY29yZGluZyB0b1xyXG4gIFx0Ly8gdGhlIG1hcCdzIENSUy4gQnkgZGVmYXVsdCB0aGlzIG1lYXN1cmVzIGRpc3RhbmNlIGluIG1ldGVycy5cclxuICBcdGRpc3RhbmNlOiBmdW5jdGlvbiAobGF0bG5nMSwgbGF0bG5nMikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZSh0b0xhdExuZyhsYXRsbmcxKSwgdG9MYXRMbmcobGF0bG5nMikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmdcclxuICBcdC8vIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLlxyXG4gIFx0bGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWluZXJQb2ludFRvTGF0TG5nKHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLCByZXR1cm5zXHJcbiAgXHQvLyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBsYXllclBvaW50ID0gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0b1BvaW50KHBvaW50KSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXRMbmdUb0NvbnRhaW5lclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIuXHJcbiAgXHRsYXRMbmdUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KHRvTGF0TG5nKGxhdGxuZykpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChldjogTW91c2VFdmVudCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIHRoZSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZVxyXG4gIFx0Ly8gbWFwIGNvbnRhaW5lciB3aGVyZSB0aGUgZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZ2V0TW91c2VQb3NpdGlvbihlLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZXY6IE1vdXNlRXZlbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBNb3VzZUV2ZW50IG9iamVjdCwgcmV0dXJucyB0aGUgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0b1xyXG4gIFx0Ly8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pIHdoZXJlIHRoZSBldmVudCB0b29rIHBsYWNlLlxyXG4gIFx0bW91c2VFdmVudFRvTGF5ZXJQb2ludDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbW91c2VFdmVudFRvTGF0TG5nKGV2OiBNb3VzZUV2ZW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIHdoZXJlIHRoZVxyXG4gIFx0Ly8gZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0xhdExuZzogZnVuY3Rpb24gKGUpIHsgLy8gKE1vdXNlRXZlbnQpXHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZSkpO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gbWFwIGluaXRpYWxpemF0aW9uIG1ldGhvZHNcclxuXHJcbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIgPSBnZXQoaWQpO1xyXG5cclxuICBcdFx0aWYgKCFjb250YWluZXIpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01hcCBjb250YWluZXIgbm90IGZvdW5kLicpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKGNvbnRhaW5lci5fbGVhZmxldF9pZCkge1xyXG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvbihjb250YWluZXIsICdzY3JvbGwnLCB0aGlzLl9vblNjcm9sbCwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lcklkID0gc3RhbXAoY29udGFpbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcclxuXHJcbiAgXHRcdHRoaXMuX2ZhZGVBbmltYXRlZCA9IHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uICYmIEJyb3dzZXIuYW55M2Q7XHJcblxyXG4gIFx0XHRhZGRDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LWNvbnRhaW5lcicgK1xyXG4gIFx0XHRcdChCcm93c2VyLnRvdWNoID8gJyBsZWFmbGV0LXRvdWNoJyA6ICcnKSArXHJcbiAgXHRcdFx0KEJyb3dzZXIucmV0aW5hID8gJyBsZWFmbGV0LXJldGluYScgOiAnJykgK1xyXG4gIFx0XHRcdChCcm93c2VyLmllbHQ5ID8gJyBsZWFmbGV0LW9sZGllJyA6ICcnKSArXHJcbiAgXHRcdFx0KEJyb3dzZXIuc2FmYXJpID8gJyBsZWFmbGV0LXNhZmFyaScgOiAnJykgK1xyXG4gIFx0XHRcdCh0aGlzLl9mYWRlQW5pbWF0ZWQgPyAnIGxlYWZsZXQtZmFkZS1hbmltJyA6ICcnKSk7XHJcblxyXG4gIFx0XHR2YXIgcG9zaXRpb24gPSBnZXRTdHlsZShjb250YWluZXIsICdwb3NpdGlvbicpO1xyXG5cclxuICBcdFx0aWYgKHBvc2l0aW9uICE9PSAnYWJzb2x1dGUnICYmIHBvc2l0aW9uICE9PSAncmVsYXRpdmUnICYmIHBvc2l0aW9uICE9PSAnZml4ZWQnICYmIHBvc2l0aW9uICE9PSAnc3RpY2t5Jykge1xyXG4gIFx0XHRcdGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2luaXRQYW5lcygpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2luaXRDb250cm9sUG9zKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdENvbnRyb2xQb3MoKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdFBhbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBwYW5lcyA9IHRoaXMuX3BhbmVzID0ge307XHJcbiAgXHRcdHRoaXMuX3BhbmVSZW5kZXJlcnMgPSB7fTtcclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uXHJcbiAgXHRcdC8vXHJcbiAgXHRcdC8vIFBhbmVzIGFyZSBET00gZWxlbWVudHMgdXNlZCB0byBjb250cm9sIHRoZSBvcmRlcmluZyBvZiBsYXllcnMgb24gdGhlIG1hcC4gWW91XHJcbiAgXHRcdC8vIGNhbiBhY2Nlc3MgcGFuZXMgd2l0aCBbYG1hcC5nZXRQYW5lYF0oI21hcC1nZXRwYW5lKSBvclxyXG4gIFx0XHQvLyBbYG1hcC5nZXRQYW5lc2BdKCNtYXAtZ2V0cGFuZXMpIG1ldGhvZHMuIE5ldyBwYW5lcyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZVxyXG4gIFx0XHQvLyBbYG1hcC5jcmVhdGVQYW5lYF0oI21hcC1jcmVhdGVwYW5lKSBtZXRob2QuXHJcbiAgXHRcdC8vXHJcbiAgXHRcdC8vIEV2ZXJ5IG1hcCBoYXMgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHBhbmVzIHRoYXQgZGlmZmVyIG9ubHkgaW4gekluZGV4LlxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBAcGFuZSBtYXBQYW5lOiBIVE1MRWxlbWVudCA9ICdhdXRvJ1xyXG4gIFx0XHQvLyBQYW5lIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIG1hcCBwYW5lc1xyXG5cclxuICBcdFx0dGhpcy5fbWFwUGFuZSA9IHRoaXMuY3JlYXRlUGFuZSgnbWFwUGFuZScsIHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUsIG5ldyBQb2ludCgwLCAwKSk7XHJcblxyXG4gIFx0XHQvLyBAcGFuZSB0aWxlUGFuZTogSFRNTEVsZW1lbnQgPSAyMDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYEdyaWRMYXllcmBzIGFuZCBgVGlsZUxheWVyYHNcclxuICBcdFx0dGhpcy5jcmVhdGVQYW5lKCd0aWxlUGFuZScpO1xyXG4gIFx0XHQvLyBAcGFuZSBvdmVybGF5UGFuZTogSFRNTEVsZW1lbnQgPSA0MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgdmVjdG9ycyAoYFBhdGhgcywgbGlrZSBgUG9seWxpbmVgcyBhbmQgYFBvbHlnb25gcyksIGBJbWFnZU92ZXJsYXlgcyBhbmQgYFZpZGVvT3ZlcmxheWBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgnb3ZlcmxheVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgc2hhZG93UGFuZTogSFRNTEVsZW1lbnQgPSA1MDBcclxuICBcdFx0Ly8gUGFuZSBmb3Igb3ZlcmxheSBzaGFkb3dzIChlLmcuIGBNYXJrZXJgIHNoYWRvd3MpXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgnc2hhZG93UGFuZScpO1xyXG4gIFx0XHQvLyBAcGFuZSBtYXJrZXJQYW5lOiBIVE1MRWxlbWVudCA9IDYwMFxyXG4gIFx0XHQvLyBQYW5lIGZvciBgSWNvbmBzIG9mIGBNYXJrZXJgc1xyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ21hcmtlclBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgdG9vbHRpcFBhbmU6IEhUTUxFbGVtZW50ID0gNjUwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIGBUb29sdGlwYHMuXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgndG9vbHRpcFBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgcG9wdXBQYW5lOiBIVE1MRWxlbWVudCA9IDcwMFxyXG4gIFx0XHQvLyBQYW5lIGZvciBgUG9wdXBgcy5cclxuICBcdFx0dGhpcy5jcmVhdGVQYW5lKCdwb3B1cFBhbmUnKTtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24pIHtcclxuICBcdFx0XHRhZGRDbGFzcyhwYW5lcy5tYXJrZXJQYW5lLCAnbGVhZmxldC16b29tLWhpZGUnKTtcclxuICBcdFx0XHRhZGRDbGFzcyhwYW5lcy5zaGFkb3dQYW5lLCAnbGVhZmxldC16b29tLWhpZGUnKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gcHJpdmF0ZSBtZXRob2RzIHRoYXQgbW9kaWZ5IG1hcCBzdGF0ZVxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXHJcbiAgXHRfcmVzZXRWaWV3OiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBub01vdmVTdGFydCkge1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0dmFyIGxvYWRpbmcgPSAhdGhpcy5fbG9hZGVkO1xyXG4gIFx0XHR0aGlzLl9sb2FkZWQgPSB0cnVlO1xyXG4gIFx0XHR6b29tID0gdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG5cclxuICBcdFx0dGhpcy5maXJlKCd2aWV3cHJlcmVzZXQnKTtcclxuXHJcbiAgXHRcdHZhciB6b29tQ2hhbmdlZCA9IHRoaXMuX3pvb20gIT09IHpvb207XHJcbiAgXHRcdHRoaXNcclxuICBcdFx0XHQuX21vdmVTdGFydCh6b29tQ2hhbmdlZCwgbm9Nb3ZlU3RhcnQpXHJcbiAgXHRcdFx0Ll9tb3ZlKGNlbnRlciwgem9vbSlcclxuICBcdFx0XHQuX21vdmVFbmQoem9vbUNoYW5nZWQpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IHZpZXdyZXNldDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIG5lZWRzIHRvIHJlZHJhdyBpdHMgY29udGVudCAodGhpcyB1c3VhbGx5IGhhcHBlbnNcclxuICBcdFx0Ly8gb24gbWFwIHpvb20gb3IgbG9hZCkuIFZlcnkgdXNlZnVsIGZvciBjcmVhdGluZyBjdXN0b20gb3ZlcmxheXMuXHJcbiAgXHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIGlzIGluaXRpYWxpemVkICh3aGVuIGl0cyBjZW50ZXIgYW5kIHpvb20gYXJlIHNldFxyXG4gIFx0XHQvLyBmb3IgdGhlIGZpcnN0IHRpbWUpLlxyXG4gIFx0XHRpZiAobG9hZGluZykge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbG9hZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlU3RhcnQ6IGZ1bmN0aW9uICh6b29tQ2hhbmdlZCwgbm9Nb3ZlU3RhcnQpIHtcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21zdGFydDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHpvb20gaXMgYWJvdXQgdG8gY2hhbmdlIChlLmcuIGJlZm9yZSB6b29tIGFuaW1hdGlvbikuXHJcbiAgXHRcdC8vIEBldmVudCBtb3Zlc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHZpZXcgb2YgdGhlIG1hcCBzdGFydHMgY2hhbmdpbmcgKGUuZy4gdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcCkuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKCFub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBkYXRhLCBzdXByZXNzRXZlbnQpIHtcclxuICBcdFx0aWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdHpvb20gPSB0aGlzLl96b29tO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHZhciB6b29tQ2hhbmdlZCA9IHRoaXMuX3pvb20gIT09IHpvb207XHJcblxyXG4gIFx0XHR0aGlzLl96b29tID0gem9vbTtcclxuICBcdFx0dGhpcy5fbGFzdENlbnRlciA9IGNlbnRlcjtcclxuICBcdFx0dGhpcy5fcGl4ZWxPcmlnaW4gPSB0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIpO1xyXG5cclxuICBcdFx0aWYgKCFzdXByZXNzRXZlbnQpIHtcclxuICBcdFx0XHQvLyBAZXZlbnQgem9vbTogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhbnkgY2hhbmdlIGluIHpvb20gbGV2ZWwsXHJcbiAgXHRcdFx0Ly8gaW5jbHVkaW5nIHpvb20gYW5kIGZseSBhbmltYXRpb25zLlxyXG4gIFx0XHRcdGlmICh6b29tQ2hhbmdlZCB8fCAoZGF0YSAmJiBkYXRhLnBpbmNoKSkge1x0Ly8gQWx3YXlzIGZpcmUgJ3pvb20nIGlmIHBpbmNoaW5nIGJlY2F1c2UgIzM1MzBcclxuICBcdFx0XHRcdHRoaXMuZmlyZSgnem9vbScsIGRhdGEpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IG1vdmU6IEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW55IG1vdmVtZW50IG9mIHRoZSBtYXAsXHJcbiAgXHRcdFx0Ly8gaW5jbHVkaW5nIHBhbiBhbmQgZmx5IGFuaW1hdGlvbnMuXHJcbiAgXHRcdFx0dGhpcy5maXJlKCdtb3ZlJywgZGF0YSk7XHJcbiAgXHRcdH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLnBpbmNoKSB7XHQvLyBBbHdheXMgZmlyZSAnem9vbScgaWYgcGluY2hpbmcgYmVjYXVzZSAjMzUzMFxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbScsIGRhdGEpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbW92ZUVuZDogZnVuY3Rpb24gKHpvb21DaGFuZ2VkKSB7XHJcbiAgXHRcdC8vIEBldmVudCB6b29tZW5kOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgem9vbSBjaGFuZ2VkLCBhZnRlciBhbnkgYW5pbWF0aW9ucy5cclxuICBcdFx0aWYgKHpvb21DaGFuZ2VkKSB7XHJcbiAgXHRcdFx0dGhpcy5maXJlKCd6b29tZW5kJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBtb3ZlZW5kOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBjZW50ZXIgb2YgdGhlIG1hcCBzdG9wcyBjaGFuZ2luZ1xyXG4gIFx0XHQvLyAoZS5nLiB1c2VyIHN0b3BwZWQgZHJhZ2dpbmcgdGhlIG1hcCBvciBhZnRlciBub24tY2VudGVyZWQgem9vbSkuXHJcbiAgXHRcdHJldHVybiB0aGlzLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3N0b3A6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZseVRvRnJhbWUpO1xyXG4gIFx0XHRpZiAodGhpcy5fcGFuQW5pbSkge1xyXG4gIFx0XHRcdHRoaXMuX3BhbkFuaW0uc3RvcCgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmF3UGFuQnk6IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSwgdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KG9mZnNldCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0Wm9vbVNwYW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZ2V0TWF4Wm9vbSgpIC0gdGhpcy5nZXRNaW5ab29tKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9wYW5JbnNpZGVNYXhCb3VuZHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9lbmZvcmNpbmdCb3VuZHMpIHtcclxuICBcdFx0XHR0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2hlY2tJZkxvYWRlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuJyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gRE9NIGV2ZW50IGhhbmRsaW5nXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gZXZlbnRzXHJcbiAgXHRfaW5pdEV2ZW50czogZnVuY3Rpb24gKHJlbW92ZSkge1xyXG4gIFx0XHR0aGlzLl90YXJnZXRzID0ge307XHJcbiAgXHRcdHRoaXMuX3RhcmdldHNbc3RhbXAodGhpcy5fY29udGFpbmVyKV0gPSB0aGlzO1xyXG5cclxuICBcdFx0dmFyIG9uT2ZmID0gcmVtb3ZlID8gb2ZmIDogb247XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgKG9yIHRhcHMpIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBkYmxjbGljazogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgKG9yIGRvdWJsZS10YXBzKSB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2Vkb3duOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHVzaGVzIHRoZSBtb3VzZSBidXR0b24gb24gdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdXNldXA6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciByZWxlYXNlcyB0aGUgbW91c2UgYnV0dG9uIG9uIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZW92ZXI6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZW91dDogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdXNlbW92ZTogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGlsZSB0aGUgbW91c2UgbW92ZXMgb3ZlciB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgY29udGV4dG1lbnU6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBwdXNoZXMgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBvbiB0aGUgbWFwLCBwcmV2ZW50c1xyXG4gIFx0XHQvLyBkZWZhdWx0IGJyb3dzZXIgY29udGV4dCBtZW51IGZyb20gc2hvd2luZyBpZiB0aGVyZSBhcmUgbGlzdGVuZXJzIG9uXHJcbiAgXHRcdC8vIHRoaXMgZXZlbnQuIEFsc28gZmlyZWQgb24gbW9iaWxlIHdoZW4gdGhlIHVzZXIgaG9sZHMgYSBzaW5nbGUgdG91Y2hcclxuICBcdFx0Ly8gZm9yIGEgc2Vjb25kIChhbHNvIGNhbGxlZCBsb25nIHByZXNzKS5cclxuICBcdFx0Ly8gQGV2ZW50IGtleXByZXNzOiBLZXlib2FyZEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGtleSBmcm9tIHRoZSBrZXlib2FyZCB0aGF0IHByb2R1Y2VzIGEgY2hhcmFjdGVyIHZhbHVlIHdoaWxlIHRoZSBtYXAgaXMgZm9jdXNlZC5cclxuICBcdFx0Ly8gQGV2ZW50IGtleWRvd246IEtleWJvYXJkRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGEga2V5IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHRoZSBtYXAgaXMgZm9jdXNlZC4gVW5saWtlIHRoZSBga2V5cHJlc3NgIGV2ZW50LFxyXG4gIFx0XHQvLyB0aGUgYGtleWRvd25gIGV2ZW50IGlzIGZpcmVkIGZvciBrZXlzIHRoYXQgcHJvZHVjZSBhIGNoYXJhY3RlciB2YWx1ZSBhbmQgZm9yIGtleXNcclxuICBcdFx0Ly8gdGhhdCBkbyBub3QgcHJvZHVjZSBhIGNoYXJhY3RlciB2YWx1ZS5cclxuICBcdFx0Ly8gQGV2ZW50IGtleXVwOiBLZXlib2FyZEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgYSBrZXkgZnJvbSB0aGUga2V5Ym9hcmQgd2hpbGUgdGhlIG1hcCBpcyBmb2N1c2VkLlxyXG4gIFx0XHRvbk9mZih0aGlzLl9jb250YWluZXIsICdjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCAnICtcclxuICBcdFx0XHQnbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyBrZXlkb3duIGtleXVwJywgdGhpcy5faGFuZGxlRE9NRXZlbnQsIHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy50cmFja1Jlc2l6ZSkge1xyXG4gIFx0XHRcdG9uT2ZmKHdpbmRvdywgJ3Jlc2l6ZScsIHRoaXMuX29uUmVzaXplLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKEJyb3dzZXIuYW55M2QgJiYgdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQpIHtcclxuICBcdFx0XHQocmVtb3ZlID8gdGhpcy5vZmYgOiB0aGlzLm9uKS5jYWxsKHRoaXMsICdtb3ZlZW5kJywgdGhpcy5fb25Nb3ZlRW5kKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25SZXNpemU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX3Jlc2l6ZVJlcXVlc3QpO1xyXG4gIFx0XHR0aGlzLl9yZXNpemVSZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZShcclxuICBcdFx0ICAgICAgICBmdW5jdGlvbiAoKSB7IHRoaXMuaW52YWxpZGF0ZVNpemUoe2RlYm91bmNlTW92ZWVuZDogdHJ1ZX0pOyB9LCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uU2Nyb2xsOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3AgID0gMDtcclxuICBcdFx0dGhpcy5fY29udGFpbmVyLnNjcm9sbExlZnQgPSAwO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25Nb3ZlRW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9nZXRNYXBQYW5lUG9zKCk7XHJcbiAgXHRcdGlmIChNYXRoLm1heChNYXRoLmFicyhwb3MueCksIE1hdGguYWJzKHBvcy55KSkgPj0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQpIHtcclxuICBcdFx0XHQvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAzODczIGJ1dCBXZWJraXQgYWxzbyBoYXZlXHJcbiAgXHRcdFx0Ly8gYSBwaXhlbCBvZmZzZXQgb24gdmVyeSBoaWdoIHZhbHVlcywgc2VlOiBodHRwczovL2pzZmlkZGxlLm5ldC9kZzZyNWhoYi9cclxuICBcdFx0XHR0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSwgdGhpcy5nZXRab29tKCkpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9maW5kRXZlbnRUYXJnZXRzOiBmdW5jdGlvbiAoZSwgdHlwZSkge1xyXG4gIFx0XHR2YXIgdGFyZ2V0cyA9IFtdLFxyXG4gIFx0XHQgICAgdGFyZ2V0LFxyXG4gIFx0XHQgICAgaXNIb3ZlciA9IHR5cGUgPT09ICdtb3VzZW91dCcgfHwgdHlwZSA9PT0gJ21vdXNlb3ZlcicsXHJcbiAgXHRcdCAgICBzcmMgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXHJcbiAgXHRcdCAgICBkcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICBcdFx0d2hpbGUgKHNyYykge1xyXG4gIFx0XHRcdHRhcmdldCA9IHRoaXMuX3RhcmdldHNbc3RhbXAoc3JjKV07XHJcbiAgXHRcdFx0aWYgKHRhcmdldCAmJiAodHlwZSA9PT0gJ2NsaWNrJyB8fCB0eXBlID09PSAncHJlY2xpY2snKSAmJiB0aGlzLl9kcmFnZ2FibGVNb3ZlZCh0YXJnZXQpKSB7XHJcbiAgXHRcdFx0XHQvLyBQcmV2ZW50IGZpcmluZyBjbGljayBhZnRlciB5b3UganVzdCBkcmFnZ2VkIGFuIG9iamVjdC5cclxuICBcdFx0XHRcdGRyYWdnaW5nID0gdHJ1ZTtcclxuICBcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAodGFyZ2V0ICYmIHRhcmdldC5saXN0ZW5zKHR5cGUsIHRydWUpKSB7XHJcbiAgXHRcdFx0XHRpZiAoaXNIb3ZlciAmJiAhaXNFeHRlcm5hbFRhcmdldChzcmMsIGUpKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0XHR0YXJnZXRzLnB1c2godGFyZ2V0KTtcclxuICBcdFx0XHRcdGlmIChpc0hvdmVyKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmIChzcmMgPT09IHRoaXMuX2NvbnRhaW5lcikgeyBicmVhazsgfVxyXG4gIFx0XHRcdHNyYyA9IHNyYy5wYXJlbnROb2RlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICghdGFyZ2V0cy5sZW5ndGggJiYgIWRyYWdnaW5nICYmICFpc0hvdmVyICYmIHRoaXMubGlzdGVucyh0eXBlLCB0cnVlKSkge1xyXG4gIFx0XHRcdHRhcmdldHMgPSBbdGhpc107XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRhcmdldHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pc0NsaWNrRGlzYWJsZWQ6IGZ1bmN0aW9uIChlbCkge1xyXG4gIFx0XHR3aGlsZSAoZWwgJiYgZWwgIT09IHRoaXMuX2NvbnRhaW5lcikge1xyXG4gIFx0XHRcdGlmIChlbFsnX2xlYWZsZXRfZGlzYWJsZV9jbGljayddKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgXHRcdFx0ZWwgPSBlbC5wYXJlbnROb2RlO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVET01FdmVudDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dmFyIGVsID0gKGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudCk7XHJcbiAgXHRcdGlmICghdGhpcy5fbG9hZGVkIHx8IGVsWydfbGVhZmxldF9kaXNhYmxlX2V2ZW50cyddIHx8IGUudHlwZSA9PT0gJ2NsaWNrJyAmJiB0aGlzLl9pc0NsaWNrRGlzYWJsZWQoZWwpKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgdHlwZSA9IGUudHlwZTtcclxuXHJcbiAgXHRcdGlmICh0eXBlID09PSAnbW91c2Vkb3duJykge1xyXG4gIFx0XHRcdC8vIHByZXZlbnRzIG91dGxpbmUgd2hlbiBjbGlja2luZyBvbiBrZXlib2FyZC1mb2N1c2FibGUgZWxlbWVudFxyXG4gIFx0XHRcdHByZXZlbnRPdXRsaW5lKGVsKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fZmlyZURPTUV2ZW50KGUsIHR5cGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbW91c2VFdmVudHM6IFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2VvdmVyJywgJ21vdXNlb3V0JywgJ2NvbnRleHRtZW51J10sXHJcblxyXG4gIFx0X2ZpcmVET01FdmVudDogZnVuY3Rpb24gKGUsIHR5cGUsIGNhbnZhc1RhcmdldHMpIHtcclxuXHJcbiAgXHRcdGlmIChlLnR5cGUgPT09ICdjbGljaycpIHtcclxuICBcdFx0XHQvLyBGaXJlIGEgc3ludGhldGljICdwcmVjbGljaycgZXZlbnQgd2hpY2ggcHJvcGFnYXRlcyB1cCAobWFpbmx5IGZvciBjbG9zaW5nIHBvcHVwcykuXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHByZWNsaWNrOiBNb3VzZUV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgYmVmb3JlIG1vdXNlIGNsaWNrIG9uIHRoZSBtYXAgKHNvbWV0aW1lcyB1c2VmdWwgd2hlbiB5b3VcclxuICBcdFx0XHQvLyB3YW50IHNvbWV0aGluZyB0byBoYXBwZW4gb24gY2xpY2sgYmVmb3JlIGFueSBleGlzdGluZyBjbGlja1xyXG4gIFx0XHRcdC8vIGhhbmRsZXJzIHN0YXJ0IHJ1bm5pbmcpLlxyXG4gIFx0XHRcdHZhciBzeW50aCA9IGV4dGVuZCh7fSwgZSk7XHJcbiAgXHRcdFx0c3ludGgudHlwZSA9ICdwcmVjbGljayc7XHJcbiAgXHRcdFx0dGhpcy5fZmlyZURPTUV2ZW50KHN5bnRoLCBzeW50aC50eXBlLCBjYW52YXNUYXJnZXRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gRmluZCB0aGUgbGF5ZXIgdGhlIGV2ZW50IGlzIHByb3BhZ2F0aW5nIGZyb20gYW5kIGl0cyBwYXJlbnRzLlxyXG4gIFx0XHR2YXIgdGFyZ2V0cyA9IHRoaXMuX2ZpbmRFdmVudFRhcmdldHMoZSwgdHlwZSk7XHJcblxyXG4gIFx0XHRpZiAoY2FudmFzVGFyZ2V0cykge1xyXG4gIFx0XHRcdHZhciBmaWx0ZXJlZCA9IFtdOyAvLyBwaWNrIG9ubHkgdGFyZ2V0cyB3aXRoIGxpc3RlbmVyc1xyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2FudmFzVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdFx0aWYgKGNhbnZhc1RhcmdldHNbaV0ubGlzdGVucyh0eXBlLCB0cnVlKSkge1xyXG4gIFx0XHRcdFx0XHRmaWx0ZXJlZC5wdXNoKGNhbnZhc1RhcmdldHNbaV0pO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHR0YXJnZXRzID0gZmlsdGVyZWQuY29uY2F0KHRhcmdldHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIXRhcmdldHMubGVuZ3RoKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICdjb250ZXh0bWVudScpIHtcclxuICBcdFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRhcmdldHNbMF07XHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdG9yaWdpbmFsRXZlbnQ6IGVcclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdGlmIChlLnR5cGUgIT09ICdrZXlwcmVzcycgJiYgZS50eXBlICE9PSAna2V5ZG93bicgJiYgZS50eXBlICE9PSAna2V5dXAnKSB7XHJcbiAgXHRcdFx0dmFyIGlzTWFya2VyID0gdGFyZ2V0LmdldExhdExuZyAmJiAoIXRhcmdldC5fcmFkaXVzIHx8IHRhcmdldC5fcmFkaXVzIDw9IDEwKTtcclxuICBcdFx0XHRkYXRhLmNvbnRhaW5lclBvaW50ID0gaXNNYXJrZXIgP1xyXG4gIFx0XHRcdFx0dGhpcy5sYXRMbmdUb0NvbnRhaW5lclBvaW50KHRhcmdldC5nZXRMYXRMbmcoKSkgOiB0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xyXG4gIFx0XHRcdGRhdGEubGF5ZXJQb2ludCA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoZGF0YS5jb250YWluZXJQb2ludCk7XHJcbiAgXHRcdFx0ZGF0YS5sYXRsbmcgPSBpc01hcmtlciA/IHRhcmdldC5nZXRMYXRMbmcoKSA6IHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGRhdGEubGF5ZXJQb2ludCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0dGFyZ2V0c1tpXS5maXJlKHR5cGUsIGRhdGEsIHRydWUpO1xyXG4gIFx0XHRcdGlmIChkYXRhLm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQgfHxcclxuICBcdFx0XHRcdCh0YXJnZXRzW2ldLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyA9PT0gZmFsc2UgJiYgaW5kZXhPZih0aGlzLl9tb3VzZUV2ZW50cywgdHlwZSkgIT09IC0xKSkgeyByZXR1cm47IH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfZHJhZ2dhYmxlTW92ZWQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0b2JqID0gb2JqLmRyYWdnaW5nICYmIG9iai5kcmFnZ2luZy5lbmFibGVkKCkgPyBvYmogOiB0aGlzO1xyXG4gIFx0XHRyZXR1cm4gKG9iai5kcmFnZ2luZyAmJiBvYmouZHJhZ2dpbmcubW92ZWQoKSkgfHwgKHRoaXMuYm94Wm9vbSAmJiB0aGlzLmJveFpvb20ubW92ZWQoKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jbGVhckhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9oYW5kbGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdHRoaXMuX2hhbmRsZXJzW2ldLmRpc2FibGUoKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3aGVuUmVhZHkoZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0Ly8gUnVucyB0aGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCB3aGVuIHRoZSBtYXAgZ2V0cyBpbml0aWFsaXplZCB3aXRoXHJcbiAgXHQvLyBhIHZpZXcgKGNlbnRlciBhbmQgem9vbSkgYW5kIGF0IGxlYXN0IG9uZSBsYXllciwgb3IgaW1tZWRpYXRlbHlcclxuICBcdC8vIGlmIGl0J3MgYWxyZWFkeSBpbml0aWFsaXplZCwgb3B0aW9uYWxseSBwYXNzaW5nIGEgZnVuY3Rpb24gY29udGV4dC5cclxuICBcdHdoZW5SZWFkeTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHRjYWxsYmFjay5jYWxsKGNvbnRleHQgfHwgdGhpcywge3RhcmdldDogdGhpc30pO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHRoaXMub24oJ2xvYWQnLCBjYWxsYmFjaywgY29udGV4dCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuXHJcbiAgXHQvLyBwcml2YXRlIG1ldGhvZHMgZm9yIGdldHRpbmcgbWFwIHN0YXRlXHJcblxyXG4gIFx0X2dldE1hcFBhbmVQb3M6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIGdldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUpIHx8IG5ldyBQb2ludCgwLCAwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X21vdmVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9nZXRNYXBQYW5lUG9zKCk7XHJcbiAgXHRcdHJldHVybiBwb3MgJiYgIXBvcy5lcXVhbHMoWzAsIDBdKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFRvcExlZnRQb2ludDogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHR2YXIgcGl4ZWxPcmlnaW4gPSBjZW50ZXIgJiYgem9vbSAhPT0gdW5kZWZpbmVkID9cclxuICBcdFx0XHR0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pIDpcclxuICBcdFx0XHR0aGlzLmdldFBpeGVsT3JpZ2luKCk7XHJcbiAgXHRcdHJldHVybiBwaXhlbE9yaWdpbi5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0TmV3UGl4ZWxPcmlnaW46IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcclxuICBcdFx0dmFyIHZpZXdIYWxmID0gdGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0KGNlbnRlciwgem9vbSkuX3N1YnRyYWN0KHZpZXdIYWxmKS5fYWRkKHRoaXMuX2dldE1hcFBhbmVQb3MoKSkuX3JvdW5kKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9sYXRMbmdUb05ld0xheWVyUG9pbnQ6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20sIGNlbnRlcikge1xyXG4gIFx0XHR2YXIgdG9wTGVmdCA9IHRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKGNlbnRlciwgem9vbSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLnByb2plY3QobGF0bG5nLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzOiBmdW5jdGlvbiAobGF0TG5nQm91bmRzLCB6b29tLCBjZW50ZXIpIHtcclxuICBcdFx0dmFyIHRvcExlZnQgPSB0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pO1xyXG4gIFx0XHRyZXR1cm4gdG9Cb3VuZHMoW1xyXG4gIFx0XHRcdHRoaXMucHJvamVjdChsYXRMbmdCb3VuZHMuZ2V0U291dGhXZXN0KCksIHpvb20pLl9zdWJ0cmFjdCh0b3BMZWZ0KSxcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldE5vcnRoV2VzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCksXHJcbiAgXHRcdFx0dGhpcy5wcm9qZWN0KGxhdExuZ0JvdW5kcy5nZXRTb3V0aEVhc3QoKSwgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpLFxyXG4gIFx0XHRcdHRoaXMucHJvamVjdChsYXRMbmdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksIHpvb20pLl9zdWJ0cmFjdCh0b3BMZWZ0KVxyXG4gIFx0XHRdKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gbGF5ZXIgcG9pbnQgb2YgdGhlIGN1cnJlbnQgY2VudGVyXHJcbiAgXHRfZ2V0Q2VudGVyTGF5ZXJQb2ludDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0aGlzLmdldFNpemUoKS5fZGl2aWRlQnkoMikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBvZmZzZXQgb2YgdGhlIHNwZWNpZmllZCBwbGFjZSB0byB0aGUgY3VycmVudCBjZW50ZXIgaW4gcGl4ZWxzXHJcbiAgXHRfZ2V0Q2VudGVyT2Zmc2V0OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludChsYXRsbmcpLnN1YnRyYWN0KHRoaXMuX2dldENlbnRlckxheWVyUG9pbnQoKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGFkanVzdCBjZW50ZXIgZm9yIHZpZXcgdG8gZ2V0IGluc2lkZSBib3VuZHNcclxuICBcdF9saW1pdENlbnRlcjogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgYm91bmRzKSB7XHJcblxyXG4gIFx0XHRpZiAoIWJvdW5kcykgeyByZXR1cm4gY2VudGVyOyB9XHJcblxyXG4gIFx0XHR2YXIgY2VudGVyUG9pbnQgPSB0aGlzLnByb2plY3QoY2VudGVyLCB6b29tKSxcclxuICBcdFx0ICAgIHZpZXdIYWxmID0gdGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksXHJcbiAgXHRcdCAgICB2aWV3Qm91bmRzID0gbmV3IEJvdW5kcyhjZW50ZXJQb2ludC5zdWJ0cmFjdCh2aWV3SGFsZiksIGNlbnRlclBvaW50LmFkZCh2aWV3SGFsZikpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KHZpZXdCb3VuZHMsIGJvdW5kcywgem9vbSk7XHJcblxyXG4gIFx0XHQvLyBJZiBvZmZzZXQgaXMgbGVzcyB0aGFuIGEgcGl4ZWwsIGlnbm9yZS5cclxuICBcdFx0Ly8gVGhpcyBwcmV2ZW50cyB1bnN0YWJsZSBwcm9qZWN0aW9ucyBmcm9tIGdldHRpbmcgaW50b1xyXG4gIFx0XHQvLyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbnkgb2Zmc2V0cy5cclxuICBcdFx0aWYgKE1hdGguYWJzKG9mZnNldC54KSA8PSAxICYmIE1hdGguYWJzKG9mZnNldC55KSA8PSAxKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGNlbnRlcjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMudW5wcm9qZWN0KGNlbnRlclBvaW50LmFkZChvZmZzZXQpLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gYWRqdXN0IG9mZnNldCBmb3IgdmlldyB0byBnZXQgaW5zaWRlIGJvdW5kc1xyXG4gIFx0X2xpbWl0T2Zmc2V0OiBmdW5jdGlvbiAob2Zmc2V0LCBib3VuZHMpIHtcclxuICBcdFx0aWYgKCFib3VuZHMpIHsgcmV0dXJuIG9mZnNldDsgfVxyXG5cclxuICBcdFx0dmFyIHZpZXdCb3VuZHMgPSB0aGlzLmdldFBpeGVsQm91bmRzKCksXHJcbiAgXHRcdCAgICBuZXdCb3VuZHMgPSBuZXcgQm91bmRzKHZpZXdCb3VuZHMubWluLmFkZChvZmZzZXQpLCB2aWV3Qm91bmRzLm1heC5hZGQob2Zmc2V0KSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gb2Zmc2V0LmFkZCh0aGlzLl9nZXRCb3VuZHNPZmZzZXQobmV3Qm91bmRzLCBib3VuZHMpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gcmV0dXJucyBvZmZzZXQgbmVlZGVkIGZvciBweEJvdW5kcyB0byBnZXQgaW5zaWRlIG1heEJvdW5kcyBhdCBhIHNwZWNpZmllZCB6b29tXHJcbiAgXHRfZ2V0Qm91bmRzT2Zmc2V0OiBmdW5jdGlvbiAocHhCb3VuZHMsIG1heEJvdW5kcywgem9vbSkge1xyXG4gIFx0XHR2YXIgcHJvamVjdGVkTWF4Qm91bmRzID0gdG9Cb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgdGhpcy5wcm9qZWN0KG1heEJvdW5kcy5nZXROb3J0aEVhc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICAgICAgdGhpcy5wcm9qZWN0KG1heEJvdW5kcy5nZXRTb3V0aFdlc3QoKSwgem9vbSlcclxuICBcdFx0ICAgICksXHJcbiAgXHRcdCAgICBtaW5PZmZzZXQgPSBwcm9qZWN0ZWRNYXhCb3VuZHMubWluLnN1YnRyYWN0KHB4Qm91bmRzLm1pbiksXHJcbiAgXHRcdCAgICBtYXhPZmZzZXQgPSBwcm9qZWN0ZWRNYXhCb3VuZHMubWF4LnN1YnRyYWN0KHB4Qm91bmRzLm1heCksXHJcblxyXG4gIFx0XHQgICAgZHggPSB0aGlzLl9yZWJvdW5kKG1pbk9mZnNldC54LCAtbWF4T2Zmc2V0LngpLFxyXG4gIFx0XHQgICAgZHkgPSB0aGlzLl9yZWJvdW5kKG1pbk9mZnNldC55LCAtbWF4T2Zmc2V0LnkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChkeCwgZHkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVib3VuZDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XHJcbiAgXHRcdHJldHVybiBsZWZ0ICsgcmlnaHQgPiAwID9cclxuICBcdFx0XHRNYXRoLnJvdW5kKGxlZnQgLSByaWdodCkgLyAyIDpcclxuICBcdFx0XHRNYXRoLm1heCgwLCBNYXRoLmNlaWwobGVmdCkpIC0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyaWdodCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGltaXRab29tOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHR2YXIgbWluID0gdGhpcy5nZXRNaW5ab29tKCksXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLmdldE1heFpvb20oKSxcclxuICBcdFx0ICAgIHNuYXAgPSBCcm93c2VyLmFueTNkID8gdGhpcy5vcHRpb25zLnpvb21TbmFwIDogMTtcclxuICBcdFx0aWYgKHNuYXApIHtcclxuICBcdFx0XHR6b29tID0gTWF0aC5yb3VuZCh6b29tIC8gc25hcCkgKiBzbmFwO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgem9vbSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25QYW5UcmFuc2l0aW9uU3RlcDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLmZpcmUoJ21vdmUnKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uUGFuVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC1wYW4tYW5pbScpO1xyXG4gIFx0XHR0aGlzLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RyeUFuaW1hdGVkUGFuOiBmdW5jdGlvbiAoY2VudGVyLCBvcHRpb25zKSB7XHJcbiAgXHRcdC8vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbmV3IGFuZCBjdXJyZW50IGNlbnRlcnMgaW4gcGl4ZWxzXHJcbiAgXHRcdHZhciBvZmZzZXQgPSB0aGlzLl9nZXRDZW50ZXJPZmZzZXQoY2VudGVyKS5fdHJ1bmMoKTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgdG9vIGZhciB1bmxlc3MgYW5pbWF0ZTogdHJ1ZSBzcGVjaWZpZWQgaW4gb3B0aW9uc1xyXG4gIFx0XHRpZiAoKG9wdGlvbnMgJiYgb3B0aW9ucy5hbmltYXRlKSAhPT0gdHJ1ZSAmJiAhdGhpcy5nZXRTaXplKCkuY29udGFpbnMob2Zmc2V0KSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdHRoaXMucGFuQnkob2Zmc2V0LCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHJldHVybiB0cnVlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlQW5pbVByb3h5OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHR2YXIgcHJveHkgPSB0aGlzLl9wcm94eSA9IGNyZWF0ZSQxKCdkaXYnLCAnbGVhZmxldC1wcm94eSBsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTtcclxuICBcdFx0dGhpcy5fcGFuZXMubWFwUGFuZS5hcHBlbmRDaGlsZChwcm94eSk7XHJcblxyXG4gIFx0XHR0aGlzLm9uKCd6b29tYW5pbScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdFx0dmFyIHByb3AgPSBUUkFOU0ZPUk0sXHJcbiAgXHRcdFx0ICAgIHRyYW5zZm9ybSA9IHRoaXMuX3Byb3h5LnN0eWxlW3Byb3BdO1xyXG5cclxuICBcdFx0XHRzZXRUcmFuc2Zvcm0odGhpcy5fcHJveHksIHRoaXMucHJvamVjdChlLmNlbnRlciwgZS56b29tKSwgdGhpcy5nZXRab29tU2NhbGUoZS56b29tLCAxKSk7XHJcblxyXG4gIFx0XHRcdC8vIHdvcmthcm91bmQgZm9yIGNhc2Ugd2hlbiB0cmFuc2Zvcm0gaXMgdGhlIHNhbWUgYW5kIHNvIHRyYW5zaXRpb25lbmQgZXZlbnQgaXMgbm90IGZpcmVkXHJcbiAgXHRcdFx0aWYgKHRyYW5zZm9ybSA9PT0gdGhpcy5fcHJveHkuc3R5bGVbcHJvcF0gJiYgdGhpcy5fYW5pbWF0aW5nWm9vbSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSwgdGhpcyk7XHJcblxyXG4gIFx0XHR0aGlzLm9uKCdsb2FkIG1vdmVlbmQnLCB0aGlzLl9hbmltTW92ZUVuZCwgdGhpcyk7XHJcblxyXG4gIFx0XHR0aGlzLl9vbigndW5sb2FkJywgdGhpcy5fZGVzdHJveUFuaW1Qcm94eSwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9kZXN0cm95QW5pbVByb3h5OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9wcm94eSk7XHJcbiAgXHRcdHRoaXMub2ZmKCdsb2FkIG1vdmVlbmQnLCB0aGlzLl9hbmltTW92ZUVuZCwgdGhpcyk7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9wcm94eTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1Nb3ZlRW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjID0gdGhpcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0ICAgIHogPSB0aGlzLmdldFpvb20oKTtcclxuICBcdFx0c2V0VHJhbnNmb3JtKHRoaXMuX3Byb3h5LCB0aGlzLnByb2plY3QoYywgeiksIHRoaXMuZ2V0Wm9vbVNjYWxlKHosIDEpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NhdGNoVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKHRoaXMuX2FuaW1hdGluZ1pvb20gJiYgZS5wcm9wZXJ0eU5hbWUuaW5kZXhPZigndHJhbnNmb3JtJykgPj0gMCkge1xyXG4gIFx0XHRcdHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQoKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfbm90aGluZ1RvQW5pbWF0ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gIXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKS5sZW5ndGg7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90cnlBbmltYXRlZFpvb206IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9hbmltYXRpbmdab29tKSB7IHJldHVybiB0cnVlOyB9XHJcblxyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgaWYgZGlzYWJsZWQsIG5vdCBzdXBwb3J0ZWQgb3Igem9vbSBkaWZmZXJlbmNlIGlzIHRvbyBsYXJnZVxyXG4gIFx0XHRpZiAoIXRoaXMuX3pvb21BbmltYXRlZCB8fCBvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8IHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKSB8fFxyXG4gIFx0XHQgICAgICAgIE1hdGguYWJzKHpvb20gLSB0aGlzLl96b29tKSA+IHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uVGhyZXNob2xkKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICBcdFx0Ly8gb2Zmc2V0IGlzIHRoZSBwaXhlbCBjb29yZHMgb2YgdGhlIHpvb20gb3JpZ2luIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGNlbnRlclxyXG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLmdldFpvb21TY2FsZSh6b29tKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IHRoaXMuX2dldENlbnRlck9mZnNldChjZW50ZXIpLl9kaXZpZGVCeSgxIC0gMSAvIHNjYWxlKTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgaWYgdGhlIHpvb20gb3JpZ2luIGlzbid0IHdpdGhpbiBvbmUgc2NyZWVuIGZyb20gdGhlIGN1cnJlbnQgY2VudGVyLCB1bmxlc3MgZm9yY2VkXHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgIT09IHRydWUgJiYgIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG9mZnNldCkpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0XHR0aGlzXHJcbiAgXHRcdFx0ICAgIC5fbW92ZVN0YXJ0KHRydWUsIGZhbHNlKVxyXG4gIFx0XHRcdCAgICAuX2FuaW1hdGVab29tKGNlbnRlciwgem9vbSwgdHJ1ZSk7XHJcbiAgXHRcdH0sIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgc3RhcnRBbmltLCBub1VwZGF0ZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcFBhbmUpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAoc3RhcnRBbmltKSB7XHJcbiAgXHRcdFx0dGhpcy5fYW5pbWF0aW5nWm9vbSA9IHRydWU7XHJcblxyXG4gIFx0XHRcdC8vIHJlbWVtYmVyIHdoYXQgY2VudGVyL3pvb20gdG8gc2V0IGFmdGVyIGFuaW1hdGlvblxyXG4gIFx0XHRcdHRoaXMuX2FuaW1hdGVUb0NlbnRlciA9IGNlbnRlcjtcclxuICBcdFx0XHR0aGlzLl9hbmltYXRlVG9ab29tID0gem9vbTtcclxuXHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwgJ2xlYWZsZXQtem9vbS1hbmltJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIE90aGVyIEV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgem9vbWFuaW06IFpvb21BbmltRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgYXQgbGVhc3Qgb25jZSBwZXIgem9vbSBhbmltYXRpb24uIEZvciBjb250aW51b3VzIHpvb20sIGxpa2UgcGluY2ggem9vbWluZywgZmlyZWQgb25jZSBwZXIgZnJhbWUgZHVyaW5nIHpvb20uXHJcbiAgXHRcdHRoaXMuZmlyZSgnem9vbWFuaW0nLCB7XHJcbiAgXHRcdFx0Y2VudGVyOiBjZW50ZXIsXHJcbiAgXHRcdFx0em9vbTogem9vbSxcclxuICBcdFx0XHRub1VwZGF0ZTogbm9VcGRhdGVcclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX3RlbXBGaXJlWm9vbUV2ZW50KSB7XHJcbiAgXHRcdFx0dGhpcy5fdGVtcEZpcmVab29tRXZlbnQgPSB0aGlzLl96b29tICE9PSB0aGlzLl9hbmltYXRlVG9ab29tO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlciwgdGhpcy5fYW5pbWF0ZVRvWm9vbSwgdW5kZWZpbmVkLCB0cnVlKTtcclxuXHJcbiAgXHRcdC8vIFdvcmsgYXJvdW5kIHdlYmtpdCBub3QgZmlyaW5nICd0cmFuc2l0aW9uZW5kJywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzM2ODksIDI2OTNcclxuICBcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQsIHRoaXMpLCAyNTApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25ab29tVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwUGFuZSkge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXpvb20tYW5pbScpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9hbmltYXRpbmdab29tID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlciwgdGhpcy5fYW5pbWF0ZVRvWm9vbSwgdW5kZWZpbmVkLCB0cnVlKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl90ZW1wRmlyZVpvb21FdmVudCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbScpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl90ZW1wRmlyZVpvb21FdmVudDtcclxuXHJcbiAgXHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG5cclxuICBcdFx0dGhpcy5fbW92ZUVuZCh0cnVlKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQHNlY3Rpb25cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5tYXAoaWQ6IFN0cmluZywgb3B0aW9ucz86IE1hcCBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIG1hcCBvYmplY3QgZ2l2ZW4gdGhlIERPTSBJRCBvZiBhIGA8ZGl2PmAgZWxlbWVudFxyXG4gIC8vIGFuZCBvcHRpb25hbGx5IGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYE1hcCBvcHRpb25zYC5cclxuICAvL1xyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubWFwKGVsOiBIVE1MRWxlbWVudCwgb3B0aW9ucz86IE1hcCBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIG1hcCBvYmplY3QgZ2l2ZW4gYW4gaW5zdGFuY2Ugb2YgYSBgPGRpdj5gIEhUTUwgZWxlbWVudFxyXG4gIC8vIGFuZCBvcHRpb25hbGx5IGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYE1hcCBvcHRpb25zYC5cclxuICBmdW5jdGlvbiBjcmVhdGVNYXAoaWQsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgTWFwKGlkLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgQ29udHJvbFxyXG4gICAqIEBha2EgTC5Db250cm9sXHJcbiAgICogQGluaGVyaXRzIENsYXNzXHJcbiAgICpcclxuICAgKiBMLkNvbnRyb2wgaXMgYSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgbWFwIGNvbnRyb2xzLiBIYW5kbGVzIHBvc2l0aW9uaW5nLlxyXG4gICAqIEFsbCBvdGhlciBjb250cm9scyBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxyXG4gICAqL1xyXG5cclxuICB2YXIgQ29udHJvbCA9IENsYXNzLmV4dGVuZCh7XHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBDb250cm9sIE9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBwb3NpdGlvbjogU3RyaW5nID0gJ3RvcHJpZ2h0J1xyXG4gIFx0XHQvLyBUaGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wgKG9uZSBvZiB0aGUgbWFwIGNvcm5lcnMpLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGAndG9wbGVmdCdgLFxyXG4gIFx0XHQvLyBgJ3RvcHJpZ2h0J2AsIGAnYm90dG9tbGVmdCdgIG9yIGAnYm90dG9tcmlnaHQnYFxyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcHJpZ2h0J1xyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICogQ2xhc3NlcyBleHRlbmRpbmcgTC5Db250cm9sIHdpbGwgaW5oZXJpdCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XHJcbiAgXHQgKlxyXG4gIFx0ICogQG1ldGhvZCBnZXRQb3NpdGlvbjogc3RyaW5nXHJcbiAgXHQgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbC5cclxuICBcdCAqL1xyXG4gIFx0Z2V0UG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRQb3NpdGlvbihwb3NpdGlvbjogc3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wuXHJcbiAgXHRzZXRQb3NpdGlvbjogZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XHJcblxyXG4gIFx0XHRpZiAobWFwKSB7XHJcbiAgXHRcdFx0bWFwLnJlbW92ZUNvbnRyb2wodGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMub3B0aW9ucy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xyXG5cclxuICBcdFx0aWYgKG1hcCkge1xyXG4gIFx0XHRcdG1hcC5hZGRDb250cm9sKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250YWluZXI6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBIVE1MRWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBjb250cm9sLlxyXG4gIFx0Z2V0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkVG8obWFwOiBNYXApOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBjb250cm9sIHRvIHRoZSBnaXZlbiBtYXAuXHJcbiAgXHRhZGRUbzogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLnJlbW92ZSgpO1xyXG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XHJcblxyXG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gdGhpcy5vbkFkZChtYXApLFxyXG4gIFx0XHQgICAgcG9zID0gdGhpcy5nZXRQb3NpdGlvbigpLFxyXG4gIFx0XHQgICAgY29ybmVyID0gbWFwLl9jb250cm9sQ29ybmVyc1twb3NdO1xyXG5cclxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC1jb250cm9sJyk7XHJcblxyXG4gIFx0XHRpZiAocG9zLmluZGV4T2YoJ2JvdHRvbScpICE9PSAtMSkge1xyXG4gIFx0XHRcdGNvcm5lci5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBjb3JuZXIuZmlyc3RDaGlsZCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Y29ybmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX21hcC5vbigndW5sb2FkJywgdGhpcy5yZW1vdmUsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIHRoZSBjb250cm9sIGZyb20gdGhlIG1hcCBpdCBpcyBjdXJyZW50bHkgYWN0aXZlIG9uLlxyXG4gIFx0cmVtb3ZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub25SZW1vdmUpIHtcclxuICBcdFx0XHR0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX21hcC5vZmYoJ3VubG9hZCcsIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuICBcdFx0dGhpcy5fbWFwID0gbnVsbDtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVmb2N1c09uTWFwOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHQvLyBpZiBtYXAgZXhpc3RzIGFuZCBldmVudCBpcyBub3QgYSBrZXlib2FyZCBldmVudFxyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmIGUgJiYgZS5zY3JlZW5YID4gMCAmJiBlLnNjcmVlblkgPiAwKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGNvbnRyb2wgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBDb250cm9sKG9wdGlvbnMpO1xyXG4gIH07XHJcblxyXG4gIC8qIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXHJcbiAgICogQHVuaW5oZXJpdGFibGVcclxuICAgKlxyXG4gICAqIEV2ZXJ5IGNvbnRyb2wgc2hvdWxkIGV4dGVuZCBmcm9tIGBMLkNvbnRyb2xgIGFuZCAocmUtKWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuXHJcbiAgICpcclxuICAgKiBAbWV0aG9kIG9uQWRkKG1hcDogTWFwKTogSFRNTEVsZW1lbnRcclxuICAgKiBTaG91bGQgcmV0dXJuIHRoZSBjb250YWluZXIgRE9NIGVsZW1lbnQgZm9yIHRoZSBjb250cm9sIGFuZCBhZGQgbGlzdGVuZXJzIG9uIHJlbGV2YW50IG1hcCBldmVudHMuIENhbGxlZCBvbiBbYGNvbnRyb2wuYWRkVG8obWFwKWBdKCNjb250cm9sLWFkZFRvKS5cclxuICAgKlxyXG4gICAqIEBtZXRob2Qgb25SZW1vdmUobWFwOiBNYXApXHJcbiAgICogT3B0aW9uYWwgbWV0aG9kLiBTaG91bGQgY29udGFpbiBhbGwgY2xlYW4gdXAgY29kZSB0aGF0IHJlbW92ZXMgdGhlIGxpc3RlbmVycyBwcmV2aW91c2x5IGFkZGVkIGluIFtgb25BZGRgXSgjY29udHJvbC1vbmFkZCkuIENhbGxlZCBvbiBbYGNvbnRyb2wucmVtb3ZlKClgXSgjY29udHJvbC1yZW1vdmUpLlxyXG4gICAqL1xyXG5cclxuICAvKiBAbmFtZXNwYWNlIE1hcFxyXG4gICAqIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcclxuICAgKi9cclxuICBNYXAuaW5jbHVkZSh7XHJcbiAgXHQvLyBAbWV0aG9kIGFkZENvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHRoaXNcclxuICBcdC8vIEFkZHMgdGhlIGdpdmVuIGNvbnRyb2wgdG8gdGhlIG1hcFxyXG4gIFx0YWRkQ29udHJvbDogZnVuY3Rpb24gKGNvbnRyb2wpIHtcclxuICBcdFx0Y29udHJvbC5hZGRUbyh0aGlzKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlQ29udHJvbChjb250cm9sOiBDb250cm9sKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgZ2l2ZW4gY29udHJvbCBmcm9tIHRoZSBtYXBcclxuICBcdHJlbW92ZUNvbnRyb2w6IGZ1bmN0aW9uIChjb250cm9sKSB7XHJcbiAgXHRcdGNvbnRyb2wucmVtb3ZlKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdENvbnRyb2xQb3M6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNvcm5lcnMgPSB0aGlzLl9jb250cm9sQ29ybmVycyA9IHt9LFxyXG4gIFx0XHQgICAgbCA9ICdsZWFmbGV0LScsXHJcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250cm9sQ29udGFpbmVyID1cclxuICBcdFx0ICAgICAgICAgICAgY3JlYXRlJDEoJ2RpdicsIGwgKyAnY29udHJvbC1jb250YWluZXInLCB0aGlzLl9jb250YWluZXIpO1xyXG5cclxuICBcdFx0ZnVuY3Rpb24gY3JlYXRlQ29ybmVyKHZTaWRlLCBoU2lkZSkge1xyXG4gIFx0XHRcdHZhciBjbGFzc05hbWUgPSBsICsgdlNpZGUgKyAnICcgKyBsICsgaFNpZGU7XHJcblxyXG4gIFx0XHRcdGNvcm5lcnNbdlNpZGUgKyBoU2lkZV0gPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ3RvcCcsICdsZWZ0Jyk7XHJcbiAgXHRcdGNyZWF0ZUNvcm5lcigndG9wJywgJ3JpZ2h0Jyk7XHJcbiAgXHRcdGNyZWF0ZUNvcm5lcignYm90dG9tJywgJ2xlZnQnKTtcclxuICBcdFx0Y3JlYXRlQ29ybmVyKCdib3R0b20nLCAncmlnaHQnKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NsZWFyQ29udHJvbFBvczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2NvbnRyb2xDb3JuZXJzKSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2NvbnRyb2xDb3JuZXJzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZW1vdmUodGhpcy5fY29udHJvbENvbnRhaW5lcik7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250cm9sQ29ybmVycztcclxuICBcdFx0ZGVsZXRlIHRoaXMuX2NvbnRyb2xDb250YWluZXI7XHJcbiAgXHR9XHJcbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgQ29udHJvbC5MYXllcnNcclxuICAgKiBAYWthIEwuQ29udHJvbC5MYXllcnNcclxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxyXG4gICAqXHJcbiAgICogVGhlIGxheWVycyBjb250cm9sIGdpdmVzIHVzZXJzIHRoZSBhYmlsaXR5IHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBiYXNlIGxheWVycyBhbmQgc3dpdGNoIG92ZXJsYXlzIG9uL29mZiAoY2hlY2sgb3V0IHRoZSBbZGV0YWlsZWQgZXhhbXBsZV0oaHR0cHM6Ly9sZWFmbGV0anMuY29tL2V4YW1wbGVzL2xheWVycy1jb250cm9sLykpLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBiYXNlTGF5ZXJzID0ge1xyXG4gICAqIFx0XCJNYXBib3hcIjogbWFwYm94LFxyXG4gICAqIFx0XCJPcGVuU3RyZWV0TWFwXCI6IG9zbVxyXG4gICAqIH07XHJcbiAgICpcclxuICAgKiB2YXIgb3ZlcmxheXMgPSB7XHJcbiAgICogXHRcIk1hcmtlclwiOiBtYXJrZXIsXHJcbiAgICogXHRcIlJvYWRzXCI6IHJvYWRzTGF5ZXJcclxuICAgKiB9O1xyXG4gICAqXHJcbiAgICogTC5jb250cm9sLmxheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cykuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIFRoZSBgYmFzZUxheWVyc2AgYW5kIGBvdmVybGF5c2AgcGFyYW1ldGVycyBhcmUgb2JqZWN0IGxpdGVyYWxzIHdpdGggbGF5ZXIgbmFtZXMgYXMga2V5cyBhbmQgYExheWVyYCBvYmplY3RzIGFzIHZhbHVlczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1xyXG4gICAqICAgICBcIjxzb21lTmFtZTE+XCI6IGxheWVyMSxcclxuICAgKiAgICAgXCI8c29tZU5hbWUyPlwiOiBsYXllcjJcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBUaGUgbGF5ZXIgbmFtZXMgY2FuIGNvbnRhaW4gSFRNTCwgd2hpY2ggYWxsb3dzIHlvdSB0byBhZGQgYWRkaXRpb25hbCBzdHlsaW5nIHRvIHRoZSBpdGVtczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1wiPGltZyBzcmM9J215LWxheWVyLWljb24nIC8+IDxzcGFuIGNsYXNzPSdteS1sYXllci1pdGVtJz5NeSBMYXllcjwvc3Bhbj5cIjogbXlMYXllcn1cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIExheWVycyA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuTGF5ZXJzIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBjb2xsYXBzZWQ6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgd2lsbCBiZSBjb2xsYXBzZWQgaW50byBhbiBpY29uIGFuZCBleHBhbmRlZCBvbiBtb3VzZSBob3ZlciwgdG91Y2gsIG9yIGtleWJvYXJkIGFjdGl2YXRpb24uXHJcbiAgXHRcdGNvbGxhcHNlZDogdHJ1ZSxcclxuICBcdFx0cG9zaXRpb246ICd0b3ByaWdodCcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9aSW5kZXg6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgd2lsbCBhc3NpZ24gekluZGV4ZXMgaW4gaW5jcmVhc2luZyBvcmRlciB0byBhbGwgb2YgaXRzIGxheWVycyBzbyB0aGF0IHRoZSBvcmRlciBpcyBwcmVzZXJ2ZWQgd2hlbiBzd2l0Y2hpbmcgdGhlbSBvbi9vZmYuXHJcbiAgXHRcdGF1dG9aSW5kZXg6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGhpZGVTaW5nbGVCYXNlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgYmFzZSBsYXllcnMgaW4gdGhlIGNvbnRyb2wgd2lsbCBiZSBoaWRkZW4gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZS5cclxuICBcdFx0aGlkZVNpbmdsZUJhc2U6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzb3J0TGF5ZXJzOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0byBzb3J0IHRoZSBsYXllcnMuIFdoZW4gYGZhbHNlYCwgbGF5ZXJzIHdpbGwga2VlcCB0aGUgb3JkZXJcclxuICBcdFx0Ly8gaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBjb250cm9sLlxyXG4gIFx0XHRzb3J0TGF5ZXJzOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gc29ydEZ1bmN0aW9uOiBGdW5jdGlvbiA9ICpcclxuICBcdFx0Ly8gQSBbY29tcGFyZSBmdW5jdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29ydClcclxuICBcdFx0Ly8gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHNvcnRpbmcgdGhlIGxheWVycywgd2hlbiBgc29ydExheWVyc2AgaXMgYHRydWVgLlxyXG4gIFx0XHQvLyBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYm90aCB0aGUgYEwuTGF5ZXJgIGluc3RhbmNlcyBhbmQgdGhlaXIgbmFtZXMsIGFzIGluXHJcbiAgXHRcdC8vIGBzb3J0RnVuY3Rpb24obGF5ZXJBLCBsYXllckIsIG5hbWVBLCBuYW1lQilgLlxyXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCBpdCBzb3J0cyBsYXllcnMgYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgbmFtZS5cclxuICBcdFx0c29ydEZ1bmN0aW9uOiBmdW5jdGlvbiAobGF5ZXJBLCBsYXllckIsIG5hbWVBLCBuYW1lQikge1xyXG4gIFx0XHRcdHJldHVybiBuYW1lQSA8IG5hbWVCID8gLTEgOiAobmFtZUIgPCBuYW1lQSA/IDEgOiAwKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoYmFzZUxheWVycywgb3ZlcmxheXMsIG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHRoaXMuX2xheWVyQ29udHJvbElucHV0cyA9IFtdO1xyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5fbGFzdFpJbmRleCA9IDA7XHJcbiAgXHRcdHRoaXMuX2hhbmRsaW5nQ2xpY2sgPSBmYWxzZTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gYmFzZUxheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2FkZExheWVyKGJhc2VMYXllcnNbaV0sIGkpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRmb3IgKGkgaW4gb3ZlcmxheXMpIHtcclxuICBcdFx0XHR0aGlzLl9hZGRMYXllcihvdmVybGF5c1tpXSwgaSwgdHJ1ZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5faW5pdExheW91dCgpO1xyXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcclxuXHJcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcclxuICBcdFx0bWFwLm9uKCd6b29tZW5kJywgdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycywgdGhpcyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5sYXllci5vbignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRhZGRUbzogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRDb250cm9sLnByb3RvdHlwZS5hZGRUby5jYWxsKHRoaXMsIG1hcCk7XHJcbiAgXHRcdC8vIFRyaWdnZXIgZXhwYW5kIGFmdGVyIExheWVycyBDb250cm9sIGhhcyBiZWVuIGluc2VydGVkIGludG8gRE9NIHNvIHRoYXQgaXMgbm93IGhhcyBhbiBhY3R1YWwgaGVpZ2h0LlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fZXhwYW5kSWZOb3RDb2xsYXBzZWQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fbWFwLm9mZignem9vbWVuZCcsIHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsIHRoaXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHR0aGlzLl9sYXllcnNbaV0ubGF5ZXIub2ZmKCdhZGQgcmVtb3ZlJywgdGhpcy5fb25MYXllckNoYW5nZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRCYXNlTGF5ZXIobGF5ZXI6IExheWVyLCBuYW1lOiBTdHJpbmcpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIGEgYmFzZSBsYXllciAocmFkaW8gYnV0dG9uIGVudHJ5KSB3aXRoIHRoZSBnaXZlbiBuYW1lIHRvIHRoZSBjb250cm9sLlxyXG4gIFx0YWRkQmFzZUxheWVyOiBmdW5jdGlvbiAobGF5ZXIsIG5hbWUpIHtcclxuICBcdFx0dGhpcy5fYWRkTGF5ZXIobGF5ZXIsIG5hbWUpO1xyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX21hcCkgPyB0aGlzLl91cGRhdGUoKSA6IHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkT3ZlcmxheShsYXllcjogTGF5ZXIsIG5hbWU6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gb3ZlcmxheSAoY2hlY2tib3ggZW50cnkpIHdpdGggdGhlIGdpdmVuIG5hbWUgdG8gdGhlIGNvbnRyb2wuXHJcbiAgXHRhZGRPdmVybGF5OiBmdW5jdGlvbiAobGF5ZXIsIG5hbWUpIHtcclxuICBcdFx0dGhpcy5fYWRkTGF5ZXIobGF5ZXIsIG5hbWUsIHRydWUpO1xyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX21hcCkgPyB0aGlzLl91cGRhdGUoKSA6IHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlTGF5ZXIobGF5ZXI6IExheWVyKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlIHRoZSBnaXZlbiBsYXllciBmcm9tIHRoZSBjb250cm9sLlxyXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRsYXllci5vZmYoJ2FkZCByZW1vdmUnLCB0aGlzLl9vbkxheWVyQ2hhbmdlLCB0aGlzKTtcclxuXHJcbiAgXHRcdHZhciBvYmogPSB0aGlzLl9nZXRMYXllcihzdGFtcChsYXllcikpO1xyXG4gIFx0XHRpZiAob2JqKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzLnNwbGljZSh0aGlzLl9sYXllcnMuaW5kZXhPZihvYmopLCAxKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX21hcCkgPyB0aGlzLl91cGRhdGUoKSA6IHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXhwYW5kKCk6IHRoaXNcclxuICBcdC8vIEV4cGFuZCB0aGUgY29udHJvbCBjb250YWluZXIgaWYgY29sbGFwc2VkLlxyXG4gIFx0ZXhwYW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQnKTtcclxuICBcdFx0dGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQgPSBudWxsO1xyXG4gIFx0XHR2YXIgYWNjZXB0YWJsZUhlaWdodCA9IHRoaXMuX21hcC5nZXRTaXplKCkueSAtICh0aGlzLl9jb250YWluZXIub2Zmc2V0VG9wICsgNTApO1xyXG4gIFx0XHRpZiAoYWNjZXB0YWJsZUhlaWdodCA8IHRoaXMuX3NlY3Rpb24uY2xpZW50SGVpZ2h0KSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fc2VjdGlvbiwgJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyJyk7XHJcbiAgXHRcdFx0dGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQgPSBhY2NlcHRhYmxlSGVpZ2h0ICsgJ3B4JztcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9zZWN0aW9uLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXInKTtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbGxhcHNlKCk6IHRoaXNcclxuICBcdC8vIENvbGxhcHNlIHRoZSBjb250cm9sIGNvbnRhaW5lciBpZiBleHBhbmRlZC5cclxuICBcdGNvbGxhcHNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQnKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0TGF5b3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjbGFzc05hbWUgPSAnbGVhZmxldC1jb250cm9sLWxheWVycycsXHJcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lKSxcclxuICBcdFx0ICAgIGNvbGxhcHNlZCA9IHRoaXMub3B0aW9ucy5jb2xsYXBzZWQ7XHJcblxyXG4gIFx0XHQvLyBtYWtlcyB0aGlzIHdvcmsgb24gSUUgdG91Y2ggZGV2aWNlcyBieSBzdG9wcGluZyBpdCBmcm9tIGZpcmluZyBhIG1vdXNlb3V0IGV2ZW50IHdoZW4gdGhlIHRvdWNoIGlzIHJlbGVhc2VkXHJcbiAgXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnLCB0cnVlKTtcclxuXHJcbiAgXHRcdGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGNvbnRhaW5lcik7XHJcbiAgXHRcdGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihjb250YWluZXIpO1xyXG5cclxuICBcdFx0dmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uID0gY3JlYXRlJDEoJ3NlY3Rpb24nLCBjbGFzc05hbWUgKyAnLWxpc3QnKTtcclxuXHJcbiAgXHRcdGlmIChjb2xsYXBzZWQpIHtcclxuICBcdFx0XHR0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5jb2xsYXBzZSwgdGhpcyk7XHJcblxyXG4gIFx0XHRcdG9uKGNvbnRhaW5lciwge1xyXG4gIFx0XHRcdFx0bW91c2VlbnRlcjogdGhpcy5fZXhwYW5kU2FmZWx5LFxyXG4gIFx0XHRcdFx0bW91c2VsZWF2ZTogdGhpcy5jb2xsYXBzZVxyXG4gIFx0XHRcdH0sIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbGluayA9IHRoaXMuX2xheWVyc0xpbmsgPSBjcmVhdGUkMSgnYScsIGNsYXNzTmFtZSArICctdG9nZ2xlJywgY29udGFpbmVyKTtcclxuICBcdFx0bGluay5ocmVmID0gJyMnO1xyXG4gIFx0XHRsaW5rLnRpdGxlID0gJ0xheWVycyc7XHJcbiAgXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xyXG5cclxuICBcdFx0b24obGluaywge1xyXG4gIFx0XHRcdGtleWRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdFx0XHRpZiAoZS5rZXlDb2RlID09PSAxMykge1xyXG4gIFx0XHRcdFx0XHR0aGlzLl9leHBhbmRTYWZlbHkoKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9LFxyXG4gIFx0XHRcdC8vIENlcnRhaW4gc2NyZWVuIHJlYWRlcnMgaW50ZXJjZXB0IHRoZSBrZXkgZXZlbnQgYW5kIGluc3RlYWQgc2VuZCBhIGNsaWNrIGV2ZW50XHJcbiAgXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcclxuICBcdFx0XHRcdHRoaXMuX2V4cGFuZFNhZmVseSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSwgdGhpcyk7XHJcblxyXG4gIFx0XHRpZiAoIWNvbGxhcHNlZCkge1xyXG4gIFx0XHRcdHRoaXMuZXhwYW5kKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2Jhc2VMYXllcnNMaXN0ID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSArICctYmFzZScsIHNlY3Rpb24pO1xyXG4gIFx0XHR0aGlzLl9zZXBhcmF0b3IgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lICsgJy1zZXBhcmF0b3InLCBzZWN0aW9uKTtcclxuICBcdFx0dGhpcy5fb3ZlcmxheXNMaXN0ID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSArICctb3ZlcmxheXMnLCBzZWN0aW9uKTtcclxuXHJcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWN0aW9uKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldExheWVyOiBmdW5jdGlvbiAoaWQpIHtcclxuICBcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMuX2xheWVyc1tpXSAmJiBzdGFtcCh0aGlzLl9sYXllcnNbaV0ubGF5ZXIpID09PSBpZCkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMuX2xheWVyc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZExheWVyOiBmdW5jdGlvbiAobGF5ZXIsIG5hbWUsIG92ZXJsYXkpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdGxheWVyLm9uKCdhZGQgcmVtb3ZlJywgdGhpcy5fb25MYXllckNoYW5nZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2xheWVycy5wdXNoKHtcclxuICBcdFx0XHRsYXllcjogbGF5ZXIsXHJcbiAgXHRcdFx0bmFtZTogbmFtZSxcclxuICBcdFx0XHRvdmVybGF5OiBvdmVybGF5XHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzLnNvcnQoYmluZChmdW5jdGlvbiAoYSwgYikge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5zb3J0RnVuY3Rpb24oYS5sYXllciwgYi5sYXllciwgYS5uYW1lLCBiLm5hbWUpO1xyXG4gIFx0XHRcdH0sIHRoaXMpKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5hdXRvWkluZGV4ICYmIGxheWVyLnNldFpJbmRleCkge1xyXG4gIFx0XHRcdHRoaXMuX2xhc3RaSW5kZXgrKztcclxuICBcdFx0XHRsYXllci5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2V4cGFuZElmTm90Q29sbGFwc2VkKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9jb250YWluZXIpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGVtcHR5KHRoaXMuX2Jhc2VMYXllcnNMaXN0KTtcclxuICBcdFx0ZW1wdHkodGhpcy5fb3ZlcmxheXNMaXN0KTtcclxuXHJcbiAgXHRcdHRoaXMuX2xheWVyQ29udHJvbElucHV0cyA9IFtdO1xyXG4gIFx0XHR2YXIgYmFzZUxheWVyc1ByZXNlbnQsIG92ZXJsYXlzUHJlc2VudCwgaSwgb2JqLCBiYXNlTGF5ZXJzQ291bnQgPSAwO1xyXG5cclxuICBcdFx0Zm9yIChpID0gMDsgaSA8IHRoaXMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdG9iaiA9IHRoaXMuX2xheWVyc1tpXTtcclxuICBcdFx0XHR0aGlzLl9hZGRJdGVtKG9iaik7XHJcbiAgXHRcdFx0b3ZlcmxheXNQcmVzZW50ID0gb3ZlcmxheXNQcmVzZW50IHx8IG9iai5vdmVybGF5O1xyXG4gIFx0XHRcdGJhc2VMYXllcnNQcmVzZW50ID0gYmFzZUxheWVyc1ByZXNlbnQgfHwgIW9iai5vdmVybGF5O1xyXG4gIFx0XHRcdGJhc2VMYXllcnNDb3VudCArPSAhb2JqLm92ZXJsYXkgPyAxIDogMDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gSGlkZSBiYXNlIGxheWVycyBzZWN0aW9uIGlmIHRoZXJlJ3Mgb25seSBvbmUgbGF5ZXIuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaGlkZVNpbmdsZUJhc2UpIHtcclxuICBcdFx0XHRiYXNlTGF5ZXJzUHJlc2VudCA9IGJhc2VMYXllcnNQcmVzZW50ICYmIGJhc2VMYXllcnNDb3VudCA+IDE7XHJcbiAgXHRcdFx0dGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheSA9IGJhc2VMYXllcnNQcmVzZW50ID8gJycgOiAnbm9uZSc7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3NlcGFyYXRvci5zdHlsZS5kaXNwbGF5ID0gb3ZlcmxheXNQcmVzZW50ICYmIGJhc2VMYXllcnNQcmVzZW50ID8gJycgOiAnbm9uZSc7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X29uTGF5ZXJDaGFuZ2U6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5faGFuZGxpbmdDbGljaykge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgb2JqID0gdGhpcy5fZ2V0TGF5ZXIoc3RhbXAoZS50YXJnZXQpKTtcclxuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgXHRcdC8vIEBzZWN0aW9uIExheWVyIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgYmFzZWxheWVyY2hhbmdlOiBMYXllcnNDb250cm9sRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgYmFzZSBsYXllciBpcyBjaGFuZ2VkIHRocm91Z2ggdGhlIFtsYXllcnMgY29udHJvbF0oI2NvbnRyb2wtbGF5ZXJzKS5cclxuICBcdFx0Ly8gQGV2ZW50IG92ZXJsYXlhZGQ6IExheWVyc0NvbnRyb2xFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGFuIG92ZXJsYXkgaXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUgW2xheWVycyBjb250cm9sXSgjY29udHJvbC1sYXllcnMpLlxyXG4gIFx0XHQvLyBAZXZlbnQgb3ZlcmxheXJlbW92ZTogTGF5ZXJzQ29udHJvbEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYW4gb3ZlcmxheSBpcyBkZXNlbGVjdGVkIHRocm91Z2ggdGhlIFtsYXllcnMgY29udHJvbF0oI2NvbnRyb2wtbGF5ZXJzKS5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBDb250cm9sLkxheWVyc1xyXG4gIFx0XHR2YXIgdHlwZSA9IG9iai5vdmVybGF5ID9cclxuICBcdFx0XHQoZS50eXBlID09PSAnYWRkJyA/ICdvdmVybGF5YWRkJyA6ICdvdmVybGF5cmVtb3ZlJykgOlxyXG4gIFx0XHRcdChlLnR5cGUgPT09ICdhZGQnID8gJ2Jhc2VsYXllcmNoYW5nZScgOiBudWxsKTtcclxuXHJcbiAgXHRcdGlmICh0eXBlKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLmZpcmUodHlwZSwgb2JqKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBJRTcgYnVncyBvdXQgaWYgeW91IGNyZWF0ZSBhIHJhZGlvIGR5bmFtaWNhbGx5LCBzbyB5b3UgaGF2ZSB0byBkbyBpdCB0aGlzIGhhY2t5IHdheSAoc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMTkwNzkpXHJcbiAgXHRfY3JlYXRlUmFkaW9FbGVtZW50OiBmdW5jdGlvbiAobmFtZSwgY2hlY2tlZCkge1xyXG5cclxuICBcdFx0dmFyIHJhZGlvSHRtbCA9ICc8aW5wdXQgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yXCIgbmFtZT1cIicgK1xyXG4gIFx0XHRcdFx0bmFtZSArICdcIicgKyAoY2hlY2tlZCA/ICcgY2hlY2tlZD1cImNoZWNrZWRcIicgOiAnJykgKyAnLz4nO1xyXG5cclxuICBcdFx0dmFyIHJhZGlvRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBcdFx0cmFkaW9GcmFnbWVudC5pbm5lckhUTUwgPSByYWRpb0h0bWw7XHJcblxyXG4gIFx0XHRyZXR1cm4gcmFkaW9GcmFnbWVudC5maXJzdENoaWxkO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYWRkSXRlbTogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpLFxyXG4gIFx0XHQgICAgY2hlY2tlZCA9IHRoaXMuX21hcC5oYXNMYXllcihvYmoubGF5ZXIpLFxyXG4gIFx0XHQgICAgaW5wdXQ7XHJcblxyXG4gIFx0XHRpZiAob2JqLm92ZXJsYXkpIHtcclxuICBcdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgXHRcdFx0aW5wdXQudHlwZSA9ICdjaGVja2JveCc7XHJcbiAgXHRcdFx0aW5wdXQuY2xhc3NOYW1lID0gJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3InO1xyXG4gIFx0XHRcdGlucHV0LmRlZmF1bHRDaGVja2VkID0gY2hlY2tlZDtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRpbnB1dCA9IHRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgnbGVhZmxldC1iYXNlLWxheWVyc18nICsgc3RhbXAodGhpcyksIGNoZWNrZWQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMucHVzaChpbnB1dCk7XHJcbiAgXHRcdGlucHV0LmxheWVySWQgPSBzdGFtcChvYmoubGF5ZXIpO1xyXG5cclxuICBcdFx0b24oaW5wdXQsICdjbGljaycsIHRoaXMuX29uSW5wdXRDbGljaywgdGhpcyk7XHJcblxyXG4gIFx0XHR2YXIgbmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICBcdFx0bmFtZS5pbm5lckhUTUwgPSAnICcgKyBvYmoubmFtZTtcclxuXHJcbiAgXHRcdC8vIEhlbHBzIGZyb20gcHJldmVudGluZyBsYXllciBjb250cm9sIGZsaWNrZXIgd2hlbiBjaGVja2JveGVzIGFyZSBkaXNhYmxlZFxyXG4gIFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8yNzcxXHJcbiAgXHRcdHZhciBob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcblxyXG4gIFx0XHRsYWJlbC5hcHBlbmRDaGlsZChob2xkZXIpO1xyXG4gIFx0XHRob2xkZXIuYXBwZW5kQ2hpbGQoaW5wdXQpO1xyXG4gIFx0XHRob2xkZXIuYXBwZW5kQ2hpbGQobmFtZSk7XHJcblxyXG4gIFx0XHR2YXIgY29udGFpbmVyID0gb2JqLm92ZXJsYXkgPyB0aGlzLl9vdmVybGF5c0xpc3QgOiB0aGlzLl9iYXNlTGF5ZXJzTGlzdDtcclxuICBcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTtcclxuXHJcbiAgXHRcdHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKTtcclxuICBcdFx0cmV0dXJuIGxhYmVsO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25JbnB1dENsaWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBpbnB1dHMgPSB0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsXHJcbiAgXHRcdCAgICBpbnB1dCwgbGF5ZXI7XHJcbiAgXHRcdHZhciBhZGRlZExheWVycyA9IFtdLFxyXG4gIFx0XHQgICAgcmVtb3ZlZExheWVycyA9IFtdO1xyXG5cclxuICBcdFx0dGhpcy5faGFuZGxpbmdDbGljayA9IHRydWU7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gaW5wdXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgXHRcdFx0aW5wdXQgPSBpbnB1dHNbaV07XHJcbiAgXHRcdFx0bGF5ZXIgPSB0aGlzLl9nZXRMYXllcihpbnB1dC5sYXllcklkKS5sYXllcjtcclxuXHJcbiAgXHRcdFx0aWYgKGlucHV0LmNoZWNrZWQpIHtcclxuICBcdFx0XHRcdGFkZGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gIFx0XHRcdH0gZWxzZSBpZiAoIWlucHV0LmNoZWNrZWQpIHtcclxuICBcdFx0XHRcdHJlbW92ZWRMYXllcnMucHVzaChsYXllcik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBCdWdmaXggaXNzdWUgMjMxODogU2hvdWxkIHJlbW92ZSBhbGwgb2xkIGxheWVycyBiZWZvcmUgcmVhZGRpbmcgbmV3IG9uZXNcclxuICBcdFx0Zm9yIChpID0gMDsgaSA8IHJlbW92ZWRMYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRpZiAodGhpcy5fbWFwLmhhc0xheWVyKHJlbW92ZWRMYXllcnNbaV0pKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9tYXAucmVtb3ZlTGF5ZXIocmVtb3ZlZExheWVyc1tpXSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCBhZGRlZExheWVycy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdGlmICghdGhpcy5fbWFwLmhhc0xheWVyKGFkZGVkTGF5ZXJzW2ldKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fbWFwLmFkZExheWVyKGFkZGVkTGF5ZXJzW2ldKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsaW5nQ2xpY2sgPSBmYWxzZTtcclxuXHJcbiAgXHRcdHRoaXMuX3JlZm9jdXNPbk1hcCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2hlY2tEaXNhYmxlZExheWVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaW5wdXRzID0gdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLFxyXG4gIFx0XHQgICAgaW5wdXQsXHJcbiAgXHRcdCAgICBsYXllcixcclxuICBcdFx0ICAgIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gIFx0XHRcdGlucHV0ID0gaW5wdXRzW2ldO1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fZ2V0TGF5ZXIoaW5wdXQubGF5ZXJJZCkubGF5ZXI7XHJcbiAgXHRcdFx0aW5wdXQuZGlzYWJsZWQgPSAobGF5ZXIub3B0aW9ucy5taW5ab29tICE9PSB1bmRlZmluZWQgJiYgem9vbSA8IGxheWVyLm9wdGlvbnMubWluWm9vbSkgfHxcclxuICBcdFx0XHQgICAgICAgICAgICAgICAgIChsYXllci5vcHRpb25zLm1heFpvb20gIT09IHVuZGVmaW5lZCAmJiB6b29tID4gbGF5ZXIub3B0aW9ucy5tYXhab29tKTtcclxuXHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2V4cGFuZElmTm90Q29sbGFwc2VkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXAgJiYgIXRoaXMub3B0aW9ucy5jb2xsYXBzZWQpIHtcclxuICBcdFx0XHR0aGlzLmV4cGFuZCgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZXhwYW5kU2FmZWx5OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbjtcclxuICBcdFx0b24oc2VjdGlvbiwgJ2NsaWNrJywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0XHR0aGlzLmV4cGFuZCgpO1xyXG4gIFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICBcdFx0XHRvZmYoc2VjdGlvbiwgJ2NsaWNrJywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0XHR9KTtcclxuICBcdH1cclxuXHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLmNvbnRyb2wubGF5ZXJzKGJhc2VsYXllcnM/OiBPYmplY3QsIG92ZXJsYXlzPzogT2JqZWN0LCBvcHRpb25zPzogQ29udHJvbC5MYXllcnMgb3B0aW9ucylcclxuICAvLyBDcmVhdGVzIGEgbGF5ZXJzIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXJzLiBCYXNlIGxheWVycyB3aWxsIGJlIHN3aXRjaGVkIHdpdGggcmFkaW8gYnV0dG9ucywgd2hpbGUgb3ZlcmxheXMgd2lsbCBiZSBzd2l0Y2hlZCB3aXRoIGNoZWNrYm94ZXMuIE5vdGUgdGhhdCBhbGwgYmFzZSBsYXllcnMgc2hvdWxkIGJlIHBhc3NlZCBpbiB0aGUgYmFzZSBsYXllcnMgb2JqZWN0LCBidXQgb25seSBvbmUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBtYXAgZHVyaW5nIG1hcCBpbnN0YW50aWF0aW9uLlxyXG4gIHZhciBsYXllcnMgPSBmdW5jdGlvbiAoYmFzZUxheWVycywgb3ZlcmxheXMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgTGF5ZXJzKGJhc2VMYXllcnMsIG92ZXJsYXlzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2wuWm9vbVxyXG4gICAqIEBha2EgTC5Db250cm9sLlpvb21cclxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxyXG4gICAqXHJcbiAgICogQSBiYXNpYyB6b29tIGNvbnRyb2wgd2l0aCB0d28gYnV0dG9ucyAoem9vbSBpbiBhbmQgem9vbSBvdXQpLiBJdCBpcyBwdXQgb24gdGhlIG1hcCBieSBkZWZhdWx0IHVubGVzcyB5b3Ugc2V0IGl0cyBbYHpvb21Db250cm9sYCBvcHRpb25dKCNtYXAtem9vbWNvbnRyb2wpIHRvIGBmYWxzZWAuIEV4dGVuZHMgYENvbnRyb2xgLlxyXG4gICAqL1xyXG5cclxuICB2YXIgWm9vbSA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuWm9vbSBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdHBvc2l0aW9uOiAndG9wbGVmdCcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21JblRleHQ6IFN0cmluZyA9ICc8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4rPC9zcGFuPidcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBpbicgYnV0dG9uLlxyXG4gIFx0XHR6b29tSW5UZXh0OiAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kzwvc3Bhbj4nLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tSW5UaXRsZTogU3RyaW5nID0gJ1pvb20gaW4nXHJcbiAgXHRcdC8vIFRoZSB0aXRsZSBzZXQgb24gdGhlICd6b29tIGluJyBidXR0b24uXHJcbiAgXHRcdHpvb21JblRpdGxlOiAnWm9vbSBpbicsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21PdXRUZXh0OiBTdHJpbmcgPSAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JiN4MjIxMjs8L3NwYW4+J1xyXG4gIFx0XHQvLyBUaGUgdGV4dCBzZXQgb24gdGhlICd6b29tIG91dCcgYnV0dG9uLlxyXG4gIFx0XHR6b29tT3V0VGV4dDogJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiYjeDIyMTI7PC9zcGFuPicsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21PdXRUaXRsZTogU3RyaW5nID0gJ1pvb20gb3V0J1xyXG4gIFx0XHQvLyBUaGUgdGl0bGUgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRpdGxlOiAnWm9vbSBvdXQnXHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHZhciB6b29tTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtem9vbScsXHJcbiAgXHRcdCAgICBjb250YWluZXIgPSBjcmVhdGUkMSgnZGl2Jywgem9vbU5hbWUgKyAnIGxlYWZsZXQtYmFyJyksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbUluQnV0dG9uICA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21JblRleHQsIG9wdGlvbnMuem9vbUluVGl0bGUsXHJcbiAgXHRcdCAgICAgICAgem9vbU5hbWUgKyAnLWluJywgIGNvbnRhaW5lciwgdGhpcy5fem9vbUluKTtcclxuICBcdFx0dGhpcy5fem9vbU91dEJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21PdXRUZXh0LCBvcHRpb25zLnpvb21PdXRUaXRsZSxcclxuICBcdFx0ICAgICAgICB6b29tTmFtZSArICctb3V0JywgY29udGFpbmVyLCB0aGlzLl96b29tT3V0KTtcclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZURpc2FibGVkKCk7XHJcbiAgXHRcdG1hcC5vbignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwLm9mZignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX2Rpc2FibGVkID0gdHJ1ZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGVuYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVEaXNhYmxlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21JbjogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLl9tYXAuX3pvb20gPCB0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEgKiAoZS5zaGlmdEtleSA/IDMgOiAxKSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21PdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5fbWFwLl96b29tID4gdGhpcy5fbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSAqIChlLnNoaWZ0S2V5ID8gMyA6IDEpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoaHRtbCwgdGl0bGUsIGNsYXNzTmFtZSwgY29udGFpbmVyLCBmbikge1xyXG4gIFx0XHR2YXIgbGluayA9IGNyZWF0ZSQxKCdhJywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xyXG4gIFx0XHRsaW5rLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9IHRpdGxlO1xyXG5cclxuICBcdFx0LypcclxuICBcdFx0ICogV2lsbCBmb3JjZSBzY3JlZW4gcmVhZGVycyBsaWtlIFZvaWNlT3ZlciB0byByZWFkIHRoaXMgYXMgXCJab29tIGluIC0gYnV0dG9uXCJcclxuICBcdFx0ICovXHJcbiAgXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xyXG4gIFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcclxuXHJcbiAgXHRcdGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGxpbmspO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCBzdG9wKTtcclxuICBcdFx0b24obGluaywgJ2NsaWNrJywgZm4sIHRoaXMpO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCB0aGlzLl9yZWZvY3VzT25NYXAsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGxpbms7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVEaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxyXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gJ2xlYWZsZXQtZGlzYWJsZWQnO1xyXG5cclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fem9vbUluQnV0dG9uLCBjbGFzc05hbWUpO1xyXG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLCBjbGFzc05hbWUpO1xyXG4gIFx0XHR0aGlzLl96b29tSW5CdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyk7XHJcbiAgXHRcdHRoaXMuX3pvb21PdXRCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fZGlzYWJsZWQgfHwgbWFwLl96b29tID09PSBtYXAuZ2V0TWluWm9vbSgpKSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0XHR0aGlzLl96b29tT3V0QnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1heFpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0XHR0aGlzLl96b29tSW5CdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gem9vbUNvbnRyb2w6IEJvb2xlYW4gPSB0cnVlXHJcbiAgLy8gV2hldGhlciBhIFt6b29tIGNvbnRyb2xdKCNjb250cm9sLXpvb20pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdHpvb21Db250cm9sOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIE1hcC5hZGRJbml0SG9vayhmdW5jdGlvbiAoKSB7XHJcbiAgXHRpZiAodGhpcy5vcHRpb25zLnpvb21Db250cm9sKSB7XHJcbiAgXHRcdC8vIEBzZWN0aW9uIENvbnRyb2xzXHJcbiAgXHRcdC8vIEBwcm9wZXJ0eSB6b29tQ29udHJvbDogQ29udHJvbC5ab29tXHJcbiAgXHRcdC8vIFRoZSBkZWZhdWx0IHpvb20gY29udHJvbCAob25seSBhdmFpbGFibGUgaWYgdGhlXHJcbiAgXHRcdC8vIFtgem9vbUNvbnRyb2xgIG9wdGlvbl0oI21hcC16b29tY29udHJvbCkgd2FzIGB0cnVlYCB3aGVuIGNyZWF0aW5nIHRoZSBtYXApLlxyXG4gIFx0XHR0aGlzLnpvb21Db250cm9sID0gbmV3IFpvb20oKTtcclxuICBcdFx0dGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIENvbnRyb2wuWm9vbVxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC56b29tKG9wdGlvbnM6IENvbnRyb2wuWm9vbSBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSB6b29tIGNvbnRyb2xcclxuICB2YXIgem9vbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFpvb20ob3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxuICAgKiBAY2xhc3MgQ29udHJvbC5TY2FsZVxuICAgKiBAYWthIEwuQ29udHJvbC5TY2FsZVxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxuICAgKlxuICAgKiBBIHNpbXBsZSBzY2FsZSBjb250cm9sIHRoYXQgc2hvd3MgdGhlIHNjYWxlIG9mIHRoZSBjdXJyZW50IGNlbnRlciBvZiBzY3JlZW4gaW4gbWV0cmljIChtL2ttKSBhbmQgaW1wZXJpYWwgKG1pL2Z0KSBzeXN0ZW1zLiBFeHRlbmRzIGBDb250cm9sYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTY2FsZSA9IENvbnRyb2wuZXh0ZW5kKHtcbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgQ29udHJvbC5TY2FsZSBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0cG9zaXRpb246ICdib3R0b21sZWZ0JyxcblxuICBcdFx0Ly8gQG9wdGlvbiBtYXhXaWR0aDogTnVtYmVyID0gMTAwXG4gIFx0XHQvLyBNYXhpbXVtIHdpZHRoIG9mIHRoZSBjb250cm9sIGluIHBpeGVscy4gVGhlIHdpZHRoIGlzIHNldCBkeW5hbWljYWxseSB0byBzaG93IHJvdW5kIHZhbHVlcyAoZS5nLiAxMDAsIDIwMCwgNTAwKS5cbiAgXHRcdG1heFdpZHRoOiAxMDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWV0cmljOiBCb29sZWFuID0gVHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBzaG93IHRoZSBtZXRyaWMgc2NhbGUgbGluZSAobS9rbSkuXG4gIFx0XHRtZXRyaWM6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gaW1wZXJpYWw6IEJvb2xlYW4gPSBUcnVlXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHNob3cgdGhlIGltcGVyaWFsIHNjYWxlIGxpbmUgKG1pL2Z0KS5cbiAgXHRcdGltcGVyaWFsOiB0cnVlXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgY29udHJvbCBpcyB1cGRhdGVkIG9uIFtgbW92ZWVuZGBdKCNtYXAtbW92ZWVuZCksIG90aGVyd2lzZSBpdCdzIGFsd2F5cyB1cC10by1kYXRlICh1cGRhdGVkIG9uIFtgbW92ZWBdKCNtYXAtbW92ZSkpLlxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtc2NhbGUnLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpLFxuICBcdFx0ICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgXHRcdHRoaXMuX2FkZFNjYWxlcyhvcHRpb25zLCBjbGFzc05hbWUgKyAnLWxpbmUnLCBjb250YWluZXIpO1xuXG4gIFx0XHRtYXAub24ob3B0aW9ucy51cGRhdGVXaGVuSWRsZSA/ICdtb3ZlZW5kJyA6ICdtb3ZlJywgdGhpcy5fdXBkYXRlLCB0aGlzKTtcbiAgXHRcdG1hcC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLCB0aGlzKTtcblxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdG1hcC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlID8gJ21vdmVlbmQnIDogJ21vdmUnLCB0aGlzLl91cGRhdGUsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfYWRkU2NhbGVzOiBmdW5jdGlvbiAob3B0aW9ucywgY2xhc3NOYW1lLCBjb250YWluZXIpIHtcbiAgXHRcdGlmIChvcHRpb25zLm1ldHJpYykge1xuICBcdFx0XHR0aGlzLl9tU2NhbGUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xuICBcdFx0fVxuICBcdFx0aWYgKG9wdGlvbnMuaW1wZXJpYWwpIHtcbiAgXHRcdFx0dGhpcy5faVNjYWxlID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB5ID0gbWFwLmdldFNpemUoKS55IC8gMjtcblxuICBcdFx0dmFyIG1heE1ldGVycyA9IG1hcC5kaXN0YW5jZShcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoWzAsIHldKSxcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCwgeV0pKTtcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGVzKG1heE1ldGVycyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTY2FsZXM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWV0cmljICYmIG1heE1ldGVycykge1xuICBcdFx0XHR0aGlzLl91cGRhdGVNZXRyaWMobWF4TWV0ZXJzKTtcbiAgXHRcdH1cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW1wZXJpYWwgJiYgbWF4TWV0ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZUltcGVyaWFsKG1heE1ldGVycyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVNZXRyaWM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdHZhciBtZXRlcnMgPSB0aGlzLl9nZXRSb3VuZE51bShtYXhNZXRlcnMpLFxuICBcdFx0ICAgIGxhYmVsID0gbWV0ZXJzIDwgMTAwMCA/IG1ldGVycyArICcgbScgOiAobWV0ZXJzIC8gMTAwMCkgKyAnIGttJztcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5fbVNjYWxlLCBsYWJlbCwgbWV0ZXJzIC8gbWF4TWV0ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUltcGVyaWFsOiBmdW5jdGlvbiAobWF4TWV0ZXJzKSB7XG4gIFx0XHR2YXIgbWF4RmVldCA9IG1heE1ldGVycyAqIDMuMjgwODM5OSxcbiAgXHRcdCAgICBtYXhNaWxlcywgbWlsZXMsIGZlZXQ7XG5cbiAgXHRcdGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICBcdFx0XHRtYXhNaWxlcyA9IG1heEZlZXQgLyA1MjgwO1xuICBcdFx0XHRtaWxlcyA9IHRoaXMuX2dldFJvdW5kTnVtKG1heE1pbGVzKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLCBtaWxlcyArICcgbWknLCBtaWxlcyAvIG1heE1pbGVzKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0ZmVldCA9IHRoaXMuX2dldFJvdW5kTnVtKG1heEZlZXQpO1xuICBcdFx0XHR0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsIGZlZXQgKyAnIGZ0JywgZmVldCAvIG1heEZlZXQpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlU2NhbGU6IGZ1bmN0aW9uIChzY2FsZSwgdGV4dCwgcmF0aW8pIHtcbiAgXHRcdHNjYWxlLnN0eWxlLndpZHRoID0gTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGggKiByYXRpbykgKyAncHgnO1xuICBcdFx0c2NhbGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgXHR9LFxuXG4gIFx0X2dldFJvdW5kTnVtOiBmdW5jdGlvbiAobnVtKSB7XG4gIFx0XHR2YXIgcG93MTAgPSBNYXRoLnBvdygxMCwgKE1hdGguZmxvb3IobnVtKSArICcnKS5sZW5ndGggLSAxKSxcbiAgXHRcdCAgICBkID0gbnVtIC8gcG93MTA7XG5cbiAgXHRcdGQgPSBkID49IDEwID8gMTAgOlxuICBcdFx0ICAgIGQgPj0gNSA/IDUgOlxuICBcdFx0ICAgIGQgPj0gMyA/IDMgOlxuICBcdFx0ICAgIGQgPj0gMiA/IDIgOiAxO1xuXG4gIFx0XHRyZXR1cm4gcG93MTAgKiBkO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNvbnRyb2wuc2NhbGUob3B0aW9ucz86IENvbnRyb2wuU2NhbGUgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhbiBzY2FsZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gIHZhciBzY2FsZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBTY2FsZShvcHRpb25zKTtcbiAgfTtcblxuICB2YXIgdWtyYWluaWFuRmxhZyA9ICc8c3ZnIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGNsYXNzPVwibGVhZmxldC1hdHRyaWJ1dGlvbi1mbGFnXCI+PHBhdGggZmlsbD1cIiM0QzdCRTFcIiBkPVwiTTAgMGgxMnY0SDB6XCIvPjxwYXRoIGZpbGw9XCIjRkZENTAwXCIgZD1cIk0wIDRoMTJ2M0gwelwiLz48cGF0aCBmaWxsPVwiI0UwQkMwMFwiIGQ9XCJNMCA3aDEydjFIMHpcIi8+PC9zdmc+JztcclxuXHJcblxyXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2wuQXR0cmlidXRpb25cclxuICAgKiBAYWthIEwuQ29udHJvbC5BdHRyaWJ1dGlvblxyXG4gICAqIEBpbmhlcml0cyBDb250cm9sXHJcbiAgICpcclxuICAgKiBUaGUgYXR0cmlidXRpb24gY29udHJvbCBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYXR0cmlidXRpb24gZGF0YSBpbiBhIHNtYWxsIHRleHQgYm94IG9uIGEgbWFwLiBJdCBpcyBwdXQgb24gdGhlIG1hcCBieSBkZWZhdWx0IHVubGVzcyB5b3Ugc2V0IGl0cyBbYGF0dHJpYnV0aW9uQ29udHJvbGAgb3B0aW9uXSgjbWFwLWF0dHJpYnV0aW9uY29udHJvbCkgdG8gYGZhbHNlYCwgYW5kIGl0IGZldGNoZXMgYXR0cmlidXRpb24gdGV4dHMgZnJvbSBsYXllcnMgd2l0aCB0aGUgW2BnZXRBdHRyaWJ1dGlvbmAgbWV0aG9kXSgjbGF5ZXItZ2V0YXR0cmlidXRpb24pIGF1dG9tYXRpY2FsbHkuIEV4dGVuZHMgQ29udHJvbC5cclxuICAgKi9cclxuXHJcbiAgdmFyIEF0dHJpYnV0aW9uID0gQ29udHJvbC5leHRlbmQoe1xyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgQ29udHJvbC5BdHRyaWJ1dGlvbiBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdHBvc2l0aW9uOiAnYm90dG9tcmlnaHQnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwcmVmaXg6IFN0cmluZ3xmYWxzZSA9ICdMZWFmbGV0J1xyXG4gIFx0XHQvLyBUaGUgSFRNTCB0ZXh0IHNob3duIGJlZm9yZSB0aGUgYXR0cmlidXRpb25zLiBQYXNzIGBmYWxzZWAgdG8gZGlzYWJsZS5cclxuICBcdFx0cHJlZml4OiAnPGEgaHJlZj1cImh0dHBzOi8vbGVhZmxldGpzLmNvbVwiIHRpdGxlPVwiQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHNcIj4nICsgKEJyb3dzZXIuaW5saW5lU3ZnID8gdWtyYWluaWFuRmxhZyArICcgJyA6ICcnKSArICdMZWFmbGV0PC9hPidcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHRoaXMuX2F0dHJpYnV0aW9ucyA9IHt9O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRtYXAuYXR0cmlidXRpb25Db250cm9sID0gdGhpcztcclxuICBcdFx0dGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24nKTtcclxuICBcdFx0ZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdC8vIFRPRE8gdWdseSwgcmVmYWN0b3JcclxuICBcdFx0Zm9yICh2YXIgaSBpbiBtYXAuX2xheWVycykge1xyXG4gIFx0XHRcdGlmIChtYXAuX2xheWVyc1tpXS5nZXRBdHRyaWJ1dGlvbikge1xyXG4gIFx0XHRcdFx0dGhpcy5hZGRBdHRyaWJ1dGlvbihtYXAuX2xheWVyc1tpXS5nZXRBdHRyaWJ1dGlvbigpKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG5cclxuICBcdFx0bWFwLm9uKCdsYXllcmFkZCcsIHRoaXMuX2FkZEF0dHJpYnV0aW9uLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcC5vZmYoJ2xheWVyYWRkJywgdGhpcy5fYWRkQXR0cmlidXRpb24sIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYWRkQXR0cmlidXRpb246IGZ1bmN0aW9uIChldikge1xyXG4gIFx0XHRpZiAoZXYubGF5ZXIuZ2V0QXR0cmlidXRpb24pIHtcclxuICBcdFx0XHR0aGlzLmFkZEF0dHJpYnV0aW9uKGV2LmxheWVyLmdldEF0dHJpYnV0aW9uKCkpO1xyXG4gIFx0XHRcdGV2LmxheWVyLm9uY2UoJ3JlbW92ZScsIGZ1bmN0aW9uICgpIHtcclxuICBcdFx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRpb24oZXYubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSk7XHJcbiAgXHRcdFx0fSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRQcmVmaXgocHJlZml4OiBTdHJpbmd8ZmFsc2UpOiB0aGlzXHJcbiAgXHQvLyBUaGUgSFRNTCB0ZXh0IHNob3duIGJlZm9yZSB0aGUgYXR0cmlidXRpb25zLiBQYXNzIGBmYWxzZWAgdG8gZGlzYWJsZS5cclxuICBcdHNldFByZWZpeDogZnVuY3Rpb24gKHByZWZpeCkge1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMucHJlZml4ID0gcHJlZml4O1xyXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkQXR0cmlidXRpb24odGV4dDogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhbiBhdHRyaWJ1dGlvbiB0ZXh0IChlLmcuIGAnJmNvcHk7IE9wZW5TdHJlZXRNYXAgY29udHJpYnV0b3JzJ2ApLlxyXG4gIFx0YWRkQXR0cmlidXRpb246IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgXHRcdGlmICghdGV4dCkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0pIHtcclxuICBcdFx0XHR0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0gPSAwO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSsrO1xyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVBdHRyaWJ1dGlvbih0ZXh0OiBTdHJpbmcpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIGFuIGF0dHJpYnV0aW9uIHRleHQuXHJcbiAgXHRyZW1vdmVBdHRyaWJ1dGlvbjogZnVuY3Rpb24gKHRleHQpIHtcclxuICBcdFx0aWYgKCF0ZXh0KSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fYXR0cmlidXRpb25zW3RleHRdKSB7XHJcbiAgXHRcdFx0dGhpcy5fYXR0cmlidXRpb25zW3RleHRdLS07XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dmFyIGF0dHJpYnMgPSBbXTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fYXR0cmlidXRpb25zKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX2F0dHJpYnV0aW9uc1tpXSkge1xyXG4gIFx0XHRcdFx0YXR0cmlicy5wdXNoKGkpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHByZWZpeEFuZEF0dHJpYnMgPSBbXTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMucHJlZml4KSB7XHJcbiAgXHRcdFx0cHJlZml4QW5kQXR0cmlicy5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmIChhdHRyaWJzLmxlbmd0aCkge1xyXG4gIFx0XHRcdHByZWZpeEFuZEF0dHJpYnMucHVzaChhdHRyaWJzLmpvaW4oJywgJykpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MID0gcHJlZml4QW5kQXR0cmlicy5qb2luKCcgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+fDwvc3Bhbj4gJyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgLy8gQHNlY3Rpb24gQ29udHJvbCBvcHRpb25zXHJcbiAgLy8gQG9wdGlvbiBhdHRyaWJ1dGlvbkNvbnRyb2w6IEJvb2xlYW4gPSB0cnVlXHJcbiAgLy8gV2hldGhlciBhIFthdHRyaWJ1dGlvbiBjb250cm9sXSgjY29udHJvbC1hdHRyaWJ1dGlvbikgaXMgYWRkZWQgdG8gdGhlIG1hcCBieSBkZWZhdWx0LlxyXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xyXG4gIFx0YXR0cmlidXRpb25Db250cm9sOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIE1hcC5hZGRJbml0SG9vayhmdW5jdGlvbiAoKSB7XHJcbiAgXHRpZiAodGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCkge1xyXG4gIFx0XHRuZXcgQXR0cmlidXRpb24oKS5hZGRUbyh0aGlzKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBDb250cm9sLkF0dHJpYnV0aW9uXHJcbiAgLy8gQGZhY3RvcnkgTC5jb250cm9sLmF0dHJpYnV0aW9uKG9wdGlvbnM6IENvbnRyb2wuQXR0cmlidXRpb24gb3B0aW9ucylcclxuICAvLyBDcmVhdGVzIGFuIGF0dHJpYnV0aW9uIGNvbnRyb2wuXHJcbiAgdmFyIGF0dHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgQXR0cmlidXRpb24ob3B0aW9ucyk7XHJcbiAgfTtcblxuICBDb250cm9sLkxheWVycyA9IExheWVycztcbiAgQ29udHJvbC5ab29tID0gWm9vbTtcbiAgQ29udHJvbC5TY2FsZSA9IFNjYWxlO1xuICBDb250cm9sLkF0dHJpYnV0aW9uID0gQXR0cmlidXRpb247XG5cbiAgY29udHJvbC5sYXllcnMgPSBsYXllcnM7XG4gIGNvbnRyb2wuem9vbSA9IHpvb207XG4gIGNvbnRyb2wuc2NhbGUgPSBzY2FsZTtcbiAgY29udHJvbC5hdHRyaWJ1dGlvbiA9IGF0dHJpYnV0aW9uO1xuXG4gIC8qXG4gIFx0TC5IYW5kbGVyIGlzIGEgYmFzZSBjbGFzcyBmb3IgaGFuZGxlciBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgaW50ZXJuYWxseSB0byBpbmplY3RcbiAgXHRpbnRlcmFjdGlvbiBmZWF0dXJlcyBsaWtlIGRyYWdnaW5nIHRvIGNsYXNzZXMgbGlrZSBNYXAgYW5kIE1hcmtlci5cbiAgKi9cblxuICAvLyBAY2xhc3MgSGFuZGxlclxuICAvLyBAYWthIEwuSGFuZGxlclxuICAvLyBBYnN0cmFjdCBjbGFzcyBmb3IgbWFwIGludGVyYWN0aW9uIGhhbmRsZXJzXG5cbiAgdmFyIEhhbmRsZXIgPSBDbGFzcy5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBlbmFibGUoKTogdGhpc1xuICBcdC8vIEVuYWJsZXMgdGhlIGhhbmRsZXJcbiAgXHRlbmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9lbmFibGVkKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICBcdFx0dGhpcy5hZGRIb29rcygpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZGlzYWJsZSgpOiB0aGlzXG4gIFx0Ly8gRGlzYWJsZXMgdGhlIGhhbmRsZXJcbiAgXHRkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuIHRoaXM7IH1cblxuICBcdFx0dGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICBcdFx0dGhpcy5yZW1vdmVIb29rcygpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZW5hYmxlZCgpOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhhbmRsZXIgaXMgZW5hYmxlZFxuICBcdGVuYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gIFx0fVxuXG4gIFx0Ly8gQHNlY3Rpb24gRXh0ZW5zaW9uIG1ldGhvZHNcbiAgXHQvLyBDbGFzc2VzIGluaGVyaXRpbmcgZnJvbSBgSGFuZGxlcmAgbXVzdCBpbXBsZW1lbnQgdGhlIHR3byBmb2xsb3dpbmcgbWV0aG9kczpcbiAgXHQvLyBAbWV0aG9kIGFkZEhvb2tzKClcbiAgXHQvLyBDYWxsZWQgd2hlbiB0aGUgaGFuZGxlciBpcyBlbmFibGVkLCBzaG91bGQgYWRkIGV2ZW50IGhvb2tzLlxuICBcdC8vIEBtZXRob2QgcmVtb3ZlSG9va3MoKVxuICBcdC8vIENhbGxlZCB3aGVuIHRoZSBoYW5kbGVyIGlzIGRpc2FibGVkLCBzaG91bGQgcmVtb3ZlIHRoZSBldmVudCBob29rcyBhZGRlZCBwcmV2aW91c2x5LlxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBUaGVyZSBpcyBzdGF0aWMgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5IYW5kbGVyOlxuICAvLyBAZnVuY3Rpb24gYWRkVG8obWFwOiBNYXAsIG5hbWU6IFN0cmluZyk6IHRoaXNcbiAgLy8gQWRkcyBhIG5ldyBIYW5kbGVyIHRvIHRoZSBnaXZlbiBtYXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgSGFuZGxlci5hZGRUbyA9IGZ1bmN0aW9uIChtYXAsIG5hbWUpIHtcbiAgXHRtYXAuYWRkSGFuZGxlcihuYW1lLCB0aGlzKTtcbiAgXHRyZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgTWl4aW4gPSB7RXZlbnRzOiBFdmVudHN9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIERyYWdnYWJsZVxyXG4gICAqIEBha2EgTC5EcmFnZ2FibGVcclxuICAgKiBAaW5oZXJpdHMgRXZlbnRlZFxyXG4gICAqXHJcbiAgICogQSBjbGFzcyBmb3IgbWFraW5nIERPTSBlbGVtZW50cyBkcmFnZ2FibGUgKGluY2x1ZGluZyB0b3VjaCBzdXBwb3J0KS5cclxuICAgKiBVc2VkIGludGVybmFsbHkgZm9yIG1hcCBhbmQgbWFya2VyIGRyYWdnaW5nLiBPbmx5IHdvcmtzIGZvciBlbGVtZW50c1xyXG4gICAqIHRoYXQgd2VyZSBwb3NpdGlvbmVkIHdpdGggW2BMLkRvbVV0aWwuc2V0UG9zaXRpb25gXSgjZG9tdXRpbC1zZXRwb3NpdGlvbikuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIGRyYWdnYWJsZSA9IG5ldyBMLkRyYWdnYWJsZShlbGVtZW50VG9EcmFnKTtcclxuICAgKiBkcmFnZ2FibGUuZW5hYmxlKCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBTVEFSVCA9IEJyb3dzZXIudG91Y2ggPyAndG91Y2hzdGFydCBtb3VzZWRvd24nIDogJ21vdXNlZG93bic7XHJcblxyXG4gIHZhciBEcmFnZ2FibGUgPSBFdmVudGVkLmV4dGVuZCh7XHJcblxyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvLyBAYWthIERyYWdnYWJsZSBvcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xpY2tUb2xlcmFuY2U6IE51bWJlciA9IDNcclxuICBcdFx0Ly8gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2tcclxuICBcdFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxyXG4gIFx0XHRjbGlja1RvbGVyYW5jZTogM1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAY29uc3RydWN0b3IgTC5EcmFnZ2FibGUoZWw6IEhUTUxFbGVtZW50LCBkcmFnSGFuZGxlPzogSFRNTEVsZW1lbnQsIHByZXZlbnRPdXRsaW5lPzogQm9vbGVhbiwgb3B0aW9ucz86IERyYWdnYWJsZSBvcHRpb25zKVxyXG4gIFx0Ly8gQ3JlYXRlcyBhIGBEcmFnZ2FibGVgIG9iamVjdCBmb3IgbW92aW5nIGBlbGAgd2hlbiB5b3Ugc3RhcnQgZHJhZ2dpbmcgdGhlIGBkcmFnSGFuZGxlYCBlbGVtZW50IChlcXVhbHMgYGVsYCBpdHNlbGYgYnkgZGVmYXVsdCkuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZWxlbWVudCwgZHJhZ1N0YXJ0VGFyZ2V0LCBwcmV2ZW50T3V0bGluZSwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgXHRcdHRoaXMuX2RyYWdTdGFydFRhcmdldCA9IGRyYWdTdGFydFRhcmdldCB8fCBlbGVtZW50O1xyXG4gIFx0XHR0aGlzLl9wcmV2ZW50T3V0bGluZSA9IHByZXZlbnRPdXRsaW5lO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVuYWJsZSgpXHJcbiAgXHQvLyBFbmFibGVzIHRoZSBkcmFnZ2luZyBhYmlsaXR5XHJcbiAgXHRlbmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRvbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsIFNUQVJULCB0aGlzLl9vbkRvd24sIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzYWJsZSgpXHJcbiAgXHQvLyBEaXNhYmxlcyB0aGUgZHJhZ2dpbmcgYWJpbGl0eVxyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHQvLyBJZiB3ZSdyZSBjdXJyZW50bHkgZHJhZ2dpbmcgdGhpcyBkcmFnZ2FibGUsXHJcbiAgXHRcdC8vIGRpc2FibGluZyBpdCBjb3VudHMgYXMgZmlyc3QgZW5kaW5nIHRoZSBkcmFnLlxyXG4gIFx0XHRpZiAoRHJhZ2dhYmxlLl9kcmFnZ2luZyA9PT0gdGhpcykge1xyXG4gIFx0XHRcdHRoaXMuZmluaXNoRHJhZyh0cnVlKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0b2ZmKHRoaXMuX2RyYWdTdGFydFRhcmdldCwgU1RBUlQsIHRoaXMuX29uRG93biwgdGhpcyk7XHJcblxyXG4gIFx0XHR0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgXHRcdHRoaXMuX21vdmVkID0gZmFsc2U7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkRvd246IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdC8vIElnbm9yZSB0aGUgZXZlbnQgaWYgZGlzYWJsZWQ7IHRoaXMgaGFwcGVucyBpbiBJRTExXHJcbiAgXHRcdC8vIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgc2VlICMzNjY2LlxyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xyXG5cclxuICBcdFx0aWYgKGhhc0NsYXNzKHRoaXMuX2VsZW1lbnQsICdsZWFmbGV0LXpvb20tYW5pbScpKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XHJcbiAgXHRcdFx0Ly8gRmluaXNoIGRyYWdnaW5nIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdG91Y2hab29tXHJcbiAgXHRcdFx0aWYgKERyYWdnYWJsZS5fZHJhZ2dpbmcgPT09IHRoaXMpIHtcclxuICBcdFx0XHRcdHRoaXMuZmluaXNoRHJhZygpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChEcmFnZ2FibGUuX2RyYWdnaW5nIHx8IGUuc2hpZnRLZXkgfHwgKChlLndoaWNoICE9PSAxKSAmJiAoZS5idXR0b24gIT09IDEpICYmICFlLnRvdWNoZXMpKSB7IHJldHVybjsgfVxyXG4gIFx0XHREcmFnZ2FibGUuX2RyYWdnaW5nID0gdGhpczsgIC8vIFByZXZlbnQgZHJhZ2dpbmcgbXVsdGlwbGUgb2JqZWN0cyBhdCBvbmNlLlxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3ByZXZlbnRPdXRsaW5lKSB7XHJcbiAgXHRcdFx0cHJldmVudE91dGxpbmUodGhpcy5fZWxlbWVudCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGRpc2FibGVJbWFnZURyYWcoKTtcclxuICBcdFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24oKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tb3ZpbmcpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgZG93bjogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIGRyYWcgaXMgYWJvdXQgdG8gc3RhcnQuXHJcbiAgXHRcdHRoaXMuZmlyZSgnZG93bicpO1xyXG5cclxuICBcdFx0dmFyIGZpcnN0ID0gZS50b3VjaGVzID8gZS50b3VjaGVzWzBdIDogZSxcclxuICBcdFx0ICAgIHNpemVkUGFyZW50ID0gZ2V0U2l6ZWRQYXJlbnROb2RlKHRoaXMuX2VsZW1lbnQpO1xyXG5cclxuICBcdFx0dGhpcy5fc3RhcnRQb2ludCA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKTtcclxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbih0aGlzLl9lbGVtZW50KTtcclxuXHJcbiAgXHRcdC8vIENhY2hlIHRoZSBzY2FsZSwgc28gdGhhdCB3ZSBjYW4gY29udGludW91c2x5IGNvbXBlbnNhdGUgZm9yIGl0IGR1cmluZyBkcmFnIChfb25Nb3ZlKS5cclxuICBcdFx0dGhpcy5fcGFyZW50U2NhbGUgPSBnZXRTY2FsZShzaXplZFBhcmVudCk7XHJcblxyXG4gIFx0XHR2YXIgbW91c2VldmVudCA9IGUudHlwZSA9PT0gJ21vdXNlZG93bic7XHJcbiAgXHRcdG9uKGRvY3VtZW50LCBtb3VzZWV2ZW50ID8gJ21vdXNlbW92ZScgOiAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB0aGlzKTtcclxuICBcdFx0b24oZG9jdW1lbnQsIG1vdXNlZXZlbnQgPyAnbW91c2V1cCcgOiAndG91Y2hlbmQgdG91Y2hjYW5jZWwnLCB0aGlzLl9vblVwLCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uTW92ZTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gSWdub3JlIHRoZSBldmVudCBpZiBkaXNhYmxlZDsgdGhpcyBoYXBwZW5zIGluIElFMTFcclxuICBcdFx0Ly8gdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBzZWUgIzM2NjYuXHJcbiAgXHRcdGlmICghdGhpcy5fZW5hYmxlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpIHtcclxuICBcdFx0XHR0aGlzLl9tb3ZlZCA9IHRydWU7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgZmlyc3QgPSAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPT09IDEgPyBlLnRvdWNoZXNbMF0gOiBlKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7XHJcblxyXG4gIFx0XHRpZiAoIW9mZnNldC54ICYmICFvZmZzZXQueSkgeyByZXR1cm47IH1cclxuICBcdFx0aWYgKE1hdGguYWJzKG9mZnNldC54KSArIE1hdGguYWJzKG9mZnNldC55KSA8IHRoaXMub3B0aW9ucy5jbGlja1RvbGVyYW5jZSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgcG9zaXRpb24sIGJvcmRlciBhbmQgc2NhbGUgZG8gbm90IGNoYW5nZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBkcmFnLlxyXG4gIFx0XHQvLyBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gbmVlZCB0byBhY2NvdW50IGZvciB0aGUgcG9zaXRpb24gYW5kIGJvcmRlciAodGhleSBhcmUgZWxpbWluYXRlZCBieSB0aGUgc3VidHJhY3Rpb24pXHJcbiAgXHRcdC8vIGFuZCB3ZSBjYW4gdXNlIHRoZSBjYWNoZWQgdmFsdWUgZm9yIHRoZSBzY2FsZS5cclxuICBcdFx0b2Zmc2V0LnggLz0gdGhpcy5fcGFyZW50U2NhbGUueDtcclxuICBcdFx0b2Zmc2V0LnkgLz0gdGhpcy5fcGFyZW50U2NhbGUueTtcclxuXHJcbiAgXHRcdHByZXZlbnREZWZhdWx0KGUpO1xyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9tb3ZlZCkge1xyXG4gIFx0XHRcdC8vIEBldmVudCBkcmFnc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIGRyYWcgc3RhcnRzXHJcbiAgXHRcdFx0dGhpcy5maXJlKCdkcmFnc3RhcnQnKTtcclxuXHJcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0XHRhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnbGVhZmxldC1kcmFnZ2luZycpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xyXG4gIFx0XHRcdC8vIElFIGFuZCBFZGdlIGRvIG5vdCBnaXZlIHRoZSA8dXNlPiBlbGVtZW50LCBzbyBmZXRjaCBpdFxyXG4gIFx0XHRcdC8vIGlmIG5lY2Vzc2FyeVxyXG4gIFx0XHRcdGlmICh3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlICYmIHRoaXMuX2xhc3RUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gdGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwgJ2xlYWZsZXQtZHJhZy10YXJnZXQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbmV3UG9zID0gdGhpcy5fc3RhcnRQb3MuYWRkKG9mZnNldCk7XHJcbiAgXHRcdHRoaXMuX21vdmluZyA9IHRydWU7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXN0RXZlbnQgPSBlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVQb3NpdGlvbigpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGUgPSB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdEV2ZW50fTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBwcmVkcmFnOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIGRyYWdnaW5nICpiZWZvcmUqIGVhY2ggY29ycmVzcG9uZGluZ1xyXG4gIFx0XHQvLyB1cGRhdGUgb2YgdGhlIGVsZW1lbnQncyBwb3NpdGlvbi5cclxuICBcdFx0dGhpcy5maXJlKCdwcmVkcmFnJywgZSk7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuX25ld1Bvcyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgZHJhZzogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgY29udGludW91c2x5IGR1cmluZyBkcmFnZ2luZy5cclxuICBcdFx0dGhpcy5maXJlKCdkcmFnJywgZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIElnbm9yZSB0aGUgZXZlbnQgaWYgZGlzYWJsZWQ7IHRoaXMgaGFwcGVucyBpbiBJRTExXHJcbiAgXHRcdC8vIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgc2VlICMzNjY2LlxyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdHRoaXMuZmluaXNoRHJhZygpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRmaW5pc2hEcmFnOiBmdW5jdGlvbiAobm9JbmVydGlhKSB7XHJcbiAgXHRcdHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksICdsZWFmbGV0LWRyYWdnaW5nJyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbGFzdFRhcmdldCkge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX2xhc3RUYXJnZXQsICdsZWFmbGV0LWRyYWctdGFyZ2V0Jyk7XHJcbiAgXHRcdFx0dGhpcy5fbGFzdFRhcmdldCA9IG51bGw7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdG9mZihkb2N1bWVudCwgJ21vdXNlbW92ZSB0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUsIHRoaXMpO1xyXG4gIFx0XHRvZmYoZG9jdW1lbnQsICdtb3VzZXVwIHRvdWNoZW5kIHRvdWNoY2FuY2VsJywgdGhpcy5fb25VcCwgdGhpcyk7XHJcblxyXG4gIFx0XHRlbmFibGVJbWFnZURyYWcoKTtcclxuICBcdFx0ZW5hYmxlVGV4dFNlbGVjdGlvbigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21vdmVkICYmIHRoaXMuX21vdmluZykge1xyXG5cclxuICBcdFx0XHQvLyBAZXZlbnQgZHJhZ2VuZDogRHJhZ0VuZEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgZHJhZyBlbmRzLlxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnZHJhZ2VuZCcsIHtcclxuICBcdFx0XHRcdG5vSW5lcnRpYTogbm9JbmVydGlhLFxyXG4gIFx0XHRcdFx0ZGlzdGFuY2U6IHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKVxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcclxuICBcdFx0RHJhZ2dhYmxlLl9kcmFnZ2luZyA9IGZhbHNlO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgTGluZVV0aWxcclxuICAgKlxyXG4gICAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBvbHlsaW5lIHBvaW50cyBwcm9jZXNzaW5nLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBtYWtlIHBvbHlsaW5lcyBsaWdodG5pbmctZmFzdC5cclxuICAgKi9cclxuXHJcbiAgLy8gU2ltcGxpZnkgcG9seWxpbmUgd2l0aCB2ZXJ0ZXggcmVkdWN0aW9uIGFuZCBEb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb24uXHJcbiAgLy8gSW1wcm92ZXMgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGRyYW1hdGljYWxseSBieSBsZXNzZW5pbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdG8gZHJhdy5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNpbXBsaWZ5KHBvaW50czogUG9pbnRbXSwgdG9sZXJhbmNlOiBOdW1iZXIpOiBQb2ludFtdXHJcbiAgLy8gRHJhbWF0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBwb2x5bGluZSB3aGlsZSByZXRhaW5pbmdcclxuICAvLyBpdHMgc2hhcGUgYW5kIHJldHVybnMgYSBuZXcgYXJyYXkgb2Ygc2ltcGxpZmllZCBwb2ludHMsIHVzaW5nIHRoZVxyXG4gIC8vIFtSYW1lci1Eb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYW1lci1Eb3VnbGFzLVBldWNrZXJfYWxnb3JpdGhtKS5cclxuICAvLyBVc2VkIGZvciBhIGh1Z2UgcGVyZm9ybWFuY2UgYm9vc3Qgd2hlbiBwcm9jZXNzaW5nL2Rpc3BsYXlpbmcgTGVhZmxldCBwb2x5bGluZXMgZm9yXHJcbiAgLy8gZWFjaCB6b29tIGxldmVsIGFuZCBhbHNvIHJlZHVjaW5nIHZpc3VhbCBub2lzZS4gdG9sZXJhbmNlIGFmZmVjdHMgdGhlIGFtb3VudCBvZlxyXG4gIC8vIHNpbXBsaWZpY2F0aW9uIChsZXNzZXIgdmFsdWUgbWVhbnMgaGlnaGVyIHF1YWxpdHkgYnV0IHNsb3dlciBhbmQgd2l0aCBtb3JlIHBvaW50cykuXHJcbiAgLy8gQWxzbyByZWxlYXNlZCBhcyBhIHNlcGFyYXRlZCBtaWNyby1saWJyYXJ5IFtTaW1wbGlmeS5qc10oaHR0cHM6Ly9tb3VybmVyLmdpdGh1Yi5pby9zaW1wbGlmeS1qcy8pLlxyXG4gIGZ1bmN0aW9uIHNpbXBsaWZ5KHBvaW50cywgdG9sZXJhbmNlKSB7XHJcbiAgXHRpZiAoIXRvbGVyYW5jZSB8fCAhcG9pbnRzLmxlbmd0aCkge1xyXG4gIFx0XHRyZXR1cm4gcG9pbnRzLnNsaWNlKCk7XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIHNxVG9sZXJhbmNlID0gdG9sZXJhbmNlICogdG9sZXJhbmNlO1xyXG5cclxuICBcdCAgICAvLyBzdGFnZSAxOiB2ZXJ0ZXggcmVkdWN0aW9uXHJcbiAgXHQgICAgcG9pbnRzID0gX3JlZHVjZVBvaW50cyhwb2ludHMsIHNxVG9sZXJhbmNlKTtcclxuXHJcbiAgXHQgICAgLy8gc3RhZ2UgMjogRG91Z2xhcy1QZXVja2VyIHNpbXBsaWZpY2F0aW9uXHJcbiAgXHQgICAgcG9pbnRzID0gX3NpbXBsaWZ5RFAocG9pbnRzLCBzcVRvbGVyYW5jZSk7XHJcblxyXG4gIFx0cmV0dXJuIHBvaW50cztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBwb2ludFRvU2VnbWVudERpc3RhbmNlKHA6IFBvaW50LCBwMTogUG9pbnQsIHAyOiBQb2ludCk6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gcG9pbnQgYHBgIGFuZCBzZWdtZW50IGBwMWAgdG8gYHAyYC5cclxuICBmdW5jdGlvbiBwb2ludFRvU2VnbWVudERpc3RhbmNlKHAsIHAxLCBwMikge1xyXG4gIFx0cmV0dXJuIE1hdGguc3FydChfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQocCwgcDEsIHAyLCB0cnVlKSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY2xvc2VzdFBvaW50T25TZWdtZW50KHA6IFBvaW50LCBwMTogUG9pbnQsIHAyOiBQb2ludCk6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIGNsb3Nlc3QgcG9pbnQgZnJvbSBhIHBvaW50IGBwYCBvbiBhIHNlZ21lbnQgYHAxYCB0byBgcDJgLlxyXG4gIGZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIpIHtcclxuICBcdHJldHVybiBfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQocCwgcDEsIHAyKTtcclxuICB9XHJcblxyXG4gIC8vIFJhbWVyLURvdWdsYXMtUGV1Y2tlciBzaW1wbGlmaWNhdGlvbiwgc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JhbWVyLURvdWdsYXMtUGV1Y2tlcl9hbGdvcml0aG1cclxuICBmdW5jdGlvbiBfc2ltcGxpZnlEUChwb2ludHMsIHNxVG9sZXJhbmNlKSB7XHJcblxyXG4gIFx0dmFyIGxlbiA9IHBvaW50cy5sZW5ndGgsXHJcbiAgXHQgICAgQXJyYXlDb25zdHJ1Y3RvciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSB1bmRlZmluZWQgKyAnJyA/IFVpbnQ4QXJyYXkgOiBBcnJheSxcclxuICBcdCAgICBtYXJrZXJzID0gbmV3IEFycmF5Q29uc3RydWN0b3IobGVuKTtcclxuXHJcbiAgXHQgICAgbWFya2Vyc1swXSA9IG1hcmtlcnNbbGVuIC0gMV0gPSAxO1xyXG5cclxuICBcdF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCAwLCBsZW4gLSAxKTtcclxuXHJcbiAgXHR2YXIgaSxcclxuICBcdCAgICBuZXdQb2ludHMgPSBbXTtcclxuXHJcbiAgXHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0aWYgKG1hcmtlcnNbaV0pIHtcclxuICBcdFx0XHRuZXdQb2ludHMucHVzaChwb2ludHNbaV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIG5ld1BvaW50cztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCBmaXJzdCwgbGFzdCkge1xyXG5cclxuICBcdHZhciBtYXhTcURpc3QgPSAwLFxyXG4gIFx0aW5kZXgsIGksIHNxRGlzdDtcclxuXHJcbiAgXHRmb3IgKGkgPSBmaXJzdCArIDE7IGkgPD0gbGFzdCAtIDE7IGkrKykge1xyXG4gIFx0XHRzcURpc3QgPSBfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQocG9pbnRzW2ldLCBwb2ludHNbZmlyc3RdLCBwb2ludHNbbGFzdF0sIHRydWUpO1xyXG5cclxuICBcdFx0aWYgKHNxRGlzdCA+IG1heFNxRGlzdCkge1xyXG4gIFx0XHRcdGluZGV4ID0gaTtcclxuICBcdFx0XHRtYXhTcURpc3QgPSBzcURpc3Q7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRpZiAobWF4U3FEaXN0ID4gc3FUb2xlcmFuY2UpIHtcclxuICBcdFx0bWFya2Vyc1tpbmRleF0gPSAxO1xyXG5cclxuICBcdFx0X3NpbXBsaWZ5RFBTdGVwKHBvaW50cywgbWFya2Vycywgc3FUb2xlcmFuY2UsIGZpcnN0LCBpbmRleCk7XHJcbiAgXHRcdF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCBpbmRleCwgbGFzdCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyByZWR1Y2UgcG9pbnRzIHRoYXQgYXJlIHRvbyBjbG9zZSB0byBlYWNoIG90aGVyIHRvIGEgc2luZ2xlIHBvaW50XHJcbiAgZnVuY3Rpb24gX3JlZHVjZVBvaW50cyhwb2ludHMsIHNxVG9sZXJhbmNlKSB7XHJcbiAgXHR2YXIgcmVkdWNlZFBvaW50cyA9IFtwb2ludHNbMF1dO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAxLCBwcmV2ID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdGlmIChfc3FEaXN0KHBvaW50c1tpXSwgcG9pbnRzW3ByZXZdKSA+IHNxVG9sZXJhbmNlKSB7XHJcbiAgXHRcdFx0cmVkdWNlZFBvaW50cy5wdXNoKHBvaW50c1tpXSk7XHJcbiAgXHRcdFx0cHJldiA9IGk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICBcdGlmIChwcmV2IDwgbGVuIC0gMSkge1xyXG4gIFx0XHRyZWR1Y2VkUG9pbnRzLnB1c2gocG9pbnRzW2xlbiAtIDFdKTtcclxuICBcdH1cclxuICBcdHJldHVybiByZWR1Y2VkUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgdmFyIF9sYXN0Q29kZTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNsaXBTZWdtZW50KGE6IFBvaW50LCBiOiBQb2ludCwgYm91bmRzOiBCb3VuZHMsIHVzZUxhc3RDb2RlPzogQm9vbGVhbiwgcm91bmQ/OiBCb29sZWFuKTogUG9pbnRbXXxCb29sZWFuXHJcbiAgLy8gQ2xpcHMgdGhlIHNlZ21lbnQgYSB0byBiIGJ5IHJlY3Rhbmd1bGFyIGJvdW5kcyB3aXRoIHRoZVxyXG4gIC8vIFtDb2hlbi1TdXRoZXJsYW5kIGFsZ29yaXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29oZW4lRTIlODAlOTNTdXRoZXJsYW5kX2FsZ29yaXRobSlcclxuICAvLyAobW9kaWZ5aW5nIHRoZSBzZWdtZW50IHBvaW50cyBkaXJlY3RseSEpLiBVc2VkIGJ5IExlYWZsZXQgdG8gb25seSBzaG93IHBvbHlsaW5lXHJcbiAgLy8gcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzY3JlZW4gb3IgbmVhciwgaW5jcmVhc2luZyBwZXJmb3JtYW5jZS5cclxuICBmdW5jdGlvbiBjbGlwU2VnbWVudChhLCBiLCBib3VuZHMsIHVzZUxhc3RDb2RlLCByb3VuZCkge1xyXG4gIFx0dmFyIGNvZGVBID0gdXNlTGFzdENvZGUgPyBfbGFzdENvZGUgOiBfZ2V0Qml0Q29kZShhLCBib3VuZHMpLFxyXG4gIFx0ICAgIGNvZGVCID0gX2dldEJpdENvZGUoYiwgYm91bmRzKSxcclxuXHJcbiAgXHQgICAgY29kZU91dCwgcCwgbmV3Q29kZTtcclxuXHJcbiAgXHQgICAgLy8gc2F2ZSAybmQgY29kZSB0byBhdm9pZCBjYWxjdWxhdGluZyBpdCBvbiB0aGUgbmV4dCBzZWdtZW50XHJcbiAgXHQgICAgX2xhc3RDb2RlID0gY29kZUI7XHJcblxyXG4gIFx0d2hpbGUgKHRydWUpIHtcclxuICBcdFx0Ly8gaWYgYSxiIGlzIGluc2lkZSB0aGUgY2xpcCB3aW5kb3cgKHRyaXZpYWwgYWNjZXB0KVxyXG4gIFx0XHRpZiAoIShjb2RlQSB8IGNvZGVCKSkge1xyXG4gIFx0XHRcdHJldHVybiBbYSwgYl07XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGlmIGEsYiBpcyBvdXRzaWRlIHRoZSBjbGlwIHdpbmRvdyAodHJpdmlhbCByZWplY3QpXHJcbiAgXHRcdGlmIChjb2RlQSAmIGNvZGVCKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBvdGhlciBjYXNlc1xyXG4gIFx0XHRjb2RlT3V0ID0gY29kZUEgfHwgY29kZUI7XHJcbiAgXHRcdHAgPSBfZ2V0RWRnZUludGVyc2VjdGlvbihhLCBiLCBjb2RlT3V0LCBib3VuZHMsIHJvdW5kKTtcclxuICBcdFx0bmV3Q29kZSA9IF9nZXRCaXRDb2RlKHAsIGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAoY29kZU91dCA9PT0gY29kZUEpIHtcclxuICBcdFx0XHRhID0gcDtcclxuICBcdFx0XHRjb2RlQSA9IG5ld0NvZGU7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0YiA9IHA7XHJcbiAgXHRcdFx0Y29kZUIgPSBuZXdDb2RlO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZ2V0RWRnZUludGVyc2VjdGlvbihhLCBiLCBjb2RlLCBib3VuZHMsIHJvdW5kKSB7XHJcbiAgXHR2YXIgZHggPSBiLnggLSBhLngsXHJcbiAgXHQgICAgZHkgPSBiLnkgLSBhLnksXHJcbiAgXHQgICAgbWluID0gYm91bmRzLm1pbixcclxuICBcdCAgICBtYXggPSBib3VuZHMubWF4LFxyXG4gIFx0ICAgIHgsIHk7XHJcblxyXG4gIFx0aWYgKGNvZGUgJiA4KSB7IC8vIHRvcFxyXG4gIFx0XHR4ID0gYS54ICsgZHggKiAobWF4LnkgLSBhLnkpIC8gZHk7XHJcbiAgXHRcdHkgPSBtYXgueTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKGNvZGUgJiA0KSB7IC8vIGJvdHRvbVxyXG4gIFx0XHR4ID0gYS54ICsgZHggKiAobWluLnkgLSBhLnkpIC8gZHk7XHJcbiAgXHRcdHkgPSBtaW4ueTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKGNvZGUgJiAyKSB7IC8vIHJpZ2h0XHJcbiAgXHRcdHggPSBtYXgueDtcclxuICBcdFx0eSA9IGEueSArIGR5ICogKG1heC54IC0gYS54KSAvIGR4O1xyXG5cclxuICBcdH0gZWxzZSBpZiAoY29kZSAmIDEpIHsgLy8gbGVmdFxyXG4gIFx0XHR4ID0gbWluLng7XHJcbiAgXHRcdHkgPSBhLnkgKyBkeSAqIChtaW4ueCAtIGEueCkgLyBkeDtcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gbmV3IFBvaW50KHgsIHksIHJvdW5kKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9nZXRCaXRDb2RlKHAsIGJvdW5kcykge1xyXG4gIFx0dmFyIGNvZGUgPSAwO1xyXG5cclxuICBcdGlmIChwLnggPCBib3VuZHMubWluLngpIHsgLy8gbGVmdFxyXG4gIFx0XHRjb2RlIHw9IDE7XHJcbiAgXHR9IGVsc2UgaWYgKHAueCA+IGJvdW5kcy5tYXgueCkgeyAvLyByaWdodFxyXG4gIFx0XHRjb2RlIHw9IDI7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKHAueSA8IGJvdW5kcy5taW4ueSkgeyAvLyBib3R0b21cclxuICBcdFx0Y29kZSB8PSA0O1xyXG4gIFx0fSBlbHNlIGlmIChwLnkgPiBib3VuZHMubWF4LnkpIHsgLy8gdG9wXHJcbiAgXHRcdGNvZGUgfD0gODtcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gY29kZTtcclxuICB9XHJcblxyXG4gIC8vIHNxdWFyZSBkaXN0YW5jZSAodG8gYXZvaWQgdW5uZWNlc3NhcnkgTWF0aC5zcXJ0IGNhbGxzKVxyXG4gIGZ1bmN0aW9uIF9zcURpc3QocDEsIHAyKSB7XHJcbiAgXHR2YXIgZHggPSBwMi54IC0gcDEueCxcclxuICBcdCAgICBkeSA9IHAyLnkgLSBwMS55O1xyXG4gIFx0cmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xyXG4gIH1cclxuXHJcbiAgLy8gcmV0dXJuIGNsb3Nlc3QgcG9pbnQgb24gc2VnbWVudCBvciBkaXN0YW5jZSB0byB0aGF0IHBvaW50XHJcbiAgZnVuY3Rpb24gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHAsIHAxLCBwMiwgc3FEaXN0KSB7XHJcbiAgXHR2YXIgeCA9IHAxLngsXHJcbiAgXHQgICAgeSA9IHAxLnksXHJcbiAgXHQgICAgZHggPSBwMi54IC0geCxcclxuICBcdCAgICBkeSA9IHAyLnkgLSB5LFxyXG4gIFx0ICAgIGRvdCA9IGR4ICogZHggKyBkeSAqIGR5LFxyXG4gIFx0ICAgIHQ7XHJcblxyXG4gIFx0aWYgKGRvdCA+IDApIHtcclxuICBcdFx0dCA9ICgocC54IC0geCkgKiBkeCArIChwLnkgLSB5KSAqIGR5KSAvIGRvdDtcclxuXHJcbiAgXHRcdGlmICh0ID4gMSkge1xyXG4gIFx0XHRcdHggPSBwMi54O1xyXG4gIFx0XHRcdHkgPSBwMi55O1xyXG4gIFx0XHR9IGVsc2UgaWYgKHQgPiAwKSB7XHJcbiAgXHRcdFx0eCArPSBkeCAqIHQ7XHJcbiAgXHRcdFx0eSArPSBkeSAqIHQ7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRkeCA9IHAueCAtIHg7XHJcbiAgXHRkeSA9IHAueSAtIHk7XHJcblxyXG4gIFx0cmV0dXJuIHNxRGlzdCA/IGR4ICogZHggKyBkeSAqIGR5IDogbmV3IFBvaW50KHgsIHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBpc0ZsYXQobGF0bG5nczogTGF0TG5nW10pOiBCb29sZWFuXHJcbiAgLy8gUmV0dXJucyB0cnVlIGlmIGBsYXRsbmdzYCBpcyBhIGZsYXQgYXJyYXksIGZhbHNlIGlzIG5lc3RlZC5cclxuICBmdW5jdGlvbiBpc0ZsYXQobGF0bG5ncykge1xyXG4gIFx0cmV0dXJuICFpc0FycmF5KGxhdGxuZ3NbMF0pIHx8ICh0eXBlb2YgbGF0bG5nc1swXVswXSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGxhdGxuZ3NbMF1bMF0gIT09ICd1bmRlZmluZWQnKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9mbGF0KGxhdGxuZ3MpIHtcclxuICBcdGNvbnNvbGUud2FybignRGVwcmVjYXRlZCB1c2Ugb2YgX2ZsYXQsIHBsZWFzZSB1c2UgTC5MaW5lVXRpbC5pc0ZsYXQgaW5zdGVhZC4nKTtcclxuICBcdHJldHVybiBpc0ZsYXQobGF0bG5ncyk7XHJcbiAgfVxyXG5cclxuICAvKiBAZnVuY3Rpb24gcG9seWxpbmVDZW50ZXIobGF0bG5nczogTGF0TG5nW10sIGNyczogQ1JTKTogTGF0TG5nXHJcbiAgICogUmV0dXJucyB0aGUgY2VudGVyIChbY2VudHJvaWRdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2VudHJvaWQpKSBvZiB0aGUgcGFzc2VkIExhdExuZ3MgKGZpcnN0IHJpbmcpIGZyb20gYSBwb2x5bGluZS5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwb2x5bGluZUNlbnRlcihsYXRsbmdzLCBjcnMpIHtcclxuICBcdHZhciBpLCBoYWxmRGlzdCwgc2VnRGlzdCwgZGlzdCwgcDEsIHAyLCByYXRpbywgY2VudGVyO1xyXG5cclxuICBcdGlmICghbGF0bG5ncyB8fCBsYXRsbmdzLmxlbmd0aCA9PT0gMCkge1xyXG4gIFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2xhdGxuZ3Mgbm90IHBhc3NlZCcpO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmICghaXNGbGF0KGxhdGxuZ3MpKSB7XHJcbiAgXHRcdGNvbnNvbGUud2FybignbGF0bG5ncyBhcmUgbm90IGZsYXQhIE9ubHkgdGhlIGZpcnN0IHJpbmcgd2lsbCBiZSB1c2VkJyk7XHJcbiAgXHRcdGxhdGxuZ3MgPSBsYXRsbmdzWzBdO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBwb2ludHMgPSBbXTtcclxuICBcdGZvciAodmFyIGogaW4gbGF0bG5ncykge1xyXG4gIFx0XHRwb2ludHMucHVzaChjcnMucHJvamVjdCh0b0xhdExuZyhsYXRsbmdzW2pdKSkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBsZW4gPSBwb2ludHMubGVuZ3RoO1xyXG5cclxuICBcdGZvciAoaSA9IDAsIGhhbGZEaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gIFx0XHRoYWxmRGlzdCArPSBwb2ludHNbaV0uZGlzdGFuY2VUbyhwb2ludHNbaSArIDFdKSAvIDI7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gVGhlIGxpbmUgaXMgc28gc21hbGwgaW4gdGhlIGN1cnJlbnQgdmlldyB0aGF0IGFsbCBwb2ludHMgYXJlIG9uIHRoZSBzYW1lIHBpeGVsLlxyXG4gIFx0aWYgKGhhbGZEaXN0ID09PSAwKSB7XHJcbiAgXHRcdGNlbnRlciA9IHBvaW50c1swXTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGZvciAoaSA9IDAsIGRpc3QgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XHJcbiAgXHRcdFx0cDEgPSBwb2ludHNbaV07XHJcbiAgXHRcdFx0cDIgPSBwb2ludHNbaSArIDFdO1xyXG4gIFx0XHRcdHNlZ0Rpc3QgPSBwMS5kaXN0YW5jZVRvKHAyKTtcclxuICBcdFx0XHRkaXN0ICs9IHNlZ0Rpc3Q7XHJcblxyXG4gIFx0XHRcdGlmIChkaXN0ID4gaGFsZkRpc3QpIHtcclxuICBcdFx0XHRcdHJhdGlvID0gKGRpc3QgLSBoYWxmRGlzdCkgLyBzZWdEaXN0O1xyXG4gIFx0XHRcdFx0Y2VudGVyID0gW1xyXG4gIFx0XHRcdFx0XHRwMi54IC0gcmF0aW8gKiAocDIueCAtIHAxLngpLFxyXG4gIFx0XHRcdFx0XHRwMi55IC0gcmF0aW8gKiAocDIueSAtIHAxLnkpXHJcbiAgXHRcdFx0XHRdO1xyXG4gIFx0XHRcdFx0YnJlYWs7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gY3JzLnVucHJvamVjdCh0b1BvaW50KGNlbnRlcikpO1xyXG4gIH1cblxuICB2YXIgTGluZVV0aWwgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgICBwb2ludFRvU2VnbWVudERpc3RhbmNlOiBwb2ludFRvU2VnbWVudERpc3RhbmNlLFxuICAgIGNsb3Nlc3RQb2ludE9uU2VnbWVudDogY2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGNsaXBTZWdtZW50OiBjbGlwU2VnbWVudCxcbiAgICBfZ2V0RWRnZUludGVyc2VjdGlvbjogX2dldEVkZ2VJbnRlcnNlY3Rpb24sXG4gICAgX2dldEJpdENvZGU6IF9nZXRCaXRDb2RlLFxuICAgIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudDogX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGlzRmxhdDogaXNGbGF0LFxuICAgIF9mbGF0OiBfZmxhdCxcbiAgICBwb2x5bGluZUNlbnRlcjogcG9seWxpbmVDZW50ZXJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUG9seVV0aWxcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwb2x5Z29uIGdlb21ldHJpZXMuXHJcbiAgICovXHJcblxyXG4gIC8qIEBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHM6IFBvaW50W10sIGJvdW5kczogQm91bmRzLCByb3VuZD86IEJvb2xlYW4pOiBQb2ludFtdXHJcbiAgICogQ2xpcHMgdGhlIHBvbHlnb24gZ2VvbWV0cnkgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gYHBvaW50c2AgYnkgdGhlIGdpdmVuIGJvdW5kcyAodXNpbmcgdGhlIFtTdXRoZXJsYW5kLUhvZGdtYW4gYWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdXRoZXJsYW5kJUUyJTgwJTkzSG9kZ21hbl9hbGdvcml0aG0pKS5cclxuICAgKiBVc2VkIGJ5IExlYWZsZXQgdG8gb25seSBzaG93IHBvbHlnb24gcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzY3JlZW4gb3IgbmVhciwgaW5jcmVhc2luZ1xyXG4gICAqIHBlcmZvcm1hbmNlLiBOb3RlIHRoYXQgcG9seWdvbiBwb2ludHMgbmVlZHMgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgY2xpcHBpbmdcclxuICAgKiB0aGFuIHBvbHlsaW5lLCBzbyB0aGVyZSdzIGEgc2VwYXJhdGUgbWV0aG9kIGZvciBpdC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHMsIGJvdW5kcywgcm91bmQpIHtcclxuICBcdHZhciBjbGlwcGVkUG9pbnRzLFxyXG4gIFx0ICAgIGVkZ2VzID0gWzEsIDQsIDIsIDhdLFxyXG4gIFx0ICAgIGksIGosIGssXHJcbiAgXHQgICAgYSwgYixcclxuICBcdCAgICBsZW4sIGVkZ2UsIHA7XHJcblxyXG4gIFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHBvaW50c1tpXS5fY29kZSA9IF9nZXRCaXRDb2RlKHBvaW50c1tpXSwgYm91bmRzKTtcclxuICBcdH1cclxuXHJcbiAgXHQvLyBmb3IgZWFjaCBlZGdlIChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApXHJcbiAgXHRmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgXHRcdGVkZ2UgPSBlZGdlc1trXTtcclxuICBcdFx0Y2xpcHBlZFBvaW50cyA9IFtdO1xyXG5cclxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcclxuICBcdFx0XHRhID0gcG9pbnRzW2ldO1xyXG4gIFx0XHRcdGIgPSBwb2ludHNbal07XHJcblxyXG4gIFx0XHRcdC8vIGlmIGEgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvd1xyXG4gIFx0XHRcdGlmICghKGEuX2NvZGUgJiBlZGdlKSkge1xyXG4gIFx0XHRcdFx0Ly8gaWYgYiBpcyBvdXRzaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBnb2VzIG91dCBvZiBzY3JlZW4pXHJcbiAgXHRcdFx0XHRpZiAoYi5fY29kZSAmIGVkZ2UpIHtcclxuICBcdFx0XHRcdFx0cCA9IF9nZXRFZGdlSW50ZXJzZWN0aW9uKGIsIGEsIGVkZ2UsIGJvdW5kcywgcm91bmQpO1xyXG4gIFx0XHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKHApO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKGEpO1xyXG5cclxuICBcdFx0XHQvLyBlbHNlIGlmIGIgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBlbnRlcnMgdGhlIHNjcmVlbilcclxuICBcdFx0XHR9IGVsc2UgaWYgKCEoYi5fY29kZSAmIGVkZ2UpKSB7XHJcbiAgXHRcdFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYiwgYSwgZWRnZSwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdGNsaXBwZWRQb2ludHMucHVzaChwKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cG9pbnRzID0gY2xpcHBlZFBvaW50cztcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gcG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLyogQGZ1bmN0aW9uIHBvbHlnb25DZW50ZXIobGF0bG5nczogTGF0TG5nW10gY3JzOiBDUlMpOiBMYXRMbmdcclxuICAgKiBSZXR1cm5zIHRoZSBjZW50ZXIgKFtjZW50cm9pZF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cm9pZCkpIG9mIHRoZSBwYXNzZWQgTGF0TG5ncyAoZmlyc3QgcmluZykgZnJvbSBhIHBvbHlnb24uXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcG9seWdvbkNlbnRlcihsYXRsbmdzLCBjcnMpIHtcclxuICBcdHZhciBpLCBqLCBwMSwgcDIsIGYsIGFyZWEsIHgsIHksIGNlbnRlcjtcclxuXHJcbiAgXHRpZiAoIWxhdGxuZ3MgfHwgbGF0bG5ncy5sZW5ndGggPT09IDApIHtcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdsYXRsbmdzIG5vdCBwYXNzZWQnKTtcclxuICBcdH1cclxuXHJcbiAgXHRpZiAoIWlzRmxhdChsYXRsbmdzKSkge1xyXG4gIFx0XHRjb25zb2xlLndhcm4oJ2xhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZCcpO1xyXG4gIFx0XHRsYXRsbmdzID0gbGF0bG5nc1swXTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgcG9pbnRzID0gW107XHJcbiAgXHRmb3IgKHZhciBrIGluIGxhdGxuZ3MpIHtcclxuICBcdFx0cG9pbnRzLnB1c2goY3JzLnByb2plY3QodG9MYXRMbmcobGF0bG5nc1trXSkpKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgbGVuID0gcG9pbnRzLmxlbmd0aDtcclxuICBcdGFyZWEgPSB4ID0geSA9IDA7XHJcblxyXG4gIFx0Ly8gcG9seWdvbiBjZW50cm9pZCBhbGdvcml0aG07XHJcbiAgXHRmb3IgKGkgPSAwLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xyXG4gIFx0XHRwMSA9IHBvaW50c1tpXTtcclxuICBcdFx0cDIgPSBwb2ludHNbal07XHJcblxyXG4gIFx0XHRmID0gcDEueSAqIHAyLnggLSBwMi55ICogcDEueDtcclxuICBcdFx0eCArPSAocDEueCArIHAyLngpICogZjtcclxuICBcdFx0eSArPSAocDEueSArIHAyLnkpICogZjtcclxuICBcdFx0YXJlYSArPSBmICogMztcclxuICBcdH1cclxuXHJcbiAgXHRpZiAoYXJlYSA9PT0gMCkge1xyXG4gIFx0XHQvLyBQb2x5Z29uIGlzIHNvIHNtYWxsIHRoYXQgYWxsIHBvaW50cyBhcmUgb24gc2FtZSBwaXhlbC5cclxuICBcdFx0Y2VudGVyID0gcG9pbnRzWzBdO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0Y2VudGVyID0gW3ggLyBhcmVhLCB5IC8gYXJlYV07XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gY3JzLnVucHJvamVjdCh0b1BvaW50KGNlbnRlcikpO1xyXG4gIH1cblxuICB2YXIgUG9seVV0aWwgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNsaXBQb2x5Z29uOiBjbGlwUG9seWdvbixcbiAgICBwb2x5Z29uQ2VudGVyOiBwb2x5Z29uQ2VudGVyXG4gIH07XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIFByb2plY3Rpb25cclxuICAgKiBAc2VjdGlvblxyXG4gICAqIExlYWZsZXQgY29tZXMgd2l0aCBhIHNldCBvZiBhbHJlYWR5IGRlZmluZWQgUHJvamVjdGlvbnMgb3V0IG9mIHRoZSBib3g6XHJcbiAgICpcclxuICAgKiBAcHJvamVjdGlvbiBMLlByb2plY3Rpb24uTG9uTGF0XHJcbiAgICpcclxuICAgKiBFcXVpcmVjdGFuZ3VsYXIsIG9yIFBsYXRlIENhcnJlZSBwcm9qZWN0aW9uIOKAlCB0aGUgbW9zdCBzaW1wbGUgcHJvamVjdGlvbixcclxuICAgKiBtb3N0bHkgdXNlZCBieSBHSVMgZW50aHVzaWFzdHMuIERpcmVjdGx5IG1hcHMgYHhgIGFzIGxvbmdpdHVkZSwgYW5kIGB5YCBhc1xyXG4gICAqIGxhdGl0dWRlLiBBbHNvIHN1aXRhYmxlIGZvciBmbGF0IHdvcmxkcywgZS5nLiBnYW1lIG1hcHMuIFVzZWQgYnkgdGhlXHJcbiAgICogYEVQU0c6NDMyNmAgYW5kIGBTaW1wbGVgIENSUy5cclxuICAgKi9cclxuXHJcbiAgdmFyIExvbkxhdCA9IHtcclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChsYXRsbmcubG5nLCBsYXRsbmcubGF0KTtcclxuICBcdH0sXHJcblxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcocG9pbnQueSwgcG9pbnQueCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGJvdW5kczogbmV3IEJvdW5kcyhbLTE4MCwgLTkwXSwgWzE4MCwgOTBdKVxyXG4gIH07XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIFByb2plY3Rpb25cclxuICAgKiBAcHJvamVjdGlvbiBMLlByb2plY3Rpb24uTWVyY2F0b3JcclxuICAgKlxyXG4gICAqIEVsbGlwdGljYWwgTWVyY2F0b3IgcHJvamVjdGlvbiDigJQgbW9yZSBjb21wbGV4IHRoYW4gU3BoZXJpY2FsIE1lcmNhdG9yLiBBc3N1bWVzIHRoYXQgRWFydGggaXMgYW4gZWxsaXBzb2lkLiBVc2VkIGJ5IHRoZSBFUFNHOjMzOTUgQ1JTLlxyXG4gICAqL1xyXG5cclxuICB2YXIgTWVyY2F0b3IgPSB7XHJcbiAgXHRSOiA2Mzc4MTM3LFxyXG4gIFx0Ul9NSU5PUjogNjM1Njc1Mi4zMTQyNDUxNzksXHJcblxyXG4gIFx0Ym91bmRzOiBuZXcgQm91bmRzKFstMjAwMzc1MDguMzQyNzksIC0xNTQ5NjU3MC43Mzk3Ml0sIFsyMDAzNzUwOC4zNDI3OSwgMTg3NjQ2NTYuMjMxMzhdKSxcclxuXHJcbiAgXHRwcm9qZWN0OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBkID0gTWF0aC5QSSAvIDE4MCxcclxuICBcdFx0ICAgIHIgPSB0aGlzLlIsXHJcbiAgXHRcdCAgICB5ID0gbGF0bG5nLmxhdCAqIGQsXHJcbiAgXHRcdCAgICB0bXAgPSB0aGlzLlJfTUlOT1IgLyByLFxyXG4gIFx0XHQgICAgZSA9IE1hdGguc3FydCgxIC0gdG1wICogdG1wKSxcclxuICBcdFx0ICAgIGNvbiA9IGUgKiBNYXRoLnNpbih5KTtcclxuXHJcbiAgXHRcdHZhciB0cyA9IE1hdGgudGFuKE1hdGguUEkgLyA0IC0geSAvIDIpIC8gTWF0aC5wb3coKDEgLSBjb24pIC8gKDEgKyBjb24pLCBlIC8gMik7XHJcbiAgXHRcdHkgPSAtciAqIE1hdGgubG9nKE1hdGgubWF4KHRzLCAxRS0xMCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChsYXRsbmcubG5nICogZCAqIHIsIHkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHR1bnByb2plY3Q6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHR2YXIgZCA9IDE4MCAvIE1hdGguUEksXHJcbiAgXHRcdCAgICByID0gdGhpcy5SLFxyXG4gIFx0XHQgICAgdG1wID0gdGhpcy5SX01JTk9SIC8gcixcclxuICBcdFx0ICAgIGUgPSBNYXRoLnNxcnQoMSAtIHRtcCAqIHRtcCksXHJcbiAgXHRcdCAgICB0cyA9IE1hdGguZXhwKC1wb2ludC55IC8gciksXHJcbiAgXHRcdCAgICBwaGkgPSBNYXRoLlBJIC8gMiAtIDIgKiBNYXRoLmF0YW4odHMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGRwaGkgPSAwLjEsIGNvbjsgaSA8IDE1ICYmIE1hdGguYWJzKGRwaGkpID4gMWUtNzsgaSsrKSB7XHJcbiAgXHRcdFx0Y29uID0gZSAqIE1hdGguc2luKHBoaSk7XHJcbiAgXHRcdFx0Y29uID0gTWF0aC5wb3coKDEgLSBjb24pIC8gKDEgKyBjb24pLCBlIC8gMik7XHJcbiAgXHRcdFx0ZHBoaSA9IE1hdGguUEkgLyAyIC0gMiAqIE1hdGguYXRhbih0cyAqIGNvbikgLSBwaGk7XHJcbiAgXHRcdFx0cGhpICs9IGRwaGk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHBoaSAqIGQsIHBvaW50LnggKiBkIC8gcik7XHJcbiAgXHR9XHJcbiAgfTtcblxuICAvKlxuICAgKiBAY2xhc3MgUHJvamVjdGlvblxuXG4gICAqIEFuIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2plY3RpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSB3b3JsZCBvbnRvXG4gICAqIGEgZmxhdCBzdXJmYWNlIChhbmQgYmFjaykuIFNlZSBbTWFwIHByb2plY3Rpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hcF9wcm9qZWN0aW9uKS5cblxuICAgKiBAcHJvcGVydHkgYm91bmRzOiBCb3VuZHNcbiAgICogVGhlIGJvdW5kcyAoc3BlY2lmaWVkIGluIENSUyB1bml0cykgd2hlcmUgdGhlIHByb2plY3Rpb24gaXMgdmFsaWRcblxuICAgKiBAbWV0aG9kIHByb2plY3QobGF0bG5nOiBMYXRMbmcpOiBQb2ludFxuICAgKiBQcm9qZWN0cyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgaW50byBhIDJEIHBvaW50LlxuICAgKiBPbmx5IGFjY2VwdHMgYWN0dWFsIGBMLkxhdExuZ2AgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxuXG4gICAqIEBtZXRob2QgdW5wcm9qZWN0KHBvaW50OiBQb2ludCk6IExhdExuZ1xuICAgKiBUaGUgaW52ZXJzZSBvZiBgcHJvamVjdGAuIFByb2plY3RzIGEgMkQgcG9pbnQgaW50byBhIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi5cbiAgICogT25seSBhY2NlcHRzIGFjdHVhbCBgTC5Qb2ludGAgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxuXG4gICAqIE5vdGUgdGhhdCB0aGUgcHJvamVjdGlvbiBpbnN0YW5jZXMgZG8gbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXG4gICAqIGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIEFsc28sIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSB0aGVtLFxuICAgKiBhbmQgbWV0aG9kcyBjYW4ndCBiZSBhZGRlZCB0byB0aGVtIHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cblxuICAgKi9cblxuICB2YXIgaW5kZXggPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIExvbkxhdDogTG9uTGF0LFxuICAgIE1lcmNhdG9yOiBNZXJjYXRvcixcbiAgICBTcGhlcmljYWxNZXJjYXRvcjogU3BoZXJpY2FsTWVyY2F0b3JcbiAgfTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgQ1JTXHJcbiAgICogQGNycyBMLkNSUy5FUFNHMzM5NVxyXG4gICAqXHJcbiAgICogUmFyZWx5IHVzZWQgYnkgc29tZSBjb21tZXJjaWFsIHRpbGUgcHJvdmlkZXJzLiBVc2VzIEVsbGlwdGljYWwgTWVyY2F0b3IgcHJvamVjdGlvbi5cclxuICAgKi9cclxuICB2YXIgRVBTRzMzOTUgPSBleHRlbmQoe30sIEVhcnRoLCB7XHJcbiAgXHRjb2RlOiAnRVBTRzozMzk1JyxcclxuICBcdHByb2plY3Rpb246IE1lcmNhdG9yLFxyXG5cclxuICBcdHRyYW5zZm9ybWF0aW9uOiAoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgc2NhbGUgPSAwLjUgLyAoTWF0aC5QSSAqIE1lcmNhdG9yLlIpO1xyXG4gIFx0XHRyZXR1cm4gdG9UcmFuc2Zvcm1hdGlvbihzY2FsZSwgMC41LCAtc2NhbGUsIDAuNSk7XHJcbiAgXHR9KCkpXHJcbiAgfSk7XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuRVBTRzQzMjZcclxuICAgKlxyXG4gICAqIEEgY29tbW9uIENSUyBhbW9uZyBHSVMgZW50aHVzaWFzdHMuIFVzZXMgc2ltcGxlIEVxdWlyZWN0YW5ndWxhciBwcm9qZWN0aW9uLlxyXG4gICAqXHJcbiAgICogTGVhZmxldCAxLjAueCBjb21wbGllcyB3aXRoIHRoZSBbVE1TIGNvb3JkaW5hdGUgc2NoZW1lIGZvciBFUFNHOjQzMjZdKGh0dHBzOi8vd2lraS5vc2dlby5vcmcvd2lraS9UaWxlX01hcF9TZXJ2aWNlX1NwZWNpZmljYXRpb24jZ2xvYmFsLWdlb2RldGljKSxcclxuICAgKiB3aGljaCBpcyBhIGJyZWFraW5nIGNoYW5nZSBmcm9tIDAuNy54IGJlaGF2aW91ci4gIElmIHlvdSBhcmUgdXNpbmcgYSBgVGlsZUxheWVyYFxyXG4gICAqIHdpdGggdGhpcyBDUlMsIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSB0d28gMjU2eDI1NiBwaXhlbCB0aWxlcyBjb3ZlcmluZyB0aGVcclxuICAgKiB3aG9sZSBlYXJ0aCBhdCB6b29tIGxldmVsIHplcm8sIGFuZCB0aGF0IHRoZSB0aWxlIGNvb3JkaW5hdGUgb3JpZ2luIGlzICgtMTgwLCs5MCksXHJcbiAgICogb3IgKC0xODAsLTkwKSBmb3IgYFRpbGVMYXllcmBzIHdpdGggW3RoZSBgdG1zYCBvcHRpb25dKCN0aWxlbGF5ZXItdG1zKSBzZXQuXHJcbiAgICovXHJcblxyXG4gIHZhciBFUFNHNDMyNiA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjQzMjYnLFxyXG4gIFx0cHJvamVjdGlvbjogTG9uTGF0LFxyXG4gIFx0dHJhbnNmb3JtYXRpb246IHRvVHJhbnNmb3JtYXRpb24oMSAvIDE4MCwgMSwgLTEgLyAxODAsIDAuNSlcclxuICB9KTtcblxuICAvKlxuICAgKiBAbmFtZXNwYWNlIENSU1xuICAgKiBAY3JzIEwuQ1JTLlNpbXBsZVxuICAgKlxuICAgKiBBIHNpbXBsZSBDUlMgdGhhdCBtYXBzIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgaW50byBgeGAgYW5kIGB5YCBkaXJlY3RseS5cbiAgICogTWF5IGJlIHVzZWQgZm9yIG1hcHMgb2YgZmxhdCBzdXJmYWNlcyAoZS5nLiBnYW1lIG1hcHMpLiBOb3RlIHRoYXQgdGhlIGB5YFxuICAgKiBheGlzIHNob3VsZCBzdGlsbCBiZSBpbnZlcnRlZCAoZ29pbmcgZnJvbSBib3R0b20gdG8gdG9wKS4gYGRpc3RhbmNlKClgIHJldHVybnNcbiAgICogc2ltcGxlIGV1Y2xpZGVhbiBkaXN0YW5jZS5cbiAgICovXG5cbiAgdmFyIFNpbXBsZSA9IGV4dGVuZCh7fSwgQ1JTLCB7XG4gIFx0cHJvamVjdGlvbjogTG9uTGF0LFxuICBcdHRyYW5zZm9ybWF0aW9uOiB0b1RyYW5zZm9ybWF0aW9uKDEsIDAsIC0xLCAwKSxcblxuICBcdHNjYWxlOiBmdW5jdGlvbiAoem9vbSkge1xuICBcdFx0cmV0dXJuIE1hdGgucG93KDIsIHpvb20pO1xuICBcdH0sXG5cbiAgXHR6b29tOiBmdW5jdGlvbiAoc2NhbGUpIHtcbiAgXHRcdHJldHVybiBNYXRoLmxvZyhzY2FsZSkgLyBNYXRoLkxOMjtcbiAgXHR9LFxuXG4gIFx0ZGlzdGFuY2U6IGZ1bmN0aW9uIChsYXRsbmcxLCBsYXRsbmcyKSB7XG4gIFx0XHR2YXIgZHggPSBsYXRsbmcyLmxuZyAtIGxhdGxuZzEubG5nLFxuICBcdFx0ICAgIGR5ID0gbGF0bG5nMi5sYXQgLSBsYXRsbmcxLmxhdDtcblxuICBcdFx0cmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIFx0fSxcblxuICBcdGluZmluaXRlOiB0cnVlXG4gIH0pO1xuXG4gIENSUy5FYXJ0aCA9IEVhcnRoO1xuICBDUlMuRVBTRzMzOTUgPSBFUFNHMzM5NTtcbiAgQ1JTLkVQU0czODU3ID0gRVBTRzM4NTc7XG4gIENSUy5FUFNHOTAwOTEzID0gRVBTRzkwMDkxMztcbiAgQ1JTLkVQU0c0MzI2ID0gRVBTRzQzMjY7XG4gIENSUy5TaW1wbGUgPSBTaW1wbGU7XG5cbiAgLypcbiAgICogQGNsYXNzIExheWVyXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXG4gICAqIEBha2EgTC5MYXllclxuICAgKiBAYWthIElMYXllclxuICAgKlxuICAgKiBBIHNldCBvZiBtZXRob2RzIGZyb20gdGhlIExheWVyIGJhc2UgY2xhc3MgdGhhdCBhbGwgTGVhZmxldCBsYXllcnMgdXNlLlxuICAgKiBJbmhlcml0cyBhbGwgbWV0aG9kcywgb3B0aW9ucyBhbmQgZXZlbnRzIGZyb20gYEwuRXZlbnRlZGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBsYXllciA9IEwubWFya2VyKGxhdGxuZykuYWRkVG8obWFwKTtcbiAgICogbGF5ZXIuYWRkVG8obWFwKTtcbiAgICogbGF5ZXIucmVtb3ZlKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXZlbnQgYWRkOiBFdmVudFxuICAgKiBGaXJlZCBhZnRlciB0aGUgbGF5ZXIgaXMgYWRkZWQgdG8gYSBtYXBcbiAgICpcbiAgICogQGV2ZW50IHJlbW92ZTogRXZlbnRcbiAgICogRmlyZWQgYWZ0ZXIgdGhlIGxheWVyIGlzIHJlbW92ZWQgZnJvbSBhIG1hcFxuICAgKi9cblxuXG4gIHZhciBMYXllciA9IEV2ZW50ZWQuZXh0ZW5kKHtcblxuICBcdC8vIENsYXNzZXMgZXh0ZW5kaW5nIGBMLkxheWVyYCB3aWxsIGluaGVyaXQgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gcGFuZTogU3RyaW5nID0gJ292ZXJsYXlQYW5lJ1xuICBcdFx0Ly8gQnkgZGVmYXVsdCB0aGUgbGF5ZXIgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFwJ3MgW292ZXJsYXkgcGFuZV0oI21hcC1vdmVybGF5cGFuZSkuIE92ZXJyaWRpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgbGF5ZXIgdG8gYmUgcGxhY2VkIG9uIGFub3RoZXIgcGFuZSBieSBkZWZhdWx0LlxuICBcdFx0cGFuZTogJ292ZXJsYXlQYW5lJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBhdHRyaWJ1dGlvbjogU3RyaW5nID0gbnVsbFxuICBcdFx0Ly8gU3RyaW5nIHRvIGJlIHNob3duIGluIHRoZSBhdHRyaWJ1dGlvbiBjb250cm9sLCBlLmcuIFwiwqkgT3BlblN0cmVldE1hcCBjb250cmlidXRvcnNcIi4gSXQgZGVzY3JpYmVzIHRoZSBsYXllciBkYXRhIGFuZCBpcyBvZnRlbiBhIGxlZ2FsIG9ibGlnYXRpb24gdG93YXJkcyBjb3B5cmlnaHQgaG9sZGVycyBhbmQgdGlsZSBwcm92aWRlcnMuXG4gIFx0XHRhdHRyaWJ1dGlvbjogbnVsbCxcblxuICBcdFx0YnViYmxpbmdNb3VzZUV2ZW50czogdHJ1ZVxuICBcdH0sXG5cbiAgXHQvKiBAc2VjdGlvblxuICBcdCAqIENsYXNzZXMgZXh0ZW5kaW5nIGBMLkxheWVyYCB3aWxsIGluaGVyaXQgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICBcdCAqXG4gIFx0ICogQG1ldGhvZCBhZGRUbyhtYXA6IE1hcHxMYXllckdyb3VwKTogdGhpc1xuICBcdCAqIEFkZHMgdGhlIGxheWVyIHRvIHRoZSBnaXZlbiBtYXAgb3IgbGF5ZXIgZ3JvdXAuXG4gIFx0ICovXG4gIFx0YWRkVG86IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdG1hcC5hZGRMYXllcih0aGlzKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZTogdGhpc1xuICBcdC8vIFJlbW92ZXMgdGhlIGxheWVyIGZyb20gdGhlIG1hcCBpdCBpcyBjdXJyZW50bHkgYWN0aXZlIG9uLlxuICBcdHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXAgfHwgdGhpcy5fbWFwVG9BZGQpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUZyb20obWFwOiBNYXApOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgbGF5ZXIgZnJvbSB0aGUgZ2l2ZW4gbWFwXG4gIFx0Ly9cbiAgXHQvLyBAYWx0ZXJuYXRpdmVcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUZyb20oZ3JvdXA6IExheWVyR3JvdXApOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgbGF5ZXIgZnJvbSB0aGUgZ2l2ZW4gYExheWVyR3JvdXBgXG4gIFx0cmVtb3ZlRnJvbTogZnVuY3Rpb24gKG9iaikge1xuICBcdFx0aWYgKG9iaikge1xuICBcdFx0XHRvYmoucmVtb3ZlTGF5ZXIodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRQYW5lKG5hbWU/IDogU3RyaW5nKTogSFRNTEVsZW1lbnRcbiAgXHQvLyBSZXR1cm5zIHRoZSBgSFRNTEVsZW1lbnRgIHJlcHJlc2VudGluZyB0aGUgbmFtZWQgcGFuZSBvbiB0aGUgbWFwLiBJZiBgbmFtZWAgaXMgb21pdHRlZCwgcmV0dXJucyB0aGUgcGFuZSBmb3IgdGhpcyBsYXllci5cbiAgXHRnZXRQYW5lOiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0cmV0dXJuIHRoaXMuX21hcC5nZXRQYW5lKG5hbWUgPyAodGhpcy5vcHRpb25zW25hbWVdIHx8IG5hbWUpIDogdGhpcy5vcHRpb25zLnBhbmUpO1xuICBcdH0sXG5cbiAgXHRhZGRJbnRlcmFjdGl2ZVRhcmdldDogZnVuY3Rpb24gKHRhcmdldEVsKSB7XG4gIFx0XHR0aGlzLl9tYXAuX3RhcmdldHNbc3RhbXAodGFyZ2V0RWwpXSA9IHRoaXM7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQ6IGZ1bmN0aW9uICh0YXJnZXRFbCkge1xuICBcdFx0ZGVsZXRlIHRoaXMuX21hcC5fdGFyZ2V0c1tzdGFtcCh0YXJnZXRFbCldO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0QXR0cmlidXRpb246IFN0cmluZ1xuICBcdC8vIFVzZWQgYnkgdGhlIGBhdHRyaWJ1dGlvbiBjb250cm9sYCwgcmV0dXJucyB0aGUgW2F0dHJpYnV0aW9uIG9wdGlvbl0oI2dyaWRsYXllci1hdHRyaWJ1dGlvbikuXG4gIFx0Z2V0QXR0cmlidXRpb246IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRpb247XG4gIFx0fSxcblxuICBcdF9sYXllckFkZDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXAgPSBlLnRhcmdldDtcblxuICBcdFx0Ly8gY2hlY2sgaW4gY2FzZSBsYXllciBnZXRzIGFkZGVkIGFuZCB0aGVuIHJlbW92ZWQgYmVmb3JlIHRoZSBtYXAgaXMgcmVhZHlcbiAgXHRcdGlmICghbWFwLmhhc0xheWVyKHRoaXMpKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBtYXAuX3pvb21BbmltYXRlZDtcblxuICBcdFx0aWYgKHRoaXMuZ2V0RXZlbnRzKSB7XG4gIFx0XHRcdHZhciBldmVudHMgPSB0aGlzLmdldEV2ZW50cygpO1xuICBcdFx0XHRtYXAub24oZXZlbnRzLCB0aGlzKTtcbiAgXHRcdFx0dGhpcy5vbmNlKCdyZW1vdmUnLCBmdW5jdGlvbiAoKSB7XG4gIFx0XHRcdFx0bWFwLm9mZihldmVudHMsIHRoaXMpO1xuICBcdFx0XHR9LCB0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5vbkFkZChtYXApO1xuXG4gIFx0XHR0aGlzLmZpcmUoJ2FkZCcpO1xuICBcdFx0bWFwLmZpcmUoJ2xheWVyYWRkJywge2xheWVyOiB0aGlzfSk7XG4gIFx0fVxuICB9KTtcblxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICAgKiBAdW5pbmhlcml0YWJsZVxuICAgKlxuICAgKiBFdmVyeSBsYXllciBzaG91bGQgZXh0ZW5kIGZyb20gYEwuTGF5ZXJgIGFuZCAocmUtKWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuXG4gICAqXG4gICAqIEBtZXRob2Qgb25BZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGNvZGUgdGhhdCBjcmVhdGVzIERPTSBlbGVtZW50cyBmb3IgdGhlIGxheWVyLCBhZGRzIHRoZW0gdG8gYG1hcCBwYW5lc2Agd2hlcmUgdGhleSBzaG91bGQgYmVsb25nIGFuZCBwdXRzIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2BtYXAuYWRkTGF5ZXIobGF5ZXIpYF0oI21hcC1hZGRsYXllcikuXG4gICAqXG4gICAqIEBtZXRob2Qgb25SZW1vdmUobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGFsbCBjbGVhbiB1cCBjb2RlIHRoYXQgcmVtb3ZlcyB0aGUgbGF5ZXIncyBlbGVtZW50cyBmcm9tIHRoZSBET00gYW5kIHJlbW92ZXMgbGlzdGVuZXJzIHByZXZpb3VzbHkgYWRkZWQgaW4gW2BvbkFkZGBdKCNsYXllci1vbmFkZCkuIENhbGxlZCBvbiBbYG1hcC5yZW1vdmVMYXllcihsYXllcilgXSgjbWFwLXJlbW92ZWxheWVyKS5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRFdmVudHMoKTogT2JqZWN0XG4gICAqIFRoaXMgb3B0aW9uYWwgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGxpa2UgYHsgdmlld3Jlc2V0OiB0aGlzLl9yZXNldCB9YCBmb3IgW2BhZGRFdmVudExpc3RlbmVyYF0oI2V2ZW50ZWQtYWRkZXZlbnRsaXN0ZW5lcikuIFRoZSBldmVudCBoYW5kbGVycyBpbiB0aGlzIG9iamVjdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgbWFwIHdpdGggeW91ciBsYXllci5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRBdHRyaWJ1dGlvbigpOiBTdHJpbmdcbiAgICogVGhpcyBvcHRpb25hbCBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIEhUTUwgdG8gYmUgc2hvd24gb24gdGhlIGBBdHRyaWJ1dGlvbiBjb250cm9sYCB3aGVuZXZlciB0aGUgbGF5ZXIgaXMgdmlzaWJsZS5cbiAgICpcbiAgICogQG1ldGhvZCBiZWZvcmVBZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gQ2FsbGVkIG9uIFtgbWFwLmFkZExheWVyKGxheWVyKWBdKCNtYXAtYWRkbGF5ZXIpLCBiZWZvcmUgdGhlIGxheWVyIGlzIGFkZGVkIHRvIHRoZSBtYXAsIGJlZm9yZSBldmVudHMgYXJlIGluaXRpYWxpemVkLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlIG1hcCBpcyBpbiBhIHVzYWJsZSBzdGF0ZS4gVXNlIGZvciBlYXJseSBpbml0aWFsaXphdGlvbiBvbmx5LlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFwXG4gICAqIEBzZWN0aW9uIExheWVyIGV2ZW50c1xuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJhZGQ6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBhIG5ldyBsYXllciBpcyBhZGRlZCB0byB0aGUgbWFwLlxuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJyZW1vdmU6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBzb21lIGxheWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwXG4gICAqXG4gICAqIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgICovXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbWV0aG9kIGFkZExheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBsYXllciB0byB0aGUgbWFwXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCFsYXllci5fbGF5ZXJBZGQpIHtcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgb2JqZWN0IGlzIG5vdCBhIExheWVyLicpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaWQgPSBzdGFtcChsYXllcik7XG4gIFx0XHRpZiAodGhpcy5fbGF5ZXJzW2lkXSkgeyByZXR1cm4gdGhpczsgfVxuICBcdFx0dGhpcy5fbGF5ZXJzW2lkXSA9IGxheWVyO1xuXG4gIFx0XHRsYXllci5fbWFwVG9BZGQgPSB0aGlzO1xuXG4gIFx0XHRpZiAobGF5ZXIuYmVmb3JlQWRkKSB7XG4gIFx0XHRcdGxheWVyLmJlZm9yZUFkZCh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy53aGVuUmVhZHkobGF5ZXIuX2xheWVyQWRkLCBsYXllcik7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBnaXZlbiBsYXllciBmcm9tIHRoZSBtYXAuXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGlkID0gc3RhbXAobGF5ZXIpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX2xheWVyc1tpZF0pIHsgcmV0dXJuIHRoaXM7IH1cblxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xuICBcdFx0XHRsYXllci5vblJlbW92ZSh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG5cbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgXHRcdFx0dGhpcy5maXJlKCdsYXllcnJlbW92ZScsIHtsYXllcjogbGF5ZXJ9KTtcbiAgXHRcdFx0bGF5ZXIuZmlyZSgncmVtb3ZlJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGxheWVyLl9tYXAgPSBsYXllci5fbWFwVG9BZGQgPSBudWxsO1xuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBoYXNMYXllcihsYXllcjogTGF5ZXIpOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGxheWVyIGlzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgbWFwXG4gIFx0aGFzTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0cmV0dXJuIHN0YW1wKGxheWVyKSBpbiB0aGlzLl9sYXllcnM7XG4gIFx0fSxcblxuICBcdC8qIEBtZXRob2QgZWFjaExheWVyKGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcbiAgXHQgKiBJdGVyYXRlcyBvdmVyIHRoZSBsYXllcnMgb2YgdGhlIG1hcCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGNvbnRleHQgb2YgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICBcdCAqIGBgYFxuICBcdCAqIG1hcC5lYWNoTGF5ZXIoZnVuY3Rpb24obGF5ZXIpe1xuICBcdCAqICAgICBsYXllci5iaW5kUG9wdXAoJ0hlbGxvJyk7XG4gIFx0ICogfSk7XG4gIFx0ICogYGBgXG4gIFx0ICovXG4gIFx0ZWFjaExheWVyOiBmdW5jdGlvbiAobWV0aG9kLCBjb250ZXh0KSB7XG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHRtZXRob2QuY2FsbChjb250ZXh0LCB0aGlzLl9sYXllcnNbaV0pO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdF9hZGRMYXllcnM6IGZ1bmN0aW9uIChsYXllcnMpIHtcbiAgXHRcdGxheWVycyA9IGxheWVycyA/IChpc0FycmF5KGxheWVycykgPyBsYXllcnMgOiBbbGF5ZXJzXSkgOiBbXTtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxheWVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHR0aGlzLmFkZExheWVyKGxheWVyc1tpXSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9hZGRab29tTGltaXQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCFpc05hTihsYXllci5vcHRpb25zLm1heFpvb20pIHx8ICFpc05hTihsYXllci5vcHRpb25zLm1pblpvb20pKSB7XG4gIFx0XHRcdHRoaXMuX3pvb21Cb3VuZExheWVyc1tzdGFtcChsYXllcildID0gbGF5ZXI7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlbW92ZVpvb21MaW1pdDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgaWQgPSBzdGFtcChsYXllcik7XG5cbiAgXHRcdGlmICh0aGlzLl96b29tQm91bmRMYXllcnNbaWRdKSB7XG4gIFx0XHRcdGRlbGV0ZSB0aGlzLl96b29tQm91bmRMYXllcnNbaWRdO1xuICBcdFx0XHR0aGlzLl91cGRhdGVab29tTGV2ZWxzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVab29tTGV2ZWxzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgbWluWm9vbSA9IEluZmluaXR5LFxuICBcdFx0ICAgIG1heFpvb20gPSAtSW5maW5pdHksXG4gIFx0XHQgICAgb2xkWm9vbVNwYW4gPSB0aGlzLl9nZXRab29tU3BhbigpO1xuXG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX3pvb21Cb3VuZExheWVycykge1xuICBcdFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMuX3pvb21Cb3VuZExheWVyc1tpXS5vcHRpb25zO1xuXG4gIFx0XHRcdG1pblpvb20gPSBvcHRpb25zLm1pblpvb20gPT09IHVuZGVmaW5lZCA/IG1pblpvb20gOiBNYXRoLm1pbihtaW5ab29tLCBvcHRpb25zLm1pblpvb20pO1xuICBcdFx0XHRtYXhab29tID0gb3B0aW9ucy5tYXhab29tID09PSB1bmRlZmluZWQgPyBtYXhab29tIDogTWF0aC5tYXgobWF4Wm9vbSwgb3B0aW9ucy5tYXhab29tKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fbGF5ZXJzTWF4Wm9vbSA9IG1heFpvb20gPT09IC1JbmZpbml0eSA/IHVuZGVmaW5lZCA6IG1heFpvb207XG4gIFx0XHR0aGlzLl9sYXllcnNNaW5ab29tID0gbWluWm9vbSA9PT0gSW5maW5pdHkgPyB1bmRlZmluZWQgOiBtaW5ab29tO1xuXG4gIFx0XHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xuICBcdFx0Ly8gQGV2ZW50IHpvb21sZXZlbHNjaGFuZ2U6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBudW1iZXIgb2Ygem9vbWxldmVscyBvbiB0aGUgbWFwIGlzIGNoYW5nZWQgZHVlXG4gIFx0XHQvLyB0byBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBsYXllci5cbiAgXHRcdGlmIChvbGRab29tU3BhbiAhPT0gdGhpcy5fZ2V0Wm9vbVNwYW4oKSkge1xuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21sZXZlbHNjaGFuZ2UnKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5tYXhab29tID09PSB1bmRlZmluZWQgJiYgdGhpcy5fbGF5ZXJzTWF4Wm9vbSAmJiB0aGlzLmdldFpvb20oKSA+IHRoaXMuX2xheWVyc01heFpvb20pIHtcbiAgXHRcdFx0dGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01heFpvb20pO1xuICBcdFx0fVxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5taW5ab29tID09PSB1bmRlZmluZWQgJiYgdGhpcy5fbGF5ZXJzTWluWm9vbSAmJiB0aGlzLmdldFpvb20oKSA8IHRoaXMuX2xheWVyc01pblpvb20pIHtcbiAgXHRcdFx0dGhpcy5zZXRab29tKHRoaXMuX2xheWVyc01pblpvb20pO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgTGF5ZXJHcm91cFxyXG4gICAqIEBha2EgTC5MYXllckdyb3VwXHJcbiAgICogQGluaGVyaXRzIEludGVyYWN0aXZlIGxheWVyXHJcbiAgICpcclxuICAgKiBVc2VkIHRvIGdyb3VwIHNldmVyYWwgbGF5ZXJzIGFuZCBoYW5kbGUgdGhlbSBhcyBvbmUuIElmIHlvdSBhZGQgaXQgdG8gdGhlIG1hcCxcclxuICAgKiBhbnkgbGF5ZXJzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgZ3JvdXAgd2lsbCBiZSBhZGRlZC9yZW1vdmVkIG9uIHRoZSBtYXAgYXNcclxuICAgKiB3ZWxsLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLmxheWVyR3JvdXAoW21hcmtlcjEsIG1hcmtlcjJdKVxyXG4gICAqIFx0LmFkZExheWVyKHBvbHlsaW5lKVxyXG4gICAqIFx0LmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBMYXllckdyb3VwID0gTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF5ZXJzLCBvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSB7fTtcclxuXHJcbiAgXHRcdHZhciBpLCBsZW47XHJcblxyXG4gIFx0XHRpZiAobGF5ZXJzKSB7XHJcbiAgXHRcdFx0Zm9yIChpID0gMCwgbGVuID0gbGF5ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmFkZExheWVyKGxheWVyc1tpXSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkTGF5ZXIobGF5ZXI6IExheWVyKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyB0aGUgZ2l2ZW4gbGF5ZXIgdG8gdGhlIGdyb3VwLlxyXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHR2YXIgaWQgPSB0aGlzLmdldExheWVySWQobGF5ZXIpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJzW2lkXSA9IGxheWVyO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5hZGRMYXllcihsYXllcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcik6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGdpdmVuIGxheWVyIGZyb20gdGhlIGdyb3VwLlxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGlkOiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpbnRlcm5hbCBJRCBmcm9tIHRoZSBncm91cC5cclxuICBcdHJlbW92ZUxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0dmFyIGlkID0gbGF5ZXIgaW4gdGhpcy5fbGF5ZXJzID8gbGF5ZXIgOiB0aGlzLmdldExheWVySWQobGF5ZXIpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCAmJiB0aGlzLl9sYXllcnNbaWRdKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpZF0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGhhc0xheWVyKGxheWVyOiBMYXllcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBsYXllciBpcyBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIGdyb3VwLlxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIGhhc0xheWVyKGlkOiBOdW1iZXIpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gaW50ZXJuYWwgSUQgaXMgY3VycmVudGx5IGFkZGVkIHRvIHRoZSBncm91cC5cclxuICBcdGhhc0xheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0dmFyIGxheWVySWQgPSB0eXBlb2YgbGF5ZXIgPT09ICdudW1iZXInID8gbGF5ZXIgOiB0aGlzLmdldExheWVySWQobGF5ZXIpO1xyXG4gIFx0XHRyZXR1cm4gbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xlYXJMYXllcnMoKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyBhbGwgdGhlIGxheWVycyBmcm9tIHRoZSBncm91cC5cclxuICBcdGNsZWFyTGF5ZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpbnZva2UobWV0aG9kTmFtZTogU3RyaW5nLCDigKYpOiB0aGlzXHJcbiAgXHQvLyBDYWxscyBgbWV0aG9kTmFtZWAgb24gZXZlcnkgbGF5ZXIgY29udGFpbmVkIGluIHRoaXMgZ3JvdXAsIHBhc3NpbmcgYW55XHJcbiAgXHQvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMuIEhhcyBubyBlZmZlY3QgaWYgdGhlIGxheWVycyBjb250YWluZWQgZG8gbm90XHJcbiAgXHQvLyBpbXBsZW1lbnQgYG1ldGhvZE5hbWVgLlxyXG4gIFx0aW52b2tlOiBmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xyXG4gIFx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXHJcbiAgXHRcdCAgICBpLCBsYXllcjtcclxuXHJcbiAgXHRcdGZvciAoaSBpbiB0aGlzLl9sYXllcnMpIHtcclxuICBcdFx0XHRsYXllciA9IHRoaXMuX2xheWVyc1tpXTtcclxuXHJcbiAgXHRcdFx0aWYgKGxheWVyW21ldGhvZE5hbWVdKSB7XHJcbiAgXHRcdFx0XHRsYXllclttZXRob2ROYW1lXS5hcHBseShsYXllciwgYXJncyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5lYWNoTGF5ZXIobWFwLmFkZExheWVyLCBtYXApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLmVhY2hMYXllcihtYXAucmVtb3ZlTGF5ZXIsIG1hcCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZWFjaExheWVyKGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdC8vIEl0ZXJhdGVzIG92ZXIgdGhlIGxheWVycyBvZiB0aGUgZ3JvdXAsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyBjb250ZXh0IG9mIHRoZSBpdGVyYXRvciBmdW5jdGlvbi5cclxuICBcdC8vIGBgYGpzXHJcbiAgXHQvLyBncm91cC5lYWNoTGF5ZXIoZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHQvLyBcdGxheWVyLmJpbmRQb3B1cCgnSGVsbG8nKTtcclxuICBcdC8vIH0pO1xyXG4gIFx0Ly8gYGBgXHJcbiAgXHRlYWNoTGF5ZXI6IGZ1bmN0aW9uIChtZXRob2QsIGNvbnRleHQpIHtcclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9sYXllcnMpIHtcclxuICBcdFx0XHRtZXRob2QuY2FsbChjb250ZXh0LCB0aGlzLl9sYXllcnNbaV0pO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldExheWVyKGlkOiBOdW1iZXIpOiBMYXllclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaW50ZXJuYWwgSUQuXHJcbiAgXHRnZXRMYXllcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9sYXllcnNbaWRdO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldExheWVycygpOiBMYXllcltdXHJcbiAgXHQvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbGF5ZXJzIGFkZGVkIHRvIHRoZSBncm91cC5cclxuICBcdGdldExheWVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgbGF5ZXJzID0gW107XHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGxheWVycy5wdXNoLCBsYXllcnMpO1xyXG4gIFx0XHRyZXR1cm4gbGF5ZXJzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpJbmRleCh6SW5kZXg6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIENhbGxzIGBzZXRaSW5kZXhgIG9uIGV2ZXJ5IGxheWVyIGNvbnRhaW5lZCBpbiB0aGlzIGdyb3VwLCBwYXNzaW5nIHRoZSB6LWluZGV4LlxyXG4gIFx0c2V0WkluZGV4OiBmdW5jdGlvbiAoekluZGV4KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmludm9rZSgnc2V0WkluZGV4JywgekluZGV4KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXllcklkKGxheWVyOiBMYXllcik6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW50ZXJuYWwgSUQgZm9yIGEgbGF5ZXJcclxuICBcdGdldExheWVySWQ6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRyZXR1cm4gc3RhbXAobGF5ZXIpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXllckdyb3VwKGxheWVycz86IExheWVyW10sIG9wdGlvbnM/OiBPYmplY3QpXHJcbiAgLy8gQ3JlYXRlIGEgbGF5ZXIgZ3JvdXAsIG9wdGlvbmFsbHkgZ2l2ZW4gYW4gaW5pdGlhbCBzZXQgb2YgbGF5ZXJzIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0LlxyXG4gIHZhciBsYXllckdyb3VwID0gZnVuY3Rpb24gKGxheWVycywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBMYXllckdyb3VwKGxheWVycywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBGZWF0dXJlR3JvdXBcclxuICAgKiBAYWthIEwuRmVhdHVyZUdyb3VwXHJcbiAgICogQGluaGVyaXRzIExheWVyR3JvdXBcclxuICAgKlxyXG4gICAqIEV4dGVuZGVkIGBMYXllckdyb3VwYCB0aGF0IG1ha2VzIGl0IGVhc2llciB0byBkbyB0aGUgc2FtZSB0aGluZyB0byBhbGwgaXRzIG1lbWJlciBsYXllcnM6XHJcbiAgICogICogW2BiaW5kUG9wdXBgXSgjbGF5ZXItYmluZHBvcHVwKSBiaW5kcyBhIHBvcHVwIHRvIGFsbCBvZiB0aGUgbGF5ZXJzIGF0IG9uY2UgKGxpa2V3aXNlIHdpdGggW2BiaW5kVG9vbHRpcGBdKCNsYXllci1iaW5kdG9vbHRpcCkpXHJcbiAgICogICogRXZlbnRzIGFyZSBwcm9wYWdhdGVkIHRvIHRoZSBgRmVhdHVyZUdyb3VwYCwgc28gaWYgdGhlIGdyb3VwIGhhcyBhbiBldmVudFxyXG4gICAqIGhhbmRsZXIsIGl0IHdpbGwgaGFuZGxlIGV2ZW50cyBmcm9tIGFueSBvZiB0aGUgbGF5ZXJzLiBUaGlzIGluY2x1ZGVzIG1vdXNlIGV2ZW50c1xyXG4gICAqIGFuZCBjdXN0b20gZXZlbnRzLlxyXG4gICAqICAqIEhhcyBgbGF5ZXJhZGRgIGFuZCBgbGF5ZXJyZW1vdmVgIGV2ZW50c1xyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5mZWF0dXJlR3JvdXAoW21hcmtlcjEsIG1hcmtlcjIsIHBvbHlsaW5lXSlcclxuICAgKiBcdC5iaW5kUG9wdXAoJ0hlbGxvIHdvcmxkIScpXHJcbiAgICogXHQub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7IGFsZXJ0KCdDbGlja2VkIG9uIGEgbWVtYmVyIG9mIHRoZSBncm91cCEnKTsgfSlcclxuICAgKiBcdC5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgRmVhdHVyZUdyb3VwID0gTGF5ZXJHcm91cC5leHRlbmQoe1xyXG5cclxuICBcdGFkZExheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0aWYgKHRoaXMuaGFzTGF5ZXIobGF5ZXIpKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGxheWVyLmFkZEV2ZW50UGFyZW50KHRoaXMpO1xyXG5cclxuICBcdFx0TGF5ZXJHcm91cC5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLCBsYXllcik7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbGF5ZXJhZGQ6IExheWVyRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIGxheWVyIGlzIGFkZGVkIHRvIHRoaXMgYEZlYXR1cmVHcm91cGBcclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbGF5ZXJhZGQnLCB7bGF5ZXI6IGxheWVyfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdHJlbW92ZUxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0aWYgKCF0aGlzLmhhc0xheWVyKGxheWVyKSkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmIChsYXllciBpbiB0aGlzLl9sYXllcnMpIHtcclxuICBcdFx0XHRsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcl07XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGxheWVyLnJlbW92ZUV2ZW50UGFyZW50KHRoaXMpO1xyXG5cclxuICBcdFx0TGF5ZXJHcm91cC5wcm90b3R5cGUucmVtb3ZlTGF5ZXIuY2FsbCh0aGlzLCBsYXllcik7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbGF5ZXJyZW1vdmU6IExheWVyRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIGxheWVyIGlzIHJlbW92ZWQgZnJvbSB0aGlzIGBGZWF0dXJlR3JvdXBgXHJcbiAgXHRcdHJldHVybiB0aGlzLmZpcmUoJ2xheWVycmVtb3ZlJywge2xheWVyOiBsYXllcn0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKHN0eWxlOiBQYXRoIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSBnaXZlbiBwYXRoIG9wdGlvbnMgdG8gZWFjaCBsYXllciBvZiB0aGUgZ3JvdXAgdGhhdCBoYXMgYSBgc2V0U3R5bGVgIG1ldGhvZC5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuaW52b2tlKCdzZXRTdHlsZScsIHN0eWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQoKTogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciBncm91cCB0byB0aGUgdG9wIG9mIGFsbCBvdGhlciBsYXllcnNcclxuICBcdGJyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ2JyaW5nVG9Gcm9udCcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9CYWNrKCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgZ3JvdXAgdG8gdGhlIGJhY2sgb2YgYWxsIG90aGVyIGxheWVyc1xyXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuaW52b2tlKCdicmluZ1RvQmFjaycpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIExhdExuZ0JvdW5kcyBvZiB0aGUgRmVhdHVyZSBHcm91cCAoY3JlYXRlZCBmcm9tIGJvdW5kcyBhbmQgY29vcmRpbmF0ZXMgb2YgaXRzIGNoaWxkcmVuKS5cclxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgYm91bmRzID0gbmV3IExhdExuZ0JvdW5kcygpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0dmFyIGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcclxuICBcdFx0XHRib3VuZHMuZXh0ZW5kKGxheWVyLmdldEJvdW5kcyA/IGxheWVyLmdldEJvdW5kcygpIDogbGF5ZXIuZ2V0TGF0TG5nKCkpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBib3VuZHM7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBmYWN0b3J5IEwuZmVhdHVyZUdyb3VwKGxheWVycz86IExheWVyW10sIG9wdGlvbnM/OiBPYmplY3QpXHJcbiAgLy8gQ3JlYXRlIGEgZmVhdHVyZSBncm91cCwgb3B0aW9uYWxseSBnaXZlbiBhbiBpbml0aWFsIHNldCBvZiBsYXllcnMgYW5kIGFuIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgdmFyIGZlYXR1cmVHcm91cCA9IGZ1bmN0aW9uIChsYXllcnMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgRmVhdHVyZUdyb3VwKGxheWVycywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBJY29uXHJcbiAgICogQGFrYSBMLkljb25cclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYW4gaWNvbiB0byBwcm92aWRlIHdoZW4gY3JlYXRpbmcgYSBtYXJrZXIuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgbXlJY29uID0gTC5pY29uKHtcclxuICAgKiAgICAgaWNvblVybDogJ215LWljb24ucG5nJyxcclxuICAgKiAgICAgaWNvblJldGluYVVybDogJ215LWljb25AMngucG5nJyxcclxuICAgKiAgICAgaWNvblNpemU6IFszOCwgOTVdLFxyXG4gICAqICAgICBpY29uQW5jaG9yOiBbMjIsIDk0XSxcclxuICAgKiAgICAgcG9wdXBBbmNob3I6IFstMywgLTc2XSxcclxuICAgKiAgICAgc2hhZG93VXJsOiAnbXktaWNvbi1zaGFkb3cucG5nJyxcclxuICAgKiAgICAgc2hhZG93UmV0aW5hVXJsOiAnbXktaWNvbi1zaGFkb3dAMngucG5nJyxcclxuICAgKiAgICAgc2hhZG93U2l6ZTogWzY4LCA5NV0sXHJcbiAgICogICAgIHNoYWRvd0FuY2hvcjogWzIyLCA5NF1cclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEwubWFya2VyKFs1MC41MDUsIDMwLjU3XSwge2ljb246IG15SWNvbn0pLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBgTC5JY29uLkRlZmF1bHRgIGV4dGVuZHMgYEwuSWNvbmAgYW5kIGlzIHRoZSBibHVlIGljb24gTGVhZmxldCB1c2VzIGZvciBtYXJrZXJzIGJ5IGRlZmF1bHQuXHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgdmFyIEljb24gPSBDbGFzcy5leHRlbmQoe1xyXG5cclxuICBcdC8qIEBzZWN0aW9uXHJcbiAgXHQgKiBAYWthIEljb24gb3B0aW9uc1xyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gaWNvblVybDogU3RyaW5nID0gbnVsbFxyXG4gIFx0ICogKioocmVxdWlyZWQpKiogVGhlIFVSTCB0byB0aGUgaWNvbiBpbWFnZSAoYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8geW91ciBzY3JpcHQgcGF0aCkuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uUmV0aW5hVXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKiBUaGUgVVJMIHRvIGEgcmV0aW5hIHNpemVkIHZlcnNpb24gb2YgdGhlIGljb24gaW1hZ2UgKGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHlvdXJcclxuICBcdCAqIHNjcmlwdCBwYXRoKS4gVXNlZCBmb3IgUmV0aW5hIHNjcmVlbiBkZXZpY2VzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gaWNvblNpemU6IFBvaW50ID0gbnVsbFxyXG4gIFx0ICogU2l6ZSBvZiB0aGUgaWNvbiBpbWFnZSBpbiBwaXhlbHMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uQW5jaG9yOiBQb2ludCA9IG51bGxcclxuICBcdCAqIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgXCJ0aXBcIiBvZiB0aGUgaWNvbiAocmVsYXRpdmUgdG8gaXRzIHRvcCBsZWZ0IGNvcm5lcikuIFRoZSBpY29uXHJcbiAgXHQgKiB3aWxsIGJlIGFsaWduZWQgc28gdGhhdCB0aGlzIHBvaW50IGlzIGF0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uIENlbnRlcmVkXHJcbiAgXHQgKiBieSBkZWZhdWx0IGlmIHNpemUgaXMgc3BlY2lmaWVkLCBhbHNvIGNhbiBiZSBzZXQgaW4gQ1NTIHdpdGggbmVnYXRpdmUgbWFyZ2lucy5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHBvcHVwQW5jaG9yOiBQb2ludCA9IFswLCAwXVxyXG4gIFx0ICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBmcm9tIHdoaWNoIHBvcHVwcyB3aWxsIFwib3BlblwiLCByZWxhdGl2ZSB0byB0aGUgaWNvbiBhbmNob3IuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiB0b29sdGlwQW5jaG9yOiBQb2ludCA9IFswLCAwXVxyXG4gIFx0ICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBmcm9tIHdoaWNoIHRvb2x0aXBzIHdpbGwgXCJvcGVuXCIsIHJlbGF0aXZlIHRvIHRoZSBpY29uIGFuY2hvci5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHNoYWRvd1VybDogU3RyaW5nID0gbnVsbFxyXG4gIFx0ICogVGhlIFVSTCB0byB0aGUgaWNvbiBzaGFkb3cgaW1hZ2UuIElmIG5vdCBzcGVjaWZpZWQsIG5vIHNoYWRvdyBpbWFnZSB3aWxsIGJlIGNyZWF0ZWQuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBzaGFkb3dSZXRpbmFVcmw6IFN0cmluZyA9IG51bGxcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHNoYWRvd1NpemU6IFBvaW50ID0gbnVsbFxyXG4gIFx0ICogU2l6ZSBvZiB0aGUgc2hhZG93IGltYWdlIGluIHBpeGVscy5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHNoYWRvd0FuY2hvcjogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIFwidGlwXCIgb2YgdGhlIHNoYWRvdyAocmVsYXRpdmUgdG8gaXRzIHRvcCBsZWZ0IGNvcm5lcikgKHRoZSBzYW1lXHJcbiAgXHQgKiBhcyBpY29uQW5jaG9yIGlmIG5vdCBzcGVjaWZpZWQpLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xyXG4gIFx0ICogQSBjdXN0b20gY2xhc3MgbmFtZSB0byBhc3NpZ24gdG8gYm90aCBpY29uIGFuZCBzaGFkb3cgaW1hZ2VzLiBFbXB0eSBieSBkZWZhdWx0LlxyXG4gIFx0ICovXHJcblxyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3B1cEFuY2hvcjogWzAsIDBdLFxyXG4gIFx0XHR0b29sdGlwQW5jaG9yOiBbMCwgMF0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNyb3NzT3JpZ2luOiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aWxlcy5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIGFsbCB0aWxlcyB3aWxsIGhhdmUgdGhlaXIgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLiBUaGlzIGlzIG5lZWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGlsZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjcmVhdGVJY29uKG9sZEljb24/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBDYWxsZWQgaW50ZXJuYWxseSB3aGVuIHRoZSBpY29uIGhhcyB0byBiZSBzaG93biwgcmV0dXJucyBhIGA8aW1nPmAgSFRNTCBlbGVtZW50XHJcbiAgXHQvLyBzdHlsZWQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zLlxyXG4gIFx0Y3JlYXRlSWNvbjogZnVuY3Rpb24gKG9sZEljb24pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oJ2ljb24nLCBvbGRJY29uKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjcmVhdGVTaGFkb3cob2xkSWNvbj86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIEFzIGBjcmVhdGVJY29uYCwgYnV0IGZvciB0aGUgc2hhZG93IGJlbmVhdGggaXQuXHJcbiAgXHRjcmVhdGVTaGFkb3c6IGZ1bmN0aW9uIChvbGRJY29uKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9jcmVhdGVJY29uKCdzaGFkb3cnLCBvbGRJY29uKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NyZWF0ZUljb246IGZ1bmN0aW9uIChuYW1lLCBvbGRJY29uKSB7XHJcbiAgXHRcdHZhciBzcmMgPSB0aGlzLl9nZXRJY29uVXJsKG5hbWUpO1xyXG5cclxuICBcdFx0aWYgKCFzcmMpIHtcclxuICBcdFx0XHRpZiAobmFtZSA9PT0gJ2ljb24nKSB7XHJcbiAgXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiBudWxsO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaW1nID0gdGhpcy5fY3JlYXRlSW1nKHNyYywgb2xkSWNvbiAmJiBvbGRJY29uLnRhZ05hbWUgPT09ICdJTUcnID8gb2xkSWNvbiA6IG51bGwpO1xyXG4gIFx0XHR0aGlzLl9zZXRJY29uU3R5bGVzKGltZywgbmFtZSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luIHx8IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiA9PT0gJycpIHtcclxuICBcdFx0XHRpbWcuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIGltZztcclxuICBcdH0sXHJcblxyXG4gIFx0X3NldEljb25TdHlsZXM6IGZ1bmN0aW9uIChpbWcsIG5hbWUpIHtcclxuICBcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgXHRcdHZhciBzaXplT3B0aW9uID0gb3B0aW9uc1tuYW1lICsgJ1NpemUnXTtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygc2l6ZU9wdGlvbiA9PT0gJ251bWJlcicpIHtcclxuICBcdFx0XHRzaXplT3B0aW9uID0gW3NpemVPcHRpb24sIHNpemVPcHRpb25dO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgc2l6ZSA9IHRvUG9pbnQoc2l6ZU9wdGlvbiksXHJcbiAgXHRcdCAgICBhbmNob3IgPSB0b1BvaW50KG5hbWUgPT09ICdzaGFkb3cnICYmIG9wdGlvbnMuc2hhZG93QW5jaG9yIHx8IG9wdGlvbnMuaWNvbkFuY2hvciB8fFxyXG4gIFx0XHQgICAgICAgICAgICBzaXplICYmIHNpemUuZGl2aWRlQnkoMiwgdHJ1ZSkpO1xyXG5cclxuICBcdFx0aW1nLmNsYXNzTmFtZSA9ICdsZWFmbGV0LW1hcmtlci0nICsgbmFtZSArICcgJyArIChvcHRpb25zLmNsYXNzTmFtZSB8fCAnJyk7XHJcblxyXG4gIFx0XHRpZiAoYW5jaG9yKSB7XHJcbiAgXHRcdFx0aW1nLnN0eWxlLm1hcmdpbkxlZnQgPSAoLWFuY2hvci54KSArICdweCc7XHJcbiAgXHRcdFx0aW1nLnN0eWxlLm1hcmdpblRvcCAgPSAoLWFuY2hvci55KSArICdweCc7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChzaXplKSB7XHJcbiAgXHRcdFx0aW1nLnN0eWxlLndpZHRoICA9IHNpemUueCArICdweCc7XHJcbiAgXHRcdFx0aW1nLnN0eWxlLmhlaWdodCA9IHNpemUueSArICdweCc7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2NyZWF0ZUltZzogZnVuY3Rpb24gKHNyYywgZWwpIHtcclxuICBcdFx0ZWwgPSBlbCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICBcdFx0ZWwuc3JjID0gc3JjO1xyXG4gIFx0XHRyZXR1cm4gZWw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRJY29uVXJsOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gIFx0XHRyZXR1cm4gQnJvd3Nlci5yZXRpbmEgJiYgdGhpcy5vcHRpb25zW25hbWUgKyAnUmV0aW5hVXJsJ10gfHwgdGhpcy5vcHRpb25zW25hbWUgKyAnVXJsJ107XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLmljb24ob3B0aW9uczogSWNvbiBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYW4gaWNvbiBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxyXG4gIGZ1bmN0aW9uIGljb24ob3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBJY29uKG9wdGlvbnMpO1xyXG4gIH1cblxuICAvKlxuICAgKiBAbWluaWNsYXNzIEljb24uRGVmYXVsdCAoSWNvbilcbiAgICogQGFrYSBMLkljb24uRGVmYXVsdFxuICAgKiBAc2VjdGlvblxuICAgKlxuICAgKiBBIHRyaXZpYWwgc3ViY2xhc3Mgb2YgYEljb25gLCByZXByZXNlbnRzIHRoZSBpY29uIHRvIHVzZSBpbiBgTWFya2VyYHMgd2hlblxuICAgKiBubyBpY29uIGlzIHNwZWNpZmllZC4gUG9pbnRzIHRvIHRoZSBibHVlIG1hcmtlciBpbWFnZSBkaXN0cmlidXRlZCB3aXRoIExlYWZsZXRcbiAgICogcmVsZWFzZXMuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGN1c3RvbWl6ZSB0aGUgZGVmYXVsdCBpY29uLCBqdXN0IGNoYW5nZSB0aGUgcHJvcGVydGllcyBvZiBgTC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnNgXG4gICAqICh3aGljaCBpcyBhIHNldCBvZiBgSWNvbiBvcHRpb25zYCkuXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIF9jb21wbGV0ZWx5XyByZXBsYWNlIHRoZSBkZWZhdWx0IGljb24sIG92ZXJyaWRlIHRoZVxuICAgKiBgTC5NYXJrZXIucHJvdG90eXBlLm9wdGlvbnMuaWNvbmAgd2l0aCB5b3VyIG93biBpY29uIGluc3RlYWQuXG4gICAqL1xuXG4gIHZhciBJY29uRGVmYXVsdCA9IEljb24uZXh0ZW5kKHtcblxuICBcdG9wdGlvbnM6IHtcbiAgXHRcdGljb25Vcmw6ICAgICAgICdtYXJrZXItaWNvbi5wbmcnLFxuICBcdFx0aWNvblJldGluYVVybDogJ21hcmtlci1pY29uLTJ4LnBuZycsXG4gIFx0XHRzaGFkb3dVcmw6ICAgICAnbWFya2VyLXNoYWRvdy5wbmcnLFxuICBcdFx0aWNvblNpemU6ICAgIFsyNSwgNDFdLFxuICBcdFx0aWNvbkFuY2hvcjogIFsxMiwgNDFdLFxuICBcdFx0cG9wdXBBbmNob3I6IFsxLCAtMzRdLFxuICBcdFx0dG9vbHRpcEFuY2hvcjogWzE2LCAtMjhdLFxuICBcdFx0c2hhZG93U2l6ZTogIFs0MSwgNDFdXG4gIFx0fSxcblxuICBcdF9nZXRJY29uVXJsOiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0aWYgKHR5cGVvZiBJY29uRGVmYXVsdC5pbWFnZVBhdGggIT09ICdzdHJpbmcnKSB7XHQvLyBEZXByZWNhdGVkLCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBvbmx5XG4gIFx0XHRcdEljb25EZWZhdWx0LmltYWdlUGF0aCA9IHRoaXMuX2RldGVjdEljb25QYXRoKCk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIEBvcHRpb24gaW1hZ2VQYXRoOiBTdHJpbmdcbiAgXHRcdC8vIGBJY29uLkRlZmF1bHRgIHdpbGwgdHJ5IHRvIGF1dG8tZGV0ZWN0IHRoZSBsb2NhdGlvbiBvZiB0aGVcbiAgXHRcdC8vIGJsdWUgaWNvbiBpbWFnZXMuIElmIHlvdSBhcmUgcGxhY2luZyB0aGVzZSBpbWFnZXMgaW4gYSBub24tc3RhbmRhcmRcbiAgXHRcdC8vIHdheSwgc2V0IHRoaXMgb3B0aW9uIHRvIHBvaW50IHRvIHRoZSByaWdodCBwYXRoLlxuICBcdFx0cmV0dXJuICh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRoIHx8IEljb25EZWZhdWx0LmltYWdlUGF0aCkgKyBJY29uLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsIG5hbWUpO1xuICBcdH0sXG5cbiAgXHRfc3RyaXBVcmw6IGZ1bmN0aW9uIChwYXRoKSB7XHQvLyBzZXBhcmF0ZSBmdW5jdGlvbiB0byB1c2UgaW4gdGVzdHNcbiAgXHRcdHZhciBzdHJpcCA9IGZ1bmN0aW9uIChzdHIsIHJlLCBpZHgpIHtcbiAgXHRcdFx0dmFyIG1hdGNoID0gcmUuZXhlYyhzdHIpO1xuICBcdFx0XHRyZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbaWR4XTtcbiAgXHRcdH07XG4gIFx0XHRwYXRoID0gc3RyaXAocGF0aCwgL151cmxcXCgoWydcIl0pPyguKylcXDFcXCkkLywgMik7XG4gIFx0XHRyZXR1cm4gcGF0aCAmJiBzdHJpcChwYXRoLCAvXiguKiltYXJrZXItaWNvblxcLnBuZyQvLCAxKTtcbiAgXHR9LFxuXG4gIFx0X2RldGVjdEljb25QYXRoOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZWwgPSBjcmVhdGUkMSgnZGl2JywgICdsZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoJywgZG9jdW1lbnQuYm9keSk7XG4gIFx0XHR2YXIgcGF0aCA9IGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZC1pbWFnZScpIHx8XG4gIFx0XHQgICAgICAgICAgIGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZEltYWdlJyk7XHQvLyBJRThcblxuICBcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG4gIFx0XHRwYXRoID0gdGhpcy5fc3RyaXBVcmwocGF0aCk7XG4gIFx0XHRpZiAocGF0aCkgeyByZXR1cm4gcGF0aDsgfVxuICBcdFx0dmFyIGxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW2hyZWYkPVwibGVhZmxldC5jc3NcIl0nKTtcbiAgXHRcdGlmICghbGluaykgeyByZXR1cm4gJyc7IH1cbiAgXHRcdHJldHVybiBsaW5rLmhyZWYuc3Vic3RyaW5nKDAsIGxpbmsuaHJlZi5sZW5ndGggLSAnbGVhZmxldC5jc3MnLmxlbmd0aCAtIDEpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLk1hcmtlckRyYWcgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IEwuTWFya2VyIHRvIG1ha2UgdGhlIG1hcmtlcnMgZHJhZ2dhYmxlLlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFya2VyXG4gICAqIEBzZWN0aW9uIEludGVyYWN0aW9uIGhhbmRsZXJzXG4gICAqXG4gICAqIEludGVyYWN0aW9uIGhhbmRsZXJzIGFyZSBwcm9wZXJ0aWVzIG9mIGEgbWFya2VyIGluc3RhbmNlIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgaW50ZXJhY3Rpb24gYmVoYXZpb3IgaW4gcnVudGltZSwgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMgc3VjaCBhcyBkcmFnZ2luZyAoc2VlIGBIYW5kbGVyYCBtZXRob2RzKS4gRXhhbXBsZTpcbiAgICpcbiAgICogYGBganNcbiAgICogbWFya2VyLmRyYWdnaW5nLmRpc2FibGUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAgKiBNYXJrZXIgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLiBPbmx5IHZhbGlkIHdoZW4gdGhlIG1hcmtlciBpcyBvbiB0aGUgbWFwIChPdGhlcndpc2Ugc2V0IFtgbWFya2VyLm9wdGlvbnMuZHJhZ2dhYmxlYF0oI21hcmtlci1kcmFnZ2FibGUpKS5cbiAgICovXG5cbiAgdmFyIE1hcmtlckRyYWcgPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG1hcmtlcikge1xuICBcdFx0dGhpcy5fbWFya2VyID0gbWFya2VyO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGljb24gPSB0aGlzLl9tYXJrZXIuX2ljb247XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhZ2dhYmxlKSB7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUoaWNvbiwgaWNvbiwgdHJ1ZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5vbih7XG4gIFx0XHRcdGRyYWdzdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gIFx0XHRcdHByZWRyYWc6IHRoaXMuX29uUHJlRHJhZyxcbiAgXHRcdFx0ZHJhZzogdGhpcy5fb25EcmFnLFxuICBcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdH0sIHRoaXMpLmVuYWJsZSgpO1xuXG4gIFx0XHRhZGRDbGFzcyhpY29uLCAnbGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlJyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUub2ZmKHtcbiAgXHRcdFx0ZHJhZ3N0YXJ0OiB0aGlzLl9vbkRyYWdTdGFydCxcbiAgXHRcdFx0cHJlZHJhZzogdGhpcy5fb25QcmVEcmFnLFxuICBcdFx0XHRkcmFnOiB0aGlzLl9vbkRyYWcsXG4gIFx0XHRcdGRyYWdlbmQ6IHRoaXMuX29uRHJhZ0VuZFxuICBcdFx0fSwgdGhpcykuZGlzYWJsZSgpO1xuXG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLl9pY29uKSB7XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcmtlci5faWNvbiwgJ2xlYWZsZXQtbWFya2VyLWRyYWdnYWJsZScpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcmtlciA9IHRoaXMuX21hcmtlcixcbiAgXHRcdCAgICBtYXAgPSBtYXJrZXIuX21hcCxcbiAgXHRcdCAgICBzcGVlZCA9IHRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5TcGVlZCxcbiAgXHRcdCAgICBwYWRkaW5nID0gdGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcsXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgYm91bmRzID0gbWFwLmdldFBpeGVsQm91bmRzKCksXG4gIFx0XHQgICAgb3JpZ2luID0gbWFwLmdldFBpeGVsT3JpZ2luKCk7XG5cbiAgXHRcdHZhciBwYW5Cb3VuZHMgPSB0b0JvdW5kcyhcbiAgXHRcdFx0Ym91bmRzLm1pbi5fc3VidHJhY3Qob3JpZ2luKS5hZGQocGFkZGluZyksXG4gIFx0XHRcdGJvdW5kcy5tYXguX3N1YnRyYWN0KG9yaWdpbikuc3VidHJhY3QocGFkZGluZylcbiAgXHRcdCk7XG5cbiAgXHRcdGlmICghcGFuQm91bmRzLmNvbnRhaW5zKGljb25Qb3MpKSB7XG4gIFx0XHRcdC8vIENvbXB1dGUgaW5jcmVtZW50YWwgbW92ZW1lbnRcbiAgXHRcdFx0dmFyIG1vdmVtZW50ID0gdG9Qb2ludChcbiAgXHRcdFx0XHQoTWF0aC5tYXgocGFuQm91bmRzLm1heC54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1heC54KSAvIChib3VuZHMubWF4LnggLSBwYW5Cb3VuZHMubWF4LngpIC1cbiAgXHRcdFx0XHQoTWF0aC5taW4ocGFuQm91bmRzLm1pbi54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1pbi54KSAvIChib3VuZHMubWluLnggLSBwYW5Cb3VuZHMubWluLngpLFxuXG4gIFx0XHRcdFx0KE1hdGgubWF4KHBhbkJvdW5kcy5tYXgueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5tYXgueSkgLyAoYm91bmRzLm1heC55IC0gcGFuQm91bmRzLm1heC55KSAtXG4gIFx0XHRcdFx0KE1hdGgubWluKHBhbkJvdW5kcy5taW4ueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5taW4ueSkgLyAoYm91bmRzLm1pbi55IC0gcGFuQm91bmRzLm1pbi55KVxuICBcdFx0XHQpLm11bHRpcGx5Qnkoc3BlZWQpO1xuXG4gIFx0XHRcdG1hcC5wYW5CeShtb3ZlbWVudCwge2FuaW1hdGU6IGZhbHNlfSk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuX2FkZChtb3ZlbWVudCk7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZChtb3ZlbWVudCk7XG5cbiAgXHRcdFx0c2V0UG9zaXRpb24obWFya2VyLl9pY29uLCB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcyk7XG4gIFx0XHRcdHRoaXMuX29uRHJhZyhlKTtcblxuICBcdFx0XHR0aGlzLl9wYW5SZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLCBlKSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gQHNlY3Rpb24gRHJhZ2dpbmcgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgZHJhZ3N0YXJ0OiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBzdGFydHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cblxuICBcdFx0dGhpcy5fb2xkTGF0TG5nID0gdGhpcy5fbWFya2VyLmdldExhdExuZygpO1xuXG4gIFx0XHQvLyBXaGVuIHVzaW5nIEVTNiBpbXBvcnRzIGl0IGNvdWxkIG5vdCBiZSBzZXQgd2hlbiBgUG9wdXBgIHdhcyBub3QgaW1wb3J0ZWQgYXMgd2VsbFxuICBcdFx0dGhpcy5fbWFya2VyLmNsb3NlUG9wdXAgJiYgdGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKTtcblxuICBcdFx0dGhpcy5fbWFya2VyXG4gIFx0XHRcdC5maXJlKCdtb3Zlc3RhcnQnKVxuICBcdFx0XHQuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG4gIFx0fSxcblxuICBcdF9vblByZURyYWc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1Bhbikge1xuICBcdFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcGFuUmVxdWVzdCk7XG4gIFx0XHRcdHRoaXMuX3BhblJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsIGUpKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uRHJhZzogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXJrZXIgPSB0aGlzLl9tYXJrZXIsXG4gIFx0XHQgICAgc2hhZG93ID0gbWFya2VyLl9zaGFkb3csXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgbGF0bG5nID0gbWFya2VyLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGljb25Qb3MpO1xuXG4gIFx0XHQvLyB1cGRhdGUgc2hhZG93IHBvc2l0aW9uXG4gIFx0XHRpZiAoc2hhZG93KSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHNoYWRvdywgaWNvblBvcyk7XG4gIFx0XHR9XG5cbiAgXHRcdG1hcmtlci5fbGF0bG5nID0gbGF0bG5nO1xuICBcdFx0ZS5sYXRsbmcgPSBsYXRsbmc7XG4gIFx0XHRlLm9sZExhdExuZyA9IHRoaXMuX29sZExhdExuZztcblxuICBcdFx0Ly8gQGV2ZW50IGRyYWc6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IHdoaWxlIHRoZSB1c2VyIGRyYWdzIHRoZSBtYXJrZXIuXG4gIFx0XHRtYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZScsIGUpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWcnLCBlKTtcbiAgXHR9LFxuXG4gIFx0X29uRHJhZ0VuZDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdC8vIEBldmVudCBkcmFnZW5kOiBEcmFnRW5kRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgc3RvcHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0IGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9wYW5SZXF1ZXN0KTtcblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVlbmQ6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgc3RvcHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cbiAgXHRcdGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmc7XG4gIFx0XHR0aGlzLl9tYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZWVuZCcpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWdlbmQnLCBlKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIE1hcmtlclxyXG4gICAqIEBpbmhlcml0cyBJbnRlcmFjdGl2ZSBsYXllclxyXG4gICAqIEBha2EgTC5NYXJrZXJcclxuICAgKiBMLk1hcmtlciBpcyB1c2VkIHRvIGRpc3BsYXkgY2xpY2thYmxlL2RyYWdnYWJsZSBpY29ucyBvbiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLm1hcmtlcihbNTAuNSwgMzAuNV0pLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBNYXJrZXIgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIE1hcmtlciBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gaWNvbjogSWNvbiA9ICpcclxuICBcdFx0Ly8gSWNvbiBpbnN0YW5jZSB0byB1c2UgZm9yIHJlbmRlcmluZyB0aGUgbWFya2VyLlxyXG4gIFx0XHQvLyBTZWUgW0ljb24gZG9jdW1lbnRhdGlvbl0oI0wuSWNvbikgZm9yIGRldGFpbHMgb24gaG93IHRvIGN1c3RvbWl6ZSB0aGUgbWFya2VyIGljb24uXHJcbiAgXHRcdC8vIElmIG5vdCBzcGVjaWZpZWQsIGEgY29tbW9uIGluc3RhbmNlIG9mIGBMLkljb24uRGVmYXVsdGAgaXMgdXNlZC5cclxuICBcdFx0aWNvbjogbmV3IEljb25EZWZhdWx0KCksXHJcblxyXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXHJcbiAgXHRcdGludGVyYWN0aXZlOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBrZXlib2FyZDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFya2VyIGNhbiBiZSB0YWJiZWQgdG8gd2l0aCBhIGtleWJvYXJkIGFuZCBjbGlja2VkIGJ5IHByZXNzaW5nIGVudGVyLlxyXG4gIFx0XHRrZXlib2FyZDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdGl0bGU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIFRleHQgZm9yIHRoZSBicm93c2VyIHRvb2x0aXAgdGhhdCBhcHBlYXIgb24gbWFya2VyIGhvdmVyIChubyB0b29sdGlwIGJ5IGRlZmF1bHQpLlxyXG4gIFx0XHQvLyBbVXNlZnVsIGZvciBhY2Nlc3NpYmlsaXR5XShodHRwczovL2xlYWZsZXRqcy5jb20vZXhhbXBsZXMvYWNjZXNzaWJpbGl0eS8jbWFya2Vycy1tdXN0LWJlLWxhYmVsbGVkKS5cclxuICBcdFx0dGl0bGU6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhbHQ6IFN0cmluZyA9ICdNYXJrZXInXHJcbiAgXHRcdC8vIFRleHQgZm9yIHRoZSBgYWx0YCBhdHRyaWJ1dGUgb2YgdGhlIGljb24gaW1hZ2UuXHJcbiAgXHRcdC8vIFtVc2VmdWwgZm9yIGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vbGVhZmxldGpzLmNvbS9leGFtcGxlcy9hY2Nlc3NpYmlsaXR5LyNtYXJrZXJzLW11c3QtYmUtbGFiZWxsZWQpLlxyXG4gIFx0XHRhbHQ6ICdNYXJrZXInLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6SW5kZXhPZmZzZXQ6IE51bWJlciA9IDBcclxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgbWFya2VyIGltYWdlcyB6SW5kZXggaXMgc2V0IGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gaXRzIGxhdGl0dWRlLiBVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcHV0IHRoZSBtYXJrZXIgb24gdG9wIG9mIGFsbCBvdGhlcnMgKG9yIGJlbG93KSwgc3BlY2lmeWluZyBhIGhpZ2ggdmFsdWUgbGlrZSBgMTAwMGAgKG9yIGhpZ2ggbmVnYXRpdmUgdmFsdWUsIHJlc3BlY3RpdmVseSkuXHJcbiAgXHRcdHpJbmRleE9mZnNldDogMCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gb3BhY2l0eTogTnVtYmVyID0gMS4wXHJcbiAgXHRcdC8vIFRoZSBvcGFjaXR5IG9mIHRoZSBtYXJrZXIuXHJcbiAgXHRcdG9wYWNpdHk6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJpc2VPbkhvdmVyOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgbWFya2VyIHdpbGwgZ2V0IG9uIHRvcCBvZiBvdGhlcnMgd2hlbiB5b3UgaG92ZXIgdGhlIG1vdXNlIG92ZXIgaXQuXHJcbiAgXHRcdHJpc2VPbkhvdmVyOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcmlzZU9mZnNldDogTnVtYmVyID0gMjUwXHJcbiAgXHRcdC8vIFRoZSB6LWluZGV4IG9mZnNldCB1c2VkIGZvciB0aGUgYHJpc2VPbkhvdmVyYCBmZWF0dXJlLlxyXG4gIFx0XHRyaXNlT2Zmc2V0OiAyNTAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHBhbmU6IFN0cmluZyA9ICdtYXJrZXJQYW5lJ1xyXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBtYXJrZXJzIGljb24gd2lsbCBiZSBhZGRlZC5cclxuICBcdFx0cGFuZTogJ21hcmtlclBhbmUnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzaGFkb3dQYW5lOiBTdHJpbmcgPSAnc2hhZG93UGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgbWFya2VycyBzaGFkb3cgd2lsbCBiZSBhZGRlZC5cclxuICBcdFx0c2hhZG93UGFuZTogJ3NoYWRvd1BhbmUnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBidWJibGluZ01vdXNlRXZlbnRzOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gV2hlbiBgdHJ1ZWAsIGEgbW91c2UgZXZlbnQgb24gdGhpcyBtYXJrZXIgd2lsbCB0cmlnZ2VyIHRoZSBzYW1lIGV2ZW50IG9uIHRoZSBtYXBcclxuICBcdFx0Ly8gKHVubGVzcyBbYEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uYF0oI2RvbWV2ZW50LXN0b3Bwcm9wYWdhdGlvbikgaXMgdXNlZCkuXHJcbiAgXHRcdGJ1YmJsaW5nTW91c2VFdmVudHM6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuT25Gb2N1czogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hlbiBgdHJ1ZWAsIHRoZSBtYXAgd2lsbCBwYW4gd2hlbmV2ZXIgdGhlIG1hcmtlciBpcyBmb2N1c2VkICh2aWFcclxuICBcdFx0Ly8gZS5nLiBwcmVzc2luZyBgdGFiYCBvbiB0aGUga2V5Ym9hcmQpIHRvIGVuc3VyZSB0aGUgbWFya2VyIGlzXHJcbiAgXHRcdC8vIHZpc2libGUgd2l0aGluIHRoZSBtYXAncyBib3VuZHNcclxuICBcdFx0YXV0b1Bhbk9uRm9jdXM6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBEcmFnZ2FibGUgbWFya2VyIG9wdGlvbnNcclxuICBcdFx0Ly8gQG9wdGlvbiBkcmFnZ2FibGU6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBtYXJrZXIgaXMgZHJhZ2dhYmxlIHdpdGggbW91c2UvdG91Y2ggb3Igbm90LlxyXG4gIFx0XHRkcmFnZ2FibGU6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0byBwYW4gdGhlIG1hcCB3aGVuIGRyYWdnaW5nIHRoaXMgbWFya2VyIG5lYXIgaXRzIGVkZ2Ugb3Igbm90LlxyXG4gIFx0XHRhdXRvUGFuOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblBhZGRpbmc6IFBvaW50ID0gUG9pbnQoNTAsIDUwKVxyXG4gIFx0XHQvLyBEaXN0YW5jZSAoaW4gcGl4ZWxzIHRvIHRoZSBsZWZ0L3JpZ2h0IGFuZCB0byB0aGUgdG9wL2JvdHRvbSkgb2YgdGhlXHJcbiAgXHRcdC8vIG1hcCBlZGdlIHRvIHN0YXJ0IHBhbm5pbmcgdGhlIG1hcC5cclxuICBcdFx0YXV0b1BhblBhZGRpbmc6IFs1MCwgNTBdLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuU3BlZWQ6IE51bWJlciA9IDEwXHJcbiAgXHRcdC8vIE51bWJlciBvZiBwaXhlbHMgdGhlIG1hcCBzaG91bGQgcGFuIGJ5LlxyXG4gIFx0XHRhdXRvUGFuU3BlZWQ6IDEwXHJcbiAgXHR9LFxyXG5cclxuICBcdC8qIEBzZWN0aW9uXHJcbiAgXHQgKlxyXG4gIFx0ICogSW4gYWRkaXRpb24gdG8gW3NoYXJlZCBsYXllciBtZXRob2RzXSgjTGF5ZXIpIGxpa2UgYGFkZFRvKClgIGFuZCBgcmVtb3ZlKClgIGFuZCBbcG9wdXAgbWV0aG9kc10oI1BvcHVwKSBsaWtlIGJpbmRQb3B1cCgpIHlvdSBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxyXG4gIFx0ICovXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0XHR0aGlzLl9sYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSB0aGlzLl96b29tQW5pbWF0ZWQgJiYgbWFwLm9wdGlvbnMubWFya2VyWm9vbUFuaW1hdGlvbjtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRtYXAub24oJ3pvb21hbmltJywgdGhpcy5fYW5pbWF0ZVpvb20sIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0SWNvbigpO1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRpZiAodGhpcy5kcmFnZ2luZyAmJiB0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSkge1xyXG4gIFx0XHRcdHRoaXMub3B0aW9ucy5kcmFnZ2FibGUgPSB0cnVlO1xyXG4gIFx0XHRcdHRoaXMuZHJhZ2dpbmcucmVtb3ZlSG9va3MoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRkZWxldGUgdGhpcy5kcmFnZ2luZztcclxuXHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRtYXAub2ZmKCd6b29tYW5pbScsIHRoaXMuX2FuaW1hdGVab29tLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fcmVtb3ZlSWNvbigpO1xyXG4gIFx0XHR0aGlzLl9yZW1vdmVTaGFkb3coKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy51cGRhdGUsXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLnVwZGF0ZVxyXG4gIFx0XHR9O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldExhdExuZzogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGdlb2dyYXBoaWNhbCBwb3NpdGlvbiBvZiB0aGUgbWFya2VyLlxyXG4gIFx0Z2V0TGF0TG5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9sYXRsbmc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TGF0TG5nKGxhdGxuZzogTGF0TG5nKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgbWFya2VyIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBwb2ludC5cclxuICBcdHNldExhdExuZzogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR2YXIgb2xkTGF0TG5nID0gdGhpcy5fbGF0bG5nO1xyXG4gIFx0XHR0aGlzLl9sYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdmU6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBpcyBtb3ZlZCB2aWEgW2BzZXRMYXRMbmdgXSgjbWFya2VyLXNldGxhdGxuZykgb3IgYnkgW2RyYWdnaW5nXSgjbWFya2VyLWRyYWdnaW5nKS4gT2xkIGFuZCBuZXcgY29vcmRpbmF0ZXMgYXJlIGluY2x1ZGVkIGluIGV2ZW50IGFyZ3VtZW50cyBhcyBgb2xkTGF0TG5nYCwgYGxhdGxuZ2AuXHJcbiAgXHRcdHJldHVybiB0aGlzLmZpcmUoJ21vdmUnLCB7b2xkTGF0TG5nOiBvbGRMYXRMbmcsIGxhdGxuZzogdGhpcy5fbGF0bG5nfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4T2Zmc2V0KG9mZnNldDogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgW3pJbmRleCBvZmZzZXRdKCNtYXJrZXItemluZGV4b2Zmc2V0KSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0c2V0WkluZGV4T2Zmc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdHRoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgXHRcdHJldHVybiB0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEljb246IEljb25cclxuICBcdC8vIFJldHVybnMgdGhlIGN1cnJlbnQgaWNvbiB1c2VkIGJ5IHRoZSBtYXJrZXJcclxuICBcdGdldEljb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldEljb24oaWNvbjogSWNvbik6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIG1hcmtlciBpY29uLlxyXG4gIFx0c2V0SWNvbjogZnVuY3Rpb24gKGljb24pIHtcclxuXHJcbiAgXHRcdHRoaXMub3B0aW9ucy5pY29uID0gaWNvbjtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9pbml0SWNvbigpO1xyXG4gIFx0XHRcdHRoaXMudXBkYXRlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwLCB0aGlzLl9wb3B1cC5vcHRpb25zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGdldEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2ljb247XHJcbiAgXHR9LFxyXG5cclxuICBcdHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ljb24gJiYgdGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dmFyIHBvcyA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpO1xyXG4gIFx0XHRcdHRoaXMuX3NldFBvcyhwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRJY29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxyXG4gIFx0XHQgICAgY2xhc3NUb0FkZCA9ICdsZWFmbGV0LXpvb20tJyArICh0aGlzLl96b29tQW5pbWF0ZWQgPyAnYW5pbWF0ZWQnIDogJ2hpZGUnKTtcclxuXHJcbiAgXHRcdHZhciBpY29uID0gb3B0aW9ucy5pY29uLmNyZWF0ZUljb24odGhpcy5faWNvbiksXHJcbiAgXHRcdCAgICBhZGRJY29uID0gZmFsc2U7XHJcblxyXG4gIFx0XHQvLyBpZiB3ZSdyZSBub3QgcmV1c2luZyB0aGUgaWNvbiwgcmVtb3ZlIHRoZSBvbGQgb25lIGFuZCBpbml0IG5ldyBvbmVcclxuICBcdFx0aWYgKGljb24gIT09IHRoaXMuX2ljb24pIHtcclxuICBcdFx0XHRpZiAodGhpcy5faWNvbikge1xyXG4gIFx0XHRcdFx0dGhpcy5fcmVtb3ZlSWNvbigpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRhZGRJY29uID0gdHJ1ZTtcclxuXHJcbiAgXHRcdFx0aWYgKG9wdGlvbnMudGl0bGUpIHtcclxuICBcdFx0XHRcdGljb24udGl0bGUgPSBvcHRpb25zLnRpdGxlO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0aWYgKGljb24udGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuICBcdFx0XHRcdGljb24uYWx0ID0gb3B0aW9ucy5hbHQgfHwgJyc7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRhZGRDbGFzcyhpY29uLCBjbGFzc1RvQWRkKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLmtleWJvYXJkKSB7XHJcbiAgXHRcdFx0aWNvbi50YWJJbmRleCA9ICcwJztcclxuICBcdFx0XHRpY29uLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5faWNvbiA9IGljb247XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5yaXNlT25Ib3Zlcikge1xyXG4gIFx0XHRcdHRoaXMub24oe1xyXG4gIFx0XHRcdFx0bW91c2VvdmVyOiB0aGlzLl9icmluZ1RvRnJvbnQsXHJcbiAgXHRcdFx0XHRtb3VzZW91dDogdGhpcy5fcmVzZXRaSW5kZXhcclxuICBcdFx0XHR9KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5hdXRvUGFuT25Gb2N1cykge1xyXG4gIFx0XHRcdG9uKGljb24sICdmb2N1cycsIHRoaXMuX3Bhbk9uRm9jdXMsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbmV3U2hhZG93ID0gb3B0aW9ucy5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLFxyXG4gIFx0XHQgICAgYWRkU2hhZG93ID0gZmFsc2U7XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93ICE9PSB0aGlzLl9zaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLl9yZW1vdmVTaGFkb3coKTtcclxuICBcdFx0XHRhZGRTaGFkb3cgPSB0cnVlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93KSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MobmV3U2hhZG93LCBjbGFzc1RvQWRkKTtcclxuICBcdFx0XHRuZXdTaGFkb3cuYWx0ID0gJyc7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbmV3U2hhZG93O1xyXG5cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9wYWNpdHkgPCAxKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG5cclxuICBcdFx0aWYgKGFkZEljb24pIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9pY29uKTtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9pbml0SW50ZXJhY3Rpb24oKTtcclxuICBcdFx0aWYgKG5ld1NoYWRvdyAmJiBhZGRTaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUob3B0aW9ucy5zaGFkb3dQYW5lKS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVJY29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXIpIHtcclxuICBcdFx0XHR0aGlzLm9mZih7XHJcbiAgXHRcdFx0XHRtb3VzZW92ZXI6IHRoaXMuX2JyaW5nVG9Gcm9udCxcclxuICBcdFx0XHRcdG1vdXNlb3V0OiB0aGlzLl9yZXNldFpJbmRleFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmF1dG9QYW5PbkZvY3VzKSB7XHJcbiAgXHRcdFx0b2ZmKHRoaXMuX2ljb24sICdmb2N1cycsIHRoaXMuX3Bhbk9uRm9jdXMsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5faWNvbik7XHJcbiAgXHRcdHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHR0aGlzLl9pY29uID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlbW92ZVNoYWRvdzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX3NoYWRvdyk7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3NldFBvczogZnVuY3Rpb24gKHBvcykge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ljb24pIHtcclxuICBcdFx0XHRzZXRQb3NpdGlvbih0aGlzLl9pY29uLCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5fc2hhZG93LCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl96SW5kZXggPSBwb3MueSArIHRoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQ7XHJcblxyXG4gIFx0XHR0aGlzLl9yZXNldFpJbmRleCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0dGhpcy5faWNvbi5zdHlsZS56SW5kZXggPSB0aGlzLl96SW5kZXggKyBvZmZzZXQ7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAob3B0KSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsIG9wdC56b29tLCBvcHQuY2VudGVyKS5yb3VuZCgpO1xyXG5cclxuICBcdFx0dGhpcy5fc2V0UG9zKHBvcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW50ZXJhY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0YWRkQ2xhc3ModGhpcy5faWNvbiwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuXHJcbiAgXHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHRpZiAoTWFya2VyRHJhZykge1xyXG4gIFx0XHRcdHZhciBkcmFnZ2FibGUgPSB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlO1xyXG4gIFx0XHRcdGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgXHRcdFx0XHRkcmFnZ2FibGUgPSB0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKTtcclxuICBcdFx0XHRcdHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dGhpcy5kcmFnZ2luZyA9IG5ldyBNYXJrZXJEcmFnKHRoaXMpO1xyXG5cclxuICBcdFx0XHRpZiAoZHJhZ2dhYmxlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmRyYWdnaW5nLmVuYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE9wYWNpdHkob3BhY2l0eTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZU9wYWNpdHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG9wYWNpdHkgPSB0aGlzLm9wdGlvbnMub3BhY2l0eTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9pY29uLCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3NoYWRvdykge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fc2hhZG93LCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfYnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZXNldFpJbmRleDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9wYW5PbkZvY3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XHJcbiAgXHRcdGlmICghbWFwKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dmFyIGljb25PcHRzID0gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucztcclxuICBcdFx0dmFyIHNpemUgPSBpY29uT3B0cy5pY29uU2l6ZSA/IHRvUG9pbnQoaWNvbk9wdHMuaWNvblNpemUpIDogdG9Qb2ludCgwLCAwKTtcclxuICBcdFx0dmFyIGFuY2hvciA9IGljb25PcHRzLmljb25BbmNob3IgPyB0b1BvaW50KGljb25PcHRzLmljb25BbmNob3IpIDogdG9Qb2ludCgwLCAwKTtcclxuXHJcbiAgXHRcdG1hcC5wYW5JbnNpZGUodGhpcy5fbGF0bG5nLCB7XHJcbiAgXHRcdFx0cGFkZGluZ1RvcExlZnQ6IGFuY2hvcixcclxuICBcdFx0XHRwYWRkaW5nQm90dG9tUmlnaHQ6IHNpemUuc3VidHJhY3QoYW5jaG9yKVxyXG4gIFx0XHR9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFBvcHVwQW5jaG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuaWNvbi5vcHRpb25zLnBvcHVwQW5jaG9yO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0VG9vbHRpcEFuY2hvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gZmFjdG9yeSBMLm1hcmtlcihsYXRsbmc6IExhdExuZywgb3B0aW9ucz8gOiBNYXJrZXIgb3B0aW9ucylcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5tYXJrZXIobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/IDogTWFya2VyIG9wdGlvbnMpXHJcbiAgLy8gSW5zdGFudGlhdGVzIGEgTWFya2VyIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCBhbmQgb3B0aW9uYWxseSBhbiBvcHRpb25zIG9iamVjdC5cclxuICBmdW5jdGlvbiBtYXJrZXIobGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IE1hcmtlcihsYXRsbmcsIG9wdGlvbnMpO1xyXG4gIH1cblxuICAvKlxuICAgKiBAY2xhc3MgUGF0aFxuICAgKiBAYWthIEwuUGF0aFxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcbiAgICpcbiAgICogQW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBjb250YWlucyBvcHRpb25zIGFuZCBjb25zdGFudHMgc2hhcmVkIGJldHdlZW4gdmVjdG9yXG4gICAqIG92ZXJsYXlzIChQb2x5Z29uLCBQb2x5bGluZSwgQ2lyY2xlKS4gRG8gbm90IHVzZSBpdCBkaXJlY3RseS4gRXh0ZW5kcyBgTGF5ZXJgLlxuICAgKi9cblxuICB2YXIgUGF0aCA9IExheWVyLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUGF0aCBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBzdHJva2U6IEJvb2xlYW4gPSB0cnVlXG4gIFx0XHQvLyBXaGV0aGVyIHRvIGRyYXcgc3Ryb2tlIGFsb25nIHRoZSBwYXRoLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGJvcmRlcnMgb24gcG9seWdvbnMgb3IgY2lyY2xlcy5cbiAgXHRcdHN0cm9rZTogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBjb2xvcjogU3RyaW5nID0gJyMzMzg4ZmYnXG4gIFx0XHQvLyBTdHJva2UgY29sb3JcbiAgXHRcdGNvbG9yOiAnIzMzODhmZicsXG5cbiAgXHRcdC8vIEBvcHRpb24gd2VpZ2h0OiBOdW1iZXIgPSAzXG4gIFx0XHQvLyBTdHJva2Ugd2lkdGggaW4gcGl4ZWxzXG4gIFx0XHR3ZWlnaHQ6IDMsXG5cbiAgXHRcdC8vIEBvcHRpb24gb3BhY2l0eTogTnVtYmVyID0gMS4wXG4gIFx0XHQvLyBTdHJva2Ugb3BhY2l0eVxuICBcdFx0b3BhY2l0eTogMSxcblxuICBcdFx0Ly8gQG9wdGlvbiBsaW5lQ2FwOiBTdHJpbmc9ICdyb3VuZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgZW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3N0cm9rZS1saW5lY2FwKSBvZiB0aGUgc3Ryb2tlLlxuICBcdFx0bGluZUNhcDogJ3JvdW5kJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBsaW5lSm9pbjogU3RyaW5nID0gJ3JvdW5kJ1xuICBcdFx0Ly8gQSBzdHJpbmcgdGhhdCBkZWZpbmVzIFtzaGFwZSB0byBiZSB1c2VkIGF0IHRoZSBjb3JuZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3N0cm9rZS1saW5lam9pbikgb2YgdGhlIHN0cm9rZS5cbiAgXHRcdGxpbmVKb2luOiAncm91bmQnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGRhc2hBcnJheTogU3RyaW5nID0gbnVsbFxuICBcdFx0Ly8gQSBzdHJpbmcgdGhhdCBkZWZpbmVzIHRoZSBzdHJva2UgW2Rhc2ggcGF0dGVybl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtZGFzaGFycmF5KS4gRG9lc24ndCB3b3JrIG9uIGBDYW52YXNgLXBvd2VyZWQgbGF5ZXJzIGluIFtzb21lIG9sZCBicm93c2Vyc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC9zZXRMaW5lRGFzaCNCcm93c2VyX2NvbXBhdGliaWxpdHkpLlxuICBcdFx0ZGFzaEFycmF5OiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGRhc2hPZmZzZXQ6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgW2Rpc3RhbmNlIGludG8gdGhlIGRhc2ggcGF0dGVybiB0byBzdGFydCB0aGUgZGFzaF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtZGFzaG9mZnNldCkuIERvZXNuJ3Qgd29yayBvbiBgQ2FudmFzYC1wb3dlcmVkIGxheWVycyBpbiBbc29tZSBvbGQgYnJvd3NlcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQvc2V0TGluZURhc2gjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KS5cbiAgXHRcdGRhc2hPZmZzZXQ6IG51bGwsXG5cbiAgXHRcdC8vIEBvcHRpb24gZmlsbDogQm9vbGVhbiA9IGRlcGVuZHNcbiAgXHRcdC8vIFdoZXRoZXIgdG8gZmlsbCB0aGUgcGF0aCB3aXRoIGNvbG9yLiBTZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGZpbGxpbmcgb24gcG9seWdvbnMgb3IgY2lyY2xlcy5cbiAgXHRcdGZpbGw6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGxDb2xvcjogU3RyaW5nID0gKlxuICBcdFx0Ly8gRmlsbCBjb2xvci4gRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRoZSBbYGNvbG9yYF0oI3BhdGgtY29sb3IpIG9wdGlvblxuICBcdFx0ZmlsbENvbG9yOiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGxPcGFjaXR5OiBOdW1iZXIgPSAwLjJcbiAgXHRcdC8vIEZpbGwgb3BhY2l0eS5cbiAgXHRcdGZpbGxPcGFjaXR5OiAwLjIsXG5cbiAgXHRcdC8vIEBvcHRpb24gZmlsbFJ1bGU6IFN0cmluZyA9ICdldmVub2RkJ1xuICBcdFx0Ly8gQSBzdHJpbmcgdGhhdCBkZWZpbmVzIFtob3cgdGhlIGluc2lkZSBvZiBhIHNoYXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL2ZpbGwtcnVsZSkgaXMgZGV0ZXJtaW5lZC5cbiAgXHRcdGZpbGxSdWxlOiAnZXZlbm9kZCcsXG5cbiAgXHRcdC8vIGNsYXNzTmFtZTogJycsXG5cbiAgXHRcdC8vIE9wdGlvbiBpbmhlcml0ZWQgZnJvbSBcIkludGVyYWN0aXZlIGxheWVyXCIgYWJzdHJhY3QgY2xhc3NcbiAgXHRcdGludGVyYWN0aXZlOiB0cnVlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGJ1YmJsaW5nTW91c2VFdmVudHM6IEJvb2xlYW4gPSB0cnVlXG4gIFx0XHQvLyBXaGVuIGB0cnVlYCwgYSBtb3VzZSBldmVudCBvbiB0aGlzIHBhdGggd2lsbCB0cmlnZ2VyIHRoZSBzYW1lIGV2ZW50IG9uIHRoZSBtYXBcbiAgXHRcdC8vICh1bmxlc3MgW2BMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbmBdKCNkb21ldmVudC1zdG9wcHJvcGFnYXRpb24pIGlzIHVzZWQpLlxuICBcdFx0YnViYmxpbmdNb3VzZUV2ZW50czogdHJ1ZVxuICBcdH0sXG5cbiAgXHRiZWZvcmVBZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdC8vIFJlbmRlcmVyIGlzIHNldCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBjYWxsIHJlbmRlcmVyLmdldEV2ZW50c1xuICBcdFx0Ly8gYmVmb3JlIHRoaXMuZ2V0RXZlbnRzLlxuICBcdFx0dGhpcy5fcmVuZGVyZXIgPSBtYXAuZ2V0UmVuZGVyZXIodGhpcyk7XG4gIFx0fSxcblxuICBcdG9uQWRkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZW5kZXJlci5faW5pdFBhdGgodGhpcyk7XG4gIFx0XHR0aGlzLl9yZXNldCgpO1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX2FkZFBhdGgodGhpcyk7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZW5kZXJlci5fcmVtb3ZlUGF0aCh0aGlzKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCByZWRyYXcoKTogdGhpc1xuICBcdC8vIFJlZHJhd3MgdGhlIGxheWVyLiBTb21ldGltZXMgdXNlZnVsIGFmdGVyIHlvdSBjaGFuZ2VkIHRoZSBjb29yZGluYXRlcyB0aGF0IHRoZSBwYXRoIHVzZXMuXG4gIFx0cmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQYXRoKHRoaXMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0U3R5bGUoc3R5bGU6IFBhdGggb3B0aW9ucyk6IHRoaXNcbiAgXHQvLyBDaGFuZ2VzIHRoZSBhcHBlYXJhbmNlIG9mIGEgUGF0aCBiYXNlZCBvbiB0aGUgb3B0aW9ucyBpbiB0aGUgYFBhdGggb3B0aW9uc2Agb2JqZWN0LlxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgc3R5bGUpO1xuICBcdFx0aWYgKHRoaXMuX3JlbmRlcmVyKSB7XG4gIFx0XHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVTdHlsZSh0aGlzKTtcbiAgXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5zdHJva2UgJiYgc3R5bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0eWxlLCAnd2VpZ2h0JykpIHtcbiAgXHRcdFx0XHR0aGlzLl91cGRhdGVCb3VuZHMoKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0Zyb250KCk6IHRoaXNcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIHRvIHRoZSB0b3Agb2YgYWxsIHBhdGggbGF5ZXJzLlxuICBcdGJyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3JlbmRlcmVyKSB7XG4gIFx0XHRcdHRoaXMuX3JlbmRlcmVyLl9icmluZ1RvRnJvbnQodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjaygpOiB0aGlzXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgYm90dG9tIG9mIGFsbCBwYXRoIGxheWVycy5cbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3JlbmRlcmVyKSB7XG4gIFx0XHRcdHRoaXMuX3JlbmRlcmVyLl9icmluZ1RvQmFjayh0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRnZXRFbGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fcGF0aDtcbiAgXHR9LFxuXG4gIFx0X3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXNcbiAgXHRcdHRoaXMuX3Byb2plY3QoKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdH0sXG5cbiAgXHRfY2xpY2tUb2xlcmFuY2U6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIHVzZWQgd2hlbiBkb2luZyBoaXQgZGV0ZWN0aW9uIGZvciBDYW52YXMgbGF5ZXJzXG4gIFx0XHRyZXR1cm4gKHRoaXMub3B0aW9ucy5zdHJva2UgPyB0aGlzLm9wdGlvbnMud2VpZ2h0IC8gMiA6IDApICtcbiAgXHRcdCAgKHRoaXMuX3JlbmRlcmVyLm9wdGlvbnMudG9sZXJhbmNlIHx8IDApO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENpcmNsZU1hcmtlclxuICAgKiBAYWthIEwuQ2lyY2xlTWFya2VyXG4gICAqIEBpbmhlcml0cyBQYXRoXG4gICAqXG4gICAqIEEgY2lyY2xlIG9mIGEgZml4ZWQgc2l6ZSB3aXRoIHJhZGl1cyBzcGVjaWZpZWQgaW4gcGl4ZWxzLiBFeHRlbmRzIGBQYXRoYC5cbiAgICovXG5cbiAgdmFyIENpcmNsZU1hcmtlciA9IFBhdGguZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBDaXJjbGVNYXJrZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdGZpbGw6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXIgPSAxMFxuICBcdFx0Ly8gUmFkaXVzIG9mIHRoZSBjaXJjbGUgbWFya2VyLCBpbiBwaXhlbHNcbiAgXHRcdHJhZGl1czogMTBcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG4gIFx0XHR0aGlzLl9yYWRpdXMgPSB0aGlzLm9wdGlvbnMucmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldExhdExuZyhsYXRMbmc6IExhdExuZyk6IHRoaXNcbiAgXHQvLyBTZXRzIHRoZSBwb3NpdGlvbiBvZiBhIGNpcmNsZSBtYXJrZXIgdG8gYSBuZXcgbG9jYXRpb24uXG4gIFx0c2V0TGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XG4gIFx0XHR2YXIgb2xkTGF0TG5nID0gdGhpcy5fbGF0bG5nO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcbiAgXHRcdHRoaXMucmVkcmF3KCk7XG5cbiAgXHRcdC8vIEBldmVudCBtb3ZlOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIG1vdmVkIHZpYSBbYHNldExhdExuZ2BdKCNjaXJjbGVtYXJrZXItc2V0bGF0bG5nKS4gT2xkIGFuZCBuZXcgY29vcmRpbmF0ZXMgYXJlIGluY2x1ZGVkIGluIGV2ZW50IGFyZ3VtZW50cyBhcyBgb2xkTGF0TG5nYCwgYGxhdGxuZ2AuXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywge29sZExhdExuZzogb2xkTGF0TG5nLCBsYXRsbmc6IHRoaXMuX2xhdGxuZ30pO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldExhdExuZygpOiBMYXRMbmdcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGdlb2dyYXBoaWNhbCBwb3NpdGlvbiBvZiB0aGUgY2lyY2xlIG1hcmtlclxuICBcdGdldExhdExuZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlIG1hcmtlci4gVW5pdHMgYXJlIGluIHBpeGVscy5cbiAgXHRzZXRSYWRpdXM6IGZ1bmN0aW9uIChyYWRpdXMpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy5yYWRpdXMgPSB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRSYWRpdXMoKTogTnVtYmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICBcdGdldFJhZGl1czogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3JhZGl1cztcbiAgXHR9LFxuXG4gIFx0c2V0U3R5bGUgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICBcdFx0dmFyIHJhZGl1cyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yYWRpdXMgfHwgdGhpcy5fcmFkaXVzO1xuICBcdFx0UGF0aC5wcm90b3R5cGUuc2V0U3R5bGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuc2V0UmFkaXVzKHJhZGl1cyk7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0X3Byb2plY3Q6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3BvaW50ID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO1xuICBcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciByID0gdGhpcy5fcmFkaXVzLFxuICBcdFx0ICAgIHIyID0gdGhpcy5fcmFkaXVzWSB8fCByLFxuICBcdFx0ICAgIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpLFxuICBcdFx0ICAgIHAgPSBbciArIHcsIHIyICsgd107XG4gIFx0XHR0aGlzLl9weEJvdW5kcyA9IG5ldyBCb3VuZHModGhpcy5fcG9pbnQuc3VidHJhY3QocCksIHRoaXMuX3BvaW50LmFkZChwKSk7XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlUGF0aCgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X2VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fcmFkaXVzICYmICF0aGlzLl9yZW5kZXJlci5fYm91bmRzLmludGVyc2VjdHModGhpcy5fcHhCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHRyZXR1cm4gcC5kaXN0YW5jZVRvKHRoaXMuX3BvaW50KSA8PSB0aGlzLl9yYWRpdXMgKyB0aGlzLl9jbGlja1RvbGVyYW5jZSgpO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNpcmNsZU1hcmtlcihsYXRsbmc6IExhdExuZywgb3B0aW9ucz86IENpcmNsZU1hcmtlciBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYSBjaXJjbGUgbWFya2VyIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0LlxuICBmdW5jdGlvbiBjaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBDaXJjbGVcbiAgICogQGFrYSBMLkNpcmNsZVxuICAgKiBAaW5oZXJpdHMgQ2lyY2xlTWFya2VyXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgY2lyY2xlIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBDaXJjbGVNYXJrZXJgLlxuICAgKlxuICAgKiBJdCdzIGFuIGFwcHJveGltYXRpb24gYW5kIHN0YXJ0cyB0byBkaXZlcmdlIGZyb20gYSByZWFsIGNpcmNsZSBjbG9zZXIgdG8gcG9sZXMgKGR1ZSB0byBwcm9qZWN0aW9uIGRpc3RvcnRpb24pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBMLmNpcmNsZShbNTAuNSwgMzAuNV0sIHtyYWRpdXM6IDIwMH0pLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgQ2lyY2xlID0gQ2lyY2xlTWFya2VyLmV4dGVuZCh7XG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gIFx0XHRcdC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMC43LnggZmFjdG9yeSAobGF0bG5nLCByYWRpdXMsIG9wdGlvbnM/KVxuICBcdFx0XHRvcHRpb25zID0gZXh0ZW5kKHt9LCBsZWdhY3lPcHRpb25zLCB7cmFkaXVzOiBvcHRpb25zfSk7XG4gIFx0XHR9XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcblxuICBcdFx0aWYgKGlzTmFOKHRoaXMub3B0aW9ucy5yYWRpdXMpKSB7IHRocm93IG5ldyBFcnJvcignQ2lyY2xlIHJhZGl1cyBjYW5ub3QgYmUgTmFOJyk7IH1cblxuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgQ2lyY2xlIG9wdGlvbnNcbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXI7IFJhZGl1cyBvZiB0aGUgY2lyY2xlLCBpbiBtZXRlcnMuXG4gIFx0XHR0aGlzLl9tUmFkaXVzID0gdGhpcy5vcHRpb25zLnJhZGl1cztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlLiBVbml0cyBhcmUgaW4gbWV0ZXJzLlxuICBcdHNldFJhZGl1czogZnVuY3Rpb24gKHJhZGl1cykge1xuICBcdFx0dGhpcy5fbVJhZGl1cyA9IHJhZGl1cztcbiAgXHRcdHJldHVybiB0aGlzLnJlZHJhdygpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFJhZGl1cygpOiBOdW1iZXJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHJhZGl1cyBvZiBhIGNpcmNsZS4gVW5pdHMgYXJlIGluIG1ldGVycy5cbiAgXHRnZXRSYWRpdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tUmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcbiAgXHQvLyBSZXR1cm5zIHRoZSBgTGF0TG5nQm91bmRzYCBvZiB0aGUgcGF0aC5cbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBoYWxmID0gW3RoaXMuX3JhZGl1cywgdGhpcy5fcmFkaXVzWSB8fCB0aGlzLl9yYWRpdXNdO1xuXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZ0JvdW5kcyhcbiAgXHRcdFx0dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdChoYWxmKSksXG4gIFx0XHRcdHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQuYWRkKGhhbGYpKSk7XG4gIFx0fSxcblxuICBcdHNldFN0eWxlOiBQYXRoLnByb3RvdHlwZS5zZXRTdHlsZSxcblxuICBcdF9wcm9qZWN0OiBmdW5jdGlvbiAoKSB7XG5cbiAgXHRcdHZhciBsbmcgPSB0aGlzLl9sYXRsbmcubG5nLFxuICBcdFx0ICAgIGxhdCA9IHRoaXMuX2xhdGxuZy5sYXQsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNycyA9IG1hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKGNycy5kaXN0YW5jZSA9PT0gRWFydGguZGlzdGFuY2UpIHtcbiAgXHRcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxuICBcdFx0XHQgICAgbGF0UiA9ICh0aGlzLl9tUmFkaXVzIC8gRWFydGguUikgLyBkLFxuICBcdFx0XHQgICAgdG9wID0gbWFwLnByb2plY3QoW2xhdCArIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgYm90dG9tID0gbWFwLnByb2plY3QoW2xhdCAtIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgcCA9IHRvcC5hZGQoYm90dG9tKS5kaXZpZGVCeSgyKSxcbiAgXHRcdFx0ICAgIGxhdDIgPSBtYXAudW5wcm9qZWN0KHApLmxhdCxcbiAgXHRcdFx0ICAgIGxuZ1IgPSBNYXRoLmFjb3MoKE1hdGguY29zKGxhdFIgKiBkKSAtIE1hdGguc2luKGxhdCAqIGQpICogTWF0aC5zaW4obGF0MiAqIGQpKSAvXG4gIFx0XHRcdCAgICAgICAgICAgIChNYXRoLmNvcyhsYXQgKiBkKSAqIE1hdGguY29zKGxhdDIgKiBkKSkpIC8gZDtcblxuICBcdFx0XHRpZiAoaXNOYU4obG5nUikgfHwgbG5nUiA9PT0gMCkge1xuICBcdFx0XHRcdGxuZ1IgPSBsYXRSIC8gTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIGxhdCk7IC8vIEZhbGxiYWNrIGZvciBlZGdlIGNhc2UsICMyNDI1XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9wb2ludCA9IHAuc3VidHJhY3QobWFwLmdldFBpeGVsT3JpZ2luKCkpO1xuICBcdFx0XHR0aGlzLl9yYWRpdXMgPSBpc05hTihsbmdSKSA/IDAgOiBwLnggLSBtYXAucHJvamVjdChbbGF0MiwgbG5nIC0gbG5nUl0pLng7XG4gIFx0XHRcdHRoaXMuX3JhZGl1c1kgPSBwLnkgLSB0b3AueTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dmFyIGxhdGxuZzIgPSBjcnMudW5wcm9qZWN0KGNycy5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsIDBdKSk7XG5cbiAgXHRcdFx0dGhpcy5fcG9pbnQgPSBtYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyk7XG4gIFx0XHRcdHRoaXMuX3JhZGl1cyA9IHRoaXMuX3BvaW50LnggLSBtYXAubGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzIpLng7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBDaXJjbGUgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgY2lyY2xlIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbnMgb2JqZWN0XG4gIC8vIHdoaWNoIGNvbnRhaW5zIHRoZSBjaXJjbGUgcmFkaXVzLlxuICAvLyBAYWx0ZXJuYXRpdmVcbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIHJhZGl1czogTnVtYmVyLCBvcHRpb25zPzogQ2lyY2xlIG9wdGlvbnMpXG4gIC8vIE9ic29sZXRlIHdheSBvZiBpbnN0YW50aWF0aW5nIGEgY2lyY2xlLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDAuNy54IGNvZGUuXG4gIC8vIERvIG5vdCB1c2UgaW4gbmV3IGFwcGxpY2F0aW9ucyBvciBwbHVnaW5zLlxuICBmdW5jdGlvbiBjaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBQb2x5bGluZVxuICAgKiBAYWthIEwuUG9seWxpbmVcbiAgICogQGluaGVyaXRzIFBhdGhcbiAgICpcbiAgICogQSBjbGFzcyBmb3IgZHJhd2luZyBwb2x5bGluZSBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgUGF0aGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIExhdExuZyBwb2ludHNcbiAgICogdmFyIGxhdGxuZ3MgPSBbXG4gICAqIFx0WzQ1LjUxLCAtMTIyLjY4XSxcbiAgICogXHRbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdFszNC4wNCwgLTExOC4yXVxuICAgKiBdO1xuICAgKlxuICAgKiB2YXIgcG9seWxpbmUgPSBMLnBvbHlsaW5lKGxhdGxuZ3MsIHtjb2xvcjogJ3JlZCd9KS5hZGRUbyhtYXApO1xuICAgKlxuICAgKiAvLyB6b29tIHRoZSBtYXAgdG8gdGhlIHBvbHlsaW5lXG4gICAqIG1hcC5maXRCb3VuZHMocG9seWxpbmUuZ2V0Qm91bmRzKCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHBhc3MgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSB0byByZXByZXNlbnQgYSBgTXVsdGlQb2x5bGluZWAgc2hhcGU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIGFycmF5cyBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiBcdFtbNDUuNTEsIC0xMjIuNjhdLFxuICAgKiBcdCBbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdCBbMzQuMDQsIC0xMTguMl1dLFxuICAgKiBcdFtbNDAuNzgsIC03My45MV0sXG4gICAqIFx0IFs0MS44MywgLTg3LjYyXSxcbiAgICogXHQgWzMyLjc2LCAtOTYuNzJdXVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG5cblxuICB2YXIgUG9seWxpbmUgPSBQYXRoLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUG9seWxpbmUgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc21vb3RoRmFjdG9yOiBOdW1iZXIgPSAxLjBcbiAgXHRcdC8vIEhvdyBtdWNoIHRvIHNpbXBsaWZ5IHRoZSBwb2x5bGluZSBvbiBlYWNoIHpvb20gbGV2ZWwuIE1vcmUgbWVhbnNcbiAgXHRcdC8vIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgc21vb3RoZXIgbG9vaywgYW5kIGxlc3MgbWVhbnMgbW9yZSBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbi5cbiAgXHRcdHNtb290aEZhY3RvcjogMS4wLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vQ2xpcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBEaXNhYmxlIHBvbHlsaW5lIGNsaXBwaW5nLlxuICBcdFx0bm9DbGlwOiBmYWxzZVxuICBcdH0sXG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5ncywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX3NldExhdExuZ3MobGF0bG5ncyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5ncygpOiBMYXRMbmdbXVxuICBcdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHBvaW50cyBpbiB0aGUgcGF0aCwgb3IgbmVzdGVkIGFycmF5cyBvZiBwb2ludHMgaW4gY2FzZSBvZiBtdWx0aS1wb2x5bGluZS5cbiAgXHRnZXRMYXRMbmdzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF0bG5ncztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmdzKGxhdGxuZ3M6IExhdExuZ1tdKTogdGhpc1xuICBcdC8vIFJlcGxhY2VzIGFsbCB0aGUgcG9pbnRzIGluIHRoZSBwb2x5bGluZSB3aXRoIHRoZSBnaXZlbiBhcnJheSBvZiBnZW9ncmFwaGljYWwgcG9pbnRzLlxuICBcdHNldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR0aGlzLl9zZXRMYXRMbmdzKGxhdGxuZ3MpO1xuICBcdFx0cmV0dXJuIHRoaXMucmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNFbXB0eSgpOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIFBvbHlsaW5lIGhhcyBubyBMYXRMbmdzLlxuICBcdGlzRW1wdHk6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiAhdGhpcy5fbGF0bG5ncy5sZW5ndGg7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VzdExheWVyUG9pbnQocDogUG9pbnQpOiBQb2ludFxuICBcdC8vIFJldHVybnMgdGhlIHBvaW50IGNsb3Nlc3QgdG8gYHBgIG9uIHRoZSBQb2x5bGluZS5cbiAgXHRjbG9zZXN0TGF5ZXJQb2ludDogZnVuY3Rpb24gKHApIHtcbiAgXHRcdHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5LFxuICBcdFx0ICAgIG1pblBvaW50ID0gbnVsbCxcbiAgXHRcdCAgICBjbG9zZXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICBcdFx0ICAgIHAxLCBwMjtcblxuICBcdFx0Zm9yICh2YXIgaiA9IDAsIGpMZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGogPCBqTGVuOyBqKyspIHtcbiAgXHRcdFx0dmFyIHBvaW50cyA9IHRoaXMuX3BhcnRzW2pdO1xuXG4gIFx0XHRcdGZvciAodmFyIGkgPSAxLCBsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0XHRwMSA9IHBvaW50c1tpIC0gMV07XG4gIFx0XHRcdFx0cDIgPSBwb2ludHNbaV07XG5cbiAgXHRcdFx0XHR2YXIgc3FEaXN0ID0gY2xvc2VzdChwLCBwMSwgcDIsIHRydWUpO1xuXG4gIFx0XHRcdFx0aWYgKHNxRGlzdCA8IG1pbkRpc3RhbmNlKSB7XG4gIFx0XHRcdFx0XHRtaW5EaXN0YW5jZSA9IHNxRGlzdDtcbiAgXHRcdFx0XHRcdG1pblBvaW50ID0gY2xvc2VzdChwLCBwMSwgcDIpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0aWYgKG1pblBvaW50KSB7XG4gIFx0XHRcdG1pblBvaW50LmRpc3RhbmNlID0gTWF0aC5zcXJ0KG1pbkRpc3RhbmNlKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiBtaW5Qb2ludDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIChbY2VudHJvaWRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyb2lkKSkgb2YgdGhlIHBvbHlsaW5lLlxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gdGhyb3dzIGVycm9yIHdoZW4gbm90IHlldCBhZGRlZCB0byBtYXAgYXMgdGhpcyBjZW50ZXIgY2FsY3VsYXRpb24gcmVxdWlyZXMgcHJvamVjdGVkIGNvb3JkaW5hdGVzXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ011c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCknKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiBwb2x5bGluZUNlbnRlcih0aGlzLl9kZWZhdWx0U2hhcGUoKSwgdGhpcy5fbWFwLm9wdGlvbnMuY3JzKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXG4gIFx0Ly8gUmV0dXJucyB0aGUgYExhdExuZ0JvdW5kc2Agb2YgdGhlIHBhdGguXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fYm91bmRzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGFkZExhdExuZyhsYXRsbmc6IExhdExuZywgbGF0bG5ncz86IExhdExuZ1tdKTogdGhpc1xuICBcdC8vIEFkZHMgYSBnaXZlbiBwb2ludCB0byB0aGUgcG9seWxpbmUuIEJ5IGRlZmF1bHQsIGFkZHMgdG8gdGhlIGZpcnN0IHJpbmcgb2ZcbiAgXHQvLyB0aGUgcG9seWxpbmUgaW4gY2FzZSBvZiBhIG11bHRpLXBvbHlsaW5lLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZ1xuICBcdC8vIGEgc3BlY2lmaWMgcmluZyBhcyBhIExhdExuZyBhcnJheSAodGhhdCB5b3UgY2FuIGVhcmxpZXIgYWNjZXNzIHdpdGggW2BnZXRMYXRMbmdzYF0oI3BvbHlsaW5lLWdldGxhdGxuZ3MpKS5cbiAgXHRhZGRMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcsIGxhdGxuZ3MpIHtcbiAgXHRcdGxhdGxuZ3MgPSBsYXRsbmdzIHx8IHRoaXMuX2RlZmF1bHRTaGFwZSgpO1xuICBcdFx0bGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcbiAgXHRcdGxhdGxuZ3MucHVzaChsYXRsbmcpO1xuICBcdFx0dGhpcy5fYm91bmRzLmV4dGVuZChsYXRsbmcpO1xuICBcdFx0cmV0dXJuIHRoaXMucmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdF9zZXRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0dGhpcy5fYm91bmRzID0gbmV3IExhdExuZ0JvdW5kcygpO1xuICBcdFx0dGhpcy5fbGF0bG5ncyA9IHRoaXMuX2NvbnZlcnRMYXRMbmdzKGxhdGxuZ3MpO1xuICBcdH0sXG5cbiAgXHRfZGVmYXVsdFNoYXBlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gaXNGbGF0KHRoaXMuX2xhdGxuZ3MpID8gdGhpcy5fbGF0bG5ncyA6IHRoaXMuX2xhdGxuZ3NbMF07XG4gIFx0fSxcblxuICBcdC8vIHJlY3Vyc2l2ZWx5IGNvbnZlcnQgbGF0bG5ncyBpbnB1dCBpbnRvIGFjdHVhbCBMYXRMbmcgaW5zdGFuY2VzOyBjYWxjdWxhdGUgYm91bmRzIGFsb25nIHRoZSB3YXlcbiAgXHRfY29udmVydExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR2YXIgcmVzdWx0ID0gW10sXG4gIFx0XHQgICAgZmxhdCA9IGlzRmxhdChsYXRsbmdzKTtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxhdGxuZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0aWYgKGZsYXQpIHtcbiAgXHRcdFx0XHRyZXN1bHRbaV0gPSB0b0xhdExuZyhsYXRsbmdzW2ldKTtcbiAgXHRcdFx0XHR0aGlzLl9ib3VuZHMuZXh0ZW5kKHJlc3VsdFtpXSk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0cmVzdWx0W2ldID0gdGhpcy5fY29udmVydExhdExuZ3MobGF0bG5nc1tpXSk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIHJlc3VsdDtcbiAgXHR9LFxuXG4gIFx0X3Byb2plY3Q6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBweEJvdW5kcyA9IG5ldyBCb3VuZHMoKTtcbiAgXHRcdHRoaXMuX3JpbmdzID0gW107XG4gIFx0XHR0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLCB0aGlzLl9yaW5ncywgcHhCb3VuZHMpO1xuXG4gIFx0XHRpZiAodGhpcy5fYm91bmRzLmlzVmFsaWQoKSAmJiBweEJvdW5kcy5pc1ZhbGlkKCkpIHtcbiAgXHRcdFx0dGhpcy5fcmF3UHhCb3VuZHMgPSBweEJvdW5kcztcbiAgXHRcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciB3ID0gdGhpcy5fY2xpY2tUb2xlcmFuY2UoKSxcbiAgXHRcdCAgICBwID0gbmV3IFBvaW50KHcsIHcpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX3Jhd1B4Qm91bmRzKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fcHhCb3VuZHMgPSBuZXcgQm91bmRzKFtcbiAgXHRcdFx0dGhpcy5fcmF3UHhCb3VuZHMubWluLnN1YnRyYWN0KHApLFxuICBcdFx0XHR0aGlzLl9yYXdQeEJvdW5kcy5tYXguYWRkKHApXG4gIFx0XHRdKTtcbiAgXHR9LFxuXG4gIFx0Ly8gcmVjdXJzaXZlbHkgdHVybnMgbGF0bG5ncyBpbnRvIGEgc2V0IG9mIHJpbmdzIHdpdGggcHJvamVjdGVkIGNvb3JkaW5hdGVzXG4gIFx0X3Byb2plY3RMYXRsbmdzOiBmdW5jdGlvbiAobGF0bG5ncywgcmVzdWx0LCBwcm9qZWN0ZWRCb3VuZHMpIHtcbiAgXHRcdHZhciBmbGF0ID0gbGF0bG5nc1swXSBpbnN0YW5jZW9mIExhdExuZyxcbiAgXHRcdCAgICBsZW4gPSBsYXRsbmdzLmxlbmd0aCxcbiAgXHRcdCAgICBpLCByaW5nO1xuXG4gIFx0XHRpZiAoZmxhdCkge1xuICBcdFx0XHRyaW5nID0gW107XG4gIFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRcdHJpbmdbaV0gPSB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KGxhdGxuZ3NbaV0pO1xuICBcdFx0XHRcdHByb2plY3RlZEJvdW5kcy5leHRlbmQocmluZ1tpXSk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0cmVzdWx0LnB1c2gocmluZyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0XHR0aGlzLl9wcm9qZWN0TGF0bG5ncyhsYXRsbmdzW2ldLCByZXN1bHQsIHByb2plY3RlZEJvdW5kcyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gY2xpcCBwb2x5bGluZSBieSByZW5kZXJlciBib3VuZHMgc28gdGhhdCB3ZSBoYXZlIGxlc3MgdG8gcmVuZGVyIGZvciBwZXJmb3JtYW5jZVxuICBcdF9jbGlwUG9pbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgYm91bmRzID0gdGhpcy5fcmVuZGVyZXIuX2JvdW5kcztcblxuICBcdFx0dGhpcy5fcGFydHMgPSBbXTtcbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHMoYm91bmRzKSkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubm9DbGlwKSB7XG4gIFx0XHRcdHRoaXMuX3BhcnRzID0gdGhpcy5fcmluZ3M7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHBhcnRzID0gdGhpcy5fcGFydHMsXG4gIFx0XHQgICAgaSwgaiwgaywgbGVuLCBsZW4yLCBzZWdtZW50LCBwb2ludHM7XG5cbiAgXHRcdGZvciAoaSA9IDAsIGsgPSAwLCBsZW4gPSB0aGlzLl9yaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwb2ludHMgPSB0aGlzLl9yaW5nc1tpXTtcblxuICBcdFx0XHRmb3IgKGogPSAwLCBsZW4yID0gcG9pbnRzLmxlbmd0aDsgaiA8IGxlbjIgLSAxOyBqKyspIHtcbiAgXHRcdFx0XHRzZWdtZW50ID0gY2xpcFNlZ21lbnQocG9pbnRzW2pdLCBwb2ludHNbaiArIDFdLCBib3VuZHMsIGosIHRydWUpO1xuXG4gIFx0XHRcdFx0aWYgKCFzZWdtZW50KSB7IGNvbnRpbnVlOyB9XG5cbiAgXHRcdFx0XHRwYXJ0c1trXSA9IHBhcnRzW2tdIHx8IFtdO1xuICBcdFx0XHRcdHBhcnRzW2tdLnB1c2goc2VnbWVudFswXSk7XG5cbiAgXHRcdFx0XHQvLyBpZiBzZWdtZW50IGdvZXMgb3V0IG9mIHNjcmVlbiwgb3IgaXQncyB0aGUgbGFzdCBvbmUsIGl0J3MgdGhlIGVuZCBvZiB0aGUgbGluZSBwYXJ0XG4gIFx0XHRcdFx0aWYgKChzZWdtZW50WzFdICE9PSBwb2ludHNbaiArIDFdKSB8fCAoaiA9PT0gbGVuMiAtIDIpKSB7XG4gIFx0XHRcdFx0XHRwYXJ0c1trXS5wdXNoKHNlZ21lbnRbMV0pO1xuICBcdFx0XHRcdFx0aysrO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBzaW1wbGlmeSBlYWNoIGNsaXBwZWQgcGFydCBvZiB0aGUgcG9seWxpbmUgZm9yIHBlcmZvcm1hbmNlXG4gIFx0X3NpbXBsaWZ5UG9pbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcGFydHMgPSB0aGlzLl9wYXJ0cyxcbiAgXHRcdCAgICB0b2xlcmFuY2UgPSB0aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yO1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gcGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0cGFydHNbaV0gPSBzaW1wbGlmeShwYXJ0c1tpXSwgdG9sZXJhbmNlKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2NsaXBQb2ludHMoKTtcbiAgXHRcdHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCk7XG4gIFx0XHR0aGlzLl91cGRhdGVQYXRoKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKTtcbiAgXHR9LFxuXG4gIFx0Ly8gTmVlZGVkIGJ5IHRoZSBgQ2FudmFzYCByZW5kZXJlciBmb3IgaW50ZXJhY3Rpdml0eVxuICBcdF9jb250YWluc1BvaW50OiBmdW5jdGlvbiAocCwgY2xvc2VkKSB7XG4gIFx0XHR2YXIgaSwgaiwgaywgbGVuLCBsZW4yLCBwYXJ0LFxuICBcdFx0ICAgIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX3B4Qm91bmRzIHx8ICF0aGlzLl9weEJvdW5kcy5jb250YWlucyhwKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBcdFx0Ly8gaGl0IGRldGVjdGlvbiBmb3IgcG9seWxpbmVzXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0ID0gdGhpcy5fcGFydHNbaV07XG5cbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBhcnQubGVuZ3RoLCBrID0gbGVuMiAtIDE7IGogPCBsZW4yOyBrID0gaisrKSB7XG4gIFx0XHRcdFx0aWYgKCFjbG9zZWQgJiYgKGogPT09IDApKSB7IGNvbnRpbnVlOyB9XG5cbiAgXHRcdFx0XHRpZiAocG9pbnRUb1NlZ21lbnREaXN0YW5jZShwLCBwYXJ0W2tdLCBwYXJ0W2pdKSA8PSB3KSB7XG4gIFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdHJldHVybiBmYWxzZTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBmYWN0b3J5IEwucG9seWxpbmUobGF0bG5nczogTGF0TG5nW10sIG9wdGlvbnM/OiBQb2x5bGluZSBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYSBwb2x5bGluZSBvYmplY3QgZ2l2ZW4gYW4gYXJyYXkgb2YgZ2VvZ3JhcGhpY2FsIHBvaW50cyBhbmRcbiAgLy8gb3B0aW9uYWxseSBhbiBvcHRpb25zIG9iamVjdC4gWW91IGNhbiBjcmVhdGUgYSBgUG9seWxpbmVgIG9iamVjdCB3aXRoXG4gIC8vIG11bHRpcGxlIHNlcGFyYXRlIGxpbmVzIChgTXVsdGlQb2x5bGluZWApIGJ5IHBhc3NpbmcgYW4gYXJyYXkgb2YgYXJyYXlzXG4gIC8vIG9mIGdlb2dyYXBoaWMgcG9pbnRzLlxuICBmdW5jdGlvbiBwb2x5bGluZShsYXRsbmdzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBQb2x5bGluZShsYXRsbmdzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFJldHJvY29tcGF0LiBBbGxvdyBwbHVnaW5zIHRvIHN1cHBvcnQgTGVhZmxldCB2ZXJzaW9ucyBiZWZvcmUgYW5kIGFmdGVyIDEuMS5cbiAgUG9seWxpbmUuX2ZsYXQgPSBfZmxhdDtcblxuICAvKlxuICAgKiBAY2xhc3MgUG9seWdvblxuICAgKiBAYWthIEwuUG9seWdvblxuICAgKiBAaW5oZXJpdHMgUG9seWxpbmVcbiAgICpcbiAgICogQSBjbGFzcyBmb3IgZHJhd2luZyBwb2x5Z29uIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBQb2x5bGluZWAuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBwb2ludHMgeW91IHBhc3Mgd2hlbiBjcmVhdGluZyBhIHBvbHlnb24gc2hvdWxkbid0IGhhdmUgYW4gYWRkaXRpb25hbCBsYXN0IHBvaW50IGVxdWFsIHRvIHRoZSBmaXJzdCBvbmUg4oCUIGl0J3MgYmV0dGVyIHRvIGZpbHRlciBvdXQgc3VjaCBwb2ludHMuXG4gICAqXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5Z29uIGZyb20gYW4gYXJyYXkgb2YgTGF0TG5nIHBvaW50c1xuICAgKiB2YXIgbGF0bG5ncyA9IFtbMzcsIC0xMDkuMDVdLFs0MSwgLTEwOS4wM10sWzQxLCAtMTAyLjA1XSxbMzcsIC0xMDIuMDRdXTtcbiAgICpcbiAgICogdmFyIHBvbHlnb24gPSBMLnBvbHlnb24obGF0bG5ncywge2NvbG9yOiAncmVkJ30pLmFkZFRvKG1hcCk7XG4gICAqXG4gICAqIC8vIHpvb20gdGhlIG1hcCB0byB0aGUgcG9seWdvblxuICAgKiBtYXAuZml0Qm91bmRzKHBvbHlnb24uZ2V0Qm91bmRzKCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHBhc3MgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGxhdGxuZ3MsIHdpdGggdGhlIGZpcnN0IGFycmF5IHJlcHJlc2VudGluZyB0aGUgb3V0ZXIgc2hhcGUgYW5kIHRoZSBvdGhlciBhcnJheXMgcmVwcmVzZW50aW5nIGhvbGVzIGluIHRoZSBvdXRlciBzaGFwZTpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIGxhdGxuZ3MgPSBbXG4gICAqICAgW1szNywgLTEwOS4wNV0sWzQxLCAtMTA5LjAzXSxbNDEsIC0xMDIuMDVdLFszNywgLTEwMi4wNF1dLCAvLyBvdXRlciByaW5nXG4gICAqICAgW1szNy4yOSwgLTEwOC41OF0sWzQwLjcxLCAtMTA4LjU4XSxbNDAuNzEsIC0xMDIuNTBdLFszNy4yOSwgLTEwMi41MF1dIC8vIGhvbGVcbiAgICogXTtcbiAgICogYGBgXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgeW91IGNhbiBwYXNzIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgdG8gcmVwcmVzZW50IGEgTXVsdGlQb2x5Z29uIHNoYXBlLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF0bG5ncyA9IFtcbiAgICogICBbIC8vIGZpcnN0IHBvbHlnb25cbiAgICogICAgIFtbMzcsIC0xMDkuMDVdLFs0MSwgLTEwOS4wM10sWzQxLCAtMTAyLjA1XSxbMzcsIC0xMDIuMDRdXSwgLy8gb3V0ZXIgcmluZ1xuICAgKiAgICAgW1szNy4yOSwgLTEwOC41OF0sWzQwLjcxLCAtMTA4LjU4XSxbNDAuNzEsIC0xMDIuNTBdLFszNy4yOSwgLTEwMi41MF1dIC8vIGhvbGVcbiAgICogICBdLFxuICAgKiAgIFsgLy8gc2Vjb25kIHBvbHlnb25cbiAgICogICAgIFtbNDEsIC0xMTEuMDNdLFs0NSwgLTExMS4wNF0sWzQ1LCAtMTA0LjA1XSxbNDEsIC0xMDQuMDVdXVxuICAgKiAgIF1cbiAgICogXTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBQb2x5Z29uID0gUG9seWxpbmUuZXh0ZW5kKHtcblxuICBcdG9wdGlvbnM6IHtcbiAgXHRcdGZpbGw6IHRydWVcbiAgXHR9LFxuXG4gIFx0aXNFbXB0eTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuICF0aGlzLl9sYXRsbmdzLmxlbmd0aCB8fCAhdGhpcy5fbGF0bG5nc1swXS5sZW5ndGg7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0Q2VudGVyKCk6IExhdExuZ1xuICBcdC8vIFJldHVybnMgdGhlIGNlbnRlciAoW2NlbnRyb2lkXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyb2lkKSkgb2YgdGhlIFBvbHlnb24uXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB0aHJvd3MgZXJyb3Igd2hlbiBub3QgeWV0IGFkZGVkIHRvIG1hcCBhcyB0aGlzIGNlbnRlciBjYWxjdWxhdGlvbiByZXF1aXJlcyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTXVzdCBhZGQgbGF5ZXIgdG8gbWFwIGJlZm9yZSB1c2luZyBnZXRDZW50ZXIoKScpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHBvbHlnb25DZW50ZXIodGhpcy5fZGVmYXVsdFNoYXBlKCksIHRoaXMuX21hcC5vcHRpb25zLmNycyk7XG4gIFx0fSxcblxuICBcdF9jb252ZXJ0TGF0TG5nczogZnVuY3Rpb24gKGxhdGxuZ3MpIHtcbiAgXHRcdHZhciByZXN1bHQgPSBQb2x5bGluZS5wcm90b3R5cGUuX2NvbnZlcnRMYXRMbmdzLmNhbGwodGhpcywgbGF0bG5ncyksXG4gIFx0XHQgICAgbGVuID0gcmVzdWx0Lmxlbmd0aDtcblxuICBcdFx0Ly8gcmVtb3ZlIGxhc3QgcG9pbnQgaWYgaXQgZXF1YWxzIGZpcnN0IG9uZVxuICBcdFx0aWYgKGxlbiA+PSAyICYmIHJlc3VsdFswXSBpbnN0YW5jZW9mIExhdExuZyAmJiByZXN1bHRbMF0uZXF1YWxzKHJlc3VsdFtsZW4gLSAxXSkpIHtcbiAgXHRcdFx0cmVzdWx0LnBvcCgpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlc3VsdDtcbiAgXHR9LFxuXG4gIFx0X3NldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHRQb2x5bGluZS5wcm90b3R5cGUuX3NldExhdExuZ3MuY2FsbCh0aGlzLCBsYXRsbmdzKTtcbiAgXHRcdGlmIChpc0ZsYXQodGhpcy5fbGF0bG5ncykpIHtcbiAgXHRcdFx0dGhpcy5fbGF0bG5ncyA9IFt0aGlzLl9sYXRsbmdzXTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2RlZmF1bHRTaGFwZTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIGlzRmxhdCh0aGlzLl9sYXRsbmdzWzBdKSA/IHRoaXMuX2xhdGxuZ3NbMF0gOiB0aGlzLl9sYXRsbmdzWzBdWzBdO1xuICBcdH0sXG5cbiAgXHRfY2xpcFBvaW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gcG9seWdvbnMgbmVlZCBhIGRpZmZlcmVudCBjbGlwcGluZyBhbGdvcml0aG0gc28gd2UgcmVkZWZpbmUgdGhhdFxuXG4gIFx0XHR2YXIgYm91bmRzID0gdGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxcbiAgXHRcdCAgICB3ID0gdGhpcy5vcHRpb25zLndlaWdodCxcbiAgXHRcdCAgICBwID0gbmV3IFBvaW50KHcsIHcpO1xuXG4gIFx0XHQvLyBpbmNyZWFzZSBjbGlwIHBhZGRpbmcgYnkgc3Ryb2tlIHdpZHRoIHRvIGF2b2lkIHN0cm9rZSBvbiBjbGlwIGVkZ2VzXG4gIFx0XHRib3VuZHMgPSBuZXcgQm91bmRzKGJvdW5kcy5taW4uc3VidHJhY3QocCksIGJvdW5kcy5tYXguYWRkKHApKTtcblxuICBcdFx0dGhpcy5fcGFydHMgPSBbXTtcbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHMoYm91bmRzKSkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubm9DbGlwKSB7XG4gIFx0XHRcdHRoaXMuX3BhcnRzID0gdGhpcy5fcmluZ3M7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3JpbmdzLmxlbmd0aCwgY2xpcHBlZDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGNsaXBwZWQgPSBjbGlwUG9seWdvbih0aGlzLl9yaW5nc1tpXSwgYm91bmRzLCB0cnVlKTtcbiAgXHRcdFx0aWYgKGNsaXBwZWQubGVuZ3RoKSB7XG4gIFx0XHRcdFx0dGhpcy5fcGFydHMucHVzaChjbGlwcGVkKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywgdHJ1ZSk7XG4gIFx0fSxcblxuICBcdC8vIE5lZWRlZCBieSB0aGUgYENhbnZhc2AgcmVuZGVyZXIgZm9yIGludGVyYWN0aXZpdHlcbiAgXHRfY29udGFpbnNQb2ludDogZnVuY3Rpb24gKHApIHtcbiAgXHRcdHZhciBpbnNpZGUgPSBmYWxzZSxcbiAgXHRcdCAgICBwYXJ0LCBwMSwgcDIsIGksIGosIGssIGxlbiwgbGVuMjtcblxuICBcdFx0aWYgKCF0aGlzLl9weEJvdW5kcyB8fCAhdGhpcy5fcHhCb3VuZHMuY29udGFpbnMocCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgXHRcdC8vIHJheSBjYXN0aW5nIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGlmIHBvaW50IGlzIGluIHBvbHlnb25cbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IHRoaXMuX3BhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBhcnQgPSB0aGlzLl9wYXJ0c1tpXTtcblxuICBcdFx0XHRmb3IgKGogPSAwLCBsZW4yID0gcGFydC5sZW5ndGgsIGsgPSBsZW4yIC0gMTsgaiA8IGxlbjI7IGsgPSBqKyspIHtcbiAgXHRcdFx0XHRwMSA9IHBhcnRbal07XG4gIFx0XHRcdFx0cDIgPSBwYXJ0W2tdO1xuXG4gIFx0XHRcdFx0aWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgXHRcdFx0XHRcdGluc2lkZSA9ICFpbnNpZGU7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIGFsc28gY2hlY2sgaWYgaXQncyBvbiBwb2x5Z29uIHN0cm9rZVxuICBcdFx0cmV0dXJuIGluc2lkZSB8fCBQb2x5bGluZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLCBwLCB0cnVlKTtcbiAgXHR9XG5cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLnBvbHlnb24obGF0bG5nczogTGF0TG5nW10sIG9wdGlvbnM/OiBQb2x5bGluZSBvcHRpb25zKVxuICBmdW5jdGlvbiBwb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IFBvbHlnb24obGF0bG5ncywgb3B0aW9ucyk7XG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBHZW9KU09OXHJcbiAgICogQGFrYSBMLkdlb0pTT05cclxuICAgKiBAaW5oZXJpdHMgRmVhdHVyZUdyb3VwXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgR2VvSlNPTiBvYmplY3Qgb3IgYW4gYXJyYXkgb2YgR2VvSlNPTiBvYmplY3RzLiBBbGxvd3MgeW91IHRvIHBhcnNlXHJcbiAgICogR2VvSlNPTiBkYXRhIGFuZCBkaXNwbGF5IGl0IG9uIHRoZSBtYXAuIEV4dGVuZHMgYEZlYXR1cmVHcm91cGAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLmdlb0pTT04oZGF0YSwge1xyXG4gICAqIFx0c3R5bGU6IGZ1bmN0aW9uIChmZWF0dXJlKSB7XHJcbiAgICogXHRcdHJldHVybiB7Y29sb3I6IGZlYXR1cmUucHJvcGVydGllcy5jb2xvcn07XHJcbiAgICogXHR9XHJcbiAgICogfSkuYmluZFBvcHVwKGZ1bmN0aW9uIChsYXllcikge1xyXG4gICAqIFx0cmV0dXJuIGxheWVyLmZlYXR1cmUucHJvcGVydGllcy5kZXNjcmlwdGlvbjtcclxuICAgKiB9KS5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgR2VvSlNPTiA9IEZlYXR1cmVHcm91cC5leHRlbmQoe1xyXG5cclxuICBcdC8qIEBzZWN0aW9uXHJcbiAgXHQgKiBAYWthIEdlb0pTT04gb3B0aW9uc1xyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gcG9pbnRUb0xheWVyOiBGdW5jdGlvbiA9ICpcclxuICBcdCAqIEEgYEZ1bmN0aW9uYCBkZWZpbmluZyBob3cgR2VvSlNPTiBwb2ludHMgc3Bhd24gTGVhZmxldCBsYXllcnMuIEl0IGlzIGludGVybmFsbHlcclxuICBcdCAqIGNhbGxlZCB3aGVuIGRhdGEgaXMgYWRkZWQsIHBhc3NpbmcgdGhlIEdlb0pTT04gcG9pbnQgZmVhdHVyZSBhbmQgaXRzIGBMYXRMbmdgLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gc3Bhd24gYSBkZWZhdWx0IGBNYXJrZXJgOlxyXG4gIFx0ICogYGBganNcclxuICBcdCAqIGZ1bmN0aW9uKGdlb0pzb25Qb2ludCwgbGF0bG5nKSB7XHJcbiAgXHQgKiBcdHJldHVybiBMLm1hcmtlcihsYXRsbmcpO1xyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBzdHlsZTogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgZGVmaW5pbmcgdGhlIGBQYXRoIG9wdGlvbnNgIGZvciBzdHlsaW5nIEdlb0pTT04gbGluZXMgYW5kIHBvbHlnb25zLFxyXG4gIFx0ICogY2FsbGVkIGludGVybmFsbHkgd2hlbiBkYXRhIGlzIGFkZGVkLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdG8gbm90IG92ZXJyaWRlIGFueSBkZWZhdWx0czpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbiAoZ2VvSnNvbkZlYXR1cmUpIHtcclxuICBcdCAqIFx0cmV0dXJuIHt9XHJcbiAgXHQgKiB9XHJcbiAgXHQgKiBgYGBcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIG9uRWFjaEZlYXR1cmU6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBjcmVhdGVkIGBGZWF0dXJlYCwgYWZ0ZXIgaXQgaGFzXHJcbiAgXHQgKiBiZWVuIGNyZWF0ZWQgYW5kIHN0eWxlZC4gVXNlZnVsIGZvciBhdHRhY2hpbmcgZXZlbnRzIGFuZCBwb3B1cHMgdG8gZmVhdHVyZXMuXHJcbiAgXHQgKiBUaGUgZGVmYXVsdCBpcyB0byBkbyBub3RoaW5nIHdpdGggdGhlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJzOlxyXG4gIFx0ICogYGBganNcclxuICBcdCAqIGZ1bmN0aW9uIChmZWF0dXJlLCBsYXllcikge31cclxuICBcdCAqIGBgYFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gZmlsdGVyOiBGdW5jdGlvbiA9ICpcclxuICBcdCAqIEEgYEZ1bmN0aW9uYCB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIGEgZmVhdHVyZSBvciBub3QuXHJcbiAgXHQgKiBUaGUgZGVmYXVsdCBpcyB0byBpbmNsdWRlIGFsbCBmZWF0dXJlczpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbiAoZ2VvSnNvbkZlYXR1cmUpIHtcclxuICBcdCAqIFx0cmV0dXJuIHRydWU7XHJcbiAgXHQgKiB9XHJcbiAgXHQgKiBgYGBcclxuICBcdCAqIE5vdGU6IGR5bmFtaWNhbGx5IGNoYW5naW5nIHRoZSBgZmlsdGVyYCBvcHRpb24gd2lsbCBoYXZlIGVmZmVjdCBvbmx5IG9uIG5ld2x5XHJcbiAgXHQgKiBhZGRlZCBkYXRhLiBJdCB3aWxsIF9ub3RfIHJlLWV2YWx1YXRlIGFscmVhZHkgaW5jbHVkZWQgZmVhdHVyZXMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBjb29yZHNUb0xhdExuZzogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNvbnZlcnRpbmcgR2VvSlNPTiBjb29yZGluYXRlcyB0byBgTGF0TG5nYHMuXHJcbiAgXHQgKiBUaGUgZGVmYXVsdCBpcyB0aGUgYGNvb3Jkc1RvTGF0TG5nYCBzdGF0aWMgbWV0aG9kLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gbWFya2Vyc0luaGVyaXRPcHRpb25zOiBCb29sZWFuID0gZmFsc2VcclxuICBcdCAqIFdoZXRoZXIgZGVmYXVsdCBNYXJrZXJzIGZvciBcIlBvaW50XCIgdHlwZSBGZWF0dXJlcyBpbmhlcml0IGZyb20gZ3JvdXAgb3B0aW9ucy5cclxuICBcdCAqL1xyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChnZW9qc29uLCBvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSB7fTtcclxuXHJcbiAgXHRcdGlmIChnZW9qc29uKSB7XHJcbiAgXHRcdFx0dGhpcy5hZGREYXRhKGdlb2pzb24pO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkRGF0YSggPEdlb0pTT04+IGRhdGEgKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhIEdlb0pTT04gb2JqZWN0IHRvIHRoZSBsYXllci5cclxuICBcdGFkZERhdGE6IGZ1bmN0aW9uIChnZW9qc29uKSB7XHJcbiAgXHRcdHZhciBmZWF0dXJlcyA9IGlzQXJyYXkoZ2VvanNvbikgPyBnZW9qc29uIDogZ2VvanNvbi5mZWF0dXJlcyxcclxuICBcdFx0ICAgIGksIGxlbiwgZmVhdHVyZTtcclxuXHJcbiAgXHRcdGlmIChmZWF0dXJlcykge1xyXG4gIFx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGZlYXR1cmVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0XHQvLyBvbmx5IGFkZCB0aGlzIGlmIGdlb21ldHJ5IG9yIGdlb21ldHJpZXMgYXJlIHNldCBhbmQgbm90IG51bGxcclxuICBcdFx0XHRcdGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcclxuICBcdFx0XHRcdGlmIChmZWF0dXJlLmdlb21ldHJpZXMgfHwgZmVhdHVyZS5nZW9tZXRyeSB8fCBmZWF0dXJlLmZlYXR1cmVzIHx8IGZlYXR1cmUuY29vcmRpbmF0ZXMpIHtcclxuICBcdFx0XHRcdFx0dGhpcy5hZGREYXRhKGZlYXR1cmUpO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5maWx0ZXIgJiYgIW9wdGlvbnMuZmlsdGVyKGdlb2pzb24pKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHR2YXIgbGF5ZXIgPSBnZW9tZXRyeVRvTGF5ZXIoZ2VvanNvbiwgb3B0aW9ucyk7XHJcbiAgXHRcdGlmICghbGF5ZXIpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG4gIFx0XHRsYXllci5mZWF0dXJlID0gYXNGZWF0dXJlKGdlb2pzb24pO1xyXG5cclxuICBcdFx0bGF5ZXIuZGVmYXVsdE9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xyXG4gIFx0XHR0aGlzLnJlc2V0U3R5bGUobGF5ZXIpO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMub25FYWNoRmVhdHVyZSkge1xyXG4gIFx0XHRcdG9wdGlvbnMub25FYWNoRmVhdHVyZShnZW9qc29uLCBsYXllcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLmFkZExheWVyKGxheWVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByZXNldFN0eWxlKCA8UGF0aD4gbGF5ZXI/ICk6IHRoaXNcclxuICBcdC8vIFJlc2V0cyB0aGUgZ2l2ZW4gdmVjdG9yIGxheWVyJ3Mgc3R5bGUgdG8gdGhlIG9yaWdpbmFsIEdlb0pTT04gc3R5bGUsIHVzZWZ1bCBmb3IgcmVzZXR0aW5nIHN0eWxlIGFmdGVyIGhvdmVyIGV2ZW50cy5cclxuICBcdC8vIElmIGBsYXllcmAgaXMgb21pdHRlZCwgdGhlIHN0eWxlIG9mIGFsbCBmZWF0dXJlcyBpbiB0aGUgY3VycmVudCBsYXllciBpcyByZXNldC5cclxuICBcdHJlc2V0U3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzLmVhY2hMYXllcih0aGlzLnJlc2V0U3R5bGUsIHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdC8vIHJlc2V0IGFueSBjdXN0b20gc3R5bGVzXHJcbiAgXHRcdGxheWVyLm9wdGlvbnMgPSBleHRlbmQoe30sIGxheWVyLmRlZmF1bHRPcHRpb25zKTtcclxuICBcdFx0dGhpcy5fc2V0TGF5ZXJTdHlsZShsYXllciwgdGhpcy5vcHRpb25zLnN0eWxlKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0U3R5bGUoIDxGdW5jdGlvbj4gc3R5bGUgKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyBzdHlsZXMgb2YgR2VvSlNPTiB2ZWN0b3IgbGF5ZXJzIHdpdGggdGhlIGdpdmVuIHN0eWxlIGZ1bmN0aW9uLlxyXG4gIFx0c2V0U3R5bGU6IGZ1bmN0aW9uIChzdHlsZSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdFx0dGhpcy5fc2V0TGF5ZXJTdHlsZShsYXllciwgc3R5bGUpO1xyXG4gIFx0XHR9LCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3NldExheWVyU3R5bGU6IGZ1bmN0aW9uIChsYXllciwgc3R5bGUpIHtcclxuICBcdFx0aWYgKGxheWVyLnNldFN0eWxlKSB7XHJcbiAgXHRcdFx0aWYgKHR5cGVvZiBzdHlsZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gIFx0XHRcdFx0c3R5bGUgPSBzdHlsZShsYXllci5mZWF0dXJlKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0bGF5ZXIuc2V0U3R5bGUoc3R5bGUpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBzZWN0aW9uXHJcbiAgLy8gVGhlcmUgYXJlIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgaW5zdGFudGlhdGluZyBMLkdlb0pTT046XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZW9tZXRyeVRvTGF5ZXIoZmVhdHVyZURhdGE6IE9iamVjdCwgb3B0aW9ucz86IEdlb0pTT04gb3B0aW9ucyk6IExheWVyXHJcbiAgLy8gQ3JlYXRlcyBhIGBMYXllcmAgZnJvbSBhIGdpdmVuIEdlb0pTT04gZmVhdHVyZS4gQ2FuIHVzZSBhIGN1c3RvbVxyXG4gIC8vIFtgcG9pbnRUb0xheWVyYF0oI2dlb2pzb24tcG9pbnR0b2xheWVyKSBhbmQvb3IgW2Bjb29yZHNUb0xhdExuZ2BdKCNnZW9qc29uLWNvb3Jkc3RvbGF0bG5nKVxyXG4gIC8vIGZ1bmN0aW9ucyBpZiBwcm92aWRlZCBhcyBvcHRpb25zLlxyXG4gIGZ1bmN0aW9uIGdlb21ldHJ5VG9MYXllcihnZW9qc29uLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0dmFyIGdlb21ldHJ5ID0gZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbixcclxuICBcdCAgICBjb29yZHMgPSBnZW9tZXRyeSA/IGdlb21ldHJ5LmNvb3JkaW5hdGVzIDogbnVsbCxcclxuICBcdCAgICBsYXllcnMgPSBbXSxcclxuICBcdCAgICBwb2ludFRvTGF5ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMucG9pbnRUb0xheWVyLFxyXG4gIFx0ICAgIF9jb29yZHNUb0xhdExuZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb29yZHNUb0xhdExuZyB8fCBjb29yZHNUb0xhdExuZyxcclxuICBcdCAgICBsYXRsbmcsIGxhdGxuZ3MsIGksIGxlbjtcclxuXHJcbiAgXHRpZiAoIWNvb3JkcyAmJiAhZ2VvbWV0cnkpIHtcclxuICBcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHR9XHJcblxyXG4gIFx0c3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XHJcbiAgXHRjYXNlICdQb2ludCc6XHJcbiAgXHRcdGxhdGxuZyA9IF9jb29yZHNUb0xhdExuZyhjb29yZHMpO1xyXG4gIFx0XHRyZXR1cm4gX3BvaW50VG9MYXllcihwb2ludFRvTGF5ZXIsIGdlb2pzb24sIGxhdGxuZywgb3B0aW9ucyk7XHJcblxyXG4gIFx0Y2FzZSAnTXVsdGlQb2ludCc6XHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNvb3Jkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdGxhdGxuZyA9IF9jb29yZHNUb0xhdExuZyhjb29yZHNbaV0pO1xyXG4gIFx0XHRcdGxheWVycy5wdXNoKF9wb2ludFRvTGF5ZXIocG9pbnRUb0xheWVyLCBnZW9qc29uLCBsYXRsbmcsIG9wdGlvbnMpKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gbmV3IEZlYXR1cmVHcm91cChsYXllcnMpO1xyXG5cclxuICBcdGNhc2UgJ0xpbmVTdHJpbmcnOlxyXG4gIFx0Y2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcclxuICBcdFx0bGF0bG5ncyA9IGNvb3Jkc1RvTGF0TG5ncyhjb29yZHMsIGdlb21ldHJ5LnR5cGUgPT09ICdMaW5lU3RyaW5nJyA/IDAgOiAxLCBfY29vcmRzVG9MYXRMbmcpO1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvbHlsaW5lKGxhdGxuZ3MsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ1BvbHlnb24nOlxyXG4gIFx0Y2FzZSAnTXVsdGlQb2x5Z29uJzpcclxuICBcdFx0bGF0bG5ncyA9IGNvb3Jkc1RvTGF0TG5ncyhjb29yZHMsIGdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJyA/IDEgOiAyLCBfY29vcmRzVG9MYXRMbmcpO1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvbHlnb24obGF0bG5ncywgb3B0aW9ucyk7XHJcblxyXG4gIFx0Y2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcclxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdHZhciBnZW9MYXllciA9IGdlb21ldHJ5VG9MYXllcih7XHJcbiAgXHRcdFx0XHRnZW9tZXRyeTogZ2VvbWV0cnkuZ2VvbWV0cmllc1tpXSxcclxuICBcdFx0XHRcdHR5cGU6ICdGZWF0dXJlJyxcclxuICBcdFx0XHRcdHByb3BlcnRpZXM6IGdlb2pzb24ucHJvcGVydGllc1xyXG4gIFx0XHRcdH0sIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0XHRpZiAoZ2VvTGF5ZXIpIHtcclxuICBcdFx0XHRcdGxheWVycy5wdXNoKGdlb0xheWVyKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzKTtcclxuXHJcbiAgXHRjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGdlb21ldHJ5LmZlYXR1cmVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0dmFyIGZlYXR1cmVMYXllciA9IGdlb21ldHJ5VG9MYXllcihnZW9tZXRyeS5mZWF0dXJlc1tpXSwgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHRcdGlmIChmZWF0dXJlTGF5ZXIpIHtcclxuICBcdFx0XHRcdGxheWVycy5wdXNoKGZlYXR1cmVMYXllcik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBuZXcgRmVhdHVyZUdyb3VwKGxheWVycyk7XHJcblxyXG4gIFx0ZGVmYXVsdDpcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEdlb0pTT04gb2JqZWN0LicpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX3BvaW50VG9MYXllcihwb2ludFRvTGF5ZXJGbiwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gcG9pbnRUb0xheWVyRm4gP1xyXG4gIFx0XHRwb2ludFRvTGF5ZXJGbihnZW9qc29uLCBsYXRsbmcpIDpcclxuICBcdFx0bmV3IE1hcmtlcihsYXRsbmcsIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXJrZXJzSW5oZXJpdE9wdGlvbnMgJiYgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIENyZWF0ZXMgYSBgTGF0TG5nYCBvYmplY3QgZnJvbSBhbiBhcnJheSBvZiAyIG51bWJlcnMgKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXHJcbiAgLy8gb3IgMyBudW1iZXJzIChsb25naXR1ZGUsIGxhdGl0dWRlLCBhbHRpdHVkZSkgdXNlZCBpbiBHZW9KU09OIGZvciBwb2ludHMuXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhjb29yZHNbMV0sIGNvb3Jkc1swXSwgY29vcmRzWzJdKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjb29yZHNUb0xhdExuZ3MoY29vcmRzOiBBcnJheSwgbGV2ZWxzRGVlcD86IE51bWJlciwgY29vcmRzVG9MYXRMbmc/OiBGdW5jdGlvbik6IEFycmF5XHJcbiAgLy8gQ3JlYXRlcyBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2YgYExhdExuZ2BzIGZyb20gYSBHZW9KU09OIGNvb3JkaW5hdGVzIGFycmF5LlxyXG4gIC8vIGBsZXZlbHNEZWVwYCBzcGVjaWZpZXMgdGhlIG5lc3RpbmcgbGV2ZWwgKDAgaXMgZm9yIGFuIGFycmF5IG9mIHBvaW50cywgMSBmb3IgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHBvaW50cywgZXRjLiwgMCBieSBkZWZhdWx0KS5cclxuICAvLyBDYW4gdXNlIGEgY3VzdG9tIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZykgZnVuY3Rpb24uXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmdzKGNvb3JkcywgbGV2ZWxzRGVlcCwgX2Nvb3Jkc1RvTGF0TG5nKSB7XHJcbiAgXHR2YXIgbGF0bG5ncyA9IFtdO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoLCBsYXRsbmc7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRsYXRsbmcgPSBsZXZlbHNEZWVwID9cclxuICBcdFx0XHRjb29yZHNUb0xhdExuZ3MoY29vcmRzW2ldLCBsZXZlbHNEZWVwIC0gMSwgX2Nvb3Jkc1RvTGF0TG5nKSA6XHJcbiAgXHRcdFx0KF9jb29yZHNUb0xhdExuZyB8fCBjb29yZHNUb0xhdExuZykoY29vcmRzW2ldKTtcclxuXHJcbiAgXHRcdGxhdGxuZ3MucHVzaChsYXRsbmcpO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBsYXRsbmdzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGxhdExuZ1RvQ29vcmRzKGxhdGxuZzogTGF0TG5nLCBwcmVjaXNpb24/OiBOdW1iZXJ8ZmFsc2UpOiBBcnJheVxyXG4gIC8vIFJldmVyc2Ugb2YgW2Bjb29yZHNUb0xhdExuZ2BdKCNnZW9qc29uLWNvb3Jkc3RvbGF0bG5nKVxyXG4gIC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbi5cclxuICBmdW5jdGlvbiBsYXRMbmdUb0Nvb3JkcyhsYXRsbmcsIHByZWNpc2lvbikge1xyXG4gIFx0bGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdHJldHVybiBsYXRsbmcuYWx0ICE9PSB1bmRlZmluZWQgP1xyXG4gIFx0XHRbZm9ybWF0TnVtKGxhdGxuZy5sbmcsIHByZWNpc2lvbiksIGZvcm1hdE51bShsYXRsbmcubGF0LCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmFsdCwgcHJlY2lzaW9uKV0gOlxyXG4gIFx0XHRbZm9ybWF0TnVtKGxhdGxuZy5sbmcsIHByZWNpc2lvbiksIGZvcm1hdE51bShsYXRsbmcubGF0LCBwcmVjaXNpb24pXTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBsYXRMbmdzVG9Db29yZHMobGF0bG5nczogQXJyYXksIGxldmVsc0RlZXA/OiBOdW1iZXIsIGNsb3NlZD86IEJvb2xlYW4sIHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IEFycmF5XHJcbiAgLy8gUmV2ZXJzZSBvZiBbYGNvb3Jkc1RvTGF0TG5nc2BdKCNnZW9qc29uLWNvb3Jkc3RvbGF0bG5ncylcclxuICAvLyBgY2xvc2VkYCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpcnN0IHBvaW50IHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSB0byBjbG9zZSB0aGUgZmVhdHVyZSwgb25seSB1c2VkIHdoZW4gYGxldmVsc0RlZXBgIGlzIDAuIEZhbHNlIGJ5IGRlZmF1bHQuXHJcbiAgLy8gQ29vcmRpbmF0ZXMgdmFsdWVzIGFyZSByb3VuZGVkIHdpdGggW2Bmb3JtYXROdW1gXSgjdXRpbC1mb3JtYXRudW0pIGZ1bmN0aW9uLlxyXG4gIGZ1bmN0aW9uIGxhdExuZ3NUb0Nvb3JkcyhsYXRsbmdzLCBsZXZlbHNEZWVwLCBjbG9zZWQsIHByZWNpc2lvbikge1xyXG4gIFx0dmFyIGNvb3JkcyA9IFtdO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXRsbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdC8vIENoZWNrIGZvciBmbGF0IGFycmF5cyByZXF1aXJlZCB0byBlbnN1cmUgdW5iYWxhbmNlZCBhcnJheXMgYXJlIGNvcnJlY3RseSBjb252ZXJ0ZWQgaW4gcmVjdXJzaW9uXHJcbiAgXHRcdGNvb3Jkcy5wdXNoKGxldmVsc0RlZXAgP1xyXG4gIFx0XHRcdGxhdExuZ3NUb0Nvb3JkcyhsYXRsbmdzW2ldLCBpc0ZsYXQobGF0bG5nc1tpXSkgPyAwIDogbGV2ZWxzRGVlcCAtIDEsIGNsb3NlZCwgcHJlY2lzaW9uKSA6XHJcbiAgXHRcdFx0bGF0TG5nVG9Db29yZHMobGF0bG5nc1tpXSwgcHJlY2lzaW9uKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKCFsZXZlbHNEZWVwICYmIGNsb3NlZCkge1xyXG4gIFx0XHRjb29yZHMucHVzaChjb29yZHNbMF0uc2xpY2UoKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIGNvb3JkcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEZlYXR1cmUobGF5ZXIsIG5ld0dlb21ldHJ5KSB7XHJcbiAgXHRyZXR1cm4gbGF5ZXIuZmVhdHVyZSA/XHJcbiAgXHRcdGV4dGVuZCh7fSwgbGF5ZXIuZmVhdHVyZSwge2dlb21ldHJ5OiBuZXdHZW9tZXRyeX0pIDpcclxuICBcdFx0YXNGZWF0dXJlKG5ld0dlb21ldHJ5KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBhc0ZlYXR1cmUoZ2VvanNvbjogT2JqZWN0KTogT2JqZWN0XHJcbiAgLy8gTm9ybWFsaXplIEdlb0pTT04gZ2VvbWV0cmllcy9mZWF0dXJlcyBpbnRvIEdlb0pTT04gZmVhdHVyZXMuXHJcbiAgZnVuY3Rpb24gYXNGZWF0dXJlKGdlb2pzb24pIHtcclxuICBcdGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJyB8fCBnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcclxuICBcdFx0cmV0dXJuIGdlb2pzb247XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIHtcclxuICBcdFx0dHlwZTogJ0ZlYXR1cmUnLFxyXG4gIFx0XHRwcm9wZXJ0aWVzOiB7fSxcclxuICBcdFx0Z2VvbWV0cnk6IGdlb2pzb25cclxuICBcdH07XHJcbiAgfVxyXG5cclxuICB2YXIgUG9pbnRUb0dlb0pTT04gPSB7XHJcbiAgXHR0b0dlb0pTT046IGZ1bmN0aW9uIChwcmVjaXNpb24pIHtcclxuICBcdFx0cmV0dXJuIGdldEZlYXR1cmUodGhpcywge1xyXG4gIFx0XHRcdHR5cGU6ICdQb2ludCcsXHJcbiAgXHRcdFx0Y29vcmRpbmF0ZXM6IGxhdExuZ1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5nKCksIHByZWNpc2lvbilcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBNYXJrZXJcclxuICAvLyBAc2VjdGlvbiBPdGhlciBtZXRob2RzXHJcbiAgLy8gQG1ldGhvZCB0b0dlb0pTT04ocHJlY2lzaW9uPzogTnVtYmVyfGZhbHNlKTogT2JqZWN0XHJcbiAgLy8gQ29vcmRpbmF0ZXMgdmFsdWVzIGFyZSByb3VuZGVkIHdpdGggW2Bmb3JtYXROdW1gXSgjdXRpbC1mb3JtYXRudW0pIGZ1bmN0aW9uIHdpdGggZ2l2ZW4gYHByZWNpc2lvbmAuXHJcbiAgLy8gUmV0dXJucyBhIFtgR2VvSlNPTmBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXJrZXIgKGFzIGEgR2VvSlNPTiBgUG9pbnRgIEZlYXR1cmUpLlxyXG4gIE1hcmtlci5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBDaXJjbGVNYXJrZXJcclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXJ8ZmFsc2UpOiBPYmplY3RcclxuICAvLyBDb29yZGluYXRlcyB2YWx1ZXMgYXJlIHJvdW5kZWQgd2l0aCBbYGZvcm1hdE51bWBdKCN1dGlsLWZvcm1hdG51bSkgZnVuY3Rpb24gd2l0aCBnaXZlbiBgcHJlY2lzaW9uYC5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2VvSlNPTikgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNpcmNsZSBtYXJrZXIgKGFzIGEgR2VvSlNPTiBgUG9pbnRgIEZlYXR1cmUpLlxyXG4gIENpcmNsZS5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuICBDaXJjbGVNYXJrZXIuaW5jbHVkZShQb2ludFRvR2VvSlNPTik7XHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIFBvbHlsaW5lXHJcbiAgLy8gQG1ldGhvZCB0b0dlb0pTT04ocHJlY2lzaW9uPzogTnVtYmVyfGZhbHNlKTogT2JqZWN0XHJcbiAgLy8gQ29vcmRpbmF0ZXMgdmFsdWVzIGFyZSByb3VuZGVkIHdpdGggW2Bmb3JtYXROdW1gXSgjdXRpbC1mb3JtYXRudW0pIGZ1bmN0aW9uIHdpdGggZ2l2ZW4gYHByZWNpc2lvbmAuXHJcbiAgLy8gUmV0dXJucyBhIFtgR2VvSlNPTmBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwb2x5bGluZSAoYXMgYSBHZW9KU09OIGBMaW5lU3RyaW5nYCBvciBgTXVsdGlMaW5lU3RyaW5nYCBGZWF0dXJlKS5cclxuICBQb2x5bGluZS5pbmNsdWRlKHtcclxuICBcdHRvR2VvSlNPTjogZnVuY3Rpb24gKHByZWNpc2lvbikge1xyXG4gIFx0XHR2YXIgbXVsdGkgPSAhaXNGbGF0KHRoaXMuX2xhdGxuZ3MpO1xyXG5cclxuICBcdFx0dmFyIGNvb3JkcyA9IGxhdExuZ3NUb0Nvb3Jkcyh0aGlzLl9sYXRsbmdzLCBtdWx0aSA/IDEgOiAwLCBmYWxzZSwgcHJlY2lzaW9uKTtcclxuXHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAobXVsdGkgPyAnTXVsdGknIDogJycpICsgJ0xpbmVTdHJpbmcnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgUG9seWdvblxyXG4gIC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IE9iamVjdFxyXG4gIC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbiB3aXRoIGdpdmVuIGBwcmVjaXNpb25gLlxyXG4gIC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWdvbiAoYXMgYSBHZW9KU09OIGBQb2x5Z29uYCBvciBgTXVsdGlQb2x5Z29uYCBGZWF0dXJlKS5cclxuICBQb2x5Z29uLmluY2x1ZGUoe1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBob2xlcyA9ICFpc0ZsYXQodGhpcy5fbGF0bG5ncyksXHJcbiAgXHRcdCAgICBtdWx0aSA9IGhvbGVzICYmICFpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSk7XHJcblxyXG4gIFx0XHR2YXIgY29vcmRzID0gbGF0TG5nc1RvQ29vcmRzKHRoaXMuX2xhdGxuZ3MsIG11bHRpID8gMiA6IGhvbGVzID8gMSA6IDAsIHRydWUsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRpZiAoIWhvbGVzKSB7XHJcbiAgXHRcdFx0Y29vcmRzID0gW2Nvb3Jkc107XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAobXVsdGkgPyAnTXVsdGknIDogJycpICsgJ1BvbHlnb24nLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIExheWVyR3JvdXBcclxuICBMYXllckdyb3VwLmluY2x1ZGUoe1xyXG4gIFx0dG9NdWx0aVBvaW50OiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGNvb3Jkcy5wdXNoKGxheWVyLnRvR2VvSlNPTihwcmVjaXNpb24pLmdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogJ011bHRpUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IE9iamVjdFxyXG4gIFx0Ly8gQ29vcmRpbmF0ZXMgdmFsdWVzIGFyZSByb3VuZGVkIHdpdGggW2Bmb3JtYXROdW1gXSgjdXRpbC1mb3JtYXRudW0pIGZ1bmN0aW9uIHdpdGggZ2l2ZW4gYHByZWNpc2lvbmAuXHJcbiAgXHQvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2VvSlNPTikgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxheWVyIGdyb3VwIChhcyBhIEdlb0pTT04gYEZlYXR1cmVDb2xsZWN0aW9uYCwgYEdlb21ldHJ5Q29sbGVjdGlvbmAsIG9yIGBNdWx0aVBvaW50YCkuXHJcbiAgXHR0b0dlb0pTT046IGZ1bmN0aW9uIChwcmVjaXNpb24pIHtcclxuXHJcbiAgXHRcdHZhciB0eXBlID0gdGhpcy5mZWF0dXJlICYmIHRoaXMuZmVhdHVyZS5nZW9tZXRyeSAmJiB0aGlzLmZlYXR1cmUuZ2VvbWV0cnkudHlwZTtcclxuXHJcbiAgXHRcdGlmICh0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy50b011bHRpUG9pbnQocHJlY2lzaW9uKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gdHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicsXHJcbiAgXHRcdCAgICBqc29ucyA9IFtdO1xyXG5cclxuICBcdFx0dGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdFx0aWYgKGxheWVyLnRvR2VvSlNPTikge1xyXG4gIFx0XHRcdFx0dmFyIGpzb24gPSBsYXllci50b0dlb0pTT04ocHJlY2lzaW9uKTtcclxuICBcdFx0XHRcdGlmIChpc0dlb21ldHJ5Q29sbGVjdGlvbikge1xyXG4gIFx0XHRcdFx0XHRqc29ucy5wdXNoKGpzb24uZ2VvbWV0cnkpO1xyXG4gIFx0XHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdFx0dmFyIGZlYXR1cmUgPSBhc0ZlYXR1cmUoanNvbik7XHJcbiAgXHRcdFx0XHRcdC8vIFNxdWFzaCBuZXN0ZWQgZmVhdHVyZSBjb2xsZWN0aW9uc1xyXG4gIFx0XHRcdFx0XHRpZiAoZmVhdHVyZS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XHJcbiAgXHRcdFx0XHRcdFx0anNvbnMucHVzaC5hcHBseShqc29ucywgZmVhdHVyZS5mZWF0dXJlcyk7XHJcbiAgXHRcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdFx0anNvbnMucHVzaChmZWF0dXJlKTtcclxuICBcdFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRpZiAoaXNHZW9tZXRyeUNvbGxlY3Rpb24pIHtcclxuICBcdFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0XHRnZW9tZXRyaWVzOiBqc29ucyxcclxuICBcdFx0XHRcdHR5cGU6ICdHZW9tZXRyeUNvbGxlY3Rpb24nXHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB7XHJcbiAgXHRcdFx0dHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICBcdFx0XHRmZWF0dXJlczoganNvbnNcclxuICBcdFx0fTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBHZW9KU09OXHJcbiAgLy8gQGZhY3RvcnkgTC5nZW9KU09OKGdlb2pzb24/OiBPYmplY3QsIG9wdGlvbnM/OiBHZW9KU09OIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhIEdlb0pTT04gbGF5ZXIuIE9wdGlvbmFsbHkgYWNjZXB0cyBhbiBvYmplY3QgaW5cclxuICAvLyBbR2VvSlNPTiBmb3JtYXRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2KSB0byBkaXNwbGF5IG9uIHRoZSBtYXBcclxuICAvLyAoeW91IGNhbiBhbHRlcm5hdGl2ZWx5IGFkZCBpdCBsYXRlciB3aXRoIGBhZGREYXRhYCBtZXRob2QpIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0LlxyXG4gIGZ1bmN0aW9uIGdlb0pTT04oZ2VvanNvbiwgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBHZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eS5cclxuICB2YXIgZ2VvSnNvbiA9IGdlb0pTT047XG5cbiAgLypcclxuICAgKiBAY2xhc3MgSW1hZ2VPdmVybGF5XHJcbiAgICogQGFrYSBMLkltYWdlT3ZlcmxheVxyXG4gICAqIEBpbmhlcml0cyBJbnRlcmFjdGl2ZSBsYXllclxyXG4gICAqXHJcbiAgICogVXNlZCB0byBsb2FkIGFuZCBkaXNwbGF5IGEgc2luZ2xlIGltYWdlIG92ZXIgc3BlY2lmaWMgYm91bmRzIG9mIHRoZSBtYXAuIEV4dGVuZHMgYExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBpbWFnZVVybCA9ICdodHRwczovL21hcHMubGliLnV0ZXhhcy5lZHUvbWFwcy9oaXN0b3JpY2FsL25ld2Fya19ual8xOTIyLmpwZycsXHJcbiAgICogXHRpbWFnZUJvdW5kcyA9IFtbNDAuNzEyMjE2LCAtNzQuMjI2NTVdLCBbNDAuNzczOTQxLCAtNzQuMTI1NDRdXTtcclxuICAgKiBMLmltYWdlT3ZlcmxheShpbWFnZVVybCwgaW1hZ2VCb3VuZHMpLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBJbWFnZU92ZXJsYXkgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIEltYWdlT3ZlcmxheSBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gb3BhY2l0eTogTnVtYmVyID0gMS4wXHJcbiAgXHRcdC8vIFRoZSBvcGFjaXR5IG9mIHRoZSBpbWFnZSBvdmVybGF5LlxyXG4gIFx0XHRvcGFjaXR5OiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhbHQ6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIFRleHQgZm9yIHRoZSBgYWx0YCBhdHRyaWJ1dGUgb2YgdGhlIGltYWdlICh1c2VmdWwgZm9yIGFjY2Vzc2liaWxpdHkpLlxyXG4gIFx0XHRhbHQ6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBpbnRlcmFjdGl2ZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGltYWdlIG92ZXJsYXkgd2lsbCBlbWl0IFttb3VzZSBldmVudHNdKCNpbnRlcmFjdGl2ZS1sYXllcikgd2hlbiBjbGlja2VkIG9yIGhvdmVyZWQuXHJcbiAgXHRcdGludGVyYWN0aXZlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY3Jvc3NPcmlnaW46IEJvb2xlYW58U3RyaW5nID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGltYWdlLlxyXG4gIFx0XHQvLyBJZiBhIFN0cmluZyBpcyBwcm92aWRlZCwgdGhlIGltYWdlIHdpbGwgaGF2ZSBpdHMgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLiBUaGlzIGlzIG5lZWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgaW1hZ2UgcGl4ZWwgZGF0YS5cclxuICBcdFx0Ly8gUmVmZXIgdG8gW0NPUlMgU2V0dGluZ3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgdmFsaWQgU3RyaW5nIHZhbHVlcy5cclxuICBcdFx0Y3Jvc3NPcmlnaW46IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBlcnJvck92ZXJsYXlVcmw6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIFVSTCB0byB0aGUgb3ZlcmxheSBpbWFnZSB0byBzaG93IGluIHBsYWNlIG9mIHRoZSBvdmVybGF5IHRoYXQgZmFpbGVkIHRvIGxvYWQuXHJcbiAgXHRcdGVycm9yT3ZlcmxheVVybDogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpJbmRleDogTnVtYmVyID0gMVxyXG4gIFx0XHQvLyBUaGUgZXhwbGljaXQgW3pJbmRleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgpIG9mIHRoZSBvdmVybGF5IGxheWVyLlxyXG4gIFx0XHR6SW5kZXg6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gQSBjdXN0b20gY2xhc3MgbmFtZSB0byBhc3NpZ24gdG8gdGhlIGltYWdlLiBFbXB0eSBieSBkZWZhdWx0LlxyXG4gIFx0XHRjbGFzc05hbWU6ICcnXHJcbiAgXHR9LFxyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uICh1cmwsIGJvdW5kcywgb3B0aW9ucykgeyAvLyAoU3RyaW5nLCBMYXRMbmdCb3VuZHMsIE9iamVjdClcclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG4gIFx0XHR0aGlzLl9ib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9pbWFnZSkge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRJbWFnZSgpO1xyXG5cclxuICBcdFx0XHRpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgPCAxKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl91cGRhdGVPcGFjaXR5KCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5faW1hZ2UsICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XHJcbiAgXHRcdFx0dGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKTtcclxuICBcdFx0dGhpcy5fcmVzZXQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlKHRoaXMuX2ltYWdlKTtcclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xyXG4gIFx0XHRcdHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0T3BhY2l0eShvcGFjaXR5OiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSBvcGFjaXR5IG9mIHRoZSBvdmVybGF5LlxyXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ltYWdlKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlT3B0cykge1xyXG4gIFx0XHRpZiAoc3R5bGVPcHRzLm9wYWNpdHkpIHtcclxuICBcdFx0XHR0aGlzLnNldE9wYWNpdHkoc3R5bGVPcHRzLm9wYWNpdHkpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIHRvIHRoZSB0b3Agb2YgYWxsIG92ZXJsYXlzLlxyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0Zyb250KHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjaygpOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIHRvIHRoZSBib3R0b20gb2YgYWxsIG92ZXJsYXlzLlxyXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRvQmFjayh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0VXJsKHVybDogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgVVJMIG9mIHRoZSBpbWFnZS5cclxuICBcdHNldFVybDogZnVuY3Rpb24gKHVybCkge1xyXG4gIFx0XHR0aGlzLl91cmwgPSB1cmw7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faW1hZ2UpIHtcclxuICBcdFx0XHR0aGlzLl9pbWFnZS5zcmMgPSB1cmw7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gVXBkYXRlIHRoZSBib3VuZHMgdGhhdCB0aGlzIEltYWdlT3ZlcmxheSBjb3ZlcnNcclxuICBcdHNldEJvdW5kczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHR0aGlzLl9ib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX3Jlc2V0KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgZXZlbnRzID0ge1xyXG4gIFx0XHRcdHpvb206IHRoaXMuX3Jlc2V0LFxyXG4gIFx0XHRcdHZpZXdyZXNldDogdGhpcy5fcmVzZXRcclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRldmVudHMuem9vbWFuaW0gPSB0aGlzLl9hbmltYXRlWm9vbTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIGV2ZW50cztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRaSW5kZXgodmFsdWU6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIFt6SW5kZXhdKCNpbWFnZW92ZXJsYXktemluZGV4KSBvZiB0aGUgaW1hZ2Ugb3ZlcmxheS5cclxuICBcdHNldFpJbmRleDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgXHRcdHRoaXMub3B0aW9ucy56SW5kZXggPSB2YWx1ZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIEdldCB0aGUgYm91bmRzIHRoYXQgdGhpcyBJbWFnZU92ZXJsYXkgY292ZXJzXHJcbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2JvdW5kcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYEhUTUxJbWFnZUVsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTEltYWdlRWxlbWVudClcclxuICBcdC8vIHVzZWQgYnkgdGhpcyBvdmVybGF5LlxyXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5faW1hZ2U7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW1hZ2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHdhc0VsZW1lbnRTdXBwbGllZCA9IHRoaXMuX3VybC50YWdOYW1lID09PSAnSU1HJztcclxuICBcdFx0dmFyIGltZyA9IHRoaXMuX2ltYWdlID0gd2FzRWxlbWVudFN1cHBsaWVkID8gdGhpcy5fdXJsIDogY3JlYXRlJDEoJ2ltZycpO1xyXG5cclxuICBcdFx0YWRkQ2xhc3MoaW1nLCAnbGVhZmxldC1pbWFnZS1sYXllcicpO1xyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7IGFkZENsYXNzKGltZywgJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpOyB9XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSB7IGFkZENsYXNzKGltZywgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSk7IH1cclxuXHJcbiAgXHRcdGltZy5vbnNlbGVjdHN0YXJ0ID0gZmFsc2VGbjtcclxuICBcdFx0aW1nLm9ubW91c2Vtb3ZlID0gZmFsc2VGbjtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsb2FkOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBJbWFnZU92ZXJsYXkgbGF5ZXIgaGFzIGxvYWRlZCBpdHMgaW1hZ2VcclxuICBcdFx0aW1nLm9ubG9hZCA9IGJpbmQodGhpcy5maXJlLCB0aGlzLCAnbG9hZCcpO1xyXG4gIFx0XHRpbWcub25lcnJvciA9IGJpbmQodGhpcy5fb3ZlcmxheU9uRXJyb3IsIHRoaXMsICdlcnJvcicpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiB8fCB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09ICcnKSB7XHJcbiAgXHRcdFx0aW1nLmNyb3NzT3JpZ2luID0gdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJycgOiB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuekluZGV4KSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh3YXNFbGVtZW50U3VwcGxpZWQpIHtcclxuICBcdFx0XHR0aGlzLl91cmwgPSBpbWcuc3JjO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aW1nLnNyYyA9IHRoaXMuX3VybDtcclxuICBcdFx0aW1nLmFsdCA9IHRoaXMub3B0aW9ucy5hbHQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dmFyIHNjYWxlID0gdGhpcy5fbWFwLmdldFpvb21TY2FsZShlLnpvb20pLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdGhpcy5fbWFwLl9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzKHRoaXMuX2JvdW5kcywgZS56b29tLCBlLmNlbnRlcikubWluO1xyXG5cclxuICBcdFx0c2V0VHJhbnNmb3JtKHRoaXMuX2ltYWdlLCBvZmZzZXQsIHNjYWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3Jlc2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBpbWFnZSA9IHRoaXMuX2ltYWdlLFxyXG4gIFx0XHQgICAgYm91bmRzID0gbmV3IEJvdW5kcyhcclxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXROb3J0aFdlc3QoKSksXHJcbiAgXHRcdCAgICAgICAgdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0U291dGhFYXN0KCkpKSxcclxuICBcdFx0ICAgIHNpemUgPSBib3VuZHMuZ2V0U2l6ZSgpO1xyXG5cclxuICBcdFx0c2V0UG9zaXRpb24oaW1hZ2UsIGJvdW5kcy5taW4pO1xyXG5cclxuICBcdFx0aW1hZ2Uuc3R5bGUud2lkdGggID0gc2l6ZS54ICsgJ3B4JztcclxuICBcdFx0aW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JztcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZU9wYWNpdHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0c2V0T3BhY2l0eSh0aGlzLl9pbWFnZSwgdGhpcy5vcHRpb25zLm9wYWNpdHkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9pbWFnZSAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLnpJbmRleCAhPT0gbnVsbCkge1xyXG4gIFx0XHRcdHRoaXMuX2ltYWdlLnN0eWxlLnpJbmRleCA9IHRoaXMub3B0aW9ucy56SW5kZXg7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X292ZXJsYXlPbkVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIEBldmVudCBlcnJvcjogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgSW1hZ2VPdmVybGF5IGxheWVyIGZhaWxzIHRvIGxvYWQgaXRzIGltYWdlXHJcbiAgXHRcdHRoaXMuZmlyZSgnZXJyb3InKTtcclxuXHJcbiAgXHRcdHZhciBlcnJvclVybCA9IHRoaXMub3B0aW9ucy5lcnJvck92ZXJsYXlVcmw7XHJcbiAgXHRcdGlmIChlcnJvclVybCAmJiB0aGlzLl91cmwgIT09IGVycm9yVXJsKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXJsID0gZXJyb3JVcmw7XHJcbiAgXHRcdFx0dGhpcy5faW1hZ2Uuc3JjID0gZXJyb3JVcmw7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhlIEltYWdlT3ZlcmxheS5cclxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fYm91bmRzLmdldENlbnRlcigpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmltYWdlT3ZlcmxheShpbWFnZVVybDogU3RyaW5nLCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IEltYWdlT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSBpbWFnZSBhbmQgdGhlXHJcbiAgLy8gZ2VvZ3JhcGhpY2FsIGJvdW5kcyBpdCBpcyB0aWVkIHRvLlxyXG4gIHZhciBpbWFnZU92ZXJsYXkgPSBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgSW1hZ2VPdmVybGF5KHVybCwgYm91bmRzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFZpZGVvT3ZlcmxheVxyXG4gICAqIEBha2EgTC5WaWRlb092ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW1hZ2VPdmVybGF5XHJcbiAgICpcclxuICAgKiBVc2VkIHRvIGxvYWQgYW5kIGRpc3BsYXkgYSB2aWRlbyBwbGF5ZXIgb3ZlciBzcGVjaWZpYyBib3VuZHMgb2YgdGhlIG1hcC4gRXh0ZW5kcyBgSW1hZ2VPdmVybGF5YC5cclxuICAgKlxyXG4gICAqIEEgdmlkZW8gb3ZlcmxheSB1c2VzIHRoZSBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8pXHJcbiAgICogSFRNTDUgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciB2aWRlb1VybCA9ICdodHRwczovL3d3dy5tYXBib3guY29tL2JpdGVzLzAwMTg4L3BhdHJpY2lhX25hc2Eud2VibScsXHJcbiAgICogXHR2aWRlb0JvdW5kcyA9IFtbIDMyLCAtMTMwXSwgWyAxMywgLTEwMF1dO1xyXG4gICAqIEwudmlkZW9PdmVybGF5KHZpZGVvVXJsLCB2aWRlb0JvdW5kcyApLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBWaWRlb092ZXJsYXkgPSBJbWFnZU92ZXJsYXkuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBWaWRlb092ZXJsYXkgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9wbGF5OiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgcGxheWluZyBhdXRvbWF0aWNhbGx5IHdoZW4gbG9hZGVkLlxyXG4gIFx0XHQvLyBPbiBzb21lIGJyb3dzZXJzIGF1dG9wbGF5IHdpbGwgb25seSB3b3JrIHdpdGggYG11dGVkOiB0cnVlYFxyXG4gIFx0XHRhdXRvcGxheTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbG9vcDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gd2lsbCBsb29wIGJhY2sgdG8gdGhlIGJlZ2lubmluZyB3aGVuIHBsYXllZC5cclxuICBcdFx0bG9vcDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24ga2VlcEFzcGVjdFJhdGlvOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyB3aWxsIHNhdmUgYXNwZWN0IHJhdGlvIGFmdGVyIHRoZSBwcm9qZWN0aW9uLlxyXG4gIFx0XHQvLyBSZWxldmFudCBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzLiBTZWUgW2Jyb3dzZXIgY29tcGF0aWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL29iamVjdC1maXQpXHJcbiAgXHRcdGtlZXBBc3BlY3RSYXRpbzogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbXV0ZWQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgb24gbXV0ZSB3aGVuIGxvYWRlZC5cclxuICBcdFx0bXV0ZWQ6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwbGF5c0lubGluZTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gTW9iaWxlIGJyb3dzZXJzIHdpbGwgcGxheSB0aGUgdmlkZW8gcmlnaHQgd2hlcmUgaXQgaXMgaW5zdGVhZCBvZiBvcGVuIGl0IHVwIGluIGZ1bGxzY3JlZW4gbW9kZS5cclxuICBcdFx0cGxheXNJbmxpbmU6IHRydWVcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgd2FzRWxlbWVudFN1cHBsaWVkID0gdGhpcy5fdXJsLnRhZ05hbWUgPT09ICdWSURFTyc7XHJcbiAgXHRcdHZhciB2aWQgPSB0aGlzLl9pbWFnZSA9IHdhc0VsZW1lbnRTdXBwbGllZCA/IHRoaXMuX3VybCA6IGNyZWF0ZSQxKCd2aWRlbycpO1xyXG5cclxuICBcdFx0YWRkQ2xhc3ModmlkLCAnbGVhZmxldC1pbWFnZS1sYXllcicpO1xyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7IGFkZENsYXNzKHZpZCwgJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpOyB9XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSB7IGFkZENsYXNzKHZpZCwgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSk7IH1cclxuXHJcbiAgXHRcdHZpZC5vbnNlbGVjdHN0YXJ0ID0gZmFsc2VGbjtcclxuICBcdFx0dmlkLm9ubW91c2Vtb3ZlID0gZmFsc2VGbjtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsb2FkOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB2aWRlbyBoYXMgZmluaXNoZWQgbG9hZGluZyB0aGUgZmlyc3QgZnJhbWVcclxuICBcdFx0dmlkLm9ubG9hZGVkZGF0YSA9IGJpbmQodGhpcy5maXJlLCB0aGlzLCAnbG9hZCcpO1xyXG5cclxuICBcdFx0aWYgKHdhc0VsZW1lbnRTdXBwbGllZCkge1xyXG4gIFx0XHRcdHZhciBzb3VyY2VFbGVtZW50cyA9IHZpZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc291cmNlJyk7XHJcbiAgXHRcdFx0dmFyIHNvdXJjZXMgPSBbXTtcclxuICBcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHNvdXJjZUVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgXHRcdFx0XHRzb3VyY2VzLnB1c2goc291cmNlRWxlbWVudHNbal0uc3JjKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHRoaXMuX3VybCA9IChzb3VyY2VFbGVtZW50cy5sZW5ndGggPiAwKSA/IHNvdXJjZXMgOiBbdmlkLnNyY107XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIWlzQXJyYXkodGhpcy5fdXJsKSkgeyB0aGlzLl91cmwgPSBbdGhpcy5fdXJsXTsgfVxyXG5cclxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMua2VlcEFzcGVjdFJhdGlvICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aWQuc3R5bGUsICdvYmplY3RGaXQnKSkge1xyXG4gIFx0XHRcdHZpZC5zdHlsZVsnb2JqZWN0Rml0J10gPSAnZmlsbCc7XHJcbiAgXHRcdH1cclxuICBcdFx0dmlkLmF1dG9wbGF5ID0gISF0aGlzLm9wdGlvbnMuYXV0b3BsYXk7XHJcbiAgXHRcdHZpZC5sb29wID0gISF0aGlzLm9wdGlvbnMubG9vcDtcclxuICBcdFx0dmlkLm11dGVkID0gISF0aGlzLm9wdGlvbnMubXV0ZWQ7XHJcbiAgXHRcdHZpZC5wbGF5c0lubGluZSA9ICEhdGhpcy5vcHRpb25zLnBsYXlzSW5saW5lO1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3VybC5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHZhciBzb3VyY2UgPSBjcmVhdGUkMSgnc291cmNlJyk7XHJcbiAgXHRcdFx0c291cmNlLnNyYyA9IHRoaXMuX3VybFtpXTtcclxuICBcdFx0XHR2aWQuYXBwZW5kQ2hpbGQoc291cmNlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYEhUTUxWaWRlb0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudClcclxuICBcdC8vIHVzZWQgYnkgdGhpcyBvdmVybGF5LlxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC52aWRlb092ZXJsYXkodmlkZW86IFN0cmluZ3xBcnJheXxIVE1MVmlkZW9FbGVtZW50LCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IFZpZGVvT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSB2aWRlbyAob3IgYXJyYXkgb2YgVVJMcywgb3IgZXZlbiBhIHZpZGVvIGVsZW1lbnQpIGFuZCB0aGVcclxuICAvLyBnZW9ncmFwaGljYWwgYm91bmRzIGl0IGlzIHRpZWQgdG8uXHJcblxyXG4gIGZ1bmN0aW9uIHZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR092ZXJsYXlcbiAgICogQGFrYSBMLlNWR092ZXJsYXlcbiAgICogQGluaGVyaXRzIEltYWdlT3ZlcmxheVxuICAgKlxuICAgKiBVc2VkIHRvIGxvYWQsIGRpc3BsYXkgYW5kIHByb3ZpZGUgRE9NIGFjY2VzcyB0byBhbiBTVkcgZmlsZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBJbWFnZU92ZXJsYXlgLlxuICAgKlxuICAgKiBBbiBTVkcgb3ZlcmxheSB1c2VzIHRoZSBbYDxzdmc+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0VsZW1lbnQvc3ZnKSBlbGVtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgc3ZnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgneG1sbnMnLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFwiMCAwIDIwMCAyMDBcIik7XG4gICAqIHN2Z0VsZW1lbnQuaW5uZXJIVE1MID0gJzxyZWN0IHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCIvPjxyZWN0IHg9XCI3NVwiIHk9XCIyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDpyZWRcIi8+PHJlY3QgeD1cIjc1XCIgeT1cIjEyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDojMDAxM2ZmXCIvPic7XG4gICAqIHZhciBzdmdFbGVtZW50Qm91bmRzID0gWyBbIDMyLCAtMTMwIF0sIFsgMTMsIC0xMDAgXSBdO1xuICAgKiBMLnN2Z092ZXJsYXkoc3ZnRWxlbWVudCwgc3ZnRWxlbWVudEJvdW5kcykuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkdPdmVybGF5ID0gSW1hZ2VPdmVybGF5LmV4dGVuZCh7XG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGVsID0gdGhpcy5faW1hZ2UgPSB0aGlzLl91cmw7XG5cbiAgXHRcdGFkZENsYXNzKGVsLCAnbGVhZmxldC1pbWFnZS1sYXllcicpO1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpOyB9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyhlbCwgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSk7IH1cblxuICBcdFx0ZWwub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHRlbC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XG4gIFx0fVxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50KCk6IFNWR0VsZW1lbnRcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYFNWR0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvU1ZHRWxlbWVudClcbiAgXHQvLyB1c2VkIGJ5IHRoaXMgb3ZlcmxheS5cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLnN2Z092ZXJsYXkoc3ZnOiBTdHJpbmd8U1ZHRWxlbWVudCwgYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBTVkdPdmVybGF5IG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiBhbiBTVkcgZWxlbWVudCBhbmQgdGhlIGdlb2dyYXBoaWNhbCBib3VuZHMgaXQgaXMgdGllZCB0by5cbiAgLy8gQSB2aWV3Qm94IGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiB0aGUgU1ZHIGVsZW1lbnQgdG8gem9vbSBpbiBhbmQgb3V0IHByb3Blcmx5LlxuXG4gIGZ1bmN0aW9uIHN2Z092ZXJsYXkoZWwsIGJvdW5kcywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgU1ZHT3ZlcmxheShlbCwgYm91bmRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIERpdk92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcclxuICAgKiBAYWthIEwuRGl2T3ZlcmxheVxyXG4gICAqIEJhc2UgbW9kZWwgZm9yIEwuUG9wdXAgYW5kIEwuVG9vbHRpcC4gSW5oZXJpdCBmcm9tIGl0IGZvciBjdXN0b20gb3ZlcmxheXMgbGlrZSBwbHVnaW5zLlxyXG4gICAqL1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIERpdk92ZXJsYXlcclxuICB2YXIgRGl2T3ZlcmxheSA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgRGl2T3ZlcmxheSBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gaW50ZXJhY3RpdmU6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiB0cnVlLCB0aGUgcG9wdXAvdG9vbHRpcCB3aWxsIGxpc3RlbiB0byB0aGUgbW91c2UgZXZlbnRzLlxyXG4gIFx0XHRpbnRlcmFjdGl2ZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG9mZnNldDogUG9pbnQgPSBQb2ludCgwLCAwKVxyXG4gIFx0XHQvLyBUaGUgb2Zmc2V0IG9mIHRoZSBvdmVybGF5IHBvc2l0aW9uLlxyXG4gIFx0XHRvZmZzZXQ6IFswLCAwXSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBBIGN1c3RvbSBDU1MgY2xhc3MgbmFtZSB0byBhc3NpZ24gdG8gdGhlIG92ZXJsYXkuXHJcbiAgXHRcdGNsYXNzTmFtZTogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHBhbmU6IFN0cmluZyA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBvdmVybGF5IHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHBhbmU6IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fEZ1bmN0aW9uID0gJydcclxuICBcdFx0Ly8gU2V0cyB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBvdmVybGF5IHdoaWxlIGluaXRpYWxpemluZy4gSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNvdXJjZSBsYXllciB3aWxsIGJlXHJcbiAgXHRcdC8vIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YCB0byBiZSB1c2VkIGluIHRoZSBvdmVybGF5LlxyXG4gIFx0XHRjb250ZW50OiAnJ1xyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XHJcbiAgXHRcdGlmIChvcHRpb25zICYmIChvcHRpb25zIGluc3RhbmNlb2YgTGF0TG5nIHx8IGlzQXJyYXkob3B0aW9ucykpKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcob3B0aW9ucyk7XHJcbiAgXHRcdFx0c2V0T3B0aW9ucyh0aGlzLCBzb3VyY2UpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgXHRcdFx0dGhpcy5fc291cmNlID0gc291cmNlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY29udGVudCkge1xyXG4gIFx0XHRcdHRoaXMuX2NvbnRlbnQgPSB0aGlzLm9wdGlvbnMuY29udGVudDtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5PbihtYXA6IE1hcCk6IHRoaXNcclxuICBcdC8vIEFkZHMgdGhlIG92ZXJsYXkgdG8gdGhlIG1hcC5cclxuICBcdC8vIEFsdGVybmF0aXZlIHRvIGBtYXAub3BlblBvcHVwKHBvcHVwKWAvYC5vcGVuVG9vbHRpcCh0b29sdGlwKWAuXHJcbiAgXHRvcGVuT246IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwID0gYXJndW1lbnRzLmxlbmd0aCA/IG1hcCA6IHRoaXMuX3NvdXJjZS5fbWFwOyAvLyBleHBlcmltZW50YWwsIG5vdCB0aGUgcGFydCBvZiBwdWJsaWMgYXBpXHJcbiAgXHRcdGlmICghbWFwLmhhc0xheWVyKHRoaXMpKSB7XHJcbiAgXHRcdFx0bWFwLmFkZExheWVyKHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsb3NlKCk6IHRoaXNcclxuICBcdC8vIENsb3NlcyB0aGUgb3ZlcmxheS5cclxuICBcdC8vIEFsdGVybmF0aXZlIHRvIGBtYXAuY2xvc2VQb3B1cChwb3B1cClgL2AuY2xvc2VUb29sdGlwKHRvb2x0aXApYFxyXG4gIFx0Ly8gYW5kIGBsYXllci5jbG9zZVBvcHVwKClgL2AuY2xvc2VUb29sdGlwKClgLlxyXG4gIFx0Y2xvc2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b2dnbGUobGF5ZXI/OiBMYXllcik6IHRoaXNcclxuICBcdC8vIE9wZW5zIG9yIGNsb3NlcyB0aGUgb3ZlcmxheSBib3VuZCB0byBsYXllciBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXHJcbiAgXHQvLyBBcmd1bWVudCBtYXkgYmUgb21pdHRlZCBvbmx5IGZvciBvdmVybGF5IGJvdW5kIHRvIGxheWVyLlxyXG4gIFx0Ly8gQWx0ZXJuYXRpdmUgdG8gYGxheWVyLnRvZ2dsZVBvcHVwKClgL2AudG9nZ2xlVG9vbHRpcCgpYC5cclxuICBcdHRvZ2dsZTogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLmNsb3NlKCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICBcdFx0XHRcdHRoaXMuX3NvdXJjZSA9IGxheWVyO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRsYXllciA9IHRoaXMuX3NvdXJjZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0dGhpcy5fcHJlcGFyZU9wZW4oKTtcclxuXHJcbiAgXHRcdFx0Ly8gb3BlbiB0aGUgb3ZlcmxheSBvbiB0aGUgbWFwXHJcbiAgXHRcdFx0dGhpcy5vcGVuT24obGF5ZXIuX21hcCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IG1hcC5fem9vbUFuaW1hdGVkO1xyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9jb250YWluZXIpIHtcclxuICBcdFx0XHR0aGlzLl9pbml0TGF5b3V0KCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChtYXAuX2ZhZGVBbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCAwKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3JlbW92ZVRpbWVvdXQpO1xyXG4gIFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICBcdFx0aWYgKG1hcC5fZmFkZUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIDEpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLmJyaW5nVG9Gcm9udCgpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuICBcdFx0XHR0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0aWYgKG1hcC5fZmFkZUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIDApO1xyXG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGJpbmQocmVtb3ZlLCB1bmRlZmluZWQsIHRoaXMuX2NvbnRhaW5lciksIDIwMCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XHJcbiAgXHRcdFx0dGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBuYW1lc3BhY2UgRGl2T3ZlcmxheVxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXRMbmc6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IG9mIHRoZSBvdmVybGF5LlxyXG4gIFx0Z2V0TGF0TG5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9sYXRsbmc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TGF0TG5nKGxhdGxuZzogTGF0TG5nKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IHdoZXJlIHRoZSBvdmVybGF5IHdpbGwgb3Blbi5cclxuICBcdHNldExhdExuZzogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR0aGlzLl9sYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcclxuICBcdFx0XHR0aGlzLl9hZGp1c3RQYW4oKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGNvbnRlbnQgb2YgdGhlIG92ZXJsYXkuXHJcbiAgXHRnZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250ZW50O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldENvbnRlbnQoaHRtbENvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxGdW5jdGlvbik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgb3ZlcmxheS4gSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNvdXJjZSBsYXllciB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXHJcbiAgXHQvLyBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGBTdHJpbmdgIG9yIGBIVE1MRWxlbWVudGAgdG8gYmUgdXNlZCBpbiB0aGUgb3ZlcmxheS5cclxuICBcdHNldENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50OiBTdHJpbmd8SFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgY29udGFpbmVyIG9mIHRoZSBvdmVybGF5LlxyXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVwZGF0ZTogbnVsbFxyXG4gIFx0Ly8gVXBkYXRlcyB0aGUgb3ZlcmxheSBjb250ZW50LCBsYXlvdXQgYW5kIHBvc2l0aW9uLiBVc2VmdWwgZm9yIHVwZGF0aW5nIHRoZSBvdmVybGF5IGFmdGVyIHNvbWV0aGluZyBpbnNpZGUgY2hhbmdlZCwgZS5nLiBpbWFnZSBsb2FkZWQuXHJcbiAgXHR1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlQ29udGVudCgpO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVMYXlvdXQoKTtcclxuICBcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblxyXG4gIFx0XHR0aGlzLl9hZGp1c3RQYW4oKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy5fdXBkYXRlUG9zaXRpb24sXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLl91cGRhdGVQb3NpdGlvblxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBldmVudHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNPcGVuOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBvdmVybGF5IGlzIHZpc2libGUgb24gdGhlIG1hcC5cclxuICBcdGlzT3BlbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gISF0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udDogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoaXMgb3ZlcmxheSBpbiBmcm9udCBvZiBvdGhlciBvdmVybGF5cyAoaW4gdGhlIHNhbWUgbWFwIHBhbmUpLlxyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0Zyb250KHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2s6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIG92ZXJsYXkgdG8gdGhlIGJhY2sgb2Ygb3RoZXIgb3ZlcmxheXMgKGluIHRoZSBzYW1lIG1hcCBwYW5lKS5cclxuICBcdGJyaW5nVG9CYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0JhY2sodGhpcy5fY29udGFpbmVyKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gcHJlcGFyZSBib3VuZCBvdmVybGF5IHRvIG9wZW46IHVwZGF0ZSBsYXRsbmcgcG9zIC8gY29udGVudCBzb3VyY2UgKGZvciBGZWF0dXJlR3JvdXApXHJcbiAgXHRfcHJlcGFyZU9wZW46IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIHNvdXJjZSA9IHRoaXMuX3NvdXJjZTtcclxuICBcdFx0aWYgKCFzb3VyY2UuX21hcCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdGlmIChzb3VyY2UgaW5zdGFuY2VvZiBGZWF0dXJlR3JvdXApIHtcclxuICBcdFx0XHRzb3VyY2UgPSBudWxsO1xyXG4gIFx0XHRcdHZhciBsYXllcnMgPSB0aGlzLl9zb3VyY2UuX2xheWVycztcclxuICBcdFx0XHRmb3IgKHZhciBpZCBpbiBsYXllcnMpIHtcclxuICBcdFx0XHRcdGlmIChsYXllcnNbaWRdLl9tYXApIHtcclxuICBcdFx0XHRcdFx0c291cmNlID0gbGF5ZXJzW2lkXTtcclxuICBcdFx0XHRcdFx0YnJlYWs7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmICghc291cmNlKSB7IHJldHVybiBmYWxzZTsgfSAvLyBVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllci5cclxuXHJcbiAgXHRcdFx0Ly8gc2V0IG92ZXJsYXkgc291cmNlIHRvIHRoaXMgbGF5ZXJcclxuICBcdFx0XHR0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghbGF0bG5nKSB7XHJcbiAgXHRcdFx0aWYgKHNvdXJjZS5nZXRDZW50ZXIpIHtcclxuICBcdFx0XHRcdGxhdGxuZyA9IHNvdXJjZS5nZXRDZW50ZXIoKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKHNvdXJjZS5nZXRMYXRMbmcpIHtcclxuICBcdFx0XHRcdGxhdGxuZyA9IHNvdXJjZS5nZXRMYXRMbmcoKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKHNvdXJjZS5nZXRCb3VuZHMpIHtcclxuICBcdFx0XHRcdGxhdGxuZyA9IHNvdXJjZS5nZXRCb3VuZHMoKS5nZXRDZW50ZXIoKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllciBMYXRMbmcuJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuc2V0TGF0TG5nKGxhdGxuZyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0Ly8gdXBkYXRlIHRoZSBvdmVybGF5IChjb250ZW50LCBsYXlvdXQsIGV0Yy4uLilcclxuICBcdFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9jb250ZW50KSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dmFyIG5vZGUgPSB0aGlzLl9jb250ZW50Tm9kZTtcclxuICBcdFx0dmFyIGNvbnRlbnQgPSAodHlwZW9mIHRoaXMuX2NvbnRlbnQgPT09ICdmdW5jdGlvbicpID8gdGhpcy5fY29udGVudCh0aGlzLl9zb3VyY2UgfHwgdGhpcykgOiB0aGlzLl9jb250ZW50O1xyXG5cclxuICBcdFx0aWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdG5vZGUuaW5uZXJIVE1MID0gY29udGVudDtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR3aGlsZSAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcclxuICBcdFx0XHRcdG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0bm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBEaXZPdmVybGF5XHJcbiAgXHRcdC8vIEBzZWN0aW9uIERpdk92ZXJsYXkgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBjb250ZW50dXBkYXRlOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBjb250ZW50IG9mIHRoZSBvdmVybGF5IGlzIHVwZGF0ZWRcclxuICBcdFx0dGhpcy5maXJlKCdjb250ZW50dXBkYXRlJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksXHJcbiAgXHRcdCAgICBvZmZzZXQgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLFxyXG4gIFx0XHQgICAgYW5jaG9yID0gdGhpcy5fZ2V0QW5jaG9yKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLCBwb3MuYWRkKGFuY2hvcikpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG9mZnNldCA9IG9mZnNldC5hZGQocG9zKS5hZGQoYW5jaG9yKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGJvdHRvbSA9IHRoaXMuX2NvbnRhaW5lckJvdHRvbSA9IC1vZmZzZXQueSxcclxuICBcdFx0ICAgIGxlZnQgPSB0aGlzLl9jb250YWluZXJMZWZ0ID0gLU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGggLyAyKSArIG9mZnNldC54O1xyXG5cclxuICBcdFx0Ly8gYm90dG9tIHBvc2l0aW9uIHRoZSBvdmVybGF5IGluIGNhc2UgdGhlIGhlaWdodCBvZiB0aGUgb3ZlcmxheSBjaGFuZ2VzIChpbWFnZXMgbG9hZGluZyBldGMpXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b20gPSBib3R0b20gKyAncHgnO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0QW5jaG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBbMCwgMF07XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xyXG5cclxuICBNYXAuaW5jbHVkZSh7XHJcbiAgXHRfaW5pdE92ZXJsYXk6IGZ1bmN0aW9uIChPdmVybGF5Q2xhc3MsIGNvbnRlbnQsIGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHR2YXIgb3ZlcmxheSA9IGNvbnRlbnQ7XHJcbiAgXHRcdGlmICghKG92ZXJsYXkgaW5zdGFuY2VvZiBPdmVybGF5Q2xhc3MpKSB7XHJcbiAgXHRcdFx0b3ZlcmxheSA9IG5ldyBPdmVybGF5Q2xhc3Mob3B0aW9ucykuc2V0Q29udGVudChjb250ZW50KTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAobGF0bG5nKSB7XHJcbiAgXHRcdFx0b3ZlcmxheS5zZXRMYXRMbmcobGF0bG5nKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gb3ZlcmxheTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIExheWVyLmluY2x1ZGUoe1xyXG4gIFx0X2luaXRPdmVybGF5OiBmdW5jdGlvbiAoT3ZlcmxheUNsYXNzLCBvbGQsIGNvbnRlbnQsIG9wdGlvbnMpIHtcclxuICBcdFx0dmFyIG92ZXJsYXkgPSBjb250ZW50O1xyXG4gIFx0XHRpZiAob3ZlcmxheSBpbnN0YW5jZW9mIE92ZXJsYXlDbGFzcykge1xyXG4gIFx0XHRcdHNldE9wdGlvbnMob3ZlcmxheSwgb3B0aW9ucyk7XHJcbiAgXHRcdFx0b3ZlcmxheS5fc291cmNlID0gdGhpcztcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvdmVybGF5ID0gKG9sZCAmJiAhb3B0aW9ucykgPyBvbGQgOiBuZXcgT3ZlcmxheUNsYXNzKG9wdGlvbnMsIHRoaXMpO1xyXG4gIFx0XHRcdG92ZXJsYXkuc2V0Q29udGVudChjb250ZW50KTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gb3ZlcmxheTtcclxuICBcdH1cclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBQb3B1cFxyXG4gICAqIEBpbmhlcml0cyBEaXZPdmVybGF5XHJcbiAgICogQGFrYSBMLlBvcHVwXHJcbiAgICogVXNlZCB0byBvcGVuIHBvcHVwcyBpbiBjZXJ0YWluIHBsYWNlcyBvZiB0aGUgbWFwLiBVc2UgW01hcC5vcGVuUG9wdXBdKCNtYXAtb3BlbnBvcHVwKSB0b1xyXG4gICAqIG9wZW4gcG9wdXBzIHdoaWxlIG1ha2luZyBzdXJlIHRoYXQgb25seSBvbmUgcG9wdXAgaXMgb3BlbiBhdCBvbmUgdGltZVxyXG4gICAqIChyZWNvbW1lbmRlZCBmb3IgdXNhYmlsaXR5KSwgb3IgdXNlIFtNYXAuYWRkTGF5ZXJdKCNtYXAtYWRkbGF5ZXIpIHRvIG9wZW4gYXMgbWFueSBhcyB5b3Ugd2FudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBJZiB5b3Ugd2FudCB0byBqdXN0IGJpbmQgYSBwb3B1cCB0byBtYXJrZXIgY2xpY2sgYW5kIHRoZW4gb3BlbiBpdCwgaXQncyByZWFsbHkgZWFzeTpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogbWFya2VyLmJpbmRQb3B1cChwb3B1cENvbnRlbnQpLm9wZW5Qb3B1cCgpO1xyXG4gICAqIGBgYFxyXG4gICAqIFBhdGggb3ZlcmxheXMgbGlrZSBwb2x5bGluZXMgYWxzbyBoYXZlIGEgYGJpbmRQb3B1cGAgbWV0aG9kLlxyXG4gICAqXHJcbiAgICogQSBwb3B1cCBjYW4gYmUgYWxzbyBzdGFuZGFsb25lOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9wdXAgPSBMLnBvcHVwKClcclxuICAgKiBcdC5zZXRMYXRMbmcobGF0bG5nKVxyXG4gICAqIFx0LnNldENvbnRlbnQoJzxwPkhlbGxvIHdvcmxkITxiciAvPlRoaXMgaXMgYSBuaWNlIHBvcHVwLjwvcD4nKVxyXG4gICAqIFx0Lm9wZW5PbihtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqIG9yXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9wdXAgPSBMLnBvcHVwKGxhdGxuZywge2NvbnRlbnQ6ICc8cD5IZWxsbyB3b3JsZCE8YnIgLz5UaGlzIGlzIGEgbmljZSBwb3B1cC48L3A+JylcclxuICAgKiBcdC5vcGVuT24obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgUG9wdXBcclxuICB2YXIgUG9wdXAgPSBEaXZPdmVybGF5LmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgUG9wdXAgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIHBhbmU6IFN0cmluZyA9ICdwb3B1cFBhbmUnXHJcbiAgXHRcdC8vIGBNYXAgcGFuZWAgd2hlcmUgdGhlIHBvcHVwIHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHBhbmU6ICdwb3B1cFBhbmUnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBvZmZzZXQ6IFBvaW50ID0gUG9pbnQoMCwgNylcclxuICBcdFx0Ly8gVGhlIG9mZnNldCBvZiB0aGUgcG9wdXAgcG9zaXRpb24uXHJcbiAgXHRcdG9mZnNldDogWzAsIDddLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhXaWR0aDogTnVtYmVyID0gMzAwXHJcbiAgXHRcdC8vIE1heCB3aWR0aCBvZiB0aGUgcG9wdXAsIGluIHBpeGVscy5cclxuICBcdFx0bWF4V2lkdGg6IDMwMCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWluV2lkdGg6IE51bWJlciA9IDUwXHJcbiAgXHRcdC8vIE1pbiB3aWR0aCBvZiB0aGUgcG9wdXAsIGluIHBpeGVscy5cclxuICBcdFx0bWluV2lkdGg6IDUwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhIZWlnaHQ6IE51bWJlciA9IG51bGxcclxuICBcdFx0Ly8gSWYgc2V0LCBjcmVhdGVzIGEgc2Nyb2xsYWJsZSBjb250YWluZXIgb2YgdGhlIGdpdmVuIGhlaWdodFxyXG4gIFx0XHQvLyBpbnNpZGUgYSBwb3B1cCBpZiBpdHMgY29udGVudCBleGNlZWRzIGl0LlxyXG4gIFx0XHQvLyBUaGUgc2Nyb2xsYWJsZSBjb250YWluZXIgY2FuIGJlIHN0eWxlZCB1c2luZyB0aGVcclxuICBcdFx0Ly8gYGxlYWZsZXQtcG9wdXAtc2Nyb2xsZWRgIENTUyBjbGFzcyBzZWxlY3Rvci5cclxuICBcdFx0bWF4SGVpZ2h0OiBudWxsLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgbWFwIHRvIGRvIHBhbm5pbmcgYW5pbWF0aW9uXHJcbiAgXHRcdC8vIHRvIGZpdCB0aGUgb3BlbmVkIHBvcHVwLlxyXG4gIFx0XHRhdXRvUGFuOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtYXBcclxuICBcdFx0Ly8gdmlldyBhZnRlciBhdXRvcGFubmluZyB3YXMgcGVyZm9ybWVkLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgbWFwXHJcbiAgXHRcdC8vIHZpZXcgYWZ0ZXIgYXV0b3Bhbm5pbmcgd2FzIHBlcmZvcm1lZC5cclxuICBcdFx0YXV0b1BhblBhZGRpbmdCb3R0b21SaWdodDogbnVsbCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblBhZGRpbmc6IFBvaW50ID0gUG9pbnQoNSwgNSlcclxuICBcdFx0Ly8gRXF1aXZhbGVudCBvZiBzZXR0aW5nIGJvdGggdG9wIGxlZnQgYW5kIGJvdHRvbSByaWdodCBhdXRvcGFuIHBhZGRpbmcgdG8gdGhlIHNhbWUgdmFsdWUuXHJcbiAgXHRcdGF1dG9QYW5QYWRkaW5nOiBbNSwgNV0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGtlZXBJblZpZXc6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdXNlcnMgZnJvbSBwYW5uaW5nIHRoZSBwb3B1cFxyXG4gIFx0XHQvLyBvZmYgb2YgdGhlIHNjcmVlbiB3aGlsZSBpdCBpcyBvcGVuLlxyXG4gIFx0XHRrZWVwSW5WaWV3OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VCdXR0b246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIENvbnRyb2xzIHRoZSBwcmVzZW5jZSBvZiBhIGNsb3NlIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsb3NlQnV0dG9uOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvQ2xvc2U6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mXHJcbiAgXHRcdC8vIHRoZSBwb3B1cCBjbG9zaW5nIHdoZW4gYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgXHRcdGF1dG9DbG9zZTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VPbkVzY2FwZUtleTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2ZcclxuICBcdFx0Ly8gdGhlIEVTQyBrZXkgZm9yIGNsb3Npbmcgb2YgdGhlIHBvcHVwLlxyXG4gIFx0XHRjbG9zZU9uRXNjYXBlS2V5OiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbG9zZU9uQ2xpY2s6IEJvb2xlYW4gPSAqXHJcbiAgXHRcdC8vIFNldCBpdCBpZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgcG9wdXAgY2xvc2luZyB3aGVuIHVzZXIgY2xpY2tzXHJcbiAgXHRcdC8vIG9uIHRoZSBtYXAuIERlZmF1bHRzIHRvIHRoZSBtYXAncyBbYGNsb3NlUG9wdXBPbkNsaWNrYF0oI21hcC1jbG9zZXBvcHVwb25jbGljaykgb3B0aW9uLlxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIEEgY3VzdG9tIENTUyBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsYXNzTmFtZTogJydcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIFx0Ly8gQG1ldGhvZCBvcGVuT24obWFwOiBNYXApOiB0aGlzXHJcbiAgXHQvLyBBbHRlcm5hdGl2ZSB0byBgbWFwLm9wZW5Qb3B1cChwb3B1cClgLlxyXG4gIFx0Ly8gQWRkcyB0aGUgcG9wdXAgdG8gdGhlIG1hcCBhbmQgY2xvc2VzIHRoZSBwcmV2aW91cyBvbmUuXHJcbiAgXHRvcGVuT246IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwID0gYXJndW1lbnRzLmxlbmd0aCA/IG1hcCA6IHRoaXMuX3NvdXJjZS5fbWFwOyAvLyBleHBlcmltZW50YWwsIG5vdCB0aGUgcGFydCBvZiBwdWJsaWMgYXBpXHJcblxyXG4gIFx0XHRpZiAoIW1hcC5oYXNMYXllcih0aGlzKSAmJiBtYXAuX3BvcHVwICYmIG1hcC5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UpIHtcclxuICBcdFx0XHRtYXAucmVtb3ZlTGF5ZXIobWFwLl9wb3B1cCk7XHJcbiAgXHRcdH1cclxuICBcdFx0bWFwLl9wb3B1cCA9IHRoaXM7XHJcblxyXG4gIFx0XHRyZXR1cm4gRGl2T3ZlcmxheS5wcm90b3R5cGUub3Blbk9uLmNhbGwodGhpcywgbWFwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcclxuICBcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBwb3B1cG9wZW46IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGlzIG9wZW5lZCBpbiB0aGUgbWFwXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICBcdFx0XHQvLyBAbmFtZXNwYWNlIExheWVyXHJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHBvcHVwb3BlbjogUG9wdXBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGlzIG9wZW5lZFxyXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHQvLyBGb3Igbm9uLXBhdGggbGF5ZXJzLCB3ZSB0b2dnbGUgdGhlIHBvcHVwIHdoZW4gY2xpY2tpbmdcclxuICBcdFx0XHQvLyBhZ2FpbiB0aGUgbGF5ZXIsIHNvIHByZXZlbnQgdGhlIG1hcCB0byByZW9wZW4gaXQuXHJcbiAgXHRcdFx0aWYgKCEodGhpcy5fc291cmNlIGluc3RhbmNlb2YgUGF0aCkpIHtcclxuICBcdFx0XHRcdHRoaXMuX3NvdXJjZS5vbigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IHBvcHVwY2xvc2U6IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGluIHRoZSBtYXAgaXMgY2xvc2VkXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cGNsb3NlJywge3BvcHVwOiB0aGlzfSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgXHRcdFx0Ly8gQG5hbWVzcGFjZSBMYXllclxyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHRcdC8vIEBldmVudCBwb3B1cGNsb3NlOiBQb3B1cEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY2xvc2VkXHJcbiAgXHRcdFx0dGhpcy5fc291cmNlLmZpcmUoJ3BvcHVwY2xvc2UnLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHRpZiAoISh0aGlzLl9zb3VyY2UgaW5zdGFuY2VvZiBQYXRoKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fc291cmNlLm9mZigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGV2ZW50cyA9IERpdk92ZXJsYXkucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgIT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgOiB0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykge1xyXG4gIFx0XHRcdGV2ZW50cy5wcmVjbGljayA9IHRoaXMuY2xvc2U7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMua2VlcEluVmlldykge1xyXG4gIFx0XHRcdGV2ZW50cy5tb3ZlZW5kID0gdGhpcy5fYWRqdXN0UGFuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdExheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtcG9wdXAnLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsXHJcbiAgXHRcdFx0cHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICtcclxuICBcdFx0XHQnIGxlYWZsZXQtem9vbS1hbmltYXRlZCcpO1xyXG5cclxuICBcdFx0dmFyIHdyYXBwZXIgPSB0aGlzLl93cmFwcGVyID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctY29udGVudC13cmFwcGVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy1jb250ZW50Jywgd3JhcHBlcik7XHJcblxyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihjb250YWluZXIpO1xyXG4gIFx0XHRkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24odGhpcy5fY29udGVudE5vZGUpO1xyXG4gIFx0XHRvbihjb250YWluZXIsICdjb250ZXh0bWVudScsIHN0b3BQcm9wYWdhdGlvbik7XHJcblxyXG4gIFx0XHR0aGlzLl90aXBDb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy10aXAtY29udGFpbmVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fdGlwID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctdGlwJywgdGhpcy5fdGlwQ29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcclxuICBcdFx0XHR2YXIgY2xvc2VCdXR0b24gPSB0aGlzLl9jbG9zZUJ1dHRvbiA9IGNyZWF0ZSQxKCdhJywgcHJlZml4ICsgJy1jbG9zZS1idXR0b24nLCBjb250YWluZXIpO1xyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTsgLy8gb3ZlcnJpZGVzIHRoZSBpbXBsaWNpdCByb2xlPWxpbmsgb2YgPGE+IGVsZW1lbnRzICM3Mzk5XHJcbiAgXHRcdFx0Y2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlIHBvcHVwJyk7XHJcbiAgXHRcdFx0Y2xvc2VCdXR0b24uaHJlZiA9ICcjY2xvc2UnO1xyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLmlubmVySFRNTCA9ICc8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mIzIxNTs8L3NwYW4+JztcclxuXHJcbiAgXHRcdFx0b24oY2xvc2VCdXR0b24sICdjbGljaycsIGZ1bmN0aW9uIChldikge1xyXG4gIFx0XHRcdFx0cHJldmVudERlZmF1bHQoZXYpO1xyXG4gIFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xyXG4gIFx0XHRcdH0sIHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRlbnROb2RlLFxyXG4gIFx0XHQgICAgc3R5bGUgPSBjb250YWluZXIuc3R5bGU7XHJcblxyXG4gIFx0XHRzdHlsZS53aWR0aCA9ICcnO1xyXG4gIFx0XHRzdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XHJcblxyXG4gIFx0XHR2YXIgd2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgXHRcdHdpZHRoID0gTWF0aC5taW4od2lkdGgsIHRoaXMub3B0aW9ucy5tYXhXaWR0aCk7XHJcbiAgXHRcdHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHRoaXMub3B0aW9ucy5taW5XaWR0aCk7XHJcblxyXG4gIFx0XHRzdHlsZS53aWR0aCA9ICh3aWR0aCArIDEpICsgJ3B4JztcclxuICBcdFx0c3R5bGUud2hpdGVTcGFjZSA9ICcnO1xyXG5cclxuICBcdFx0c3R5bGUuaGVpZ2h0ID0gJyc7XHJcblxyXG4gIFx0XHR2YXIgaGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodCxcclxuICBcdFx0ICAgIG1heEhlaWdodCA9IHRoaXMub3B0aW9ucy5tYXhIZWlnaHQsXHJcbiAgXHRcdCAgICBzY3JvbGxlZENsYXNzID0gJ2xlYWZsZXQtcG9wdXAtc2Nyb2xsZWQnO1xyXG5cclxuICBcdFx0aWYgKG1heEhlaWdodCAmJiBoZWlnaHQgPiBtYXhIZWlnaHQpIHtcclxuICBcdFx0XHRzdHlsZS5oZWlnaHQgPSBtYXhIZWlnaHQgKyAncHgnO1xyXG4gIFx0XHRcdGFkZENsYXNzKGNvbnRhaW5lciwgc2Nyb2xsZWRDbGFzcyk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBzY3JvbGxlZENsYXNzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fY29udGFpbmVyV2lkdGggPSB0aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dmFyIHBvcyA9IHRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZywgZS56b29tLCBlLmNlbnRlciksXHJcbiAgXHRcdCAgICBhbmNob3IgPSB0aGlzLl9nZXRBbmNob3IoKTtcclxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLCBwb3MuYWRkKGFuY2hvcikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmF1dG9QYW4pIHsgcmV0dXJuOyB9XHJcbiAgXHRcdGlmICh0aGlzLl9tYXAuX3BhbkFuaW0pIHsgdGhpcy5fbWFwLl9wYW5BbmltLnN0b3AoKTsgfVxyXG5cclxuICBcdFx0Ly8gV2UgY2FuIGVuZGxlc3NseSByZWN1cnNlIGlmIGtlZXBJblZpZXcgaXMgc2V0IGFuZCB0aGUgdmlldyByZXNldHMuXHJcbiAgXHRcdC8vIExldCdzIGd1YXJkIGFnYWluc3QgdGhhdCBieSBleGl0aW5nIGVhcmx5IGlmIHdlJ3JlIHJlc3BvbmRpbmcgdG8gb3VyIG93biBhdXRvcGFuLlxyXG4gIFx0XHRpZiAodGhpcy5fYXV0b3Bhbm5pbmcpIHtcclxuICBcdFx0XHR0aGlzLl9hdXRvcGFubmluZyA9IGZhbHNlO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcclxuICBcdFx0ICAgIG1hcmdpbkJvdHRvbSA9IHBhcnNlSW50KGdldFN0eWxlKHRoaXMuX2NvbnRhaW5lciwgJ21hcmdpbkJvdHRvbScpLCAxMCkgfHwgMCxcclxuICBcdFx0ICAgIGNvbnRhaW5lckhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBtYXJnaW5Cb3R0b20sXHJcbiAgXHRcdCAgICBjb250YWluZXJXaWR0aCA9IHRoaXMuX2NvbnRhaW5lcldpZHRoLFxyXG4gIFx0XHQgICAgbGF5ZXJQb3MgPSBuZXcgUG9pbnQodGhpcy5fY29udGFpbmVyTGVmdCwgLWNvbnRhaW5lckhlaWdodCAtIHRoaXMuX2NvbnRhaW5lckJvdHRvbSk7XHJcblxyXG4gIFx0XHRsYXllclBvcy5fYWRkKGdldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcikpO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lclBvcyA9IG1hcC5sYXllclBvaW50VG9Db250YWluZXJQb2ludChsYXllclBvcyksXHJcbiAgXHRcdCAgICBwYWRkaW5nID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLFxyXG4gIFx0XHQgICAgcGFkZGluZ1RMID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0IHx8IHBhZGRpbmcpLFxyXG4gIFx0XHQgICAgcGFkZGluZ0JSID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodCB8fCBwYWRkaW5nKSxcclxuICBcdFx0ICAgIHNpemUgPSBtYXAuZ2V0U2l6ZSgpLFxyXG4gIFx0XHQgICAgZHggPSAwLFxyXG4gIFx0XHQgICAgZHkgPSAwO1xyXG5cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy54ICsgY29udGFpbmVyV2lkdGggKyBwYWRkaW5nQlIueCA+IHNpemUueCkgeyAvLyByaWdodFxyXG4gIFx0XHRcdGR4ID0gY29udGFpbmVyUG9zLnggKyBjb250YWluZXJXaWR0aCAtIHNpemUueCArIHBhZGRpbmdCUi54O1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmIChjb250YWluZXJQb3MueCAtIGR4IC0gcGFkZGluZ1RMLnggPCAwKSB7IC8vIGxlZnRcclxuICBcdFx0XHRkeCA9IGNvbnRhaW5lclBvcy54IC0gcGFkZGluZ1RMLng7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy55ICsgY29udGFpbmVySGVpZ2h0ICsgcGFkZGluZ0JSLnkgPiBzaXplLnkpIHsgLy8gYm90dG9tXHJcbiAgXHRcdFx0ZHkgPSBjb250YWluZXJQb3MueSArIGNvbnRhaW5lckhlaWdodCAtIHNpemUueSArIHBhZGRpbmdCUi55O1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmIChjb250YWluZXJQb3MueSAtIGR5IC0gcGFkZGluZ1RMLnkgPCAwKSB7IC8vIHRvcFxyXG4gIFx0XHRcdGR5ID0gY29udGFpbmVyUG9zLnkgLSBwYWRkaW5nVEwueTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcclxuICBcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBhdXRvcGFuc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBzdGFydHMgYXV0b3Bhbm5pbmcgd2hlbiBvcGVuaW5nIGEgcG9wdXAuXHJcbiAgXHRcdGlmIChkeCB8fCBkeSkge1xyXG4gIFx0XHRcdC8vIFRyYWNrIHRoYXQgd2UncmUgYXV0b3Bhbm5pbmcsIGFzIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZS1yYW4gb24gbW92ZWVuZFxyXG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMua2VlcEluVmlldykge1xyXG4gIFx0XHRcdFx0dGhpcy5fYXV0b3Bhbm5pbmcgPSB0cnVlO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0bWFwXHJcbiAgXHRcdFx0ICAgIC5maXJlKCdhdXRvcGFuc3RhcnQnKVxyXG4gIFx0XHRcdCAgICAucGFuQnkoW2R4LCBkeV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gV2hlcmUgc2hvdWxkIHdlIGFuY2hvciB0aGUgcG9wdXAgb24gdGhlIHNvdXJjZSBsYXllcj9cclxuICBcdFx0cmV0dXJuIHRvUG9pbnQodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3IgPyB0aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCkgOiBbMCwgMF0pO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIC8vIEBmYWN0b3J5IEwucG9wdXAob3B0aW9ucz86IFBvcHVwIG9wdGlvbnMsIHNvdXJjZT86IExheWVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIGBQb3B1cGAgb2JqZWN0IGdpdmVuIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uIGFuZCBhbiBvcHRpb25hbCBgc291cmNlYCBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHRhZyB0aGUgcG9wdXAgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgTGF5ZXIgdG8gd2hpY2ggaXQgcmVmZXJzLlxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwucG9wdXAobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIGBQb3B1cGAgb2JqZWN0IGdpdmVuIGBsYXRsbmdgIHdoZXJlIHRoZSBwb3B1cCB3aWxsIG9wZW4gYW5kIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uLlxyXG4gIHZhciBwb3B1cCA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcclxuICBcdHJldHVybiBuZXcgUG9wdXAob3B0aW9ucywgc291cmNlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgICogQG9wdGlvbiBjbG9zZVBvcHVwT25DbGljazogQm9vbGVhbiA9IHRydWVcclxuICAgKiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCBwb3B1cHMgdG8gY2xvc2Ugd2hlbiB1c2VyIGNsaWNrcyB0aGUgbWFwLlxyXG4gICAqL1xyXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xyXG4gIFx0Y2xvc2VQb3B1cE9uQ2xpY2s6IHRydWVcclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgLy8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgTGF5ZXJzIGFuZCBDb250cm9sc1xyXG4gIE1hcC5pbmNsdWRlKHtcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKHBvcHVwOiBQb3B1cCk6IHRoaXNcclxuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgcG9wdXAgd2hpbGUgY2xvc2luZyB0aGUgcHJldmlvdXNseSBvcGVuZWQgKHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBpcyBvcGVuZWQgYXQgb25lIHRpbWUgZm9yIHVzYWJpbGl0eSkuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQ3JlYXRlcyBhIHBvcHVwIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25zIGFuZCBvcGVucyBpdCBpbiB0aGUgZ2l2ZW4gcG9pbnQgb24gYSBtYXAuXHJcbiAgXHRvcGVuUG9wdXA6IGZ1bmN0aW9uIChwb3B1cCwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdHRoaXMuX2luaXRPdmVybGF5KFBvcHVwLCBwb3B1cCwgbGF0bG5nLCBvcHRpb25zKVxyXG4gIFx0XHQgIC5vcGVuT24odGhpcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZVBvcHVwKHBvcHVwPzogUG9wdXApOiB0aGlzXHJcbiAgXHQvLyBDbG9zZXMgdGhlIHBvcHVwIHByZXZpb3VzbHkgb3BlbmVkIHdpdGggW29wZW5Qb3B1cF0oI21hcC1vcGVucG9wdXApIChvciB0aGUgZ2l2ZW4gb25lKS5cclxuICBcdGNsb3NlUG9wdXA6IGZ1bmN0aW9uIChwb3B1cCkge1xyXG4gIFx0XHRwb3B1cCA9IGFyZ3VtZW50cy5sZW5ndGggPyBwb3B1cCA6IHRoaXMuX3BvcHVwO1xyXG4gIFx0XHRpZiAocG9wdXApIHtcclxuICBcdFx0XHRwb3B1cC5jbG9zZSgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgTGF5ZXJcclxuICAgKiBAc2VjdGlvbiBQb3B1cCBtZXRob2RzIGV4YW1wbGVcclxuICAgKlxyXG4gICAqIEFsbCBsYXllcnMgc2hhcmUgYSBzZXQgb2YgbWV0aG9kcyBjb252ZW5pZW50IGZvciBiaW5kaW5nIHBvcHVwcyB0byBpdC5cclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIGxheWVyID0gTC5Qb2x5Z29uKGxhdGxuZ3MpLmJpbmRQb3B1cCgnSGkgVGhlcmUhJykuYWRkVG8obWFwKTtcclxuICAgKiBsYXllci5vcGVuUG9wdXAoKTtcclxuICAgKiBsYXllci5jbG9zZVBvcHVwKCk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBQb3B1cHMgd2lsbCBhbHNvIGJlIGF1dG9tYXRpY2FsbHkgb3BlbmVkIHdoZW4gdGhlIGxheWVyIGlzIGNsaWNrZWQgb24gYW5kIGNsb3NlZCB3aGVuIHRoZSBsYXllciBpcyByZW1vdmVkIGZyb20gdGhlIG1hcCBvciBhbm90aGVyIHBvcHVwIGlzIG9wZW5lZC5cclxuICAgKi9cclxuXHJcbiAgLy8gQHNlY3Rpb24gUG9wdXAgbWV0aG9kc1xyXG4gIExheWVyLmluY2x1ZGUoe1xyXG5cclxuICBcdC8vIEBtZXRob2QgYmluZFBvcHVwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxGdW5jdGlvbnxQb3B1cCwgb3B0aW9ucz86IFBvcHVwIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBCaW5kcyBhIHBvcHVwIHRvIHRoZSBsYXllciB3aXRoIHRoZSBwYXNzZWQgYGNvbnRlbnRgIGFuZCBzZXRzIHVwIHRoZVxyXG4gIFx0Ly8gbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVycy4gSWYgYSBgRnVuY3Rpb25gIGlzIHBhc3NlZCBpdCB3aWxsIHJlY2VpdmVcclxuICBcdC8vIHRoZSBsYXllciBhcyB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHNob3VsZCByZXR1cm4gYSBgU3RyaW5nYCBvciBgSFRNTEVsZW1lbnRgLlxyXG4gIFx0YmluZFBvcHVwOiBmdW5jdGlvbiAoY29udGVudCwgb3B0aW9ucykge1xyXG4gIFx0XHR0aGlzLl9wb3B1cCA9IHRoaXMuX2luaXRPdmVybGF5KFBvcHVwLCB0aGlzLl9wb3B1cCwgY29udGVudCwgb3B0aW9ucyk7XHJcbiAgXHRcdGlmICghdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5vbih7XHJcbiAgXHRcdFx0XHRjbGljazogdGhpcy5fb3BlblBvcHVwLFxyXG4gIFx0XHRcdFx0a2V5cHJlc3M6IHRoaXMuX29uS2V5UHJlc3MsXHJcbiAgXHRcdFx0XHRyZW1vdmU6IHRoaXMuY2xvc2VQb3B1cCxcclxuICBcdFx0XHRcdG1vdmU6IHRoaXMuX21vdmVQb3B1cFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZCA9IHRydWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVuYmluZFBvcHVwKCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIHBvcHVwIHByZXZpb3VzbHkgYm91bmQgd2l0aCBgYmluZFBvcHVwYC5cclxuICBcdHVuYmluZFBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMub2ZmKHtcclxuICBcdFx0XHRcdGNsaWNrOiB0aGlzLl9vcGVuUG9wdXAsXHJcbiAgXHRcdFx0XHRrZXlwcmVzczogdGhpcy5fb25LZXlQcmVzcyxcclxuICBcdFx0XHRcdHJlbW92ZTogdGhpcy5jbG9zZVBvcHVwLFxyXG4gIFx0XHRcdFx0bW92ZTogdGhpcy5fbW92ZVBvcHVwXHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkID0gZmFsc2U7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5Qb3B1cChsYXRsbmc/OiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgcG9wdXAgYXQgdGhlIHNwZWNpZmllZCBgbGF0bG5nYCBvciBhdCB0aGUgZGVmYXVsdCBwb3B1cCBhbmNob3IgaWYgbm8gYGxhdGxuZ2AgaXMgcGFzc2VkLlxyXG4gIFx0b3BlblBvcHVwOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBGZWF0dXJlR3JvdXApKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9wb3B1cC5fc291cmNlID0gdGhpcztcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKHRoaXMuX3BvcHVwLl9wcmVwYXJlT3BlbihsYXRsbmcgfHwgdGhpcy5fbGF0bG5nKSkge1xyXG4gIFx0XHRcdFx0Ly8gb3BlbiB0aGUgcG9wdXAgb24gdGhlIG1hcFxyXG4gIFx0XHRcdFx0dGhpcy5fcG9wdXAub3Blbk9uKHRoaXMuX21hcCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsb3NlUG9wdXAoKTogdGhpc1xyXG4gIFx0Ly8gQ2xvc2VzIHRoZSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGlmIGl0IGlzIG9wZW4uXHJcbiAgXHRjbG9zZVBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9nZ2xlUG9wdXAoKTogdGhpc1xyXG4gIFx0Ly8gT3BlbnMgb3IgY2xvc2VzIHRoZSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGRlcGVuZGluZyBvbiBpdHMgY3VycmVudCBzdGF0ZS5cclxuICBcdHRvZ2dsZVBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnRvZ2dsZSh0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpc1BvcHVwT3BlbigpOiBib29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBjdXJyZW50bHkgb3Blbi5cclxuICBcdGlzUG9wdXBPcGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAodGhpcy5fcG9wdXAgPyB0aGlzLl9wb3B1cC5pc09wZW4oKSA6IGZhbHNlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRQb3B1cENvbnRlbnQoY29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fFBvcHVwKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgY29udGVudCBvZiB0aGUgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllci5cclxuICBcdHNldFBvcHVwQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAuc2V0Q29udGVudChjb250ZW50KTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQb3B1cCgpOiBQb3B1cFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllci5cclxuICBcdGdldFBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9wb3B1cDtcclxuICBcdH0sXHJcblxyXG4gIFx0X29wZW5Qb3B1cDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9wb3B1cCB8fCAhdGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcbiAgXHRcdC8vIHByZXZlbnQgbWFwIGNsaWNrXHJcbiAgXHRcdHN0b3AoZSk7XHJcblxyXG4gIFx0XHR2YXIgdGFyZ2V0ID0gZS5sYXllciB8fCBlLnRhcmdldDtcclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwLl9zb3VyY2UgPT09IHRhcmdldCAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFBhdGgpKSB7XHJcbiAgXHRcdFx0Ly8gdHJlYXQgaXQgbGlrZSBhIG1hcmtlciBhbmQgZmlndXJlIG91dFxyXG4gIFx0XHRcdC8vIGlmIHdlIHNob3VsZCB0b2dnbGUgaXQgb3Blbi9jbG9zZWRcclxuICBcdFx0XHRpZiAodGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdHRoaXMub3BlblBvcHVwKGUubGF0bG5nKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX3BvcHVwLl9zb3VyY2UgPSB0YXJnZXQ7XHJcbiAgXHRcdHRoaXMub3BlblBvcHVwKGUubGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X21vdmVQb3B1cDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dGhpcy5fcG9wdXAuc2V0TGF0TG5nKGUubGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uS2V5UHJlc3M6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmIChlLm9yaWdpbmFsRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcclxuICBcdFx0XHR0aGlzLl9vcGVuUG9wdXAoZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgVG9vbHRpcFxuICAgKiBAaW5oZXJpdHMgRGl2T3ZlcmxheVxuICAgKiBAYWthIEwuVG9vbHRpcFxuICAgKiBVc2VkIHRvIGRpc3BsYXkgc21hbGwgdGV4dHMgb24gdG9wIG9mIG1hcCBsYXllcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIElmIHlvdSB3YW50IHRvIGp1c3QgYmluZCBhIHRvb2x0aXAgdG8gbWFya2VyOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBtYXJrZXIuYmluZFRvb2x0aXAoXCJteSB0b29sdGlwIHRleHRcIikub3BlblRvb2x0aXAoKTtcbiAgICogYGBgXG4gICAqIFBhdGggb3ZlcmxheXMgbGlrZSBwb2x5bGluZXMgYWxzbyBoYXZlIGEgYGJpbmRUb29sdGlwYCBtZXRob2QuXG4gICAqXG4gICAqIEEgdG9vbHRpcCBjYW4gYmUgYWxzbyBzdGFuZGFsb25lOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgdG9vbHRpcCA9IEwudG9vbHRpcCgpXG4gICAqIFx0LnNldExhdExuZyhsYXRsbmcpXG4gICAqIFx0LnNldENvbnRlbnQoJ0hlbGxvIHdvcmxkITxiciAvPlRoaXMgaXMgYSBuaWNlIHRvb2x0aXAuJylcbiAgICogXHQuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqIG9yXG4gICAqIGBgYGpzXG4gICAqIHZhciB0b29sdGlwID0gTC50b29sdGlwKGxhdGxuZywge2NvbnRlbnQ6ICdIZWxsbyB3b3JsZCE8YnIgLz5UaGlzIGlzIGEgbmljZSB0b29sdGlwLid9KVxuICAgKiBcdC5hZGRUbyhtYXApO1xuICAgKiBgYGBcbiAgICpcbiAgICpcbiAgICogTm90ZSBhYm91dCB0b29sdGlwIG9mZnNldC4gTGVhZmxldCB0YWtlcyB0d28gb3B0aW9ucyBpbiBjb25zaWRlcmF0aW9uXG4gICAqIGZvciBjb21wdXRpbmcgdG9vbHRpcCBvZmZzZXR0aW5nOlxuICAgKiAtIHRoZSBgb2Zmc2V0YCBUb29sdGlwIG9wdGlvbjogaXQgZGVmYXVsdHMgdG8gWzAsIDBdLCBhbmQgaXQncyBzcGVjaWZpYyB0byBvbmUgdG9vbHRpcC5cbiAgICogICBBZGQgYSBwb3NpdGl2ZSB4IG9mZnNldCB0byBtb3ZlIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCwgYW5kIGEgcG9zaXRpdmUgeSBvZmZzZXQgdG9cbiAgICogICBtb3ZlIGl0IHRvIHRoZSBib3R0b20uIE5lZ2F0aXZlcyB3aWxsIG1vdmUgdG8gdGhlIGxlZnQgYW5kIHRvcC5cbiAgICogLSB0aGUgYHRvb2x0aXBBbmNob3JgIEljb24gb3B0aW9uOiB0aGlzIHdpbGwgb25seSBiZSBjb25zaWRlcmVkIGZvciBNYXJrZXIuIFlvdVxuICAgKiAgIHNob3VsZCBhZGFwdCB0aGlzIHZhbHVlIGlmIHlvdSB1c2UgYSBjdXN0b20gaWNvbi5cbiAgICovXG5cblxuICAvLyBAbmFtZXNwYWNlIFRvb2x0aXBcbiAgdmFyIFRvb2x0aXAgPSBEaXZPdmVybGF5LmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgVG9vbHRpcCBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndG9vbHRpcFBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndG9vbHRpcFBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9mZnNldDogUG9pbnQgPSBQb2ludCgwLCAwKVxuICBcdFx0Ly8gT3B0aW9uYWwgb2Zmc2V0IG9mIHRoZSB0b29sdGlwIHBvc2l0aW9uLlxuICBcdFx0b2Zmc2V0OiBbMCwgMF0sXG5cbiAgXHRcdC8vIEBvcHRpb24gZGlyZWN0aW9uOiBTdHJpbmcgPSAnYXV0bydcbiAgXHRcdC8vIERpcmVjdGlvbiB3aGVyZSB0byBvcGVuIHRoZSB0b29sdGlwLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBgcmlnaHRgLCBgbGVmdGAsXG4gIFx0XHQvLyBgdG9wYCwgYGJvdHRvbWAsIGBjZW50ZXJgLCBgYXV0b2AuXG4gIFx0XHQvLyBgYXV0b2Agd2lsbCBkeW5hbWljYWxseSBzd2l0Y2ggYmV0d2VlbiBgcmlnaHRgIGFuZCBgbGVmdGAgYWNjb3JkaW5nIHRvIHRoZSB0b29sdGlwXG4gIFx0XHQvLyBwb3NpdGlvbiBvbiB0aGUgbWFwLlxuICBcdFx0ZGlyZWN0aW9uOiAnYXV0bycsXG5cbiAgXHRcdC8vIEBvcHRpb24gcGVybWFuZW50OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIFdoZXRoZXIgdG8gb3BlbiB0aGUgdG9vbHRpcCBwZXJtYW5lbnRseSBvciBvbmx5IG9uIG1vdXNlb3Zlci5cbiAgXHRcdHBlcm1hbmVudDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gc3RpY2t5OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIElmIHRydWUsIHRoZSB0b29sdGlwIHdpbGwgZm9sbG93IHRoZSBtb3VzZSBpbnN0ZWFkIG9mIGJlaW5nIGZpeGVkIGF0IHRoZSBmZWF0dXJlIGNlbnRlci5cbiAgXHRcdHN0aWNreTogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gb3BhY2l0eTogTnVtYmVyID0gMC45XG4gIFx0XHQvLyBUb29sdGlwIGNvbnRhaW5lciBvcGFjaXR5LlxuICBcdFx0b3BhY2l0eTogMC45XG4gIFx0fSxcblxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsIG1hcCk7XG4gIFx0XHR0aGlzLnNldE9wYWNpdHkodGhpcy5vcHRpb25zLm9wYWNpdHkpO1xuXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxuICBcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdC8vIEBldmVudCB0b29sdGlwb3BlbjogVG9vbHRpcEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdG9vbHRpcCBpcyBvcGVuZWQgaW4gdGhlIG1hcC5cbiAgXHRcdG1hcC5maXJlKCd0b29sdGlwb3BlbicsIHt0b29sdGlwOiB0aGlzfSk7XG5cbiAgXHRcdGlmICh0aGlzLl9zb3VyY2UpIHtcbiAgXHRcdFx0dGhpcy5hZGRFdmVudFBhcmVudCh0aGlzLl9zb3VyY2UpO1xuXG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdFx0Ly8gQGV2ZW50IHRvb2x0aXBvcGVuOiBUb29sdGlwRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBvcGVuZWQuXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCd0b29sdGlwb3BlbicsIHt0b29sdGlwOiB0aGlzfSwgdHJ1ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG5cbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXG4gIFx0XHQvLyBAc2VjdGlvbiBUb29sdGlwIGV2ZW50c1xuICBcdFx0Ly8gQGV2ZW50IHRvb2x0aXBjbG9zZTogVG9vbHRpcEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdG9vbHRpcCBpbiB0aGUgbWFwIGlzIGNsb3NlZC5cbiAgXHRcdG1hcC5maXJlKCd0b29sdGlwY2xvc2UnLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRQYXJlbnQodGhpcy5fc291cmNlKTtcblxuICBcdFx0XHQvLyBAbmFtZXNwYWNlIExheWVyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFRvb2x0aXAgZXZlbnRzXG4gIFx0XHRcdC8vIEBldmVudCB0b29sdGlwY2xvc2U6IFRvb2x0aXBFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlzIGNsb3NlZC5cbiAgXHRcdFx0dGhpcy5fc291cmNlLmZpcmUoJ3Rvb2x0aXBjbG9zZScsIHt0b29sdGlwOiB0aGlzfSwgdHJ1ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IERpdk92ZXJsYXkucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xuXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5wZXJtYW5lbnQpIHtcbiAgXHRcdFx0ZXZlbnRzLnByZWNsaWNrID0gdGhpcy5jbG9zZTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBwcmVmaXggPSAnbGVhZmxldC10b29sdGlwJyxcbiAgXHRcdCAgICBjbGFzc05hbWUgPSBwcmVmaXggKyAnICcgKyAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSB8fCAnJykgKyAnIGxlYWZsZXQtem9vbS0nICsgKHRoaXMuX3pvb21BbmltYXRlZCA/ICdhbmltYXRlZCcgOiAnaGlkZScpO1xuXG4gIFx0XHR0aGlzLl9jb250ZW50Tm9kZSA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpO1xuXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3Rvb2x0aXAnKTtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2xlYWZsZXQtdG9vbHRpcC0nICsgc3RhbXAodGhpcykpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlTGF5b3V0OiBmdW5jdGlvbiAoKSB7fSxcblxuICBcdF9hZGp1c3RQYW46IGZ1bmN0aW9uICgpIHt9LFxuXG4gIFx0X3NldFBvc2l0aW9uOiBmdW5jdGlvbiAocG9zKSB7XG4gIFx0XHR2YXIgc3ViWCwgc3ViWSxcbiAgXHRcdCAgICBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICBcdFx0ICAgIGNlbnRlclBvaW50ID0gbWFwLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQobWFwLmdldENlbnRlcigpKSxcbiAgXHRcdCAgICB0b29sdGlwUG9pbnQgPSBtYXAubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQocG9zKSxcbiAgXHRcdCAgICBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLFxuICBcdFx0ICAgIHRvb2x0aXBXaWR0aCA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aCxcbiAgXHRcdCAgICB0b29sdGlwSGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgXHRcdCAgICBvZmZzZXQgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLFxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xuXG4gIFx0XHRpZiAoZGlyZWN0aW9uID09PSAndG9wJykge1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoIC8gMjtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQ7XG4gIFx0XHR9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCAvIDI7XG4gIFx0XHRcdHN1YlkgPSAwO1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdjZW50ZXInKSB7XG4gIFx0XHRcdHN1YlggPSB0b29sdGlwV2lkdGggLyAyO1xuICBcdFx0XHRzdWJZID0gdG9vbHRpcEhlaWdodCAvIDI7XG4gIFx0XHR9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICBcdFx0XHRzdWJYID0gMDtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoO1xuICBcdFx0XHRzdWJZID0gdG9vbHRpcEhlaWdodCAvIDI7XG4gIFx0XHR9IGVsc2UgaWYgKHRvb2x0aXBQb2ludC54IDwgY2VudGVyUG9pbnQueCkge1xuICBcdFx0XHRkaXJlY3Rpb24gPSAncmlnaHQnO1xuICBcdFx0XHRzdWJYID0gMDtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0ZGlyZWN0aW9uID0gJ2xlZnQnO1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoICsgKG9mZnNldC54ICsgYW5jaG9yLngpICogMjtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fVxuXG4gIFx0XHRwb3MgPSBwb3Muc3VidHJhY3QodG9Qb2ludChzdWJYLCBzdWJZLCB0cnVlKSkuYWRkKG9mZnNldCkuYWRkKGFuY2hvcik7XG5cbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC1yaWdodCcpO1xuICBcdFx0cmVtb3ZlQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC10b29sdGlwLWxlZnQnKTtcbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC10b3AnKTtcbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC1ib3R0b20nKTtcbiAgXHRcdGFkZENsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC0nICsgZGlyZWN0aW9uKTtcbiAgXHRcdHNldFBvc2l0aW9uKGNvbnRhaW5lciwgcG9zKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO1xuICBcdFx0dGhpcy5fc2V0UG9zaXRpb24ocG9zKTtcbiAgXHR9LFxuXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3BhY2l0eTtcblxuICBcdFx0aWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICBcdFx0XHRzZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwgb3BhY2l0eSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsIGUuem9vbSwgZS5jZW50ZXIpO1xuICBcdFx0dGhpcy5fc2V0UG9zaXRpb24ocG9zKTtcbiAgXHR9LFxuXG4gIFx0X2dldEFuY2hvcjogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gV2hlcmUgc2hvdWxkIHdlIGFuY2hvciB0aGUgdG9vbHRpcCBvbiB0aGUgc291cmNlIGxheWVyP1xuICBcdFx0cmV0dXJuIHRvUG9pbnQodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciAmJiAhdGhpcy5vcHRpb25zLnN0aWNreSA/IHRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvcigpIDogWzAsIDBdKTtcbiAgXHR9XG5cbiAgfSk7XG5cbiAgLy8gQG5hbWVzcGFjZSBUb29sdGlwXG4gIC8vIEBmYWN0b3J5IEwudG9vbHRpcChvcHRpb25zPzogVG9vbHRpcCBvcHRpb25zLCBzb3VyY2U/OiBMYXllcilcbiAgLy8gSW5zdGFudGlhdGVzIGEgYFRvb2x0aXBgIG9iamVjdCBnaXZlbiBhbiBvcHRpb25hbCBgb3B0aW9uc2Agb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGl0cyBhcHBlYXJhbmNlIGFuZCBsb2NhdGlvbiBhbmQgYW4gb3B0aW9uYWwgYHNvdXJjZWAgb2JqZWN0IHRoYXQgaXMgdXNlZCB0byB0YWcgdGhlIHRvb2x0aXAgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgTGF5ZXIgdG8gd2hpY2ggaXQgcmVmZXJzLlxuICAvLyBAYWx0ZXJuYXRpdmVcbiAgLy8gQGZhY3RvcnkgTC50b29sdGlwKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogVG9vbHRpcCBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYSBgVG9vbHRpcGAgb2JqZWN0IGdpdmVuIGBsYXRsbmdgIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgb3BlbiBhbmQgYW4gb3B0aW9uYWwgYG9wdGlvbnNgIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBpdHMgYXBwZWFyYW5jZSBhbmQgbG9jYXRpb24uXG4gIHZhciB0b29sdGlwID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICBcdHJldHVybiBuZXcgVG9vbHRpcChvcHRpb25zLCBzb3VyY2UpO1xuICB9O1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgTWFwLmluY2x1ZGUoe1xuXG4gIFx0Ly8gQG1ldGhvZCBvcGVuVG9vbHRpcCh0b29sdGlwOiBUb29sdGlwKTogdGhpc1xuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgdG9vbHRpcC5cbiAgXHQvLyBAYWx0ZXJuYXRpdmVcbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBUb29sdGlwIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ3JlYXRlcyBhIHRvb2x0aXAgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIG9wdGlvbnMgYW5kIG9wZW4gaXQuXG4gIFx0b3BlblRvb2x0aXA6IGZ1bmN0aW9uICh0b29sdGlwLCBsYXRsbmcsIG9wdGlvbnMpIHtcbiAgXHRcdHRoaXMuX2luaXRPdmVybGF5KFRvb2x0aXAsIHRvb2x0aXAsIGxhdGxuZywgb3B0aW9ucylcbiAgXHRcdCAgLm9wZW5Pbih0aGlzKTtcblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VUb29sdGlwKHRvb2x0aXA6IFRvb2x0aXApOiB0aGlzXG4gIFx0Ly8gQ2xvc2VzIHRoZSB0b29sdGlwIGdpdmVuIGFzIHBhcmFtZXRlci5cbiAgXHRjbG9zZVRvb2x0aXA6IGZ1bmN0aW9uICh0b29sdGlwKSB7XG4gIFx0XHR0b29sdGlwLmNsb3NlKCk7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9XG5cbiAgfSk7XG5cbiAgLypcbiAgICogQG5hbWVzcGFjZSBMYXllclxuICAgKiBAc2VjdGlvbiBUb29sdGlwIG1ldGhvZHMgZXhhbXBsZVxuICAgKlxuICAgKiBBbGwgbGF5ZXJzIHNoYXJlIGEgc2V0IG9mIG1ldGhvZHMgY29udmVuaWVudCBmb3IgYmluZGluZyB0b29sdGlwcyB0byBpdC5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIGxheWVyID0gTC5Qb2x5Z29uKGxhdGxuZ3MpLmJpbmRUb29sdGlwKCdIaSBUaGVyZSEnKS5hZGRUbyhtYXApO1xuICAgKiBsYXllci5vcGVuVG9vbHRpcCgpO1xuICAgKiBsYXllci5jbG9zZVRvb2x0aXAoKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIC8vIEBzZWN0aW9uIFRvb2x0aXAgbWV0aG9kc1xuICBMYXllci5pbmNsdWRlKHtcblxuICBcdC8vIEBtZXRob2QgYmluZFRvb2x0aXAoY29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fEZ1bmN0aW9ufFRvb2x0aXAsIG9wdGlvbnM/OiBUb29sdGlwIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQmluZHMgYSB0b29sdGlwIHRvIHRoZSBsYXllciB3aXRoIHRoZSBwYXNzZWQgYGNvbnRlbnRgIGFuZCBzZXRzIHVwIHRoZVxuICBcdC8vIG5lY2Vzc2FyeSBldmVudCBsaXN0ZW5lcnMuIElmIGEgYEZ1bmN0aW9uYCBpcyBwYXNzZWQgaXQgd2lsbCByZWNlaXZlXG4gIFx0Ly8gdGhlIGxheWVyIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgc2hvdWxkIHJldHVybiBhIGBTdHJpbmdgIG9yIGBIVE1MRWxlbWVudGAuXG4gIFx0YmluZFRvb2x0aXA6IGZ1bmN0aW9uIChjb250ZW50LCBvcHRpb25zKSB7XG5cbiAgXHRcdGlmICh0aGlzLl90b29sdGlwICYmIHRoaXMuaXNUb29sdGlwT3BlbigpKSB7XG4gIFx0XHRcdHRoaXMudW5iaW5kVG9vbHRpcCgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl90b29sdGlwID0gdGhpcy5faW5pdE92ZXJsYXkoVG9vbHRpcCwgdGhpcy5fdG9vbHRpcCwgY29udGVudCwgb3B0aW9ucyk7XG4gIFx0XHR0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpO1xuXG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudCAmJiB0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpKSB7XG4gIFx0XHRcdHRoaXMub3BlblRvb2x0aXAoKTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgdW5iaW5kVG9vbHRpcCgpOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgdG9vbHRpcCBwcmV2aW91c2x5IGJvdW5kIHdpdGggYGJpbmRUb29sdGlwYC5cbiAgXHR1bmJpbmRUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCkge1xuICBcdFx0XHR0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyh0cnVlKTtcbiAgXHRcdFx0dGhpcy5jbG9zZVRvb2x0aXAoKTtcbiAgXHRcdFx0dGhpcy5fdG9vbHRpcCA9IG51bGw7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0X2luaXRUb29sdGlwSW50ZXJhY3Rpb25zOiBmdW5jdGlvbiAocmVtb3ZlKSB7XG4gIFx0XHRpZiAoIXJlbW92ZSAmJiB0aGlzLl90b29sdGlwSGFuZGxlcnNBZGRlZCkgeyByZXR1cm47IH1cbiAgXHRcdHZhciBvbk9mZiA9IHJlbW92ZSA/ICdvZmYnIDogJ29uJyxcbiAgXHRcdCAgICBldmVudHMgPSB7XG4gIFx0XHRcdHJlbW92ZTogdGhpcy5jbG9zZVRvb2x0aXAsXG4gIFx0XHRcdG1vdmU6IHRoaXMuX21vdmVUb29sdGlwXG4gIFx0XHQgICAgfTtcbiAgXHRcdGlmICghdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudCkge1xuICBcdFx0XHRldmVudHMubW91c2VvdmVyID0gdGhpcy5fb3BlblRvb2x0aXA7XG4gIFx0XHRcdGV2ZW50cy5tb3VzZW91dCA9IHRoaXMuY2xvc2VUb29sdGlwO1xuICBcdFx0XHRldmVudHMuY2xpY2sgPSB0aGlzLl9vcGVuVG9vbHRpcDtcbiAgXHRcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHRcdHRoaXMuX2FkZEZvY3VzTGlzdGVuZXJzKCk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0ZXZlbnRzLmFkZCA9IHRoaXMuX2FkZEZvY3VzTGlzdGVuZXJzO1xuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRldmVudHMuYWRkID0gdGhpcy5fb3BlblRvb2x0aXA7XG4gIFx0XHR9XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSkge1xuICBcdFx0XHRldmVudHMubW91c2Vtb3ZlID0gdGhpcy5fbW92ZVRvb2x0aXA7XG4gIFx0XHR9XG4gIFx0XHR0aGlzW29uT2ZmXShldmVudHMpO1xuICBcdFx0dGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQgPSAhcmVtb3ZlO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGxhdGxuZz86IExhdExuZyk6IHRoaXNcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgdG9vbHRpcCBhdCB0aGUgc3BlY2lmaWVkIGBsYXRsbmdgIG9yIGF0IHRoZSBkZWZhdWx0IHRvb2x0aXAgYW5jaG9yIGlmIG5vIGBsYXRsbmdgIGlzIHBhc3NlZC5cbiAgXHRvcGVuVG9vbHRpcDogZnVuY3Rpb24gKGxhdGxuZykge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIEZlYXR1cmVHcm91cCkpIHtcbiAgXHRcdFx0XHR0aGlzLl90b29sdGlwLl9zb3VyY2UgPSB0aGlzO1xuICBcdFx0XHR9XG4gIFx0XHRcdGlmICh0aGlzLl90b29sdGlwLl9wcmVwYXJlT3BlbihsYXRsbmcpKSB7XG4gIFx0XHRcdFx0Ly8gb3BlbiB0aGUgdG9vbHRpcCBvbiB0aGUgbWFwXG4gIFx0XHRcdFx0dGhpcy5fdG9vbHRpcC5vcGVuT24odGhpcy5fbWFwKTtcblxuICBcdFx0XHRcdGlmICh0aGlzLmdldEVsZW1lbnQpIHtcbiAgXHRcdFx0XHRcdHRoaXMuX3NldEFyaWFEZXNjcmliZWRCeU9uTGF5ZXIodGhpcyk7XG4gIFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmVhY2hMYXllcikge1xuICBcdFx0XHRcdFx0dGhpcy5lYWNoTGF5ZXIodGhpcy5fc2V0QXJpYURlc2NyaWJlZEJ5T25MYXllciwgdGhpcyk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZVRvb2x0aXAoKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlmIGl0IGlzIG9wZW4uXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCkge1xuICBcdFx0XHRyZXR1cm4gdGhpcy5fdG9vbHRpcC5jbG9zZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHRvZ2dsZVRvb2x0aXAoKTogdGhpc1xuICBcdC8vIE9wZW5zIG9yIGNsb3NlcyB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGRlcGVuZGluZyBvbiBpdHMgY3VycmVudCBzdGF0ZS5cbiAgXHR0b2dnbGVUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCkge1xuICBcdFx0XHR0aGlzLl90b29sdGlwLnRvZ2dsZSh0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGlzVG9vbHRpcE9wZW4oKTogYm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSB0b29sdGlwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY3VycmVudGx5IG9wZW4uXG4gIFx0aXNUb29sdGlwT3BlbjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3Rvb2x0aXAuaXNPcGVuKCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0VG9vbHRpcENvbnRlbnQoY29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fFRvb2x0aXApOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgY29udGVudCBvZiB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyLlxuICBcdHNldFRvb2x0aXBDb250ZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0dGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KGNvbnRlbnQpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0VG9vbHRpcCgpOiBUb29sdGlwXG4gIFx0Ly8gUmV0dXJucyB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyLlxuICBcdGdldFRvb2x0aXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90b29sdGlwO1xuICBcdH0sXG5cbiAgXHRfYWRkRm9jdXNMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLmdldEVsZW1lbnQpIHtcbiAgXHRcdFx0dGhpcy5fYWRkRm9jdXNMaXN0ZW5lcnNPbkxheWVyKHRoaXMpO1xuICBcdFx0fSBlbHNlIGlmICh0aGlzLmVhY2hMYXllcikge1xuICBcdFx0XHR0aGlzLmVhY2hMYXllcih0aGlzLl9hZGRGb2N1c0xpc3RlbmVyc09uTGF5ZXIsIHRoaXMpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYWRkRm9jdXNMaXN0ZW5lcnNPbkxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBlbCA9IGxheWVyLmdldEVsZW1lbnQoKTtcbiAgXHRcdGlmIChlbCkge1xuICBcdFx0XHRvbihlbCwgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICBcdFx0XHRcdHRoaXMuX3Rvb2x0aXAuX3NvdXJjZSA9IGxheWVyO1xuICBcdFx0XHRcdHRoaXMub3BlblRvb2x0aXAoKTtcbiAgXHRcdFx0fSwgdGhpcyk7XG4gIFx0XHRcdG9uKGVsLCAnYmx1cicsIHRoaXMuY2xvc2VUb29sdGlwLCB0aGlzKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3NldEFyaWFEZXNjcmliZWRCeU9uTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGVsID0gbGF5ZXIuZ2V0RWxlbWVudCgpO1xuICBcdFx0aWYgKGVsKSB7XG4gIFx0XHRcdGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lci5pZCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuXG4gIFx0X29wZW5Ub29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKCF0aGlzLl90b29sdGlwIHx8ICF0aGlzLl9tYXAgfHwgKHRoaXMuX21hcC5kcmFnZ2luZyAmJiB0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkpKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3Rvb2x0aXAuX3NvdXJjZSA9IGUubGF5ZXIgfHwgZS50YXJnZXQ7XG5cbiAgXHRcdHRoaXMub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSA/IGUubGF0bG5nIDogdW5kZWZpbmVkKTtcbiAgXHR9LFxuXG4gIFx0X21vdmVUb29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxhdGxuZyA9IGUubGF0bG5nLCBjb250YWluZXJQb2ludCwgbGF5ZXJQb2ludDtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5ICYmIGUub3JpZ2luYWxFdmVudCkge1xuICBcdFx0XHRjb250YWluZXJQb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLm9yaWdpbmFsRXZlbnQpO1xuICBcdFx0XHRsYXllclBvaW50ID0gdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGNvbnRhaW5lclBvaW50KTtcbiAgXHRcdFx0bGF0bG5nID0gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3Rvb2x0aXAuc2V0TGF0TG5nKGxhdGxuZyk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgRGl2SWNvblxuICAgKiBAYWthIEwuRGl2SWNvblxuICAgKiBAaW5oZXJpdHMgSWNvblxuICAgKlxuICAgKiBSZXByZXNlbnRzIGEgbGlnaHR3ZWlnaHQgaWNvbiBmb3IgbWFya2VycyB0aGF0IHVzZXMgYSBzaW1wbGUgYDxkaXY+YFxuICAgKiBlbGVtZW50IGluc3RlYWQgb2YgYW4gaW1hZ2UuIEluaGVyaXRzIGZyb20gYEljb25gIGJ1dCBpZ25vcmVzIHRoZSBgaWNvblVybGAgYW5kIHNoYWRvdyBvcHRpb25zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgbXlJY29uID0gTC5kaXZJY29uKHtjbGFzc05hbWU6ICdteS1kaXYtaWNvbid9KTtcbiAgICogLy8geW91IGNhbiBzZXQgLm15LWRpdi1pY29uIHN0eWxlcyBpbiBDU1NcbiAgICpcbiAgICogTC5tYXJrZXIoWzUwLjUwNSwgMzAuNTddLCB7aWNvbjogbXlJY29ufSkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGhhcyBhICdsZWFmbGV0LWRpdi1pY29uJyBDU1MgY2xhc3MgYW5kIGlzIHN0eWxlZCBhcyBhIGxpdHRsZSB3aGl0ZSBzcXVhcmUgd2l0aCBhIHNoYWRvdy5cbiAgICovXG5cbiAgdmFyIERpdkljb24gPSBJY29uLmV4dGVuZCh7XG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgRGl2SWNvbiBvcHRpb25zXG4gIFx0XHRpY29uU2l6ZTogWzEyLCAxMl0sIC8vIGFsc28gY2FuIGJlIHNldCB0aHJvdWdoIENTU1xuXG4gIFx0XHQvLyBpY29uQW5jaG9yOiAoUG9pbnQpLFxuICBcdFx0Ly8gcG9wdXBBbmNob3I6IChQb2ludCksXG5cbiAgXHRcdC8vIEBvcHRpb24gaHRtbDogU3RyaW5nfEhUTUxFbGVtZW50ID0gJydcbiAgXHRcdC8vIEN1c3RvbSBIVE1MIGNvZGUgdG8gcHV0IGluc2lkZSB0aGUgZGl2IGVsZW1lbnQsIGVtcHR5IGJ5IGRlZmF1bHQuIEFsdGVybmF0aXZlbHksXG4gIFx0XHQvLyBhbiBpbnN0YW5jZSBvZiBgSFRNTEVsZW1lbnRgLlxuICBcdFx0aHRtbDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gYmdQb3M6IFBvaW50ID0gWzAsIDBdXG4gIFx0XHQvLyBPcHRpb25hbCByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgYmFja2dyb3VuZCwgaW4gcGl4ZWxzXG4gIFx0XHRiZ1BvczogbnVsbCxcblxuICBcdFx0Y2xhc3NOYW1lOiAnbGVhZmxldC1kaXYtaWNvbidcbiAgXHR9LFxuXG4gIFx0Y3JlYXRlSWNvbjogZnVuY3Rpb24gKG9sZEljb24pIHtcbiAgXHRcdHZhciBkaXYgPSAob2xkSWNvbiAmJiBvbGRJY29uLnRhZ05hbWUgPT09ICdESVYnKSA/IG9sZEljb24gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5odG1sIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICBcdFx0XHRlbXB0eShkaXYpO1xuICBcdFx0XHRkaXYuYXBwZW5kQ2hpbGQob3B0aW9ucy5odG1sKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpdi5pbm5lckhUTUwgPSBvcHRpb25zLmh0bWwgIT09IGZhbHNlID8gb3B0aW9ucy5odG1sIDogJyc7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLmJnUG9zKSB7XG4gIFx0XHRcdHZhciBiZ1BvcyA9IHRvUG9pbnQob3B0aW9ucy5iZ1Bvcyk7XG4gIFx0XHRcdGRpdi5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb24gPSAoLWJnUG9zLngpICsgJ3B4ICcgKyAoLWJnUG9zLnkpICsgJ3B4JztcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3NldEljb25TdHlsZXMoZGl2LCAnaWNvbicpO1xuXG4gIFx0XHRyZXR1cm4gZGl2O1xuICBcdH0sXG5cbiAgXHRjcmVhdGVTaGFkb3c6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBudWxsO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5kaXZJY29uKG9wdGlvbnM6IERpdkljb24gb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIGBEaXZJY29uYCBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBkaXZJY29uKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IERpdkljb24ob3B0aW9ucyk7XG4gIH1cblxuICBJY29uLkRlZmF1bHQgPSBJY29uRGVmYXVsdDtcblxuICAvKlxuICAgKiBAY2xhc3MgR3JpZExheWVyXG4gICAqIEBpbmhlcml0cyBMYXllclxuICAgKiBAYWthIEwuR3JpZExheWVyXG4gICAqXG4gICAqIEdlbmVyaWMgY2xhc3MgZm9yIGhhbmRsaW5nIGEgdGlsZWQgZ3JpZCBvZiBIVE1MIGVsZW1lbnRzLiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGlsZSBsYXllcnMgYW5kIHJlcGxhY2VzIGBUaWxlTGF5ZXIuQ2FudmFzYC5cbiAgICogR3JpZExheWVyIGNhbiBiZSBleHRlbmRlZCB0byBjcmVhdGUgYSB0aWxlZCBncmlkIG9mIEhUTUwgZWxlbWVudHMgbGlrZSBgPGNhbnZhcz5gLCBgPGltZz5gIG9yIGA8ZGl2PmAuIEdyaWRMYXllciB3aWxsIGhhbmRsZSBjcmVhdGluZyBhbmQgYW5pbWF0aW5nIHRoZXNlIERPTSBlbGVtZW50cyBmb3IgeW91LlxuICAgKlxuICAgKlxuICAgKiBAc2VjdGlvbiBTeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBjdXN0b20gbGF5ZXIsIGV4dGVuZCBHcmlkTGF5ZXIgYW5kIGltcGxlbWVudCB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLCB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIGBQb2ludGAgb2JqZWN0IHdpdGggdGhlIGB4YCwgYHlgLCBhbmQgYHpgICh6b29tIGxldmVsKSBjb29yZGluYXRlcyB0byBkcmF3IHlvdXIgdGlsZS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIENhbnZhc0xheWVyID0gTC5HcmlkTGF5ZXIuZXh0ZW5kKHtcbiAgICogICAgIGNyZWF0ZVRpbGU6IGZ1bmN0aW9uKGNvb3Jkcyl7XG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGdldCBhIGNhbnZhcyBjb250ZXh0IGFuZCBkcmF3IHNvbWV0aGluZyBvbiBpdCB1c2luZyBjb29yZHMueCwgY29vcmRzLnkgYW5kIGNvb3Jkcy56XG4gICAqICAgICAgICAgdmFyIGN0eCA9IHRpbGUuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICpcbiAgICogICAgICAgICAvLyByZXR1cm4gdGhlIHRpbGUgc28gaXQgY2FuIGJlIHJlbmRlcmVkIG9uIHNjcmVlblxuICAgKiAgICAgICAgIHJldHVybiB0aWxlO1xuICAgKiAgICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWN0aW9uIEFzeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUaWxlIGNyZWF0aW9uIGNhbiBhbHNvIGJlIGFzeW5jaHJvbm91cywgdGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBhIHRoaXJkLXBhcnR5IGRyYXdpbmcgbGlicmFyeS4gT25jZSB0aGUgdGlsZSBpcyBmaW5pc2hlZCBkcmF3aW5nIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGBkb25lKClgIGNhbGxiYWNrLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgQ2FudmFzTGF5ZXIgPSBMLkdyaWRMYXllci5leHRlbmQoe1xuICAgKiAgICAgY3JlYXRlVGlsZTogZnVuY3Rpb24oY29vcmRzLCBkb25lKXtcbiAgICogICAgICAgICB2YXIgZXJyb3I7XG4gICAqXG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGRyYXcgc29tZXRoaW5nIGFzeW5jaHJvbm91c2x5IGFuZCBwYXNzIHRoZSB0aWxlIHRvIHRoZSBkb25lKCkgY2FsbGJhY2tcbiAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgKiAgICAgICAgICAgICBkb25lKGVycm9yLCB0aWxlKTtcbiAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICpcbiAgICogICAgICAgICByZXR1cm4gdGlsZTtcbiAgICogICAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VjdGlvblxuICAgKi9cblxuXG4gIHZhciBHcmlkTGF5ZXIgPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIEdyaWRMYXllciBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiB0aWxlU2l6ZTogTnVtYmVyfFBvaW50ID0gMjU2XG4gIFx0XHQvLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIHRpbGVzIGluIHRoZSBncmlkLiBVc2UgYSBudW1iZXIgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgZXF1YWwsIG9yIGBMLnBvaW50KHdpZHRoLCBoZWlnaHQpYCBvdGhlcndpc2UuXG4gIFx0XHR0aWxlU2l6ZTogMjU2LFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gT3BhY2l0eSBvZiB0aGUgdGlsZXMuIENhbiBiZSB1c2VkIGluIHRoZSBgY3JlYXRlVGlsZSgpYCBmdW5jdGlvbi5cbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSAoZGVwZW5kcylcbiAgXHRcdC8vIExvYWQgbmV3IHRpbGVzIG9ubHkgd2hlbiBwYW5uaW5nIGVuZHMuXG4gIFx0XHQvLyBgdHJ1ZWAgYnkgZGVmYXVsdCBvbiBtb2JpbGUgYnJvd3NlcnMsIGluIG9yZGVyIHRvIGF2b2lkIHRvbyBtYW55IHJlcXVlc3RzIGFuZCBrZWVwIHNtb290aCBuYXZpZ2F0aW9uLlxuICBcdFx0Ly8gYGZhbHNlYCBvdGhlcndpc2UgaW4gb3JkZXIgdG8gZGlzcGxheSBuZXcgdGlsZXMgX2R1cmluZ18gcGFubmluZywgc2luY2UgaXQgaXMgZWFzeSB0byBwYW4gb3V0c2lkZSB0aGVcbiAgXHRcdC8vIFtga2VlcEJ1ZmZlcmBdKCNncmlkbGF5ZXIta2VlcGJ1ZmZlcikgb3B0aW9uIGluIGRlc2t0b3AgYnJvd3NlcnMuXG4gIFx0XHR1cGRhdGVXaGVuSWRsZTogQnJvd3Nlci5tb2JpbGUsXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlblpvb21pbmc6IEJvb2xlYW4gPSB0cnVlXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCBhIHNtb290aCB6b29tIGFuaW1hdGlvbiAoZHVyaW5nIGEgW3RvdWNoIHpvb21dKCNtYXAtdG91Y2h6b29tKSBvciBhIFtgZmx5VG8oKWBdKCNtYXAtZmx5dG8pKSB3aWxsIHVwZGF0ZSBncmlkIGxheWVycyBldmVyeSBpbnRlZ2VyIHpvb20gbGV2ZWwuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCB3aWxsIHVwZGF0ZSB0aGUgZ3JpZCBsYXllciBvbmx5IHdoZW4gdGhlIHNtb290aCBhbmltYXRpb24gZW5kcy5cbiAgXHRcdHVwZGF0ZVdoZW5ab29taW5nOiB0cnVlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZUludGVydmFsOiBOdW1iZXIgPSAyMDBcbiAgXHRcdC8vIFRpbGVzIHdpbGwgbm90IHVwZGF0ZSBtb3JlIHRoYW4gb25jZSBldmVyeSBgdXBkYXRlSW50ZXJ2YWxgIG1pbGxpc2Vjb25kcyB3aGVuIHBhbm5pbmcuXG4gIFx0XHR1cGRhdGVJbnRlcnZhbDogMjAwLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHpJbmRleDogTnVtYmVyID0gMVxuICBcdFx0Ly8gVGhlIGV4cGxpY2l0IHpJbmRleCBvZiB0aGUgdGlsZSBsYXllci5cbiAgXHRcdHpJbmRleDogMSxcblxuICBcdFx0Ly8gQG9wdGlvbiBib3VuZHM6IExhdExuZ0JvdW5kcyA9IHVuZGVmaW5lZFxuICBcdFx0Ly8gSWYgc2V0LCB0aWxlcyB3aWxsIG9ubHkgYmUgbG9hZGVkIGluc2lkZSB0aGUgc2V0IGBMYXRMbmdCb3VuZHNgLlxuICBcdFx0Ym91bmRzOiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG1pblpvb206IE51bWJlciA9IDBcbiAgXHRcdC8vIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZG93biB0byB3aGljaCB0aGlzIGxheWVyIHdpbGwgYmUgZGlzcGxheWVkIChpbmNsdXNpdmUpLlxuICBcdFx0bWluWm9vbTogMCxcblxuICBcdFx0Ly8gQG9wdGlvbiBtYXhab29tOiBOdW1iZXIgPSB1bmRlZmluZWRcbiAgXHRcdC8vIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdXAgdG8gd2hpY2ggdGhpcyBsYXllciB3aWxsIGJlIGRpc3BsYXllZCAoaW5jbHVzaXZlKS5cbiAgXHRcdG1heFpvb206IHVuZGVmaW5lZCxcblxuICBcdFx0Ly8gQG9wdGlvbiBtYXhOYXRpdmVab29tOiBOdW1iZXIgPSB1bmRlZmluZWRcbiAgXHRcdC8vIE1heGltdW0gem9vbSBudW1iZXIgdGhlIHRpbGUgc291cmNlIGhhcyBhdmFpbGFibGUuIElmIGl0IGlzIHNwZWNpZmllZCxcbiAgXHRcdC8vIHRoZSB0aWxlcyBvbiBhbGwgem9vbSBsZXZlbHMgaGlnaGVyIHRoYW4gYG1heE5hdGl2ZVpvb21gIHdpbGwgYmUgbG9hZGVkXG4gIFx0XHQvLyBmcm9tIGBtYXhOYXRpdmVab29tYCBsZXZlbCBhbmQgYXV0by1zY2FsZWQuXG4gIFx0XHRtYXhOYXRpdmVab29tOiB1bmRlZmluZWQsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWluTmF0aXZlWm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBNaW5pbXVtIHpvb20gbnVtYmVyIHRoZSB0aWxlIHNvdXJjZSBoYXMgYXZhaWxhYmxlLiBJZiBpdCBpcyBzcGVjaWZpZWQsXG4gIFx0XHQvLyB0aGUgdGlsZXMgb24gYWxsIHpvb20gbGV2ZWxzIGxvd2VyIHRoYW4gYG1pbk5hdGl2ZVpvb21gIHdpbGwgYmUgbG9hZGVkXG4gIFx0XHQvLyBmcm9tIGBtaW5OYXRpdmVab29tYCBsZXZlbCBhbmQgYXV0by1zY2FsZWQuXG4gIFx0XHRtaW5OYXRpdmVab29tOiB1bmRlZmluZWQsXG5cbiAgXHRcdC8vIEBvcHRpb24gbm9XcmFwOiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGxheWVyIGlzIHdyYXBwZWQgYXJvdW5kIHRoZSBhbnRpbWVyaWRpYW4uIElmIGB0cnVlYCwgdGhlXG4gIFx0XHQvLyBHcmlkTGF5ZXIgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBvbmNlIGF0IGxvdyB6b29tIGxldmVscy4gSGFzIG5vXG4gIFx0XHQvLyBlZmZlY3Qgd2hlbiB0aGUgW21hcCBDUlNdKCNtYXAtY3JzKSBkb2Vzbid0IHdyYXAgYXJvdW5kLiBDYW4gYmUgdXNlZFxuICBcdFx0Ly8gaW4gY29tYmluYXRpb24gd2l0aCBbYGJvdW5kc2BdKCNncmlkbGF5ZXItYm91bmRzKSB0byBwcmV2ZW50IHJlcXVlc3RpbmdcbiAgXHRcdC8vIHRpbGVzIG91dHNpZGUgdGhlIENSUyBsaW1pdHMuXG4gIFx0XHRub1dyYXA6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHBhbmU6IFN0cmluZyA9ICd0aWxlUGFuZSdcbiAgXHRcdC8vIGBNYXAgcGFuZWAgd2hlcmUgdGhlIGdyaWQgbGF5ZXIgd2lsbCBiZSBhZGRlZC5cbiAgXHRcdHBhbmU6ICd0aWxlUGFuZScsXG5cbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xuICBcdFx0Ly8gQSBjdXN0b20gY2xhc3MgbmFtZSB0byBhc3NpZ24gdG8gdGhlIHRpbGUgbGF5ZXIuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gIFx0XHRjbGFzc05hbWU6ICcnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGtlZXBCdWZmZXI6IE51bWJlciA9IDJcbiAgXHRcdC8vIFdoZW4gcGFubmluZyB0aGUgbWFwLCBrZWVwIHRoaXMgbWFueSByb3dzIGFuZCBjb2x1bW5zIG9mIHRpbGVzIGJlZm9yZSB1bmxvYWRpbmcgdGhlbS5cbiAgXHRcdGtlZXBCdWZmZXI6IDJcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0fSxcblxuICBcdG9uQWRkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9pbml0Q29udGFpbmVyKCk7XG5cbiAgXHRcdHRoaXMuX2xldmVscyA9IHt9O1xuICBcdFx0dGhpcy5fdGlsZXMgPSB7fTtcblxuICBcdFx0dGhpcy5fcmVzZXRWaWV3KCk7IC8vIGltcGxpY2l0IF91cGRhdGUoKSBjYWxsXG4gIFx0fSxcblxuICBcdGJlZm9yZUFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0bWFwLl9hZGRab29tTGltaXQodGhpcyk7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRtYXAuX3JlbW92ZVpvb21MaW1pdCh0aGlzKTtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG51bGw7XG4gIFx0XHR0aGlzLl90aWxlWm9vbSA9IHVuZGVmaW5lZDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcbiAgXHQvLyBCcmluZ3MgdGhlIHRpbGUgbGF5ZXIgdG8gdGhlIHRvcCBvZiBhbGwgdGlsZSBsYXllcnMuXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRvRnJvbnQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjazogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgdGlsZSBsYXllciB0byB0aGUgYm90dG9tIG9mIGFsbCB0aWxlIGxheWVycy5cbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0b0JhY2sodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbik7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250YWluZXI6IEhUTUxFbGVtZW50XG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTCBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHRpbGVzIGZvciB0aGlzIGxheWVyLlxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbb3BhY2l0eV0oI2dyaWRsYXllci1vcGFjaXR5KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRPcGFjaXR5OiBmdW5jdGlvbiAob3BhY2l0eSkge1xuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xuICBcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHpJbmRleDogTnVtYmVyKTogdGhpc1xuICBcdC8vIENoYW5nZXMgdGhlIFt6SW5kZXhdKCNncmlkbGF5ZXItemluZGV4KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh6SW5kZXgpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy56SW5kZXggPSB6SW5kZXg7XG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNMb2FkaW5nOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IHRpbGUgaW4gdGhlIGdyaWQgbGF5ZXIgaGFzIG5vdCBmaW5pc2hlZCBsb2FkaW5nLlxuICBcdGlzTG9hZGluZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3OiB0aGlzXG4gIFx0Ly8gQ2F1c2VzIHRoZSBsYXllciB0byBjbGVhciBhbGwgdGhlIHRpbGVzIGFuZCByZXF1ZXN0IHRoZW0gYWdhaW4uXG4gIFx0cmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG4gIFx0XHRcdHZhciB0aWxlWm9vbSA9IHRoaXMuX2NsYW1wWm9vbSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKTtcbiAgXHRcdFx0aWYgKHRpbGVab29tICE9PSB0aGlzLl90aWxlWm9vbSkge1xuICBcdFx0XHRcdHRoaXMuX3RpbGVab29tID0gdGlsZVpvb207XG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlTGV2ZWxzKCk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0ge1xuICBcdFx0XHR2aWV3cHJlcmVzZXQ6IHRoaXMuX2ludmFsaWRhdGVBbGwsXG4gIFx0XHRcdHZpZXdyZXNldDogdGhpcy5fcmVzZXRWaWV3LFxuICBcdFx0XHR6b29tOiB0aGlzLl9yZXNldFZpZXcsXG4gIFx0XHRcdG1vdmVlbmQ6IHRoaXMuX29uTW92ZUVuZFxuICBcdFx0fTtcblxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGUpIHtcbiAgXHRcdFx0Ly8gdXBkYXRlIHRpbGVzIG9uIG1vdmUsIGJ1dCBub3QgbW9yZSBvZnRlbiB0aGFuIG9uY2UgcGVyIGdpdmVuIGludGVydmFsXG4gIFx0XHRcdGlmICghdGhpcy5fb25Nb3ZlKSB7XG4gIFx0XHRcdFx0dGhpcy5fb25Nb3ZlID0gdGhyb3R0bGUodGhpcy5fb25Nb3ZlRW5kLCB0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsIHRoaXMpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0ZXZlbnRzLm1vdmUgPSB0aGlzLl9vbk1vdmU7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcbiAgXHRcdFx0ZXZlbnRzLnpvb21hbmltID0gdGhpcy5fYW5pbWF0ZVpvb207XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBldmVudHM7XG4gIFx0fSxcblxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXG4gIFx0Ly8gTGF5ZXJzIGV4dGVuZGluZyBgR3JpZExheWVyYCBzaGFsbCByZWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZC5cbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVRpbGUoY29vcmRzOiBPYmplY3QsIGRvbmU/OiBGdW5jdGlvbik6IEhUTUxFbGVtZW50XG4gIFx0Ly8gQ2FsbGVkIG9ubHkgaW50ZXJuYWxseSwgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IGNsYXNzZXMgZXh0ZW5kaW5nIGBHcmlkTGF5ZXJgLlxuICBcdC8vIFJldHVybnMgdGhlIGBIVE1MRWxlbWVudGAgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYGNvb3Jkc2AuIElmIHRoZSBgZG9uZWAgY2FsbGJhY2tcbiAgXHQvLyBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHRpbGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgYW5kIGRyYXdpbmcuXG4gIFx0Y3JlYXRlVGlsZTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBcdH0sXG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBtZXRob2QgZ2V0VGlsZVNpemU6IFBvaW50XG4gIFx0Ly8gTm9ybWFsaXplcyB0aGUgW3RpbGVTaXplIG9wdGlvbl0oI2dyaWRsYXllci10aWxlc2l6ZSkgaW50byBhIHBvaW50LiBVc2VkIGJ5IHRoZSBgY3JlYXRlVGlsZSgpYCBtZXRob2QuXG4gIFx0Z2V0VGlsZVNpemU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBzID0gdGhpcy5vcHRpb25zLnRpbGVTaXplO1xuICBcdFx0cmV0dXJuIHMgaW5zdGFuY2VvZiBQb2ludCA/IHMgOiBuZXcgUG9pbnQocywgcyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVaSW5kZXg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXIgJiYgdGhpcy5vcHRpb25zLnpJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IG51bGwpIHtcbiAgXHRcdFx0dGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IHRoaXMub3B0aW9ucy56SW5kZXg7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRBdXRvWkluZGV4OiBmdW5jdGlvbiAoY29tcGFyZSkge1xuICBcdFx0Ly8gZ28gdGhyb3VnaCBhbGwgb3RoZXIgbGF5ZXJzIG9mIHRoZSBzYW1lIHBhbmUsIHNldCB6SW5kZXggdG8gbWF4ICsgMSAoZnJvbnQpIG9yIG1pbiAtIDEgKGJhY2spXG5cbiAgXHRcdHZhciBsYXllcnMgPSB0aGlzLmdldFBhbmUoKS5jaGlsZHJlbixcbiAgXHRcdCAgICBlZGdlWkluZGV4ID0gLWNvbXBhcmUoLUluZmluaXR5LCBJbmZpbml0eSk7IC8vIC1JbmZpbml0eSBmb3IgbWF4LCBJbmZpbml0eSBmb3IgbWluXG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXllcnMubGVuZ3RoLCB6SW5kZXg7IGkgPCBsZW47IGkrKykge1xuXG4gIFx0XHRcdHpJbmRleCA9IGxheWVyc1tpXS5zdHlsZS56SW5kZXg7XG5cbiAgXHRcdFx0aWYgKGxheWVyc1tpXSAhPT0gdGhpcy5fY29udGFpbmVyICYmIHpJbmRleCkge1xuICBcdFx0XHRcdGVkZ2VaSW5kZXggPSBjb21wYXJlKGVkZ2VaSW5kZXgsICt6SW5kZXgpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChpc0Zpbml0ZShlZGdlWkluZGV4KSkge1xuICBcdFx0XHR0aGlzLm9wdGlvbnMuekluZGV4ID0gZWRnZVpJbmRleCArIGNvbXBhcmUoLTEsIDEpO1xuICBcdFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZU9wYWNpdHk6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7IHJldHVybjsgfVxuXG4gIFx0XHQvLyBJRSBkb2Vzbid0IGluaGVyaXQgZmlsdGVyIG9wYWNpdHkgcHJvcGVybHksIHNvIHdlJ3JlIGZvcmNlZCB0byBzZXQgaXQgb24gdGlsZXNcbiAgXHRcdGlmIChCcm93c2VyLmllbHQ5KSB7IHJldHVybjsgfVxuXG4gIFx0XHRzZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zLm9wYWNpdHkpO1xuXG4gIFx0XHR2YXIgbm93ID0gK25ldyBEYXRlKCksXG4gIFx0XHQgICAgbmV4dEZyYW1lID0gZmFsc2UsXG4gIFx0XHQgICAgd2lsbFBydW5lID0gZmFsc2U7XG5cbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRcdGlmICghdGlsZS5jdXJyZW50IHx8ICF0aWxlLmxvYWRlZCkgeyBjb250aW51ZTsgfVxuXG4gIFx0XHRcdHZhciBmYWRlID0gTWF0aC5taW4oMSwgKG5vdyAtIHRpbGUubG9hZGVkKSAvIDIwMCk7XG5cbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLmVsLCBmYWRlKTtcbiAgXHRcdFx0aWYgKGZhZGUgPCAxKSB7XG4gIFx0XHRcdFx0bmV4dEZyYW1lID0gdHJ1ZTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRpZiAodGlsZS5hY3RpdmUpIHtcbiAgXHRcdFx0XHRcdHdpbGxQcnVuZSA9IHRydWU7XG4gIFx0XHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRcdHRoaXMuX29uT3BhcXVlVGlsZSh0aWxlKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdFx0dGlsZS5hY3RpdmUgPSB0cnVlO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh3aWxsUHJ1bmUgJiYgIXRoaXMuX25vUHJ1bmUpIHsgdGhpcy5fcHJ1bmVUaWxlcygpOyB9XG5cbiAgXHRcdGlmIChuZXh0RnJhbWUpIHtcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSk7XG4gIFx0XHRcdHRoaXMuX2ZhZGVGcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlT3BhY2l0eSwgdGhpcyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbk9wYXF1ZVRpbGU6IGZhbHNlRm4sXG5cbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX2NvbnRhaW5lcikgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LWxheWVyICcgKyAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSB8fCAnJykpO1xuICBcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XG5cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlTGV2ZWxzOiBmdW5jdGlvbiAoKSB7XG5cbiAgXHRcdHZhciB6b29tID0gdGhpcy5fdGlsZVpvb20sXG4gIFx0XHQgICAgbWF4Wm9vbSA9IHRoaXMub3B0aW9ucy5tYXhab29tO1xuXG4gIFx0XHRpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICBcdFx0Zm9yICh2YXIgeiBpbiB0aGlzLl9sZXZlbHMpIHtcbiAgXHRcdFx0eiA9IE51bWJlcih6KTtcbiAgXHRcdFx0aWYgKHRoaXMuX2xldmVsc1t6XS5lbC5jaGlsZHJlbi5sZW5ndGggfHwgeiA9PT0gem9vbSkge1xuICBcdFx0XHRcdHRoaXMuX2xldmVsc1t6XS5lbC5zdHlsZS56SW5kZXggPSBtYXhab29tIC0gTWF0aC5hYnMoem9vbSAtIHopO1xuICBcdFx0XHRcdHRoaXMuX29uVXBkYXRlTGV2ZWwoeik7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0cmVtb3ZlKHRoaXMuX2xldmVsc1t6XS5lbCk7XG4gIFx0XHRcdFx0dGhpcy5fcmVtb3ZlVGlsZXNBdFpvb20oeik7XG4gIFx0XHRcdFx0dGhpcy5fb25SZW1vdmVMZXZlbCh6KTtcbiAgXHRcdFx0XHRkZWxldGUgdGhpcy5fbGV2ZWxzW3pdO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBsZXZlbCA9IHRoaXMuX2xldmVsc1t6b29tXSxcbiAgXHRcdCAgICBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgXHRcdGlmICghbGV2ZWwpIHtcbiAgXHRcdFx0bGV2ZWwgPSB0aGlzLl9sZXZlbHNbem9vbV0gPSB7fTtcblxuICBcdFx0XHRsZXZlbC5lbCA9IGNyZWF0ZSQxKCdkaXYnLCAnbGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWQnLCB0aGlzLl9jb250YWluZXIpO1xuICBcdFx0XHRsZXZlbC5lbC5zdHlsZS56SW5kZXggPSBtYXhab29tO1xuXG4gIFx0XHRcdGxldmVsLm9yaWdpbiA9IG1hcC5wcm9qZWN0KG1hcC51bnByb2plY3QobWFwLmdldFBpeGVsT3JpZ2luKCkpLCB6b29tKS5yb3VuZCgpO1xuICBcdFx0XHRsZXZlbC56b29tID0gem9vbTtcblxuICBcdFx0XHR0aGlzLl9zZXRab29tVHJhbnNmb3JtKGxldmVsLCBtYXAuZ2V0Q2VudGVyKCksIG1hcC5nZXRab29tKCkpO1xuXG4gIFx0XHRcdC8vIGZvcmNlIHRoZSBicm93c2VyIHRvIGNvbnNpZGVyIHRoZSBuZXdseSBhZGRlZCBlbGVtZW50IGZvciB0cmFuc2l0aW9uXG4gIFx0XHRcdGZhbHNlRm4obGV2ZWwuZWwub2Zmc2V0V2lkdGgpO1xuXG4gIFx0XHRcdHRoaXMuX29uQ3JlYXRlTGV2ZWwobGV2ZWwpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9sZXZlbCA9IGxldmVsO1xuXG4gIFx0XHRyZXR1cm4gbGV2ZWw7XG4gIFx0fSxcblxuICBcdF9vblVwZGF0ZUxldmVsOiBmYWxzZUZuLFxuXG4gIFx0X29uUmVtb3ZlTGV2ZWw6IGZhbHNlRm4sXG5cbiAgXHRfb25DcmVhdGVMZXZlbDogZmFsc2VGbixcblxuICBcdF9wcnVuZVRpbGVzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBrZXksIHRpbGU7XG5cbiAgXHRcdHZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcbiAgXHRcdGlmICh6b29tID4gdGhpcy5vcHRpb25zLm1heFpvb20gfHxcbiAgXHRcdFx0em9vbSA8IHRoaXMub3B0aW9ucy5taW5ab29tKSB7XG4gIFx0XHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0Zm9yIChrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRcdHRpbGUucmV0YWluID0gdGlsZS5jdXJyZW50O1xuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHR0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgXHRcdFx0aWYgKHRpbGUuY3VycmVudCAmJiAhdGlsZS5hY3RpdmUpIHtcbiAgXHRcdFx0XHR2YXIgY29vcmRzID0gdGlsZS5jb29yZHM7XG4gIFx0XHRcdFx0aWYgKCF0aGlzLl9yZXRhaW5QYXJlbnQoY29vcmRzLngsIGNvb3Jkcy55LCBjb29yZHMueiwgY29vcmRzLnogLSA1KSkge1xuICBcdFx0XHRcdFx0dGhpcy5fcmV0YWluQ2hpbGRyZW4oY29vcmRzLngsIGNvb3Jkcy55LCBjb29yZHMueiwgY29vcmRzLnogKyAyKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0Zm9yIChrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0aWYgKCF0aGlzLl90aWxlc1trZXldLnJldGFpbikge1xuICBcdFx0XHRcdHRoaXMuX3JlbW92ZVRpbGUoa2V5KTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVtb3ZlVGlsZXNBdFpvb206IGZ1bmN0aW9uICh6b29tKSB7XG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0aWYgKHRoaXMuX3RpbGVzW2tleV0uY29vcmRzLnogIT09IHpvb20pIHtcbiAgXHRcdFx0XHRjb250aW51ZTtcbiAgXHRcdFx0fVxuICBcdFx0XHR0aGlzLl9yZW1vdmVUaWxlKGtleSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVBbGxUaWxlczogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbGUoa2V5KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2ludmFsaWRhdGVBbGw6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIHogaW4gdGhpcy5fbGV2ZWxzKSB7XG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9sZXZlbHNbel0uZWwpO1xuICBcdFx0XHR0aGlzLl9vblJlbW92ZUxldmVsKE51bWJlcih6KSk7XG4gIFx0XHRcdGRlbGV0ZSB0aGlzLl9sZXZlbHNbel07XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuXG4gIFx0XHR0aGlzLl90aWxlWm9vbSA9IHVuZGVmaW5lZDtcbiAgXHR9LFxuXG4gIFx0X3JldGFpblBhcmVudDogZnVuY3Rpb24gKHgsIHksIHosIG1pblpvb20pIHtcbiAgXHRcdHZhciB4MiA9IE1hdGguZmxvb3IoeCAvIDIpLFxuICBcdFx0ICAgIHkyID0gTWF0aC5mbG9vcih5IC8gMiksXG4gIFx0XHQgICAgejIgPSB6IC0gMSxcbiAgXHRcdCAgICBjb29yZHMyID0gbmV3IFBvaW50KCt4MiwgK3kyKTtcbiAgXHRcdGNvb3JkczIueiA9ICt6MjtcblxuICBcdFx0dmFyIGtleSA9IHRoaXMuX3RpbGVDb29yZHNUb0tleShjb29yZHMyKSxcbiAgXHRcdCAgICB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcblxuICBcdFx0aWYgKHRpbGUgJiYgdGlsZS5hY3RpdmUpIHtcbiAgXHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuICBcdFx0fSBlbHNlIGlmICh0aWxlICYmIHRpbGUubG9hZGVkKSB7XG4gIFx0XHRcdHRpbGUucmV0YWluID0gdHJ1ZTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHoyID4gbWluWm9vbSkge1xuICBcdFx0XHRyZXR1cm4gdGhpcy5fcmV0YWluUGFyZW50KHgyLCB5MiwgejIsIG1pblpvb20pO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gZmFsc2U7XG4gIFx0fSxcblxuICBcdF9yZXRhaW5DaGlsZHJlbjogZnVuY3Rpb24gKHgsIHksIHosIG1heFpvb20pIHtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDIgKiB4OyBpIDwgMiAqIHggKyAyOyBpKyspIHtcbiAgXHRcdFx0Zm9yICh2YXIgaiA9IDIgKiB5OyBqIDwgMiAqIHkgKyAyOyBqKyspIHtcblxuICBcdFx0XHRcdHZhciBjb29yZHMgPSBuZXcgUG9pbnQoaSwgaik7XG4gIFx0XHRcdFx0Y29vcmRzLnogPSB6ICsgMTtcblxuICBcdFx0XHRcdHZhciBrZXkgPSB0aGlzLl90aWxlQ29vcmRzVG9LZXkoY29vcmRzKSxcbiAgXHRcdFx0XHQgICAgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG5cbiAgXHRcdFx0XHRpZiAodGlsZSAmJiB0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0XHRcdFx0Y29udGludWU7XG5cbiAgXHRcdFx0XHR9IGVsc2UgaWYgKHRpbGUgJiYgdGlsZS5sb2FkZWQpIHtcbiAgXHRcdFx0XHRcdHRpbGUucmV0YWluID0gdHJ1ZTtcbiAgXHRcdFx0XHR9XG5cbiAgXHRcdFx0XHRpZiAoeiArIDEgPCBtYXhab29tKSB7XG4gIFx0XHRcdFx0XHR0aGlzLl9yZXRhaW5DaGlsZHJlbihpLCBqLCB6ICsgMSwgbWF4Wm9vbSk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldFZpZXc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgYW5pbWF0aW5nID0gZSAmJiAoZS5waW5jaCB8fCBlLmZseVRvKTtcbiAgXHRcdHRoaXMuX3NldFZpZXcodGhpcy5fbWFwLmdldENlbnRlcigpLCB0aGlzLl9tYXAuZ2V0Wm9vbSgpLCBhbmltYXRpbmcsIGFuaW1hdGluZyk7XG4gIFx0fSxcblxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHRoaXMuX3NldFZpZXcoZS5jZW50ZXIsIGUuem9vbSwgdHJ1ZSwgZS5ub1VwZGF0ZSk7XG4gIFx0fSxcblxuICBcdF9jbGFtcFpvb206IGZ1bmN0aW9uICh6b29tKSB7XG4gIFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICBcdFx0aWYgKHVuZGVmaW5lZCAhPT0gb3B0aW9ucy5taW5OYXRpdmVab29tICYmIHpvb20gPCBvcHRpb25zLm1pbk5hdGl2ZVpvb20pIHtcbiAgXHRcdFx0cmV0dXJuIG9wdGlvbnMubWluTmF0aXZlWm9vbTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHVuZGVmaW5lZCAhPT0gb3B0aW9ucy5tYXhOYXRpdmVab29tICYmIG9wdGlvbnMubWF4TmF0aXZlWm9vbSA8IHpvb20pIHtcbiAgXHRcdFx0cmV0dXJuIG9wdGlvbnMubWF4TmF0aXZlWm9vbTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIHpvb207XG4gIFx0fSxcblxuICBcdF9zZXRWaWV3OiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBub1BydW5lLCBub1VwZGF0ZSkge1xuICBcdFx0dmFyIHRpbGVab29tID0gTWF0aC5yb3VuZCh6b29tKTtcbiAgXHRcdGlmICgodGhpcy5vcHRpb25zLm1heFpvb20gIT09IHVuZGVmaW5lZCAmJiB0aWxlWm9vbSA+IHRoaXMub3B0aW9ucy5tYXhab29tKSB8fFxuICBcdFx0ICAgICh0aGlzLm9wdGlvbnMubWluWm9vbSAhPT0gdW5kZWZpbmVkICYmIHRpbGVab29tIDwgdGhpcy5vcHRpb25zLm1pblpvb20pKSB7XG4gIFx0XHRcdHRpbGVab29tID0gdW5kZWZpbmVkO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGlsZVpvb20gPSB0aGlzLl9jbGFtcFpvb20odGlsZVpvb20pO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgdGlsZVpvb21DaGFuZ2VkID0gdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5ab29taW5nICYmICh0aWxlWm9vbSAhPT0gdGhpcy5fdGlsZVpvb20pO1xuXG4gIFx0XHRpZiAoIW5vVXBkYXRlIHx8IHRpbGVab29tQ2hhbmdlZCkge1xuXG4gIFx0XHRcdHRoaXMuX3RpbGVab29tID0gdGlsZVpvb207XG5cbiAgXHRcdFx0aWYgKHRoaXMuX2Fib3J0TG9hZGluZykge1xuICBcdFx0XHRcdHRoaXMuX2Fib3J0TG9hZGluZygpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0dGhpcy5fdXBkYXRlTGV2ZWxzKCk7XG4gIFx0XHRcdHRoaXMuX3Jlc2V0R3JpZCgpO1xuXG4gIFx0XHRcdGlmICh0aWxlWm9vbSAhPT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlKGNlbnRlcik7XG4gIFx0XHRcdH1cblxuICBcdFx0XHRpZiAoIW5vUHJ1bmUpIHtcbiAgXHRcdFx0XHR0aGlzLl9wcnVuZVRpbGVzKCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHQvLyBGbGFnIHRvIHByZXZlbnQgX3VwZGF0ZU9wYWNpdHkgZnJvbSBwcnVuaW5nIHRpbGVzIGR1cmluZ1xuICBcdFx0XHQvLyBhIHpvb20gYW5pbSBvciBhIHBpbmNoIGdlc3R1cmVcbiAgXHRcdFx0dGhpcy5fbm9QcnVuZSA9ICEhbm9QcnVuZTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fc2V0Wm9vbVRyYW5zZm9ybXMoY2VudGVyLCB6b29tKTtcbiAgXHR9LFxuXG4gIFx0X3NldFpvb21UcmFuc2Zvcm1zOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xldmVscykge1xuICBcdFx0XHR0aGlzLl9zZXRab29tVHJhbnNmb3JtKHRoaXMuX2xldmVsc1tpXSwgY2VudGVyLCB6b29tKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3NldFpvb21UcmFuc2Zvcm06IGZ1bmN0aW9uIChsZXZlbCwgY2VudGVyLCB6b29tKSB7XG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHpvb20sIGxldmVsLnpvb20pLFxuICBcdFx0ICAgIHRyYW5zbGF0ZSA9IGxldmVsLm9yaWdpbi5tdWx0aXBseUJ5KHNjYWxlKVxuICBcdFx0ICAgICAgICAuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pKS5yb3VuZCgpO1xuXG4gIFx0XHRpZiAoQnJvd3Nlci5hbnkzZCkge1xuICBcdFx0XHRzZXRUcmFuc2Zvcm0obGV2ZWwuZWwsIHRyYW5zbGF0ZSwgc2NhbGUpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0c2V0UG9zaXRpb24obGV2ZWwuZWwsIHRyYW5zbGF0ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldEdyaWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgY3JzID0gbWFwLm9wdGlvbnMuY3JzLFxuICBcdFx0ICAgIHRpbGVTaXplID0gdGhpcy5fdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCksXG4gIFx0XHQgICAgdGlsZVpvb20gPSB0aGlzLl90aWxlWm9vbTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKHRoaXMuX3RpbGVab29tKTtcbiAgXHRcdGlmIChib3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fZ2xvYmFsVGlsZVJhbmdlID0gdGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShib3VuZHMpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl93cmFwWCA9IGNycy53cmFwTG5nICYmICF0aGlzLm9wdGlvbnMubm9XcmFwICYmIFtcbiAgXHRcdFx0TWF0aC5mbG9vcihtYXAucHJvamVjdChbMCwgY3JzLndyYXBMbmdbMF1dLCB0aWxlWm9vbSkueCAvIHRpbGVTaXplLngpLFxuICBcdFx0XHRNYXRoLmNlaWwobWFwLnByb2plY3QoWzAsIGNycy53cmFwTG5nWzFdXSwgdGlsZVpvb20pLnggLyB0aWxlU2l6ZS55KVxuICBcdFx0XTtcbiAgXHRcdHRoaXMuX3dyYXBZID0gY3JzLndyYXBMYXQgJiYgIXRoaXMub3B0aW9ucy5ub1dyYXAgJiYgW1xuICBcdFx0XHRNYXRoLmZsb29yKG1hcC5wcm9qZWN0KFtjcnMud3JhcExhdFswXSwgMF0sIHRpbGVab29tKS55IC8gdGlsZVNpemUueCksXG4gIFx0XHRcdE1hdGguY2VpbChtYXAucHJvamVjdChbY3JzLndyYXBMYXRbMV0sIDBdLCB0aWxlWm9vbSkueSAvIHRpbGVTaXplLnkpXG4gIFx0XHRdO1xuICBcdH0sXG5cbiAgXHRfb25Nb3ZlRW5kOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdH0sXG5cbiAgXHRfZ2V0VGlsZWRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlcikge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBtYXBab29tID0gbWFwLl9hbmltYXRpbmdab29tID8gTWF0aC5tYXgobWFwLl9hbmltYXRlVG9ab29tLCBtYXAuZ2V0Wm9vbSgpKSA6IG1hcC5nZXRab29tKCksXG4gIFx0XHQgICAgc2NhbGUgPSBtYXAuZ2V0Wm9vbVNjYWxlKG1hcFpvb20sIHRoaXMuX3RpbGVab29tKSxcbiAgXHRcdCAgICBwaXhlbENlbnRlciA9IG1hcC5wcm9qZWN0KGNlbnRlciwgdGhpcy5fdGlsZVpvb20pLmZsb29yKCksXG4gIFx0XHQgICAgaGFsZlNpemUgPSBtYXAuZ2V0U2l6ZSgpLmRpdmlkZUJ5KHNjYWxlICogMik7XG5cbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHBpeGVsQ2VudGVyLnN1YnRyYWN0KGhhbGZTaXplKSwgcGl4ZWxDZW50ZXIuYWRkKGhhbGZTaXplKSk7XG4gIFx0fSxcblxuICBcdC8vIFByaXZhdGUgbWV0aG9kIHRvIGxvYWQgdGlsZXMgaW4gdGhlIGdyaWQncyBhY3RpdmUgem9vbSBsZXZlbCBhY2NvcmRpbmcgdG8gbWFwIGJvdW5kc1xuICBcdF91cGRhdGU6IGZ1bmN0aW9uIChjZW50ZXIpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIW1hcCkgeyByZXR1cm47IH1cbiAgXHRcdHZhciB6b29tID0gdGhpcy5fY2xhbXBab29tKG1hcC5nZXRab29tKCkpO1xuXG4gIFx0XHRpZiAoY2VudGVyID09PSB1bmRlZmluZWQpIHsgY2VudGVyID0gbWFwLmdldENlbnRlcigpOyB9XG4gIFx0XHRpZiAodGhpcy5fdGlsZVpvb20gPT09IHVuZGVmaW5lZCkgeyByZXR1cm47IH1cdC8vIGlmIG91dCBvZiBtaW56b29tL21heHpvb21cblxuICBcdFx0dmFyIHBpeGVsQm91bmRzID0gdGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyhjZW50ZXIpLFxuICBcdFx0ICAgIHRpbGVSYW5nZSA9IHRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UocGl4ZWxCb3VuZHMpLFxuICBcdFx0ICAgIHRpbGVDZW50ZXIgPSB0aWxlUmFuZ2UuZ2V0Q2VudGVyKCksXG4gIFx0XHQgICAgcXVldWUgPSBbXSxcbiAgXHRcdCAgICBtYXJnaW4gPSB0aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixcbiAgXHRcdCAgICBub1BydW5lUmFuZ2UgPSBuZXcgQm91bmRzKHRpbGVSYW5nZS5nZXRCb3R0b21MZWZ0KCkuc3VidHJhY3QoW21hcmdpbiwgLW1hcmdpbl0pLFxuICBcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJhbmdlLmdldFRvcFJpZ2h0KCkuYWRkKFttYXJnaW4sIC1tYXJnaW5dKSk7XG5cbiAgXHRcdC8vIFNhbml0eSBjaGVjazogcGFuaWMgaWYgdGhlIHRpbGUgcmFuZ2UgY29udGFpbnMgSW5maW5pdHkgc29tZXdoZXJlLlxuICBcdFx0aWYgKCEoaXNGaW5pdGUodGlsZVJhbmdlLm1pbi54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1pbi55KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC55KSkpIHsgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMnKTsgfVxuXG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dmFyIGMgPSB0aGlzLl90aWxlc1trZXldLmNvb3JkcztcbiAgXHRcdFx0aWYgKGMueiAhPT0gdGhpcy5fdGlsZVpvb20gfHwgIW5vUHJ1bmVSYW5nZS5jb250YWlucyhuZXcgUG9pbnQoYy54LCBjLnkpKSkge1xuICBcdFx0XHRcdHRoaXMuX3RpbGVzW2tleV0uY3VycmVudCA9IGZhbHNlO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIF91cGRhdGUganVzdCBsb2FkcyBtb3JlIHRpbGVzLiBJZiB0aGUgdGlsZSB6b29tIGxldmVsIGRpZmZlcnMgdG9vIG11Y2hcbiAgXHRcdC8vIGZyb20gdGhlIG1hcCdzLCBsZXQgX3NldFZpZXcgcmVzZXQgbGV2ZWxzIGFuZCBwcnVuZSBvbGQgdGlsZXMuXG4gIFx0XHRpZiAoTWF0aC5hYnMoem9vbSAtIHRoaXMuX3RpbGVab29tKSA+IDEpIHsgdGhpcy5fc2V0VmlldyhjZW50ZXIsIHpvb20pOyByZXR1cm47IH1cblxuICBcdFx0Ly8gY3JlYXRlIGEgcXVldWUgb2YgY29vcmRpbmF0ZXMgdG8gbG9hZCB0aWxlcyBmcm9tXG4gIFx0XHRmb3IgKHZhciBqID0gdGlsZVJhbmdlLm1pbi55OyBqIDw9IHRpbGVSYW5nZS5tYXgueTsgaisrKSB7XG4gIFx0XHRcdGZvciAodmFyIGkgPSB0aWxlUmFuZ2UubWluLng7IGkgPD0gdGlsZVJhbmdlLm1heC54OyBpKyspIHtcbiAgXHRcdFx0XHR2YXIgY29vcmRzID0gbmV3IFBvaW50KGksIGopO1xuICBcdFx0XHRcdGNvb3Jkcy56ID0gdGhpcy5fdGlsZVpvb207XG5cbiAgXHRcdFx0XHRpZiAoIXRoaXMuX2lzVmFsaWRUaWxlKGNvb3JkcykpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkcyldO1xuICBcdFx0XHRcdGlmICh0aWxlKSB7XG4gIFx0XHRcdFx0XHR0aWxlLmN1cnJlbnQgPSB0cnVlO1xuICBcdFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKGNvb3Jkcyk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHNvcnQgdGlsZSBxdWV1ZSB0byBsb2FkIHRpbGVzIGluIG9yZGVyIG9mIHRoZWlyIGRpc3RhbmNlIHRvIGNlbnRlclxuICBcdFx0cXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICBcdFx0XHRyZXR1cm4gYS5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpIC0gYi5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpO1xuICBcdFx0fSk7XG5cbiAgXHRcdGlmIChxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgXHRcdFx0Ly8gaWYgaXQncyB0aGUgZmlyc3QgYmF0Y2ggb2YgdGlsZXMgdG8gbG9hZFxuICBcdFx0XHRpZiAoIXRoaXMuX2xvYWRpbmcpIHtcbiAgXHRcdFx0XHR0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgXHRcdFx0XHQvLyBAZXZlbnQgbG9hZGluZzogRXZlbnRcbiAgXHRcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBncmlkIGxheWVyIHN0YXJ0cyBsb2FkaW5nIHRpbGVzLlxuICBcdFx0XHRcdHRoaXMuZmlyZSgnbG9hZGluZycpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0Ly8gY3JlYXRlIERPTSBmcmFnbWVudCB0byBhcHBlbmQgdGlsZXMgaW4gb25lIGJhdGNoXG4gIFx0XHRcdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHR0aGlzLl9hZGRUaWxlKHF1ZXVlW2ldLCBmcmFnbWVudCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9sZXZlbC5lbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pc1ZhbGlkVGlsZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGNycyA9IHRoaXMuX21hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKCFjcnMuaW5maW5pdGUpIHtcbiAgXHRcdFx0Ly8gZG9uJ3QgbG9hZCB0aWxlIGlmIGl0J3Mgb3V0IG9mIGJvdW5kcyBhbmQgbm90IHdyYXBwZWRcbiAgXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX2dsb2JhbFRpbGVSYW5nZTtcbiAgXHRcdFx0aWYgKCghY3JzLndyYXBMbmcgJiYgKGNvb3Jkcy54IDwgYm91bmRzLm1pbi54IHx8IGNvb3Jkcy54ID4gYm91bmRzLm1heC54KSkgfHxcbiAgXHRcdFx0ICAgICghY3JzLndyYXBMYXQgJiYgKGNvb3Jkcy55IDwgYm91bmRzLm1pbi55IHx8IGNvb3Jkcy55ID4gYm91bmRzLm1heC55KSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmJvdW5kcykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gIFx0XHQvLyBkb24ndCBsb2FkIHRpbGUgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3QgdGhlIGJvdW5kcyBpbiBvcHRpb25zXG4gIFx0XHR2YXIgdGlsZUJvdW5kcyA9IHRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyhjb29yZHMpO1xuICBcdFx0cmV0dXJuIHRvTGF0TG5nQm91bmRzKHRoaXMub3B0aW9ucy5ib3VuZHMpLm92ZXJsYXBzKHRpbGVCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHRfa2V5VG9Cb3VuZHM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSkpO1xuICBcdH0sXG5cbiAgXHRfdGlsZUNvb3Jkc1RvTndTZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKSxcbiAgXHRcdCAgICBud1BvaW50ID0gY29vcmRzLnNjYWxlQnkodGlsZVNpemUpLFxuICBcdFx0ICAgIHNlUG9pbnQgPSBud1BvaW50LmFkZCh0aWxlU2l6ZSksXG4gIFx0XHQgICAgbncgPSBtYXAudW5wcm9qZWN0KG53UG9pbnQsIGNvb3Jkcy56KSxcbiAgXHRcdCAgICBzZSA9IG1hcC51bnByb2plY3Qoc2VQb2ludCwgY29vcmRzLnopO1xuICBcdFx0cmV0dXJuIFtudywgc2VdO1xuICBcdH0sXG5cbiAgXHQvLyBjb252ZXJ0cyB0aWxlIGNvb3JkaW5hdGVzIHRvIGl0cyBnZW9ncmFwaGljYWwgYm91bmRzXG4gIFx0X3RpbGVDb29yZHNUb0JvdW5kczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGJwID0gdGhpcy5fdGlsZUNvb3Jkc1RvTndTZShjb29yZHMpLFxuICBcdFx0ICAgIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoYnBbMF0sIGJwWzFdKTtcblxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMubm9XcmFwKSB7XG4gIFx0XHRcdGJvdW5kcyA9IHRoaXMuX21hcC53cmFwTGF0TG5nQm91bmRzKGJvdW5kcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gYm91bmRzO1xuICBcdH0sXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjb29yZGluYXRlcyB0byBrZXkgZm9yIHRoZSB0aWxlIGNhY2hlXG4gIFx0X3RpbGVDb29yZHNUb0tleTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0cmV0dXJuIGNvb3Jkcy54ICsgJzonICsgY29vcmRzLnkgKyAnOicgKyBjb29yZHMuejtcbiAgXHR9LFxuXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjYWNoZSBrZXkgdG8gY29vcmRpbmF0ZXNcbiAgXHRfa2V5VG9UaWxlQ29vcmRzOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgayA9IGtleS5zcGxpdCgnOicpLFxuICBcdFx0ICAgIGNvb3JkcyA9IG5ldyBQb2ludCgra1swXSwgK2tbMV0pO1xuICBcdFx0Y29vcmRzLnogPSAra1syXTtcbiAgXHRcdHJldHVybiBjb29yZHM7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHJlbW92ZSh0aWxlLmVsKTtcblxuICBcdFx0ZGVsZXRlIHRoaXMuX3RpbGVzW2tleV07XG5cbiAgXHRcdC8vIEBldmVudCB0aWxldW5sb2FkOiBUaWxlRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSB0aWxlIGlzIHJlbW92ZWQgKGUuZy4gd2hlbiBhIHRpbGUgZ29lcyBvZmYgdGhlIHNjcmVlbikuXG4gIFx0XHR0aGlzLmZpcmUoJ3RpbGV1bmxvYWQnLCB7XG4gIFx0XHRcdHRpbGU6IHRpbGUuZWwsXG4gIFx0XHRcdGNvb3JkczogdGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSlcbiAgXHRcdH0pO1xuICBcdH0sXG5cbiAgXHRfaW5pdFRpbGU6IGZ1bmN0aW9uICh0aWxlKSB7XG4gIFx0XHRhZGRDbGFzcyh0aWxlLCAnbGVhZmxldC10aWxlJyk7XG5cbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHRpbGUuc3R5bGUud2lkdGggPSB0aWxlU2l6ZS54ICsgJ3B4JztcbiAgXHRcdHRpbGUuc3R5bGUuaGVpZ2h0ID0gdGlsZVNpemUueSArICdweCc7XG5cbiAgXHRcdHRpbGUub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHR0aWxlLm9ubW91c2Vtb3ZlID0gZmFsc2VGbjtcblxuICBcdFx0Ly8gdXBkYXRlIG9wYWNpdHkgb24gdGlsZXMgaW4gSUU3LTggYmVjYXVzZSBvZiBmaWx0ZXIgaW5oZXJpdGFuY2UgcHJvYmxlbXNcbiAgXHRcdGlmIChCcm93c2VyLmllbHQ5ICYmIHRoaXMub3B0aW9ucy5vcGFjaXR5IDwgMSkge1xuICBcdFx0XHRzZXRPcGFjaXR5KHRpbGUsIHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZFRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGNvbnRhaW5lcikge1xuICBcdFx0dmFyIHRpbGVQb3MgPSB0aGlzLl9nZXRUaWxlUG9zKGNvb3JkcyksXG4gIFx0XHQgICAga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3Jkcyk7XG5cbiAgXHRcdHZhciB0aWxlID0gdGhpcy5jcmVhdGVUaWxlKHRoaXMuX3dyYXBDb29yZHMoY29vcmRzKSwgYmluZCh0aGlzLl90aWxlUmVhZHksIHRoaXMsIGNvb3JkcykpO1xuXG4gIFx0XHR0aGlzLl9pbml0VGlsZSh0aWxlKTtcblxuICBcdFx0Ly8gaWYgY3JlYXRlVGlsZSBpcyBkZWZpbmVkIHdpdGggYSBzZWNvbmQgYXJndW1lbnQgKFwiZG9uZVwiIGNhbGxiYWNrKSxcbiAgXHRcdC8vIHdlIGtub3cgdGhhdCB0aWxlIGlzIGFzeW5jIGFuZCB3aWxsIGJlIHJlYWR5IGxhdGVyOyBvdGhlcndpc2VcbiAgXHRcdGlmICh0aGlzLmNyZWF0ZVRpbGUubGVuZ3RoIDwgMikge1xuICBcdFx0XHQvLyBtYXJrIHRpbGUgYXMgcmVhZHksIGJ1dCBkZWxheSBvbmUgZnJhbWUgZm9yIG9wYWNpdHkgYW5pbWF0aW9uIHRvIGhhcHBlblxuICBcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGJpbmQodGhpcy5fdGlsZVJlYWR5LCB0aGlzLCBjb29yZHMsIG51bGwsIHRpbGUpKTtcbiAgXHRcdH1cblxuICBcdFx0c2V0UG9zaXRpb24odGlsZSwgdGlsZVBvcyk7XG5cbiAgXHRcdC8vIHNhdmUgdGlsZSBpbiBjYWNoZVxuICBcdFx0dGhpcy5fdGlsZXNba2V5XSA9IHtcbiAgXHRcdFx0ZWw6IHRpbGUsXG4gIFx0XHRcdGNvb3JkczogY29vcmRzLFxuICBcdFx0XHRjdXJyZW50OiB0cnVlXG4gIFx0XHR9O1xuXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodGlsZSk7XG4gIFx0XHQvLyBAZXZlbnQgdGlsZWxvYWRzdGFydDogVGlsZUV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBpcyByZXF1ZXN0ZWQgYW5kIHN0YXJ0cyBsb2FkaW5nLlxuICBcdFx0dGhpcy5maXJlKCd0aWxlbG9hZHN0YXJ0Jywge1xuICBcdFx0XHR0aWxlOiB0aWxlLFxuICBcdFx0XHRjb29yZHM6IGNvb3Jkc1xuICBcdFx0fSk7XG4gIFx0fSxcblxuICBcdF90aWxlUmVhZHk6IGZ1bmN0aW9uIChjb29yZHMsIGVyciwgdGlsZSkge1xuICBcdFx0aWYgKGVycikge1xuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWVycm9yOiBUaWxlRXJyb3JFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIGxvYWRpbmcgYSB0aWxlLlxuICBcdFx0XHR0aGlzLmZpcmUoJ3RpbGVlcnJvcicsIHtcbiAgXHRcdFx0XHRlcnJvcjogZXJyLFxuICBcdFx0XHRcdHRpbGU6IHRpbGUsXG4gIFx0XHRcdFx0Y29vcmRzOiBjb29yZHNcbiAgXHRcdFx0fSk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBrZXkgPSB0aGlzLl90aWxlQ29vcmRzVG9LZXkoY29vcmRzKTtcblxuICBcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRpbGUubG9hZGVkID0gK25ldyBEYXRlKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9mYWRlQW5pbWF0ZWQpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLmVsLCAwKTtcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSk7XG4gIFx0XHRcdHRoaXMuX2ZhZGVGcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlT3BhY2l0eSwgdGhpcyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aWxlLmFjdGl2ZSA9IHRydWU7XG4gIFx0XHRcdHRoaXMuX3BydW5lVGlsZXMoKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKCFlcnIpIHtcbiAgXHRcdFx0YWRkQ2xhc3ModGlsZS5lbCwgJ2xlYWZsZXQtdGlsZS1sb2FkZWQnKTtcblxuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWxvYWQ6IFRpbGVFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBsb2Fkcy5cbiAgXHRcdFx0dGhpcy5maXJlKCd0aWxlbG9hZCcsIHtcbiAgXHRcdFx0XHR0aWxlOiB0aWxlLmVsLFxuICBcdFx0XHRcdGNvb3JkczogY29vcmRzXG4gIFx0XHRcdH0pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fbm9UaWxlc1RvTG9hZCgpKSB7XG4gIFx0XHRcdHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgXHRcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gdGhlIGdyaWQgbGF5ZXIgbG9hZGVkIGFsbCB2aXNpYmxlIHRpbGVzLlxuICBcdFx0XHR0aGlzLmZpcmUoJ2xvYWQnKTtcblxuICBcdFx0XHRpZiAoQnJvd3Nlci5pZWx0OSB8fCAhdGhpcy5fbWFwLl9mYWRlQW5pbWF0ZWQpIHtcbiAgXHRcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3BydW5lVGlsZXMsIHRoaXMpO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdC8vIFdhaXQgYSBiaXQgbW9yZSB0aGFuIDAuMiBzZWNzICh0aGUgZHVyYXRpb24gb2YgdGhlIHRpbGUgZmFkZS1pbilcbiAgXHRcdFx0XHQvLyB0byB0cmlnZ2VyIGEgcHJ1bmluZy5cbiAgXHRcdFx0XHRzZXRUaW1lb3V0KGJpbmQodGhpcy5fcHJ1bmVUaWxlcywgdGhpcyksIDI1MCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2dldFRpbGVQb3M6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgXHRcdHJldHVybiBjb29yZHMuc2NhbGVCeSh0aGlzLmdldFRpbGVTaXplKCkpLnN1YnRyYWN0KHRoaXMuX2xldmVsLm9yaWdpbik7XG4gIFx0fSxcblxuICBcdF93cmFwQ29vcmRzOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gIFx0XHR2YXIgbmV3Q29vcmRzID0gbmV3IFBvaW50KFxuICBcdFx0XHR0aGlzLl93cmFwWCA/IHdyYXBOdW0oY29vcmRzLngsIHRoaXMuX3dyYXBYKSA6IGNvb3Jkcy54LFxuICBcdFx0XHR0aGlzLl93cmFwWSA/IHdyYXBOdW0oY29vcmRzLnksIHRoaXMuX3dyYXBZKSA6IGNvb3Jkcy55KTtcbiAgXHRcdG5ld0Nvb3Jkcy56ID0gY29vcmRzLno7XG4gIFx0XHRyZXR1cm4gbmV3Q29vcmRzO1xuICBcdH0sXG5cbiAgXHRfcHhCb3VuZHNUb1RpbGVSYW5nZTogZnVuY3Rpb24gKGJvdW5kcykge1xuICBcdFx0dmFyIHRpbGVTaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpO1xuICBcdFx0cmV0dXJuIG5ldyBCb3VuZHMoXG4gIFx0XHRcdGJvdW5kcy5taW4udW5zY2FsZUJ5KHRpbGVTaXplKS5mbG9vcigpLFxuICBcdFx0XHRib3VuZHMubWF4LnVuc2NhbGVCeSh0aWxlU2l6ZSkuY2VpbCgpLnN1YnRyYWN0KFsxLCAxXSkpO1xuICBcdH0sXG5cbiAgXHRfbm9UaWxlc1RvTG9hZDogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdGlmICghdGhpcy5fdGlsZXNba2V5XS5sb2FkZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdHJ1ZTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBmYWN0b3J5IEwuZ3JpZExheWVyKG9wdGlvbnM/OiBHcmlkTGF5ZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBHcmlkTGF5ZXIgd2l0aCB0aGUgc3VwcGxpZWQgb3B0aW9ucy5cbiAgZnVuY3Rpb24gZ3JpZExheWVyKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IEdyaWRMYXllcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIFRpbGVMYXllclxyXG4gICAqIEBpbmhlcml0cyBHcmlkTGF5ZXJcclxuICAgKiBAYWthIEwuVGlsZUxheWVyXHJcbiAgICogVXNlZCB0byBsb2FkIGFuZCBkaXNwbGF5IHRpbGUgbGF5ZXJzIG9uIHRoZSBtYXAuIE5vdGUgdGhhdCBtb3N0IHRpbGUgc2VydmVycyByZXF1aXJlIGF0dHJpYnV0aW9uLCB3aGljaCB5b3UgY2FuIHNldCB1bmRlciBgTGF5ZXJgLiBFeHRlbmRzIGBHcmlkTGF5ZXJgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC50aWxlTGF5ZXIoJ2h0dHBzOi8vdGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmc/e2Zvb30nLCB7Zm9vOiAnYmFyJywgYXR0cmlidXRpb246ICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycyd9KS5hZGRUbyhtYXApO1xuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBzZWN0aW9uIFVSTCB0ZW1wbGF0ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBIHN0cmluZyBvZiB0aGUgZm9sbG93aW5nIGZvcm06XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiAnaHR0cHM6Ly97c30uc29tZWRvbWFpbi5jb20vYmxhYmxhL3t6fS97eH0ve3l9e3J9LnBuZydcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIGB7c31gIG1lYW5zIG9uZSBvZiB0aGUgYXZhaWxhYmxlIHN1YmRvbWFpbnMgKHVzZWQgc2VxdWVudGlhbGx5IHRvIGhlbHAgd2l0aCBicm93c2VyIHBhcmFsbGVsIHJlcXVlc3RzIHBlciBkb21haW4gbGltaXRhdGlvbjsgc3ViZG9tYWluIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGluIG9wdGlvbnM7IGBhYCwgYGJgIG9yIGBjYCBieSBkZWZhdWx0LCBjYW4gYmUgb21pdHRlZCksIGB7en1gIOKAlCB6b29tIGxldmVsLCBge3h9YCBhbmQgYHt5fWAg4oCUIHRpbGUgY29vcmRpbmF0ZXMuIGB7cn1gIGNhbiBiZSB1c2VkIHRvIGFkZCBcIiZjb21tYXQ7MnhcIiB0byB0aGUgVVJMIHRvIGxvYWQgcmV0aW5hIHRpbGVzLlxyXG4gICAqXHJcbiAgICogWW91IGNhbiB1c2UgY3VzdG9tIGtleXMgaW4gdGhlIHRlbXBsYXRlLCB3aGljaCB3aWxsIGJlIFtldmFsdWF0ZWRdKCN1dGlsLXRlbXBsYXRlKSBmcm9tIFRpbGVMYXllciBvcHRpb25zLCBsaWtlIHRoaXM6XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBMLnRpbGVMYXllcignaHR0cHM6Ly97c30uc29tZWRvbWFpbi5jb20ve2Zvb30ve3p9L3t4fS97eX0ucG5nJywge2ZvbzogJ2Jhcid9KTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcblxyXG4gIHZhciBUaWxlTGF5ZXIgPSBHcmlkTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBUaWxlTGF5ZXIgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIG1pblpvb206IE51bWJlciA9IDBcclxuICBcdFx0Ly8gVGhlIG1pbmltdW0gem9vbSBsZXZlbCBkb3duIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXHJcbiAgXHRcdG1pblpvb206IDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG1heFpvb206IE51bWJlciA9IDE4XHJcbiAgXHRcdC8vIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdXAgdG8gd2hpY2ggdGhpcyBsYXllciB3aWxsIGJlIGRpc3BsYXllZCAoaW5jbHVzaXZlKS5cclxuICBcdFx0bWF4Wm9vbTogMTgsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHN1YmRvbWFpbnM6IFN0cmluZ3xTdHJpbmdbXSA9ICdhYmMnXHJcbiAgXHRcdC8vIFN1YmRvbWFpbnMgb2YgdGhlIHRpbGUgc2VydmljZS4gQ2FuIGJlIHBhc3NlZCBpbiB0aGUgZm9ybSBvZiBvbmUgc3RyaW5nICh3aGVyZSBlYWNoIGxldHRlciBpcyBhIHN1YmRvbWFpbiBuYW1lKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG4gIFx0XHRzdWJkb21haW5zOiAnYWJjJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZXJyb3JUaWxlVXJsOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBVUkwgdG8gdGhlIHRpbGUgaW1hZ2UgdG8gc2hvdyBpbiBwbGFjZSBvZiB0aGUgdGlsZSB0aGF0IGZhaWxlZCB0byBsb2FkLlxyXG4gIFx0XHRlcnJvclRpbGVVcmw6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tT2Zmc2V0OiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIFRoZSB6b29tIG51bWJlciB1c2VkIGluIHRpbGUgVVJMcyB3aWxsIGJlIG9mZnNldCB3aXRoIHRoaXMgdmFsdWUuXHJcbiAgXHRcdHpvb21PZmZzZXQ6IDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRtczogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgaW52ZXJzZXMgWSBheGlzIG51bWJlcmluZyBmb3IgdGlsZXMgKHR1cm4gdGhpcyBvbiBmb3IgW1RNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGlsZV9NYXBfU2VydmljZSkgc2VydmljZXMpLlxyXG4gIFx0XHR0bXM6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tUmV2ZXJzZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIHNldCB0byB0cnVlLCB0aGUgem9vbSBudW1iZXIgdXNlZCBpbiB0aWxlIFVSTHMgd2lsbCBiZSByZXZlcnNlZCAoYG1heFpvb20gLSB6b29tYCBpbnN0ZWFkIG9mIGB6b29tYClcclxuICBcdFx0em9vbVJldmVyc2U6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBkZXRlY3RSZXRpbmE6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAgYW5kIHVzZXIgaXMgb24gYSByZXRpbmEgZGlzcGxheSwgaXQgd2lsbCByZXF1ZXN0IGZvdXIgdGlsZXMgb2YgaGFsZiB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIGEgYmlnZ2VyIHpvb20gbGV2ZWwgaW4gcGxhY2Ugb2Ygb25lIHRvIHV0aWxpemUgdGhlIGhpZ2ggcmVzb2x1dGlvbi5cclxuICBcdFx0ZGV0ZWN0UmV0aW5hOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY3Jvc3NPcmlnaW46IEJvb2xlYW58U3RyaW5nID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRpbGVzLlxyXG4gIFx0XHQvLyBJZiBhIFN0cmluZyBpcyBwcm92aWRlZCwgYWxsIHRpbGVzIHdpbGwgaGF2ZSB0aGVpciBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgc2V0IHRvIHRoZSBTdHJpbmcgcHJvdmlkZWQuIFRoaXMgaXMgbmVlZGVkIGlmIHlvdSB3YW50IHRvIGFjY2VzcyB0aWxlIHBpeGVsIGRhdGEuXHJcbiAgXHRcdC8vIFJlZmVyIHRvIFtDT1JTIFNldHRpbmdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIHZhbGlkIFN0cmluZyB2YWx1ZXMuXHJcbiAgXHRcdGNyb3NzT3JpZ2luOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcmVmZXJyZXJQb2xpY3k6IEJvb2xlYW58U3RyaW5nID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgcmVmZXJyZXJQb2xpY3kgYXR0cmlidXRlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRpbGVzLlxyXG4gIFx0XHQvLyBJZiBhIFN0cmluZyBpcyBwcm92aWRlZCwgYWxsIHRpbGVzIHdpbGwgaGF2ZSB0aGVpciByZWZlcnJlclBvbGljeSBhdHRyaWJ1dGUgc2V0IHRvIHRoZSBTdHJpbmcgcHJvdmlkZWQuXHJcbiAgXHRcdC8vIFRoaXMgbWF5IGJlIG5lZWRlZCBpZiB5b3VyIG1hcCdzIHJlbmRlcmluZyBjb250ZXh0IGhhcyBhIHN0cmljdCBkZWZhdWx0IGJ1dCB5b3VyIHRpbGUgcHJvdmlkZXIgZXhwZWN0cyBhIHZhbGlkIHJlZmVycmVyXHJcbiAgXHRcdC8vIChlLmcuIHRvIHZhbGlkYXRlIGFuIEFQSSB0b2tlbikuXHJcbiAgXHRcdC8vIFJlZmVyIHRvIFtIVE1MSW1hZ2VFbGVtZW50LnJlZmVycmVyUG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEltYWdlRWxlbWVudC9yZWZlcnJlclBvbGljeSkgZm9yIHZhbGlkIFN0cmluZyB2YWx1ZXMuXHJcbiAgXHRcdHJlZmVycmVyUG9saWN5OiBmYWxzZVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHR0aGlzLl91cmwgPSB1cmw7XHJcblxyXG4gIFx0XHRvcHRpb25zID0gc2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdC8vIGRldGVjdGluZyByZXRpbmEgZGlzcGxheXMsIGFkanVzdGluZyB0aWxlU2l6ZSBhbmQgem9vbSBsZXZlbHNcclxuICBcdFx0aWYgKG9wdGlvbnMuZGV0ZWN0UmV0aW5hICYmIEJyb3dzZXIucmV0aW5hICYmIG9wdGlvbnMubWF4Wm9vbSA+IDApIHtcclxuXHJcbiAgXHRcdFx0b3B0aW9ucy50aWxlU2l6ZSA9IE1hdGguZmxvb3Iob3B0aW9ucy50aWxlU2l6ZSAvIDIpO1xyXG5cclxuICBcdFx0XHRpZiAoIW9wdGlvbnMuem9vbVJldmVyc2UpIHtcclxuICBcdFx0XHRcdG9wdGlvbnMuem9vbU9mZnNldCsrO1xyXG4gIFx0XHRcdFx0b3B0aW9ucy5tYXhab29tID0gTWF0aC5tYXgob3B0aW9ucy5taW5ab29tLCBvcHRpb25zLm1heFpvb20gLSAxKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tT2Zmc2V0LS07XHJcbiAgXHRcdFx0XHRvcHRpb25zLm1pblpvb20gPSBNYXRoLm1pbihvcHRpb25zLm1heFpvb20sIG9wdGlvbnMubWluWm9vbSArIDEpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0b3B0aW9ucy5taW5ab29tID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5ab29tKTtcclxuICBcdFx0fSBlbHNlIGlmICghb3B0aW9ucy56b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdC8vIG1ha2Ugc3VyZSBtYXhab29tIGlzIGd0ZSBtaW5ab29tXHJcbiAgXHRcdFx0b3B0aW9ucy5tYXhab29tID0gTWF0aC5tYXgob3B0aW9ucy5taW5ab29tLCBvcHRpb25zLm1heFpvb20pO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIG1ha2Ugc3VyZSBtaW5ab29tIGlzIGx0ZSBtYXhab29tXHJcbiAgXHRcdFx0b3B0aW9ucy5taW5ab29tID0gTWF0aC5taW4ob3B0aW9ucy5tYXhab29tLCBvcHRpb25zLm1pblpvb20pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIG9wdGlvbnMuc3ViZG9tYWlucyA9PT0gJ3N0cmluZycpIHtcclxuICBcdFx0XHRvcHRpb25zLnN1YmRvbWFpbnMgPSBvcHRpb25zLnN1YmRvbWFpbnMuc3BsaXQoJycpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLm9uKCd0aWxldW5sb2FkJywgdGhpcy5fb25UaWxlUmVtb3ZlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRVcmwodXJsOiBTdHJpbmcsIG5vUmVkcmF3PzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIFVwZGF0ZXMgdGhlIGxheWVyJ3MgVVJMIHRlbXBsYXRlIGFuZCByZWRyYXdzIGl0ICh1bmxlc3MgYG5vUmVkcmF3YCBpcyBzZXQgdG8gYHRydWVgKS5cclxuICBcdC8vIElmIHRoZSBVUkwgZG9lcyBub3QgY2hhbmdlLCB0aGUgbGF5ZXIgd2lsbCBub3QgYmUgcmVkcmF3biB1bmxlc3NcclxuICBcdC8vIHRoZSBub1JlZHJhdyBwYXJhbWV0ZXIgaXMgc2V0IHRvIGZhbHNlLlxyXG4gIFx0c2V0VXJsOiBmdW5jdGlvbiAodXJsLCBub1JlZHJhdykge1xyXG4gIFx0XHRpZiAodGhpcy5fdXJsID09PSB1cmwgJiYgbm9SZWRyYXcgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdG5vUmVkcmF3ID0gdHJ1ZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0aWYgKCFub1JlZHJhdykge1xyXG4gIFx0XHRcdHRoaXMucmVkcmF3KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY3JlYXRlVGlsZShjb29yZHM6IE9iamVjdCwgZG9uZT86IEZ1bmN0aW9uKTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG92ZXJyaWRlcyBHcmlkTGF5ZXIncyBbYGNyZWF0ZVRpbGUoKWBdKCNncmlkbGF5ZXItY3JlYXRldGlsZSlcclxuICBcdC8vIHRvIHJldHVybiBhbiBgPGltZz5gIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBpbWFnZSBVUkwgZ2l2ZW4gYGNvb3Jkc2AuIFRoZSBgZG9uZWBcclxuICBcdC8vIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBiZWVuIGxvYWRlZC5cclxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGRvbmUpIHtcclxuICBcdFx0dmFyIHRpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgXHRcdG9uKHRpbGUsICdsb2FkJywgYmluZCh0aGlzLl90aWxlT25Mb2FkLCB0aGlzLCBkb25lLCB0aWxlKSk7XHJcbiAgXHRcdG9uKHRpbGUsICdlcnJvcicsIGJpbmQodGhpcy5fdGlsZU9uRXJyb3IsIHRoaXMsIGRvbmUsIHRpbGUpKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gfHwgdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSAnJykge1xyXG4gIFx0XHRcdHRpbGUuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gZm9yIHRoaXMgbmV3IG9wdGlvbiB3ZSBmb2xsb3cgdGhlIGRvY3VtZW50ZWQgYmVoYXZpb3JcclxuICBcdFx0Ly8gbW9yZSBjbG9zZWx5IGJ5IG9ubHkgc2V0dGluZyB0aGUgcHJvcGVydHkgd2hlbiBzdHJpbmdcclxuICBcdFx0aWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXJyZXJQb2xpY3kgPT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0dGlsZS5yZWZlcnJlclBvbGljeSA9IHRoaXMub3B0aW9ucy5yZWZlcnJlclBvbGljeTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gVGhlIGFsdCBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcsXHJcbiAgXHRcdC8vIGFsbG93aW5nIHNjcmVlbiByZWFkZXJzIHRvIGlnbm9yZSB0aGUgZGVjb3JhdGl2ZSBpbWFnZSB0aWxlcy5cclxuICBcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1dBSS90dXRvcmlhbHMvaW1hZ2VzL2RlY29yYXRpdmUvXHJcbiAgXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sLWFyaWEvI2VsLWltZy1lbXB0eS1hbHRcclxuICBcdFx0dGlsZS5hbHQgPSAnJztcclxuXHJcbiAgXHRcdHRpbGUuc3JjID0gdGhpcy5nZXRUaWxlVXJsKGNvb3Jkcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGlsZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gRXh0ZW5zaW9uIG1ldGhvZHNcclxuICBcdC8vIEB1bmluaGVyaXRhYmxlXHJcbiAgXHQvLyBMYXllcnMgZXh0ZW5kaW5nIGBUaWxlTGF5ZXJgIG1pZ2h0IHJlaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgbWV0aG9kLlxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRUaWxlVXJsKGNvb3JkczogT2JqZWN0KTogU3RyaW5nXHJcbiAgXHQvLyBDYWxsZWQgb25seSBpbnRlcm5hbGx5LCByZXR1cm5zIHRoZSBVUkwgZm9yIGEgdGlsZSBnaXZlbiBpdHMgY29vcmRpbmF0ZXMuXHJcbiAgXHQvLyBDbGFzc2VzIGV4dGVuZGluZyBgVGlsZUxheWVyYCBjYW4gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBwcm92aWRlIGN1c3RvbSB0aWxlIFVSTCBuYW1pbmcgc2NoZW1lcy5cclxuICBcdGdldFRpbGVVcmw6IGZ1bmN0aW9uIChjb29yZHMpIHtcclxuICBcdFx0dmFyIGRhdGEgPSB7XHJcbiAgXHRcdFx0cjogQnJvd3Nlci5yZXRpbmEgPyAnQDJ4JyA6ICcnLFxyXG4gIFx0XHRcdHM6IHRoaXMuX2dldFN1YmRvbWFpbihjb29yZHMpLFxyXG4gIFx0XHRcdHg6IGNvb3Jkcy54LFxyXG4gIFx0XHRcdHk6IGNvb3Jkcy55LFxyXG4gIFx0XHRcdHo6IHRoaXMuX2dldFpvb21Gb3JVcmwoKVxyXG4gIFx0XHR9O1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmICF0aGlzLl9tYXAub3B0aW9ucy5jcnMuaW5maW5pdGUpIHtcclxuICBcdFx0XHR2YXIgaW52ZXJ0ZWRZID0gdGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55IC0gY29vcmRzLnk7XHJcbiAgXHRcdFx0aWYgKHRoaXMub3B0aW9ucy50bXMpIHtcclxuICBcdFx0XHRcdGRhdGFbJ3knXSA9IGludmVydGVkWTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0ZGF0YVsnLXknXSA9IGludmVydGVkWTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRlbXBsYXRlKHRoaXMuX3VybCwgZXh0ZW5kKGRhdGEsIHRoaXMub3B0aW9ucykpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdGlsZU9uTG9hZDogZnVuY3Rpb24gKGRvbmUsIHRpbGUpIHtcclxuICBcdFx0Ly8gRm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzMzMzJcclxuICBcdFx0aWYgKEJyb3dzZXIuaWVsdDkpIHtcclxuICBcdFx0XHRzZXRUaW1lb3V0KGJpbmQoZG9uZSwgdGhpcywgbnVsbCwgdGlsZSksIDApO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGRvbmUobnVsbCwgdGlsZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVPbkVycm9yOiBmdW5jdGlvbiAoZG9uZSwgdGlsZSwgZSkge1xyXG4gIFx0XHR2YXIgZXJyb3JVcmwgPSB0aGlzLm9wdGlvbnMuZXJyb3JUaWxlVXJsO1xyXG4gIFx0XHRpZiAoZXJyb3JVcmwgJiYgdGlsZS5nZXRBdHRyaWJ1dGUoJ3NyYycpICE9PSBlcnJvclVybCkge1xyXG4gIFx0XHRcdHRpbGUuc3JjID0gZXJyb3JVcmw7XHJcbiAgXHRcdH1cclxuICBcdFx0ZG9uZShlLCB0aWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uVGlsZVJlbW92ZTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0ZS50aWxlLm9ubG9hZCA9IG51bGw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRab29tRm9yVXJsOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciB6b29tID0gdGhpcy5fdGlsZVpvb20sXHJcbiAgXHRcdG1heFpvb20gPSB0aGlzLm9wdGlvbnMubWF4Wm9vbSxcclxuICBcdFx0em9vbVJldmVyc2UgPSB0aGlzLm9wdGlvbnMuem9vbVJldmVyc2UsXHJcbiAgXHRcdHpvb21PZmZzZXQgPSB0aGlzLm9wdGlvbnMuem9vbU9mZnNldDtcclxuXHJcbiAgXHRcdGlmICh6b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdHpvb20gPSBtYXhab29tIC0gem9vbTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHpvb20gKyB6b29tT2Zmc2V0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0U3ViZG9tYWluOiBmdW5jdGlvbiAodGlsZVBvaW50KSB7XHJcbiAgXHRcdHZhciBpbmRleCA9IE1hdGguYWJzKHRpbGVQb2ludC54ICsgdGlsZVBvaW50LnkpICUgdGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaW5kZXhdO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBzdG9wcyBsb2FkaW5nIGFsbCB0aWxlcyBpbiB0aGUgYmFja2dyb3VuZCBsYXllclxyXG4gIFx0X2Fib3J0TG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaSwgdGlsZTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX3RpbGVzKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56ICE9PSB0aGlzLl90aWxlWm9vbSkge1xyXG4gIFx0XHRcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2ldLmVsO1xyXG5cclxuICBcdFx0XHRcdHRpbGUub25sb2FkID0gZmFsc2VGbjtcclxuICBcdFx0XHRcdHRpbGUub25lcnJvciA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHRcdFx0aWYgKCF0aWxlLmNvbXBsZXRlKSB7XHJcbiAgXHRcdFx0XHRcdHRpbGUuc3JjID0gZW1wdHlJbWFnZVVybDtcclxuICBcdFx0XHRcdFx0dmFyIGNvb3JkcyA9IHRoaXMuX3RpbGVzW2ldLmNvb3JkcztcclxuICBcdFx0XHRcdFx0cmVtb3ZlKHRpbGUpO1xyXG4gIFx0XHRcdFx0XHRkZWxldGUgdGhpcy5fdGlsZXNbaV07XHJcbiAgXHRcdFx0XHRcdC8vIEBldmVudCB0aWxlYWJvcnQ6IFRpbGVFdmVudFxyXG4gIFx0XHRcdFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSB3YXMgbG9hZGluZyBidXQgaXMgbm93IG5vdCB3YW50ZWQuXHJcbiAgXHRcdFx0XHRcdHRoaXMuZmlyZSgndGlsZWFib3J0Jywge1xyXG4gIFx0XHRcdFx0XHRcdHRpbGU6IHRpbGUsXHJcbiAgXHRcdFx0XHRcdFx0Y29vcmRzOiBjb29yZHNcclxuICBcdFx0XHRcdFx0fSk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgXHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcclxuICBcdFx0aWYgKCF0aWxlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gQ2FuY2VscyBhbnkgcGVuZGluZyBodHRwIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGlsZVxyXG4gIFx0XHR0aWxlLmVsLnNldEF0dHJpYnV0ZSgnc3JjJywgZW1wdHlJbWFnZVVybCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gR3JpZExheWVyLnByb3RvdHlwZS5fcmVtb3ZlVGlsZS5jYWxsKHRoaXMsIGtleSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90aWxlUmVhZHk6IGZ1bmN0aW9uIChjb29yZHMsIGVyciwgdGlsZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCB8fCAodGlsZSAmJiB0aWxlLmdldEF0dHJpYnV0ZSgnc3JjJykgPT09IGVtcHR5SW1hZ2VVcmwpKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gR3JpZExheWVyLnByb3RvdHlwZS5fdGlsZVJlYWR5LmNhbGwodGhpcywgY29vcmRzLCBlcnIsIHRpbGUpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC50aWxlbGF5ZXIodXJsVGVtcGxhdGU6IFN0cmluZywgb3B0aW9ucz86IFRpbGVMYXllciBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIHRpbGUgbGF5ZXIgb2JqZWN0IGdpdmVuIGEgYFVSTCB0ZW1wbGF0ZWAgYW5kIG9wdGlvbmFsbHkgYW4gb3B0aW9ucyBvYmplY3QuXHJcblxyXG4gIGZ1bmN0aW9uIHRpbGVMYXllcih1cmwsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgVGlsZUxheWVyKHVybCwgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIFRpbGVMYXllci5XTVNcclxuICAgKiBAaW5oZXJpdHMgVGlsZUxheWVyXHJcbiAgICogQGFrYSBMLlRpbGVMYXllci5XTVNcclxuICAgKiBVc2VkIHRvIGRpc3BsYXkgW1dNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2ViX01hcF9TZXJ2aWNlKSBzZXJ2aWNlcyBhcyB0aWxlIGxheWVycyBvbiB0aGUgbWFwLiBFeHRlbmRzIGBUaWxlTGF5ZXJgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIG5leHJhZCA9IEwudGlsZUxheWVyLndtcyhcImh0dHA6Ly9tZXNvbmV0LmFncm9uLmlhc3RhdGUuZWR1L2NnaS1iaW4vd21zL25leHJhZC9uMHIuY2dpXCIsIHtcclxuICAgKiBcdGxheWVyczogJ25leHJhZC1uMHItOTAwOTEzJyxcclxuICAgKiBcdGZvcm1hdDogJ2ltYWdlL3BuZycsXHJcbiAgICogXHR0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgKiBcdGF0dHJpYnV0aW9uOiBcIldlYXRoZXIgZGF0YSDCqSAyMDEyIElFTSBOZXhyYWRcIlxyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgVGlsZUxheWVyV01TID0gVGlsZUxheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgVGlsZUxheWVyLldNUyBvcHRpb25zXHJcbiAgXHQvLyBJZiBhbnkgY3VzdG9tIG9wdGlvbnMgbm90IGRvY3VtZW50ZWQgaGVyZSBhcmUgdXNlZCwgdGhleSB3aWxsIGJlIHNlbnQgdG8gdGhlXHJcbiAgXHQvLyBXTVMgc2VydmVyIGFzIGV4dHJhIHBhcmFtZXRlcnMgaW4gZWFjaCByZXF1ZXN0IFVSTC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvclxyXG4gIFx0Ly8gW25vbi1zdGFuZGFyZCB2ZW5kb3IgV01TIHBhcmFtZXRlcnNdKGh0dHBzOi8vZG9jcy5nZW9zZXJ2ZXIub3JnL3N0YWJsZS9lbi91c2VyL3NlcnZpY2VzL3dtcy92ZW5kb3IuaHRtbCkuXHJcbiAgXHRkZWZhdWx0V21zUGFyYW1zOiB7XHJcbiAgXHRcdHNlcnZpY2U6ICdXTVMnLFxyXG4gIFx0XHRyZXF1ZXN0OiAnR2V0TWFwJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbGF5ZXJzOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyAqKihyZXF1aXJlZCkqKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBXTVMgbGF5ZXJzIHRvIHNob3cuXHJcbiAgXHRcdGxheWVyczogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHN0eWxlczogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgV01TIHN0eWxlcy5cclxuICBcdFx0c3R5bGVzOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZm9ybWF0OiBTdHJpbmcgPSAnaW1hZ2UvanBlZydcclxuICBcdFx0Ly8gV01TIGltYWdlIGZvcm1hdCAodXNlIGAnaW1hZ2UvcG5nJ2AgZm9yIGxheWVycyB3aXRoIHRyYW5zcGFyZW5jeSkuXHJcbiAgXHRcdGZvcm1hdDogJ2ltYWdlL2pwZWcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0cmFuc3BhcmVudDogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIFdNUyBzZXJ2aWNlIHdpbGwgcmV0dXJuIGltYWdlcyB3aXRoIHRyYW5zcGFyZW5jeS5cclxuICBcdFx0dHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB2ZXJzaW9uOiBTdHJpbmcgPSAnMS4xLjEnXHJcbiAgXHRcdC8vIFZlcnNpb24gb2YgdGhlIFdNUyBzZXJ2aWNlIHRvIHVzZVxyXG4gIFx0XHR2ZXJzaW9uOiAnMS4xLjEnXHJcbiAgXHR9LFxyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBjcnM6IENSUyA9IG51bGxcclxuICBcdFx0Ly8gQ29vcmRpbmF0ZSBSZWZlcmVuY2UgU3lzdGVtIHRvIHVzZSBmb3IgdGhlIFdNUyByZXF1ZXN0cywgZGVmYXVsdHMgdG9cclxuICBcdFx0Ly8gbWFwIENSUy4gRG9uJ3QgY2hhbmdlIHRoaXMgaWYgeW91J3JlIG5vdCBzdXJlIHdoYXQgaXQgbWVhbnMuXHJcbiAgXHRcdGNyczogbnVsbCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdXBwZXJjYXNlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgLCBXTVMgcmVxdWVzdCBwYXJhbWV0ZXIga2V5cyB3aWxsIGJlIHVwcGVyY2FzZS5cclxuICBcdFx0dXBwZXJjYXNlOiBmYWxzZVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHR0aGlzLl91cmwgPSB1cmw7XHJcblxyXG4gIFx0XHR2YXIgd21zUGFyYW1zID0gZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRXbXNQYXJhbXMpO1xyXG5cclxuICBcdFx0Ly8gYWxsIGtleXMgdGhhdCBhcmUgbm90IFRpbGVMYXllciBvcHRpb25zIGdvIHRvIFdNUyBwYXJhbXNcclxuICBcdFx0Zm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XHJcbiAgXHRcdFx0aWYgKCEoaSBpbiB0aGlzLm9wdGlvbnMpKSB7XHJcbiAgXHRcdFx0XHR3bXNQYXJhbXNbaV0gPSBvcHRpb25zW2ldO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR2YXIgcmVhbFJldGluYSA9IG9wdGlvbnMuZGV0ZWN0UmV0aW5hICYmIEJyb3dzZXIucmV0aW5hID8gMiA6IDE7XHJcbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcclxuICBcdFx0d21zUGFyYW1zLndpZHRoID0gdGlsZVNpemUueCAqIHJlYWxSZXRpbmE7XHJcbiAgXHRcdHdtc1BhcmFtcy5oZWlnaHQgPSB0aWxlU2l6ZS55ICogcmVhbFJldGluYTtcclxuXHJcbiAgXHRcdHRoaXMud21zUGFyYW1zID0gd21zUGFyYW1zO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG5cclxuICBcdFx0dGhpcy5fY3JzID0gdGhpcy5vcHRpb25zLmNycyB8fCBtYXAub3B0aW9ucy5jcnM7XHJcbiAgXHRcdHRoaXMuX3dtc1ZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMud21zUGFyYW1zLnZlcnNpb24pO1xyXG5cclxuICBcdFx0dmFyIHByb2plY3Rpb25LZXkgPSB0aGlzLl93bXNWZXJzaW9uID49IDEuMyA/ICdjcnMnIDogJ3Nycyc7XHJcbiAgXHRcdHRoaXMud21zUGFyYW1zW3Byb2plY3Rpb25LZXldID0gdGhpcy5fY3JzLmNvZGU7XHJcblxyXG4gIFx0XHRUaWxlTGF5ZXIucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcywgbWFwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0VGlsZVVybDogZnVuY3Rpb24gKGNvb3Jkcykge1xyXG5cclxuICBcdFx0dmFyIHRpbGVCb3VuZHMgPSB0aGlzLl90aWxlQ29vcmRzVG9Od1NlKGNvb3JkcyksXHJcbiAgXHRcdCAgICBjcnMgPSB0aGlzLl9jcnMsXHJcbiAgXHRcdCAgICBib3VuZHMgPSB0b0JvdW5kcyhjcnMucHJvamVjdCh0aWxlQm91bmRzWzBdKSwgY3JzLnByb2plY3QodGlsZUJvdW5kc1sxXSkpLFxyXG4gIFx0XHQgICAgbWluID0gYm91bmRzLm1pbixcclxuICBcdFx0ICAgIG1heCA9IGJvdW5kcy5tYXgsXHJcbiAgXHRcdCAgICBiYm94ID0gKHRoaXMuX3dtc1ZlcnNpb24gPj0gMS4zICYmIHRoaXMuX2NycyA9PT0gRVBTRzQzMjYgP1xyXG4gIFx0XHQgICAgW21pbi55LCBtaW4ueCwgbWF4LnksIG1heC54XSA6XHJcbiAgXHRcdCAgICBbbWluLngsIG1pbi55LCBtYXgueCwgbWF4LnldKS5qb2luKCcsJyksXHJcbiAgXHRcdCAgICB1cmwgPSBUaWxlTGF5ZXIucHJvdG90eXBlLmdldFRpbGVVcmwuY2FsbCh0aGlzLCBjb29yZHMpO1xyXG4gIFx0XHRyZXR1cm4gdXJsICtcclxuICBcdFx0XHRnZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcywgdXJsLCB0aGlzLm9wdGlvbnMudXBwZXJjYXNlKSArXHJcbiAgXHRcdFx0KHRoaXMub3B0aW9ucy51cHBlcmNhc2UgPyAnJkJCT1g9JyA6ICcmYmJveD0nKSArIGJib3g7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UGFyYW1zKHBhcmFtczogT2JqZWN0LCBub1JlZHJhdz86IEJvb2xlYW4pOiB0aGlzXHJcbiAgXHQvLyBNZXJnZXMgYW4gb2JqZWN0IHdpdGggdGhlIG5ldyBwYXJhbWV0ZXJzIGFuZCByZS1yZXF1ZXN0cyB0aWxlcyBvbiB0aGUgY3VycmVudCBzY3JlZW4gKHVubGVzcyBgbm9SZWRyYXdgIHdhcyBzZXQgdG8gdHJ1ZSkuXHJcbiAgXHRzZXRQYXJhbXM6IGZ1bmN0aW9uIChwYXJhbXMsIG5vUmVkcmF3KSB7XHJcblxyXG4gIFx0XHRleHRlbmQodGhpcy53bXNQYXJhbXMsIHBhcmFtcyk7XHJcblxyXG4gIFx0XHRpZiAoIW5vUmVkcmF3KSB7XHJcbiAgXHRcdFx0dGhpcy5yZWRyYXcoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLnRpbGVMYXllci53bXMoYmFzZVVybDogU3RyaW5nLCBvcHRpb25zOiBUaWxlTGF5ZXIuV01TIG9wdGlvbnMpXHJcbiAgLy8gSW5zdGFudGlhdGVzIGEgV01TIHRpbGUgbGF5ZXIgb2JqZWN0IGdpdmVuIGEgYmFzZSBVUkwgb2YgdGhlIFdNUyBzZXJ2aWNlIGFuZCBhIFdNUyBwYXJhbWV0ZXJzL29wdGlvbnMgb2JqZWN0LlxyXG4gIGZ1bmN0aW9uIHRpbGVMYXllcldNUyh1cmwsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgVGlsZUxheWVyV01TKHVybCwgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIFRpbGVMYXllci5XTVMgPSBUaWxlTGF5ZXJXTVM7XG4gIHRpbGVMYXllci53bXMgPSB0aWxlTGF5ZXJXTVM7XG5cbiAgLypcbiAgICogQGNsYXNzIFJlbmRlcmVyXG4gICAqIEBpbmhlcml0cyBMYXllclxuICAgKiBAYWthIEwuUmVuZGVyZXJcbiAgICpcbiAgICogQmFzZSBjbGFzcyBmb3IgdmVjdG9yIHJlbmRlcmVyIGltcGxlbWVudGF0aW9ucyAoYFNWR2AsIGBDYW52YXNgKS4gSGFuZGxlcyB0aGVcbiAgICogRE9NIGNvbnRhaW5lciBvZiB0aGUgcmVuZGVyZXIsIGl0cyBib3VuZHMsIGFuZCBpdHMgem9vbSBhbmltYXRpb24uXG4gICAqXG4gICAqIEEgYFJlbmRlcmVyYCB3b3JrcyBhcyBhbiBpbXBsaWNpdCBsYXllciBncm91cCBmb3IgYWxsIGBQYXRoYHMgLSB0aGUgcmVuZGVyZXJcbiAgICogaXRzZWxmIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIHRvIHRoZSBtYXAuIEFsbCBwYXRocyB1c2UgYSByZW5kZXJlciwgd2hpY2ggY2FuXG4gICAqIGJlIGltcGxpY2l0ICh0aGUgbWFwIHdpbGwgZGVjaWRlIHRoZSB0eXBlIG9mIHJlbmRlcmVyIGFuZCB1c2UgaXQgYXV0b21hdGljYWxseSlcbiAgICogb3IgZXhwbGljaXQgKHVzaW5nIHRoZSBbYHJlbmRlcmVyYF0oI3BhdGgtcmVuZGVyZXIpIG9wdGlvbiBvZiB0aGUgcGF0aCkuXG4gICAqXG4gICAqIERvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseSwgdXNlIGBTVkdgIGFuZCBgQ2FudmFzYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZXZlbnQgdXBkYXRlOiBFdmVudFxuICAgKiBGaXJlZCB3aGVuIHRoZSByZW5kZXJlciB1cGRhdGVzIGl0cyBib3VuZHMsIGNlbnRlciBhbmQgem9vbSwgZm9yIGV4YW1wbGUgd2hlblxuICAgKiBpdHMgbWFwIGhhcyBtb3ZlZFxuICAgKi9cblxuICB2YXIgUmVuZGVyZXIgPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFJlbmRlcmVyIG9wdGlvbnNcbiAgXHRvcHRpb25zOiB7XG4gIFx0XHQvLyBAb3B0aW9uIHBhZGRpbmc6IE51bWJlciA9IDAuMVxuICBcdFx0Ly8gSG93IG11Y2ggdG8gZXh0ZW5kIHRoZSBjbGlwIGFyZWEgYXJvdW5kIHRoZSBtYXAgdmlldyAocmVsYXRpdmUgdG8gaXRzIHNpemUpXG4gIFx0XHQvLyBlLmcuIDAuMSB3b3VsZCBiZSAxMCUgb2YgbWFwIHZpZXcgaW4gZWFjaCBkaXJlY3Rpb25cbiAgXHRcdHBhZGRpbmc6IDAuMVxuICBcdH0sXG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHN0YW1wKHRoaXMpO1xuICBcdFx0dGhpcy5fbGF5ZXJzID0gdGhpcy5fbGF5ZXJzIHx8IHt9O1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgXHRcdFx0dGhpcy5faW5pdENvbnRhaW5lcigpOyAvLyBkZWZpbmVkIGJ5IHJlbmRlcmVyIGltcGxlbWVudGF0aW9uc1xuXG4gIFx0XHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcbiAgXHRcdFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0XHR0aGlzLm9uKCd1cGRhdGUnLCB0aGlzLl91cGRhdGVQYXRocywgdGhpcyk7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLm9mZigndXBkYXRlJywgdGhpcy5fdXBkYXRlUGF0aHMsIHRoaXMpO1xuICBcdFx0dGhpcy5fZGVzdHJveUNvbnRhaW5lcigpO1xuICBcdH0sXG5cbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBldmVudHMgPSB7XG4gIFx0XHRcdHZpZXdyZXNldDogdGhpcy5fcmVzZXQsXG4gIFx0XHRcdHpvb206IHRoaXMuX29uWm9vbSxcbiAgXHRcdFx0bW92ZWVuZDogdGhpcy5fdXBkYXRlLFxuICBcdFx0XHR6b29tZW5kOiB0aGlzLl9vblpvb21FbmRcbiAgXHRcdH07XG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX29uQW5pbVpvb207XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xuICBcdH0sXG5cbiAgXHRfb25BbmltWm9vbTogZnVuY3Rpb24gKGV2KSB7XG4gIFx0XHR0aGlzLl91cGRhdGVUcmFuc2Zvcm0oZXYuY2VudGVyLCBldi56b29tKTtcbiAgXHR9LFxuXG4gIFx0X29uWm9vbTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX21hcC5nZXRDZW50ZXIoKSwgdGhpcy5fbWFwLmdldFpvb20oKSk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVUcmFuc2Zvcm06IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuX21hcC5nZXRab29tU2NhbGUoem9vbSwgdGhpcy5fem9vbSksXG4gIFx0XHQgICAgdmlld0hhbGYgPSB0aGlzLl9tYXAuZ2V0U2l6ZSgpLm11bHRpcGx5QnkoMC41ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpLFxuICBcdFx0ICAgIGN1cnJlbnRDZW50ZXJQb2ludCA9IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2NlbnRlciwgem9vbSksXG5cbiAgXHRcdCAgICB0b3BMZWZ0T2Zmc2V0ID0gdmlld0hhbGYubXVsdGlwbHlCeSgtc2NhbGUpLmFkZChjdXJyZW50Q2VudGVyUG9pbnQpXG4gIFx0XHRcdFx0ICAuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pKTtcblxuICBcdFx0aWYgKEJyb3dzZXIuYW55M2QpIHtcbiAgXHRcdFx0c2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lciwgdG9wTGVmdE9mZnNldCwgc2NhbGUpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLCB0b3BMZWZ0T2Zmc2V0KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9jZW50ZXIsIHRoaXMuX3pvb20pO1xuXG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2lkXS5fcmVzZXQoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uWm9vbUVuZDogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3Byb2plY3QoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGhzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2lkXS5fdXBkYXRlKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFVwZGF0ZSBwaXhlbCBib3VuZHMgb2YgcmVuZGVyZXIgY29udGFpbmVyIChmb3IgcG9zaXRpb25pbmcvc2l6aW5nL2NsaXBwaW5nIGxhdGVyKVxuICBcdFx0Ly8gU3ViY2xhc3NlcyBhcmUgcmVzcG9uc2libGUgb2YgZmlyaW5nIHRoZSAndXBkYXRlJyBldmVudC5cbiAgXHRcdHZhciBwID0gdGhpcy5vcHRpb25zLnBhZGRpbmcsXG4gIFx0XHQgICAgc2l6ZSA9IHRoaXMuX21hcC5nZXRTaXplKCksXG4gIFx0XHQgICAgbWluID0gdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHNpemUubXVsdGlwbHlCeSgtcCkpLnJvdW5kKCk7XG5cbiAgXHRcdHRoaXMuX2JvdW5kcyA9IG5ldyBCb3VuZHMobWluLCBtaW4uYWRkKHNpemUubXVsdGlwbHlCeSgxICsgcCAqIDIpKS5yb3VuZCgpKTtcblxuICBcdFx0dGhpcy5fY2VudGVyID0gdGhpcy5fbWFwLmdldENlbnRlcigpO1xuICBcdFx0dGhpcy5fem9vbSA9IHRoaXMuX21hcC5nZXRab29tKCk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgQ2FudmFzXG4gICAqIEBpbmhlcml0cyBSZW5kZXJlclxuICAgKiBAYWthIEwuQ2FudmFzXG4gICAqXG4gICAqIEFsbG93cyB2ZWN0b3IgbGF5ZXJzIHRvIGJlIGRpc3BsYXllZCB3aXRoIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQ2FudmFzX0FQSSkuXG4gICAqIEluaGVyaXRzIGBSZW5kZXJlcmAuXG4gICAqXG4gICAqIER1ZSB0byBbdGVjaG5pY2FsIGxpbWl0YXRpb25zXShodHRwczovL2Nhbml1c2UuY29tL2NhbnZhcyksIENhbnZhcyBpcyBub3RcbiAgICogYXZhaWxhYmxlIGluIGFsbCB3ZWIgYnJvd3NlcnMsIG5vdGFibHkgSUU4LCBhbmQgb3ZlcmxhcHBpbmcgZ2VvbWV0cmllcyBtaWdodFxuICAgKiBub3QgZGlzcGxheSBwcm9wZXJseSBpbiBzb21lIGVkZ2UgY2FzZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIFVzZSBDYW52YXMgYnkgZGVmYXVsdCBmb3IgYWxsIHBhdGhzIGluIHRoZSBtYXA6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBtYXAgPSBMLm1hcCgnbWFwJywge1xuICAgKiBcdHJlbmRlcmVyOiBMLmNhbnZhcygpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogVXNlIGEgQ2FudmFzIHJlbmRlcmVyIHdpdGggZXh0cmEgcGFkZGluZyBmb3Igc3BlY2lmaWMgdmVjdG9yIGdlb21ldHJpZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBtYXAgPSBMLm1hcCgnbWFwJyk7XG4gICAqIHZhciBteVJlbmRlcmVyID0gTC5jYW52YXMoeyBwYWRkaW5nOiAwLjUgfSk7XG4gICAqIHZhciBsaW5lID0gTC5wb2x5bGluZSggY29vcmRpbmF0ZXMsIHsgcmVuZGVyZXI6IG15UmVuZGVyZXIgfSApO1xuICAgKiB2YXIgY2lyY2xlID0gTC5jaXJjbGUoIGNlbnRlciwgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgQ2FudmFzID0gUmVuZGVyZXIuZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBDYW52YXMgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gdG9sZXJhbmNlOiBOdW1iZXIgPSAwXG4gIFx0XHQvLyBIb3cgbXVjaCB0byBleHRlbmQgdGhlIGNsaWNrIHRvbGVyYW5jZSBhcm91bmQgYSBwYXRoL29iamVjdCBvbiB0aGUgbWFwLlxuICBcdFx0dG9sZXJhbmNlOiAwXG4gIFx0fSxcblxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IFJlbmRlcmVyLnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtcbiAgXHRcdGV2ZW50cy52aWV3cHJlcmVzZXQgPSB0aGlzLl9vblZpZXdQcmVSZXNldDtcbiAgXHRcdHJldHVybiBldmVudHM7XG4gIFx0fSxcblxuICBcdF9vblZpZXdQcmVSZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gU2V0IGEgZmxhZyBzbyB0aGF0IGEgdmlld3ByZXJlc2V0K21vdmVlbmQrdmlld3Jlc2V0IG9ubHkgdXBkYXRlcyZyZWRyYXdzIG9uY2VcbiAgXHRcdHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMgPSB0cnVlO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyk7XG5cbiAgXHRcdC8vIFJlZHJhdyB2ZWN0b3JzIHNpbmNlIGNhbnZhcyBpcyBjbGVhcmVkIHVwb24gcmVtb3ZhbCxcbiAgXHRcdC8vIGluIGNhc2Ugb2YgcmVtb3ZpbmcgdGhlIHJlbmRlcmVyIGl0c2VsZiBmcm9tIHRoZSBtYXAuXG4gIFx0XHR0aGlzLl9kcmF3KCk7XG4gIFx0fSxcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgXHRcdG9uKGNvbnRhaW5lciwgJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0aGlzKTtcbiAgXHRcdG9uKGNvbnRhaW5lciwgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51JywgdGhpcy5fb25DbGljaywgdGhpcyk7XG4gIFx0XHRvbihjb250YWluZXIsICdtb3VzZW91dCcsIHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKTtcbiAgXHRcdGNvbnRhaW5lclsnX2xlYWZsZXRfZGlzYWJsZV9ldmVudHMnXSA9IHRydWU7XG5cbiAgXHRcdHRoaXMuX2N0eCA9IGNvbnRhaW5lci5nZXRDb250ZXh0KCcyZCcpO1xuICBcdH0sXG5cbiAgXHRfZGVzdHJveUNvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX3JlZHJhd1JlcXVlc3QpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2N0eDtcbiAgXHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgbGF5ZXI7XG4gIFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMgPSBudWxsO1xuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgXHRcdFx0bGF5ZXIuX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdFx0dGhpcy5fcmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20gJiYgdGhpcy5fYm91bmRzKSB7IHJldHVybjsgfVxuXG4gIFx0XHRSZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gIFx0XHR2YXIgYiA9IHRoaXMuX2JvdW5kcyxcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsXG4gIFx0XHQgICAgc2l6ZSA9IGIuZ2V0U2l6ZSgpLFxuICBcdFx0ICAgIG0gPSBCcm93c2VyLnJldGluYSA/IDIgOiAxO1xuXG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIGIubWluKTtcblxuICBcdFx0Ly8gc2V0IGNhbnZhcyBzaXplIChhbHNvIGNsZWFyaW5nIGl0KTsgdXNlIGRvdWJsZSBzaXplIG9uIHJldGluYVxuICBcdFx0Y29udGFpbmVyLndpZHRoID0gbSAqIHNpemUueDtcbiAgXHRcdGNvbnRhaW5lci5oZWlnaHQgPSBtICogc2l6ZS55O1xuICBcdFx0Y29udGFpbmVyLnN0eWxlLndpZHRoID0gc2l6ZS54ICsgJ3B4JztcbiAgXHRcdGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xuXG4gIFx0XHRpZiAoQnJvd3Nlci5yZXRpbmEpIHtcbiAgXHRcdFx0dGhpcy5fY3R4LnNjYWxlKDIsIDIpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyB0cmFuc2xhdGUgc28gd2UgdXNlIHRoZSBzYW1lIHBhdGggY29vcmRpbmF0ZXMgYWZ0ZXIgY2FudmFzIGVsZW1lbnQgbW92ZXNcbiAgXHRcdHRoaXMuX2N0eC50cmFuc2xhdGUoLWIubWluLngsIC1iLm1pbi55KTtcblxuICBcdFx0Ly8gVGVsbCBwYXRocyB0byByZWRyYXcgdGhlbXNlbHZlc1xuICBcdFx0dGhpcy5maXJlKCd1cGRhdGUnKTtcbiAgXHR9LFxuXG4gIFx0X3Jlc2V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRSZW5kZXJlci5wcm90b3R5cGUuX3Jlc2V0LmNhbGwodGhpcyk7XG5cbiAgXHRcdGlmICh0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzKSB7XG4gIFx0XHRcdHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMgPSBmYWxzZTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlUGF0aHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2luaXRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHRoaXMuX3VwZGF0ZURhc2hBcnJheShsYXllcik7XG4gIFx0XHR0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXSA9IGxheWVyO1xuXG4gIFx0XHR2YXIgb3JkZXIgPSBsYXllci5fb3JkZXIgPSB7XG4gIFx0XHRcdGxheWVyOiBsYXllcixcbiAgXHRcdFx0cHJldjogdGhpcy5fZHJhd0xhc3QsXG4gIFx0XHRcdG5leHQ6IG51bGxcbiAgXHRcdH07XG4gIFx0XHRpZiAodGhpcy5fZHJhd0xhc3QpIHsgdGhpcy5fZHJhd0xhc3QubmV4dCA9IG9yZGVyOyB9XG4gIFx0XHR0aGlzLl9kcmF3TGFzdCA9IG9yZGVyO1xuICBcdFx0dGhpcy5fZHJhd0ZpcnN0ID0gdGhpcy5fZHJhd0ZpcnN0IHx8IHRoaXMuX2RyYXdMYXN0O1xuICBcdH0sXG5cbiAgXHRfYWRkUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0aGlzLl9yZXF1ZXN0UmVkcmF3KGxheWVyKTtcbiAgXHR9LFxuXG4gIFx0X3JlbW92ZVBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIG9yZGVyID0gbGF5ZXIuX29yZGVyO1xuICBcdFx0dmFyIG5leHQgPSBvcmRlci5uZXh0O1xuICBcdFx0dmFyIHByZXYgPSBvcmRlci5wcmV2O1xuXG4gIFx0XHRpZiAobmV4dCkge1xuICBcdFx0XHRuZXh0LnByZXYgPSBwcmV2O1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fZHJhd0xhc3QgPSBwcmV2O1xuICBcdFx0fVxuICBcdFx0aWYgKHByZXYpIHtcbiAgXHRcdFx0cHJldi5uZXh0ID0gbmV4dDtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX2RyYXdGaXJzdCA9IG5leHQ7XG4gIFx0XHR9XG5cbiAgXHRcdGRlbGV0ZSBsYXllci5fb3JkZXI7XG5cbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXTtcblxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdC8vIFJlZHJhdyB0aGUgdW5pb24gb2YgdGhlIGxheWVyJ3Mgb2xkIHBpeGVsXG4gIFx0XHQvLyBib3VuZHMgYW5kIHRoZSBuZXcgcGl4ZWwgYm91bmRzLlxuICBcdFx0dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKGxheWVyKTtcbiAgXHRcdGxheWVyLl9wcm9qZWN0KCk7XG4gIFx0XHRsYXllci5fdXBkYXRlKCk7XG4gIFx0XHQvLyBUaGUgcmVkcmF3IHdpbGwgZXh0ZW5kIHRoZSByZWRyYXcgYm91bmRzXG4gIFx0XHQvLyB3aXRoIHRoZSBuZXcgcGl4ZWwgYm91bmRzLlxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTdHlsZTogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0aGlzLl91cGRhdGVEYXNoQXJyYXkobGF5ZXIpO1xuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF91cGRhdGVEYXNoQXJyYXk6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKHR5cGVvZiBsYXllci5vcHRpb25zLmRhc2hBcnJheSA9PT0gJ3N0cmluZycpIHtcbiAgXHRcdFx0dmFyIHBhcnRzID0gbGF5ZXIub3B0aW9ucy5kYXNoQXJyYXkuc3BsaXQoL1ssIF0rLyksXG4gIFx0XHRcdCAgICBkYXNoQXJyYXkgPSBbXSxcbiAgXHRcdFx0ICAgIGRhc2hWYWx1ZSxcbiAgXHRcdFx0ICAgIGk7XG4gIFx0XHRcdGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICBcdFx0XHRcdGRhc2hWYWx1ZSA9IE51bWJlcihwYXJ0c1tpXSk7XG4gIFx0XHRcdFx0Ly8gSWdub3JlIGRhc2ggYXJyYXkgY29udGFpbmluZyBpbnZhbGlkIGxlbmd0aHNcbiAgXHRcdFx0XHRpZiAoaXNOYU4oZGFzaFZhbHVlKSkgeyByZXR1cm47IH1cbiAgXHRcdFx0XHRkYXNoQXJyYXkucHVzaChkYXNoVmFsdWUpO1xuICBcdFx0XHR9XG4gIFx0XHRcdGxheWVyLm9wdGlvbnMuX2Rhc2hBcnJheSA9IGRhc2hBcnJheTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGxheWVyLm9wdGlvbnMuX2Rhc2hBcnJheSA9IGxheWVyLm9wdGlvbnMuZGFzaEFycmF5O1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVxdWVzdFJlZHJhdzogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKGxheWVyKTtcbiAgXHRcdHRoaXMuX3JlZHJhd1JlcXVlc3QgPSB0aGlzLl9yZWRyYXdSZXF1ZXN0IHx8IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fcmVkcmF3LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X2V4dGVuZFJlZHJhd0JvdW5kczogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRpZiAobGF5ZXIuX3B4Qm91bmRzKSB7XG4gIFx0XHRcdHZhciBwYWRkaW5nID0gKGxheWVyLm9wdGlvbnMud2VpZ2h0IHx8IDApICsgMTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzID0gdGhpcy5fcmVkcmF3Qm91bmRzIHx8IG5ldyBCb3VuZHMoKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZChsYXllci5fcHhCb3VuZHMubWluLnN1YnRyYWN0KFtwYWRkaW5nLCBwYWRkaW5nXSkpO1xuICBcdFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKGxheWVyLl9weEJvdW5kcy5tYXguYWRkKFtwYWRkaW5nLCBwYWRkaW5nXSkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZWRyYXdSZXF1ZXN0ID0gbnVsbDtcblxuICBcdFx0aWYgKHRoaXMuX3JlZHJhd0JvdW5kcykge1xuICBcdFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMubWluLl9mbG9vcigpO1xuICBcdFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMubWF4Ll9jZWlsKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2NsZWFyKCk7IC8vIGNsZWFyIGxheWVycyBpbiByZWRyYXcgYm91bmRzXG4gIFx0XHR0aGlzLl9kcmF3KCk7IC8vIGRyYXcgbGF5ZXJzXG5cbiAgXHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IG51bGw7XG4gIFx0fSxcblxuICBcdF9jbGVhcjogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX3JlZHJhd0JvdW5kcztcbiAgXHRcdGlmIChib3VuZHMpIHtcbiAgXHRcdFx0dmFyIHNpemUgPSBib3VuZHMuZ2V0U2l6ZSgpO1xuICBcdFx0XHR0aGlzLl9jdHguY2xlYXJSZWN0KGJvdW5kcy5taW4ueCwgYm91bmRzLm1pbi55LCBzaXplLngsIHNpemUueSk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9jdHguc2F2ZSgpO1xuICBcdFx0XHR0aGlzLl9jdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICBcdFx0XHR0aGlzLl9jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuX2NvbnRhaW5lci53aWR0aCwgdGhpcy5fY29udGFpbmVyLmhlaWdodCk7XG4gIFx0XHRcdHRoaXMuX2N0eC5yZXN0b3JlKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9kcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgbGF5ZXIsIGJvdW5kcyA9IHRoaXMuX3JlZHJhd0JvdW5kcztcbiAgXHRcdHRoaXMuX2N0eC5zYXZlKCk7XG4gIFx0XHRpZiAoYm91bmRzKSB7XG4gIFx0XHRcdHZhciBzaXplID0gYm91bmRzLmdldFNpemUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmJlZ2luUGF0aCgpO1xuICBcdFx0XHR0aGlzLl9jdHgucmVjdChib3VuZHMubWluLngsIGJvdW5kcy5taW4ueSwgc2l6ZS54LCBzaXplLnkpO1xuICBcdFx0XHR0aGlzLl9jdHguY2xpcCgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9kcmF3aW5nID0gdHJ1ZTtcblxuICBcdFx0Zm9yICh2YXIgb3JkZXIgPSB0aGlzLl9kcmF3Rmlyc3Q7IG9yZGVyOyBvcmRlciA9IG9yZGVyLm5leHQpIHtcbiAgXHRcdFx0bGF5ZXIgPSBvcmRlci5sYXllcjtcbiAgXHRcdFx0aWYgKCFib3VuZHMgfHwgKGxheWVyLl9weEJvdW5kcyAmJiBsYXllci5fcHhCb3VuZHMuaW50ZXJzZWN0cyhib3VuZHMpKSkge1xuICBcdFx0XHRcdGxheWVyLl91cGRhdGVQYXRoKCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fZHJhd2luZyA9IGZhbHNlO1xuXG4gIFx0XHR0aGlzLl9jdHgucmVzdG9yZSgpOyAgLy8gUmVzdG9yZSBzdGF0ZSBiZWZvcmUgY2xpcHBpbmcuXG4gIFx0fSxcblxuICBcdF91cGRhdGVQb2x5OiBmdW5jdGlvbiAobGF5ZXIsIGNsb3NlZCkge1xuICBcdFx0aWYgKCF0aGlzLl9kcmF3aW5nKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgaSwgaiwgbGVuMiwgcCxcbiAgXHRcdCAgICBwYXJ0cyA9IGxheWVyLl9wYXJ0cyxcbiAgXHRcdCAgICBsZW4gPSBwYXJ0cy5sZW5ndGgsXG4gIFx0XHQgICAgY3R4ID0gdGhpcy5fY3R4O1xuXG4gIFx0XHRpZiAoIWxlbikgeyByZXR1cm47IH1cblxuICBcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXG4gIFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBhcnRzW2ldLmxlbmd0aDsgaiA8IGxlbjI7IGorKykge1xuICBcdFx0XHRcdHAgPSBwYXJ0c1tpXVtqXTtcbiAgXHRcdFx0XHRjdHhbaiA/ICdsaW5lVG8nIDogJ21vdmVUbyddKHAueCwgcC55KTtcbiAgXHRcdFx0fVxuICBcdFx0XHRpZiAoY2xvc2VkKSB7XG4gIFx0XHRcdFx0Y3R4LmNsb3NlUGF0aCgpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2ZpbGxTdHJva2UoY3R4LCBsYXllcik7XG5cbiAgXHRcdC8vIFRPRE8gb3B0aW1pemF0aW9uOiAxIGZpbGwvc3Ryb2tlIGZvciBhbGwgZmVhdHVyZXMgd2l0aCBlcXVhbCBzdHlsZSBpbnN0ZWFkIG9mIDEgZm9yIGVhY2ggZmVhdHVyZVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlQ2lyY2xlOiBmdW5jdGlvbiAobGF5ZXIpIHtcblxuICBcdFx0aWYgKCF0aGlzLl9kcmF3aW5nIHx8IGxheWVyLl9lbXB0eSgpKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgcCA9IGxheWVyLl9wb2ludCxcbiAgXHRcdCAgICBjdHggPSB0aGlzLl9jdHgsXG4gIFx0XHQgICAgciA9IE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1cyksIDEpLFxuICBcdFx0ICAgIHMgPSAoTWF0aC5tYXgoTWF0aC5yb3VuZChsYXllci5fcmFkaXVzWSksIDEpIHx8IHIpIC8gcjtcblxuICBcdFx0aWYgKHMgIT09IDEpIHtcbiAgXHRcdFx0Y3R4LnNhdmUoKTtcbiAgXHRcdFx0Y3R4LnNjYWxlKDEsIHMpO1xuICBcdFx0fVxuXG4gIFx0XHRjdHguYmVnaW5QYXRoKCk7XG4gIFx0XHRjdHguYXJjKHAueCwgcC55IC8gcywgciwgMCwgTWF0aC5QSSAqIDIsIGZhbHNlKTtcblxuICBcdFx0aWYgKHMgIT09IDEpIHtcbiAgXHRcdFx0Y3R4LnJlc3RvcmUoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fZmlsbFN0cm9rZShjdHgsIGxheWVyKTtcbiAgXHR9LFxuXG4gIFx0X2ZpbGxTdHJva2U6IGZ1bmN0aW9uIChjdHgsIGxheWVyKSB7XG4gIFx0XHR2YXIgb3B0aW9ucyA9IGxheWVyLm9wdGlvbnM7XG5cbiAgXHRcdGlmIChvcHRpb25zLmZpbGwpIHtcbiAgXHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gb3B0aW9ucy5maWxsT3BhY2l0eTtcbiAgXHRcdFx0Y3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuZmlsbENvbG9yIHx8IG9wdGlvbnMuY29sb3I7XG4gIFx0XHRcdGN0eC5maWxsKG9wdGlvbnMuZmlsbFJ1bGUgfHwgJ2V2ZW5vZGQnKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG9wdGlvbnMuc3Ryb2tlICYmIG9wdGlvbnMud2VpZ2h0ICE9PSAwKSB7XG4gIFx0XHRcdGlmIChjdHguc2V0TGluZURhc2gpIHtcbiAgXHRcdFx0XHRjdHguc2V0TGluZURhc2gobGF5ZXIub3B0aW9ucyAmJiBsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgfHwgW10pO1xuICBcdFx0XHR9XG4gIFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IG9wdGlvbnMub3BhY2l0eTtcbiAgXHRcdFx0Y3R4LmxpbmVXaWR0aCA9IG9wdGlvbnMud2VpZ2h0O1xuICBcdFx0XHRjdHguc3Ryb2tlU3R5bGUgPSBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRjdHgubGluZUNhcCA9IG9wdGlvbnMubGluZUNhcDtcbiAgXHRcdFx0Y3R4LmxpbmVKb2luID0gb3B0aW9ucy5saW5lSm9pbjtcbiAgXHRcdFx0Y3R4LnN0cm9rZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBDYW52YXMgb2J2aW91c2x5IGRvZXNuJ3QgaGF2ZSBtb3VzZSBldmVudHMgZm9yIGluZGl2aWR1YWwgZHJhd24gb2JqZWN0cyxcbiAgXHQvLyBzbyB3ZSBlbXVsYXRlIHRoYXQgYnkgY2FsY3VsYXRpbmcgd2hhdCdzIHVuZGVyIHRoZSBtb3VzZSBvbiBtb3VzZW1vdmUvY2xpY2sgbWFudWFsbHlcblxuICBcdF9vbkNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIHBvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZSksIGxheWVyLCBjbGlja2VkTGF5ZXI7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlICYmIGxheWVyLl9jb250YWluc1BvaW50KHBvaW50KSkge1xuICBcdFx0XHRcdGlmICghKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLnR5cGUgPT09ICdwcmVjbGljaycpIHx8ICF0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGxheWVyKSkge1xuICBcdFx0XHRcdFx0Y2xpY2tlZExheWVyID0gbGF5ZXI7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl9maXJlRXZlbnQoY2xpY2tlZExheWVyID8gW2NsaWNrZWRMYXllcl0gOiBmYWxzZSwgZSk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwIHx8IHRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKSB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpO1xuICBcdFx0dGhpcy5faGFuZGxlTW91c2VIb3ZlcihlLCBwb2ludCk7XG4gIFx0fSxcblxuXG4gIFx0X2hhbmRsZU1vdXNlT3V0OiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxheWVyID0gdGhpcy5faG92ZXJlZExheWVyO1xuICBcdFx0aWYgKGxheWVyKSB7XG4gIFx0XHRcdC8vIGlmIHdlJ3JlIGxlYXZpbmcgdGhlIGxheWVyLCBmaXJlIG1vdXNlb3V0XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgXHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtsYXllcl0sIGUsICdtb3VzZW91dCcpO1xuICBcdFx0XHR0aGlzLl9ob3ZlcmVkTGF5ZXIgPSBudWxsO1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9oYW5kbGVNb3VzZUhvdmVyOiBmdW5jdGlvbiAoZSwgcG9pbnQpIHtcbiAgXHRcdGlmICh0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGxheWVyLCBjYW5kaWRhdGVIb3ZlcmVkTGF5ZXI7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlICYmIGxheWVyLl9jb250YWluc1BvaW50KHBvaW50KSkge1xuICBcdFx0XHRcdGNhbmRpZGF0ZUhvdmVyZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChjYW5kaWRhdGVIb3ZlcmVkTGF5ZXIgIT09IHRoaXMuX2hvdmVyZWRMYXllcikge1xuICBcdFx0XHR0aGlzLl9oYW5kbGVNb3VzZU91dChlKTtcblxuICBcdFx0XHRpZiAoY2FuZGlkYXRlSG92ZXJlZExheWVyKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpOyAvLyBjaGFuZ2UgY3Vyc29yXG4gIFx0XHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtjYW5kaWRhdGVIb3ZlcmVkTGF5ZXJdLCBlLCAnbW91c2VvdmVyJyk7XG4gIFx0XHRcdFx0dGhpcy5faG92ZXJlZExheWVyID0gY2FuZGlkYXRlSG92ZXJlZExheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2ZpcmVFdmVudCh0aGlzLl9ob3ZlcmVkTGF5ZXIgPyBbdGhpcy5faG92ZXJlZExheWVyXSA6IGZhbHNlLCBlKTtcblxuICBcdFx0dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCA9IHRydWU7XG4gIFx0XHRzZXRUaW1lb3V0KGJpbmQoZnVuY3Rpb24gKCkge1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9LCB0aGlzKSwgMzIpO1xuICBcdH0sXG5cbiAgXHRfZmlyZUV2ZW50OiBmdW5jdGlvbiAobGF5ZXJzLCBlLCB0eXBlKSB7XG4gIFx0XHR0aGlzLl9tYXAuX2ZpcmVET01FdmVudChlLCB0eXBlIHx8IGUudHlwZSwgbGF5ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgb3JkZXIgPSBsYXllci5fb3JkZXI7XG5cbiAgXHRcdGlmICghb3JkZXIpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEFscmVhZHkgbGFzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIGlmIChuZXh0KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBmaXJzdCBlbnRyeSB1bmxlc3MgdGhpcyBpcyB0aGVcbiAgXHRcdFx0Ly8gc2luZ2xlIGVudHJ5XG4gIFx0XHRcdHRoaXMuX2RyYXdGaXJzdCA9IG5leHQ7XG4gIFx0XHR9XG5cbiAgXHRcdG9yZGVyLnByZXYgPSB0aGlzLl9kcmF3TGFzdDtcbiAgXHRcdHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjtcblxuICBcdFx0b3JkZXIubmV4dCA9IG51bGw7XG4gIFx0XHR0aGlzLl9kcmF3TGFzdCA9IG9yZGVyO1xuXG4gIFx0XHR0aGlzLl9yZXF1ZXN0UmVkcmF3KGxheWVyKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9CYWNrOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcblxuICBcdFx0aWYgKCFvcmRlcikgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG5leHQgPSBvcmRlci5uZXh0O1xuICBcdFx0dmFyIHByZXYgPSBvcmRlci5wcmV2O1xuXG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Ly8gQWxyZWFkeSBmaXJzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAobmV4dCkge1xuICBcdFx0XHRuZXh0LnByZXYgPSBwcmV2O1xuICBcdFx0fSBlbHNlIGlmIChwcmV2KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBsYXN0IGVudHJ5IHVubGVzcyB0aGlzIGlzIHRoZVxuICBcdFx0XHQvLyBzaW5nbGUgZW50cnlcbiAgXHRcdFx0dGhpcy5fZHJhd0xhc3QgPSBwcmV2O1xuICBcdFx0fVxuXG4gIFx0XHRvcmRlci5wcmV2ID0gbnVsbDtcblxuICBcdFx0b3JkZXIubmV4dCA9IHRoaXMuX2RyYXdGaXJzdDtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdC5wcmV2ID0gb3JkZXI7XG4gIFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBvcmRlcjtcblxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmNhbnZhcyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIENhbnZhcyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBjYW52YXMob3B0aW9ucykge1xuICBcdHJldHVybiBCcm93c2VyLmNhbnZhcyA/IG5ldyBDYW52YXMob3B0aW9ucykgOiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogVGhhbmtzIHRvIERtaXRyeSBCYXJhbm92c2t5IGFuZCBoaXMgUmFwaGFlbCBsaWJyYXJ5IGZvciBpbnNwaXJhdGlvbiFcbiAgICovXG5cblxuICB2YXIgdm1sQ3JlYXRlID0gKGZ1bmN0aW9uICgpIHtcbiAgXHR0cnkge1xuICBcdFx0ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoJ2x2bWwnLCAndXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwnKTtcbiAgXHRcdHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGx2bWw6JyArIG5hbWUgKyAnIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdFx0fTtcbiAgXHR9IGNhdGNoIChlKSB7XG4gIFx0XHQvLyBEbyBub3QgcmV0dXJuIGZuIGZyb20gY2F0Y2ggYmxvY2sgc28gYGVgIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZFxuICBcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvcHVsbC83Mjc5XG4gIFx0fVxuICBcdHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzwnICsgbmFtZSArICcgeG1sbnM9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQuY29tOnZtbFwiIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdH07XG4gIH0pKCk7XG5cblxuICAvKlxuICAgKiBAY2xhc3MgU1ZHXG4gICAqXG4gICAqXG4gICAqIFZNTCB3YXMgZGVwcmVjYXRlZCBpbiAyMDEyLCB3aGljaCBtZWFucyBWTUwgZnVuY3Rpb25hbGl0eSBleGlzdHMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBvbGQgdmVyc2lvbnMgb2YgSW50ZXJuZXQgRXhwbG9yZXIuXG4gICAqL1xuXG4gIC8vIG1peGluIHRvIHJlZGVmaW5lIHNvbWUgU1ZHIG1ldGhvZHMgdG8gaGFuZGxlIFZNTCBzeW50YXggd2hpY2ggaXMgc2ltaWxhciBidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzXG4gIHZhciB2bWxNaXhpbiA9IHtcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtdm1sLWNvbnRhaW5lcicpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTtcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gbGF5ZXIuX2NvbnRhaW5lciA9IHZtbENyZWF0ZSgnc2hhcGUnKTtcblxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC12bWwtc2hhcGUgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSk7XG5cbiAgXHRcdGNvbnRhaW5lci5jb29yZHNpemUgPSAnMSAxJztcblxuICBcdFx0bGF5ZXIuX3BhdGggPSB2bWxDcmVhdGUoJ3BhdGgnKTtcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYXllci5fcGF0aCk7XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVN0eWxlKGxheWVyKTtcbiAgXHRcdHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildID0gbGF5ZXI7XG4gIFx0fSxcblxuICBcdF9hZGRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgXHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlKSB7XG4gIFx0XHRcdGxheWVyLmFkZEludGVyYWN0aXZlVGFyZ2V0KGNvbnRhaW5lcik7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0cmVtb3ZlKGNvbnRhaW5lcik7XG4gIFx0XHRsYXllci5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChjb250YWluZXIpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHN0cm9rZSA9IGxheWVyLl9zdHJva2UsXG4gIFx0XHQgICAgZmlsbCA9IGxheWVyLl9maWxsLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBsYXllci5vcHRpb25zLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGxheWVyLl9jb250YWluZXI7XG5cbiAgXHRcdGNvbnRhaW5lci5zdHJva2VkID0gISFvcHRpb25zLnN0cm9rZTtcbiAgXHRcdGNvbnRhaW5lci5maWxsZWQgPSAhIW9wdGlvbnMuZmlsbDtcblxuICBcdFx0aWYgKG9wdGlvbnMuc3Ryb2tlKSB7XG4gIFx0XHRcdGlmICghc3Ryb2tlKSB7XG4gIFx0XHRcdFx0c3Ryb2tlID0gbGF5ZXIuX3N0cm9rZSA9IHZtbENyZWF0ZSgnc3Ryb2tlJyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHN0cm9rZSk7XG4gIFx0XHRcdHN0cm9rZS53ZWlnaHQgPSBvcHRpb25zLndlaWdodCArICdweCc7XG4gIFx0XHRcdHN0cm9rZS5jb2xvciA9IG9wdGlvbnMuY29sb3I7XG4gIFx0XHRcdHN0cm9rZS5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuXG4gIFx0XHRcdGlmIChvcHRpb25zLmRhc2hBcnJheSkge1xuICBcdFx0XHRcdHN0cm9rZS5kYXNoU3R5bGUgPSBpc0FycmF5KG9wdGlvbnMuZGFzaEFycmF5KSA/XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LmpvaW4oJyAnKSA6XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywgJyAnKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRzdHJva2UuZGFzaFN0eWxlID0gJyc7XG4gIFx0XHRcdH1cbiAgXHRcdFx0c3Ryb2tlLmVuZGNhcCA9IG9wdGlvbnMubGluZUNhcC5yZXBsYWNlKCdidXR0JywgJ2ZsYXQnKTtcbiAgXHRcdFx0c3Ryb2tlLmpvaW5zdHlsZSA9IG9wdGlvbnMubGluZUpvaW47XG5cbiAgXHRcdH0gZWxzZSBpZiAoc3Ryb2tlKSB7XG4gIFx0XHRcdGNvbnRhaW5lci5yZW1vdmVDaGlsZChzdHJva2UpO1xuICBcdFx0XHRsYXllci5fc3Ryb2tlID0gbnVsbDtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG9wdGlvbnMuZmlsbCkge1xuICBcdFx0XHRpZiAoIWZpbGwpIHtcbiAgXHRcdFx0XHRmaWxsID0gbGF5ZXIuX2ZpbGwgPSB2bWxDcmVhdGUoJ2ZpbGwnKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsbCk7XG4gIFx0XHRcdGZpbGwuY29sb3IgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRmaWxsLm9wYWNpdHkgPSBvcHRpb25zLmZpbGxPcGFjaXR5O1xuXG4gIFx0XHR9IGVsc2UgaWYgKGZpbGwpIHtcbiAgXHRcdFx0Y29udGFpbmVyLnJlbW92ZUNoaWxkKGZpbGwpO1xuICBcdFx0XHRsYXllci5fZmlsbCA9IG51bGw7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVDaXJjbGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQucm91bmQoKSxcbiAgXHRcdCAgICByID0gTWF0aC5yb3VuZChsYXllci5fcmFkaXVzKSxcbiAgXHRcdCAgICByMiA9IE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kgfHwgcik7XG5cbiAgXHRcdHRoaXMuX3NldFBhdGgobGF5ZXIsIGxheWVyLl9lbXB0eSgpID8gJ00wIDAnIDpcbiAgXHRcdFx0J0FMICcgKyBwLnggKyAnLCcgKyBwLnkgKyAnICcgKyByICsgJywnICsgcjIgKyAnIDAsJyArICg2NTUzNSAqIDM2MCkpO1xuICBcdH0sXG5cbiAgXHRfc2V0UGF0aDogZnVuY3Rpb24gKGxheWVyLCBwYXRoKSB7XG4gIFx0XHRsYXllci5fcGF0aC52ID0gcGF0aDtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0b0Zyb250KGxheWVyLl9jb250YWluZXIpO1xuICBcdH0sXG5cbiAgXHRfYnJpbmdUb0JhY2s6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9CYWNrKGxheWVyLl9jb250YWluZXIpO1xuICBcdH1cbiAgfTtcblxuICB2YXIgY3JlYXRlID0gQnJvd3Nlci52bWwgPyB2bWxDcmVhdGUgOiBzdmdDcmVhdGU7XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLlNWR1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbU1ZHXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cHM6Ly9jYW5pdXNlLmNvbS9zdmcpLCBTVkcgaXMgbm90XG4gICAqIGF2YWlsYWJsZSBpbiBhbGwgd2ViIGJyb3dzZXJzLCBub3RhYmx5IEFuZHJvaWQgMi54IGFuZCAzLnguXG4gICAqXG4gICAqIEFsdGhvdWdoIFNWRyBpcyBub3QgYXZhaWxhYmxlIG9uIElFNyBhbmQgSUU4LCB0aGVzZSBicm93c2VycyBzdXBwb3J0XG4gICAqIFtWTUxdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZlY3Rvcl9NYXJrdXBfTGFuZ3VhZ2UpXG4gICAqIChhIG5vdyBkZXByZWNhdGVkIHRlY2hub2xvZ3kpLCBhbmQgdGhlIFNWRyByZW5kZXJlciB3aWxsIGZhbGwgYmFjayB0byBWTUwgaW5cbiAgICogdGhpcyBjYXNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBVc2UgU1ZHIGJ5IGRlZmF1bHQgZm9yIGFsbCBwYXRocyBpbiB0aGUgbWFwOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcsIHtcbiAgICogXHRyZW5kZXJlcjogTC5zdmcoKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIFVzZSBhIFNWRyByZW5kZXJlciB3aXRoIGV4dHJhIHBhZGRpbmcgZm9yIHNwZWNpZmljIHZlY3RvciBnZW9tZXRyaWVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcpO1xuICAgKiB2YXIgbXlSZW5kZXJlciA9IEwuc3ZnKHsgcGFkZGluZzogMC41IH0pO1xuICAgKiB2YXIgbGluZSA9IEwucG9seWxpbmUoIGNvb3JkaW5hdGVzLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogdmFyIGNpcmNsZSA9IEwuY2lyY2xlKCBjZW50ZXIsIHsgcmVuZGVyZXI6IG15UmVuZGVyZXIgfSApO1xuICAgKiBgYGBcbiAgICovXG5cbiAgdmFyIFNWRyA9IFJlbmRlcmVyLmV4dGVuZCh7XG5cbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fY29udGFpbmVyID0gY3JlYXRlKCdzdmcnKTtcblxuICBcdFx0Ly8gbWFrZXMgaXQgcG9zc2libGUgdG8gY2xpY2sgdGhyb3VnaCBzdmcgcm9vdDsgd2UnbGwgcmVzZXQgaXQgYmFjayBpbiBpbmRpdmlkdWFsIHBhdGhzXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgXHRcdHRoaXMuX3Jvb3RHcm91cCA9IGNyZWF0ZSgnZycpO1xuICBcdFx0dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3RHcm91cCk7XG4gIFx0fSxcblxuICBcdF9kZXN0cm95Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdG9mZih0aGlzLl9jb250YWluZXIpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2NvbnRhaW5lcjtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9yb290R3JvdXA7XG4gIFx0XHRkZWxldGUgdGhpcy5fc3ZnU2l6ZTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSAmJiB0aGlzLl9ib3VuZHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgXHRcdHZhciBiID0gdGhpcy5fYm91bmRzLFxuICBcdFx0ICAgIHNpemUgPSBiLmdldFNpemUoKSxcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgXHRcdC8vIHNldCBzaXplIG9mIHN2Zy1jb250YWluZXIgaWYgY2hhbmdlZFxuICBcdFx0aWYgKCF0aGlzLl9zdmdTaXplIHx8ICF0aGlzLl9zdmdTaXplLmVxdWFscyhzaXplKSkge1xuICBcdFx0XHR0aGlzLl9zdmdTaXplID0gc2l6ZTtcbiAgXHRcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzaXplLngpO1xuICBcdFx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBzaXplLnkpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBtb3ZlbWVudDogdXBkYXRlIGNvbnRhaW5lciB2aWV3Qm94IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgY29vcmRpbmF0ZXMgb2YgaW5kaXZpZHVhbCBsYXllcnNcbiAgXHRcdHNldFBvc2l0aW9uKGNvbnRhaW5lciwgYi5taW4pO1xuICBcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFtiLm1pbi54LCBiLm1pbi55LCBzaXplLngsIHNpemUueV0uam9pbignICcpKTtcblxuICBcdFx0dGhpcy5maXJlKCd1cGRhdGUnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gbWV0aG9kcyBiZWxvdyBhcmUgY2FsbGVkIGJ5IHZlY3RvciBsYXllcnMgaW1wbGVtZW50YXRpb25zXG5cbiAgXHRfaW5pdFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHBhdGggPSBsYXllci5fcGF0aCA9IGNyZWF0ZSgncGF0aCcpO1xuXG4gIFx0XHQvLyBAbmFtZXNwYWNlIFBhdGhcbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBDdXN0b20gY2xhc3MgbmFtZSBzZXQgb24gYW4gZWxlbWVudC4gT25seSBmb3IgU1ZHIHJlbmRlcmVyLlxuICBcdFx0aWYgKGxheWVyLm9wdGlvbnMuY2xhc3NOYW1lKSB7XG4gIFx0XHRcdGFkZENsYXNzKHBhdGgsIGxheWVyLm9wdGlvbnMuY2xhc3NOYW1lKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKGxheWVyLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcbiAgXHRcdFx0YWRkQ2xhc3MocGF0aCwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fdXBkYXRlU3R5bGUobGF5ZXIpO1xuICBcdFx0dGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcbiAgXHR9LFxuXG4gIFx0X2FkZFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCF0aGlzLl9yb290R3JvdXApIHsgdGhpcy5faW5pdENvbnRhaW5lcigpOyB9XG4gIFx0XHR0aGlzLl9yb290R3JvdXAuYXBwZW5kQ2hpbGQobGF5ZXIuX3BhdGgpO1xuICBcdFx0bGF5ZXIuYWRkSW50ZXJhY3RpdmVUYXJnZXQobGF5ZXIuX3BhdGgpO1xuICBcdH0sXG5cbiAgXHRfcmVtb3ZlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRyZW1vdmUobGF5ZXIuX3BhdGgpO1xuICBcdFx0bGF5ZXIucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQobGF5ZXIuX3BhdGgpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRsYXllci5fcHJvamVjdCgpO1xuICBcdFx0bGF5ZXIuX3VwZGF0ZSgpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHBhdGggPSBsYXllci5fcGF0aCxcbiAgXHRcdCAgICBvcHRpb25zID0gbGF5ZXIub3B0aW9ucztcblxuICBcdFx0aWYgKCFwYXRoKSB7IHJldHVybjsgfVxuXG4gIFx0XHRpZiAob3B0aW9ucy5zdHJva2UpIHtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIG9wdGlvbnMuY29sb3IpO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLW9wYWNpdHknLCBvcHRpb25zLm9wYWNpdHkpO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgb3B0aW9ucy53ZWlnaHQpO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVjYXAnLCBvcHRpb25zLmxpbmVDYXApO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVqb2luJywgb3B0aW9ucy5saW5lSm9pbik7XG5cbiAgXHRcdFx0aWYgKG9wdGlvbnMuZGFzaEFycmF5KSB7XG4gIFx0XHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknLCBvcHRpb25zLmRhc2hBcnJheSk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0cGF0aC5yZW1vdmVBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGlmIChvcHRpb25zLmRhc2hPZmZzZXQpIHtcbiAgXHRcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnLCBvcHRpb25zLmRhc2hPZmZzZXQpO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdHBhdGgucmVtb3ZlQXR0cmlidXRlKCdzdHJva2UtZGFzaG9mZnNldCcpO1xuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ25vbmUnKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG9wdGlvbnMuZmlsbCkge1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbCcsIG9wdGlvbnMuZmlsbENvbG9yIHx8IG9wdGlvbnMuY29sb3IpO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5Jywgb3B0aW9ucy5maWxsT3BhY2l0eSk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsLXJ1bGUnLCBvcHRpb25zLmZpbGxSdWxlIHx8ICdldmVub2RkJyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVQb2x5OiBmdW5jdGlvbiAobGF5ZXIsIGNsb3NlZCkge1xuICBcdFx0dGhpcy5fc2V0UGF0aChsYXllciwgcG9pbnRzVG9QYXRoKGxheWVyLl9wYXJ0cywgY2xvc2VkKSk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVDaXJjbGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQsXG4gIFx0XHQgICAgciA9IE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1cyksIDEpLFxuICBcdFx0ICAgIHIyID0gTWF0aC5tYXgoTWF0aC5yb3VuZChsYXllci5fcmFkaXVzWSksIDEpIHx8IHIsXG4gIFx0XHQgICAgYXJjID0gJ2EnICsgciArICcsJyArIHIyICsgJyAwIDEsMCAnO1xuXG4gIFx0XHQvLyBkcmF3aW5nIGEgY2lyY2xlIHdpdGggdHdvIGhhbGYtYXJjc1xuICBcdFx0dmFyIGQgPSBsYXllci5fZW1wdHkoKSA/ICdNMCAwJyA6XG4gIFx0XHRcdCdNJyArIChwLnggLSByKSArICcsJyArIHAueSArXG4gIFx0XHRcdGFyYyArIChyICogMikgKyAnLDAgJyArXG4gIFx0XHRcdGFyYyArICgtciAqIDIpICsgJywwICc7XG5cbiAgXHRcdHRoaXMuX3NldFBhdGgobGF5ZXIsIGQpO1xuICBcdH0sXG5cbiAgXHRfc2V0UGF0aDogZnVuY3Rpb24gKGxheWVyLCBwYXRoKSB7XG4gIFx0XHRsYXllci5fcGF0aC5zZXRBdHRyaWJ1dGUoJ2QnLCBwYXRoKTtcbiAgXHR9LFxuXG4gIFx0Ly8gU1ZHIGRvZXMgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgekluZGV4IHNvIHdlIHJlc29ydCB0byBjaGFuZ2luZyB0aGUgRE9NIG9yZGVyIG9mIGVsZW1lbnRzXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0b0Zyb250KGxheWVyLl9wYXRoKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9CYWNrOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHRvQmFjayhsYXllci5fcGF0aCk7XG4gIFx0fVxuICB9KTtcblxuICBpZiAoQnJvd3Nlci52bWwpIHtcbiAgXHRTVkcuaW5jbHVkZSh2bWxNaXhpbik7XG4gIH1cblxuICAvLyBAbmFtZXNwYWNlIFNWR1xuICAvLyBAZmFjdG9yeSBMLnN2ZyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIFNWRyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBzdmcob3B0aW9ucykge1xuICBcdHJldHVybiBCcm93c2VyLnN2ZyB8fCBCcm93c2VyLnZtbCA/IG5ldyBTVkcob3B0aW9ucykgOiBudWxsO1xuICB9XG5cbiAgTWFwLmluY2x1ZGUoe1xuICBcdC8vIEBuYW1lc3BhY2UgTWFwOyBAbWV0aG9kIGdldFJlbmRlcmVyKGxheWVyOiBQYXRoKTogUmVuZGVyZXJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBgUmVuZGVyZXJgIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlblxuICBcdC8vIGBQYXRoYC4gSXQgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYHJlbmRlcmVyYCBvcHRpb25zIG9mIHRoZSBtYXAgYW5kIHBhdGhzXG4gIFx0Ly8gYXJlIHJlc3BlY3RlZCwgYW5kIHRoYXQgdGhlIHJlbmRlcmVycyBkbyBleGlzdCBvbiB0aGUgbWFwLlxuICBcdGdldFJlbmRlcmVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdC8vIEBuYW1lc3BhY2UgUGF0aDsgQG9wdGlvbiByZW5kZXJlcjogUmVuZGVyZXJcbiAgXHRcdC8vIFVzZSB0aGlzIHNwZWNpZmljIGluc3RhbmNlIG9mIGBSZW5kZXJlcmAgZm9yIHRoaXMgcGF0aC4gVGFrZXNcbiAgXHRcdC8vIHByZWNlZGVuY2Ugb3ZlciB0aGUgbWFwJ3MgW2RlZmF1bHQgcmVuZGVyZXJdKCNtYXAtcmVuZGVyZXIpLlxuICBcdFx0dmFyIHJlbmRlcmVyID0gbGF5ZXIub3B0aW9ucy5yZW5kZXJlciB8fCB0aGlzLl9nZXRQYW5lUmVuZGVyZXIobGF5ZXIub3B0aW9ucy5wYW5lKSB8fCB0aGlzLm9wdGlvbnMucmVuZGVyZXIgfHwgdGhpcy5fcmVuZGVyZXI7XG5cbiAgXHRcdGlmICghcmVuZGVyZXIpIHtcbiAgXHRcdFx0cmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlciA9IHRoaXMuX2NyZWF0ZVJlbmRlcmVyKCk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghdGhpcy5oYXNMYXllcihyZW5kZXJlcikpIHtcbiAgXHRcdFx0dGhpcy5hZGRMYXllcihyZW5kZXJlcik7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gcmVuZGVyZXI7XG4gIFx0fSxcblxuICBcdF9nZXRQYW5lUmVuZGVyZXI6IGZ1bmN0aW9uIChuYW1lKSB7XG4gIFx0XHRpZiAobmFtZSA9PT0gJ292ZXJsYXlQYW5lJyB8fCBuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgXHRcdFx0cmV0dXJuIGZhbHNlO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgcmVuZGVyZXIgPSB0aGlzLl9wYW5lUmVuZGVyZXJzW25hbWVdO1xuICBcdFx0aWYgKHJlbmRlcmVyID09PSB1bmRlZmluZWQpIHtcbiAgXHRcdFx0cmVuZGVyZXIgPSB0aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTogbmFtZX0pO1xuICBcdFx0XHR0aGlzLl9wYW5lUmVuZGVyZXJzW25hbWVdID0gcmVuZGVyZXI7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gcmVuZGVyZXI7XG4gIFx0fSxcblxuICBcdF9jcmVhdGVSZW5kZXJlcjogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwOyBAb3B0aW9uIHByZWZlckNhbnZhczogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBXaGV0aGVyIGBQYXRoYHMgc2hvdWxkIGJlIHJlbmRlcmVkIG9uIGEgYENhbnZhc2AgcmVuZGVyZXIuXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCBhbGwgYFBhdGhgcyBhcmUgcmVuZGVyZWQgaW4gYSBgU1ZHYCByZW5kZXJlci5cbiAgXHRcdHJldHVybiAodGhpcy5vcHRpb25zLnByZWZlckNhbnZhcyAmJiBjYW52YXMob3B0aW9ucykpIHx8IHN2ZyhvcHRpb25zKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXG4gICAqIEwuUmVjdGFuZ2xlIGV4dGVuZHMgUG9seWdvbiBhbmQgY3JlYXRlcyBhIHJlY3RhbmdsZSB3aGVuIHBhc3NlZCBhIExhdExuZ0JvdW5kcyBvYmplY3QuXG4gICAqL1xuXG4gIC8qXG4gICAqIEBjbGFzcyBSZWN0YW5nbGVcbiAgICogQGFrYSBMLlJlY3RhbmdsZVxuICAgKiBAaW5oZXJpdHMgUG9seWdvblxuICAgKlxuICAgKiBBIGNsYXNzIGZvciBkcmF3aW5nIHJlY3RhbmdsZSBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgUG9seWdvbmAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGRlZmluZSByZWN0YW5nbGUgZ2VvZ3JhcGhpY2FsIGJvdW5kc1xuICAgKiB2YXIgYm91bmRzID0gW1s1NC41NTkzMjIsIC01Ljc2NzgyMl0sIFs1Ni4xMjEwNjA0LCAtMy4wMjEyNDBdXTtcbiAgICpcbiAgICogLy8gY3JlYXRlIGFuIG9yYW5nZSByZWN0YW5nbGVcbiAgICogTC5yZWN0YW5nbGUoYm91bmRzLCB7Y29sb3I6IFwiI2ZmNzgwMFwiLCB3ZWlnaHQ6IDF9KS5hZGRUbyhtYXApO1xuICAgKlxuICAgKiAvLyB6b29tIHRoZSBtYXAgdG8gdGhlIHJlY3RhbmdsZSBib3VuZHNcbiAgICogbWFwLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgKiBgYGBcbiAgICpcbiAgICovXG5cblxuICB2YXIgUmVjdGFuZ2xlID0gUG9seWdvbi5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChsYXRMbmdCb3VuZHMsIG9wdGlvbnMpIHtcbiAgXHRcdFBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB0aGlzLl9ib3VuZHNUb0xhdExuZ3MobGF0TG5nQm91bmRzKSwgb3B0aW9ucyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0Qm91bmRzKGxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xuICBcdC8vIFJlZHJhd3MgdGhlIHJlY3RhbmdsZSB3aXRoIHRoZSBwYXNzZWQgYm91bmRzLlxuICBcdHNldEJvdW5kczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcykge1xuICBcdFx0cmV0dXJuIHRoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3MobGF0TG5nQm91bmRzKSk7XG4gIFx0fSxcblxuICBcdF9ib3VuZHNUb0xhdExuZ3M6IGZ1bmN0aW9uIChsYXRMbmdCb3VuZHMpIHtcbiAgXHRcdGxhdExuZ0JvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGxhdExuZ0JvdW5kcyk7XG4gIFx0XHRyZXR1cm4gW1xuICBcdFx0XHRsYXRMbmdCb3VuZHMuZ2V0U291dGhXZXN0KCksXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXROb3J0aFdlc3QoKSxcbiAgXHRcdFx0bGF0TG5nQm91bmRzLmdldE5vcnRoRWFzdCgpLFxuICBcdFx0XHRsYXRMbmdCb3VuZHMuZ2V0U291dGhFYXN0KClcbiAgXHRcdF07XG4gIFx0fVxuICB9KTtcblxuXG4gIC8vIEBmYWN0b3J5IEwucmVjdGFuZ2xlKGxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogUG9seWxpbmUgb3B0aW9ucylcbiAgZnVuY3Rpb24gcmVjdGFuZ2xlKGxhdExuZ0JvdW5kcywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgUmVjdGFuZ2xlKGxhdExuZ0JvdW5kcywgb3B0aW9ucyk7XG4gIH1cblxuICBTVkcuY3JlYXRlID0gY3JlYXRlO1xuICBTVkcucG9pbnRzVG9QYXRoID0gcG9pbnRzVG9QYXRoO1xuXG4gIEdlb0pTT04uZ2VvbWV0cnlUb0xheWVyID0gZ2VvbWV0cnlUb0xheWVyO1xuICBHZW9KU09OLmNvb3Jkc1RvTGF0TG5nID0gY29vcmRzVG9MYXRMbmc7XG4gIEdlb0pTT04uY29vcmRzVG9MYXRMbmdzID0gY29vcmRzVG9MYXRMbmdzO1xuICBHZW9KU09OLmxhdExuZ1RvQ29vcmRzID0gbGF0TG5nVG9Db29yZHM7XG4gIEdlb0pTT04ubGF0TG5nc1RvQ29vcmRzID0gbGF0TG5nc1RvQ29vcmRzO1xuICBHZW9KU09OLmdldEZlYXR1cmUgPSBnZXRGZWF0dXJlO1xuICBHZW9KU09OLmFzRmVhdHVyZSA9IGFzRmVhdHVyZTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuQm94Wm9vbSBpcyB1c2VkIHRvIGFkZCBzaGlmdC1kcmFnIHpvb20gaW50ZXJhY3Rpb24gdG8gdGhlIG1hcFxuICAgKiAoem9vbSB0byBhIHNlbGVjdGVkIGJvdW5kaW5nIGJveCksIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xuICBNYXAubWVyZ2VPcHRpb25zKHtcbiAgXHQvLyBAb3B0aW9uIGJveFpvb206IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgdG8gYSByZWN0YW5ndWxhciBhcmVhIHNwZWNpZmllZCBieVxuICBcdC8vIGRyYWdnaW5nIHRoZSBtb3VzZSB3aGlsZSBwcmVzc2luZyB0aGUgc2hpZnQga2V5LlxuICBcdGJveFpvb206IHRydWVcbiAgfSk7XG5cbiAgdmFyIEJveFpvb20gPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xuICBcdFx0dGhpcy5fY29udGFpbmVyID0gbWFwLl9jb250YWluZXI7XG4gIFx0XHR0aGlzLl9wYW5lID0gbWFwLl9wYW5lcy5vdmVybGF5UGFuZTtcbiAgXHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gMDtcbiAgXHRcdG1hcC5vbigndW5sb2FkJywgdGhpcy5fZGVzdHJveSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbih0aGlzLl9jb250YWluZXIsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvZmYodGhpcy5fY29udGFpbmVyLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRfZGVzdHJveTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlKHRoaXMuX3BhbmUpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX3BhbmU7XG4gIFx0fSxcblxuICBcdF9yZXNldFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG4gIFx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xuICBcdH0sXG5cbiAgXHRfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZXNldFN0YXRlVGltZW91dCAhPT0gMCkge1xuICBcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpO1xuICBcdFx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlRG93bjogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghZS5zaGlmdEtleSB8fCAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkpKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyBDbGVhciB0aGUgZGVmZXJyZWQgcmVzZXRTdGF0ZSBpZiBpdCBoYXNuJ3QgZXhlY3V0ZWQgeWV0LCBvdGhlcndpc2UgaXRcbiAgXHRcdC8vIHdpbGwgaW50ZXJydXB0IHRoZSBpbnRlcmFjdGlvbiBhbmQgb3JwaGFuIGEgYm94IGVsZW1lbnQgaW4gdGhlIGNvbnRhaW5lci5cbiAgXHRcdHRoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCk7XG4gIFx0XHR0aGlzLl9yZXNldFN0YXRlKCk7XG5cbiAgXHRcdGRpc2FibGVUZXh0U2VsZWN0aW9uKCk7XG4gIFx0XHRkaXNhYmxlSW1hZ2VEcmFnKCk7XG5cbiAgXHRcdHRoaXMuX3N0YXJ0UG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCB7XG4gIFx0XHRcdGNvbnRleHRtZW51OiBzdG9wLFxuICBcdFx0XHRtb3VzZW1vdmU6IHRoaXMuX29uTW91c2VNb3ZlLFxuICBcdFx0XHRtb3VzZXVwOiB0aGlzLl9vbk1vdXNlVXAsXG4gIFx0XHRcdGtleWRvd246IHRoaXMuX29uS2V5RG93blxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghdGhpcy5fbW92ZWQpIHtcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xuXG4gIFx0XHRcdHRoaXMuX2JveCA9IGNyZWF0ZSQxKCdkaXYnLCAnbGVhZmxldC16b29tLWJveCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY3Jvc3NoYWlyJyk7XG5cbiAgXHRcdFx0dGhpcy5fbWFwLmZpcmUoJ2JveHpvb21zdGFydCcpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9wb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IG5ldyBCb3VuZHModGhpcy5fcG9pbnQsIHRoaXMuX3N0YXJ0UG9pbnQpLFxuICBcdFx0ICAgIHNpemUgPSBib3VuZHMuZ2V0U2l6ZSgpO1xuXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9ib3gsIGJvdW5kcy5taW4pO1xuXG4gIFx0XHR0aGlzLl9ib3guc3R5bGUud2lkdGggID0gc2l6ZS54ICsgJ3B4JztcbiAgXHRcdHRoaXMuX2JveC5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xuICBcdH0sXG5cbiAgXHRfZmluaXNoOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbW92ZWQpIHtcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2JveCk7XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY3Jvc3NoYWlyJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGVuYWJsZVRleHRTZWxlY3Rpb24oKTtcbiAgXHRcdGVuYWJsZUltYWdlRHJhZygpO1xuXG4gIFx0XHRvZmYoZG9jdW1lbnQsIHtcbiAgXHRcdFx0Y29udGV4dG1lbnU6IHN0b3AsXG4gIFx0XHRcdG1vdXNlbW92ZTogdGhpcy5fb25Nb3VzZU1vdmUsXG4gIFx0XHRcdG1vdXNldXA6IHRoaXMuX29uTW91c2VVcCxcbiAgXHRcdFx0a2V5ZG93bjogdGhpcy5fb25LZXlEb3duXG4gIFx0XHR9LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uTW91c2VVcDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICgoZS53aGljaCAhPT0gMSkgJiYgKGUuYnV0dG9uICE9PSAxKSkgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fZmluaXNoKCk7XG5cbiAgXHRcdGlmICghdGhpcy5fbW92ZWQpIHsgcmV0dXJuOyB9XG4gIFx0XHQvLyBQb3N0cG9uZSB0byBuZXh0IEpTIHRpY2sgc28gaW50ZXJuYWwgY2xpY2sgZXZlbnQgaGFuZGxpbmdcbiAgXHRcdC8vIHN0aWxsIHNlZSBpdCBhcyBcIm1vdmVkXCIuXG4gIFx0XHR0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpO1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGJpbmQodGhpcy5fcmVzZXRTdGF0ZSwgdGhpcyksIDApO1xuXG4gIFx0XHR2YXIgYm91bmRzID0gbmV3IExhdExuZ0JvdW5kcyhcbiAgXHRcdCAgICAgICAgdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50KSk7XG5cbiAgXHRcdHRoaXMuX21hcFxuICBcdFx0XHQuZml0Qm91bmRzKGJvdW5kcylcbiAgXHRcdFx0LmZpcmUoJ2JveHpvb21lbmQnLCB7Ym94Wm9vbUJvdW5kczogYm91bmRzfSk7XG4gIFx0fSxcblxuICBcdF9vbktleURvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICBcdFx0XHR0aGlzLl9maW5pc2goKTtcbiAgXHRcdFx0dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRTdGF0ZSgpO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IGJveFpvb206IEhhbmRsZXJcbiAgLy8gQm94IChzaGlmdC1kcmFnIHdpdGggbW91c2UpIHpvb20gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ2JveFpvb20nLCBCb3hab29tKTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuRG91YmxlQ2xpY2tab29tIGlzIHVzZWQgdG8gaGFuZGxlIGRvdWJsZS1jbGljayB6b29tIG9uIHRoZSBtYXAsIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xuXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24gZG91YmxlQ2xpY2tab29tOiBCb29sZWFufFN0cmluZyA9IHRydWVcbiAgXHQvLyBXaGV0aGVyIHRoZSBtYXAgY2FuIGJlIHpvb21lZCBpbiBieSBkb3VibGUgY2xpY2tpbmcgb24gaXQgYW5kXG4gIFx0Ly8gem9vbWVkIG91dCBieSBkb3VibGUgY2xpY2tpbmcgd2hpbGUgaG9sZGluZyBzaGlmdC4gSWYgcGFzc2VkXG4gIFx0Ly8gYCdjZW50ZXInYCwgZG91YmxlLWNsaWNrIHpvb20gd2lsbCB6b29tIHRvIHRoZSBjZW50ZXIgb2YgdGhlXG4gIFx0Ly8gIHZpZXcgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgbW91c2Ugd2FzLlxuICBcdGRvdWJsZUNsaWNrWm9vbTogdHJ1ZVxuICB9KTtcblxuICB2YXIgRG91YmxlQ2xpY2tab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9tYXAub24oJ2RibGNsaWNrJywgdGhpcy5fb25Eb3VibGVDbGljaywgdGhpcyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9tYXAub2ZmKCdkYmxjbGljaycsIHRoaXMuX29uRG91YmxlQ2xpY2ssIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Eb3VibGVDbGljazogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgb2xkWm9vbSA9IG1hcC5nZXRab29tKCksXG4gIFx0XHQgICAgZGVsdGEgPSBtYXAub3B0aW9ucy56b29tRGVsdGEsXG4gIFx0XHQgICAgem9vbSA9IGUub3JpZ2luYWxFdmVudC5zaGlmdEtleSA/IG9sZFpvb20gLSBkZWx0YSA6IG9sZFpvb20gKyBkZWx0YTtcblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLmRvdWJsZUNsaWNrWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgXHRcdFx0bWFwLnNldFpvb20oem9vbSk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRtYXAuc2V0Wm9vbUFyb3VuZChlLmNvbnRhaW5lclBvaW50LCB6b29tKTtcbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vXG4gIC8vIE1hcCBwcm9wZXJ0aWVzIGluY2x1ZGUgaW50ZXJhY3Rpb24gaGFuZGxlcnMgdGhhdCBhbGxvdyB5b3UgdG8gY29udHJvbFxuICAvLyBpbnRlcmFjdGlvbiBiZWhhdmlvciBpbiBydW50aW1lLCBlbmFibGluZyBvciBkaXNhYmxpbmcgY2VydGFpbiBmZWF0dXJlcyBzdWNoXG4gIC8vIGFzIGRyYWdnaW5nIG9yIHRvdWNoIHpvb20gKHNlZSBgSGFuZGxlcmAgbWV0aG9kcykuIEZvciBleGFtcGxlOlxuICAvL1xuICAvLyBgYGBqc1xuICAvLyBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgLy8gYGBgXG4gIC8vXG4gIC8vIEBwcm9wZXJ0eSBkb3VibGVDbGlja1pvb206IEhhbmRsZXJcbiAgLy8gRG91YmxlIGNsaWNrIHpvb20gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ2RvdWJsZUNsaWNrWm9vbScsIERvdWJsZUNsaWNrWm9vbSk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLk1hcERyYWcgaXMgdXNlZCB0byBtYWtlIHRoZSBtYXAgZHJhZ2dhYmxlICh3aXRoIHBhbm5pbmcgaW5lcnRpYSksIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xuICBNYXAubWVyZ2VPcHRpb25zKHtcbiAgXHQvLyBAb3B0aW9uIGRyYWdnaW5nOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBpcyBkcmFnZ2FibGUgd2l0aCBtb3VzZS90b3VjaCBvciBub3QuXG4gIFx0ZHJhZ2dpbmc6IHRydWUsXG5cbiAgXHQvLyBAc2VjdGlvbiBQYW5uaW5nIEluZXJ0aWEgT3B0aW9uc1xuICBcdC8vIEBvcHRpb24gaW5lcnRpYTogQm9vbGVhbiA9ICpcbiAgXHQvLyBJZiBlbmFibGVkLCBwYW5uaW5nIG9mIHRoZSBtYXAgd2lsbCBoYXZlIGFuIGluZXJ0aWEgZWZmZWN0IHdoZXJlXG4gIFx0Ly8gdGhlIG1hcCBidWlsZHMgbW9tZW50dW0gd2hpbGUgZHJhZ2dpbmcgYW5kIGNvbnRpbnVlcyBtb3ZpbmcgaW5cbiAgXHQvLyB0aGUgc2FtZSBkaXJlY3Rpb24gZm9yIHNvbWUgdGltZS4gRmVlbHMgZXNwZWNpYWxseSBuaWNlIG9uIHRvdWNoXG4gIFx0Ly8gZGV2aWNlcy4gRW5hYmxlZCBieSBkZWZhdWx0LlxuICBcdGluZXJ0aWE6IHRydWUsXG5cbiAgXHQvLyBAb3B0aW9uIGluZXJ0aWFEZWNlbGVyYXRpb246IE51bWJlciA9IDMwMDBcbiAgXHQvLyBUaGUgcmF0ZSB3aXRoIHdoaWNoIHRoZSBpbmVydGlhbCBtb3ZlbWVudCBzbG93cyBkb3duLCBpbiBwaXhlbHMvc2Vjb25kwrIuXG4gIFx0aW5lcnRpYURlY2VsZXJhdGlvbjogMzQwMCwgLy8gcHgvc14yXG5cbiAgXHQvLyBAb3B0aW9uIGluZXJ0aWFNYXhTcGVlZDogTnVtYmVyID0gSW5maW5pdHlcbiAgXHQvLyBNYXggc3BlZWQgb2YgdGhlIGluZXJ0aWFsIG1vdmVtZW50LCBpbiBwaXhlbHMvc2Vjb25kLlxuICBcdGluZXJ0aWFNYXhTcGVlZDogSW5maW5pdHksIC8vIHB4L3NcblxuICBcdC8vIEBvcHRpb24gZWFzZUxpbmVhcml0eTogTnVtYmVyID0gMC4yXG4gIFx0ZWFzZUxpbmVhcml0eTogMC4yLFxuXG4gIFx0Ly8gVE9ETyByZWZhY3RvciwgbW92ZSB0byBDUlNcbiAgXHQvLyBAb3B0aW9uIHdvcmxkQ29weUp1bXA6IEJvb2xlYW4gPSBmYWxzZVxuICBcdC8vIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlIG1hcCB0cmFja3Mgd2hlbiB5b3UgcGFuIHRvIGFub3RoZXIgXCJjb3B5XCJcbiAgXHQvLyBvZiB0aGUgd29ybGQgYW5kIHNlYW1sZXNzbHkganVtcHMgdG8gdGhlIG9yaWdpbmFsIG9uZSBzbyB0aGF0IGFsbCBvdmVybGF5c1xuICBcdC8vIGxpa2UgbWFya2VycyBhbmQgdmVjdG9yIGxheWVycyBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgXHR3b3JsZENvcHlKdW1wOiBmYWxzZSxcblxuICBcdC8vIEBvcHRpb24gbWF4Qm91bmRzVmlzY29zaXR5OiBOdW1iZXIgPSAwLjBcbiAgXHQvLyBJZiBgbWF4Qm91bmRzYCBpcyBzZXQsIHRoaXMgb3B0aW9uIHdpbGwgY29udHJvbCBob3cgc29saWQgdGhlIGJvdW5kc1xuICBcdC8vIGFyZSB3aGVuIGRyYWdnaW5nIHRoZSBtYXAgYXJvdW5kLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBgMC4wYCBhbGxvd3MgdGhlXG4gIFx0Ly8gdXNlciB0byBkcmFnIG91dHNpZGUgdGhlIGJvdW5kcyBhdCBub3JtYWwgc3BlZWQsIGhpZ2hlciB2YWx1ZXMgd2lsbFxuICBcdC8vIHNsb3cgZG93biBtYXAgZHJhZ2dpbmcgb3V0c2lkZSBib3VuZHMsIGFuZCBgMS4wYCBtYWtlcyB0aGUgYm91bmRzIGZ1bGx5XG4gIFx0Ly8gc29saWQsIHByZXZlbnRpbmcgdGhlIHVzZXIgZnJvbSBkcmFnZ2luZyBvdXRzaWRlIHRoZSBib3VuZHMuXG4gIFx0bWF4Qm91bmRzVmlzY29zaXR5OiAwLjBcbiAgfSk7XG5cbiAgdmFyIERyYWcgPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fZHJhZ2dhYmxlKSB7XG4gIFx0XHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlID0gbmV3IERyYWdnYWJsZShtYXAuX21hcFBhbmUsIG1hcC5fY29udGFpbmVyKTtcblxuICBcdFx0XHR0aGlzLl9kcmFnZ2FibGUub24oe1xuICBcdFx0XHRcdGRyYWdzdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gIFx0XHRcdFx0ZHJhZzogdGhpcy5fb25EcmFnLFxuICBcdFx0XHRcdGRyYWdlbmQ6IHRoaXMuX29uRHJhZ0VuZFxuICBcdFx0XHR9LCB0aGlzKTtcblxuICBcdFx0XHR0aGlzLl9kcmFnZ2FibGUub24oJ3ByZWRyYWcnLCB0aGlzLl9vblByZURyYWdMaW1pdCwgdGhpcyk7XG4gIFx0XHRcdGlmIChtYXAub3B0aW9ucy53b3JsZENvcHlKdW1wKSB7XG4gIFx0XHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKCdwcmVkcmFnJywgdGhpcy5fb25QcmVEcmFnV3JhcCwgdGhpcyk7XG4gIFx0XHRcdFx0bWFwLm9uKCd6b29tZW5kJywgdGhpcy5fb25ab29tRW5kLCB0aGlzKTtcblxuICBcdFx0XHRcdG1hcC53aGVuUmVhZHkodGhpcy5fb25ab29tRW5kLCB0aGlzKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0YWRkQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnJyk7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCk7XG4gIFx0XHR0aGlzLl9wb3NpdGlvbnMgPSBbXTtcbiAgXHRcdHRoaXMuX3RpbWVzID0gW107XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtZ3JhYicpO1xuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LXRvdWNoLWRyYWcnKTtcbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCk7XG4gIFx0fSxcblxuICBcdG1vdmVkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlICYmIHRoaXMuX2RyYWdnYWJsZS5fbW92ZWQ7XG4gIFx0fSxcblxuICBcdG1vdmluZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmluZztcbiAgXHR9LFxuXG4gIFx0X29uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gIFx0XHRtYXAuX3N0b3AoKTtcbiAgXHRcdGlmICh0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMgJiYgdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSB7XG4gIFx0XHRcdHZhciBib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyh0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMpO1xuXG4gIFx0XHRcdHRoaXMuX29mZnNldExpbWl0ID0gdG9Cb3VuZHMoXG4gIFx0XHRcdFx0dGhpcy5fbWFwLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYm91bmRzLmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSxcbiAgXHRcdFx0XHR0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludChib3VuZHMuZ2V0U291dGhFYXN0KCkpLm11bHRpcGx5QnkoLTEpXG4gIFx0XHRcdFx0XHQuYWRkKHRoaXMuX21hcC5nZXRTaXplKCkpKTtcblxuICBcdFx0XHR0aGlzLl92aXNjb3NpdHkgPSBNYXRoLm1pbigxLjAsIE1hdGgubWF4KDAuMCwgdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9vZmZzZXRMaW1pdCA9IG51bGw7XG4gIFx0XHR9XG5cbiAgXHRcdG1hcFxuICBcdFx0ICAgIC5maXJlKCdtb3Zlc3RhcnQnKVxuICBcdFx0ICAgIC5maXJlKCdkcmFnc3RhcnQnKTtcblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLmluZXJ0aWEpIHtcbiAgXHRcdFx0dGhpcy5fcG9zaXRpb25zID0gW107XG4gIFx0XHRcdHRoaXMuX3RpbWVzID0gW107XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbkRyYWc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSkge1xuICBcdFx0XHR2YXIgdGltZSA9IHRoaXMuX2xhc3RUaW1lID0gK25ldyBEYXRlKCksXG4gIFx0XHRcdCAgICBwb3MgPSB0aGlzLl9sYXN0UG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3MgfHwgdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M7XG5cbiAgXHRcdFx0dGhpcy5fcG9zaXRpb25zLnB1c2gocG9zKTtcbiAgXHRcdFx0dGhpcy5fdGltZXMucHVzaCh0aW1lKTtcblxuICBcdFx0XHR0aGlzLl9wcnVuZVBvc2l0aW9ucyh0aW1lKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fbWFwXG4gIFx0XHQgICAgLmZpcmUoJ21vdmUnLCBlKVxuICBcdFx0ICAgIC5maXJlKCdkcmFnJywgZSk7XG4gIFx0fSxcblxuICBcdF9wcnVuZVBvc2l0aW9uczogZnVuY3Rpb24gKHRpbWUpIHtcbiAgXHRcdHdoaWxlICh0aGlzLl9wb3NpdGlvbnMubGVuZ3RoID4gMSAmJiB0aW1lIC0gdGhpcy5fdGltZXNbMF0gPiA1MCkge1xuICBcdFx0XHR0aGlzLl9wb3NpdGlvbnMuc2hpZnQoKTtcbiAgXHRcdFx0dGhpcy5fdGltZXMuc2hpZnQoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uWm9vbUVuZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHB4Q2VudGVyID0gdGhpcy5fbWFwLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcbiAgXHRcdCAgICBweFdvcmxkQ2VudGVyID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwgMF0pO1xuXG4gIFx0XHR0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQgPSBweFdvcmxkQ2VudGVyLnN1YnRyYWN0KHB4Q2VudGVyKS54O1xuICBcdFx0dGhpcy5fd29ybGRXaWR0aCA9IHRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKCkuZ2V0U2l6ZSgpLng7XG4gIFx0fSxcblxuICBcdF92aXNjb3VzTGltaXQ6IGZ1bmN0aW9uICh2YWx1ZSwgdGhyZXNob2xkKSB7XG4gIFx0XHRyZXR1cm4gdmFsdWUgLSAodmFsdWUgLSB0aHJlc2hvbGQpICogdGhpcy5fdmlzY29zaXR5O1xuICBcdH0sXG5cbiAgXHRfb25QcmVEcmFnTGltaXQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fdmlzY29zaXR5IHx8ICF0aGlzLl9vZmZzZXRMaW1pdCkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG9mZnNldCA9IHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnN1YnRyYWN0KHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MpO1xuXG4gIFx0XHR2YXIgbGltaXQgPSB0aGlzLl9vZmZzZXRMaW1pdDtcbiAgXHRcdGlmIChvZmZzZXQueCA8IGxpbWl0Lm1pbi54KSB7IG9mZnNldC54ID0gdGhpcy5fdmlzY291c0xpbWl0KG9mZnNldC54LCBsaW1pdC5taW4ueCk7IH1cbiAgXHRcdGlmIChvZmZzZXQueSA8IGxpbWl0Lm1pbi55KSB7IG9mZnNldC55ID0gdGhpcy5fdmlzY291c0xpbWl0KG9mZnNldC55LCBsaW1pdC5taW4ueSk7IH1cbiAgXHRcdGlmIChvZmZzZXQueCA+IGxpbWl0Lm1heC54KSB7IG9mZnNldC54ID0gdGhpcy5fdmlzY291c0xpbWl0KG9mZnNldC54LCBsaW1pdC5tYXgueCk7IH1cbiAgXHRcdGlmIChvZmZzZXQueSA+IGxpbWl0Lm1heC55KSB7IG9mZnNldC55ID0gdGhpcy5fdmlzY291c0xpbWl0KG9mZnNldC55LCBsaW1pdC5tYXgueSk7IH1cblxuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MgPSB0aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZChvZmZzZXQpO1xuICBcdH0sXG5cbiAgXHRfb25QcmVEcmFnV3JhcDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gVE9ETyByZWZhY3RvciB0byBiZSBhYmxlIHRvIGFkanVzdCBtYXAgcGFuZSBwb3NpdGlvbiBhZnRlciB6b29tXG4gIFx0XHR2YXIgd29ybGRXaWR0aCA9IHRoaXMuX3dvcmxkV2lkdGgsXG4gIFx0XHQgICAgaGFsZldpZHRoID0gTWF0aC5yb3VuZCh3b3JsZFdpZHRoIC8gMiksXG4gIFx0XHQgICAgZHggPSB0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQsXG4gIFx0XHQgICAgeCA9IHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsXG4gIFx0XHQgICAgbmV3WDEgPSAoeCAtIGhhbGZXaWR0aCArIGR4KSAlIHdvcmxkV2lkdGggKyBoYWxmV2lkdGggLSBkeCxcbiAgXHRcdCAgICBuZXdYMiA9ICh4ICsgaGFsZldpZHRoICsgZHgpICUgd29ybGRXaWR0aCAtIGhhbGZXaWR0aCAtIGR4LFxuICBcdFx0ICAgIG5ld1ggPSBNYXRoLmFicyhuZXdYMSArIGR4KSA8IE1hdGguYWJzKG5ld1gyICsgZHgpID8gbmV3WDEgOiBuZXdYMjtcblxuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3MgPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5jbG9uZSgpO1xuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCA9IG5ld1g7XG4gIFx0fSxcblxuICBcdF9vbkRyYWdFbmQ6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBtYXAub3B0aW9ucyxcblxuICBcdFx0ICAgIG5vSW5lcnRpYSA9ICFvcHRpb25zLmluZXJ0aWEgfHwgZS5ub0luZXJ0aWEgfHwgdGhpcy5fdGltZXMubGVuZ3RoIDwgMjtcblxuICBcdFx0bWFwLmZpcmUoJ2RyYWdlbmQnLCBlKTtcblxuICBcdFx0aWYgKG5vSW5lcnRpYSkge1xuICBcdFx0XHRtYXAuZmlyZSgnbW92ZWVuZCcpO1xuXG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9wcnVuZVBvc2l0aW9ucygrbmV3IERhdGUoKSk7XG5cbiAgXHRcdFx0dmFyIGRpcmVjdGlvbiA9IHRoaXMuX2xhc3RQb3Muc3VidHJhY3QodGhpcy5fcG9zaXRpb25zWzBdKSxcbiAgXHRcdFx0ICAgIGR1cmF0aW9uID0gKHRoaXMuX2xhc3RUaW1lIC0gdGhpcy5fdGltZXNbMF0pIC8gMTAwMCxcbiAgXHRcdFx0ICAgIGVhc2UgPSBvcHRpb25zLmVhc2VMaW5lYXJpdHksXG5cbiAgXHRcdFx0ICAgIHNwZWVkVmVjdG9yID0gZGlyZWN0aW9uLm11bHRpcGx5QnkoZWFzZSAvIGR1cmF0aW9uKSxcbiAgXHRcdFx0ICAgIHNwZWVkID0gc3BlZWRWZWN0b3IuZGlzdGFuY2VUbyhbMCwgMF0pLFxuXG4gIFx0XHRcdCAgICBsaW1pdGVkU3BlZWQgPSBNYXRoLm1pbihvcHRpb25zLmluZXJ0aWFNYXhTcGVlZCwgc3BlZWQpLFxuICBcdFx0XHQgICAgbGltaXRlZFNwZWVkVmVjdG9yID0gc3BlZWRWZWN0b3IubXVsdGlwbHlCeShsaW1pdGVkU3BlZWQgLyBzcGVlZCksXG5cbiAgXHRcdFx0ICAgIGRlY2VsZXJhdGlvbkR1cmF0aW9uID0gbGltaXRlZFNwZWVkIC8gKG9wdGlvbnMuaW5lcnRpYURlY2VsZXJhdGlvbiAqIGVhc2UpLFxuICBcdFx0XHQgICAgb2Zmc2V0ID0gbGltaXRlZFNwZWVkVmVjdG9yLm11bHRpcGx5QnkoLWRlY2VsZXJhdGlvbkR1cmF0aW9uIC8gMikucm91bmQoKTtcblxuICBcdFx0XHRpZiAoIW9mZnNldC54ICYmICFvZmZzZXQueSkge1xuICBcdFx0XHRcdG1hcC5maXJlKCdtb3ZlZW5kJyk7XG5cbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRvZmZzZXQgPSBtYXAuX2xpbWl0T2Zmc2V0KG9mZnNldCwgbWFwLm9wdGlvbnMubWF4Qm91bmRzKTtcblxuICBcdFx0XHRcdHJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24gKCkge1xuICBcdFx0XHRcdFx0bWFwLnBhbkJ5KG9mZnNldCwge1xuICBcdFx0XHRcdFx0XHRkdXJhdGlvbjogZGVjZWxlcmF0aW9uRHVyYXRpb24sXG4gIFx0XHRcdFx0XHRcdGVhc2VMaW5lYXJpdHk6IGVhc2UsXG4gIFx0XHRcdFx0XHRcdG5vTW92ZVN0YXJ0OiB0cnVlLFxuICBcdFx0XHRcdFx0XHRhbmltYXRlOiB0cnVlXG4gIFx0XHRcdFx0XHR9KTtcbiAgXHRcdFx0XHR9KTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IGRyYWdnaW5nOiBIYW5kbGVyXG4gIC8vIE1hcCBkcmFnZ2luZyBoYW5kbGVyIChieSBib3RoIG1vdXNlIGFuZCB0b3VjaCkuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdkcmFnZ2luZycsIERyYWcpO1xuXG4gIC8qXG4gICAqIEwuTWFwLktleWJvYXJkIGlzIGhhbmRsaW5nIGtleWJvYXJkIGludGVyYWN0aW9uIHdpdGggdGhlIG1hcCwgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBLZXlib2FyZCBOYXZpZ2F0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBrZXlib2FyZDogQm9vbGVhbiA9IHRydWVcbiAgXHQvLyBNYWtlcyB0aGUgbWFwIGZvY3VzYWJsZSBhbmQgYWxsb3dzIHVzZXJzIHRvIG5hdmlnYXRlIHRoZSBtYXAgd2l0aCBrZXlib2FyZFxuICBcdC8vIGFycm93cyBhbmQgYCtgL2AtYCBrZXlzLlxuICBcdGtleWJvYXJkOiB0cnVlLFxuXG4gIFx0Ly8gQG9wdGlvbiBrZXlib2FyZFBhbkRlbHRhOiBOdW1iZXIgPSA4MFxuICBcdC8vIEFtb3VudCBvZiBwaXhlbHMgdG8gcGFuIHdoZW4gcHJlc3NpbmcgYW4gYXJyb3cga2V5LlxuICBcdGtleWJvYXJkUGFuRGVsdGE6IDgwXG4gIH0pO1xuXG4gIHZhciBLZXlib2FyZCA9IEhhbmRsZXIuZXh0ZW5kKHtcblxuICBcdGtleUNvZGVzOiB7XG4gIFx0XHRsZWZ0OiAgICBbMzddLFxuICBcdFx0cmlnaHQ6ICAgWzM5XSxcbiAgXHRcdGRvd246ICAgIFs0MF0sXG4gIFx0XHR1cDogICAgICBbMzhdLFxuICBcdFx0em9vbUluOiAgWzE4NywgMTA3LCA2MSwgMTcxXSxcbiAgXHRcdHpvb21PdXQ6IFsxODksIDEwOSwgNTQsIDE3M11cbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xuXG4gIFx0XHR0aGlzLl9zZXRQYW5EZWx0YShtYXAub3B0aW9ucy5rZXlib2FyZFBhbkRlbHRhKTtcbiAgXHRcdHRoaXMuX3NldFpvb21EZWx0YShtYXAub3B0aW9ucy56b29tRGVsdGEpO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX21hcC5fY29udGFpbmVyO1xuXG4gIFx0XHQvLyBtYWtlIHRoZSBjb250YWluZXIgZm9jdXNhYmxlIGJ5IHRhYmJpbmdcbiAgXHRcdGlmIChjb250YWluZXIudGFiSW5kZXggPD0gMCkge1xuICBcdFx0XHRjb250YWluZXIudGFiSW5kZXggPSAnMCc7XG4gIFx0XHR9XG5cbiAgXHRcdG9uKGNvbnRhaW5lciwge1xuICBcdFx0XHRmb2N1czogdGhpcy5fb25Gb2N1cyxcbiAgXHRcdFx0Ymx1cjogdGhpcy5fb25CbHVyLFxuICBcdFx0XHRtb3VzZWRvd246IHRoaXMuX29uTW91c2VEb3duXG4gIFx0XHR9LCB0aGlzKTtcblxuICBcdFx0dGhpcy5fbWFwLm9uKHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX2FkZEhvb2tzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9yZW1vdmVIb29rc1xuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9yZW1vdmVIb29rcygpO1xuXG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsIHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX29uRm9jdXMsXG4gIFx0XHRcdGJsdXI6IHRoaXMuX29uQmx1cixcbiAgXHRcdFx0bW91c2Vkb3duOiB0aGlzLl9vbk1vdXNlRG93blxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdHRoaXMuX21hcC5vZmYoe1xuICBcdFx0XHRmb2N1czogdGhpcy5fYWRkSG9va3MsXG4gIFx0XHRcdGJsdXI6IHRoaXMuX3JlbW92ZUhvb2tzXG4gIFx0XHR9LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uTW91c2VEb3duOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fZm9jdXNlZCkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5LFxuICBcdFx0ICAgIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICBcdFx0ICAgIHRvcCA9IGJvZHkuc2Nyb2xsVG9wIHx8IGRvY0VsLnNjcm9sbFRvcCxcbiAgXHRcdCAgICBsZWZ0ID0gYm9keS5zY3JvbGxMZWZ0IHx8IGRvY0VsLnNjcm9sbExlZnQ7XG5cbiAgXHRcdHRoaXMuX21hcC5fY29udGFpbmVyLmZvY3VzKCk7XG5cbiAgXHRcdHdpbmRvdy5zY3JvbGxUbyhsZWZ0LCB0b3ApO1xuICBcdH0sXG5cbiAgXHRfb25Gb2N1czogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fZm9jdXNlZCA9IHRydWU7XG4gIFx0XHR0aGlzLl9tYXAuZmlyZSgnZm9jdXMnKTtcbiAgXHR9LFxuXG4gIFx0X29uQmx1cjogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fZm9jdXNlZCA9IGZhbHNlO1xuICBcdFx0dGhpcy5fbWFwLmZpcmUoJ2JsdXInKTtcbiAgXHR9LFxuXG4gIFx0X3NldFBhbkRlbHRhOiBmdW5jdGlvbiAocGFuRGVsdGEpIHtcbiAgXHRcdHZhciBrZXlzID0gdGhpcy5fcGFuS2V5cyA9IHt9LFxuICBcdFx0ICAgIGNvZGVzID0gdGhpcy5rZXlDb2RlcyxcbiAgXHRcdCAgICBpLCBsZW47XG5cbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNvZGVzLmxlZnQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy5sZWZ0W2ldXSA9IFstMSAqIHBhbkRlbHRhLCAwXTtcbiAgXHRcdH1cbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNvZGVzLnJpZ2h0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMucmlnaHRbaV1dID0gW3BhbkRlbHRhLCAwXTtcbiAgXHRcdH1cbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNvZGVzLmRvd24ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy5kb3duW2ldXSA9IFswLCBwYW5EZWx0YV07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy51cC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnVwW2ldXSA9IFswLCAtMSAqIHBhbkRlbHRhXTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3NldFpvb21EZWx0YTogZnVuY3Rpb24gKHpvb21EZWx0YSkge1xuICBcdFx0dmFyIGtleXMgPSB0aGlzLl96b29tS2V5cyA9IHt9LFxuICBcdFx0ICAgIGNvZGVzID0gdGhpcy5rZXlDb2RlcyxcbiAgXHRcdCAgICBpLCBsZW47XG5cbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNvZGVzLnpvb21Jbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnpvb21JbltpXV0gPSB6b29tRGVsdGE7XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy56b29tT3V0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMuem9vbU91dFtpXV0gPSAtem9vbURlbHRhO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9uKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5RG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbktleURvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGtleSA9IGUua2V5Q29kZSxcbiAgXHRcdCAgICBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgb2Zmc2V0O1xuXG4gIFx0XHRpZiAoa2V5IGluIHRoaXMuX3BhbktleXMpIHtcbiAgXHRcdFx0aWYgKCFtYXAuX3BhbkFuaW0gfHwgIW1hcC5fcGFuQW5pbS5faW5Qcm9ncmVzcykge1xuICBcdFx0XHRcdG9mZnNldCA9IHRoaXMuX3BhbktleXNba2V5XTtcbiAgXHRcdFx0XHRpZiAoZS5zaGlmdEtleSkge1xuICBcdFx0XHRcdFx0b2Zmc2V0ID0gdG9Qb2ludChvZmZzZXQpLm11bHRpcGx5QnkoMyk7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0aWYgKG1hcC5vcHRpb25zLm1heEJvdW5kcykge1xuICBcdFx0XHRcdFx0b2Zmc2V0ID0gbWFwLl9saW1pdE9mZnNldCh0b1BvaW50KG9mZnNldCksIG1hcC5vcHRpb25zLm1heEJvdW5kcyk7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0aWYgKG1hcC5vcHRpb25zLndvcmxkQ29weUp1bXApIHtcbiAgXHRcdFx0XHRcdHZhciBuZXdMYXRMbmcgPSBtYXAud3JhcExhdExuZyhtYXAudW5wcm9qZWN0KG1hcC5wcm9qZWN0KG1hcC5nZXRDZW50ZXIoKSkuYWRkKG9mZnNldCkpKTtcbiAgXHRcdFx0XHRcdG1hcC5wYW5UbyhuZXdMYXRMbmcpO1xuICBcdFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0XHRtYXAucGFuQnkob2Zmc2V0KTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH0gZWxzZSBpZiAoa2V5IGluIHRoaXMuX3pvb21LZXlzKSB7XG4gIFx0XHRcdG1hcC5zZXRab29tKG1hcC5nZXRab29tKCkgKyAoZS5zaGlmdEtleSA/IDMgOiAxKSAqIHRoaXMuX3pvb21LZXlzW2tleV0pO1xuXG4gIFx0XHR9IGVsc2UgaWYgKGtleSA9PT0gMjcgJiYgbWFwLl9wb3B1cCAmJiBtYXAuX3BvcHVwLm9wdGlvbnMuY2xvc2VPbkVzY2FwZUtleSkge1xuICBcdFx0XHRtYXAuY2xvc2VQb3B1cCgpO1xuXG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHN0b3AoZSk7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkga2V5Ym9hcmQ6IEhhbmRsZXJcbiAgLy8gS2V5Ym9hcmQgbmF2aWdhdGlvbiBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAna2V5Ym9hcmQnLCBLZXlib2FyZCk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLlNjcm9sbFdoZWVsWm9vbSBpcyB1c2VkIGJ5IEwuTWFwIHRvIGVuYWJsZSBtb3VzZSBzY3JvbGwgd2hlZWwgem9vbSBvbiB0aGUgbWFwLlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBzZWN0aW9uIE1vdXNlIHdoZWVsIG9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIHNjcm9sbFdoZWVsWm9vbTogQm9vbGVhbnxTdHJpbmcgPSB0cnVlXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgYnkgdXNpbmcgdGhlIG1vdXNlIHdoZWVsLiBJZiBwYXNzZWQgYCdjZW50ZXInYCxcbiAgXHQvLyBpdCB3aWxsIHpvb20gdG8gdGhlIGNlbnRlciBvZiB0aGUgdmlldyByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBtb3VzZSB3YXMuXG4gIFx0c2Nyb2xsV2hlZWxab29tOiB0cnVlLFxuXG4gIFx0Ly8gQG9wdGlvbiB3aGVlbERlYm91bmNlVGltZTogTnVtYmVyID0gNDBcbiAgXHQvLyBMaW1pdHMgdGhlIHJhdGUgYXQgd2hpY2ggYSB3aGVlbCBjYW4gZmlyZSAoaW4gbWlsbGlzZWNvbmRzKS4gQnkgZGVmYXVsdFxuICBcdC8vIHVzZXIgY2FuJ3Qgem9vbSB2aWEgd2hlZWwgbW9yZSBvZnRlbiB0aGFuIG9uY2UgcGVyIDQwIG1zLlxuICBcdHdoZWVsRGVib3VuY2VUaW1lOiA0MCxcblxuICBcdC8vIEBvcHRpb24gd2hlZWxQeFBlclpvb21MZXZlbDogTnVtYmVyID0gNjBcbiAgXHQvLyBIb3cgbWFueSBzY3JvbGwgcGl4ZWxzIChhcyByZXBvcnRlZCBieSBbTC5Eb21FdmVudC5nZXRXaGVlbERlbHRhXSgjZG9tZXZlbnQtZ2V0d2hlZWxkZWx0YSkpXG4gIFx0Ly8gbWVhbiBhIGNoYW5nZSBvZiBvbmUgZnVsbCB6b29tIGxldmVsLiBTbWFsbGVyIHZhbHVlcyB3aWxsIG1ha2Ugd2hlZWwtem9vbWluZ1xuICBcdC8vIGZhc3RlciAoYW5kIHZpY2UgdmVyc2EpLlxuICBcdHdoZWVsUHhQZXJab29tTGV2ZWw6IDYwXG4gIH0pO1xuXG4gIHZhciBTY3JvbGxXaGVlbFpvb20gPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9uKHRoaXMuX21hcC5fY29udGFpbmVyLCAnd2hlZWwnLCB0aGlzLl9vbldoZWVsU2Nyb2xsLCB0aGlzKTtcblxuICBcdFx0dGhpcy5fZGVsdGEgPSAwO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCAnd2hlZWwnLCB0aGlzLl9vbldoZWVsU2Nyb2xsLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uV2hlZWxTY3JvbGw6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgZGVsdGEgPSBnZXRXaGVlbERlbHRhKGUpO1xuXG4gIFx0XHR2YXIgZGVib3VuY2UgPSB0aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZTtcblxuICBcdFx0dGhpcy5fZGVsdGEgKz0gZGVsdGE7XG4gIFx0XHR0aGlzLl9sYXN0TW91c2VQb3MgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG5cbiAgXHRcdGlmICghdGhpcy5fc3RhcnRUaW1lKSB7XG4gIFx0XHRcdHRoaXMuX3N0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgbGVmdCA9IE1hdGgubWF4KGRlYm91bmNlIC0gKCtuZXcgRGF0ZSgpIC0gdGhpcy5fc3RhcnRUaW1lKSwgMCk7XG5cbiAgXHRcdGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gIFx0XHR0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoYmluZCh0aGlzLl9wZXJmb3JtWm9vbSwgdGhpcyksIGxlZnQpO1xuXG4gIFx0XHRzdG9wKGUpO1xuICBcdH0sXG5cbiAgXHRfcGVyZm9ybVpvb206IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgem9vbSA9IG1hcC5nZXRab29tKCksXG4gIFx0XHQgICAgc25hcCA9IHRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwIHx8IDA7XG5cbiAgXHRcdG1hcC5fc3RvcCgpOyAvLyBzdG9wIHBhbm5pbmcgYW5kIGZseSBhbmltYXRpb25zIGlmIGFueVxuXG4gIFx0XHQvLyBtYXAgdGhlIGRlbHRhIHdpdGggYSBzaWdtb2lkIGZ1bmN0aW9uIHRvIC00Li40IHJhbmdlIGxlYW5pbmcgb24gLTEuLjFcbiAgXHRcdHZhciBkMiA9IHRoaXMuX2RlbHRhIC8gKHRoaXMuX21hcC5vcHRpb25zLndoZWVsUHhQZXJab29tTGV2ZWwgKiA0KSxcbiAgXHRcdCAgICBkMyA9IDQgKiBNYXRoLmxvZygyIC8gKDEgKyBNYXRoLmV4cCgtTWF0aC5hYnMoZDIpKSkpIC8gTWF0aC5MTjIsXG4gIFx0XHQgICAgZDQgPSBzbmFwID8gTWF0aC5jZWlsKGQzIC8gc25hcCkgKiBzbmFwIDogZDMsXG4gIFx0XHQgICAgZGVsdGEgPSBtYXAuX2xpbWl0Wm9vbSh6b29tICsgKHRoaXMuX2RlbHRhID4gMCA/IGQ0IDogLWQ0KSkgLSB6b29tO1xuXG4gIFx0XHR0aGlzLl9kZWx0YSA9IDA7XG4gIFx0XHR0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuXG4gIFx0XHRpZiAoIWRlbHRhKSB7IHJldHVybjsgfVxuXG4gIFx0XHRpZiAobWFwLm9wdGlvbnMuc2Nyb2xsV2hlZWxab29tID09PSAnY2VudGVyJykge1xuICBcdFx0XHRtYXAuc2V0Wm9vbSh6b29tICsgZGVsdGEpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0bWFwLnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLCB6b29tICsgZGVsdGEpO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IHNjcm9sbFdoZWVsWm9vbTogSGFuZGxlclxuICAvLyBTY3JvbGwgd2hlZWwgem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnc2Nyb2xsV2hlZWxab29tJywgU2Nyb2xsV2hlZWxab29tKTtcblxuICAvKlxuICAgKiBMLk1hcC5UYXBIb2xkIGlzIHVzZWQgdG8gc2ltdWxhdGUgYGNvbnRleHRtZW51YCBldmVudCBvbiBsb25nIGhvbGQsXG4gICAqIHdoaWNoIG90aGVyd2lzZSBpcyBub3QgZmlyZWQgYnkgbW9iaWxlIFNhZmFyaS5cbiAgICovXG5cbiAgdmFyIHRhcEhvbGREZWxheSA9IDYwMDtcblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBzZWN0aW9uIFRvdWNoIGludGVyYWN0aW9uIG9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIHRhcEhvbGQ6IEJvb2xlYW5cbiAgXHQvLyBFbmFibGVzIHNpbXVsYXRpb24gb2YgYGNvbnRleHRtZW51YCBldmVudCwgZGVmYXVsdCBpcyBgdHJ1ZWAgZm9yIG1vYmlsZSBTYWZhcmkuXG4gIFx0dGFwSG9sZDogQnJvd3Nlci50b3VjaE5hdGl2ZSAmJiBCcm93c2VyLnNhZmFyaSAmJiBCcm93c2VyLm1vYmlsZSxcblxuICBcdC8vIEBvcHRpb24gdGFwVG9sZXJhbmNlOiBOdW1iZXIgPSAxNVxuICBcdC8vIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IGhpcyBmaW5nZXIgZHVyaW5nIHRvdWNoXG4gIFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCB0YXAuXG4gIFx0dGFwVG9sZXJhbmNlOiAxNVxuICB9KTtcblxuICB2YXIgVGFwSG9sZCA9IEhhbmRsZXIuZXh0ZW5kKHtcbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Eb3duLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vbkRvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Eb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTtcbiAgXHRcdGlmIChlLnRvdWNoZXMubGVuZ3RoICE9PSAxKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgZmlyc3QgPSBlLnRvdWNoZXNbMF07XG4gIFx0XHR0aGlzLl9zdGFydFBvcyA9IHRoaXMuX25ld1BvcyA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKTtcblxuICBcdFx0dGhpcy5faG9sZFRpbWVvdXQgPSBzZXRUaW1lb3V0KGJpbmQoZnVuY3Rpb24gKCkge1xuICBcdFx0XHR0aGlzLl9jYW5jZWwoKTtcbiAgXHRcdFx0aWYgKCF0aGlzLl9pc1RhcFZhbGlkKCkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFx0Ly8gcHJldmVudCBzaW11bGF0ZWQgbW91c2UgZXZlbnRzIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby90b3VjaC1ldmVudHMvI21vdXNlLWV2ZW50c1xuICBcdFx0XHRvbihkb2N1bWVudCwgJ3RvdWNoZW5kJywgcHJldmVudERlZmF1bHQpO1xuICBcdFx0XHRvbihkb2N1bWVudCwgJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgdGhpcy5fY2FuY2VsQ2xpY2tQcmV2ZW50KTtcbiAgXHRcdFx0dGhpcy5fc2ltdWxhdGVFdmVudCgnY29udGV4dG1lbnUnLCBmaXJzdCk7XG4gIFx0XHR9LCB0aGlzKSwgdGFwSG9sZERlbGF5KTtcblxuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCB0b3VjaGNhbmNlbCBjb250ZXh0bWVudScsIHRoaXMuX2NhbmNlbCwgdGhpcyk7XG4gIFx0XHRvbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9jYW5jZWxDbGlja1ByZXZlbnQ6IGZ1bmN0aW9uIGNhbmNlbENsaWNrUHJldmVudCgpIHtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kJywgcHJldmVudERlZmF1bHQpO1xuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2hlbmQgdG91Y2hjYW5jZWwnLCBjYW5jZWxDbGlja1ByZXZlbnQpO1xuICBcdH0sXG5cbiAgXHRfY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO1xuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2hlbmQgdG91Y2hjYW5jZWwgY29udGV4dG1lbnUnLCB0aGlzLl9jYW5jZWwsIHRoaXMpO1xuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlc1swXTtcbiAgXHRcdHRoaXMuX25ld1BvcyA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKTtcbiAgXHR9LFxuXG4gIFx0X2lzVGFwVmFsaWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcykgPD0gdGhpcy5fbWFwLm9wdGlvbnMudGFwVG9sZXJhbmNlO1xuICBcdH0sXG5cbiAgXHRfc2ltdWxhdGVFdmVudDogZnVuY3Rpb24gKHR5cGUsIGUpIHtcbiAgXHRcdHZhciBzaW11bGF0ZWRFdmVudCA9IG5ldyBNb3VzZUV2ZW50KHR5cGUsIHtcbiAgXHRcdFx0YnViYmxlczogdHJ1ZSxcbiAgXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcbiAgXHRcdFx0dmlldzogd2luZG93LFxuICBcdFx0XHQvLyBkZXRhaWw6IDEsXG4gIFx0XHRcdHNjcmVlblg6IGUuc2NyZWVuWCxcbiAgXHRcdFx0c2NyZWVuWTogZS5zY3JlZW5ZLFxuICBcdFx0XHRjbGllbnRYOiBlLmNsaWVudFgsXG4gIFx0XHRcdGNsaWVudFk6IGUuY2xpZW50WSxcbiAgXHRcdFx0Ly8gYnV0dG9uOiAyLFxuICBcdFx0XHQvLyBidXR0b25zOiAyXG4gIFx0XHR9KTtcblxuICBcdFx0c2ltdWxhdGVkRXZlbnQuX3NpbXVsYXRlZCA9IHRydWU7XG5cbiAgXHRcdGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoc2ltdWxhdGVkRXZlbnQpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IHRhcEhvbGQ6IEhhbmRsZXJcbiAgLy8gTG9uZyB0YXAgaGFuZGxlciB0byBzaW11bGF0ZSBgY29udGV4dG1lbnVgIGV2ZW50ICh1c2VmdWwgaW4gbW9iaWxlIFNhZmFyaSkuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICd0YXBIb2xkJywgVGFwSG9sZCk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLlRvdWNoWm9vbSBpcyB1c2VkIGJ5IEwuTWFwIHRvIGFkZCBwaW5jaCB6b29tIG9uIHN1cHBvcnRlZCBtb2JpbGUgYnJvd3NlcnMuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQHNlY3Rpb24gVG91Y2ggaW50ZXJhY3Rpb24gb3B0aW9uc1xuICBcdC8vIEBvcHRpb24gdG91Y2hab29tOiBCb29sZWFufFN0cmluZyA9ICpcbiAgXHQvLyBXaGV0aGVyIHRoZSBtYXAgY2FuIGJlIHpvb21lZCBieSB0b3VjaC1kcmFnZ2luZyB3aXRoIHR3byBmaW5nZXJzLiBJZlxuICBcdC8vIHBhc3NlZCBgJ2NlbnRlcidgLCBpdCB3aWxsIHpvb20gdG8gdGhlIGNlbnRlciBvZiB0aGUgdmlldyByZWdhcmRsZXNzIG9mXG4gIFx0Ly8gd2hlcmUgdGhlIHRvdWNoIGV2ZW50cyAoZmluZ2Vycykgd2VyZS4gRW5hYmxlZCBmb3IgdG91Y2gtY2FwYWJsZSB3ZWJcbiAgXHQvLyBicm93c2Vycy5cbiAgXHR0b3VjaFpvb206IEJyb3dzZXIudG91Y2gsXG5cbiAgXHQvLyBAb3B0aW9uIGJvdW5jZUF0Wm9vbUxpbWl0czogQm9vbGVhbiA9IHRydWVcbiAgXHQvLyBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdGhlIG1hcCB0byB6b29tIGJleW9uZCBtaW4vbWF4IHpvb21cbiAgXHQvLyBhbmQgdGhlbiBib3VuY2UgYmFjayB3aGVuIHBpbmNoLXpvb21pbmcuXG4gIFx0Ym91bmNlQXRab29tTGltaXRzOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBUb3VjaFpvb20gPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGFkZENsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC16b29tJyk7XG4gIFx0XHRvbih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblRvdWNoU3RhcnQsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LXRvdWNoLXpvb20nKTtcbiAgXHRcdG9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblRvdWNoU3RhcnQsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcDtcbiAgXHRcdGlmICghZS50b3VjaGVzIHx8IGUudG91Y2hlcy5sZW5ndGggIT09IDIgfHwgbWFwLl9hbmltYXRpbmdab29tIHx8IHRoaXMuX3pvb21pbmcpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBwMSA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMF0pLFxuICBcdFx0ICAgIHAyID0gbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUudG91Y2hlc1sxXSk7XG5cbiAgXHRcdHRoaXMuX2NlbnRlclBvaW50ID0gbWFwLmdldFNpemUoKS5fZGl2aWRlQnkoMik7XG4gIFx0XHR0aGlzLl9zdGFydExhdExuZyA9IG1hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX2NlbnRlclBvaW50KTtcbiAgXHRcdGlmIChtYXAub3B0aW9ucy50b3VjaFpvb20gIT09ICdjZW50ZXInKSB7XG4gIFx0XHRcdHRoaXMuX3BpbmNoU3RhcnRMYXRMbmcgPSBtYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyhwMS5hZGQocDIpLl9kaXZpZGVCeSgyKSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3N0YXJ0RGlzdCA9IHAxLmRpc3RhbmNlVG8ocDIpO1xuICBcdFx0dGhpcy5fc3RhcnRab29tID0gbWFwLmdldFpvb20oKTtcblxuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMuX3pvb21pbmcgPSB0cnVlO1xuXG4gIFx0XHRtYXAuX3N0b3AoKTtcblxuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSwgdGhpcyk7XG4gIFx0XHRvbihkb2N1bWVudCwgJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgdGhpcy5fb25Ub3VjaEVuZCwgdGhpcyk7XG5cbiAgXHRcdHByZXZlbnREZWZhdWx0KGUpO1xuICBcdH0sXG5cbiAgXHRfb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoICE9PSAyIHx8ICF0aGlzLl96b29taW5nKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIHAxID0gbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUudG91Y2hlc1swXSksXG4gIFx0XHQgICAgcDIgPSBtYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZS50b3VjaGVzWzFdKSxcbiAgXHRcdCAgICBzY2FsZSA9IHAxLmRpc3RhbmNlVG8ocDIpIC8gdGhpcy5fc3RhcnREaXN0O1xuXG4gIFx0XHR0aGlzLl96b29tID0gbWFwLmdldFNjYWxlWm9vbShzY2FsZSwgdGhpcy5fc3RhcnRab29tKTtcblxuICBcdFx0aWYgKCFtYXAub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMgJiYgKFxuICBcdFx0XHQodGhpcy5fem9vbSA8IG1hcC5nZXRNaW5ab29tKCkgJiYgc2NhbGUgPCAxKSB8fFxuICBcdFx0XHQodGhpcy5fem9vbSA+IG1hcC5nZXRNYXhab29tKCkgJiYgc2NhbGUgPiAxKSkpIHtcbiAgXHRcdFx0dGhpcy5fem9vbSA9IG1hcC5fbGltaXRab29tKHRoaXMuX3pvb20pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAobWFwLm9wdGlvbnMudG91Y2hab29tID09PSAnY2VudGVyJykge1xuICBcdFx0XHR0aGlzLl9jZW50ZXIgPSB0aGlzLl9zdGFydExhdExuZztcbiAgXHRcdFx0aWYgKHNjYWxlID09PSAxKSB7IHJldHVybjsgfVxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Ly8gR2V0IGRlbHRhIGZyb20gcGluY2ggdG8gY2VudGVyLCBzbyBjZW50ZXJMYXRMbmcgaXMgZGVsdGEgYXBwbGllZCB0byBpbml0aWFsIHBpbmNoTGF0TG5nXG4gIFx0XHRcdHZhciBkZWx0YSA9IHAxLl9hZGQocDIpLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fY2VudGVyUG9pbnQpO1xuICBcdFx0XHRpZiAoc2NhbGUgPT09IDEgJiYgZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSB7IHJldHVybjsgfVxuICBcdFx0XHR0aGlzLl9jZW50ZXIgPSBtYXAudW5wcm9qZWN0KG1hcC5wcm9qZWN0KHRoaXMuX3BpbmNoU3RhcnRMYXRMbmcsIHRoaXMuX3pvb20pLnN1YnRyYWN0KGRlbHRhKSwgdGhpcy5fem9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghdGhpcy5fbW92ZWQpIHtcbiAgXHRcdFx0bWFwLl9tb3ZlU3RhcnQodHJ1ZSwgZmFsc2UpO1xuICBcdFx0XHR0aGlzLl9tb3ZlZCA9IHRydWU7XG4gIFx0XHR9XG5cbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCk7XG5cbiAgXHRcdHZhciBtb3ZlRm4gPSBiaW5kKG1hcC5fbW92ZSwgbWFwLCB0aGlzLl9jZW50ZXIsIHRoaXMuX3pvb20sIHtwaW5jaDogdHJ1ZSwgcm91bmQ6IGZhbHNlfSwgdW5kZWZpbmVkKTtcbiAgXHRcdHRoaXMuX2FuaW1SZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZShtb3ZlRm4sIHRoaXMsIHRydWUpO1xuXG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hFbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fbW92ZWQgfHwgIXRoaXMuX3pvb21pbmcpIHtcbiAgXHRcdFx0dGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCk7XG5cbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlLCB0aGlzKTtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgdGhpcy5fb25Ub3VjaEVuZCwgdGhpcyk7XG5cbiAgXHRcdC8vIFBpbmNoIHVwZGF0ZXMgR3JpZExheWVycycgbGV2ZWxzIG9ubHkgd2hlbiB6b29tU25hcCBpcyBvZmYsIHNvIHpvb21TbmFwIGJlY29tZXMgbm9VcGRhdGUuXG4gIFx0XHRpZiAodGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbikge1xuICBcdFx0XHR0aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlciwgdGhpcy5fbWFwLl9saW1pdFpvb20odGhpcy5fem9vbSksIHRydWUsIHRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX21hcC5fcmVzZXRWaWV3KHRoaXMuX2NlbnRlciwgdGhpcy5fbWFwLl9saW1pdFpvb20odGhpcy5fem9vbSkpO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IHRvdWNoWm9vbTogSGFuZGxlclxuICAvLyBUb3VjaCB6b29tIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICd0b3VjaFpvb20nLCBUb3VjaFpvb20pO1xuXG4gIE1hcC5Cb3hab29tID0gQm94Wm9vbTtcbiAgTWFwLkRvdWJsZUNsaWNrWm9vbSA9IERvdWJsZUNsaWNrWm9vbTtcbiAgTWFwLkRyYWcgPSBEcmFnO1xuICBNYXAuS2V5Ym9hcmQgPSBLZXlib2FyZDtcbiAgTWFwLlNjcm9sbFdoZWVsWm9vbSA9IFNjcm9sbFdoZWVsWm9vbTtcbiAgTWFwLlRhcEhvbGQgPSBUYXBIb2xkO1xuICBNYXAuVG91Y2hab29tID0gVG91Y2hab29tO1xuXG4gIGV4cG9ydHMuQm91bmRzID0gQm91bmRzO1xuICBleHBvcnRzLkJyb3dzZXIgPSBCcm93c2VyO1xuICBleHBvcnRzLkNSUyA9IENSUztcbiAgZXhwb3J0cy5DYW52YXMgPSBDYW52YXM7XG4gIGV4cG9ydHMuQ2lyY2xlID0gQ2lyY2xlO1xuICBleHBvcnRzLkNpcmNsZU1hcmtlciA9IENpcmNsZU1hcmtlcjtcbiAgZXhwb3J0cy5DbGFzcyA9IENsYXNzO1xuICBleHBvcnRzLkNvbnRyb2wgPSBDb250cm9sO1xuICBleHBvcnRzLkRpdkljb24gPSBEaXZJY29uO1xuICBleHBvcnRzLkRpdk92ZXJsYXkgPSBEaXZPdmVybGF5O1xuICBleHBvcnRzLkRvbUV2ZW50ID0gRG9tRXZlbnQ7XG4gIGV4cG9ydHMuRG9tVXRpbCA9IERvbVV0aWw7XG4gIGV4cG9ydHMuRHJhZ2dhYmxlID0gRHJhZ2dhYmxlO1xuICBleHBvcnRzLkV2ZW50ZWQgPSBFdmVudGVkO1xuICBleHBvcnRzLkZlYXR1cmVHcm91cCA9IEZlYXR1cmVHcm91cDtcbiAgZXhwb3J0cy5HZW9KU09OID0gR2VvSlNPTjtcbiAgZXhwb3J0cy5HcmlkTGF5ZXIgPSBHcmlkTGF5ZXI7XG4gIGV4cG9ydHMuSGFuZGxlciA9IEhhbmRsZXI7XG4gIGV4cG9ydHMuSWNvbiA9IEljb247XG4gIGV4cG9ydHMuSW1hZ2VPdmVybGF5ID0gSW1hZ2VPdmVybGF5O1xuICBleHBvcnRzLkxhdExuZyA9IExhdExuZztcbiAgZXhwb3J0cy5MYXRMbmdCb3VuZHMgPSBMYXRMbmdCb3VuZHM7XG4gIGV4cG9ydHMuTGF5ZXIgPSBMYXllcjtcbiAgZXhwb3J0cy5MYXllckdyb3VwID0gTGF5ZXJHcm91cDtcbiAgZXhwb3J0cy5MaW5lVXRpbCA9IExpbmVVdGlsO1xuICBleHBvcnRzLk1hcCA9IE1hcDtcbiAgZXhwb3J0cy5NYXJrZXIgPSBNYXJrZXI7XG4gIGV4cG9ydHMuTWl4aW4gPSBNaXhpbjtcbiAgZXhwb3J0cy5QYXRoID0gUGF0aDtcbiAgZXhwb3J0cy5Qb2ludCA9IFBvaW50O1xuICBleHBvcnRzLlBvbHlVdGlsID0gUG9seVV0aWw7XG4gIGV4cG9ydHMuUG9seWdvbiA9IFBvbHlnb247XG4gIGV4cG9ydHMuUG9seWxpbmUgPSBQb2x5bGluZTtcbiAgZXhwb3J0cy5Qb3B1cCA9IFBvcHVwO1xuICBleHBvcnRzLlBvc0FuaW1hdGlvbiA9IFBvc0FuaW1hdGlvbjtcbiAgZXhwb3J0cy5Qcm9qZWN0aW9uID0gaW5kZXg7XG4gIGV4cG9ydHMuUmVjdGFuZ2xlID0gUmVjdGFuZ2xlO1xuICBleHBvcnRzLlJlbmRlcmVyID0gUmVuZGVyZXI7XG4gIGV4cG9ydHMuU1ZHID0gU1ZHO1xuICBleHBvcnRzLlNWR092ZXJsYXkgPSBTVkdPdmVybGF5O1xuICBleHBvcnRzLlRpbGVMYXllciA9IFRpbGVMYXllcjtcbiAgZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDtcbiAgZXhwb3J0cy5UcmFuc2Zvcm1hdGlvbiA9IFRyYW5zZm9ybWF0aW9uO1xuICBleHBvcnRzLlV0aWwgPSBVdGlsO1xuICBleHBvcnRzLlZpZGVvT3ZlcmxheSA9IFZpZGVvT3ZlcmxheTtcbiAgZXhwb3J0cy5iaW5kID0gYmluZDtcbiAgZXhwb3J0cy5ib3VuZHMgPSB0b0JvdW5kcztcbiAgZXhwb3J0cy5jYW52YXMgPSBjYW52YXM7XG4gIGV4cG9ydHMuY2lyY2xlID0gY2lyY2xlO1xuICBleHBvcnRzLmNpcmNsZU1hcmtlciA9IGNpcmNsZU1hcmtlcjtcbiAgZXhwb3J0cy5jb250cm9sID0gY29udHJvbDtcbiAgZXhwb3J0cy5kaXZJY29uID0gZGl2SWNvbjtcbiAgZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG4gIGV4cG9ydHMuZmVhdHVyZUdyb3VwID0gZmVhdHVyZUdyb3VwO1xuICBleHBvcnRzLmdlb0pTT04gPSBnZW9KU09OO1xuICBleHBvcnRzLmdlb0pzb24gPSBnZW9Kc29uO1xuICBleHBvcnRzLmdyaWRMYXllciA9IGdyaWRMYXllcjtcbiAgZXhwb3J0cy5pY29uID0gaWNvbjtcbiAgZXhwb3J0cy5pbWFnZU92ZXJsYXkgPSBpbWFnZU92ZXJsYXk7XG4gIGV4cG9ydHMubGF0TG5nID0gdG9MYXRMbmc7XG4gIGV4cG9ydHMubGF0TG5nQm91bmRzID0gdG9MYXRMbmdCb3VuZHM7XG4gIGV4cG9ydHMubGF5ZXJHcm91cCA9IGxheWVyR3JvdXA7XG4gIGV4cG9ydHMubWFwID0gY3JlYXRlTWFwO1xuICBleHBvcnRzLm1hcmtlciA9IG1hcmtlcjtcbiAgZXhwb3J0cy5wb2ludCA9IHRvUG9pbnQ7XG4gIGV4cG9ydHMucG9seWdvbiA9IHBvbHlnb247XG4gIGV4cG9ydHMucG9seWxpbmUgPSBwb2x5bGluZTtcbiAgZXhwb3J0cy5wb3B1cCA9IHBvcHVwO1xuICBleHBvcnRzLnJlY3RhbmdsZSA9IHJlY3RhbmdsZTtcbiAgZXhwb3J0cy5zZXRPcHRpb25zID0gc2V0T3B0aW9ucztcbiAgZXhwb3J0cy5zdGFtcCA9IHN0YW1wO1xuICBleHBvcnRzLnN2ZyA9IHN2ZztcbiAgZXhwb3J0cy5zdmdPdmVybGF5ID0gc3ZnT3ZlcmxheTtcbiAgZXhwb3J0cy50aWxlTGF5ZXIgPSB0aWxlTGF5ZXI7XG4gIGV4cG9ydHMudG9vbHRpcCA9IHRvb2x0aXA7XG4gIGV4cG9ydHMudHJhbnNmb3JtYXRpb24gPSB0b1RyYW5zZm9ybWF0aW9uO1xuICBleHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICBleHBvcnRzLnZpZGVvT3ZlcmxheSA9IHZpZGVvT3ZlcmxheTtcblxuICB2YXIgb2xkTCA9IHdpbmRvdy5MO1xuICBleHBvcnRzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgXHR3aW5kb3cuTCA9IG9sZEw7XG4gIFx0cmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gQWx3YXlzIGV4cG9ydCB1cyB0byB3aW5kb3cgZ2xvYmFsIChzZWUgIzIzNjQpXG4gIHdpbmRvdy5MID0gZXhwb3J0cztcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGVhZmxldC1zcmMuanMubWFwXG4iLCIvKiohXG4qIEBsaWNlbnNlXG4qIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuKiBcbiogQ29weXJpZ2h0IChjKSAyMDE3IE3DpW5zIEJlY2ttYW4gLSB3d3cuc3BhdGlhbGlsbHVzaW9ucy5jb21cbiogXG4qIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4qIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4qIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4qIFxuKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiogXG4qIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4qIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4qIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4qIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4qIFNPRlRXQVJFLlxuKiBcbiogTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgYXQgd3d3LnNwYXRpYWxpbGx1c2lvbnMuY29tIFxuKi9cbiFmdW5jdGlvbihJLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFwibWlsc3ltYm9sXCIsdCk6SS5tcz10KCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17QmxhY2s6e0NpdmlsaWFuOlwiYmxhY2tcIixGcmllbmQ6XCJibGFja1wiLEhvc3RpbGU6XCJibGFja1wiLE5ldXRyYWw6XCJibGFja1wiLFVua25vd246XCJibGFja1wifSxEYXJrOntDaXZpbGlhbjpcInJnYig4MCwwLDgwKVwiLEZyaWVuZDpcInJnYigwLDEwNywxNDApXCIsSG9zdGlsZTpcInJnYigyMDAsMCwwKVwiLE5ldXRyYWw6XCJyZ2IoMCwxNjAsMClcIixVbmtub3duOlwicmdiKDIyNSwyMjAsMClcIn0sRnJhbWVDb2xvcjp7Q2l2aWxpYW46XCJyZ2IoMjU1LDAsMjU1KVwiLEZyaWVuZDpcInJnYigwLCAyNTUsIDI1NSlcIixIb3N0aWxlOlwicmdiKDI1NSwgMCwgMClcIixOZXV0cmFsOlwicmdiKDAsIDI1NSwgMClcIixVbmtub3duOlwicmdiKDI1NSwgMjU1LCAwKVwifSxJY29uQ29sb3I6e0NpdmlsaWFuOlwicmdiKDI1NSwwLDI1NSlcIixGcmllbmQ6XCJyZ2IoMCwgMjU1LCAyNTUpXCIsSG9zdGlsZTpcInJnYigyNTUsIDAsIDApXCIsTmV1dHJhbDpcInJnYigwLCAyNTUsIDApXCIsVW5rbm93bjpcInJnYigyNTUsIDI1NSwgMClcIn0sTGlnaHQ6e0NpdmlsaWFuOlwicmdiKDI1NSwxNjEsMjU1KVwiLEZyaWVuZDpcInJnYigxMjgsMjI0LDI1NSlcIixIb3N0aWxlOlwicmdiKDI1NSwxMjgsMTI4KVwiLE5ldXRyYWw6XCJyZ2IoMTcwLDI1NSwxNzApXCIsVW5rbm93bjpcInJnYigyNTUsMjU1LDEyOClcIn0sTWVkaXVtOntDaXZpbGlhbjpcInJnYigxMjgsMCwxMjgpXCIsRnJpZW5kOlwicmdiKDAsMTY4LDIyMClcIixIb3N0aWxlOlwicmdiKDI1NSw0OCw0OSlcIixOZXV0cmFsOlwicmdiKDAsMjI2LDExMClcIixVbmtub3duOlwicmdiKDI1NSwyNTUsMClcIn0sTm9uZTp7Q2l2aWxpYW46ITEsRnJpZW5kOiExLEhvc3RpbGU6ITEsTmV1dHJhbDohMSxVbmtub3duOiExfSxPZmZXaGl0ZTp7Q2l2aWxpYW46XCJyZ2IoMjM5LCAyMzksIDIzOSlcIixGcmllbmQ6XCJyZ2IoMjM5LCAyMzksIDIzOSlcIixIb3N0aWxlOlwicmdiKDIzOSwgMjM5LCAyMzkpXCIsTmV1dHJhbDpcInJnYigyMzksIDIzOSwgMjM5KVwiLFVua25vd246XCJyZ2IoMjM5LCAyMzksIDIzOSlcIn0sV2hpdGU6e0NpdmlsaWFuOlwid2hpdGVcIixGcmllbmQ6XCJ3aGl0ZVwiLEhvc3RpbGU6XCJ3aGl0ZVwiLE5ldXRyYWw6XCJ3aGl0ZVwiLFVua25vd246XCJ3aGl0ZVwifX07ZnVuY3Rpb24gRShJKXt2YXIgdCxFPVtdLFI9W10sZT10aGlzLmNvbG9ycy5mcmFtZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dO2lmKCF0aGlzLm1ldGFkYXRhLmZyYW1lJiZ0aGlzLnN0eWxlLmljb258fHZvaWQgMD09PXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcudHlwZSlyZXR1cm57cHJlOkUscG9zdDpSLGJib3g6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveH07dmFyIEEsQz17dHlwZTp0aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnR5cGV9O3N3aXRjaChDLnR5cGUpe2Nhc2VcInBhdGhcIjpDLmQ9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy5kO2JyZWFrO2Nhc2VcImNpcmNsZVwiOkMuY3g9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy5jeCxDLmN5PXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuY3ksQy5yPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5Lmcucn0oQy5maWxsPXRoaXMuY29sb3JzLmZpbGxDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxDLmZpbGxvcGFjaXR5PXRoaXMuc3R5bGUuZmlsbE9wYWNpdHksQy5zdHJva2U9ZSxDLnN0cm9rZXdpZHRoPTEwPD10aGlzLnN0eWxlLnNpemU/dGhpcy5zdHlsZS5zdHJva2VXaWR0aDoxMCx0aGlzLnN0eWxlLmZyYW1lJiYwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSYmKFwicGF0aFwiPT1DLnR5cGUmJnRoaXMubWV0YWRhdGEuZmlsbCYmIXRoaXMuc3R5bGUubW9ub0NvbG9yPygoQT17dHlwZTp0aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnR5cGV9KS5kPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuZCtcIiBaXCIsQS5zdHJva2V3aWR0aD0xMDw9dGhpcy5zdHlsZS5zaXplP3RoaXMuc3R5bGUuc3Ryb2tlV2lkdGg6MTApOkE9QyxFLnB1c2goSS5vdXRsaW5lKEEsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSk7aWYoXCJcIj09dGhpcy5zdHlsZS5tb25vQ29sb3ImJnRoaXMuc3R5bGUuZmlsbHx8IXRoaXMubWV0YWRhdGEubm90cHJlc2VudHx8KEMuc3Ryb2tlZGFzaGFycmF5PXRoaXMubWV0YWRhdGEubm90cHJlc2VudCksUi5wdXNoKEMpLHRoaXMubWV0YWRhdGEuc3BhY2UmJih0PXtGcmllbmQ6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTSAxMDAsMzAgQyA5MCwzMCA4MCwzNSA2OC42NTYyNSw1MCBsIDYyLjY4NzUsMCBDIDEyMCwzNSAxMTAsMzAgMTAwLDMwXCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTTY3LDUwIEwxMDAsMjAgMTMzLDUwIHpcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJNNDUsNTAgbDAsLTIwIDExMCwwIDAsMjAgelwifSxVbmtub3duOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIk0gMTAwIDIyLjUgQyA4NSAyMi41IDcwIDMxLjY2OTIxMSA2NiA1MCBMIDEzNCA1MCBDIDEzMCAzMS42NjkyMDQgMTE1IDIyLjUgMTAwIDIyLjUgelwifX0sUi5wdXNoKHRbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0pKSx0aGlzLm1ldGFkYXRhLmFjdGl2aXR5JiYodD17RnJpZW5kOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIm0gMTYwLDEzNSAwLDE1IDE1LDAgMCwtMTUgeiBtIC0xMzUsMCAxNSwwIDAsMTUgLTE1LDAgeiBtIDEzNSwtODUgMCwxNSAxNSwwIDAsLTE1IHogbSAtMTM1LDAgMTUsMCAwLDE1IC0xNSwwIHpcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJNIDEwMCAyOCBMIDg5LjQwNjI1IDM4LjU5Mzc1IEwgMTAwIDQ5LjIxODc1IEwgMTEwLjU5Mzc1IDM4LjU5Mzc1IEwgMTAwIDI4IHogTSAzOC42ODc1IDg5LjMxMjUgTCAyOC4wNjI1IDk5LjkzNzUgTCAzOC42ODc1IDExMC41MzEyNSBMIDQ5LjI4MTI1IDk5LjkzNzUgTCAzOC42ODc1IDg5LjMxMjUgeiBNIDE2MS40MDYyNSA4OS40MDYyNSBMIDE1MC43ODEyNSAxMDAgTCAxNjEuNDA2MjUgMTEwLjU5Mzc1IEwgMTcyIDEwMCBMIDE2MS40MDYyNSA4OS40MDYyNSB6IE0gOTkuOTM3NSAxNTAuNzE4NzUgTCA4OS4zMTI1IDE2MS4zMTI1IEwgOTkuOTM3NSAxNzEuOTM3NSBMIDExMC41MzEyNSAxNjEuMzEyNSBMIDk5LjkzNzUgMTUwLjcxODc1XCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwibSAxNDAsMTQwIDE1LDAgMCwxNSAtMTUsMCB6IG0gLTgwLDAgMCwxNSAtMTUsMCAwLC0xNSB6IG0gODAsLTgwIDAsLTE1IDE1LDAgMCwxNSB6IG0gLTgwLDAgLTE1LDAgMCwtMTUgMTUsMCB6XCJ9LFVua25vd246e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTSAxMDcuOTY4NzUgMzEuNDY4NzUgTCA5Mi4wMzEyNSAzMS43MTg3NSBMIDkyLjAzMTI1IDQ2LjQzNzUgTCAxMDcuNzE4NzUgNDYuNDM3NSBMIDEwNy45Njg3NSAzMS40Njg3NSB6IE0gNDcuMDMxMjUgOTIuNSBMIDMxLjA5Mzc1IDkyLjc1IEwgMzEuMDkzNzUgMTA3LjUgTCA0Ni43ODEyNSAxMDcuNSBMIDQ3LjAzMTI1IDkyLjUgeiBNIDE2OC40Mzc1IDkyLjUgTCAxNTIuNSA5Mi43NSBMIDE1Mi41IDEwNy41IEwgMTY4LjE4NzUgMTA3LjUgTCAxNjguNDM3NSA5Mi41IHogTSAxMDcuOTY4NzUgMTUzLjU2MjUgTCA5Mi4wMzEyNSAxNTMuODEyNSBMIDkyLjAzMTI1IDE2OC41MzEyNSBMIDEwNy43MTg3NSAxNjguNTMxMjUgTCAxMDcuOTY4NzUgMTUzLjU2MjUgelwifX0sUi5wdXNoKHRbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0pKSx0aGlzLm1ldGFkYXRhLmN5YmVyc3BhY2UmJih0PXtGcmllbmQ6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwibSAxMzUsMTUwIDQwLC00MCAwLDQwIHpcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJtIDE1MCw3OCAwLDQ0IDIyLC0yMiB6XCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwibSAxMTUsMTU1IDQwLC00MCAwLDQwIHpcIn0sVW5rbm93bjp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJNIDE1MCA2NS43IEwgMTUwIDEzNCBDIDE3NiAxMjMgMTc2IDc3LjIgMTUwIDY1LjcgelwifX0sUi5wdXNoKHRbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0pKSx0aGlzLnN0eWxlLmZpbGwmJnRoaXMuc3R5bGUuZnJhbWUmJnRoaXMubWV0YWRhdGEubm90cHJlc2VudCYmIXRoaXMubWV0YWRhdGEudW5mcmFtZWQpe3N3aXRjaCgoQz17dHlwZTp0aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnR5cGV9KS50eXBlKXtjYXNlXCJwYXRoXCI6Qy5kPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuZDticmVhaztjYXNlXCJjaXJjbGVcIjpDLmN4PXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuY3gsQy5jeT10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLmN5LEMucj10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnJ9Qy5maWxsPSExLEMuc3Ryb2tlPXRoaXMuY29sb3JzLndoaXRlW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dLEMuc3Ryb2tld2lkdGg9cGFyc2VGbG9hdCh0aGlzLnN0eWxlLnN0cm9rZVdpZHRoKSsxLEMuc3Ryb2tlZGFzaGFycmF5PXRoaXMubWV0YWRhdGEubm90cHJlc2VudCxSLnB1c2goQyl9cmV0dXJue3ByZTpFLHBvc3Q6UixiYm94OnRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3h9fWZ1bmN0aW9uIFIoSSl7dmFyIHQsRSxSPVtdLGU9W10sQT1uZXcgSS5CQm94KHt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSksQz1bXSxUPVtdLFM9W10sTj1bXTtpZih0aGlzLnN0eWxlLmljb24pe3ZhciBPPXRoaXMuY29sb3JzLmZpbGxDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxHPXRoaXMuY29sb3JzLmZpbGxDb2xvci5OZXV0cmFsO0U9dGhpcy5jb2xvcnMuaWNvbkNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dO3ZhciBvPXRoaXMuY29sb3JzLmljb25GaWxsQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sTT10aGlzLmNvbG9ycy5ub25lW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dLGk9dGhpcy5jb2xvcnMuYmxhY2tbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sTD10aGlzLmNvbG9ycy53aGl0ZVt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxzPSh0aGlzLm1ldGFkYXRhLlNURDI1MjU/XCIyNTI1XCI6XCJBUFA2XCIpK1wiLFwiK3RoaXMubWV0YWRhdGEuZGltZW5zaW9uK3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24rdGhpcy5tZXRhZGF0YS5ub3RwcmVzZW50K3RoaXMubWV0YWRhdGEubnVtYmVyU0lEQytcIixmcmFtZTpcIit0aGlzLnN0eWxlLmZyYW1lK1wiLGFsdGVybmF0ZU1lZGFsOlwiK3RoaXMuc3R5bGUuYWx0ZXJuYXRlTWVkYWwrXCIsY29sb3JzOntmaWxsY29sb3I6XCIrTytcIixuZXV0cmFsQ29sb3JcIitHK1wiLGljb25Db2xvcjpcIitFK1wiLGljb25GaWxsQ29sb3I6XCIrbytcIixub25lOlwiK00rXCIsYmxhY2s6XCIraStcIix3aGl0ZTpcIitMK1wifVwiO2lmKEM9SS5faWNvbkNhY2hlLmhhc093blByb3BlcnR5KHMpP0kuX2ljb25DYWNoZVtzXS5pY29uUGFydHM6KEkuX2ljb25DYWNoZVtzXT17fSxJLl9pY29uQ2FjaGVbc10uaWNvblBhcnRzPUkuX2dldEljb25QYXJ0cyh0aGlzLm1ldGFkYXRhLHRoaXMuY29sb3JzLHRoaXMubWV0YWRhdGEuU1REMjUyNSx0aGlzLnN0eWxlLm1vbm9Db2xvcix0aGlzLnN0eWxlLmFsdGVybmF0ZU1lZGFsKSksdGhpcy5tZXRhZGF0YS5udW1iZXJTSURDfHwoLTEhPVtcIldNR1gtLVwiLFwiV01NWC0tXCIsXCJXTUZYLS1cIixcIldNWC0tLVwiLFwiV01TWC0tXCJdLmluZGV4T2YodGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkKSYmKEEueTE9MTAsXCJVbmtub3duXCIhPXRoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24mJihBLngyPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gueDIrMjApKSxJLl9pY29uQ2FjaGVbc10uaGFzT3duUHJvcGVydHkoXCJsZXR0ZXJTSURDXCIpPyh0PUkuX2ljb25DYWNoZVtzXS5sZXR0ZXJTSURDLmljb25zLE49SS5faWNvbkNhY2hlW3NdLmxldHRlclNJREMuYmJveCk6XCJmdW5jdGlvblwiPT10eXBlb2YgSS5fZ2V0SWNvbnMubGV0dGVyPyhJLl9pY29uQ2FjaGVbc10ubGV0dGVyU0lEQz1JLl9nZXRJY29ucy5sZXR0ZXIoSSxDLHRoaXMubWV0YWRhdGEuU1REMjUyNSksdD1JLl9pY29uQ2FjaGVbc10ubGV0dGVyU0lEQy5pY29ucyxOPUkuX2ljb25DYWNoZVtzXS5sZXR0ZXJTSURDLmJib3gpOmNvbnNvbGUud2FybihcIm1zLl9nZXRJY29ucy5sZXR0ZXIoKSBpcyBub3QgcHJlc2VudCwgeW91IHdpbGwgbmVlZCB0byBsb2FkIGZ1bmN0aW9uYWxpdHkgZm9yIGxldHRlciBiYXNlZCBTSURDc1wiKSksdGhpcy5tZXRhZGF0YS5udW1iZXJTSURDKXt2YXIgbj1TdHJpbmcodGhpcy5vcHRpb25zLnNpZGMpLnN1YnN0cig0LDIpO0kuX2ljb25DYWNoZVtzXS5oYXNPd25Qcm9wZXJ0eShcIm51bWJlclNJRENcIik/SS5faWNvbkNhY2hlW3NdLm51bWJlclNJREMuc3ltYm9sU2V0Lmhhc093blByb3BlcnR5KG4pPyh0PUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5pY29ucyxUPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMSxTPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMixOPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5iYm94KTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBJLl9nZXRJY29ucy5udW1iZXI/KEkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXT1JLl9nZXRJY29ucy5udW1iZXIoSSxuLEMsdGhpcy5tZXRhZGF0YS5TVEQyNTI1KSx0PUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5pY29ucyxUPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMSxTPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMixOPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5iYm94KTpjb25zb2xlLndhcm4oXCJtcy5fZ2V0SWNvbnMubnVtYmVyKCkgaXMgbm90IHByZXNlbnQsIHlvdSB3aWxsIG5lZWQgdG8gbG9hZCBmdW5jdGlvbmFsaXR5IGZvciBudW1iZXIgYmFzZWQgU0lEQ3NcIik6KEkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDPXt9LEkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldD17fSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBJLl9nZXRJY29ucy5udW1iZXI/KEkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXT1JLl9nZXRJY29ucy5udW1iZXIoSSxuLEMsdGhpcy5tZXRhZGF0YS5TVEQyNTI1KSx0PUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5pY29ucyxUPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMSxTPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5tMixOPUkuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldFtuXS5iYm94KTpjb25zb2xlLndhcm4oXCJtcy5fZ2V0SWNvbnMubnVtYmVyKCkgaXMgbm90IHByZXNlbnQsIHlvdSB3aWxsIG5lZWQgdG8gbG9hZCBmdW5jdGlvbmFsaXR5IGZvciBudW1iZXIgYmFzZWQgU0lEQ3NcIikpfXZhciBhPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpFPXRoaXMuY29sb3JzLmljb25Db2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxkOlwibSA5NC44MjA2LDc4LjEzNzIgYyAtMC40NTQyLDYuODk4MyAwLjY1MzIsMTQuMzIzIDUuMzQyNCwxOS42OTg1IDQuNTA5LDUuNjkzMyAxMS4zMDksOS4zNTczIDE0Ljk4LDE1LjcyODMgMy4xNjQsNi4zNTMgLTAuMDksMTQuMjQ1IC01LjkwMywxNy44MjIgLTcuMjY4LDQuODE3IC0xOC42MjE5LDIuNzg1IC0yMi43MzI4LC01LjI0OSAtMS41NTExLC0yLjc5NiAtMi4zODI4LC01LjkzMSAtMi44ODE1LC05LjA3MSAtMy41MDQ4LDAuNDE2IC03LjAwOTMsMC44MzUgLTEwLjUxNDIsMS4yNTIgMC44MjM5LDguNTU1IDUuMjI2MywxNy4yODcgMTMuMjU0NCwyMS4xMTEgNy44MjMyLDMuNzM2IDE3LjE4OTEsMy43ODMgMjUuMzI5MSwxLjA1MiA4Ljg0NiwtMy4xMDMgMTUuNzM3LC0xMS45NTggMTUuMTcxLC0yMS41MzcgMC4wNSwtNi45NTEgLTQuMjcyLC0xMi44NSAtOS4xMzQsLTE3LjQwMyAtNC41MjYsLTQuNjk0OSAtMTEuMDQ4LC04LjM4NjIgLTEyLjQwMSwtMTUuMjc0OCAtMS4yMTUsLTIuMzYzOSAtMC44ODksLTguMTI5IC0wLjg4OSwtOC4xMjkgeiBtIC0wLjYyNTMsLTIwLjUxNzcgMCwxMS42NTA5IDExLjY1MjcsMCAwLC0xMS42NTA5IHpcIn1dO2lmKHRoaXMubWV0YWRhdGEubnVtYmVyU0lEQyl7dmFyIGw9dFt0aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDAsNildO2lmKHZvaWQgMD09PWwmJjk1PD10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDQsMikmJihsPXRbdGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDQpK1wiMDBcIl0pLHZvaWQgMD09PWwpXCIwMDAwMDBcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpJiZcIlwiIT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDAsNikmJihlLnB1c2goYSksdGhpcy52YWxpZEljb249ITEpO2Vsc2V7dmFyIHI9TnVtYmVyKHRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoMCw2KSk7dGhpcy5tZXRhZGF0YS5kaXNtb3VudGVkJiYxMTAzMDE8PXImJnI8PTExMDQwMyYmKFwiMDBcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig2LDIpJiZcIjAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoOCwyKSYmKGw9W0kuX3NjYWxlKC41LGwpXSksXCIwMFwiPT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDYsMikmJlwiMDBcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig4LDIpJiYobD1bSS5fdHJhbnNsYXRlKDAsLTEwLEkuX3NjYWxlKC43LGwpKV0pLFwiMDBcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig2LDIpJiZcIjAwXCI9PXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoOCwyKSYmKGw9W0kuX3RyYW5zbGF0ZSgwLDEwLEkuX3NjYWxlKC43LGwpKV0pKSxlLnB1c2gobCl9aWYoTi5oYXNPd25Qcm9wZXJ0eSh0aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDAsNikpJiYoQT1uZXcgSS5CQm94KE5bdGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpXSkpLFwiOTVcIj09dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig0LDIpJiZlLnB1c2goQ1tcIkdSLklDLkZGLkhFQURRVUFSVEVSUyBPUiBIRUFEUVVBUlRFUlMgRUxFTUVOVFwiXSksXCI5NlwiPT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDQsMikmJmUucHVzaChDW1wiR1IuSUMuRkYuRElWSVNJT04gQU5EIEJFTE9XIFNVUFBPUlRcIl0pLFwiOTdcIj09dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig0LDIpJiZlLnB1c2goQ1tcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0pLFwiOThcIj09dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig0LDIpJiZlLnB1c2goQ1tcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSksXCIwMFwiIT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDYsMikpe3ZhciBQPVRbdGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig2LDIpXTt2b2lkIDA9PT1QP3RoaXMudmFsaWRJY29uPSExOmUucHVzaChQKX1pZihcIjAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoOCwyKSl7dmFyIHk9U1t0aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDgsMildO3ZvaWQgMD09PXk/dGhpcy52YWxpZEljb249ITE6ZS5wdXNoKHkpfX1lbHNle3ZhciBjPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigwLDEpK1wiLVwiK3RoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigyLDEpK1wiLVwiK3RoaXMub3B0aW9ucy5zaWRjLnN1YnN0cig0LDYpO3QuaGFzT3duUHJvcGVydHkoYyk/ZS5wdXNoKHRbY10pOlwiLS0tLS0tXCIhPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cig0LDYpJiZcIlwiIT10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCw2KSYmKGUucHVzaChhKSx0aGlzLnZhbGlkSWNvbj0hMSksTltjXSYmKEE9bmV3IEkuQkJveChOW2NdKSl9fXJldHVybiB0aGlzLnN0eWxlLmZyYW1lJiZ0aGlzLm1ldGFkYXRhLmZpbGwmJiF0aGlzLnN0eWxlLm1vbm9Db2xvciYmIXRoaXMubWV0YWRhdGEuY29udHJvbE1lYXN1cmV8fDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJlIucHVzaChJLm91dGxpbmUoZSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLHtwcmU6Uixwb3N0OmUsYmJveDpBfX1mdW5jdGlvbiBlKEkpe3ZhciB0LEU9W10sUj1bXSxlPW5ldyBJLkJCb3godGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveCksQT10aGlzLnN0eWxlLmZyYW1lQ29sb3I/dGhpcy5zdHlsZS5mcmFtZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuY29sb3JzLmljb25Db2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxDPW5ldyBJLkJCb3gsVD1OdW1iZXIodGhpcy5zdHlsZS5ocVN0YWZmTGVuZ3RofHxJLl9ocVN0YWZmTGVuZ3RoKTtpZih0aGlzLm1ldGFkYXRhLmhlYWRxdWFydGVycyYmMDxUKXt2YXIgUz0xMDA7LTE8W1wiQWlyRnJpZW5kXCIsXCJBaXJOZXV0cmFsXCIsXCJHcm91bmRGcmllbmRcIixcIkdyb3VuZE5ldXRyYWxcIixcIlNlYU5ldXRyYWxcIixcIlN1YnN1cmZhY2VOZXV0cmFsXCJdLmluZGV4T2YodGhpcy5tZXRhZGF0YS5kaW1lbnNpb24rdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbikmJihTPWUueTIpLHRoaXMubWV0YWRhdGEuZGltZW5zaW9uVHlwZSt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uVHlwZT09XCJTdWJzdXJmYWNlRnJpZW5kXCImJihTPWUueTEpLHQ9e3R5cGU6XCJwYXRoXCIsZDpcIk1cIitlLngxK1wiLFwiK1MrXCIgTFwiK2UueDErXCIsXCIrKGUueTIrVCl9LDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJkUucHVzaChJLm91dGxpbmUodCx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLFIucHVzaCh0KSxDLnkyPWUueTIrVH1pZih0aGlzLm1ldGFkYXRhLnRhc2tGb3JjZSl7dmFyIE49e1wiQ29ycHMvTUVGXCI6MTEwLEFybXk6MTQ1LFwiQXJteSBHcm91cC9mcm9udFwiOjE4MCxcIlJlZ2lvbi9UaGVhdGVyXCI6MjE1fTt0PXt0eXBlOlwicGF0aFwiLGQ6XCJNXCIrKDEwMC0oTj1OW3RoaXMubWV0YWRhdGEuZWNoZWxvbl18fDkwKS8yKStcIixcIitlLnkxK1wiIExcIisoMTAwLU4vMikrXCIsXCIrKGUueTEtNDApK1wiIFwiKygxMDArTi8yKStcIixcIisoZS55MS00MCkrXCIgXCIrKDEwMCtOLzIpK1wiLFwiK2UueTF9LDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJkUucHVzaChJLm91dGxpbmUodCx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLFIucHVzaCh0KSxDLngxPU1hdGgubWluKGUueDEsMTAwLU4vMiksQy54Mj1NYXRoLm1heChlLngyLDEwMCtOLzIpLEMueTE9ZS55MS00MH1pZih0aGlzLm1ldGFkYXRhLmluc3RhbGxhdGlvbil7dmFyIE89MDstMTxbXCJBaXJIb3N0aWxlXCIsXCJHcm91bmRIb3N0aWxlXCIsXCJTZWFIb3N0aWxlXCJdLmluZGV4T2YodGhpcy5tZXRhZGF0YS5kaW1lbnNpb24rdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbikmJihPPTE0KSwtMTxbXCJBaXJVbmtub3duXCIsXCJHcm91bmRVbmtub3duXCIsXCJTZWFVbmtub3duXCIsXCJBaXJGcmllbmRcIixcIlNlYUZyaWVuZFwiXS5pbmRleE9mKHRoaXMubWV0YWRhdGEuZGltZW5zaW9uK3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24pJiYoTz0yKSx0PXt0eXBlOlwicGF0aFwiLGZpbGw6QSxkOlwiTTg1LFwiKyhlLnkxK08tdGhpcy5zdHlsZS5zdHJva2VXaWR0aC8yKStcIiA4NSxcIisoZS55MS0xMCkrXCIgMTE1LFwiKyhlLnkxLTEwKStcIiAxMTUsXCIrKGUueTErTy10aGlzLnN0eWxlLnN0cm9rZVdpZHRoLzIpK1wiIDEwMCxcIisoZS55MS10aGlzLnN0eWxlLnN0cm9rZVdpZHRoKStcIiBaXCJ9LDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJkUucHVzaChJLm91dGxpbmUodCx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLFIucHVzaCh0KSxDLm1lcmdlKHt5MTplLnkxLTEwfSl9aWYodGhpcy5tZXRhZGF0YS5mZWludER1bW15KXt2YXIgRz1lLnkxLTAtZS53aWR0aCgpLzI7dD17dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6SS5fZGFzaEFycmF5cy5mZWludER1bW15LGQ6XCJNMTAwLFwiK0crXCIgTFwiK2UueDErXCIsXCIrKGUueTEtMCkrXCIgTTEwMCxcIitHK1wiIExcIitlLngyK1wiLFwiKyhlLnkxLTApfSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHQsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSxSLnB1c2godCksQy5tZXJnZSh7eTE6R30pfWlmKHRoaXMubWV0YWRhdGEuZWNoZWxvbil7dmFyIG89dGhpcy5tZXRhZGF0YS5pbnN0YWxsYXRpb24/MTU6MCxNPXtcIlRlYW0vQ3Jld1wiOntnOlt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTplLnkxLTIwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGQ6XCJNODAsXCIrKGUueTEtMTApK1wiTDEyMCxcIisoZS55MS0zMCl9XSxiYm94Ont5MTplLnkxLTQwLW99fSxTcXVhZDp7Zzpbe3R5cGU6XCJjaXJjbGVcIixmaWxsOkEsY3g6MTAwLGN5OmUueTEtMjAscjo3LjV9XSxiYm94Ont5MTplLnkxLTIwLTcuNS1vfX0sU2VjdGlvbjp7Zzpbe3R5cGU6XCJjaXJjbGVcIixmaWxsOkEsY3g6MTE1LGN5OmUueTEtMjAscjo3LjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4Ojg1LGN5OmUueTEtMjAscjo3LjV9XSxiYm94Ont5MTplLnkxLTIwLTcuNS1vfX0sXCJQbGF0b29uL2RldGFjaG1lbnRcIjp7Zzpbe3R5cGU6XCJjaXJjbGVcIixmaWxsOkEsY3g6MTAwLGN5OmUueTEtMjAscjo3LjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4OjcwLGN5OmUueTEtMjAscjo3LjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4OjEzMCxjeTplLnkxLTIwLHI6Ny41fV0sYmJveDp7eTE6ZS55MS0yMC03LjUtb319LFwiQ29tcGFueS9iYXR0ZXJ5L3Ryb29wXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLFwiKyhlLnkxLTEwKStcIkwxMDAsXCIrKGUueTEtMzUpfV0sYmJveDp7eTE6ZS55MS00MC1vfX0sXCJCYXR0YWxpb24vc3F1YWRyb25cIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk05MCxcIisoZS55MS0xMCkrXCJMOTAsXCIrKGUueTEtMzUpfSx7dHlwZTpcInBhdGhcIixkOlwiTTExMCxcIisoZS55MS0xMCkrXCJMMTEwLFwiKyhlLnkxLTM1KX1dLGJib3g6e3kxOmUueTEtNDAtb319LFwiUmVnaW1lbnQvZ3JvdXBcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsXCIrKGUueTEtMTApK1wiTDEwMCxcIisoZS55MS0zNSl9LHt0eXBlOlwicGF0aFwiLGQ6XCJNMTIwLFwiKyhlLnkxLTEwKStcIkwxMjAsXCIrKGUueTEtMzUpfSx7dHlwZTpcInBhdGhcIixkOlwiTTgwLFwiKyhlLnkxLTEwKStcIkw4MCxcIisoZS55MS0zNSl9XSxiYm94Ont5MTplLnkxLTQwLW99fSxCcmlnYWRlOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTg3LjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtb319LERpdmlzaW9uOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTcwLFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgTTEwNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNVwifV0sYmJveDp7eTE6ZS55MS0xNS0yNS1vLHgxOjcwLHgyOjEzMH19LFwiQ29ycHMvTUVGXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNNTIuNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgICBNODcuNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgICBNMTIyLjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MTo1Mi41LHgyOjE0Ny41fX0sQXJteTp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0zNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE03MCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE0xMDUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTE0MCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNVwifV0sYmJveDp7eTE6ZS55MS0xNS0yNS1vLHgxOjM1LHgyOjE2NX19LFwiQXJteSBHcm91cC9mcm9udFwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTE3LjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTUyLjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTg3LjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTEyMi41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgICAgIE0xNTcuNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNVwifV0sYmJveDp7eTE6ZS55MS0xNS0yNS1vLHgxOjE3LjUseDI6MTgyLjV9fSxcIlJlZ2lvbi9UaGVhdGVyXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNMCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE0zNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE03MCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE0xMDUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTE0MCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgICAgTTE3NSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNVwifV0sYmJveDp7eTE6ZS55MS0xNS0yNS1vLHgxOjAseDI6MjAwfX0sQ29tbWFuZDp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk03MCxcIisoZS55MS0yMi41KStcIiBsMjUsMCBtLTEyLjUsMTIuNSBsMCwtMjUgICBNMTA1LFwiKyhlLnkxLTIyLjUpK1wiIGwyNSwwIG0tMTIuNSwxMi41IGwwLC0yNVwifV0sYmJveDp7eTE6ZS55MS0xNS0yNS1vLHgxOjcwLHgyOjEzMH19fTtNLmhhc093blByb3BlcnR5KHRoaXMubWV0YWRhdGEuZWNoZWxvbikmJih0PU1bdGhpcy5tZXRhZGF0YS5lY2hlbG9uXS5nLDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJkUucHVzaChJLm91dGxpbmUoe3R5cGU6XCJ0cmFuc2xhdGVcIix4OjAseTotbyxkcmF3OnR9LHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSksUi5wdXNoKHt0eXBlOlwidHJhbnNsYXRlXCIseDowLHk6LW8sZHJhdzp0fSksQy5tZXJnZShNW3RoaXMubWV0YWRhdGEuZWNoZWxvbl0uYmJveCkpfWlmKHRoaXMubWV0YWRhdGEubW9iaWxpdHkpe3RoaXMuc3R5bGUuZnJhbWV8fChlLnkyPXRoaXMuYmJveC55MiksXCJOZXV0cmFsXCI9PXRoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24mJihcIlRvd2VkXCIhPXRoaXMubWV0YWRhdGEubW9iaWxpdHkmJlwiU2hvcnQgdG93ZWQgYXJyYXlcIiE9dGhpcy5tZXRhZGF0YS5tb2JpbGl0eSYmXCJMb25nIHRvd2VkIEFycmF5XCIhPXRoaXMubWV0YWRhdGEubW9iaWxpdHl8fChlLnkyKz04KSxcIk92ZXIgc25vdyAocHJpbWUgbW92ZXIpXCIhPXRoaXMubWV0YWRhdGEubW9iaWxpdHkmJlwiU2xlZFwiIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5fHwoZS55Mis9MTMpKTt2YXIgaT17XCJXaGVlbGVkIGxpbWl0ZWQgY3Jvc3MgY291bnRyeVwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTSA1MywxIGwgOTQsMFwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjU4LGN5Ojgscjo4fSx7dHlwZTpcImNpcmNsZVwiLGN4OjE0MixjeTo4LHI6OH1dLGJib3g6e3kyOmUueTIrMTZ9fSxcIldoZWVsZWQgY3Jvc3MgY291bnRyeVwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTSA1MywxIGwgOTQsMFwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjU4LGN5Ojgscjo4fSx7dHlwZTpcImNpcmNsZVwiLGN4OjE0MixjeTo4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6OCxyOjh9XSxiYm94Ont5MjplLnkyKzE2fX0sVHJhY2tlZDp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTMsMSBsIDEwMCwwIGMxNSwwIDE1LDE1IDAsMTUgbCAtMTAwLDAgYy0xNSwwIC0xNSwtMTUgMCwtMTVcIn1dLGJib3g6e3kyOmUueTIrMTgseDE6NDIseDI6MTY4fX0sXCJXaGVlbGVkIGFuZCB0cmFja2VkIGNvbWJpbmF0aW9uXCI6e2c6W3t0eXBlOlwiY2lyY2xlXCIsY3g6NTgsY3k6OCxyOjh9LHt0eXBlOlwicGF0aFwiLGQ6XCJNIDgzLDEgbCA3MCwwIGMxNSwwIDE1LDE1IDAsMTUgbCAtNzAsMCBjLTE1LDAgLTE1LC0xNSAwLC0xNVwifV0sYmJveDp7eTI6ZS55MisxNix4MjoxNjh9fSxUb3dlZDp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNjMsMSBsIDc0LDBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo1OCxjeTozLHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDoxNDIsY3k6MyxyOjh9XSxiYm94Ont5MjplLnkyKzEwfX0sUmFpbDp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTMsMSBsIDk2LDBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo1OCxjeTo4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDo3MyxjeTo4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDoxMjcsY3k6OCxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTQyLGN5Ojgscjo4fV0sYmJveDp7eTI6ZS55MisxNn19LFwiT3ZlciBzbm93IChwcmltZSBtb3ZlcilcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTAsLTkgbDEwLDEwIDkwLDBcIn1dLGJib3g6e3kyOmUueTIrOX19LFNsZWQ6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDE0NSwtMTIgIGMxNSwwIDE1LDE1IDAsMTUgbCAtOTAsMCBjLTE1LDAgLTE1LC0xNSAwLC0xNVwifV0sYmJveDp7eTI6ZS55MisxNSx4MTo0Mix4MjoxNjh9fSxcIlBhY2sgYW5pbWFsc1wiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTSA4MCwyMCBsIDEwLC0yMCAxMCwyMCAxMCwtMjAgMTAsMjBcIn1dLGJib3g6e3kyOmUueTIrMjB9fSxCYXJnZTp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTAsMSBsIDEwMCwwIGMwLDEwIC0xMDAsMTAgLTEwMCwwXCJ9XSxiYm94Ont5MjplLnkyKzEwfX0sQW1waGliaW91czp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNjUsMTAgYyAwLC0xMCAxMCwtMTAgMTAsMCAwLDEwIDEwLDEwIDEwLDBcXHQwLC0xMCAxMCwtMTAgMTAsMCAwLDEwIDEwLDEwIDEwLDBcXHQwLC0xMCAxMCwtMTAgMTAsMCAwLDEwIDEwLDEwIDEwLDBcXHQwLC0xMCAxMCwtMTAgMTAsMFwifV0sYmJveDp7eTI6ZS55MisyMH19LFwiU2hvcnQgdG93ZWQgYXJyYXlcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZmlsbDpBLGQ6XCJNIDUwLDUgbCAxMDAsMCBNNTAsMCBsMTAsMCAwLDEwIC0xMCwwIHogTTE1MCwwIGwtMTAsMCAwLDEwIDEwLDAgeiBNMTAwLDAgbDUsNSAtNSw1IC01LC01IHpcIn1dLGJib3g6e3kyOmUueTIrMTB9fSxcIkxvbmcgdG93ZWQgQXJyYXlcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZmlsbDpBLGQ6XCJNIDUwLDUgbCAxMDAsMCBNNTAsMCBsMTAsMCAwLDEwIC0xMCwwIHogTTE1MCwwIGwtMTAsMCAwLDEwIDEwLDAgeiBNMTA1LDAgbC0xMCwwIDAsMTAgMTAsMCB6IE03NSwwIGw1LDUgLTUsNSAtNSwtNSB6ICBNMTI1LDAgbDUsNSAtNSw1IC01LC01IHpcIn1dLGJib3g6e3kyOmUueTIrMTB9fX07aS5oYXNPd25Qcm9wZXJ0eSh0aGlzLm1ldGFkYXRhLm1vYmlsaXR5KSYmKHQ9aVt0aGlzLm1ldGFkYXRhLm1vYmlsaXR5XS5nLDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJkUucHVzaChJLm91dGxpbmUoe3R5cGU6XCJ0cmFuc2xhdGVcIix4OjAseTplLnkyLGRyYXc6dH0sdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSxSLnB1c2goe3R5cGU6XCJ0cmFuc2xhdGVcIix4OjAseTplLnkyLGRyYXc6dH0pLEMubWVyZ2UoaVt0aGlzLm1ldGFkYXRhLm1vYmlsaXR5XS5iYm94KSl9aWYodGhpcy5tZXRhZGF0YS5sZWFkZXJzaGlwKXt2YXIgTD17RnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDQ1LDYwIDU1LC0yNSA1NSwyNVwifX1bdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl07TCYmKEUucHVzaChMKSxDLm1lcmdlKHt5MTplLnkxLTIwfSkpfWZvcih2YXIgcz0wO3M8RS5sZW5ndGg7cysrKUVbc10uaGFzT3duUHJvcGVydHkoXCJmaWxsXCIpfHwoRVtzXS5maWxsPSExKSxFW3NdLmhhc093blByb3BlcnR5KFwic3Ryb2tlXCIpfHwoRVtzXS5zdHJva2U9QSksRVtzXS5oYXNPd25Qcm9wZXJ0eShcInN0cm9rZXdpZHRoXCIpfHwoRVtzXS5zdHJva2V3aWR0aD10aGlzLnN0eWxlLnN0cm9rZVdpZHRoKTtmb3Iocz0wO3M8Ui5sZW5ndGg7cysrKVJbc10uaGFzT3duUHJvcGVydHkoXCJmaWxsXCIpfHwoUltzXS5maWxsPSExKSxSW3NdLmhhc093blByb3BlcnR5KFwic3Ryb2tlXCIpfHwoUltzXS5zdHJva2U9QSksUltzXS5oYXNPd25Qcm9wZXJ0eShcInN0cm9rZXdpZHRoXCIpfHwoUltzXS5zdHJva2V3aWR0aD10aGlzLnN0eWxlLnN0cm9rZVdpZHRoKTtyZXR1cm57cHJlOkUscG9zdDpSLGJib3g6Q319ZnVuY3Rpb24gQShJKXt2YXIgdD1bXSxFPVtdLFI9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveCxlPVIueTEsQT1SLnkyO2lmKHRoaXMubWV0YWRhdGEuY29uZGl0aW9uKWlmKHRoaXMubWV0YWRhdGEuZmlsbCYmXCJcIj09PXRoaXMuc3R5bGUubW9ub0NvbG9yJiYhdGhpcy5zdHlsZS5zaW1wbGVTdGF0dXNNb2RpZmllcil7IXRoaXMubWV0YWRhdGEuZnJhbWUmJnRoaXMubWV0YWRhdGEuaWNvbkJvdHRvbSYmKEE9dGhpcy5tZXRhZGF0YS5pY29uQm90dG9tKSx0aGlzLm9wdGlvbnMuaGVhZHF1YXJ0ZXJzRWxlbWVudCYmKEErPTM1KSxBKz10aGlzLm1ldGFkYXRhLm1vYmlsaXR5PzI1OjUsRS5wdXNoKHt0eXBlOlwicGF0aFwiLHN0cm9rZXdpZHRoOnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsZmlsbDp7RnVsbHlDYXBhYmxlOlwicmdiKDAsMjU1LDApXCIsRGFtYWdlZDpcInJnYigyNTUsMjU1LDApXCIsRGVzdHJveWVkOlwicmdiKDI1NSwwLDApXCIsRnVsbFRvQ2FwYWNpdHk6XCJyZ2IoMCwgMTgwLCAyNDApXCJ9W3RoaXMubWV0YWRhdGEuY29uZGl0aW9uXSxzdHJva2U6dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxkOlwiTVwiK1IueDErXCIsXCIrQStcIiBsXCIrUi53aWR0aCgpK1wiLDAgMCwyNSAtXCIrUi53aWR0aCgpK1wiLDAgelwifSksQSs9MjUsMDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCYmdC5wdXNoKEkub3V0bGluZShFLHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSl9ZWxzZVwiRGFtYWdlZFwiIT10aGlzLm1ldGFkYXRhLmNvbmRpdGlvbiYmXCJEZXN0cm95ZWRcIiE9dGhpcy5tZXRhZGF0YS5jb25kaXRpb258fChFLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk0xNTAsMjAgTDUwLDE4MFwiLHN0cm9rZXdpZHRoOjIqdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxzdHJva2U6dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXX0pLGU9MjAsQT0xODApLFwiRGVzdHJveWVkXCI9PXRoaXMubWV0YWRhdGEuY29uZGl0aW9uJiZFLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk01MCwyMCBMMTUwLDE4MFwiLHN0cm9rZXdpZHRoOjIqdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxzdHJva2U6dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXX0pLDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJnQucHVzaChJLm91dGxpbmUoRSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpO3JldHVybntwcmU6dCxwb3N0OkUsYmJveDp7eTE6ZSx5MjpBfX19ZnVuY3Rpb24gQyhJKXt2YXIgdD1bXSxFPVtdLFI9dGhpcy5iYm94LGU9Ui54MSxBPVIueDIsQz1SLnkxLFQ9Ui55MjtpZihcIlwiIT09dGhpcy5vcHRpb25zLmVuZ2FnZW1lbnRCYXIpe0MtPTY7dmFyIFM9dGhpcy5zdHlsZS5mb250ZmFtaWx5LE49dGhpcy5jb2xvcnMuaWNvbkNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dfHx0aGlzLmNvbG9ycy5pY29uQ29sb3IuRnJpZW5kO0UucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnRoaXMub3B0aW9ucy5lbmdhZ2VtZW50QmFyLHg6MTAwLHk6Ui55MS0xMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIsZm9udHNpemU6MjIsZm9udGZhbWlseTpTLGZvbnR3ZWlnaHQ6XCJib2xkXCIsZmlsbDpOLHN0cm9rZTohMX0pO3ZhciBPPSExO2lmKHRoaXMubWV0YWRhdGEuZmlsbCYmXCJcIj09PXRoaXMuc3R5bGUubW9ub0NvbG9yKXtPPXtUQVJHRVQ6XCJyZ2IoMjU1LCAwLCAwKVwiLFwiTk9OLVRBUkdFVFwiOlwicmdiKDI1NSwgMjU1LCAyNTUpXCIsRVhQSVJFRDpcInJnYigyNTUsIDEyMCwgMClcIn1bdGhpcy5vcHRpb25zLmVuZ2FnZW1lbnRUeXBlLnRvVXBwZXJDYXNlKCldfHx0aGlzLmNvbG9ycy5maWxsQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl19dmFyIEcsbz1NYXRoLm1heChSLndpZHRoKCksMTYqdGhpcy5vcHRpb25zLmVuZ2FnZW1lbnRCYXIubGVuZ3RoKTtpZihlPU1hdGgubWluKGUsMTAwLW8vMiksQT1NYXRoLm1heChBLDEwMCtvLzIpLEUudW5zaGlmdCh7dHlwZTpcInBhdGhcIixzdHJva2V3aWR0aDp0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLGZpbGw6TyxzdHJva2U6dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxkOlwiTVwiKygxMDAtby8yKStcIixcIitDK1wiIGxcIitvK1wiLDAgMCwtMjUgLVwiK28rXCIsMCB6XCJ9KSxDLT0yNSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoKUc9dGhpcy5tZXRhZGF0YS5maWxsJiZcIlwiPT09dGhpcy5zdHlsZS5tb25vQ29sb3I/RVswXTpFLHQucHVzaChJLm91dGxpbmUoRyx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpfXJldHVybntwcmU6dCxwb3N0OkUsYmJveDp7eDE6ZSx4MjpBLHkxOkMseTI6VH19fWZ1bmN0aW9uIFQoSSl7dmFyIHQ9W10sRT1bXSxSPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gsZT10aGlzLmNvbG9ycy5mcmFtZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dO2lmKHRoaXMubWV0YWRhdGEuZGltZW5zaW9uVW5rbm93biYmZSYmRS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6XCI/XCIseDoxMDAseToxMjcsZmlsbDplLGZvbnRmYW1pbHk6dGhpcy5zdHlsZS5mb250ZmFtaWx5LGZvbnRzaXplOjgwLGZvbnR3ZWlnaHQ6XCJib2xkXCIsdGV4dGFuY2hvcjpcIm1pZGRsZVwifSksdGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZyYmZSl7dmFyIEE9MTA7KFwiVW5rbm93blwiPT10aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9ufHxcIkhvc3RpbGVcIj09dGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbiYmXCJTdWJzdXJmYWNlXCIhPXRoaXMubWV0YWRhdGEuZGltZW5zaW9uKSYmKEE9LTEwKSxcIkV4ZXJjaXNlXCI9PXRoaXMubWV0YWRhdGEuY29udGV4dCYmKHRoaXMubWV0YWRhdGEuam9rZXJ8fHRoaXMubWV0YWRhdGEuZmFrZXJ8fEUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OlwiWFwiLHg6Ui54MitBLHk6NjAsZmlsbDplLGZvbnRmYW1pbHk6dGhpcy5zdHlsZS5mb250ZmFtaWx5LGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCIsdGV4dGFuY2hvcjpcInN0YXJ0XCJ9KSx0aGlzLm1ldGFkYXRhLmpva2VyJiZFLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpcIkpcIix4OlIueDIrQSx5OjYwLGZpbGw6ZSxmb250ZmFtaWx5OnRoaXMuc3R5bGUuZm9udGZhbWlseSxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwiLHRleHRhbmNob3I6XCJzdGFydFwifSksdGhpcy5tZXRhZGF0YS5mYWtlciYmRS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6XCJLXCIseDpSLngyK0EseTo2MCxmaWxsOmUsZm9udGZhbWlseTp0aGlzLnN0eWxlLmZvbnRmYW1pbHksZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIix0ZXh0YW5jaG9yOlwic3RhcnRcIn0pLFI9e3gyOlIueDIrQSsyMix5MTozNX0pLFwiU2ltdWxhdGlvblwiPT10aGlzLm1ldGFkYXRhLmNvbnRleHQmJihFLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpcIlNcIix4OlIueDIrQSx5OjYwLGZpbGw6ZSxmb250ZmFtaWx5OnRoaXMuc3R5bGUuZm9udGZhbWlseSxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwiLHRleHRhbmNob3I6XCJzdGFydFwifSksUj1uZXcgSS5CQm94KHt4MjpSLngyK0ErMjIseTE6MzV9KSl9cmV0dXJuIDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJnQucHVzaChJLm91dGxpbmUoRSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLHtwcmU6dCxwb3N0OkUsYmJveDpSfX1mdW5jdGlvbiBTKEkpe3ZhciB0LEUsUj1bXSxlPVtdLEE9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveCxTPShcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5pbmZvQ29sb3I/dGhpcy5zdHlsZS5pbmZvQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5pbmZvQ29sb3IpfHx0aGlzLmNvbG9ycy5pY29uQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl18fHRoaXMuY29sb3JzLmljb25Db2xvci5GcmllbmQsTj10aGlzLnN0eWxlLmZvbnRmYW1pbHksTz10aGlzLnN0eWxlLmluZm9TaXplLEM9XCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuaW5mb0JhY2tncm91bmQ/dGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZFt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLmluZm9CYWNrZ3JvdW5kLFQ9XCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuaW5mb0JhY2tncm91bmQ/dGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZFt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLmluZm9CYWNrZ3JvdW5kLEc9bmV3IEkuQkJveCxvPTIwO2Z1bmN0aW9uIE0oSSl7dmFyIHQsRT1bXTtmb3IodmFyIFIgaW4gSSlpZih0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoUikmJlwiXCIhPXRoaXMub3B0aW9uc1tSXSl7aWYoIUkuaGFzT3duUHJvcGVydHkoUikpY29udGludWU7Zm9yKHZhciBlPTA7ZTwoSVtSXS5sZW5ndGh8fDEpO2UrKyl7dmFyIEE7aWYodD17eTI6KEE9QXJyYXkuaXNBcnJheShJW1JdKT9JW1JdW2VdOklbUl0pLnkseTE6QS55LUEuZm9udHNpemV9LFwic3RhcnRcIj09QS50ZXh0YW5jaG9yJiYodC54MT1BLngsdC54Mj1BLngraSh0aGlzLm9wdGlvbnNbUl0pKihBLmZvbnRzaXplL08pKSxcIm1pZGRsZVwiPT1BLnRleHRhbmNob3Ipe3ZhciBDPWkodGhpcy5vcHRpb25zW1JdKSooQS5mb250c2l6ZS9PKTt0LngxPUEueC1DLzIsdC54Mj1BLngrQy8yfVwiZW5kXCI9PUEudGV4dGFuY2hvciYmKHQueDE9QS54LWkodGhpcy5vcHRpb25zW1JdKSooQS5mb250c2l6ZS9PKSx0LngyPUEueCksRy5tZXJnZSh0KTt2YXIgVD17dHlwZTpcInRleHRcIixmb250ZmFtaWx5Ok4sZmlsbDpTfTtBLmhhc093blByb3BlcnR5KFwiZmlsbFwiKSYmKFQuZmlsbD1BLmZpbGwpLEEuaGFzT3duUHJvcGVydHkoXCJzdHJva2VcIikmJihULnN0cm9rZT1BLnN0cm9rZSksQS5oYXNPd25Qcm9wZXJ0eShcInRleHRhbmNob3JcIikmJihULnRleHRhbmNob3I9QS50ZXh0YW5jaG9yKSxBLmhhc093blByb3BlcnR5KFwiZm9udHNpemVcIikmJihULmZvbnRzaXplPUEuZm9udHNpemUpLEEuaGFzT3duUHJvcGVydHkoXCJmb250d2VpZ2h0XCIpJiYoVC5mb250d2VpZ2h0PUEuZm9udHdlaWdodCksVC54PUEueCxULnk9QS55LFQudGV4dD10aGlzLm9wdGlvbnNbUl0sRS5wdXNoKFQpfX1yZXR1cm4gRX1mdW5jdGlvbiBpKEkpe2lmKDA9PUkubGVuZ3RoKXJldHVybiAwO2Zvcih2YXIgdD17XCIgXCI6OSxcIiFcIjoxMCwnXCInOjE1LFwiI1wiOjE3LCQ6MTcsXCIlXCI6MjcsXCImXCI6MjIsXCInXCI6OCxcIihcIjoxMCxcIilcIjoxMCxcIipcIjoxMixcIitcIjoxOCxcIixcIjo5LFwiLVwiOjEwLFwiLlwiOjksXCIvXCI6OSwwOjE3LDE6MTcsMjoxNywzOjE3LDQ6MTcsNToxNyw2OjE3LDc6MTcsODoxNyw5OjE3LFwiOlwiOjEwLFwiO1wiOjEwLFwiPFwiOjE4LFwiPVwiOjE4LFwiPlwiOjE4LFwiP1wiOjE5LFwiQFwiOjMwLEE6MjIsQjoyMixDOjIyLEQ6MjIsRToyMSxGOjE5LEc6MjQsSDoyMixJOjksSjoxNyxLOjIyLEw6MTksTToyNSxOOjIyLE86MjQsUDoyMSxROjI0LFI6MjIsUzoyMSxUOjE5LFU6MjIsVjoyMSxXOjI5LFg6MjEsWToyMSxaOjE5LFwiW1wiOjEwLFwiXVwiOjEwLFwiXlwiOjE4LF86MTcsXCJgXCI6MTAsYToxNyxiOjE5LGM6MTcsZDoxOSxlOjE3LGY6MTAsZzoxOSxoOjE5LGk6OSxqOjksazoxNyxsOjksbToyNyxuOjE5LG86MTkscDoxOSxxOjE5LHI6MTIsczoxNyx0OjEwLHU6MTksdjoxNyx3OjI0LHg6MTcseToxNyx6OjE1LFwie1wiOjEyLFwifFwiOjksXCJ9XCI6MTIsXCJ+XCI6MTh9LEU9MCxSPTA7UjxJLmxlbmd0aDtSKyspRSs9Ty8zMCoodFtJW1JdXT90W0lbUl1dOjI4LjUpO3JldHVybiBFKz1vfWlmKHRoaXMubWV0YWRhdGEubnVtYmVyU0lEQyl7aWYoIUkuX2xhYmVsQ2FjaGUuaGFzT3duUHJvcGVydHkoXCJudW1iZXJcIikpZm9yKHQgaW4gSS5fbGFiZWxDYWNoZS5udW1iZXI9e30sSS5fbGFiZWxPdmVycmlkZXMubnVtYmVyKUkuX2xhYmVsT3ZlcnJpZGVzLm51bWJlci5oYXNPd25Qcm9wZXJ0eSh0KSYmSS5fbGFiZWxPdmVycmlkZXMubnVtYmVyW3RdLmNhbGwodGhpcyxJLl9sYWJlbENhY2hlLm51bWJlcik7aWYoRT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDAsNiksdGhpcy5tZXRhZGF0YS5jb250cm9sTWVhc3VyZSYmSS5fbGFiZWxDYWNoZS5udW1iZXIuaGFzT3duUHJvcGVydHkoRSkpcmV0dXJuIGUucHVzaChNLmNhbGwodGhpcyxJLl9sYWJlbENhY2hlLm51bWJlcltFXSkpLDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJlIucHVzaChJLm91dGxpbmUoZSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLHtwcmU6Uixwb3N0OmUsYmJveDpHfX1lbHNle2lmKCFJLl9sYWJlbENhY2hlLmhhc093blByb3BlcnR5KFwibGV0dGVyXCIpKWZvcih0IGluIEkuX2xhYmVsQ2FjaGUubGV0dGVyPXt9LEkuX2xhYmVsT3ZlcnJpZGVzLmxldHRlcilJLl9sYWJlbE92ZXJyaWRlcy5sZXR0ZXIuaGFzT3duUHJvcGVydHkodCkmJkkuX2xhYmVsT3ZlcnJpZGVzLmxldHRlclt0XS5jYWxsKHRoaXMsSS5fbGFiZWxDYWNoZS5sZXR0ZXIpO2lmKEU9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDAsMSkrXCItXCIrdGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDIsMSkrXCItXCIrdGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDQsNiksSS5fbGFiZWxDYWNoZS5sZXR0ZXIuaGFzT3duUHJvcGVydHkoRSkpcmV0dXJuIGUucHVzaChNLmNhbGwodGhpcyxJLl9sYWJlbENhY2hlLmxldHRlcltFXSkpLDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJlIucHVzaChJLm91dGxpbmUoZSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLHtwcmU6Uixwb3N0OmUsYmJveDpHfX12YXIgTCxzLG4sYT10aGlzLm9wdGlvbnMucXVhbnRpdHl8fHRoaXMub3B0aW9ucy5yZWluZm9yY2VkUmVkdWNlZHx8dGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHN8fHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb258fHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nfHx0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzc3x8dGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudHx8dGhpcy5vcHRpb25zLmhpZ2hlckZvcm1hdGlvbnx8dGhpcy5vcHRpb25zLmhvc3RpbGV8fHRoaXMub3B0aW9ucy5pZmZTaWZ8fHRoaXMub3B0aW9ucy5zaWdpbnR8fHRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbnx8dGhpcy5vcHRpb25zLnR5cGV8fHRoaXMub3B0aW9ucy5kdGd8fHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRofHx0aGlzLm9wdGlvbnMubG9jYXRpb258fHRoaXMub3B0aW9ucy5zcGVlZHx8dGhpcy5vcHRpb25zLnNwZWNpYWxIZWFkcXVhcnRlcnN8fHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGV8fHRoaXMub3B0aW9ucy5lcXVpcG1lbnRUZWFyZG93blRpbWV8fHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyfHx0aGlzLm9wdGlvbnMuYXV4aWxpYXJ5RXF1aXBtZW50SW5kaWNhdG9yfHx0aGlzLm9wdGlvbnMuaGVhZHF1YXJ0ZXJzRWxlbWVudHx8dGhpcy5vcHRpb25zLmluc3RhbGxhdGlvbkNvbXBvc2l0aW9ufHx0aGlzLm9wdGlvbnMuZ3VhcmRlZFVuaXR8fHRoaXMub3B0aW9ucy5zcGVjaWFsRGVzaWduYXRvcjtpZih0aGlzLnN0eWxlLmluZm9GaWVsZHMmJmEpe3RoaXMub3B0aW9ucy5zcGVjaWFsSGVhZHF1YXJ0ZXJzJiZlLnB1c2goKEw9dGhpcy5vcHRpb25zLnNwZWNpYWxIZWFkcXVhcnRlcnMscz00MixuPTExNSwxPT1MLmxlbmd0aCYmKHM9NDUsbj0xMTUpLDM9PUwubGVuZ3RoJiYocz0zNSxuPTExMCksNDw9TC5sZW5ndGgmJihzPTMyLG49MTEwKSx7dHlwZTpcInRleHRcIix0ZXh0OkwseDoxMDAseTpuLHRleHRhbmNob3I6XCJtaWRkbGVcIixmb250c2l6ZTpzLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9KSksdGhpcy5vcHRpb25zLnF1YW50aXR5JiYhdGhpcy5tZXRhZGF0YS5kaXNtb3VudGVkJiYoZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6dGhpcy5vcHRpb25zLnF1YW50aXR5LHg6MTAwLHk6QS55MS0xMCx0ZXh0YW5jaG9yOlwibWlkZGxlXCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLEcueTE9QS55MS0xMC1PKSx0aGlzLm9wdGlvbnMuaGVhZHF1YXJ0ZXJzRWxlbWVudCYmKGUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnRoaXMub3B0aW9ucy5oZWFkcXVhcnRlcnNFbGVtZW50LHg6MTAwLHk6QS55MiszNSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIsZm9udHNpemU6MzUsZm9udGZhbWlseTpOLGZvbnR3ZWlnaHQ6XCJib2xkXCIsZmlsbDpTLHN0cm9rZTohMX0pLEcueTI9QS55MiszNSk7dmFyIGwscj17TDE6XCJcIixMMjpcIlwiLEwzOlwiXCIsTDQ6XCJcIixMNTpcIlwiLFIxOlwiXCIsUjI6XCJcIixSMzpcIlwiLFI0OlwiXCIsUjU6XCJcIn07aWYoaXNOYU4odGhpcy5vcHRpb25zLnNpZGMpfHxcIkFpclwiIT10aGlzLm1ldGFkYXRhLmJhc2VEaW1lbnNpb258fChyLlIxPXRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbixyLlIyPXRoaXMub3B0aW9ucy5pZmZTaWYsci5SMz10aGlzLm9wdGlvbnMudHlwZSwodGhpcy5vcHRpb25zLnNwZWVkfHx0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCkmJihsPVtdLHRoaXMub3B0aW9ucy5zcGVlZCYmbC5wdXNoKHRoaXMub3B0aW9ucy5zcGVlZCksdGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgmJmwucHVzaCh0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCksci5SND1sLmpvaW4oXCIvXCIpKSwodGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHN8fHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pJiYobD1bXSx0aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyYmbC5wdXNoKHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzKSx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiksci5SNT1sLmpvaW4oXCIvXCIpKSksKGlzTmFOKHRoaXMub3B0aW9ucy5zaWRjKXx8XCJHcm91bmRcIj09dGhpcy5tZXRhZGF0YS5iYXNlRGltZW5zaW9uKSYmKHIuTDE9dGhpcy5vcHRpb25zLmR0ZywodGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGh8fHRoaXMub3B0aW9ucy5sb2NhdGlvbikmJihsPVtdLHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRoJiZsLnB1c2godGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgpLHRoaXMub3B0aW9ucy5sb2NhdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5sb2NhdGlvbiksci5MMj1sLmpvaW4oXCIvXCIpKSxyLkw0PXRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbixyLkw1PXRoaXMub3B0aW9ucy5zcGVlZCxyLlIyPXRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzLHIuUjQ9dGhpcy5vcHRpb25zLmhpZ2hlckZvcm1hdGlvbiwodGhpcy5vcHRpb25zLmV2YWx1YXRpb25SYXRpbmd8fHRoaXMub3B0aW9ucy5jb21iYXRFZmZlY3RpdmVuZXNzfHx0aGlzLm9wdGlvbnMuc2lnbmF0dXJlRXF1aXBtZW50fHx0aGlzLm9wdGlvbnMuaG9zdGlsZXx8dGhpcy5vcHRpb25zLmlmZlNpZikmJihsPVtdLHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nJiZsLnB1c2godGhpcy5vcHRpb25zLmV2YWx1YXRpb25SYXRpbmcpLHRoaXMub3B0aW9ucy5jb21iYXRFZmZlY3RpdmVuZXNzJiZsLnB1c2godGhpcy5vcHRpb25zLmNvbWJhdEVmZmVjdGl2ZW5lc3MpLHRoaXMub3B0aW9ucy5zaWduYXR1cmVFcXVpcG1lbnQmJmwucHVzaCh0aGlzLm9wdGlvbnMuc2lnbmF0dXJlRXF1aXBtZW50KSx0aGlzLm9wdGlvbnMuaG9zdGlsZSYmbC5wdXNoKHRoaXMub3B0aW9ucy5ob3N0aWxlKSx0aGlzLm9wdGlvbnMuaWZmU2lmJiZsLnB1c2godGhpcy5vcHRpb25zLmlmZlNpZiksci5SNT1sLmpvaW4oXCIvXCIpKSxpc05hTih0aGlzLm9wdGlvbnMuc2lkYyl8fHRoaXMubWV0YWRhdGEudW5pdD8oKHRoaXMub3B0aW9ucy50eXBlfHx0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlfHx0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lKSYmKGw9W10sdGhpcy5vcHRpb25zLnR5cGUmJmwucHVzaCh0aGlzLm9wdGlvbnMudHlwZSksdGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZSYmbC5wdXNoKHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGUpLHRoaXMub3B0aW9ucy5lcXVpcG1lbnRUZWFyZG93blRpbWUmJmwucHVzaCh0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lKSxyLkwzPWwuam9pbihcIi9cIikpLHIuUjE9dGhpcy5vcHRpb25zLnJlaW5mb3JjZWRSZWR1Y2VkLHRoaXMubWV0YWRhdGEuYWN0aXZpdHkmJihyLlIxPXRoaXMub3B0aW9ucy5jb3VudHJ5KSwodGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbnx8dGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXIpJiYobD1bXSx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiksdGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXImJmwucHVzaCh0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllciksci5SMz1sLmpvaW4oXCIvXCIpKSk6KCh0aGlzLm9wdGlvbnMudHlwZXx8dGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZXx8dGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXJ8fHRoaXMub3B0aW9ucy5pbnN0YWxsYXRpb25Db21wb3NpdGlvbikmJihsPVtdLHRoaXMub3B0aW9ucy50eXBlJiZsLnB1c2godGhpcy5vcHRpb25zLnR5cGUpLHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGUmJmwucHVzaCh0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlKSx0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllciYmbC5wdXNoKHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyKSx0aGlzLm9wdGlvbnMuaW5zdGFsbGF0aW9uQ29tcG9zaXRpb24mJmwucHVzaCh0aGlzLm9wdGlvbnMuaW5zdGFsbGF0aW9uQ29tcG9zaXRpb24pLHIuTDM9bC5qb2luKFwiL1wiKSksci5SMT10aGlzLm9wdGlvbnMuY291bnRyeSwodGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbnx8dGhpcy5vcHRpb25zLmVxdWlwbWVudFRlYXJkb3duVGltZSkmJihsPVtdLHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24mJmwucHVzaCh0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uKSx0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lJiZsLnB1c2godGhpcy5vcHRpb25zLmVxdWlwbWVudFRlYXJkb3duVGltZSksci5SMz1sLmpvaW4oXCIvXCIpKSkpLHRoaXMubWV0YWRhdGEuZGlzbW91bnRlZCYmKHRoaXMub3B0aW9ucy5xdWFudGl0eSYmKGUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnRoaXMub3B0aW9ucy5xdWFudGl0eSx4OjEwMCx5OkEueTIrTyx0ZXh0YW5jaG9yOlwibWlkZGxlXCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLEcueTI9QS55MitPKSxyLkwxPXRoaXMub3B0aW9ucy5kdGcsKHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRofHx0aGlzLm9wdGlvbnMubG9jYXRpb24pJiYobD1bXSx0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCYmbC5wdXNoKHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRoKSx0aGlzLm9wdGlvbnMubG9jYXRpb24mJmwucHVzaCh0aGlzLm9wdGlvbnMubG9jYXRpb24pLHIuTDI9bC5qb2luKFwiL1wiKSksKHRoaXMub3B0aW9ucy50eXBlfHx0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlfHx0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllcikmJihsPVtdLHRoaXMub3B0aW9ucy50eXBlJiZsLnB1c2godGhpcy5vcHRpb25zLnR5cGUpLHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGUmJmwucHVzaCh0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlKSx0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllciYmbC5wdXNoKHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyKSxyLkwzPWwuam9pbihcIi9cIikpLHIuTDQ9dGhpcy5vcHRpb25zLnVuaXF1ZURlc2lnbmF0aW9uLHIuTDU9dGhpcy5vcHRpb25zLnNwZWVkLHIuUjE9dGhpcy5vcHRpb25zLmNvdW50cnksci5SMj10aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uJiYobD1bXSx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiksci5SMz1sLmpvaW4oXCIvXCIpKSxyLlI0PXRoaXMub3B0aW9ucy5oaWdoZXJGb3JtYXRpb24sKHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nfHx0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzc3x8dGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudHx8dGhpcy5vcHRpb25zLmhvc3RpbGV8fHRoaXMub3B0aW9ucy5pZmZTaWYpJiYobD1bXSx0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZyYmbC5wdXNoKHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nKSx0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzcyYmbC5wdXNoKHRoaXMub3B0aW9ucy5jb21iYXRFZmZlY3RpdmVuZXNzKSx0aGlzLm9wdGlvbnMuc2lnbmF0dXJlRXF1aXBtZW50JiZsLnB1c2godGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudCksdGhpcy5vcHRpb25zLmhvc3RpbGUmJmwucHVzaCh0aGlzLm9wdGlvbnMuaG9zdGlsZSksdGhpcy5vcHRpb25zLmlmZlNpZiYmbC5wdXNoKHRoaXMub3B0aW9ucy5pZmZTaWYpLHIuUjU9bC5qb2luKFwiL1wiKSkpLGlzTmFOKHRoaXMub3B0aW9ucy5zaWRjKXx8XCJTZWFcIiE9dGhpcy5tZXRhZGF0YS5iYXNlRGltZW5zaW9ufHwoKHRoaXMub3B0aW9ucy5ndWFyZGVkVW5pdHx8dGhpcy5vcHRpb25zLnNwZWNpYWxEZXNpZ25hdG9yKSYmKGw9W10sdGhpcy5vcHRpb25zLmd1YXJkZWRVbml0JiZsLnB1c2godGhpcy5vcHRpb25zLmd1YXJkZWRVbml0KSx0aGlzLm9wdGlvbnMuc3BlY2lhbERlc2lnbmF0b3ImJmwucHVzaCh0aGlzLm9wdGlvbnMuc3BlY2lhbERlc2lnbmF0b3IpLHIuTDE9bC5qb2luKFwiL1wiKSksci5SMT10aGlzLm9wdGlvbnMudW5pcXVlRGVzaWduYXRpb24sci5SMj10aGlzLm9wdGlvbnMudHlwZSxyLlIzPXRoaXMub3B0aW9ucy5pZmZTaWYsKHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzfHx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uKSYmKGw9W10sdGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHMmJmwucHVzaCh0aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyksdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pLHIuUjQ9bC5qb2luKFwiL1wiKSksKHRoaXMub3B0aW9ucy5sb2NhdGlvbnx8dGhpcy5vcHRpb25zLnNwZWVkKSYmKGw9W10sdGhpcy5vcHRpb25zLmxvY2F0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmxvY2F0aW9uKSx0aGlzLm9wdGlvbnMuc3BlZWQmJmwucHVzaCh0aGlzLm9wdGlvbnMuc3BlZWQpLHIuUjU9bC5qb2luKFwiL1wiKSkpLGlzTmFOKHRoaXMub3B0aW9ucy5zaWRjKXx8XCJTdWJzdXJmYWNlXCIhPXRoaXMubWV0YWRhdGEuYmFzZURpbWVuc2lvbnx8KHIuTDE9dGhpcy5vcHRpb25zLnNwZWNpYWxEZXNpZ25hdG9yLHIuUjE9dGhpcy5vcHRpb25zLnVuaXF1ZURlc2lnbmF0aW9uLHIuUjI9dGhpcy5vcHRpb25zLnR5cGUsci5SMz10aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCxyLlI0PXRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzLHIuUjU9dGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiksRy54MT1BLngxLU1hdGgubWF4KHRoaXMub3B0aW9ucy5zcGVjaWFsSGVhZHF1YXJ0ZXJzPyhpKHRoaXMub3B0aW9ucy5zcGVjaWFsSGVhZHF1YXJ0ZXJzKS10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94LndpZHRoKCkpLzI6MCx0aGlzLm9wdGlvbnMucXVhbnRpdHk/KGkodGhpcy5vcHRpb25zLnF1YW50aXR5KS10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94LndpZHRoKCkpLzI6MCxpKHIuTDEpLGkoci5MMiksaShyLkwzKSxpKHIuTDQpLGkoci5MNSkpLEcueDI9QS54MitNYXRoLm1heCh0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycz8oaSh0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycyktdGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC53aWR0aCgpKS8yOjAsdGhpcy5vcHRpb25zLnF1YW50aXR5PyhpKHRoaXMub3B0aW9ucy5xdWFudGl0eSktdGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC53aWR0aCgpKS8yOjAsaShyLlIxKSxpKHIuUjIpLGkoci5SMyksaShyLlI0KSxpKHIuUjUpKSwoci5MMXx8ci5SMSkmJihHLnkxPU1hdGgubWluKEcueTEsMTAwLTIuNSpPKSksKHIuTDJ8fHIuUjIpJiYoRy55MT1NYXRoLm1pbihHLnkxLDEwMC0xLjUqTykpLChyLkw0fHxyLlI0KSYmKEcueTI9TWF0aC5tYXgoRy55MiwxMDArMS43Kk8pKSwoci5MNXx8ci5SNSkmJihHLnkyPU1hdGgubWF4KEcueTIsMTAwKzIuNypPKSksdGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZCl7dmFyIFA9e3gxOjEwMCx5MToxZTMseTI6MH0seT17eDI6MTAwLHkxOjFlMyx5MjowfTtyLkwxJiYoUD17eDE6TWF0aC5taW4oUC54MSxBLngxLWkoci5MMSkpLHgyOkEueDEtby8yLHkxOk1hdGgubWluKFAueTEsMTAwLTIuNSpPKSx5MjpNYXRoLm1heChQLnkyLDEwMC0xLjUqTytvLzIpfSksci5MMiYmKFA9e3gxOk1hdGgubWluKFAueDEsQS54MS1pKHIuTDIpKSx4MjpBLngxLW8vMix5MTpNYXRoLm1pbihQLnkxLDEwMC0xLjUqTykseTI6TWF0aC5tYXgoUC55MiwxMDAtLjUqTytvLzIpfSksci5MMyYmKFA9e3gxOk1hdGgubWluKFAueDEsQS54MS1pKHIuTDMpKSx4MjpBLngxLW8vMix5MTpNYXRoLm1pbihQLnkxLDEwMC0uNSpPKSx5MjpNYXRoLm1heChQLnkyLDEwMCsuNSpPK28vMil9KSxyLkw0JiYoUD17eDE6TWF0aC5taW4oUC54MSxBLngxLWkoci5MNCkpLHgyOkEueDEtby8yLHkxOk1hdGgubWluKFAueTEsMTAwKy41Kk8pLHkyOk1hdGgubWF4KFAueTIsMTAwKzEuNSpPK28vMil9KSxyLkw1JiYoUD17eDE6TWF0aC5taW4oUC54MSxBLngxLWkoci5MNSkpLHgyOkEueDEtby8yLHkxOk1hdGgubWluKFAueTEsMTAwKzEuNSpPKSx5MjpNYXRoLm1heChQLnkyLDEwMCsyLjUqTytvLzIpfSksUC5oYXNPd25Qcm9wZXJ0eShcIngyXCIpJiYoRy54MS09Ty8yLGUucHVzaCh7dHlwZTpcInBhdGhcIixkOlwiTSBcIisoUC54MS1PLzIpK1wiLFwiKyhQLnkxK08vMikrXCIgXCIrUC54MStcIixcIitQLnkxK1wiIFwiK1AueDIrXCIsXCIrUC55MStcIiBcIitQLngyK1wiLFwiK1AueTIrXCIgXCIrKFAueDEtTy8yKStcIixcIitQLnkyK1wielwiLGZpbGw6QyxzdHJva2U6VHx8ITF9KSksci5SMSYmKHk9e3gxOkEueDIrby8yLHgyOk1hdGgubWF4KHkueDIsQS54MitpKHIuUjEpKSx5MTpNYXRoLm1pbih5LnkxLDEwMC0yLjUqTykseTI6TWF0aC5tYXgoeS55MiwxMDAtMS41Kk8rby8yKX0pLHIuUjImJih5PXt4MTpBLngyK28vMix4MjpNYXRoLm1heCh5LngyLEEueDIraShyLlIyKSkseTE6TWF0aC5taW4oeS55MSwxMDAtMS41Kk8pLHkyOk1hdGgubWF4KHkueTIsMTAwLS41Kk8rby8yKX0pLHIuUjMmJih5PXt4MTpBLngyK28vMix4MjpNYXRoLm1heCh5LngyLEEueDIraShyLlIzKSkseTE6TWF0aC5taW4oeS55MSwxMDAtLjUqTykseTI6TWF0aC5tYXgoeS55MiwxMDArLjUqTytvLzIpfSksci5SNCYmKHk9e3gxOkEueDIrby8yLHgyOk1hdGgubWF4KHkueDIsQS54MitpKHIuUjQpKSx5MTpNYXRoLm1pbih5LnkxLDEwMCsuNSpPKSx5MjpNYXRoLm1heCh5LnkyLDEwMCsxLjUqTytvLzIpfSksci5SNSYmKHk9e3gxOkEueDIrby8yLHgyOk1hdGgubWF4KHkueDIsQS54MitpKHIuUjUpKSx5MTpNYXRoLm1pbih5LnkxLDEwMCsxLjUqTykseTI6TWF0aC5tYXgoeS55MiwxMDArMi41Kk8rby8yKX0pLHkuaGFzT3duUHJvcGVydHkoXCJ4MVwiKSYmKEcueDIrPU8vMixlLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk0gXCIreS54MStcIixcIit5LnkxK1wiIFwiKyh5LngyK08vMikrXCIsXCIreS55MStcIiBcIisoeS54MitPLzIpK1wiLFwiKyh5LnkyLU8vMikrXCIgXCIreS54MitcIixcIit5LnkyK1wiIFwiK3kueDErXCIsXCIreS55MitcInpcIixmaWxsOkMsc3Ryb2tlOlR8fCExfSkpfXIuTDEmJmUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnIuTDEseDpBLngxLW8seToxMDAtMS41Kk8sdGV4dGFuY2hvcjpcImVuZFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLkwyJiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLkwyLHg6QS54MS1vLHk6MTAwLS41Kk8sdGV4dGFuY2hvcjpcImVuZFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLkwzJiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLkwzLHg6QS54MS1vLHk6MTAwKy41Kk8sdGV4dGFuY2hvcjpcImVuZFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLkw0JiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLkw0LHg6QS54MS1vLHk6MTAwKzEuNSpPLHRleHRhbmNob3I6XCJlbmRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5MNSYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5MNSx4OkEueDEtbyx5OjEwMCsyLjUqTyx0ZXh0YW5jaG9yOlwiZW5kXCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLHIuUjEmJmUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnIuUjEseDpBLngyK28seToxMDAtMS41Kk8sdGV4dGFuY2hvcjpcInN0YXJ0XCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLHIuUjImJmUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnIuUjIseDpBLngyK28seToxMDAtLjUqTyx0ZXh0YW5jaG9yOlwic3RhcnRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5SMyYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5SMyx4OkEueDIrbyx5OjEwMCsuNSpPLHRleHRhbmNob3I6XCJzdGFydFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLlI0JiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLlI0LHg6QS54MitvLHk6MTAwKzEuNSpPLHRleHRhbmNob3I6XCJzdGFydFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLlI1JiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLlI1LHg6QS54MitvLHk6MTAwKzIuNSpPLHRleHRhbmNob3I6XCJzdGFydFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZSLnB1c2goSS5vdXRsaW5lKGUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKX1yZXR1cm57cHJlOlIscG9zdDplLGJib3g6R319ZnVuY3Rpb24gTihJKXt2YXIgdD1bXSxFPVtdLFI9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveDtcIlwiPT10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nJiYoUj10aGlzLmJib3gpO3ZhciBlLEE9bmV3IEkuQkJveCxDPXRoaXMuY29sb3JzLmljb25Db2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXXx8dGhpcy5jb2xvcnMuaWNvbkNvbG9yLkZyaWVuZDtpZih0aGlzLnN0eWxlLmluZm9GaWVsZHMmJlwiXCIhPT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uKXtpZigwPT10aGlzLm9wdGlvbnMuc3BlZWRMZWFkZXIpe2U9W3t0eXBlOlwicm90YXRlXCIsZGVncmVlOnRoaXMub3B0aW9ucy5kaXJlY3Rpb24seDoxMDAseToxMDAsZHJhdzpbe3R5cGU6XCJwYXRoXCIsZmlsbDpDLHN0cm9rZTpDLHN0cm9rZXdpZHRoOnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsZDpcIk0xMDAsMTAwIGwwLC03NSAtNSwzIDUsLTE1IDUsMTUgLTUsLTNcIn1dfV0sQS55MT1NYXRoLm1pbigxMDAtOTUqTWF0aC5jb3ModGhpcy5vcHRpb25zLmRpcmVjdGlvbi8zNjAqTWF0aC5QSSoyKSwxMDApLEEueTI9TWF0aC5tYXgoMTAwLTk1Kk1hdGguY29zKHRoaXMub3B0aW9ucy5kaXJlY3Rpb24vMzYwKk1hdGguUEkqMiksMTAwKSxBLngxPU1hdGgubWluKDEwMCs5NSpNYXRoLnNpbih0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLzM2MCpNYXRoLlBJKjIpLDEwMCksQS54Mj1NYXRoLm1heCgxMDArOTUqTWF0aC5zaW4odGhpcy5vcHRpb25zLmRpcmVjdGlvbi8zNjAqTWF0aC5QSSoyKSwxMDApLFwiR3JvdW5kXCIhPXRoaXMubWV0YWRhdGEuYmFzZURpbWVuc2lvbiYmXCJcIiE9dGhpcy5tZXRhZGF0YS5iYXNlRGltZW5zaW9ufHwodGhpcy5tZXRhZGF0YS5oZWFkcXVhcnRlcnM/KGU9W3t0eXBlOlwidHJhbnNsYXRlXCIseDpSLngxLTEwMCx5OlIueTItKDEwMC0odGhpcy5zdHlsZS5ocVN0YWZmTGVuZ3RofHxJLl9ocVN0YWZmTGVuZ3RoKSksZHJhdzplfV0sQS54MSs9Ui54MS0xMDAsQS54Mis9Ui54MS0xMDApOmU9W3t0eXBlOlwidHJhbnNsYXRlXCIseDowLHk6Ui55MixkcmF3OmV9LHt0eXBlOlwicGF0aFwiLGZpbGw6QyxzdHJva2U6QyxzdHJva2V3aWR0aDp0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLGQ6XCJNIDEwMCxcIitSLnkyK1wibDAsMTAwXCJ9XSksQS55Mis9Ui55MitwYXJzZUZsb2F0KHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpLEUucHVzaChlKX1lbHNle3ZhciBUPXRoaXMub3B0aW9ucy5zcGVlZExlYWRlciooMTAwL3RoaXMuc3R5bGUuc2l6ZSksUz10aGlzLm9wdGlvbnMuZGlyZWN0aW9uKk1hdGguUEkvMTgwLE49LVQqTWF0aC5jb3MoUyksTz1UKk1hdGguc2luKFMpO0EueDE9TWF0aC5taW4oMTAwLDEwMCtPKSxBLngyPU1hdGgubWF4KDEwMCwxMDArTyksQS55MT1NYXRoLm1pbigxMDAsMTAwK04pLEEueTI9TWF0aC5tYXgoMTAwLDEwMCtOKSxlPXt0eXBlOlwicGF0aFwiLGZpbGw6QyxzdHJva2U6QyxzdHJva2V3aWR0aDp0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLGQ6XCJNIDEwMCwxMDAgIGxcIitPK1wiLFwiK059LHQucHVzaChlKX0wPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZ0LnVuc2hpZnQoSS5vdXRsaW5lKGUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKX1yZXR1cm57cHJlOnQscG9zdDpFLGJib3g6QX19ZnVuY3Rpb24gSShJKXtyZXR1cm4gdm9pZCAwPT09SSYmKEk9e30pLHt4MTp2b2lkIDAhPT1JLngxP0kueDE6MTAwLHkxOnZvaWQgMCE9PUkueTE/SS55MToxMDAseDI6dm9pZCAwIT09SS54Mj9JLngyOjEwMCx5Mjp2b2lkIDAhPT1JLnkyP0kueTI6MTAwLHdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueDItdGhpcy54MX0saGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueTItdGhpcy55MX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6dGhpcy55Mi10aGlzLnkxLHdpZHRoOnRoaXMueDItdGhpcy54MX19LG1lcmdlOmZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLngxPUkueDE8PXRoaXMueDE/SS54MTp0aGlzLngxLHRoaXMueTE9SS55MTw9dGhpcy55MT9JLnkxOnRoaXMueTEsdGhpcy54Mj1JLngyPj10aGlzLngyP0kueDI6dGhpcy54Mix0aGlzLnkyPUkueTI+PXRoaXMueTI/SS55Mjp0aGlzLnkyLHRoaXN9fX12YXIgTz17QWlySG9zdGlsZTp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTSA0NSwxNTAgTDQ1LDcwIDEwMCwyMCAxNTUsNzAgMTU1LDE1MFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MToyMCx4MjoxNTUseTI6MTUwfSl9LEFpckZyaWVuZDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTSAxNTUsMTUwIEMgMTU1LDUwIDExNSwzMCAxMDAsMzAgODUsMzAgNDUsNTAgNDUsMTUwXCJ9LGJib3g6bmV3IEkoe3gxOjQ1LHkxOjMwLHgyOjE1NSx5MjoxNTB9KX0sQWlyTmV1dHJhbDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTSA0NSwxNTAgTCA0NSwzMCwxNTUsMzAsMTU1LDE1MFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTozMCx4MjoxNTUseTI6MTUwfSl9LEFpclVua25vd246e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNjUsMTUwIGMgLTU1LDAgLTUwLC05MCAwLC05MCAwLC01MCA3MCwtNTAgNzAsMCA1MCwwIDU1LDkwIDAsOTBcIn0sYmJveDpuZXcgSSh7eDE6MjUseTE6MjAseDI6MTc1LHkyOjE1MH0pfSxHcm91bmRIb3N0aWxlOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwyOCBMMTcyLDEwMCAxMDAsMTcyIDI4LDEwMCAxMDAsMjggWlwifSxiYm94Om5ldyBJKHt4MToyOCx5MToyOCx4MjoxNzIseTI6MTcyfSl9LEdyb3VuZEZyaWVuZDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDUwIGwxNTAsMCAwLDEwMCAtMTUwLDAgelwifSxiYm94Om5ldyBJKHt4MToyNSx5MTo1MCx4MjoxNzUseTI6MTUwfSl9LEdyb3VuZE5ldXRyYWw6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw0NSBsMTEwLDAgMCwxMTAgLTExMCwwIHpcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6NDUseDI6MTU1LHkyOjE1NX0pfSxHcm91bmRVbmtub3duOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjMsNjMgQzYzLDIwIDEzNywyMCAxMzcsNjMgQzE4MCw2MyAxODAsMTM3IDEzNywxMzcgQzEzNywxODAgNjMsMTgwIDYzLDEzNyBDMjAsMTM3IDIwLDYzIDYzLDYzIFpcIn0sYmJveDpuZXcgSSh7eDE6MzAuNzUseTE6MzAuNzUseDI6MTY5LjI1LHkyOjE2OS4yNX0pfSxMYW5kRGlzbW91bnRlZEluZGl2aWR1YWxIb3N0aWxlOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwyOCBMMTcyLDEwMCAxMDAsMTcyIDI4LDEwMCAxMDAsMjggWlwifSxiYm94Om5ldyBJKHt4MToyOCx5MToyOCx4MjoxNzIseTI6MTcyfSl9LExhbmREaXNtb3VudGVkSW5kaXZpZHVhbEZyaWVuZDp7Zzp7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNDUgNTUsMjUgMCw2MCAtNTUsMjUgLTU1LC0yNSAwLC02MCB6XCJ9LGJib3g6bmV3IEkoe3gxOjQ1LHkxOjQ1LHgyOjE1NSx5MjoxNTV9KX0sTGFuZERpc21vdW50ZWRJbmRpdmlkdWFsTmV1dHJhbDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDQ1IGwxMTAsMCAwLDExMCAtMTEwLDAgelwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo0NSx4MjoxNTUseTI6MTU1fSl9LExhbmREaXNtb3VudGVkSW5kaXZpZHVhbFVua25vd246e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk02Myw2MyBDNjMsMjAgMTM3LDIwIDEzNyw2MyBDMTgwLDYzIDE4MCwxMzcgMTM3LDEzNyBDMTM3LDE4MCA2MywxODAgNjMsMTM3IEMyMCwxMzcgMjAsNjMgNjMsNjMgWlwifSxiYm94Om5ldyBJKHt4MTozMC43NSx5MTozMC43NSx4MjoxNjkuMjUseTI6MTY5LjI1fSl9LFNlYUhvc3RpbGU6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMjggTDE3MiwxMDAgMTAwLDE3MiAyOCwxMDAgMTAwLDI4IFpcIn0sYmJveDpuZXcgSSh7eDE6MjgseTE6MjgseDI6MTcyLHkyOjE3Mn0pfSxTZWFGcmllbmQ6e2c6e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6NjB9LGJib3g6bmV3IEkoe3gxOjQwLHkxOjQwLHgyOjE2MCx5MjoxNjB9KX0sU2VhTmV1dHJhbDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDQ1IGwxMTAsMCAwLDExMCAtMTEwLDAgelwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo0NSx4MjoxNTUseTI6MTU1fSl9LFNlYVVua25vd246e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk02Myw2MyBDNjMsMjAgMTM3LDIwIDEzNyw2MyBDMTgwLDYzIDE4MCwxMzcgMTM3LDEzNyBDMTM3LDE4MCA2MywxODAgNjMsMTM3IEMyMCwxMzcgMjAsNjMgNjMsNjMgWlwifSxiYm94Om5ldyBJKHt4MTozMC43NSx5MTozMC43NSx4MjoxNjkuMjUseTI6MTY5LjI1fSl9LFN1YnN1cmZhY2VIb3N0aWxlOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNTAgTDQ1LDEzMCAxMDAsMTgwIDE1NSwxMzAgMTU1LDUwXCJ9LGJib3g6bmV3IEkoe3gxOjQ1LHkxOjUwLHgyOjE1NSx5MjoxODB9KX0sU3Vic3VyZmFjZUZyaWVuZDp7Zzp7dHlwZTpcInBhdGhcIixkOlwibSA0NSw1MCBjIDAsMTAwIDQwLDEyMCA1NSwxMjAgMTUsMCA1NSwtMjAgNTUsLTEyMFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo1MCx4MjoxNTUseTI6MTcwfSl9LFN1YnN1cmZhY2VOZXV0cmFsOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNTAgTDQ1LDE3MCAxNTUsMTcwIDE1NSw1MFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo1MCx4MjoxNTUseTI6MTcwfSl9LFN1YnN1cmZhY2VVbmtub3duOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDUwIGMgLTU1LDAgLTUwLDkwIDAsOTAgMCw1MCA3MCw1MCA3MCwwIDUwLDAgNTUsLTkwIDAsLTkwXCJ9LGJib3g6bmV3IEkoe3gxOjI1LHkxOjUwLHgyOjE3NSx5MjoxODB9KX0sUG9zaXRpb25NYXJrZXI6e2c6e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LGJib3g6bmV3IEkoe3gxOjg1LHkxOjg1LHgyOjExNSx5MjoxMTV9KX19LHM9bmV3IGZ1bmN0aW9uKCl7dGhpcy5fYXV0b1ZhbGlkYXRpb249ITEsdGhpcy52ZXJzaW9uPVwiMi4wLjBcIixcIm9iamVjdFwiPT10eXBlb2YgY29uc29sZSYmXCJvYmplY3RcIiE9dHlwZW9mIHByb2Nlc3MmJmNvbnNvbGUuaW5mbyhcIm1pbHN5bWJvbC5qcyBcIit0aGlzLnZlcnNpb24rXCIgLSBDb3B5cmlnaHQgKGMpIDIwMTggTVwiK1N0cmluZy5mcm9tQ2hhckNvZGUoMjI5KStcIm5zIEJlY2ttYW4gIGh0dHA6Ly93d3cuc3BhdGlhbGlsbHVzaW9ucy5jb21cIil9O2Z1bmN0aW9uIEcoKXt0aGlzLmJib3g9bmV3IEksdGhpcy5jb2xvcnM9e30sdGhpcy5tZXRhZGF0YT17fSx0aGlzLm9jdGFnb25BbmNob3I9e3g6NTAseTo1MH0sdGhpcy5vcHRpb25zPXt9LHRoaXMub3B0aW9ucy5xdWFudGl0eT1cIlwiLHRoaXMub3B0aW9ucy5yZWluZm9yY2VkUmVkdWNlZD1cIlwiLHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzPVwiXCIsdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbj1cIlwiLHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nPVwiXCIsdGhpcy5vcHRpb25zLmNvbWJhdEVmZmVjdGl2ZW5lc3M9XCJcIix0aGlzLm9wdGlvbnMuc2lnbmF0dXJlRXF1aXBtZW50PVwiXCIsdGhpcy5vcHRpb25zLmhpZ2hlckZvcm1hdGlvbj1cIlwiLHRoaXMub3B0aW9ucy5ob3N0aWxlPVwiXCIsdGhpcy5vcHRpb25zLmlmZlNpZj1cIlwiLHRoaXMub3B0aW9ucy5kaXJlY3Rpb249XCJcIix0aGlzLm9wdGlvbnMuc2lnaW50PVwiXCIsdGhpcy5vcHRpb25zLnVuaXF1ZURlc2lnbmF0aW9uPVwiXCIsdGhpcy5vcHRpb25zLnR5cGU9XCJcIix0aGlzLm9wdGlvbnMuZHRnPVwiXCIsdGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGg9XCJcIix0aGlzLm9wdGlvbnMubG9jYXRpb249XCJcIix0aGlzLm9wdGlvbnMuc3BlZWQ9XCJcIix0aGlzLm9wdGlvbnMuc3BlZWRMZWFkZXI9MCx0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycz1cIlwiLHRoaXMub3B0aW9ucy5jb3VudHJ5PVwiXCIsdGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZT1cIlwiLHRoaXMub3B0aW9ucy5lcXVpcG1lbnRUZWFyZG93blRpbWU9XCJcIix0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllcj1cIlwiLHRoaXMub3B0aW9ucy5hdXhpbGlhcnlFcXVpcG1lbnRJbmRpY2F0b3I9XCJcIix0aGlzLm9wdGlvbnMuaGVhZHF1YXJ0ZXJzRWxlbWVudD1cIlwiLHRoaXMub3B0aW9ucy5pbnN0YWxsYXRpb25Db21wb3NpdGlvbj1cIlwiLHRoaXMub3B0aW9ucy5lbmdhZ2VtZW50QmFyPVwiXCIsdGhpcy5vcHRpb25zLmVuZ2FnZW1lbnRUeXBlPVwiXCIsdGhpcy5vcHRpb25zLmd1YXJkZWRVbml0PVwiXCIsdGhpcy5vcHRpb25zLnNwZWNpYWxEZXNpZ25hdG9yPVwiXCIsdGhpcy5zdHlsZT17fSx0aGlzLnN0eWxlLmFsdGVybmF0ZU1lZGFsPSExLHRoaXMuc3R5bGUuY2l2aWxpYW5Db2xvcj0hMCx0aGlzLnN0eWxlLmNvbG9yTW9kZT1cIkxpZ2h0XCIsdGhpcy5zdHlsZS5maWxsPSEwLHRoaXMuc3R5bGUuZmlsbE9wYWNpdHk9MSx0aGlzLnN0eWxlLmZvbnRmYW1pbHk9XCJBcmlhbFwiLHRoaXMuc3R5bGUuZnJhbWU9ITAsdGhpcy5zdHlsZS5mcmFtZUNvbG9yPVwiXCIsdGhpcy5zdHlsZS5ocVN0YWZmTGVuZ3RoPTAsdGhpcy5zdHlsZS5pY29uPSEwLHRoaXMuc3R5bGUuaWNvbkNvbG9yPVwiXCIsdGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZD1cIlwiLHRoaXMuc3R5bGUuaW5mb0JhY2tncm91bmRGcmFtZT1cIlwiLHRoaXMuc3R5bGUuaW5mb0NvbG9yPVwiXCIsdGhpcy5zdHlsZS5pbmZvRmllbGRzPSEwLHRoaXMuc3R5bGUuaW5mb1NpemU9NDAsdGhpcy5zdHlsZS5tb25vQ29sb3I9XCJcIix0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj1cInJnYigyMzksIDIzOSwgMjM5KVwiLHRoaXMuc3R5bGUub3V0bGluZVdpZHRoPTAsdGhpcy5zdHlsZS5wYWRkaW5nPTAsdGhpcy5zdHlsZS5zaW1wbGVTdGF0dXNNb2RpZmllcj0hMSx0aGlzLnN0eWxlLnNpemU9MTAwLHRoaXMuc3R5bGUuc3F1YXJlPSExLHRoaXMuc3R5bGUuc3RhbmRhcmQ9XCJcIix0aGlzLnN0eWxlLnN0cm9rZVdpZHRoPTQsdGhpcy5zeW1ib2xBbmNob3I9e3g6NTAseTo1MH0sdGhpcy52YWxpZEljb249ITAsMDxhcmd1bWVudHMubGVuZ3RoJiZ0aGlzLnNldE9wdGlvbnMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG8oSSx0LEUpe3RoaXMub3B0aW9ucy5zaWRjPXRoaXMub3B0aW9ucy5zaWRjLnRvVXBwZXJDYXNlKCk7dmFyIFI9XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDApP3RoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgwKTpcIi1cIixlPVwiXCIhPXRoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgxKT90aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMSk6XCItXCIsQT1cIlwiIT10aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMik/dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDIpOlwiLVwiLEM9XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDMpP3RoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgzKTpcIi1cIixUPXQuZnVuY3Rpb25pZD1cIlwiIT10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCw2KT90aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCw2KTpcIi0tLS0tLVwiLFM9XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDEwKT90aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMTApOlwiLVwiLE49XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDExKT90aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMTEpOlwiLVwiO2lmKC0xPFtcIkhcIixcIlNcIixcIkpcIixcIktcIl0uaW5kZXhPZihlKSYmKHQuYWZmaWxpYXRpb249RS5hZmZpbGlhdGlvblswXSksLTE8W1wiRlwiLFwiQVwiLFwiRFwiLFwiTVwiXS5pbmRleE9mKGUpJiYodC5hZmZpbGlhdGlvbj1FLmFmZmlsaWF0aW9uWzFdKSwtMTxbXCJOXCIsXCJMXCJdLmluZGV4T2YoZSkmJih0LmFmZmlsaWF0aW9uPUUuYWZmaWxpYXRpb25bMl0pLC0xPFtcIlBcIixcIlVcIixcIkdcIixcIldcIixcIk9cIl0uaW5kZXhPZihlKSYmKHQuYWZmaWxpYXRpb249RS5hZmZpbGlhdGlvblszXSksLTE8W1wiUFwiLFwiQVwiXS5pbmRleE9mKEEpJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMF0pLC0xPFtcIkdcIixcIlpcIixcIkZcIixcIlhcIl0uaW5kZXhPZihBKSYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzFdKSwtMTxbXCJTXCJdLmluZGV4T2YoQSkmJih0LmRpbWVuc2lvbj1FLmRpbWVuc2lvblsyXSksLTE8W1wiVVwiXS5pbmRleE9mKEEpJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bM10pLFwiUFwiPT1BJiZcIk9cIiE9UiYmKHQuc3BhY2U9ITApLFwiT1wiPT1SJiYtMTxbXCJWXCIsXCJPXCIsXCJSXCJdLmluZGV4T2YoQSkmJih0LmFjdGl2aXR5PSEwKSxcIkdcIj09UiYmKHQuY29udHJvbE1lYXN1cmU9ITApLFwiSFwiPT1TJiYodC5pbnN0YWxsYXRpb249ITApLHRoaXMuc3R5bGUuZnJhbWUmJlwiQVwiPT1DJiYodC5ub3RwcmVzZW50PUkuX2Rhc2hBcnJheXMuYW50aWNpcGF0ZWQpLHRoaXMuc3R5bGUuZnJhbWUmJi0xPFtcIlBcIixcIkFcIixcIlNcIixcIkdcIixcIk1cIl0uaW5kZXhPZihlKSYmKHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLnBlbmRpbmcpLFwiQ1wiPT1DJiYodC5jb25kaXRpb249RS5zdGF0dXNbMl0pLFwiRFwiPT1DJiYodC5jb25kaXRpb249RS5zdGF0dXNbM10pLFwiWFwiPT1DJiYodC5jb25kaXRpb249RS5zdGF0dXNbNF0pLFwiRlwiPT1DJiYodC5jb25kaXRpb249RS5zdGF0dXNbNV0pLC0xPFtcIkdcIixcIldcIixcIkRcIixcIkxcIixcIk1cIixcIkpcIixcIktcIl0uaW5kZXhPZihlKSYmKHQuY29udGV4dD1FLmNvbnRleHRbMV0pLFwiT1wiPT1SJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMV0pLFwiRVwiPT1SJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMV0pLHQuYmFzZURpbWVuc2lvbj10LmRpbWVuc2lvbix0LmJhc2VBZmZpbGF0aW9uPXQuYWZmaWxpYXRpb24sXCJKXCI9PWUmJih0Lmpva2VyPSEwKSxcIktcIj09ZSYmKHQuZmFrZXI9ITApLCh0Lmpva2VyfHx0LmZha2VyKSYmKHQuYWZmaWxpYXRpb249RS5hZmZpbGlhdGlvblsxXSksXCJTXCI9PVImJlwiR1wiPT1BJiZcIkVcIj09VC5jaGFyQXQoMCkmJih0LmRpbWVuc2lvbj1FLmRpbWVuc2lvblsyXSksXCJJXCI9PVImJlwiR1wiPT1BJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMl0pLFwiRVwiPT1SJiYoXCJPXCI9PUEmJi0xPFtcIkFCLS0tLVwiLFwiQUUtLS0tXCIsXCJBRi0tLS1cIixcIkJCLS0tLVwiLFwiQ0ItLS0tXCIsXCJDQy0tLS1cIixcIkRCLS0tLVwiLFwiRERCLS0tXCIsXCJERUItLS1cIixcIkRGQi0tLVwiLFwiREdCLS0tXCIsXCJESEItLS1cIixcIkRJQi0tLVwiLFwiREpCLS0tXCIsXCJETEItLS1cIixcIkRNQi0tLVwiLFwiRE9CLS0tXCIsXCJFQS0tLS1cIixcIkVCLS0tLVwiLFwiRUMtLS0tXCIsXCJFRC0tLS1cIixcIkVFLS0tLVwiXS5pbmRleE9mKFQpfHxcIkZcIj09QSYmLTE8W1wiQkEtLS0tXCIsXCJNQS0tLS1cIixcIk1DLS0tLVwiXS5pbmRleE9mKFQpKSYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzJdKSwoLTE8W1wiRlwiLFwiR1wiLFwiQ1wiLFwiRFwiXS5pbmRleE9mKFMpfHxcIkhcIj09UyYmXCJCXCI9PU4pJiYodC5mZWludER1bW15PSEwKSwtMTxbXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCJdLmluZGV4T2YoUykmJih0LmhlYWRxdWFydGVycz0hMCksXCJHXCI9PUEmJlwiVUgtLS0tXCI9PVQmJih0LmhlYWRxdWFydGVycz0hMCksLTE8W1wiRVwiLFwiQlwiLFwiR1wiLFwiRFwiXS5pbmRleE9mKFMpJiYodC50YXNrRm9yY2U9ITApLFwiQVwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzExXSksXCJCXCI9PU4mJlwiSFwiIT1TJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzEyXSksXCJDXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMTNdKSxcIkRcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxNF0pLFwiRVwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzE1XSksXCJGXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMTZdKSxcIkdcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxN10pLFwiSFwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzE4XSksXCJJXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMjFdKSxcIkpcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsyMl0pLFwiS1wiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzIzXSksXCJMXCI9PU4mJlwiTlwiIT1TJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzI0XSksXCJNXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMjVdKSxcIk5cIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsyNl0pLFwiTVwiPT1TKXN3aXRjaChOKXtjYXNlXCJPXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVszMV07YnJlYWs7Y2FzZVwiUFwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbMzJdO2JyZWFrO2Nhc2VcIlFcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzMzXTticmVhaztjYXNlXCJSXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVszNF07YnJlYWs7Y2FzZVwiU1wiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbMzVdO2JyZWFrO2Nhc2VcIlRcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzM2XTticmVhaztjYXNlXCJVXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVs0MV07YnJlYWs7Y2FzZVwiVlwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbNDJdO2JyZWFrO2Nhc2VcIldcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzM3XTticmVhaztjYXNlXCJZXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVs1MV07YnJlYWs7Y2FzZVwiWlwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbNTJdO2JyZWFrO2RlZmF1bHQ6dC5tb2JpbGl0eT12b2lkIDB9aWYoXCJOXCI9PVMpc3dpdGNoKE4pe2Nhc2VcIlNcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzYxXTticmVhaztjYXNlXCJMXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVs2Ml07YnJlYWs7ZGVmYXVsdDp0Lm1vYmlsaXR5PXZvaWQgMH1yZXR1cm4oXCJBXCI9PUEmJlwiQ1wiPT1ULmNoYXJBdCgwKXx8XCJHXCI9PUEmJlwiRVZDXCI9PVQuc3Vic3RyaW5nKDAsMyl8fFwiU1wiPT1BJiZcIlhcIj09VC5jaGFyQXQoMCkpJiYodC5jaXZpbGlhbj0hMCksXCJaXCIhPUEmJlwiWFwiIT1BfHwoLTE8W1wiUFwiLFwiVVwiLFwiRlwiLFwiTlwiLFwiSFwiLFwiQVwiLFwiU1wiLFwiR1wiLFwiV1wiXS5pbmRleE9mKGUpJiYodC5kaW1lbnNpb25Vbmtub3duPSEwKSwtMTxbXCJGXCIsXCJBXCJdLmluZGV4T2YoZSkmJih0LmRpbWVuc2lvbj1cIlNlYVwiKSwtMTxbXCJEXCIsXCJMXCIsXCJNXCIsXCJKXCIsXCJLXCJdLmluZGV4T2YoZSkmJih0LmFmZmlsaWF0aW9uPVwibm9uZVwiKSksXCJTXCI9PUEmJi0xPFtcIk8tLS0tLVwiLFwiRUQtLS0tXCIsXCJFUC0tLS1cIixcIkVWLS0tLVwiLFwiWk0tLS0tXCIsXCJaTi0tLS1cIixcIlpJLS0tLVwiXS5pbmRleE9mKFQpJiYodC5mcmFtZT0hMSksXCJFXCI9PVImJlwiTlwiPT1BJiYtMTxbXCJBQS0tLS1cIixcIkFCLS0tLVwiLFwiQUMtLS0tXCIsXCJBRC0tLS1cIixcIkFFLS0tLVwiLFwiQUctLS0tXCIsXCJCQi0tLS1cIixcIkJDLS0tLVwiLFwiQkYtLS0tXCIsXCJCTS0tLS1cIixcIi1DLS0tLS1cIixcIkNBLS0tLVwiLFwiQ0ItLS0tXCIsXCJDQy0tLS1cIixcIkNELS0tLVwiLFwiQ0UtLS0tXCJdLmluZGV4T2YoVCkmJih0LmZyYW1lPSExKSxcIldcIj09UiYmXCJTXCI9PUEmJi0xPFtcIldTVkUtLVwiLFwiV1NELUxJXCIsXCJXU0ZHU09cIixcIldTR1JMLVwiLFwiV1NSLUxJXCIsXCJXU0RTTE1cIixcIldTUy1MSVwiLFwiV1NUTUgtXCIsXCJXU1QtRkNcIixcIldTVFNTLVwiXS5pbmRleE9mKFQpJiYodC5mcmFtZT0hMSksXCJVXCI9PUEmJi0xPFtcIldNLS0tLVwiLFwiV01ELS0tXCIsXCJXTUctLS1cIixcIldNR0QtLVwiLFwiV01HWC0tXCIsXCJXTUdFLS1cIixcIldNR0MtLVwiLFwiV01HUi0tXCIsXCJXTUdPLS1cIixcIldNTS0tLVwiLFwiV01NRC0tXCIsXCJXTU1YLS1cIixcIldNTUUtLVwiLFwiV01NQy0tXCIsXCJXTU1SLS1cIixcIldNTU8tLVwiLFwiV01GLS0tXCIsXCJXTUZELS1cIixcIldNRlgtLVwiLFwiV01GRS0tXCIsXCJXTUZDLS1cIixcIldNRlItLVwiLFwiV01GTy0tXCIsXCJXTU8tLS1cIixcIldNT0QtLVwiLFwiV01YLS0tXCIsXCJXTUUtLS1cIixcIldNQS0tLVwiLFwiV01DLS0tXCIsXCJXTVItLS1cIixcIldNQi0tLVwiLFwiV01CRC0tXCIsXCJXTU4tLS1cIixcIldNUy0tLVwiLFwiV01TWC0tXCIsXCJXTVNELS1cIixcIldELS0tLVwiLFwiV0RNLS0tXCIsXCJXRE1HLS1cIixcIldETU0tLVwiLFwiTkQtLS0tXCIsXCJFLS0tLS1cIixcIlYtLS0tLVwiLFwiWC0tLS0tXCIsXCJOQlMtLS1cIixcIk5CUi0tLVwiLFwiTkJXLS0tXCIsXCJOTS0tLS1cIixcIk5BLS0tLVwiXS5pbmRleE9mKFQpJiYodC5TVEQyNTI1Pyh0LmZpbGw9ITEsXCJXRC0tLS1cIj09VCYmKHQuZmlsbD0hMCksLTE8W1wiTkQtLS0tXCIsXCJOQlMtLS1cIixcIk5CUi0tLVwiLFwiTkJXLS0tXCIsXCJOTS0tLS1cIixcIk5BLS0tLVwiXS5pbmRleE9mKFQpJiYodC5maWxsPSEwLHQuZnJhbWU9ITEpKToodC5mcmFtZT0hMSwtMTxbXCJFLS0tLS1cIixcIlYtLS0tLVwiLFwiWC0tLS0tXCJdLmluZGV4T2YoVCkmJih0LmZpbGw9ITEsdC5mcmFtZT0hMSkpKSxcIldBU1wiIT10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMCwzKSYmXCJXT1NcIiE9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDAsMykmJlwiR1wiIT1SfHwodC5mcmFtZT0hMSksXCJHXCI9PVImJlwiT1wiPT1BJiYtMTxbXCJWXCIsXCJMXCIsXCJQXCIsXCJJXCJdLmluZGV4T2YoVC5jaGFyQXQoMCkpJiYodC5mcmFtZT0hMCx0LmRpbWVuc2lvbj1FLmRpbWVuc2lvblsxXSksdH1mdW5jdGlvbiBNKEksdCxFKXt2YXIgUj17fSxlPXt9O2Zvcih2YXIgQSBpbiBJLl9pY29uU0lEQy5sZXR0ZXIpSS5faWNvblNJREMubGV0dGVyLmhhc093blByb3BlcnR5KEEpJiZJLl9pY29uU0lEQy5sZXR0ZXJbQV0uY2FsbCh0aGlzLFIsZSx0LEUpO3JldHVybntpY29uczpSLGJib3g6ZX19ZnVuY3Rpb24gbihJLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBJKXtpZihBcnJheS5pc0FycmF5KEkpKXtmb3IodmFyIEU9MDtFPEkubGVuZ3RoO0UrKyluLmNhbGwodGhpcyxJW0VdLHQpO3JldHVybn1yZXR1cm4gSS5pY29uPSEwLFwidGV4dFwiPT1JLnR5cGUmJihJLmhhc093blByb3BlcnR5KFwiZm9udGZhbWlseVwiKXx8KEkuZm9udGZhbWlseT1cIkFyaWFsXCIpLEkuaGFzT3duUHJvcGVydHkoXCJmb250d2VpZ2h0XCIpfHwoSS5mb250d2VpZ2h0PVwiYm9sZFwiKSxJLmhhc093blByb3BlcnR5KFwidGV4dGFuY2hvclwiKXx8KEkudGV4dGFuY2hvcj1cIm1pZGRsZVwiKSxJLmhhc093blByb3BlcnR5KFwic3Ryb2tlXCIpfHwoSS5zdHJva2U9ITEpKSxJLmhhc093blByb3BlcnR5KFwiZmlsbFwiKXx8KEkuZmlsbD10KSx2b2lkKEkuaGFzT3duUHJvcGVydHkoXCJzdHJva2VcIil8fChJLnN0cm9rZT10KSl9fWZ1bmN0aW9uIGEoSSl7dmFyIHQ9NDIsRT0xMTU7cmV0dXJuIDE9PUkubGVuZ3RoJiYodD00NSxFPTExNSksMz09SS5sZW5ndGgmJih0PTM1LEU9MTEwKSw0PD1JLmxlbmd0aCYmKHQ9MzIsRT0xMTApLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpFLGZvbnRzaXplOnQsdGV4dDpJfX1mdW5jdGlvbiBsKEkpe3ZhciB0PTMwO3JldHVybiAzPT1JLmxlbmd0aCYmKHQ9MjUpLDQ8PUkubGVuZ3RoJiYodD0yMikse3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc3LGZvbnRzaXplOnQsdGV4dDpJfX1mdW5jdGlvbiByKEkpe3ZhciB0PTMwLEU9MTQ1O3JldHVybiAzPT1JLmxlbmd0aCYmKHQ9MjUsRT0xNDApLDQ8PUkubGVuZ3RoJiYodD0yMCxFPTEzNSkse3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OkUsZm9udHNpemU6dCx0ZXh0Okl9fWZ1bmN0aW9uIGkoSSx0LEUsUixlLEEpe3ZhciBDPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsVD10LmZyYW1lLFM9dC5udW1iZXJTSURDLE49RS5pY29uQ29sb3JbQ10sTz1FLmljb25GaWxsQ29sb3JbQ10sRz1FLm5vbmVbQ10sbz1FLmJsYWNrW0NdLE09e1wiU1AuSS5BTlRJU0FURUxMSVRFIFdFQVBPTlwiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMTAgMCw5IG0gMCwtMzQgMCw1IG0gMCwtOSAtMiw0IDQsMCB6IG0gLTEwLDkgMCwyMCAyMCwwIDAsLTIwIHogbSAyNSwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgLTI1LDAgMCwyMCAyNSwwIHogbSAwLDEwIDUsMCBtIDIwLDAgNSwwXCJ9LFwiU1AuSS5BU1RST05PTUlDQUwgU0FURUxMSVRFXCI6e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTcsOTAgLTEsLTkgOCwwIC0xLDkgbSAtNSwyMCAxLDkgMiwwIDEsLTkgbSA4LC0xMCA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sXCJTUC5JLkJJT1NBVEVMTElURVwiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4OSBjIDAsNC40IC0zLjYsOCAtOCw4IC00LjQsMCAtOCwtMy42IC04LC04IDAsLTQuNCAzLjYsLTggOCwtOCA0LjQsMCA4LDMuNiA4LDggeiBtIC0xMCwxMCAwLDIwIDIwLDAgMCwtMjAgeiBtIDI1LDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMzAsMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDAsMTAgNSwwIG0gMjAsMCA1LDAgbSAtMTcsLTI1IDE3LDEwIC0xLDIgLTE0LC03XCJ9LFwiU1AuSS5DQVBTVUxFXCI6e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTE1IGMgLTIsNSAzMiw1IDMwLDAgbCAtNSwtMzAgYyAtMSwtNSAtMTksLTUgLTIwLDAgelwifX07Zm9yKHZhciBpIGluIE1bXCJTUC5JLkNJVklMSUFOIEFTVFJPTk9NSUNBTCBTQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gOTcsOTAgLTEsLTkgOCwwIC0xLDkgbSAtNSwyMCAxLDkgMiwwIDEsLTkgbSA4LC0xMCA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuQ0lWSUxJQU4gQklPU0FURUxMSVRFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDEwMCw4OSBjIDAsNC40IC0zLjYsOCAtOCw4IC00LjQsMCAtOCwtMy42IC04LC04IDAsLTQuNCAzLjYsLTggOCwtOCA0LjQsMCA4LDMuNiA4LDggeiBtIC0xMCwxMCAwLDIwIDIwLDAgMCwtMjAgeiBtIDI1LDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMzAsMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDAsMTAgNSwwIG0gMjAsMCA1LDAgbSAtMTcsLTI1IDE3LDEwIC0xLDIgLTE0LC03XCJ9LE1bXCJTUC5JLkNJVklMSUFOIENBUFNVTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gODUsMTE1IGMgLTIsNSAzMiw1IDMwLDAgbCAtNSwtMzAgYyAtMSwtNSAtMTksLTUgLTIwLDAgelwifSxNW1wiU1AuSS5DSVZJTElBTiBDT01NVU5JQ0FUSU9OUyBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDkwIDAsOSBNIDc1LDgxIGMgMTYsMTIgMzQsMTIgNTAsMFwifV0sTVtcIlNQLkkuQ0lWSUxJQU4gRUFSVEggT0JTRVJWQVRJT04gU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSAxMDcsMTEzIGMgMCwzLjkgLTMuMSw3IC03LDcgLTMuOSwwIC03LC0zLjEgLTcsLTcgMCwtMy45IDMuMSwtNyA3LC03IDMuOSwwIDcsMy4xIDcsNyB6IG0gLTE3LC0zMyAwLDIwIDIwLDAgMCwtMjAgeiBtIDI1LDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMzAsMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDAsMTAgNSwwIG0gMjAsMCA1LDBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4OCwxMDcgYyA4LC05IDE2LC05IDI0LDBcIn1dLE1bXCJTUC5JLkNJVklMSUFOIE1JTklBVFVSSVpFRCBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDkxLjEsOTIgMCwxNiAxNy44LDAgMCwtMTYgeiBtIDIyLjIsMCAwLDE2IDIyLjIsMCAwLC0xNiB6IG0gLTI2LjYsMCAtMjIuMiwwIDAsMTYgMjIuMiwwIHogbSAwLDggNC40LDAgbSAxNy44LDAgNC40LDBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCwxMTkgMTAsLTkgMTAsOSBtIC0yMCwtMzggMTAsOSAxMCwtOSBtIDM1LDkgLTEwLDEwIDEwLDEwIE0gNTUsOTAgNjUsMTAwIDU1LDExMFwifV0sTVtcIlNQLkkuQ0lWSUxJQU4gTkFWSUdBVElPTkFMIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gMTEwLDEwOSA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4OCw4NyBjIDgsNiAxNiw2IDI0LDAgbSAtMjAsOCA4LC0xNCA4LDE0XCJ9XSxNW1wiU1AuSS5DSVZJTElBTiBPUkJJVEVSIFNIVVRUTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gODksMTE1IDYsLTI1IGMgMywtMTIgNywtMTIgMTAsMCBsIDYsMjUgLTEwLDAgLTEsNSAtMSwtNSB6XCJ9LE1bXCJTUC5JLkNJVklMSUFOIFNBVEVMTElURVwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSAxMTAsMTAwIDEwLDAgbSAtNDAsMCAxMCwwIG0gLTEwLC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDQwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMzAsMCAwLDIwIDIwLDAgMCwtMjAgelwifSxNW1wiU1AuSS5DSVZJTElBTiBTUEFDRSBTVEFUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDk3LjUsMTEyLjUgMCw3LjUgNSwwIDAsLTcuNSB6IG0gMCwtMzIuNSA1LDAgMCwyNi40IC01LDAgeiBtIC0wLjMsNy42IEMgODMuMyw4OC4yIDcyLjUsOTMuNSA3Mi41LDEwMCBjIDAsNi45IDEyLjMsMTIuNSAyNy41LDEyLjUgMTUuMiwwIDI3LjUsLTUuNiAyNy41LC0xMi41IDAsLTYuNSAtMTEsLTExLjkgLTI1LC0xMi40IGwgMCw1LjYgYyA5LjksMC40IDE3LjUsMy4yIDE3LjUsNi42IDAsMy43IC04LjksNi43IC0xOS44LDYuNyAtMTAuOSwwIC0xOS44LC0zIC0xOS44LC02LjcgMCwtMy40IDcuNCwtNi4xIDE3LjEsLTYuNiBsIDAsLTUuNiBjIC0wLjEsMCAtMC4yLC0wIC0wLjMsMCB6XCJ9LE1bXCJTUC5JLkNJVklMSUFOIFRFVEhFUkVEIFNBVEVMTElURVwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSAxMjAsODcgLTIwLDEyIG0gMzMsLTEyIGMgMCwzLjYgLTIuOSw2LjUgLTYuNSw2LjUgLTMuNiwwIC02LjUsLTIuOSAtNi41LC02LjUgMCwtMy42IDIuOSwtNi41IDYuNSwtNi41IDMuNiwwIDYuNSwyLjkgNi41LDYuNSB6IG0gLTIzLDIyIDUsMCBtIC0zMCwwIDUsMCBtIC01LC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDMwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMjUsMCAwLDIwIDIwLDAgMCwtMjAgelwifSxNW1wiU1AuSS5DSVZJTElBTiBXRUFUSEVSIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gMTEwLDEwOSA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojk1LGZvbnRzaXplOjI1LHRleHQ6XCJXWFwifV0sTVtcIlNQLkkuQ0lWSUxJQU5cIl09YShcIkNJVlwiKSxNW1wiU1AuSS5DSVZJTElBTlwiXS5maWxsPVJ8fFM/TzohVCYmTyxNW1wiU1AuSS5DSVZJTElBTlwiXS5zdHJva2U9byxNW1wiU1AuSS5DSVZJTElBTlwiXS5zdHJva2V3aWR0aD0zLE1bXCJTUC5JLkNPTU1VTklDQVRJT05TIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDEwOSA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsOTAgMCw5IE0gNzUsODEgYyAxNiwxMiAzNCwxMiA1MCwwXCJ9XSxNW1wiU1AuTTEuQ1lCRVJTUEFDRVwiXT1sKFwiQ1lCXCIpLE1bXCJTUC5NMi5DWUJFUlNQQUNFXCJdPXIoXCJDWUJcIiksTVtcIlNQLkkuRUFSVEggT0JTRVJWQVRJT04gU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDcsMTEzIGMgMCwzLjkgLTMuMSw3IC03LDcgLTMuOSwwIC03LC0zLjEgLTcsLTcgMCwtMy45IDMuMSwtNyA3LC03IDMuOSwwIDcsMy4xIDcsNyB6IG0gLTE3LC0zMyAwLDIwIDIwLDAgMCwtMjAgeiBtIDI1LDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMzAsMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDAsMTAgNSwwIG0gMjAsMCA1LDBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4OCwxMDcgYyA4LC05IDE2LC05IDI0LDBcIn1dLE1bXCJTUC5JLkZGLkNSRVdFRCBTUEFDRSBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAuMyw2Mi40IGMgLTEuOCwtMCAtNC4zLDMuNyAtNC41LDUuNCAtMi41LDExLjMgLTMuNCwyMy4xIC02LjIsMzMuNCAtMi45LDYuNyAtNi44LDguMyAtOS45LDEyLjEgLTMsMy42IC04LjUsMTAuNCAtOC41LDEwLjQgbCAwLDYuNCBjIDAsMCA1LjksMC45IDguOSwxLjIgMywwLjIgOC43LDAuMSA4LjcsMC4xIGwgMC4zLDQuMyA0LjMsMC4yIDAuMiwzLjEgNS44LDAgMC45LDYuNSAwLjksLTYuNCA1LjgsMCAwLjIsLTMuMSA0LjMsLTAuMiAwLjMsLTQuMyBjIDAsMCA1LjcsMC4xIDguNywtMC4xIDMsLTAuMiA4LjksLTEuMiA4LjksLTEuMiBsIDAsLTYuNCBjIDAsMCAtNS41LC02LjcgLTguNSwtMTAuMyAtMy4xLC0zLjggLTcsLTUuNCAtOS45LC0xMi4xIC0yLjgsLTEwLjQgLTMuNywtMjIuMiAtNi4yLC0zMy40IC0wLjMsLTIuOSAtMi43LC01LjUgLTQuNSwtNS41IHpcIn0sTVtcIlNQLkkuRkYuU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE1LDcwIDIwLDAgMCw1NSAtMjAsMCB6IG0gLTI1LDUgMjAsMCAwLDQ1IC0yMCwwIHogbSAtMjUsLTUgMjAsMCAwLDU1IC0yMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTgwLDEzNSBjMTAsLTEwIDMwLC0xMCA0MCwwIE0xMDAsMTI3IEwxMDAsMTAwIE03MCwxMDAgTDEzMCwxMDBcIn1dLE1bXCJTUC5JLkZGLlNQQUNFIFNUQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMy4xLDk3LjQgYyAtMTIuNCwwLjMgLTI1LjcsMC4xIC0zNi43LDYuNyAtNC4xLDIuMSAtOC41LDUuOSAtNy44LDExIDAuMiwzLjcgMC4zLDcuNCAwLjUsMTEuMSA2LjIsNy44IDE2LjYsMTAuNCAyNiwxMS44IDE0LDEuOCAyOC41LDEuMiA0Mi4xLC0zIDUuMiwtMS43IDEwLjQsLTQuMyAxNC4yLC04LjMgMC4zLC01LjEgLTAuMywtMTAuNCAwLjcsLTE1LjMgLTEuMiwtNC4zIC01LjksLTYuNCAtOS43LC04LjIgLTkuMiwtNCAtMTkuMywtNS40IC0yOS4yLC01LjYgeiBtIC0zLjIsOS42IGMgMTAuMSwtMC4yIDIwLjUsMS45IDI5LjEsNy40IC0xMyw4LjQgLTI5LjYsOS43IC00NC4zLDYuMSAtNC45LC0xLjMgLTkuNywtMy4zIC0xMy43LC02LjQgOC44LC00LjkgMTguOSwtNi45IDI4LjksLTcuMiB6XCIsZmlsbDpSP086R30se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6XCJibGFja1wiLGQ6XCJtIDk2LjksMTA3IGMgMC43LC04LjEgMS40LC0xNi4zIDIuMSwtMjQuNCBNIDg5LjMsMTIxLjggYyAzLjEsLTEzLjIgNi4yLC0yNi4zIDkuMywtMzkuNSA0LjksMTIuNyA5LjcsMjUuNSAxNC42LDM4LjIgbSAyNy44LC01LjMgYyAtMC4xLDMuOSAtMC4yLDcuOCAtMC4zLDExLjYgTSA1OC42LDExMy4zIGMgMC4yLDQuNSAwLjMsOSAwLjUsMTMuNSBtIC0wLjUsLTEuMiBjIDMuNSw2LjMgMTEsOC42IDE3LjYsMTAuNSAxNi40LDQuMSAzMy45LDMuOSA1MC4xLC0wLjggNS41LC0xLjggMTEuOCwtNC4zIDE0LjcsLTkuNyBtIDAuNSwtMTMgYyAtMC41LDUuNCAtNi4xLDguMSAtMTAuNSwxMCAtMTUuNCw1LjcgLTMyLjQsNi4xIC00OC41LDMuNiAtNy45LC0xLjQgLTE2LjMsLTMuNCAtMjIuMiwtOS4yIC0zLjYsLTMuOSAtMC45LC05LjYgMy40LC0xMS43IDguMywtNS4yIDE4LjMsLTYuNiAyNy45LC03LjUgMTMuNSwtMSAyNy41LDAgNDAuMiw1LjEgNC4yLDEuOCA5LjMsNC42IDkuNyw5LjcgeiBtIC0xMy4zLDEuNiBjIC04LjIsLTUuOSAtMTguOCwtNi44IC0yOC42LC03IC05LjUsMC4xIC0xOS41LDEuMiAtMjcuNiw2LjQgbCAtMC42LDAuNSBtIDU4LjksLTIuNiBjIC0wLjgsNC44IC02LjEsNi40IC0xMCw3LjggLTEzLjIsMy43IC0yNy40LDMuNyAtNDAuNSwtMCAtMy44LC0xLjIgLTguMSwtMi44IC05LjgsLTYuNyAtMC43LC00LjkgNSwtNy4xIDguNywtOC41IDEyLjcsLTQgMjYuNiwtNCAzOS41LC0xIDQuNCwxLjIgOS44LDIuOCAxMS45LDcuMyBsIDAuMSwwLjUgMCwwLjUgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOlwiYmxhY2tcIixzdHJva2U6ITEsZDpcIk0gNzUuMiw5My4xIEMgODguOSw4NyAxMDIuNiw4MC44IDExNi4zLDc0LjcgYyAyLjMsMS4zIDQuNywyLjYgNywzLjkgLTEzLjcsNiAtMjcuMywxMiAtNDEsMTggLTIuNCwtMS4yIC00LjgsLTIuMyAtNy4yLC0zLjUgelwifV0sTVtcIlNQLkkuTUFOVUFMIFRSQUNLXCJdPWEoXCJNQU5cIiksTVtcIlNQLkkuTUlMSVRBUllcIl09YShcIk1JTFwiKSxNW1wiU1AuSS5NSU5JQVRVUklaRUQgU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA5MS4xLDkyIDAsMTYgMTcuOCwwIDAsLTE2IHogbSAyMi4yLDAgMCwxNiAyMi4yLDAgMCwtMTYgeiBtIC0yNi42LDAgLTIyLjIsMCAwLDE2IDIyLjIsMCB6IG0gMCw4IDQuNCwwIG0gMTcuOCwwIDQuNCwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMTE5IDEwLC05IDEwLDkgbSAtMjAsLTM4IDEwLDkgMTAsLTkgbSAzNSw5IC0xMCwxMCAxMCwxMCBNIDU1LDkwIDY1LDEwMCA1NSwxMTBcIn1dLE1bXCJTUC5JLk5BVklHQVRJT05BTCBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODgsODcgYyA4LDYgMTYsNiAyNCwwIG0gLTIwLDggOCwtMTQgOCwxNFwifV0sTVtcIlNQLkkuT1JCSVRFUiBTSFVUVExFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg5LDExNSA2LC0yNSBjIDMsLTEyIDcsLTEyIDEwLDAgbCA2LDI1IC0xMCwwIC0xLDUgLTEsLTUgelwifSxNW1wiU1AuSS5SRS1FTlRSWSBWRUhJQ0xFXCJdPWEoXCJSVlwiKSxNW1wiU1AuSS5SRUNPTk5BSVNTQU5DRSBTQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA2LDEwMCA5LDIwIG0gLTIxLC0yMCAtOSwyMCBtIDE3LC0yMCAzLDIwIG0gLTcsLTIwIC0zLDIwIG0gMTUsLTMwIDUsMCBtIC0zMCwwIDUsMCBtIC01LC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDMwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMjUsMCAwLDIwIDIwLDAgMCwtMjAgelwifSxNW1wiU1AuSS5TQVRFTExJVEUsIEdFTkVSQUxcIl09YShcIlNBVFwiKSxNW1wiU1AuSS5TQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDEwMCAxMCwwIG0gLTQwLDAgMTAsMCBtIC0xMCwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSA0MCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuU1BBQ0UgTEFVTkNIIFZFSElDTEVcIl09YShcIlNMVlwiKSxNW1wiU1AuSS5TUEFDRSBTVEFUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk3LjUsMTEyLjUgMCw3LjUgNSwwIDAsLTcuNSB6IG0gMCwtMzIuNSA1LDAgMCwyNi40IC01LDAgeiBtIC0wLjMsNy42IEMgODMuMyw4OC4yIDcyLjUsOTMuNSA3Mi41LDEwMCBjIDAsNi45IDEyLjMsMTIuNSAyNy41LDEyLjUgMTUuMiwwIDI3LjUsLTUuNiAyNy41LC0xMi41IDAsLTYuNSAtMTEsLTExLjkgLTI1LC0xMi40IGwgMCw1LjYgYyA5LjksMC40IDE3LjUsMy4yIDE3LjUsNi42IDAsMy43IC04LjksNi43IC0xOS44LDYuNyAtMTAuOSwwIC0xOS44LC0zIC0xOS44LC02LjcgMCwtMy40IDcuNCwtNi4xIDE3LjEsLTYuNiBsIDAsLTUuNiBjIC0wLjEsMCAtMC4yLC0wIC0wLjMsMCB6XCJ9LE1bXCJTUC5JLlNQQUNFIFZFSElDTEVcIl09YShcIlNWXCIpLE1bXCJTUC5JLlRFVEhFUkVEIFNBVEVMTElURVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjAsODcgLTIwLDEyIG0gMzMsLTEyIGMgMCwzLjYgLTIuOSw2LjUgLTYuNSw2LjUgLTMuNiwwIC02LjUsLTIuOSAtNi41LC02LjUgMCwtMy42IDIuOSwtNi41IDYuNSwtNi41IDMuNiwwIDYuNSwyLjkgNi41LDYuNSB6IG0gLTIzLDIyIDUsMCBtIC0zMCwwIDUsMCBtIC01LC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDMwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMjUsMCAwLDIwIDIwLDAgMCwtMjAgelwifSxNW1wiU1AuSS5XRUFUSEVSIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDEwOSA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwMCxmb250c2l6ZToyNSx0ZXh0OlwiV1hcIn1dLE1bXCJTUC5NMS5HRU9TVEFUSU9OQVJZIE9SQklUIChHTylcIl09bChcIkdPXCIpLE1bXCJTUC5NMS5HRU9TWU5DSFJPTk9VUyBPUkJJVCAoR1NPKVwiXT1sKFwiR1NPXCIpLE1bXCJTUC5NMS5ISUdIIEVBUlRIIE9SQklUIChIRU8pXCJdPWwoXCJIRU9cIiksTVtcIlNQLk0xLkxPVyBFQVJUSCBPUkJJVCAoTEVPKVwiXT1sKFwiTEVPXCIpLE1bXCJTUC5NMS5NRURJVU0gRUFSVEggT1JCSVQgKE1FTylcIl09bChcIk1FT1wiKSxNW1wiU1AuTTEuTU9MTklZQSBPUkJJVCAoTU8pXCJdPWwoXCJNT1wiKSxNW1wiU1AuTTIuSU5GUkFSRURcIl09cihcIklSXCIpLE1bXCJTUC5NMi5PUFRJQ0FMXCJdPXIoXCJPXCIpLE1bXCJTUC5NMi5SQURBUlwiXT1yKFwiUlwiKSxNW1wiU1AuTTIuU0lHTkFMUyBJTlRFTExJR0VOQ0UgKFNJR0lOVClcIl09cihcIlNJXCIpLE1bXCJTUEFDRS5NSVNTSUxFLklDT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05MCwxMzUgbDAsLTEwIDUsLTUgMCwtNTUgNSwtNSA1LDUgMCw1NSA1LDUgMCwxMCAtMTAsLTEwIHpcIn0sKFJ8fFMpJiYoTVtcIlNQQUNFLk1JU1NJTEUuSUNPTlwiXS5maWxsPVQ/RS5maWxsQ29sb3IuVW5rbm93bjpFLmljb25GaWxsQ29sb3IuVW5rbm93biksTVtcIlNQQUNFLk1JU1NJTEUuTTEuQkFMTElTVElDXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9LE1bXCJTUEFDRS5NSVNTSUxFLk0xLklOVEVSQ0VQVE9SXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJJXCJ9LE1bXCJTUEFDRS5NSVNTSUxFLk0xLlNQQUNFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJQXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5BUlJPV1wiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIkFcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5HUk9VTkQtQkFTRUQgSU5URVJDRVBUT1IgKEdCSSlcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJHXCJ9LE1bXCJTUEFDRS5NSVNTSUxFLk0yLklOVEVSQ09OVElORU5UQUxcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJJXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiQ1wifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuSU5URVJNRURJQVRFIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLkxPTkcgUkFOR0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJMXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUlwifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuTUVESVVNIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiTVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLlBBVFJJT1RcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJQXCJ9LE1bXCJTUEFDRS5NSVNTSUxFLk0yLlNIT1JUIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLlNQQUNFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlBcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLlNUQU5EQVJEIE1JU1NJTEUgLSAzIChTTS0zKVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCIzXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gVEVSTUlOQUwgUEhBU0UgKFNNLVQpXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlRcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLlRFUk1JTkFMIEhJR0gtQUxUSVRVREUgQVJFQSBERUZFTlNFIChUSEFBRClcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJUXCJ9LE1bXCJTUEFDRS5NSVNTSUxFLk0yLkNMT1NFIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiQ1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLkRFQlJJU1wiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIkRcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5VTktOT1dOXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiVVwifSxNW1wiU1BBQ0UuUExBTkVUIExBTkRFUlwiXT1hKFwiUExcIiksTSlNLmhhc093blByb3BlcnR5KGkpJiYoSS5oYXNPd25Qcm9wZXJ0eShpKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK2kpLG4uY2FsbCh0aGlzLE1baV0sTiksSVtpXT1NW2ldKX1zLnNldENvbG9yTW9kZT1mdW5jdGlvbihJLHQpe3JldHVybiB0aGlzLl9jb2xvck1vZGVzW0ldPXt9LHRoaXMuX2NvbG9yTW9kZXNbSV0uSG9zdGlsZT10Lkhvc3RpbGUsdGhpcy5fY29sb3JNb2Rlc1tJXS5GcmllbmQ9dC5GcmllbmQsdGhpcy5fY29sb3JNb2Rlc1tJXS5OZXV0cmFsPXQuTmV1dHJhbCx0aGlzLl9jb2xvck1vZGVzW0ldLlVua25vd249dC5Vbmtub3duLHRoaXMuX2NvbG9yTW9kZXNbSV0uQ2l2aWxpYW49dC5DaXZpbGlhbix0aGlzLl9jb2xvck1vZGVzW0ldfSxzLmFkZFN5bWJvbFBhcnQ9ZnVuY3Rpb24oSSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgSSl7dmFyIHQ9cy5nZXRTeW1ib2xQYXJ0cygpOy0xPT10LmluZGV4T2YoSSkmJnMuc2V0U3ltYm9sUGFydHModC5jb25jYXQoSSkpfXJldHVybiBzfSxzLmdldFN5bWJvbFBhcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bWJvbFBhcnRzLnNsaWNlKDApfSxzLnNldFN5bWJvbFBhcnRzPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9zeW1ib2xQYXJ0cz1JLHN9LHMucmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIEkgaW4gdGhpcy5fYnJva2VuUGF0aDJEPXZvaWQgMCx0aGlzLl9jb2xvck1vZGVzPXt9LHQpcy5zZXRDb2xvck1vZGUoSSx0W0ldKTt0aGlzLl9kYXNoQXJyYXlzPXtwZW5kaW5nOlwiNCw0XCIsYW50aWNpcGF0ZWQ6XCI4LDEyXCIsZmVpbnREdW1teTpcIjgsOFwifSx0aGlzLl9nZXRJY29ucz17fSx0aGlzLl9nZXRNZXRhZGF0YT17fSx0aGlzLl9ocVN0YWZmTGVuZ3RoPTEwMCx0aGlzLl9pY29uQ2FjaGU9e30sdGhpcy5faWNvblBhcnRzPVtdLHRoaXMuX2xhYmVsQ2FjaGU9e30sdGhpcy5fbGFiZWxPdmVycmlkZXM9e30sdGhpcy5faWNvblNJREM9e30sdGhpcy5faWNvblNJREMubGV0dGVyPVtdLHRoaXMuX2ljb25TSURDLm51bWJlcj1bXSx0aGlzLl9TVEQyNTI1PSEwLHRoaXMuX3N2Z05TPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix0aGlzLl9zeW1ib2xQYXJ0cz1bXSxzLmFkZFN5bWJvbFBhcnQoRSkscy5hZGRTeW1ib2xQYXJ0KFIpLHMuYWRkU3ltYm9sUGFydChlKSxzLmFkZFN5bWJvbFBhcnQoQSkscy5hZGRTeW1ib2xQYXJ0KEMpLHMuYWRkU3ltYm9sUGFydChUKSxzLmFkZFN5bWJvbFBhcnQoUykscy5hZGRTeW1ib2xQYXJ0KE4pfSxzLnJlc2V0KCkscy5CQm94PUkscy5Db2xvck1vZGU9ZnVuY3Rpb24oSSx0LEUsUixlKXt2YXIgQT17fTtyZXR1cm4gQS5DaXZpbGlhbj1JLEEuRnJpZW5kPXQsQS5Ib3N0aWxlPUUsQS5OZXV0cmFsPVIsQS5Vbmtub3duPWUsQX0scy5zZXRCcm9rZW5QYXRoMkQ9ZnVuY3Rpb24oSSl7cy5fYnJva2VuUGF0aDJEPUl9LHMuX2dldEljb25QYXJ0cz1mdW5jdGlvbihJLHQsRSxSLGUpe3ZhciBBPXt9O2Zvcih2YXIgQyBpbiB0aGlzLl9pY29uUGFydHMpdGhpcy5faWNvblBhcnRzLmhhc093blByb3BlcnR5KEMpJiZ0aGlzLl9pY29uUGFydHNbQ10uY2FsbCh0aGlzLEEsSSx0LEUsUixlKTtyZXR1cm4gQX0scy5fc2NhbGU9ZnVuY3Rpb24oSSx0KXtyZXR1cm57dHlwZTpcInRyYW5zbGF0ZVwiLHg6MTAwLTEwMCpJLHk6MTAwLTEwMCpJLGRyYXc6W3t0eXBlOlwic2NhbGVcIixmYWN0b3I6SSxkcmF3Olt0XX1dfX0scy5fdHJhbnNsYXRlPWZ1bmN0aW9uKEksdCxFKXtyZXR1cm57dHlwZTpcInRyYW5zbGF0ZVwiLHg6SSx5OnQsZHJhdzpbRV19fSxzLmFkZEljb25QYXJ0cz1mdW5jdGlvbihJKXtBcnJheS5pc0FycmF5KEkpfHwoST1bSV0pO2Zvcih2YXIgdD0wO3Q8SS5sZW5ndGg7dCsrKVwiZnVuY3Rpb25cIj09dHlwZW9mIElbdF0mJi0xPT10aGlzLl9pY29uUGFydHMuaW5kZXhPZihJW3RdKSYmKHRoaXMuX2ljb25QYXJ0cz10aGlzLl9pY29uUGFydHMuY29uY2F0KElbdF0pKTtyZXR1cm4gc30scy5hZGRMYWJlbE92ZXJyaWRlcz1mdW5jdGlvbihJLHQpe3JldHVybiB0aGlzLl9sYWJlbENhY2hlPXt9LFwiZnVuY3Rpb25cIj09dHlwZW9mIEkmJih0aGlzLl9sYWJlbE92ZXJyaWRlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX2xhYmVsT3ZlcnJpZGVzW3RdPVtdKSx0aGlzLl9sYWJlbE92ZXJyaWRlc1t0XT10aGlzLl9sYWJlbE92ZXJyaWRlc1t0XS5jb25jYXQoSSkpLHN9LHMuYWRkSWNvbnM9ZnVuY3Rpb24oSSl7dGhpcy5faWNvbkNhY2hlPXt9LEFycmF5LmlzQXJyYXkoSSl8fChJPVtJXSk7Zm9yKHZhciB0PTA7dDxJLmxlbmd0aDt0KyspSVt0XS5oYXNPd25Qcm9wZXJ0eShcImdldE1ldGFkYXRhXCIpJiYocy5fZ2V0TWV0YWRhdGFbSVt0XS50eXBlXT1JW3RdLmdldE1ldGFkYXRhKSxJW3RdLmhhc093blByb3BlcnR5KFwiZ2V0SWNvbnNcIikmJihzLl9nZXRJY29uc1tJW3RdLnR5cGVdPUlbdF0uZ2V0SWNvbnMpLElbdF0uaGFzT3duUHJvcGVydHkoXCJpY29uUGFydHNcIikmJnMuYWRkSWNvblBhcnRzKElbdF0uaWNvblBhcnRzKSxJW3RdLmhhc093blByb3BlcnR5KFwibGFiZWxzXCIpJiZzLmFkZExhYmVsT3ZlcnJpZGVzKElbdF0ubGFiZWxzLElbdF0udHlwZSksSVt0XS5oYXNPd25Qcm9wZXJ0eShcImljb25zXCIpJiZzLmFkZFNJRENpY29ucyhJW3RdLmljb25zLElbdF0udHlwZSl9LHMuYWRkU0lEQ2ljb25zPWZ1bmN0aW9uKEksdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgSSYmLTE9PXRoaXMuX2ljb25TSURDW3RdLmluZGV4T2YoSSkmJih0aGlzLl9pY29uU0lEQ1t0XT10aGlzLl9pY29uU0lEQ1t0XS5jb25jYXQoSSkpLHN9LHMuZ2V0Q29sb3JNb2RlPWZ1bmN0aW9uKEkpe3ZhciB0PXRoaXMuX2NvbG9yTW9kZXNbSV07cmV0dXJuIG5ldyBzLkNvbG9yTW9kZSh0LkNpdmlsaWFuLHQuRnJpZW5kLHQuSG9zdGlsZSx0Lk5ldXRyYWwsdC5Vbmtub3duKX0scy5nZXREYXNoQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rhc2hBcnJheXN9LHMuZ2V0SHFTdGFmZkxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ocVN0YWZmTGVuZ3RofSxzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJzaW9ufSxzLm91dGxpbmU9ZnVuY3Rpb24oSSx0LEUsUil7cmV0dXJuIGZ1bmN0aW9uIEkodCxFLFIsZSl7dmFyIEE7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIEMgaW4gQT1bXSx0KUEucHVzaChJKHRbQ10sRSxSLGUpKTtlbHNle2Zvcih2YXIgVCBpbiBBPXt9LHQpLTE9PVtcImZpbGxcIixcImZpbGxvcGFjaXR5XCJdLmluZGV4T2YoVCkmJihBW1RdPXRbVF0pO2lmKFwidHJhbnNsYXRlXCI9PXQudHlwZXx8XCJyb3RhdGVcIj09dC50eXBlfHxcInNjYWxlXCI9PXQudHlwZSlmb3IodmFyIFMgaW4gQS5kcmF3PVtdLHQuZHJhdylBLmRyYXcucHVzaChJKHQuZHJhd1tTXSxFLFIsZSkpO2Vsc2UgQS5zdHJva2V3aWR0aD0hMSE9PUEuc3Ryb2tlP051bWJlcihBLnN0cm9rZXdpZHRofHxSKSsyKkU6MipFLEEuc3Ryb2tlPWUsQS5maWxsPSExLEEubGluZWNhcD1cInJvdW5kXCJ9cmV0dXJuIEF9KEksdCxFLFIpfSxzLnNldERhc2hBcnJheXM9ZnVuY3Rpb24oSSx0LEUpe3JldHVybiB0aGlzLl9kYXNoQXJyYXlzLnBlbmRpbmc9SSx0aGlzLl9kYXNoQXJyYXlzLmFudGljaXBhdGVkPXQsdGhpcy5fZGFzaEFycmF5cy5mZWludER1bW15PUUsdGhpcy5fZGFzaEFycmF5c30scy5zZXRIcVN0YWZmTGVuZ3RoPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9ocVN0YWZmTGVuZ3RoPUksdGhpcy5faHFTdGFmZkxlbmd0aH0scy5zZXRTdGFuZGFyZD1mdW5jdGlvbihJKXtyZXR1cm5cIjI1MjVcIj09ST90aGlzLl9TVEQyNTI1PSEwOlwiQVBQNlwiPT1JJiYhKHRoaXMuX1NURDI1MjU9ITEpfSxzLl9zeW1ib2xHZW9tZXRyaWVzPU8sRy5wcm90b3R5cGUuYXNDYW52YXM9ZnVuY3Rpb24oSSl7aWYodm9pZCAwPT09cy5fYnJva2VuUGF0aDJEKWlmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBQYXRoMkQpcy5zZXRCcm9rZW5QYXRoMkQoITApO2Vsc2V7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTt0LndpZGh0PTEsdC5oZWlnaHQ9MTt2YXIgRT10LmdldENvbnRleHQoXCIyZFwiKSxSPW5ldyBQYXRoMkQoXCJNMCAwIGggMTAgdiAxMCBoIC0xMCBaXCIpO0UuZmlsbChSKTt2YXIgZT1FLmdldEltYWdlRGF0YSgwLDAsMSwxKS5kYXRhLmpvaW4oKTtzLnNldEJyb2tlblBhdGgyRCghKFwiMCwwLDAsMjU1XCI9PWUpKX12YXIgQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO0k9SXx8MSxBLndpZHRoPXRoaXMud2lkdGgqSSxBLmhlaWdodD10aGlzLmhlaWdodCpJO3ZhciBDPUEuZ2V0Q29udGV4dChcIjJkXCIpO3JldHVybiBDLnNjYWxlKEkqdGhpcy5zdHlsZS5zaXplLzEwMCxJKnRoaXMuc3R5bGUuc2l6ZS8xMDApLEMudHJhbnNsYXRlKC0odGhpcy5iYm94LngxLXRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgtdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpLC0odGhpcy5iYm94LnkxLXRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgtdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpKSx0aGlzLmNhbnZhc0RyYXcuY2FsbCh0aGlzLEMsdGhpcy5kcmF3SW5zdHJ1Y3Rpb25zKSxBfSxHLnByb3RvdHlwZS5jYW52YXNEcmF3PWZ1bmN0aW9uIEkodCxFKXtmb3IodmFyIFI9MDtSPEUubGVuZ3RoO1IrKylpZihBcnJheS5pc0FycmF5KEVbUl0pKUVbUl0ubGVuZ3RoJiZJLmNhbGwodGhpcyx0LEVbUl0pO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIEVbUl0pe3N3aXRjaCh0LmxpbmVXaWR0aD1FW1JdLnN0cm9rZXdpZHRofHx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLHZvaWQgMCE9PUVbUl0uc3Ryb2tlJiYoRVtSXS5zdHJva2U/dC5zdHJva2VTdHlsZT1FW1JdLnN0cm9rZTp0LnN0cm9rZVN0eWxlPVwicmdiYSgwLDAsMCwwKVwiKSxFW1JdLnN0cm9rZWRhc2hhcnJheT90LnNldExpbmVEYXNoKEVbUl0uc3Ryb2tlZGFzaGFycmF5LnNwbGl0KFwiLFwiKSk6MCE9dC5nZXRMaW5lRGFzaCgpLmxlbmd0aCYmdC5zZXRMaW5lRGFzaChbXSksRVtSXS5saW5lY2FwJiYodC5saW5lQ2FwPUVbUl0ubGluZWNhcCx0LmxpbmVKb2luPUVbUl0ubGluZWNhcCksRVtSXS5maWxsJiYodC5maWxsU3R5bGU9RVtSXS5maWxsKSxFW1JdLmZpbGx8fCh0LmZpbGxTdHlsZT1cInJnYmEoMCwwLDAsMClcIiksdm9pZCAwIT09RVtSXS5maWxsb3BhY2l0eSYmKHQuZ2xvYmFsQWxwaGE9RVtSXS5maWxsb3BhY2l0eSksRVtSXS50eXBlKXtjYXNlXCJwYXRoXCI6aWYocy5fYnJva2VuUGF0aDJEKVwiZnVuY3Rpb25cIj09dHlwZW9mIHMuUGF0aDJEPyhzLlBhdGgyRCh0LEVbUl0uZCksKHZvaWQgMD09PUVbUl0uZmlsbHx8dm9pZCAwIT09RVtSXS5maWxsJiZFW1JdLmZpbGwpJiZ0LmZpbGwoKSwxIT10Lmdsb2JhbEFscGhhJiYodC5nbG9iYWxBbHBoYT0xKSwodm9pZCAwPT09RVtSXS5zdHJva2V8fHZvaWQgMCE9PUVbUl0uc3Ryb2tlJiZFW1JdLnN0cm9rZSkmJnQuc3Ryb2tlKCkpOmNvbnNvbGUud2FybihcIm1zLlBhdGgyRCgpIGlzIG5vdCBwcmVzZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGxvYWQgZnVuY3Rpb25hbGl0eSBmb3IgdXNpbmcgQ2FudmFzIGluIG9sZGVyIHZlcnNpb24gb2YgSW50ZXJuZXQgRXhwbG9yZXIuXCIpO2Vsc2V7dmFyIGU9bmV3IFBhdGgyRChFW1JdLmQpO0VbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmKHQuc2F2ZSgpLHQuY2xpcChuZXcgUGF0aDJEKEVbUl0uY2xpcFBhdGgpLFwibm9uemVyb1wiKSksKHZvaWQgMD09PUVbUl0uZmlsbHx8dm9pZCAwIT09RVtSXS5maWxsJiZFW1JdLmZpbGwpJiZ0LmZpbGwoZSksRVtSXS5oYXNPd25Qcm9wZXJ0eShcImNsaXBQYXRoXCIpJiZ0LnJlc3RvcmUoKSwxIT10Lmdsb2JhbEFscGhhJiYodC5nbG9iYWxBbHBoYT0xKSwodm9pZCAwPT09RVtSXS5zdHJva2V8fHZvaWQgMCE9PUVbUl0uc3Ryb2tlJiZFW1JdLnN0cm9rZSkmJnQuc3Ryb2tlKGUpfWJyZWFrO2Nhc2VcImNpcmNsZVwiOkVbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmKHQuc2F2ZSgpLHQuY2xpcChuZXcgUGF0aDJEKEVbUl0uY2xpcFBhdGgpLFwibm9uemVyb1wiKSksdC5iZWdpblBhdGgoKSx0LmFyYyhFW1JdLmN4LEVbUl0uY3ksRVtSXS5yLDAsMipNYXRoLlBJLCExKSwodm9pZCAwPT09RVtSXS5maWxsfHx2b2lkIDAhPT1FW1JdLmZpbGwmJkVbUl0uZmlsbCkmJnQuZmlsbCgpLEVbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmdC5yZXN0b3JlKCksKHZvaWQgMD09PUVbUl0uc3Ryb2tlfHx2b2lkIDAhPT1FW1JdLnN0cm9rZSYmRVtSXS5zdHJva2UpJiZ0LnN0cm9rZSgpO2JyZWFrO2Nhc2VcInRleHRcIjp0LmZvbnQ9KHZvaWQgMCE9PUVbUl0uZm9udHdlaWdodD9FW1JdLmZvbnR3ZWlnaHQrXCIgXCI6XCJcIikrRVtSXS5mb250c2l6ZStcInB4IFwiK0VbUl0uZm9udGZhbWlseSx0LnRleHRBbGlnbj1cIm1pZGRsZVwiPT1FW1JdLnRleHRhbmNob3I/XCJjZW50ZXJcIjpFW1JdLnRleHRhbmNob3IsdC5maWxsVGV4dChFW1JdLnRleHQsRVtSXS54LEVbUl0ueSksRVtSXS5zdHJva2UmJnQuc3Ryb2tlVGV4dChFW1JdLnRleHQsRVtSXS54LEVbUl0ueSk7YnJlYWs7Y2FzZVwidHJhbnNsYXRlXCI6dC5zYXZlKCksdC50cmFuc2xhdGUoRVtSXS54LEVbUl0ueSksSS5jYWxsKHRoaXMsdCxFW1JdLmRyYXcpLHQucmVzdG9yZSgpO2JyZWFrO2Nhc2VcInJvdGF0ZVwiOnZhciBBPUVbUl0ueCxDPUVbUl0ueTt0LnNhdmUoKSx0LnRyYW5zbGF0ZShBLEMpLHQucm90YXRlKEVbUl0uZGVncmVlKk1hdGguUEkvMTgwKSx0LnRyYW5zbGF0ZSgtQSwtQyksSS5jYWxsKHRoaXMsdCxFW1JdLmRyYXcpLHQucmVzdG9yZSgpO2JyZWFrO2Nhc2VcInNjYWxlXCI6dC5zYXZlKCksdC5zY2FsZShFW1JdLmZhY3RvcixFW1JdLmZhY3RvciksSS5jYWxsKHRoaXMsdCxFW1JdLmRyYXcpLHQucmVzdG9yZSgpfUVbUl0ubGluZWNhcCYmKHQubGluZUNhcD1cImJ1dHRcIix0LmxpbmVKb2luPVwibWl0ZXJcIiksdm9pZCAwIT09RVtSXS5maWxsb3BhY2l0eSYmKHQuZ2xvYmFsQWxwaGE9MSl9fSxHLnByb3RvdHlwZS5hc0RPTT1mdW5jdGlvbigpe3ZhciBJPWRvY3VtZW50LHQ9KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0aGlzLmFzU1ZHKCksXCJ0ZXh0L3htbFwiKTtyZXR1cm4gSS5hZG9wdE5vZGUodC5kb2N1bWVudEVsZW1lbnQpfSxHLnByb3RvdHlwZS5hc1NWRz1mdW5jdGlvbigpe3ZhciBJPSc8c3ZnIHhtbG5zPVwiJytzLl9zdmdOUysnXCIgdmVyc2lvbj1cIjEuMlwiIGJhc2VQcm9maWxlPVwidGlueVwiIHdpZHRoPVwiJyt0aGlzLndpZHRoKydcIiBoZWlnaHQ9XCInK3RoaXMuaGVpZ2h0KydcIiB2aWV3Qm94PVwiJysodGhpcy5iYm94LngxLXRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgtdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpK1wiIFwiKyh0aGlzLmJib3gueTEtdGhpcy5zdHlsZS5zdHJva2VXaWR0aC10aGlzLnN0eWxlLm91dGxpbmVXaWR0aCkrXCIgXCIrdGhpcy5iYXNlV2lkdGgrXCIgXCIrdGhpcy5iYXNlSGVpZ2h0KydcIj4nO3JldHVybiBJKz1mdW5jdGlvbiBJKHQpe2Zvcih2YXIgRT1cIlwiLFI9MDtSPHQubGVuZ3RoO1IrKylpZihBcnJheS5pc0FycmF5KHRbUl0pKXRbUl0ubGVuZ3RoJiYoRSs9SS5jYWxsKHRoaXMsdFtSXSkpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHRbUl0pe3ZhciBlPVwiXCI7aWYoXCJzdmdcIj09dFtSXS50eXBlKWUrPXRbUl0uc3ZnO2Vsc2V7c3dpdGNoKHRbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmKGUrPSc8Y2xpcFBhdGggaWQ9XCJjbGlwXCI+JyxlKz0nPHBhdGggZD1cIicrdFtSXS5jbGlwUGF0aCsnXCIgY2xpcC1ydWxlPVwibm9uemVyb1wiIC8+JyxlKz1cIjwvY2xpcFBhdGg+XCIpLHRbUl0udHlwZSl7Y2FzZVwicGF0aFwiOmUrPSc8cGF0aCBkPVwiJyt0W1JdLmQrJ1wiICcsdFtSXS5oYXNPd25Qcm9wZXJ0eShcImNsaXBQYXRoXCIpJiYoZSs9J2NsaXAtcGF0aD1cInVybCgjY2xpcClcIiAnKTticmVhaztjYXNlXCJjaXJjbGVcIjplKz0nPGNpcmNsZSBjeD1cIicrdFtSXS5jeCsnXCIgY3k9XCInK3RbUl0uY3krJ1wiIHI9XCInK3RbUl0ucisnXCIgJyx0W1JdLmhhc093blByb3BlcnR5KFwiY2xpcFBhdGhcIikmJihlKz0nY2xpcC1wYXRoPVwidXJsKCNjbGlwKVwiICcpO2JyZWFrO2Nhc2VcInRleHRcIjplKz0nPHRleHQgeD1cIicrdFtSXS54KydcIiB5PVwiJyt0W1JdLnkrJ1wiIHRleHQtYW5jaG9yPVwiJyt0W1JdLnRleHRhbmNob3IrJ1wiIGZvbnQtc2l6ZT1cIicrdFtSXS5mb250c2l6ZSsnXCIgZm9udC1mYW1pbHk9XCInK3RbUl0uZm9udGZhbWlseSsnXCIgJyx0W1JdLmZvbnR3ZWlnaHQmJihlKz0nZm9udC13ZWlnaHQ9XCInK3RbUl0uZm9udHdlaWdodCsnXCIgJyk7YnJlYWs7Y2FzZVwidHJhbnNsYXRlXCI6ZSs9JzxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgnK3RbUl0ueCtcIixcIit0W1JdLnkrJylcIiAnO2JyZWFrO2Nhc2VcInJvdGF0ZVwiOmUrPSc8ZyB0cmFuc2Zvcm09XCJyb3RhdGUoJyt0W1JdLmRlZ3JlZStcIixcIit0W1JdLngrXCIsXCIrdFtSXS55KycpXCIgJzticmVhaztjYXNlXCJzY2FsZVwiOmUrPSc8ZyB0cmFuc2Zvcm09XCJzY2FsZSgnK3RbUl0uZmFjdG9yKycpXCIgJ31zd2l0Y2godm9pZCAwIT09dFtSXS5zdHJva2UmJihlKz0nc3Ryb2tlLXdpZHRoPVwiJysodFtSXS5zdHJva2V3aWR0aHx8dGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrJ1wiICcsdFtSXS5zdHJva2VkYXNoYXJyYXkmJihlKz0nc3Ryb2tlLWRhc2hhcnJheT1cIicrdFtSXS5zdHJva2VkYXNoYXJyYXkrJ1wiICcpLHRbUl0ubGluZWNhcCYmKGUrPSdzdHJva2UtbGluZWNhcD1cIicrdFtSXS5saW5lY2FwKydcIiAnLGUrPSdzdHJva2UtbGluZWpvaW49XCInK3RbUl0ubGluZWNhcCsnXCIgJyksdFtSXS5zdHJva2U/ZSs9J3N0cm9rZT1cIicrdFtSXS5zdHJva2UrJ1wiICc6ZSs9J3N0cm9rZT1cIm5vbmVcIiAnKSx2b2lkIDAhPT10W1JdLmZpbGwmJihlKz0nZmlsbD1cIicrKHRbUl0uZmlsbD90W1JdLmZpbGw6XCJub25lXCIpKydcIiAnKSx2b2lkIDAhPT10W1JdLmZpbGxvcGFjaXR5JiYoZSs9J2ZpbGwtb3BhY2l0eT1cIicrdFtSXS5maWxsb3BhY2l0eSsnXCIgJyksZSs9XCI+XCIsdFtSXS50eXBlKXtjYXNlXCJwYXRoXCI6ZSs9XCI8L3BhdGg+XCI7YnJlYWs7Y2FzZVwiY2lyY2xlXCI6ZSs9XCI8L2NpcmNsZT5cIjticmVhaztjYXNlXCJ0ZXh0XCI6ZSs9U3RyaW5nKHRbUl0udGV4dCkucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpK1wiPC90ZXh0PlwiO2JyZWFrO2Nhc2VcInRyYW5zbGF0ZVwiOmNhc2VcInJvdGF0ZVwiOmNhc2VcInNjYWxlXCI6ZSs9SS5jYWxsKHRoaXMsdFtSXS5kcmF3KSxlKz1cIjwvZz5cIn19RSs9ZX1yZXR1cm4gRX0uY2FsbCh0aGlzLHRoaXMuZHJhd0luc3RydWN0aW9ucyksSSs9XCI8L3N2Zz5cIix0aGlzLlhNTD1JfSxHLnByb3RvdHlwZS5nZXRBbmNob3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zeW1ib2xBbmNob3J9LEcucHJvdG90eXBlLmdldENvbG9ycz1mdW5jdGlvbigpe3ZhciBJPVwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLmNvbG9yTW9kZT90aGlzLnN0eWxlLmNvbG9yTW9kZTpzLmdldENvbG9yTW9kZSh0aGlzLnN0eWxlLmNvbG9yTW9kZSksdD1cIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5mcmFtZUNvbG9yP3RoaXMuc3R5bGUuZnJhbWVDb2xvcjpzLmdldENvbG9yTW9kZShcIkZyYW1lQ29sb3JcIiksRT1cIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5pY29uQ29sb3I/dGhpcy5zdHlsZS5pY29uQ29sb3I6cy5nZXRDb2xvck1vZGUoXCJJY29uQ29sb3JcIiksUj1JLGU9cy5nZXRDb2xvck1vZGUoXCJCbGFja1wiKSxBPXMuZ2V0Q29sb3JNb2RlKFwiV2hpdGVcIiksQz1zLmdldENvbG9yTW9kZShcIk9mZldoaXRlXCIpLFQ9cy5nZXRDb2xvck1vZGUoXCJOb25lXCIpO3RoaXMuc3R5bGUuY2l2aWxpYW5Db2xvciYmdGhpcy5tZXRhZGF0YS5jaXZpbGlhbiYmKEkuRnJpZW5kPUkuTmV1dHJhbD1JLlVua25vd249SS5DaXZpbGlhbix0LkZyaWVuZD10Lk5ldXRyYWw9dC5Vbmtub3duPXQuQ2l2aWxpYW4sRS5GcmllbmQ9RS5OZXV0cmFsPUUuVW5rbm93bj1FLkNpdmlsaWFuKSwodGhpcy5tZXRhZGF0YS5qb2tlcnx8dGhpcy5tZXRhZGF0YS5mYWtlcikmJihJLkZyaWVuZD1JLkhvc3RpbGUsdC5GcmllbmQ9dC5Ib3N0aWxlLEUuRnJpZW5kPUUuSG9zdGlsZSksXCJcIiE9dGhpcy5zdHlsZS5tb25vQ29sb3ImJih0LkZyaWVuZD10Lk5ldXRyYWw9dC5Ib3N0aWxlPXQuVW5rbm93bj10LkNpdmlsaWFuPXRoaXMuc3R5bGUubW9ub0NvbG9yLGU9dCxBPUk9VCk7dmFyIFM9e2ZpbGxDb2xvcjpJLGZyYW1lQ29sb3I6dCxpY29uQ29sb3I6RSxpY29uRmlsbENvbG9yOlIsbm9uZTpULGJsYWNrOmUsd2hpdGU6QX07cmV0dXJuIHRoaXMubWV0YWRhdGEuZnJhbWU/Uy5mcmFtZUNvbG9yPVwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLmZyYW1lQ29sb3I/dGhpcy5zdHlsZS5mcmFtZUNvbG9yOmU6Uy5mcmFtZUNvbG9yPVQsdGhpcy5tZXRhZGF0YS5maWxsPyhTLmZpbGxDb2xvcj10aGlzLm1ldGFkYXRhLmZyYW1lfHwhdGhpcy5tZXRhZGF0YS5mcmFtZSYmIXRoaXMuc3R5bGUuaWNvbj9JOlQsUy5pY29uQ29sb3I9XCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuaWNvbkNvbG9yP3RoaXMuc3R5bGUuaWNvbkNvbG9yOmUsUy5pY29uRmlsbENvbG9yPXRoaXMubWV0YWRhdGEuZnJhbWU/QzpJLFMud2hpdGU9Qyk6KFMuZmlsbENvbG9yPVQsUy5mcmFtZUNvbG9yPXRoaXMubWV0YWRhdGEuZnJhbWU/dDpULFMuaWNvbkNvbG9yPXQsUy5pY29uRmlsbENvbG9yPVQsdGhpcy5tZXRhZGF0YS5mcmFtZXx8dGhpcy5tZXRhZGF0YS5maWxsfHx0aGlzLnN0eWxlLmljb258fChTLmZyYW1lQ29sb3I9ZSxTLmZpbGxDb2xvcj1lKSksU30sRy5wcm90b3R5cGUuZ2V0T2N0YWdvbkFuY2hvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9jdGFnb25BbmNob3J9LEcucHJvdG90eXBlLmdldE1ldGFkYXRhPWZ1bmN0aW9uKCl7dmFyIEk9e2FjdGl2aXR5OiExLGFmZmlsaWF0aW9uOlwidW5kZWZpbmVkXCIsYmFzZUFmZmlsYXRpb246XCJcIixiYXNlRGltZW5zaW9uOlwiXCIsYmFzZUdlb21ldHJ5OntnOlwiXCIsYmJveDp7fX0sY2l2aWxpYW46ITEsY29uZGl0aW9uOlwiXCIsY29udGV4dDpcIlwiLGRpbWVuc2lvbjpcInVuZGVmaW5lZFwiLGRpbWVuc2lvblVua25vd246ITEsZWNoZWxvbjpcIlwiLGZha2VyOiExLGZlbmludER1bW15OiExLGZpbGw6dGhpcy5zdHlsZS5maWxsLGZyYW1lOnRoaXMuc3R5bGUuZnJhbWUsZnVuY3Rpb25pZDpcIlwiLGhlYWRxdWFydGVyczohMSxpbnN0YWxsYXRpb246ITEsam9rZXI6ITEsbW9iaWxpdHk6XCJcIixub3RwcmVzZW50OlwiXCIsbnVtYmVyU0lEQzohMSxzcGFjZTohMSxTVEQyNTI1OnMuX1NURDI1MjUsdGFza0ZvcmNlOiExLHVuaXQ6ITF9LHQ9e2NvbnRleHQ6W1wiUmVhbGl0eVwiLFwiRXhlcmNpc2VcIixcIlNpbXVsYXRpb25cIl0sc3RhdHVzOltcIlByZXNlbnRcIixcIlBsYW5uZWRcIixcIkZ1bGx5Q2FwYWJsZVwiLFwiRGFtYWdlZFwiLFwiRGVzdHJveWVkXCIsXCJGdWxsVG9DYXBhY2l0eVwiXSxlY2hlbG9uTW9iaWxpdHk6ezExOlwiVGVhbS9DcmV3XCIsMTI6XCJTcXVhZFwiLDEzOlwiU2VjdGlvblwiLDE0OlwiUGxhdG9vbi9kZXRhY2htZW50XCIsMTU6XCJDb21wYW55L2JhdHRlcnkvdHJvb3BcIiwxNjpcIkJhdHRhbGlvbi9zcXVhZHJvblwiLDE3OlwiUmVnaW1lbnQvZ3JvdXBcIiwxODpcIkJyaWdhZGVcIiwyMTpcIkRpdmlzaW9uXCIsMjI6XCJDb3Jwcy9NRUZcIiwyMzpcIkFybXlcIiwyNDpcIkFybXkgR3JvdXAvZnJvbnRcIiwyNTpcIlJlZ2lvbi9UaGVhdGVyXCIsMjY6XCJDb21tYW5kXCIsMzE6XCJXaGVlbGVkIGxpbWl0ZWQgY3Jvc3MgY291bnRyeVwiLDMyOlwiV2hlZWxlZCBjcm9zcyBjb3VudHJ5XCIsMzM6XCJUcmFja2VkXCIsMzQ6XCJXaGVlbGVkIGFuZCB0cmFja2VkIGNvbWJpbmF0aW9uXCIsMzU6XCJUb3dlZFwiLDM2OlwiUmFpbFwiLDM3OlwiUGFjayBhbmltYWxzXCIsNDE6XCJPdmVyIHNub3cgKHByaW1lIG1vdmVyKVwiLDQyOlwiU2xlZFwiLDUxOlwiQmFyZ2VcIiw1MjpcIkFtcGhpYmlvdXNcIiw2MTpcIlNob3J0IHRvd2VkIGFycmF5XCIsNjI6XCJMb25nIHRvd2VkIEFycmF5XCIsNzE6XCJMZWFkZXIgSW5kaXZpZHVhbFwiLDcyOlwiRGVwdXR5IEluZGl2aWR1YWxcIn0sYWZmaWxpYXRpb246W1wiSG9zdGlsZVwiLFwiRnJpZW5kXCIsXCJOZXV0cmFsXCIsXCJVbmtub3duXCJdLGRpbWVuc2lvbjpbXCJBaXJcIixcIkdyb3VuZFwiLFwiU2VhXCIsXCJTdWJzdXJmYWNlXCJdfTtyZXR1cm4gSS5jb250ZXh0PXQuY29udGV4dFswXSx0aGlzLnN0eWxlLnN0YW5kYXJkJiYoSS5TVEQyNTI1PVwiQVBQNlwiIT10aGlzLnN0eWxlLnN0YW5kYXJkKSxcIlwiIT10aGlzLnN0eWxlLm1vbm9Db2xvciYmKEkuZmlsbD0hMSksdGhpcy5vcHRpb25zLnNpZGM9U3RyaW5nKHRoaXMub3B0aW9ucy5zaWRjKS5yZXBsYWNlKC9cXCovZyxcIi1cIikucmVwbGFjZSgvIC9nLFwiXCIpLEkubnVtYmVyU0lEQz0haXNOYU4odGhpcy5vcHRpb25zLnNpZGMpLEkubnVtYmVyU0lEQz9cImZ1bmN0aW9uXCI9PXR5cGVvZiBzLl9nZXRNZXRhZGF0YS5udW1iZXI/ST1zLl9nZXRNZXRhZGF0YS5udW1iZXIuY2FsbCh0aGlzLHMsSSx0KTpjb25zb2xlLndhcm4oXCJtcy5fZ2V0TWV0YWRhdGEubnVtYmVyKCkgaXMgbm90IHByZXNlbnQsIHlvdSB3aWxsIG5lZWQgdG8gbG9hZCBmdW5jdGlvbmFsaXR5IGZvciBudW1iZXIgYmFzZWQgU0lEQ3NcIik6XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5fZ2V0TWV0YWRhdGEubGV0dGVyP0k9cy5fZ2V0TWV0YWRhdGEubGV0dGVyLmNhbGwodGhpcyxzLEksdCk6Y29uc29sZS53YXJuKFwibXMuX2dldE1ldGFkYXRhLmxldHRlcigpIGlzIG5vdCBwcmVzZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGxvYWQgZnVuY3Rpb25hbGl0eSBmb3IgbGV0dGVyIGJhc2VkIFNJRENzXCIpLHMuX3N5bWJvbEdlb21ldHJpZXMuaGFzT3duUHJvcGVydHkoSS5kaW1lbnNpb24rSS5hZmZpbGlhdGlvbik/SS5iYXNlR2VvbWV0cnk9cy5fc3ltYm9sR2VvbWV0cmllc1tJLmRpbWVuc2lvbitJLmFmZmlsaWF0aW9uXTpJLmJhc2VHZW9tZXRyeS5iYm94PW5ldyBzLkJCb3gsdGhpcy5zdHlsZS5mcmFtZXx8dGhpcy5zdHlsZS5pY29ufHwoSS5iYXNlR2VvbWV0cnk9cy5fc3ltYm9sR2VvbWV0cmllcy5Qb3NpdGlvbk1hcmtlciksSX0sRy5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihJKXt2YXIgdCxFPXt9O2Zvcih0IGluIHRoaXMub3B0aW9ucyl0aGlzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkodCkmJihFW3RdPXRoaXMub3B0aW9uc1t0XSk7aWYoSXx8dm9pZCAwPT09SSlmb3IodCBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkodCkmJihFW3RdPXRoaXMuc3R5bGVbdF0pO3JldHVybiBFfSxHLnByb3RvdHlwZS5nZXRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMud2lkdGgmJnZvaWQgMCE9PXRoaXMuaGVpZ2h0fHx0aGlzLnVwZGF0ZVN5bWJvbCgpLHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH19LEcucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKCl7dmFyIEksdD17fTtmb3IoSSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoSSkmJih0W0ldPXRoaXMuc3R5bGVbSV0pO3JldHVybiB0fSxHLnByb3RvdHlwZS5pc1ZhbGlkPWZ1bmN0aW9uKEkpe3ZhciB0PS0xPT1KU09OLnN0cmluZ2lmeSh0aGlzLmRyYXdJbnN0cnVjdGlvbnMpLmluZGV4T2YoXCJudWxsXCIpO3JldHVybiBJP3thZmZpbGlhdGlvbjp0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uLGRpbWVuc2lvbjp0aGlzLm1ldGFkYXRhLmRpbWVuc2lvbixkaW1lbnNpb25Vbmtub3duOnRoaXMubWV0YWRhdGEuZGltZW5zaW9uVW5rbm93bixkcmF3SW5zdHJ1Y3Rpb25zOnQsaWNvbjp0aGlzLnZhbGlkSWNvbixtb2JpbGl0eTpudWxsIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5fTohKFwidW5kZWZpbmVkXCI9PXRoaXMubWV0YWRhdGEuYWZmaWxpYXRpb258fFwidW5kZWZpbmVkXCI9PXRoaXMubWV0YWRhdGEuZGltZW5zaW9uJiYhdGhpcy5tZXRhZGF0YS5jb250cm9sTWVhc3VyZSkmJnQmJnRoaXMudmFsaWRJY29uJiZudWxsIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5fSxHLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIEk7Zm9yKEk9MDtJPGFyZ3VtZW50cy5sZW5ndGg7SSsrKXt2YXIgdD1hcmd1bWVudHNbSV07aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBFIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShFKSYmKFwiU0lEQ1wiIT09RT90aGlzLnN0eWxlLmhhc093blByb3BlcnR5KEUpP3RoaXMuc3R5bGVbRV09dFtFXTp0aGlzLm9wdGlvbnNbRV09dFtFXTp0aGlzLm9wdGlvbnMuc2lkYz10W0VdKTtlbHNlIHRoaXMub3B0aW9ucy5zaWRjPXR9Zm9yKEkgaW4gdGhpcy52YWxpZEljb249ITAsdGhpcy5tZXRhZGF0YT10aGlzLmdldE1ldGFkYXRhKCksdGhpcy5jb2xvcnM9dGhpcy5nZXRDb2xvcnMoKSx0aGlzLmRyYXdJbnN0cnVjdGlvbnM9W10sdGhpcy5iYm94PW5ldyBzLkJCb3gscy5fc3ltYm9sUGFydHMpaWYocy5fc3ltYm9sUGFydHMuaGFzT3duUHJvcGVydHkoSSkpe3ZhciBSPXMuX3N5bWJvbFBhcnRzW0ldLmNhbGwodGhpcyxzKSxlPTA8Ui5wcmUubGVuZ3RofHwwPFIucG9zdC5sZW5ndGg7aWYoUi5wcmUpe2lmKDA8Ui5wcmUubGVuZ3RoKXtmb3IoOzE9PVIucHJlLmxlbmd0aDspUi5wcmU9Ui5wcmVbMF07MCE9Ui5wcmUubGVuZ3RoJiYodGhpcy5kcmF3SW5zdHJ1Y3Rpb25zPVtdLmNvbmNhdChSLnByZSx0aGlzLmRyYXdJbnN0cnVjdGlvbnMpKX1pZigwPFIucG9zdC5sZW5ndGgpe2Zvcig7MT09Ui5wb3N0Lmxlbmd0aCYmKFIucG9zdD1SLnBvc3RbMF0sdm9pZCAwIT09Ui5wb3N0KTspO3ZvaWQgMCE9PVIucG9zdCYmMD09Ui5wb3N0Lmxlbmd0aHx8KHRoaXMuZHJhd0luc3RydWN0aW9ucz10aGlzLmRyYXdJbnN0cnVjdGlvbnMuY29uY2F0KFIucG9zdCkpfVwib2JqZWN0XCI9PXR5cGVvZiBSLmJib3gmJmUmJnRoaXMuYmJveC5tZXJnZShSLmJib3gpfX10aGlzLnN0eWxlLnBhZGRpbmcmJih0aGlzLmJib3gueDEtPXRoaXMuc3R5bGUucGFkZGluZyx0aGlzLmJib3gueDIrPXRoaXMuc3R5bGUucGFkZGluZyx0aGlzLmJib3gueTEtPXRoaXMuc3R5bGUucGFkZGluZyx0aGlzLmJib3gueTIrPXRoaXMuc3R5bGUucGFkZGluZyk7dmFyIEE9e3g6MTAwLHk6MTAwfTtpZih0aGlzLm9jdGFnb25BbmNob3I9e3g6KEEueC10aGlzLmJib3gueDErcGFyc2VGbG9hdCh0aGlzLnN0eWxlLnN0cm9rZVdpZHRoKStwYXJzZUZsb2F0KHRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSkqdGhpcy5zdHlsZS5zaXplLzEwMCx5OihBLnktdGhpcy5iYm94LnkxK3BhcnNlRmxvYXQodGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrcGFyc2VGbG9hdCh0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCkpKnRoaXMuc3R5bGUuc2l6ZS8xMDB9LHRoaXMubWV0YWRhdGEuaGVhZHF1YXJ0ZXJzKXt2YXIgQz10aGlzLnN0eWxlLmhxU3RhZmZMZW5ndGh8fHMuX2hxU3RhZmZMZW5ndGg7QT17eDp0aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94LngxLHk6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC55MitDfX1pZih0aGlzLnN0eWxlLnNxdWFyZSl7dmFyIFQ9TWF0aC5tYXgoQS54LXRoaXMuYmJveC54MSx0aGlzLmJib3gueDItQS54KSxTPU1hdGgubWF4KEEueS10aGlzLmJib3gueTEsdGhpcy5iYm94LnkyLUEueSksTj1NYXRoLm1heChULFMpO3RoaXMuYmJveC54MT1BLngtTix0aGlzLmJib3gueTE9QS55LU4sdGhpcy5iYm94LngyPUEueCtOLHRoaXMuYmJveC55Mj1BLnkrTn1yZXR1cm4gdGhpcy5iYXNlV2lkdGg9dGhpcy5iYm94LndpZHRoKCkrTnVtYmVyKDIqdGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrTnVtYmVyKDIqdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpLHRoaXMuYmFzZUhlaWdodD10aGlzLmJib3guaGVpZ2h0KCkrTnVtYmVyKDIqdGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrTnVtYmVyKDIqdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpLHRoaXMud2lkdGg9dGhpcy5iYXNlV2lkdGgqdGhpcy5zdHlsZS5zaXplLzEwMCx0aGlzLmhlaWdodD10aGlzLmJhc2VIZWlnaHQqdGhpcy5zdHlsZS5zaXplLzEwMCx0aGlzLnN5bWJvbEFuY2hvcj17eDooQS54LXRoaXMuYmJveC54MStwYXJzZUZsb2F0KHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpK3BhcnNlRmxvYXQodGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpKSp0aGlzLnN0eWxlLnNpemUvMTAwLHk6KEEueS10aGlzLmJib3gueTErcGFyc2VGbG9hdCh0aGlzLnN0eWxlLnN0cm9rZVdpZHRoKStwYXJzZUZsb2F0KHRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSkqdGhpcy5zdHlsZS5zaXplLzEwMH0scy5fYXV0b1ZhbGlkYXRpb24mJih0aGlzLmlzVmFsaWQoKXx8KGNvbnNvbGUud2FybihcIkVycm9yIGluIHN5bWJvbDogXCIrdGhpcy5vcHRpb25zLnNpZGMpLGNvbnNvbGUud2Fybih0aGlzLmlzVmFsaWQoITApKSkpLHRoaXN9LEcucHJvdG90eXBlLnRvRGF0YVVSTD1mdW5jdGlvbigpe3JldHVyblwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxcIit3aW5kb3cuYnRvYSh0aGlzLmFzU1ZHKCkpfSxzLlN5bWJvbD1HO3ZhciBMPXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbaV0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtUC0tLS0tLS1cIl09W10sSVtcIlMtUC1TLS0tLS1cIl09W0VbXCJTUC5JLkZGLlNBVEVMTElURVwiXV0sSVtcIlMtUC1WLS0tLS1cIl09W0VbXCJTUC5JLkZGLkNSRVdFRCBTUEFDRSBWRUhJQ0xFXCJdXSxJW1wiUy1QLVQtLS0tLVwiXT1bRVtcIlNQLkkuRkYuU1BBQ0UgU1RBVElPTlwiXV0sSVtcIlMtUC1MLS0tLS1cIl09W0VbXCJTUC5JLlNQQUNFIExBVU5DSCBWRUhJQ0xFXCJdXX19O2Z1bmN0aW9uIFAoSSx0LEUsUixlLEEpe3ZhciBDPXQuZnJhbWUsVD10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFM9dC5udW1iZXJTSURDLE49RS5pY29uQ29sb3JbVF0sTz1FLmljb25GaWxsQ29sb3JbVF0sRz1FLmJsYWNrW1RdLG89e307Zm9yKHZhciBNIGluIG9bXCJBUi5JLk1JTElUQVJZXCJdPWEoXCJNSUxcIiksb1tcIkFSLkkuQ0lWSUxJQU5cIl09YShcIkNJVlwiKSxvW1wiQVIuSS5DSVZJTElBTlwiXS5maWxsPVJ8fFM/TzohQyYmTyxvW1wiQVIuSS5DSVZJTElBTlwiXS5zdHJva2U9RyxvW1wiQVIuSS5DSVZJTElBTlwiXS5zdHJva2V3aWR0aD0zLG9bXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTAwIEwxMzAsODggYzE1LDAgMTUsMjQgMCwyNCBMMTAwLDEwMCA3MCwxMTIgYy0xNSwwIC0xNSwtMjQgMCwtMjQgWlwifSxvW1wiQVIuSS5DSVZJTElBTiBGSVhFRCBXSU5HXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTAwIEwxMzAsODggYzE1LDAgMTUsMjQgMCwyNCBMMTAwLDEwMCA3MCwxMTIgYy0xNSwwIC0xNSwtMjQgMCwtMjQgWlwifSxvW1wiQVIuSS5GRi5DSVZJTElBTiBGSVhFRCBXSU5HXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTpHLGQ6XCJNNjIsODAgbDMwLDAgMCwtMTAgMTYsMCAwLDEwIDMwLDAgMCwxNSAtMzAsMCAwLDI1IDEwLDAgMCw1IC0zNiwwIDAsLTUgMTAsMCAwLC0yNSAtMzAsMCBaIE05NSw3MCBsMCwtNSAxMCwwIDAsNVwiLGZpbGw6ISFSJiZPfSxvW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTYwLDg1IGw0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6XCJ9LG9bXCJBUi5JLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJNNjAsODUgbDQwLDE1IDQwLC0xNSAwLDMwIC00MCwtMTUgLTQwLDE1IHpcIn0sb1tcIkFSLkkuRkYuQ0lWSUxJQU4gUk9UQVJZIFdJTkdcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTpHLGQ6XCJNODAsNzAgbDEwLDEwIE0xMjAsMTEwIGwtMTAsLTEwIE04MCwxMTAgbDEwLC0xMCBNMTIwLDcwIGwtMTAsMTAgTTEwMCwxMTUgbDAsMjAgTTk1LDEzNSBsMTAsMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTpHLGZpbGw6ISFSJiZPLGQ6XCJtIDExMyw5MCBjIC0wLjMsOC44IC0xLjksMjAuMyAtMTAuOCwyNC42IC03LjcsMiAtMTIuMywtNy4xIC0xMy44LC0xMy4zIC0yLjYsLTExLjUgLTIuMywtMjYgNi45LC0zNC42IDYuMCwtNC45IDEzLjEsMS45IDE0LjksNy44IDIsNC45IDIuOCwxMC4yIDIuOCwxNS41IHpcIn1dLG9bXCJBUi5JLk1JTElUQVJZIEJBTExPT05cIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5Ojk1LHI6MTV9LHt0eXBlOlwicGF0aFwiLGQ6XCJNOTUsMTEwIGwwLDEwIDEwLDAgMCwtMTAgelwifV0sb1tcIkFSLkkuRkYuTUlMSVRBUlkgQkFMTE9PTlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk05MCwxMTUgbDIwLDAgMCwyMCAtMjAsMCB6XCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjkwLHI6MzV9XSxvW1wiQVIuSS5DSVZJTElBTiBCQUxMT09OXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGN4OjEwMCxjeTo5NSxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlwiTTk1LDExMCBsMCwxMCAxMCwwIDAsLTEwIHpcIn1dLG9bXCJBUi5JLkZGLkNJVklMSUFOIEJBTExPT05cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJNOTAsMTI1IGwyMCwwIDAsMTAgLTIwLDAgelwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGN4OjEwMCxjeTo5MCxyOjM1fV0sb1tcIkFSLkkuTUlMSVRBUlkgQUlSU0hJUFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTAsMTEwIDEwLDEwIDEwLDAgLTUsLTE1IG0gMCwtMTAgNSwtMTUgLTEwLDAgLTEwLDEwIG0gMTcuMiwxMCBjIDAsNi4xIC0xMi4yLDExLjEgLTI3LjIsMTEuMSAtMTUsMCAtMjcuMiwtNSAtMjcuMiwtMTEuMSAwLC02LjEgMTIuMiwtMTEuMSAyNy4yLC0xMS4xIDE1LDAgMjcuMiw1IDI3LjIsMTEuMSB6XCJ9LG9bXCJBUi5JLkNJVklMSUFOIEFJUlNISVBcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohKCFSJiYhUykmJk8sc3Ryb2tlOkcsZDpcIm0gMTEwLDExMCAxMCwxMCAxMCwwIC01LC0xNSBtIDAsLTEwIDUsLTE1IC0xMCwwIC0xMCwxMCBtIDE3LjIsMTAgYyAwLDYuMSAtMTIuMiwxMS4xIC0yNy4yLDExLjEgLTE1LDAgLTI3LjIsLTUgLTI3LjIsLTExLjEgMCwtNi4xIDEyLjIsLTExLjEgMjcuMiwtMTEuMSAxNSwwIDI3LjIsNSAyNy4yLDExLjEgelwifSxvW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIixzdHJva2U6ITF9LG9bXCJBUi5JLkFJUiBERUNPWVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTY1LDk1IGwxNSwtMTUgMCwzMCBaIE05Mi41LDk1IGwxNSwtMTUgMCwzMCBaIE0xMjAsOTUgbDE1LC0xNSAwLDMwIFogTTY1LDEyMCBsNzAsMCAwLC01IC03MCwwIFpcIn0sb1tcIlNVLklDLkFJUiBERUNPWSBEU3ltYm9sXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDg1IDgxIEwgNjUgOTggTCA4NSAxMTkgTCA4NSA4MSB6IE0gMTEwIDgxIEwgOTAgOTggTCAxMTAgMTE5IEwgMTEwIDgxIHogTSAxMzUgODEgTCAxMTUgOTggTCAxMzUgMTE5IEwgMTM1IDgxIHpcIn0sb1tcIkFSLkkuTUVESUNBTCBFVkFDVUFUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTMsODMgbDE0LDAgMCwxMCAxMCwwIDAsMTQgLTEwLDAgMCwxMCAtMTQsMCAwLC0xMCAtMTAsMCAwLC0xNCAxMCwwIFpcIn0sb1tcIkFSLkkuQVRUQUNLL1NUUklLRVwiXT1hKFwiQVwiKSxvW1wiQVIuSS5CT01CRVJcIl09YShcIkJcIiksb1tcIkFSLkkuQ0FSR09cIl09YShcIkNcIiksb1tcIkFSLkkuRVNDT1JUXCJdPWEoXCJFXCIpLG9bXCJBUi5JLkZJR0hURVJcIl09YShcIkZcIiksb1tcIkFSLkkuRklHSFRFUiBJTlRFUkNFUFRPUlwiXT1hKFwiSVwiKSxvW1wiQVIuSS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl09YShcIkpcIiksb1tcIkFSLkkuVEFOS0VSXCJdPWEoXCJLXCIpLG9bXCJBUi5JLlBBVFJPTFwiXT1hKFwiUFwiKSxvW1wiQVIuSS5SRUNPTk5BSVNTQU5DRVwiXT1hKFwiUlwiKSxvW1wiQVIuSS4yNTI1IFBIT1RPR1JBUEhJQ1wiXT1hKFwiWFwiKSxvW1wiQVIuSS5UUkFJTkVSXCJdPWEoXCJUXCIpLG9bXCJBUi5JLlVUSUxJVFlcIl09YShcIlVcIiksb1tcIkFSLkkuVlNUT0xcIl09YShSJiYhUz9cIkxcIjpcIlZcIiksb1tcIkFSLkkuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdPWEoUiYmIVM/XCJEXCI6XCJBQ1BcIiksb1tcIkFSLkkuQUlSQk9STkUgRUFSTFkgV0FSTklOR1wiXT1hKFImJiFTP1wiV1wiOlwiQUVXXCIpLG9bXCJBUi5JLkFOVElTVVJGQUNFIFdBUkZBUkVcIl09YShSJiYhUz9cIk5cIjpcIkFTVVdcIiksb1tcIkFSLkkuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdPWEoUiYmIVM/XCJTXCI6XCJBU1dcIiksb1tcIkFSLkkuQ09NTVVOSUNBVElPTlNcIl09YShSJiYhUz9cIllcIjpcIkNPTVwiKSxvW1wiQVIuSS5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl09YShcIkNTQVJcIiksb1tcIkFSLkkuRUxFQ1RST05JQyBTVVBQT1JUIE1FQVNVUkVTXCJdPWEoUj9cIlpcIjpcIkVTTVwiKSxvW1wiQVIuSS5HT1ZFUk5NRU5UXCJdPWEoXCJHT1ZcIiksb1tcIkFSLkkuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl09YShcIk1DTVwiKSxvW1wiQVIuSS5QRVJTT05ORUwgUkVDT1ZFUllcIl09YShSP1wiSFwiOlwiUFJPXCIpLG9bXCJBUi5JLlBBU1NFTkdFUlwiXT1hKFwiUFhcIiksb1tcIkFSLkkuU0VBUkNIIEFORCBSRVNDVUVcIl09YShcIlNBUlwiKSxvW1wiQVIuSS5TVVBSRVNTSU9OIE9GIEVORU1ZIEFJUiBERUZFTkNFXCJdPWEoXCJTRUFEXCIpLG9bXCJBUi5JLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl09YShcIlNPRlwiKSxvW1wiQVIuSS5VTFRSQSBMSUdIVFwiXT1hKFwiVUxcIiksb1tcIkFSLkkuVklQXCJdPWEoXCJWSVBcIiksb1tcIkFSLkkuRkYuTUlMSVRBUlkgRklYRUQgV0lOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA5OS4yLDU4LjIgYyAtMywwLjggLTIuNSw1LjggLTIuNSw1LjggbCAtMC4zLDE2IC0zNy4yLDM2LjUgMS4zLDQuNiBMIDk2LjcsOTYuNiA5NywxMjguNiBsIC04LjUsOC4yIDAsNC42IDkuMywtNC4yIGMgMC43LDAuNiAxLjgsMS43IDEuOCwxLjcgMCwwIDEuMiwtMS4xIDEuOSwtMS43IGwgOS4zLDQuMiAwLC00LjYgLTguNSwtOC4yIDAuMywtMzIgMzYuMiwyNC41IDEuMywtNC42IC0zNy4yLC0zNi41IC0wLjMsLTE2IGMgMCwwIDAuNSwtNSAtMi41LC01LjggLTAuNCwtMC4xIC0wLjcsLTAuMSAtMS4xLDAgelwiLHN0cm9rZTohMX0sb1tcIkFSLkkuRklYRUQtV0lORyBEU3ltYm9sXCJdPXt0eXBlOlwicGF0aFwiLGQ6Uj9cIk0gOTkuNCA4MC44IEMgOTcuOSA4MS4xIDk4LjEgODMuNCA5OC4xIDgzLjQgTCA5OCA5MC43IEwgNzguNiAxMDcuNCBMIDc5LjMgMTA5LjQgTCA5OC4xIDk4LjMgTCA5OC4zIDExMi45IEwgOTMuOSAxMTYuNiBMIDkzLjkgMTE4LjcgTCA5OC44IDExNi44IEMgOTkuMSAxMTcgOTkuNyAxMTcuNSA5OS43IDExNy41IEMgOTkuNyAxMTcuNSAxMDAuNCAxMTcgMTAwLjcgMTE2LjggTCAxMDUuNiAxMTguNyBMIDEwNS42IDExNi42IEwgMTAxLjEgMTEyLjkgTCAxMDEuMyA5OC4zIEwgMTIwLjIgMTA5LjQgTCAxMjAuOSAxMDcuNCBMIDEwMS41IDkwLjcgTCAxMDEuMyA4My40IEMgMTAxLjMgODMuNCAxMDEuNiA4MS4xIDEwMCA4MC44IEMgOTkuOCA4MC44IDk5LjYgODAuOCA5OS40IDgwLjggelwiOlwiTTEwMCwxMDAgTDEzMCw4OCBjMTUsMCAxNSwyNCAwLDI0IEwxMDAsMTAwIDcwLDExMiBjLTE1LDAgLTE1LC0yNCAwLC0yNCBaXCJ9LG9bXCJBUi5JLkNJVklMSUFOIEZJWEVELVdJTkcgRFN5bWJvbFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlI/XCJtIDc1LjEsOTAuMyAxOS42LDAgMCwtNi41IDEwLjUsMCAwLDYuNSAxOS42LDAgMCw5LjcgLTE5LjYsMCAwLDE2LjIgNi41LDAgMCwzLjIgLTIzLjYsMCAwLC0zLjIgNi41LDAgMCwtMTYuMiAtMTkuNiwwIHogbSAyMS42LC02LjUgMCwtMy4yIDYuNSwwIDAsMy4yXCI6XCJNMTAwLDEwMCBMMTMwLDg4IGMxNSwwIDE1LDI0IDAsMjQgTDEwMCwxMDAgNzAsMTEyIGMtMTUsMCAtMTUsLTI0IDAsLTI0IFpcIn0sb1tcIkFSLkkuRklHSFRFUi9CT01CRVJcIl09YShcIkYvQlwiKSxvW1wiQVIuSS5FTEVDVFJPTklDIFNVUFBPUlRcIl09YShSP1wiRVNcIjpcIkVTTVwiKSxvW1wiQVIuSS5QRVJTT05ORUwgUkVDT1ZFUlkgRFN5bWJvbFwiXT1hKFwiUFJcIiksb1tcIkFSLkkuUEhPVE9HUkFQSElDIFJFQ09OTkFJU1NBTkNFXCJdPWEoXCJQSFwiKSxvW1wiQVIuSS5FTEVDVFJPTklDIEFUVEFDSyAoRUEpXCJdPWEoXCJFQVwiKSxvW1wiQVIuSS5WRVJUSUNBTC1UQUtFT0ZGIFVBViAoVlQtVUFWKVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3MCw4NSAzMCwxMCAzMCwtMTAgMCwtNSAtMzAsNSAtMzAsLTUgeiBtIC0xMCw1IDQwLDE1IDQwLC0xNSAwLDMwIC00MCwtMTUgLTQwLDE1IHpcIn0sb1tcIkFSLkkuVEVUSEVSRUQgTElHSFRFUiBUSEFOIEFJUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA3NSwxMTAgODUsOTUgbSAtNSwyMCBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIDE1LC02IDAsMTEgMTAsMCAwLC0xMSBtIDEwLC0xNCBjIDAsOC4zIC02LjcsMTUgLTE1LDE1IC04LjMsMCAtMTUsLTYuNyAtMTUsLTE1IDAsLTguMyA2LjcsLTE1IDE1LC0xNSA4LjMsMCAxNSw2LjcgMTUsMTUgelwifSxvW1wiQVIuSS5DSVZJTElBTiBURVRIRVJFRCBMSUdIVEVSIFRIQU4gQUlSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJNIDc1LDExMCA4NSw5NSBtIC01LDIwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6IG0gMTUsLTYgMCwxMSAxMCwwIDAsLTExIG0gMTAsLTE0IGMgMCw4LjMgLTYuNywxNSAtMTUsMTUgLTguMywwIC0xNSwtNi43IC0xNSwtMTUgMCwtOC4zIDYuNywtMTUgMTUsLTE1IDguMywwIDE1LDYuNyAxNSwxNSB6XCJ9LG9bXCJBUi5JLkNJVklMSUFOIFVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwifSxvW1wiQVIuSS5XRUFQT05cIl09YShcIldQTlwiKSxvW1wiQVIuSS5VTkRFUldBVEVSIERFQ09ZIERTeW1ib2xcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gODUgODEgTCA2NSA5OCBMIDg1IDExOSBMIDg1IDgxIHogTSAxMTAgODEgTCA5MCA5OCBMIDExMCAxMTkgTCAxMTAgODEgeiBNIDEzNSA4MSBMIDExNSA5OCBMIDEzNSAxMTkgTCAxMzUgODEgelwifSxvW1wiQVIuSS5CT01CXCJdPWEoXCJCT01CXCIpLG9bXCJBUi5JLk1BTlVBTCBUUkFDS1wiXT1hKFwiTUFOXCIpLG9bXCJBSVIuTTEuQVRUQUNLXCJdPWwoXCJBXCIpLG9bXCJBSVIuTTEuQk9NQkVSXCJdPWwoXCJCXCIpLG9bXCJBSVIuTTEuQ0FSR09cIl09bChcIkNcIiksb1tcIkFJUi5NMS5GSUdIVEVSXCJdPWwoXCJGXCIpLG9bXCJBSVIuTTEuSU5URVJDRVBUT1JcIl09bChcIklcIiksb1tcIkFJUi5NMS5UQU5LRVJcIl09bChcIktcIiksb1tcIkFJUi5NMS5VVElMSVRZXCJdPWwoXCJVXCIpLG9bXCJBSVIuTTEuVlNUT0xcIl09bChSJiYhUz9cIkxcIjpcIlZcIiksb1tcIkFJUi5NMS5QQVNTRU5HRVJcIl09bChcIlBYXCIpLG9bXCJBSVIuTTEuVUxUUkEgTElHSFRcIl09bChcIlVMXCIpLG9bXCJBSVIuTTEuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdPWwoUiYmIVM/XCJEXCI6XCJBQ1BcIiksb1tcIkFJUi5NMS5BTlRJU1VSRkFDRSBXQVJGQVJFXCJdPWwoUiYmIVM/XCJOXCI6XCJBU1VXXCIpLG9bXCJBSVIuTTEuQUlSQk9STkUgRUFSTFkgV0FSTklOR1wiXT1sKFImJiFTP1wiV1wiOlwiQUVXXCIpLG9bXCJBSVIuTTEuR09WRVJOTUVOVFwiXT1sKFwiR09WXCIpLG9bXCJBSVIuTTEuTUVERVZBQ1wiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk05NS41LDgwIGw5LDAgMCwtOSA5LDAgMCwtOSAtOSwwIDAsLTkgLTksMCAwLDkgLTksMCAwLDkgOSwwIFpcIn0sb1tcIkFJUi5NMS5FU0NPUlRcIl09bChcIkVcIiksb1tcIkFJUi5NMS5JTlRFTlNJVkUgQ0FSRVwiXT1sKFwiSUNcIiksb1tcIkFJUi5NMS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl09bChcIkpcIiksb1tcIkFJUi5NMS5QQVRST0xcIl09bChcIlBcIiksb1tcIkFJUi5NMS5SRUNPTk5BSVNTQU5DRVwiXT1sKFwiUlwiKSxvW1wiQUlSLk0xLlRSQUlORVJcIl09bChcIlRcIiksb1tcIkFJUi5NMS5QSE9UT0dSQVBISUNcIl09bChSJiYhUz9cIlhcIjpcIlBIXCIpLG9bXCJBSVIuTTEuUEVSU09OTkVMIFJFQ09WRVJZXCJdPWwoXCJQUlwiKSxvW1wiQUlSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXT1sKFImJiFTP1wiU1wiOlwiQVNXXCIpLG9bXCJBSVIuTTEuQ09NTVVOSUNBVElPTlNcIl09bChSJiYhUz9cIllcIjpcIkNPTVwiKSxvW1wiQUlSLk0xLkVMRUNUUk9OSUMgU1VSVkVJTExBTkNFIE1FQVNVUkVTXCJdPWwoUj9cIlpcIjpcIkVTTVwiKSxvW1wiQUlSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdPWwoXCJNQ01cIiksb1tcIkFJUi5NMS5TRUFSQ0ggQU5EIFJFU0NVRVwiXT1sKFwiU0FSXCIpLG9bXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXT1sKFwiU09GXCIpLG9bXCJBSVIuTTEuU1VSRkFDRSBXQVJGQVJFXCJdPWwoXCJTVVdcIiksb1tcIkFJUi5NMS5WSVBcIl09bChcIlZJUFwiKSxvW1wiQUlSLk0xLkNPTUJBVCBTRUFSQ0ggQU5EIFJFU0NVRVwiXT1sKFImJiFTP1wiSFwiOlwiQ1NBUlwiKSxvW1wiQUlSLk0xLlNVUFJFU1NJT04gT0YgRU5FTVkgQUlSIERFRkVOQ0VcIl09bChcIlNFQURcIiksb1tcIkFJUi5NMS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODAsNjUgMjAsMTMgMjAsLTEzIDAsLTUgLTIwLDEwIC0yMCwtMTAgelwifSxvW1wiQUlSLk0xLkJPT00tT05MWVwiXT1sKFwiQlwiKSxvW1wiQUlSLk0xLkRST1VHRS1PTkxZXCJdPWwoXCJEXCIpLG9bXCJBSVIuTTEuRUxFQ1RST05JQyBTVVBQT1JUIChFUylcIl09bChSP1wiRVNcIjpcIkVTTVwiKSxvW1wiQUlSLk0xLkhJSkFDS0VSXCJdPWwoXCJISlwiKSxvW1wiQUlSLk0xLkNZQkVSU1BBQ0VcIl09bChcIkNZQlwiKSxvW1wiQUlSLk0xLkZJR0hURVIvQk9NQkVSXCJdPWwoXCJGL0JcIiksb1tcIkFJUi5NMS5FTEVDVFJPTklDIEFUVEFDSyAoRUEpXCJdPWwoXCJFQVwiKSxvW1wiQUlSLk0xLk1VTFRJTUlTU0lPTlwiXT1sKFwiTU1cIiksb1tcIkFJUi5NMS5ISUpBQ0tJTkdcIl09bChcIkhcIiksb1tcIkFJUi5NMS5BU1cgSEVMTy1MQU1QU1wiXT1sKFwiTFBcIiksb1tcIkFJUi5NMS5BU1cgSEVMTyAtIFNILTYwUlwiXT1sKFwiNjBSXCIpLG9bXCJBSVIuTTIuSEVBVllcIl09cihcIkhcIiksb1tcIkFJUi5NMi5NRURJVU1cIl09cihcIk1cIiksb1tcIkFJUi5NMi5MSUdIVFwiXT1yKFwiTFwiKSxvW1wiQUlSLk0yLkJPT00tT05MWVwiXT1yKFwiQlwiKSxvW1wiQUlSLk0yLkRST1VHRS1PTkxZXCJdPXIoXCJEXCIpLG9bXCJBSVIuTTIuQk9PTSBBTkQgRFJPVUdFXCJdPXIoXCJCL0RcIiksb1tcIkFJUi5NMi5DTE9TRSBSQU5HRVwiXT1yKFwiQ1JcIiksb1tcIkFJUi5NMi5TSE9SVCBSQU5HRVwiXT1yKFwiU1JcIiksb1tcIkFJUi5NMi5NRURJVU0gUkFOR0VcIl09cihcIk1SXCIpLG9bXCJBSVIuTTIuTE9ORyBSQU5HRVwiXT1yKFwiTFJcIiksb1tcIkFJUi5NMi5QSE9UT0dSQVBISUNcIl09cihcIlBcIiksb1tcIkFJUi5NMi5DWUJFUlNQQUNFXCJdPXIoXCJDWUJcIiksb1tcIkFJUi5NMi5ET1dOTElOS0VEXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0MCxmb250c2l6ZToyNSx0ZXh0OlwiRExcIn0sb1tcIkFJUi5NSVNTSUxFLklDT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05MCwxMzUgbDAsLTEwIDUsLTUgMCwtNTUgNSwtNSA1LDUgMCw1NSA1LDUgMCwxMCAtMTAsLTEwIHpcIn0sKFJ8fFMpJiYob1tcIkFJUi5NSVNTSUxFLklDT05cIl0uZmlsbD1DP0UuZmlsbENvbG9yLlVua25vd246RS5pY29uRmlsbENvbG9yLlVua25vd24pLG9bXCJBSVIuTUlTU0lMRS5JQy5BTlRJQkFMTElTVElDIE1JU1NJTEVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJBQk1cIn0sb1tcIkFJUi5NSVNTSUxFLklDLkJPTUJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJCT01CXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkFcIn0sb1tcIkFJUi5NSVNTSUxFLk0xLlNVUkZBQ0VcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0sb1tcIkFJUi5NSVNTSUxFLk0xLlNVQlNVUkZBQ0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlVcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMS5TUEFDRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUFwifV0sb1tcIkFJUi5NSVNTSUxFLk0xLkFOVEktQkFMTElTVElDXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJBXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTEuQkFMTElTVElDXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5DUlVJU0VcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkNcIn0sb1tcIkFJUi5NSVNTSUxFLk0xLkxBTkRcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkxcIn0sb1tcIkFJUi5NSVNTSUxFLk0xLklOVEVSQ0VQVE9SXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJJXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMi5BSVJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJBXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMi5TVVJGQUNFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSxvW1wiQUlSLk1JU1NJTEUuTTIuU1VCU1VSRkFDRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJVXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuU1BBQ0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUFwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLkxBVU5DSEVEXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiTFwifSxvW1wiQUlSLk1JU1NJTEUuTTIuTUlTU0lMRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1cIn0sb1tcIkFJUi5NSVNTSUxFLk0yLlBBVFJJT1RcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJQXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gMiAoU00tMilcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiMlwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLlNUQU5EQVJEIE1JU1NJTEUgLSA2IChTTS02KVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCI2XCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuRVZPTFZFRCBTRUEgU1BBUlJPVyBNSVNTSUxFIChFU1NNKVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuUk9MTElORyBBSVJGUkFNRSBNSVNTSUxFIChSQU0pXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiUlwifSxvW1wiQUlSLk1JU1NJTEUuTTIuU0hPUlQgUkFOR0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUlwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLk1FRElVTSBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIk1cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuSU5URVJNRURJQVRFIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMi5MT05HIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiTFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMi5JTlRFUkNPTlRJTkVOVEFMXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIkNcIn1dLG8pby5oYXNPd25Qcm9wZXJ0eShNKSYmKEkuaGFzT3duUHJvcGVydHkoTSkmJmNvbnNvbGUud2FybihcIk92ZXJyaWRlIG9mOiBcIitNKSxuLmNhbGwodGhpcyxvW01dLE4pLElbTV09b1tNXSl9dmFyIHk9e3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltQXSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiUy1BLS0tLS0tLVwiXT1bXSxJW1wiUy1BLU0tLS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUllcIl1dLElbXCJTLUEtTUYtLS0tXCJdPVtFW1wiQVIuSS5GRi5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdXSxJW1wiUy1BLU1GQi0tLVwiXT1bRVtcIkFSLkkuQk9NQkVSXCJdXSxJW1wiUy1BLU1GRi0tLVwiXT1bRVtcIkFSLkkuRklHSFRFUlwiXV0sSVtcIlMtQS1NRkZJLS1cIl09W0VbXCJBUi5JLkZJR0hURVIgSU5URVJDRVBUT1JcIl1dLElbXCJTLUEtTUZULS0tXCJdPVtFW1wiQVIuSS5UUkFJTkVSXCJdXSxJW1wiUy1BLU1GQS0tLVwiXT1bRVtcIkFSLkkuQVRUQUNLL1NUUklLRVwiXV0sSVtcIlMtQS1NRkwtLS1cIl09W0VbXCJBUi5JLlZTVE9MXCJdXSxJW1wiUy1BLU1GSy0tLVwiXT1bRVtcIkFSLkkuVEFOS0VSXCJdXSxJW1wiUy1BLU1GS0ItLVwiXT1bRVtcIkFSLkkuVEFOS0VSXCJdLEVbXCJBSVIuTTEuQk9PTS1PTkxZXCJdXSxJW1wiUy1BLU1GS0QtLVwiXT1bRVtcIkFSLkkuVEFOS0VSXCJdLEVbXCJBSVIuTTEuRFJPVUdFLU9OTFlcIl1dLElbXCJTLUEtTUZDLS0tXCJdPVtFW1wiQVIuSS5DQVJHT1wiXV0sSVtcIlMtQS1NRkNMLS1cIl09W0VbXCJBUi5JLkNBUkdPXCJdLEVbXCJBSVIuTTIuTElHSFRcIl1dLElbXCJTLUEtTUZDTS0tXCJdPVtFW1wiQVIuSS5DQVJHT1wiXSxFW1wiQUlSLk0yLk1FRElVTVwiXV0sSVtcIlMtQS1NRkNILS1cIl09W0VbXCJBUi5JLkNBUkdPXCJdLEVbXCJBSVIuTTIuSEVBVllcIl1dLElbXCJTLUEtTUZKLS0tXCJdPVtFW1wiQVIuSS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLElbXCJTLUEtTUZPLS0tXCJdPVtFW1wiQVIuSS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbXCJTLUEtTUZSLS0tXCJdPVtFW1wiQVIuSS5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtQS1NRlJXLS1cIl09W0VbXCJBUi5JLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkdcIl1dLElbXCJTLUEtTUZSWi0tXCJdPVtFW1wiQVIuSS5FTEVDVFJPTklDIFNVUFBPUlQgTUVBU1VSRVNcIl1dLElbXCJTLUEtTUZSWC0tXCJdPVI/W0VbXCJBUi5JLjI1MjUgUEhPVE9HUkFQSElDXCJdXTpbRVtcIkFSLkkuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkFJUi5NMi5QSE9UT0dSQVBISUNcIl1dLElbXCJTLUEtTUZQLS0tXCJdPVtFW1wiQVIuSS5QQVRST0xcIl1dLElbXCJTLUEtTUZQTi0tXCJdPVtFW1wiQVIuSS5BTlRJU1VSRkFDRSBXQVJGQVJFXCJdXSxJW1wiUy1BLU1GUE0tLVwiXT1bRVtcIkFSLkkuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLElbXCJTLUEtTUZVLS0tXCJdPVtFW1wiQVIuSS5VVElMSVRZXCJdXSxJW1wiUy1BLU1GVUwtLVwiXT1bRVtcIkFSLkkuVVRJTElUWVwiXSxFW1wiQUlSLk0yLkxJR0hUXCJdXSxJW1wiUy1BLU1GVU0tLVwiXT1bRVtcIkFSLkkuVVRJTElUWVwiXSxFW1wiQUlSLk0yLk1FRElVTVwiXV0sSVtcIlMtQS1NRlVILS1cIl09W0VbXCJBUi5JLlVUSUxJVFlcIl0sRVtcIkFJUi5NMi5IRUFWWVwiXV0sSVtcIlMtQS1NRlktLS1cIl09W0VbXCJBUi5JLkNPTU1VTklDQVRJT05TXCJdXSxJW1wiUy1BLU1GSC0tLVwiXT1bRVtcIkFSLkkuUEVSU09OTkVMIFJFQ09WRVJZXCJdXSxJW1wiUy1BLU1GRC0tLVwiXT1bRVtcIkFSLkkuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdXSxJW1wiUy1BLU1GUS0tLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl1dLElbXCJTLUEtTUZRQS0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkFUVEFDS1wiXV0sSVtcIlMtQS1NRlFCLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuQk9NQkVSXCJdXSxJW1wiUy1BLU1GUUMtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5DQVJHT1wiXV0sSVtcIlMtQS1NRlFELS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdXSxJW1wiUy1BLU1GUUYtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5GSUdIVEVSXCJdXSxJW1wiUy1BLU1GUUgtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl1dLElbXCJTLUEtTUZRSi0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkpBTU1FUiAvIEVMRUNUUk9OSUMgQ09VTlRFUi1NRUFTVVJFU1wiXV0sSVtcIlMtQS1NRlFLLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuVEFOS0VSXCJdXSxJW1wiUy1BLU1GUUwtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5WU1RPTFwiXV0sSVtcIlMtQS1NRlFNLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtQS1NRlFJLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLElbXCJTLUEtTUZRTi0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkFOVElTVVJGQUNFIFdBUkZBUkVcIl1dLElbXCJTLUEtTUZRUC0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlBBVFJPTFwiXV0sSVtcIlMtQS1NRlFSLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUEtTUZRUlctXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkdcIl1dLElbXCJTLUEtTUZRUlotXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkVMRUNUUk9OSUMgU1VSVkVJTExBTkNFIE1FQVNVUkVTXCJdXSxJW1wiUy1BLU1GUVJYLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5QSE9UT0dSQVBISUNcIl1dLElbXCJTLUEtTUZRUy0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtQS1NRlFULS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuVFJBSU5FUlwiXV0sSVtcIlMtQS1NRlFVLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuVVRJTElUWVwiXV0sSVtcIlMtQS1NRlFZLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuQ09NTVVOSUNBVElPTlNcIl1dLElbXCJTLUEtTUZRTy0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLk1FREVWQUNcIl1dLElbXCJTLUEtTUZTLS0tXCJdPVtFW1wiQVIuSS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbXCJTLUEtTUZNLS0tXCJdPVtFW1wiQVIuSS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1BLU1ILS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl1dLElbXCJTLUEtTUhBLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkFUVEFDS1wiXV0sSVtcIlMtQS1NSFMtLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJW1wiUy1BLU1IVS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5VVElMSVRZXCJdXSxJW1wiUy1BLU1IVUwtLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5VVElMSVRZXCJdLEVbXCJBSVIuTTIuTElHSFRcIl1dLElbXCJTLUEtTUhVTS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlVUSUxJVFlcIl0sRVtcIkFJUi5NMi5NRURJVU1cIl1dLElbXCJTLUEtTUhVSC0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlVUSUxJVFlcIl0sRVtcIkFJUi5NMi5IRUFWWVwiXV0sSVtcIlMtQS1NSEktLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLElbXCJTLUEtTUhILS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkNPTUJBVCBTRUFSQ0ggQU5EIFJFU0NVRVwiXV0sSVtcIlMtQS1NSFItLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUEtTUhRLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdXSxJW1wiUy1BLU1IQy0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5DQVJHT1wiXV0sSVtcIlMtQS1NSENMLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuQ0FSR09cIl0sRVtcIkFJUi5NMi5MSUdIVFwiXV0sSVtcIlMtQS1NSENNLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuQ0FSR09cIl0sRVtcIkFJUi5NMi5NRURJVU1cIl1dLElbXCJTLUEtTUhDSC0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkNBUkdPXCJdLEVbXCJBSVIuTTIuSEVBVllcIl1dLElbXCJTLUEtTUhULS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlRSQUlORVJcIl1dLElbXCJTLUEtTUhPLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLk1FREVWQUNcIl1dLElbXCJTLUEtTUhNLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUEtTUhELS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXV0sSVtcIlMtQS1NSEstLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuVEFOS0VSXCJdXSxJW1wiUy1BLU1ISi0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLElbXCJTLUEtTUwtLS0tXCJdPVtFW1wiQVIuSS5GRi5NSUxJVEFSWSBCQUxMT09OXCJdXSxJW1wiUy1BLU1WLS0tLVwiXT1bRVtcIkFSLkkuVklQXCJdXSxJW1wiUy1BLU1FLS0tLVwiXT1bRVtcIkFSLkkuRVNDT1JUXCJdXSxJW1wiUy1BLVctLS0tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl1dLElbXCJTLUEtV00tLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXV0sSVtcIlMtQS1XTVMtLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5MQVVOQ0hFRFwiXV0sSVtcIlMtQS1XTVNTLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5TVVJGQUNFXCJdXSxJW1wiUy1BLVdNU0EtLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLk0xLlNVUkZBQ0VcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLkFJUlwiXV0sSVtcIlMtQS1XTVNVLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5TVUJTVVJGQUNFXCJdXSxJW1wiUy1BLVdNU0ItLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLklDLkFOVElCQUxMSVNUSUMgTUlTU0lMRVwiXV0sSVtcIlMtQS1XTUEtLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLkxBVU5DSEVEXCJdXSxJW1wiUy1BLVdNQVMtLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLk0xLkFJUlwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuU1VSRkFDRVwiXV0sSVtcIlMtQS1XTUFBLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLkFJUlwiXV0sSVtcIlMtQS1XTUFQLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLlNQQUNFXCJdXSxJW1wiUy1BLVdNVS0tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLk0xLlNVQlNVUkZBQ0VcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLlNVUkZBQ0VcIl1dLElbXCJTLUEtV01MLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuTEFORFwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuQUlSXCJdXSxJW1wiUy1BLVdNQ00tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLk0xLkNSVUlTRVwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuTUlTU0lMRVwiXV0sSVtcIlMtQS1XTUItLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5CQUxMSVNUSUNcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLk1JU1NJTEVcIl1dLElbXCJTLUEtV0ItLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUMuQk9NQlwiXV0sSVtcIlMtQS1XRC0tLS1cIl09W0VbXCJBUi5JLkFJUiBERUNPWVwiXV0sSVtcIlMtQS1DLS0tLS1cIl09W0VbXCJBUi5JLkNJVklMSUFOXCJdXSxJW1wiUy1BLUNGLS0tLVwiXT1bRVtcIkFSLkkuRkYuQ0lWSUxJQU4gRklYRUQgV0lOR1wiXV0sSVtcIlMtQS1DSC0tLS1cIl09W0VbXCJBUi5JLkZGLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdXSxJW1wiUy1BLUNMLS0tLVwiXT1bRVtcIkFSLkkuRkYuQ0lWSUxJQU4gQkFMTE9PTlwiXV19fTtmdW5jdGlvbiBjKEksdCxFLFIsZSxBKXt2YXIgQz10LmZyYW1lLFQ9dC5hZmZpbGlhdGlvbnx8XCJGcmllbmRcIixTPXQuYmFzZUdlb21ldHJ5LE49dC5udW1iZXJTSURDLE89RS5pY29uQ29sb3JbVF0sRz1FLmljb25GaWxsQ29sb3JbVF0sbz1FLmJsYWNrW1RdLE09RS53aGl0ZVtUXSxpPXt9O2Zvcih2YXIgTCBpbiBpW1wiR1IuSUMuTUlMSVRBUllcIl09YShcIk1JTFwiKSxpW1wiR1IuSS5HT1ZFUk5NRU5UXCJdPWEoXCJHT1ZcIiksaVtcIkdSLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTEwIC0xMCwtMTAgMTAsLTEwIDAsLTEwIDUwLDAgMCwxMCAxMCwxMCAtMTAsMTAgelwifSxpW1wiR1IuSUMuRkVSUllcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9HOiFDJiZHLGQ6XCJtIDc1LDEwMCAwLC0zNSA1MCwwIDAsMzUgMjAsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlI/XCJGRVwiOlwiRlwifV0saVtcIkdSLklDLkFETUlOSVNUUkFUSVZFXCJdPWEoXCJBRE1cIiksaVtcIkdSLklDLk1BTlVBTCBUUkFDS1wiXT1hKFwiTUFOXCIpLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBDSEFQQVJSQUxcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsODAgMzAsMCBjIDUuNTQsMCAxMCw0LjQ2IDEwLDEwIGwgMCw1IGMgMCw1LjU0IC00LjQ2LDEwIC0xMCwxMCBsIC0zMCwwIGMgLTUuNTQsMCAtMTAsLTQuNDYgLTEwLC0xMCBsIDAsLTUgYyAwLC01LjU0IDQuNDYsLTEwIDEwLC0xMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMSxmb250c2l6ZToyMCx0ZXh0OlwiQ1wifV0saVtcIkdSLklDLkFJUiBERUZFTlNFIENPTVBPU0lURVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTg1LDEyMCBDODUsMTEwIDExNSwxMTAgMTE1LDEyMCBNOTAsMTE1IEw5MCw5MCBDOTAsODAgMTEwLDgwIDExMCw5MCBMMTEwLDExNSBNMTAwLDExMiBsMCwtMzBcIixmaWxsOiExfSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgSC9NQURcIl09YShcIkhNRFwiKSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgSC9NQUQgSEFXS1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDEsZm9udHNpemU6MjAsdGV4dDpcIkhcIn0saVtcIkdSLklDLkFJUiBERUZFTlNFIEgvTUFEIFBBVFJJT1RcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTAxLGZvbnRzaXplOjIwLHRleHQ6XCJQXCJ9LGlbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTAsMTIwIEw5MCw5MCBDOTAsODAgMTEwLDgwIDExMCw5MCBMMTEwLDEyMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5GTE9BVElORyBDUkFGVFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw3NSAyMCwwIDAsLTEwIC01LDAgMCwtMTAgLTEwLDAgMCwxMCAtNSwwIHpcIixzdHJva2U6ITF9LGlbXCJHUi5JQy5BSVIgQU5EIE1JU1NJTEUgREVGRU5TRVwiXT1hKFwiTURcIiksaVtcIkdSLklDLk1JTElUQVJZIEhJU1RPUllcIl09YShcIk1IXCIpLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBUQVJHRVRJTkcgVU5JVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk04MCwxMDAgbDIwLC0xNSAwLDE1IDIwLC0xNSBNNzUsODAgQzc1LDEwMCA4NSwxMTUgMTA1LDExNVwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzUsY3k6MTEwLHI6NX1dLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBUSEVBVEVSIE1JU1NJTEUgREVGRU5TRSBVTklUXCJdPWEoXCJUTURcIiksaVtcIkdSLklDLkFJUiBERUZFTlNFIFNIT1JUIFJBTkdFXCJdPWEoXCJTUkRcIiksaVtcIkdSLklDLkFJUiBERUZFTlNFIFNUSU5HRVJcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsODAgMzAsMCBjIDUuNTQsMCAxMCw0LjQ2IDEwLDEwIGwgMCw1IGMgMCw1LjU0IC00LjQ2LDEwIC0xMCwxMCBsIC0zMCwwIGMgLTUuNTQsMCAtMTAsLTQuNDYgLTEwLC0xMCBsIDAsLTUgYyAwLC01LjU0IDQuNDYsLTEwIDEwLC0xMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMSxmb250c2l6ZToyMCx0ZXh0OlwiU1wifV0saVtcIkdSLklDLkFJUiBERUZFTlNFIFZVTENBTlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4NSw4MCAzMCwwIGMgNS41NCwwIDEwLDQuNDYgMTAsMTAgbCAwLDUgYyAwLDUuNTQgLTQuNDYsMTAgLTEwLDEwIGwgLTMwLDAgYyAtNS41NCwwIC0xMCwtNC40NiAtMTAsLTEwIGwgMCwtNSBjIDAsLTUuNTQgNC40NiwtMTAgMTAsLTEwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTAxLGZvbnRzaXplOjIwLHRleHQ6XCJWXCJ9XSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgR1VOIFVOSVRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsODAgTDEwMCwxMjAgTTkyLDkwIGwwLDIwIE0xMDgsOTAgbDAsMjBcIixmaWxsOiExfSxpW1wiR1IuSUMuQUlSIFRSQUZGSUMgU0VSVklDRVNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDk1IDAsMjUgbSA3LjUsLTMyLjUgYyAwLDQuMSAtMy40LDcuNSAtNy41LDcuNSAtNC4xLDAgLTcuNSwtMy40IC03LjUsLTcuNSAwLC00LjEgMy40LC03LjUgNy41LC03LjUgNC4xLDAgNy41LDMuNCA3LjUsNy41IHogTSA2MCw4NSBsIDQwLDE1IDQwLC0xNSAwLDMwIC00MCwtMTUgLTQwLDE1IHpcIn0saVtcIkdSLklDLkFJUlBPUlQgT0YgREVCQVJLQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk04MCw3MCBsNDAsMCBNODAsODAgbDI1LC0yNSBNMTAwLDgwIGwwLDQwIE04MSw5MC41IGwzOCwxOSBNODEsMTA5LjUgbDM4LC0xOVwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMCxmaWxsOiExfV0saVtcIkdSLklDLkFMTElFRCBDT01NQU5EIEVVUk9QRSBSQVBJRCBSRUFDVElPTiBDT1JQUyAoQVJSQylcIl09YShcIkFSUkNcIiksaVtcIkdSLklDLkFMTElFRCBDT01NQU5EIE9QRVJBVElPTlNcIl09YShcIkFDT1wiKSxpW1wiR1IuSUMuQU1NVU5JVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCwxMTcgMCwtMjUgYyAwLC0xNSAyMCwtMTUgMjAsMCBsIDAsMjUgbSAtMjUsMCAzMCwwXCIsZmlsbDohMX0saVtcIkdSLklDLkFSTU9VUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTEyNSw4MCBDMTUwLDgwIDE1MCwxMjAgMTI1LDEyMCBMNzUsMTIwIEM1MCwxMjAgNTAsODAgNzUsODAgWlwiLGZpbGw6ITF9LGlbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDgwIGMgMjUsMCAyNSwzMCAwLDMwIGwgLTQwLDAgQyA1NSwxMTAgNTUsODAgODAsODAgWlwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzAsY3k6MTE1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMTUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTMwLGN5OjExNSxyOjUsZmlsbDohMX1dLGlbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTYwLDg1IGw0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6XCJ9LGlbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lORyAyNTI1Q1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxMDAgTDEwMCwxNDBcIn0saVtcIkdSLklDLkFWSUFUSU9OIEZJWEVEIFdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTAwIEwxMzAsODggYzE1LDAgMTUsMjQgMCwyNCBMMTAwLDEwMCA3MCwxMTIgYy0xNSwwIC0xNSwtMjQgMCwtMjQgWlwifSxpW1wiR1IuSUMuQ09NQkFUQU5UXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA4Ni45LDExMCBjIC0zLjYsMiAtNy4yLDMuOSAtMTAuOCw1LjkgMi4xLDIuOSA2LjcsMy45IDEwLDIuMSAyLjYsLTAuOSA0LjcsLTMuOCAzLjEsLTYuMSAtMC44LC0wLjYgLTEuNSwtMS4zIC0yLjMsLTEuOSB6IG0gMjYuMywwLjEgYyAzLjYsMiA3LjIsMy45IDEwLjgsNS45IC0yLjEsMi45IC02LjcsMy45IC0xMCwyLjEgLTIuNiwtMC45IC00LjcsLTMuOCAtMy4xLC02LjEgMC44LC0wLjYgMS41LC0xLjMgMi4zLC0xLjkgelwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDExMi45LDExMCBjIC01LjYsLTQgLTExLjMsLTcuOSAtMTYuMSwtMTIuNSAtNC4yLC00LjUgLTcsLTkuOCAtOS4yLC0xNS4xIC0wLjgsNC40IC0wLjksOS4zIDIuNCwxMy4yIDMuNiw0LjUgOC42LDguMSAxMy41LDExLjggMi4zLDEuNyA0LjcsMy4zIDcuMSw0LjggMC44LC0wLjcgMS41LC0xLjUgMi4zLC0yLjIgbSAtMjUuNywwIGMgNS42LC00IDExLjMsLTcuOSAxNi4xLC0xMi41IDQuMiwtNC41IDcsLTkuOCA5LjIsLTE1LjEgMC44LDQuNCAwLjksOS4zIC0yLjQsMTMuMiAtMy42LDQuNSAtOC42LDguMSAtMTMuNSwxMS44IC0yLjMsMS43IC00LjcsMy4zIC03LjEsNC44IC0wLjgsLTAuNyAtMS41LC0xLjUgLTIuMywtMi4yXCIsZmlsbDpNLHN0cm9rZXdpZHRoOjJ9XSxpW1wiR1IuSUMuQVZJQVRJT04gQ09NUE9TSVRFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMDAgMTUuNyw3LjkgYyAxMS44LDAgMTEuOCwtMTUuNyAwLC0xNS43IHogbSAwLDAgLTE1LjcsLTcuOSBjIC0xMS44LDAgLTExLjgsMTUuNyAwLDE1LjcgeiBtIC0xMCwtMjAgMTAsMjAgLTEwLDIwIDIwLDAgLTEwLC0yMCAxMCwtMjAgelwifSxpW1wiR1IuSUMuQVZJQVRJT04gVEFDVElDQUwgQUlSIENPTlRST0wgUEFSVFlcIl09YShcIlRBQ1BcIiksaVtcIkdSLklDLkFWSUFUSU9OIEZPUldBUkQgQUlSIENPTlRST0xMRVJcIl09YShcIkZBQ1wiKSxpW1wiR1IuSUMuU1BFQ0lBTCBUUk9PUFNcIl09YShcIlNUXCIpLGlbXCJHUi5JQy5SQU5HRVJcIl09YShcIlJHUlwiKSxpW1wiR1IuSUMuQkFORFwiXT1hKFwiQkFORFwiKSxpW1wiR1IuSUMuQVJNWSBNVVNJQ1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA5OS42LDExMC41IGMgLTQuOCwtMS40IC0xMC45LDIuMiAtMTAuNCw3LjcgMSwyLjUgNi4yLDIuNCA5LjYsLTAuMiAxLjksLTEuNSAyLjcsLTMuOCAyLjMsLTYuOSBsIC0wLjEsLTIxLjMgYyAxMi43LDUuOCA3LjYsMTQuOCA1LjYsMjAuNyA0LjcsLTQuOSA1LjgsLTEzLjIgMS41LC0xNy45IC00LjQsLTQuNiAtNSwtNyAtOC40LC0xMyB6XCIsc3Ryb2tlOiExfSxpW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdPWEoXCJBVEZcIiksaVtcIkdSLklDLkNCUk5cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyMCBjIDAsLTIwIDEwLC0zMiA1MCwtMzUgbSAtMTAsMzUgQyAxMjAsMTAwIDExMCw4OCA3MCw4NVwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzUsY3k6OTAscjo2fSx7dHlwZTpcImNpcmNsZVwiLGN4OjEyNSxjeTo5MCxyOjZ9XSxpW1wiR1IuQ0hFTUlDQUwsIEJJT0xPR0lDQUwsIFJBRElPTE9HSUNBTCwgTlVDTEVBUiwgQU5EIEhJR0gtWUlFTEQgRVhQTE9TSVZFU1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsODAgMjAsMCAxMCwyMCAtMTAsMjAgLTIwLDAgLTEwLC0yMCB6XCIsZmlsbDpHfSxhKFwiRVwiKV0saVtcIkdSLklDLlNQQUNFXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODAgLTEuMjUsMTYuNSAtNC4yLC0zLjMgMi41LDQuOSAtNS41LDEuNyAtMC40LC0wIDAuMiwwIC0wLjIsMCAwLjQsLTAgNS40LDIuMyAtMS44LDQuNiAzLjYsLTMuNSAxLjMsMTYuNSAxLjMsLTE2LjUgNC4yLDMuMyAtMi41LC00LjkgNS41LC0xLjcgMC40LDAgLTAuMiwtMCAwLjIsMCAtMC40LDAgLTUuMywtMS43IDIuNSwtNC42IC00LDMuMiB6XCIsc3Ryb2tlOiExfV0saVtcIkdSLklDLkNJVklMIEFGRkFJUlNcIl09YShcIkNBXCIpLGlbXCJHUi5JQy5DSVZJTC1NSUxJVEFSWS1DT09QRVJBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCw4MCA4MCwwIDAsMjAgYyAwLDI1IC04MCwyNSAtODAsMCB6XCIsZmlsbDohMX0saVtcIkdSLkkuQ0lWSUxJQU5cIl09YShcIkNJVlwiKSxpW1wiR1IuSS5DSVZJTElBTlwiXS5maWxsPVJ8fE4/RzohQyYmRyxpW1wiR1IuSS5DSVZJTElBTlwiXS5zdHJva2U9byxpW1wiR1IuSS5DSVZJTElBTlwiXS5zdHJva2V3aWR0aD0zLGlbXCJHUi5JQy5DT01NQU5EIEFORCBDT05UUk9MXCJdPWEoXCJDMlwiKSxpW1wiR1IuSUMuQ09NQkFUXCJdPWEoXCJDQlRcIiksaVtcIkdSLklDLkNPTUJBVCBTRVJWSUNFIFNVUFBPUlRcIl09YShcIkNTU1wiKSxpW1wiR1IuSUMuQ09NQkFUIFNVUFBPUlRcIl09YShcIkNTXCIpLGlbXCJHUi5JQy5DT01CQVQgU1VQUE9SVCAoTUFOT0VVVlJFIEVOSEFOQ0VNRU5UKVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSw4MCAwLDI1IDE1LDE1IDE1LC0xNSAwLC0yNSB6XCJ9LGlbXCJHUi5JQy5DT01CSU5FRCBBUk1TXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDgwIDYwLDQwIG0gMCwtNDAgLTYwLDQwIG0gNTUsLTQwIGMgMjUsMCAyNSw0MCAwLDQwIGwgLTUwLDAgQyA1MCwxMjAgNTAsODAgNzUsODAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5DT1VOVEVSLUlOVEVMTElHRU5DRVwiXT1hKFwiQ0lcIiksaVtcIkdSLklDLkNSSU1JTkFMIElOVkVTVElHQVRJT04gRElWSVNJT05cIl09YShcIkNJRFwiKSxpW1wiR1IuSUMuRElWSU5HXCJdPVtdLGlbXCJHUi5JQy5ET0dcIl09YShcIkRPR1wiKSxpW1wiR1IuSUMuRFJJTExJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsODAgNSw0MCAyMCwwIDUsLTQwIHpcIn0saVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdPWEoXCJERUFcIiksaVtcIkdSLklDLkVMRUNUUk9OSUMgUkFOR0lOR1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTEyMCwxMzAgYy00MCwyMCAtODAsLTQ1IC00MCwtNzAgeiBNMTAwLDk1IEwxNDAsNzVcIixmaWxsOiEhUiYmR30saVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXT1hKFwiRVdcIiksaVtcIkdSLklDLkVNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw2MCAwLDIyLjcgLTE5LjcsLTExLjMgLTEwLDE3LjMgTCA4MCwxMDAgbCAtMTkuNywxMS4zIDEwLDE3LjMgTCA5MCwxMTcuMyA5MCwxNDAgbCAyMCwwIDAsLTIyLjcgMTkuNywxMS4zIDEwLC0xNy4zIEwgMTIwLDEwMCBsIDE5LjcsLTExLjMgLTEwLC0xNy4zIEwgMTEwLDgyLjcgMTEwLDYwIDkwLDYwIHpcIn0saVtcIkdSLklDLkVOR0lORUVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk02MCwxMjAgTDYwLDgwIDE0MCw4MCAxNDAsMTIwIE0xMDAsODAgTDEwMCwxMTBcIn0saVtcIkdSLklDLkVOR0lORUVSIE1FQ0hBTklaRURcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsOTAgMCwxNSBtIC0yNSw1IDAsLTIwIDUwLDAgMCwyMCBtIDAsLTMwIGMgMjUsMCAyNSw0MCAwLDQwIGwgLTUwLDAgQyA1MCwxMjAgNTAsODAgNzUsODAgWlwifSxpW1wiR1IuSUMuRU5HSU5FRVIgVVRJTElUWSBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDEwMCAwLDEwIG0gLTE1LDUgMCwtMTUgMzAsMCAwLDE1IE0gNzAsODAgYyAwLDE1IDYwLDE1IDYwLDAgbCAwLDQwIC02MCwwIHpcIn0saVtcIkdSLklDLkVOVklST05NRU5UQUwgUFJPVEVDVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODAgLTEwLDE1IDUsMCAtMTAsMTAgNSwwIC0xMCwxMCAxNSwwIDAsNSAxMCwwIDAsLTUgMTUsMCAtMTAsLTEwIDUsMCAtMTAsLTEwIDUsMCB6XCIsZmlsbDohMX0saVtcIkdSLklDLkVYUExPU0lWRSBPUkROQU5DRSBESVNQT1NBTFwiXT1hKFwiRU9EXCIpLGlbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdPWEoXCJGQklcIiksaVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXT17dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX0saVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWSBPQlNFUlZFUlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTA4LHI6NX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsMTIwIDMwLC0yMCBtIC0zMCwyMCAyMCwtNDAgMjAsNDAgelwiLGZpbGw6ITF9XSxpW1wiR1IuSUMuRklFTEQgQ0FNUCBDT05TVFJVQ1RJT05cIl09W2lbXCJHUi5JQy5FTkdJTkVFUlwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo3Nyxmb250c2l6ZToyNSx0ZXh0OlwiQ0FNUFwifV0saVtcIkdSLklDLkZJTkFOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsOTUgMTAsLTEwIDIwLDAgMTAsMTAgbSAtNDAsMCAwLDIwIDQwLDAgMCwtMjAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5GSVJFIFBST1RFQ1RJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDkwIC01LDUgLTEwLC0xMCA1LC01IC0yMCwwIDUsNSAtMTAsMTAgLTUsLTUgMCwyMCA1LC01IDEwLDEwIC01LDUgMjAsMCAtNSwtNSAxMCwtMTAgNSw1IHpcIn0saVtcIkdSLklDLkZJWEVEIFdJTkcgTUlTT1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsc3Ryb2tlOm8sZDpcIk03MCw4NSBsNDAsMCAxMCwtMTAgMCw1MCAtMTAsLTEwIC00MCwwIHogTTEyMCw4NSBsMTAsMCBNMTIwLDk1IGwxMCwwIE0xMjAsMTA1IGwxMCwwIE0xMjAsMTE1IGwxMCwwXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJNIDc4LjggNjEuNSBDIDY4LjEgNjEuNSA2OC4xIDc4LjUgNzguOCA3OC41IEwgMTAwIDcwIEwgNzguOCA2MS41IHogTSAxMDAgNzAgTCAxMjEuMyA3OC41IEMgMTMxLjkgNzguNSAxMzEuOSA2MS41IDEyMS4zIDYxLjUgTCAxMDAgNzAgelwifV0saVtcIkdSLklDLkdFT1NQQVRJQUwgU1VQUE9SVFwiXT1hKFwiR0VPXCIpLGlbXCJHUi5JQy5HT1ZFUk5NRU5UIE9SR0FOSVpBVElPTlwiXT1hKFwiR09cIiksaVtcIkdSLklDLklORk9STUFUSU9OIE9QRVJBVElPTlNcIl09YShSJiYhTj9cIklXXCI6XCJJT1wiKSxpW1wiR1IuSUMuSU5URVJOQVRJT05BTCBTRUNVUklUWSBBU1NJU1RBTkNFIEZPUkNFIChJU0FGKVwiXT1hKFwiSVNBRlwiKSxpW1wiR1IuSUMuSU5URVJST0dBVElPTlwiXT1hKFwiSVBXXCIpLGlbXCJHUi5JQy5KT0lOVCBGSVJFIFNVUFBPUlRcIl09YShcIkpGU1wiKSxpW1wiR1IuSUMuSk9JTlQgSU5GT1JNQVRJT04gQlVSRUFVXCJdPWEoXCJKSUJcIiksaVtcIkdSLklDLkpPSU5UIElOVEVMTElHRU5DRSBDRU5UUkVcIl09YShcIkpJQ1wiKSxpW1wiR1IuSUMuSlVER0UgQURWT0NBVEUgR0VORVJBTFwiXT1hKFwiSkFHXCIpLGlbXCJHUi5JQy5MQUJPVVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsODUgMjAsMCBtIC0xMCwwIDAsMjUgLTEwLDAgMTAsMTAgMTAsLTEwIC0xMCwwXCIsZmlsbDohMX0saVtcIkdSLklDLkxBVU5EUlkvQkFUSFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5NSw4MCAxMCwxMCAwLDMwIG0gMCwtMzAgLTEwLDAgbSAxMCwwIC0xMCwxMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTAwLDExOCBDIDc2LDEwOSA4NSw5NSA4Miw4MiBjIDYsNyAxMiw3IDE4LDAgNiw3IDEyLDcgMTgsMCAtMywxMyA2LDI3IC0xOCwzNiB6XCIsZmlsbDohMX0saVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9HOiFDJiZHLGQ6XCJtIDc1LDEwMCAwLC0zNSA1MCwwIDAsMzUgMjAsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzNSwxMDAgLTE1LDM1IC0xMCwwIDE1LC0zNSB6XCJ9XSxpW1wiR1IuSUMuTElBSVNPTlwiXT1hKFwiTE9cIiksaVtcIkdSLklDLk1BSU5URU5BTkNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzAsOTAgYzEwLDAgMTAsMjAgMCwyMCBtMTAsLTEwIGw0MCwwIG0xMCwtMTAgYy0xMCwwIC0xMCwyMCAwLDIwXCIsZmlsbDohMX0saVtcIkdSLklDLk1BVEVSSUVMXCJdPWEoXCJNQVRcIiksaVtcIkdSLklDLk1FRElDQUwgRVZBQ1VBVElPTiBIRUxJQ09QVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNjAsODUgbDQwLDE1IDQwLC0xNSAwLDMwIC00MCwtMTUgLTQwLDE1IHogTTk1LjUsODAgbDksMCAwLC05IDksMCAwLC05IC05LDAgMCwtOSAtOSwwIDAsOSAtOSwwIDAsOSA5LDAgWlwifSxpW1wiR1IuSUMuTUVTU0VOR0VSXCJdPWEoXCJNXCIpLGlbXCJHUi5JQy5NRVRFT1JPTE9HSUNBTFwiXT1hKFwiTUVUXCIpLGlbXCJHUi5JQy5NSUxJVEFSWSBJTkZPUk1BVElPTiBTVVBQT1JUIE9QRVJBVElPTlMgKE1JU08pXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzAsODUgbDQwLDAgMTAsLTEwIDAsNTAgLTEwLC0xMCAtNDAsMCB6IE0xMjAsODUgbDEwLDAgTTEyMCw5NSBsMTAsMCBNMTIwLDEwNSBsMTAsMCBNMTIwLDExNSBsMTAsMFwifSxpW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdPWEoXCJNSVwiKSxpW1wiR1IuSUMuTUlMSVRBUlkgUE9MSUNFXCJdPWEoXCJNUFwiKSxpW1wiR1IuSUMuTUlORVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMTAwIGMgMCw1LjUgLTksMTAgLTIwLDEwIC0xMSwwIC0yMCwtNC41IC0yMCwtMTAgMCwtNS41IDksLTEwIDIwLC0xMCAxMSwwIDIwLDQuNSAyMCwxMCB6IG0gLTUsLTIwIC0zMCw0MCBtIDAsLTQwIDMwLDQwIG0gLTE1LC00MCAwLDQwXCJ9LGlbXCJHUi5JQy5NSU5FIENMRUFSSU5HXCJdPVtpW1wiR1IuSUMuTUlORVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo3Nyxmb250c2l6ZToyNSx0ZXh0OlwiQ0xSXCJ9XSxpW1wiR1IuSUMuTUlORSBMQVVOQ0hJTkdcIl09W2lbXCJHUi5JQy5NSU5FXCJdLHt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyNSAwLDEwIDQwLDAgMCwtMTAgelwifV0saVtcIkdSLklDLk1JTkUgTEFZSU5HXCJdPVtpW1wiR1IuSUMuTUlORVwiXSx7dHlwZTpcInBhdGhcIixkOlwibSA4MCw2NSAwLDEwIDQwLDAgMCwtMTAgelwifV0saVtcIkdSLklDLk1JU1NJTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05MCwxMjAgTDkwLDkwIEM5MCw4MCAxMTAsODAgMTEwLDkwIEwxMTAsMTIwIE0xMDAsMTIwIEwxMDAsODBcIixmaWxsOiExfSxpW1wiR1IuSUMuTUlTU0lMRS5MSUdIVFwiXT17dHlwZTpcInBhdGhcIixkOlwiTTkwLDkwIEwxMTAsOTBcIn0saVtcIkdSLklDLk1JU1NJTEUuTUVESVVNXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTAsOTAgTDExMCw5MCBNOTAsOTcgTDExMCw5N1wifSxpW1wiR1IuSUMuTUlTU0lMRS5IRUFWWVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTkwLDkwIEwxMTAsOTAgTTkwLDk3IEwxMTAsOTcgTTkwLDEwNCBMMTEwLDEwNFwifSxpW1wiR1IuSUMuTU9SQUxFLCBXRUxGQVJFLCBBTkQgUkVDUkVBVElPTlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1XUlwifSxpW1wiR1IuSUMuTU9SVEFSXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMTUscjo1LGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDExMSBsMCwtMzAgTTkwLDkwIGwxMCwtMTAgMTAsMTBcIixmaWxsOiExfV0saVtcIkdSLklDLk1PUlRVQVJZIEFGRkFJUlNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsOTUgMjAsMCBtIC0xMCwtMTAgMCwzMCBtIC0xNSwtMzUgMzAsMCAwLDQwIC0zMCwwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuTVVMVElOQVRJT05BTCAoTU4pXCJdPWEoXCJNTlwiKSxpW1wiR1IuSUMuTkFWQUxcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSw4NSBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIC0yMCw1IDMwLDAgbSAtMTUsMCAwLDMwXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIk0gODIuMyAxMDIuNiBDIDgyLjMgMTEzLjkgODQuMiAxMTUuOSA4NC4yIDExNS45IEwgODYuNSAxMTQuMSBDIDkwLjIgMTE3LjggOTQuOCAxMjAuOCA5OS45IDEyMC45IEwgMTAwLjUgMTIwLjkgTCAxMDEgMTIwLjkgQyAxMDYuMiAxMjAuOCAxMTAuOCAxMTcuOCAxMTQuNCAxMTQuMSBMIDExNi43IDExNS45IEMgMTE2LjcgMTE1LjkgMTE4LjYgMTEzLjkgMTE4LjcgMTAyLjYgQyAxMTMuOSAxMDYuOCAxMDguOSAxMDkgMTA4LjkgMTA5IEwgMTEwLjkgMTEwLjcgQyAxMTAuOSAxMTAuNyAxMDYuOCAxMTUuMiAxMDAuNSAxMTUuMiBMIDEwMC41IDExNS4yIEMgMTAwLjUgMTE1LjIgMTAwLjQgMTE1LjIgMTAwLjQgMTE1LjIgQyA5NC4yIDExNS4yIDkwIDExMC43IDkwIDExMC43IEwgOTIgMTA5IEMgOTIgMTA5IDg3IDEwNi44IDgyLjMgMTAyLjYgelwiLHN0cm9rZTohMX1dLGlbXCJHUi5JQy5PQlNFUlZFUi9PQlNFUlZBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODAgLTI1LDQwIDUwLDAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5PUkROQU5DRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA5MCw5NyA4Myw4MyBtIDI3LDE0IDcsLTE0IE0gOTUsOTUgOTAsODEgbSAxNSwxNCA1LC0xNCBtIDEwLDI2LjUgYyAwLDYuOSAtOSwxMi41IC0yMCwxMi41IC0xMSwwIC0yMCwtNS42IC0yMCwtMTIuNSAwLC02LjkgOSwtMTIuNSAyMCwtMTIuNSAxMSwwIDIwLDUuNiAyMCwxMi41IHpcIixmaWxsOiExfSxpW1wiR1IuSUMuUEVSU09OTkVMIFNFUlZJQ0VTXCJdPWEoXCJQU1wiKSxpW1wiR1IuSUMuUEVUUk9MRVVNIE9JTCBMVUJSSUNBTlRTXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMTkgMCwtMjQgbSAwLDAgQyA5OSw5NSA4NSw4MSA4NSw4MSBsIDMwLDAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5QSVBFTElORVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTUsMTEwIDE1LDAgbSAtMTUsLTE1IDE1LDAgbSAtNDUsMTUgLTE1LDAgTSA4NSw5NSA3MCw5NSBtIDMwLC0xNSAwLDEwIC0xNSwwIDAsMjUgMzAsMCAwLC0yNSAtMTUsMCBtIC0xMCwtMTAgMjAsMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5QT1NUQUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsODAgMzAsMCBjIC0xLjQsMTUuNSAwLDI1IDEwLDM1IC0yMCwwIC00MCwtMjAgLTQwLC0zNSB6XCIsZmlsbDohMX0saVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTXCJdPWEoXCJQQVwiKSxpW1wiR1IuSUMuUFVCTElDIEFGRkFJUlMgQlJPQURDQVNUXCJdPWEoXCJCUEFEXCIpLGlbXCJHUi5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsc3Ryb2tlOm8sZDpcIk03MCw4NSBsNDAsMCAxMCwtMTAgMCw1MCAtMTAsLTEwIC00MCwwIHogTTEyMCw4NSBsMTAsMCBNMTIwLDk1IGwxMCwwIE0xMjAsMTA1IGwxMCwwIE0xMjAsMTE1IGwxMCwwXCJ9LGlbXCJHUi5JQy5RVUFSVEVSTUFTVEVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTE1LDk1IGMgMCwxNSAxNSwxNSAxNSwwIDAsLTE1IC0xNSwtMTUgLTE1LDAgeiBtIDAsMCAtNDUsMCAwLDEwIDEwLDAgMCwtMTBcIn0saVtcIkdSLklDLlJBREFSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzIsOTUgbDMwLC0yNSAwLDI1IDMwLC0yNSBNNzAsNzAgYzAsMzUgMTUsNTAgNTAsNTBcIixmaWxsOiExfSxpW1wiR1IuSUMuUkFESU9cIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzMCxyOjEwLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC02MCBNNzAsNzAgbDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwXCJ9XSxpW1wiR1IuSUMuUkFESU8gUkVMQVlcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzMCxyOjEwLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwtMTUsLTQwIDE1LDAgMCwtMjAgTTcwLDYwIGw2MCwwXCJ9XSxpW1wiR1IuSUMuUkFESU8gVEVMRVRZUEUgQ0VOVFJFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMzUsZm9udHNpemU6MzAsdGV4dDpcIkNcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxNDAgbDAsLTgwICBNNzAsNjAgbDYwLDAgTTgwLDcwIGw0MCwwXCJ9XSxpW1wiR1IuSUMuUkFJTEhFQURcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsODAgbDAsNDAgTTgxLDkwLjUgbDM4LDE5IE04MSwxMDkuNSBsMzgsLTE5XCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjIwLGZpbGw6ITF9LHMuX3RyYW5zbGF0ZSgwLC01MCxbe3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMjAgbDgwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojc1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjUscjo1fV0pXSxpW1wiR1IuSUMuUkVMSUdJT1VTIFNVUFBPUlRcIl09YShcIlJFTFwiKSxpW1wiR1IuSUMuUkVQTEFDRU1FTlQgSE9MRElORyBVTklUXCJdPWEoXCJSSFVcIiksaVtcIkdSLklDLlNFQS1BSVItTEFORFwiXT1hKFwiU0VBTFwiKSxpW1wiR1IuSUMuU1VQUE9SVFwiXT1hKFwiU1BUXCIpLGlbXCJHUi5JQy5BUk1ZIEZJRUxEIFNVUFBPUlRcIl09YShcIkFGU1wiKSxpW1wiR1IuSUMuQ09OVFJBQ1RJTkcgU0VSVklDRVNcIl09YShcIktTXCIpLGlbXCJHUi5JQy5TRUFQT1JUIE9GIERFQkFSS0FUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDgwIGwwLDQwIE04MSw5MC41IGwzOCwxOSBNODEsMTA5LjUgbDM4LC0xOVwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMCxmaWxsOiExfSxzLl90cmFuc2xhdGUoMCwtMzUscy5fc2NhbGUoLjYsaVtcIkdSLklDLk5BVkFMXCJdKSldLGlbXCJHUi5JQy5TRUNVUklUWVwiXT1hKFwiU0VDXCIpLGlbXCJHUi5JQy5TRUNVUklUWSBQT0xJQ0UgKEFJUilcIl09W2EoXCJTUFwiKSx7dHlwZTpcInBhdGhcIixkOlwiTSA3OC44IDEyMS41IEMgNjguMSAxMjEuNSA2OC4xIDEzOC41IDc4LjggMTM4LjUgTCAxMDAgMTMwIEwgNzguOCAxMjEuNSB6IE0gMTAwIDEzMCBMIDEyMS4zIDEzOC41IEMgMTMxLjkgMTM4LjUgMTMxLjkgMTIxLjUgMTIxLjMgMTIxLjUgTCAxMDAgMTMwIHpcIn1dLGlbXCJHUi5JQy5TRU5TT1JcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDgwIGMgMCw3LjUgMTIuNSwyMCAyMCwyMCAtNy41LDAgLTIwLDEyLjUgLTIwLDIwIDAsLTcuNSAtMTIuNSwtMjAgLTIwLC0yMCA3LjUsMCAyMCwtMTIuNSAyMCwtMjAgelwifSxpW1wiR1IuSUMuU0hPUkUgUEFUUk9MXCJdPWEoXCJTUFwiKSxpW1wiR1IuSUMuU05JUEVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNjAgODUgTCA5MCA4NSBMIDYwIDg1IHogTSAxMTAgODUgTCAxNDAgODUgTCAxMTAgODUgeiBNIDEwMCA5MCBMIDEwMCAxMTUgTCAxMDAgOTAgelwifSxpW1wiR1IuSUMuUEFSQUNIVVRFIFJJR0dFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyMCwxMDAgLTIwLDIwIC0yMCwtMjAgbSAwLDAgYyAwLC0yNSA0MCwtMjUgNDAsMCBsIC00MCwwXCJ9LGlbXCJHUi5JQy5TUEVDSUFMIEZPUkNFU1wiXT1hKFwiU0ZcIiksaVtcIkdSLklDLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl09YShcIlNPRlwiKSxpW1wiR1IuSUMuU1VSVkVJTExBTkNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4MCAtMjUsNDAgNTAsMCB6XCJ9LGlbXCJHUi5JQy5TVVJWRVlcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNODUsMTIwIGwxNSwtMTUgMTUsMTUgXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTA1IGwwLC0yNSAyMCwxMi41IHpcIixmaWxsOiEhUiYmR31dLGlbXCJHUi5JQy5TVVNUQUlOTUVOVFwiXT1hKFwiU1VTVFwiKSxpW1wiR1IuSUMuVEVMRVBIT05FIFNXSVRDSFwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTM1LGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTQwIGwwLC04MCAgTTcwLDYwIGw2MCwwXCJ9XSxpW1wiR1IuSUMuVE9QT0dSQVBISUNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4NSwxMDUgYyAxMCw1IDIwLDUgMzAsMCBtIC0xNSwtMTUgMTUsMzAgbSAtMzAsMCAxNSwtMzAgMCwtMTBcIn0saVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDgwIGwwLDQwIE04MSw5MC41IGwzOCwxOSBNODEsMTA5LjUgbDM4LC0xOVwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMCxmaWxsOiExfV0saVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OIFNFQ1VSSVRZIEFHRU5DWSAoVFNBKVwiXT1hKFwiVFNBXCIpLGlbXCJHUi5JQy5VTk1BTk5FRCBTWVNURU1TXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwiLHN0cm9rZTohMX0saVtcIkdSLklDLlNFQVJDSCBBTkQgUkVTQ1VFXCJdPWEoXCJTQVJcIiksaVtcIkdSLklDLkRJVkVSLCBDSVZJTElBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOkcsZDpcIk0gMTE0LjMsOTQgQyAxMTQuMywxMDIuMyAxMDcuOSwxMDkgMTAwLDEwOSBjIC03LjksMCAtMTQuMiwtNi43IC0xNC4yLC0xNSAwLC04LjMgNi40LC0xNSAxNC4yLC0xNSA3LjksMCAxNC4zLDYuNyAxNC4zLDE1IHogbSAwLDI3IDE0LjMsMTUgLTU3LDAgMTQuMywtMTUgTSAxMjUuNyw3OSBsIDE0LjMsMCAwLDMwIC0xNC4zLDAgbSAtNTEuMywwIC0xNC4zLDAgMCwtMzAgMTQuMywwIG0gNTQuMiwxNSBjIDAsMTYuNiAtMTIuOCwzMCAtMjguNSwzMCAtMTUuNywwIC0yOC41LC0xMy40IC0yOC41LC0zMCBDIDcxLjUsNzcuNCA4NC4zLDY0IDEwMCw2NCAxMTUuNyw2NCAxMjguNSw3Ny40IDEyOC41LDk0IHpcIn0saVtcIkdSLklDLlZJREVPIElNQUdFUllcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxNDAsMTEwIC0yNiwwIG0gNywtMjAgMTksMCBtIC0xNSwtMTAgLTY1LDAgMCw0MCA1MCwwIHogbSAxNSw1IDAsMzBcIn0saVtcIkdSLklDLlVOSVRFRCBTVEFURVMgU0VDUkVUIFNFUlZJQ0UoVFJFQVMpIChVU1NTKVwiXT1hKFwiVVNTU1wiKSxpW1wiR1IuSUMuV0FURVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsOTAgNTAsMCBjIDEwLDAgMjAsMTAgMjAsMjAgbSAtNDAsLTMwIDIwLDAgbSAtMTAsMCAwLDEwXCIsZmlsbDohMX0saVtcIkdSLklDLldBVEVSIFBVUklGSUNBVElPTlwiXT1baVtcIkdSLklDLldBVEVSXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjkwLHk6MTEwLGZvbnRzaXplOjIwLHRleHQ6XCJQVVJFXCJ9XSxpW1wiR1IuSUMuRkYuQUlSIEFTU0FVTFQgV0lUSCBPUkdBTklDIExJRlRcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk0zNSwxMjAgTCA5MCwxMjAgbDEwLDEwIDEwLC0xMCBMMTY1LDEyMFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDEyMCBMIDkwLDEyMCBsMTAsMTAgMTAsLTEwIEwxNzUsMTIwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDEyMCBMIDkwLDEyMCBsMTAsMTAgMTAsLTEwIEwxNTUsMTIwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDEyMCBMIDkwLDEyMCBsMTAsMTAgMTAsLTEwIEwxNTAsMTIwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwibSA1NSwxMzUgYyAxMCwtMjAgODAsLTIwIDkwLDBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSwxNTAgQzI1LDExMCAxNzUsMTEwIDE3NSwxNTBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsMTUwIEM0NSwxMTAgMTU1LDExMCAxNTUsMTUwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTcwLDE0MCBDNzAsMTE1IDEzMCwxMTUgMTMwLDE0MFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuQUlSIEFORCBOQVZBTCBHVU5GSVJFIExJQUlTT04gQ09NUEFOWVwiXT1bXSxpW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwibSAzMCw5NSBjIDEwLDAgMCwxNSAxMy41LDE1IDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDEzLjUsMCAzLjUsLTE1IDEzLjUsLTE1XCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDI1LDkwIGMgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMjAsLTIwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwibSA0NSwxMTAgYyAxOC44LDAgMCwtMjAgMTgsLTIwIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDE4LjgsLTIwIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDE4LjgsLTIwIDE4LjgsMCAwLDIwIDE4LDIwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwibSAzMiw5NSBjIDEwLDAgMCwxNSAxMS41LDE1IDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDExLjUsMCAxLjUsLTE1IDExLjUsLTE1XCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5BTkFMWVNJU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTIwIDAsLTY1IG0gMCw5MCAtMzAsLTI1IDYwLDAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01NSwxMzUgTDEwMCwzMyAxNDUsMTM1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMjUsMTUwIEwxMDAsNTIgMTc1LDE1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk00NSwxNTAgTDEwMCw0NyAxNTUsMTUwXCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTYwLDEzMiBMMTAwLDMwIDE0MCwxMzJcIn19W1RdLGlbXCJHUi5JQy5GRi5CT1JERVIgUEFUUk9MXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTIyLjggNjYuOCBDIDExOS45IDY2LjggMTE3LjQgNjguNiAxMTcuNCA3MS42IEwgMTE3LjQgNzMuMSBMIDEyOC43IDczLjEgTCAxMjguNyA3Mi40IEMgMTI4LjcgNjguOCAxMjYuNSA2Ni44IDEyMi44IDY2LjggeiBNIDEwOC42IDc0LjggTCAxMDguNiA3NiBMIDExNy42IDc2IEwgMTE3LjUgNzcuNSBMIDExOCA4MC44IEMgMTE5LjEgODEuNSAxMTguOSA4Mi41IDEyMC44IDgzLjUgQyAxMjIuMSA4NC4xIDEyNCA4NCAxMjUuMiA4My40IEMgMTI3LjUgODIuNCAxMjkgNzkuMiAxMjguMyA3NiBMIDEzNy41IDc2IEwgMTM3LjUgNzQuOCBMIDEwOC42IDc0LjggeiBNIDk0LjggODIuMSBDIDkzLjMgODIuMSA5MiA4My41IDkyIDg1IEwgOTIgODUuMiBDIDkyIDg2LjYgOTYgOTEuMyA5NyA5Mi42IEMgOTguMiA5NC4zIDEwMC44IDk4LjggMTAzLjIgOTguOCBDIDEwNC41IDk4LjggMTExLjEgOTMuNyAxMTIuNiA5Mi44IEwgMTEyLjYgMTA2LjIgTCAxMjYuNCA4NS42IEMgMTIzIDg1LjYgMTE0LjkgODUuMiAxMTIuMiA4NS45IEMgMTEwLjIgODYuNCAxMDUgOTEuNiAxMDMuNiA5MS43IEMgMTAzLjQgOTEgMTAwLjYgODcuNSAxMDAgODYuNSBDIDk5LjIgODUuNCA5Ny4yIDgyLjEgOTUuNiA4Mi4xIEwgOTQuOCA4Mi4xIHogTSAxMzAuNCA4NS42IEMgMTI5LjYgODUuNiAxMTcuNSAxMDQuMSAxMTYuMyAxMDYuMiBMIDEyOC4xIDEwNi4yIEwgMTI4LjEgMTEwLjYgTCAxMTIuNSAxMTAuNiBMIDExMi41IDEzMy4yIEwgMTIwLjcgMTMzLjIgTCAxMjIgMTE3LjUgTCAxMjQuMyAxMTcuNSBMIDEyNS42IDEzMy4yIEwgMTMzLjUgMTMzLjIgTCAxMzMuNSA4Ny45IEMgMTMzLjUgODcuMiAxMzEuMiA4NS42IDEzMC40IDg1LjYgeiBNIDY2LjkgOTAuNyBDIDY2LjUgOTEuNCA2Mi41IDk2LjkgNjIuNSA5Ni45IEMgNjIuNSA5Ny44IDc2LjcgMTA3LjIgNzguNSAxMDguMyBDIDgxLjQgMTEwLjIgODMuOSAxMTIuMSA4Ni43IDExNCBDIDg4LjIgMTE1IDg5LjQgMTE1LjkgOTAuOCAxMTYuOCBDIDkyLjEgMTE3LjcgOTQuMSAxMTguNSA5NC4xIDEyMC40IEwgOTQuMSAxMzMuMiBMIDEwNS41IDEzMy4yIEwgMTA1LjUgMTIxLjcgQyAxMDUuNSAxMjAuNiAxMDcuMiAxMTkgMTA3LjIgMTE4LjggQyAxMDcuMiAxMTcuNiAxMDYuMSAxMTguNiAxMDUuNiAxMTYuOSBDIDEwNS4yIDExNS40IDEwNS40IDExNS42IDEwNC41IDExNC41IEMgMTAzLjUgMTEzLjEgMTAxLjkgMTEyIDk5LjggMTEyIEMgOTYuOCAxMTIgOTcuNiAxMTEuOCA5NS4zIDExMC4zIEMgOTMuOSAxMDkuMyA5Mi41IDEwOC40IDkxLjIgMTA3LjQgQyA4OC43IDEwNS41IDg1LjggMTAzLjUgODMuMiAxMDEuOCBDIDgwLjkgMTAwLjMgNjguMiA5MSA2Ni45IDkwLjcgeiBNIDY3LjkgOTIuNiBMIDcyLjcgOTUuNyBMIDcyLjggMTAzIEwgNjcuOSA5OS45IEwgNjcuOSA5Mi42IHogTSA3Ny44IDk5LjMgTCA4Mi42IDEwMi42IEwgODIuNiAxMTAgTCA3Ny44IDEwNi42IEwgNzcuOCA5OS4zIHogTSA4Ny40IDEwNi4yIEwgOTIuNSAxMDkuNSBMIDkyLjQgMTE2LjkgTCA4Ny40IDExMy41IEwgODcuNCAxMDYuMiB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLHN0cm9rZTohMSxkOlwiTSAxMTcuNCA3My4xIEwgMTE3LjQgNzQuOCBMIDEyOC43IDc0LjggTCAxMjguNyA3My4xIEwgMTE3LjQgNzMuMSB6IE0gMTI2LjQgODUuNiBMIDExMi42IDEwNi4yIEwgMTEyLjYgMTEwLjYgTCAxMjguMSAxMTAuNiBMIDEyOC4xIDEwNi4yIEwgMTE2LjQgMTA2LjIgQyAxMTcuNSAxMDQuMSAxMjkuNiA4NS42IDEzMC40IDg1LjYgTCAxMjYuNCA4NS42IHogTSA2Ny45IDkyLjYgTCA2Ny45IDk5LjkgTCA3Mi44IDEwMyBMIDcyLjcgOTUuNyBMIDY3LjkgOTIuNiB6IE0gNzcuOCA5OS4zIEwgNzcuOCAxMDYuNiBMIDgyLjYgMTEwIEwgODIuNiAxMDIuNiBMIDc3LjggOTkuMyB6IE0gODcuNCAxMDYuMiBMIDg3LjQgMTEzLjUgTCA5Mi40IDExNi45IEwgOTIuNSAxMDkuNSBMIDg3LjQgMTA2LjIgeiBcIn1dLGlbXCJHUi5JQy5GRi5CUk9BRENBU1QgVFJBTlNNSVRURVIgQU5URU5OQVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLDYwIDIwLDIwIDIwLC0yMCBtIC0yMCwwIDAsODBcIn0saVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk0xNjAsNzUgbC0xNSwyNSAxNSwyNVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTE3NSw1MCBsLTMwLDUwIDMwLDUwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTE1NSw1MCBsLTIwLDUwIDIwLDUwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTE1MCw4MCBsLTE1LDIwIDE1LDIwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMTUuNSA2OS44IEMgMTE1LjggNzAuNCAxMTYuOSA3Mi45IDExNy41IDcyLjkgTCAxMjguMyA3Mi45IEwgMTI4LjMgNjkuOCBMIDExNS41IDY5LjggeiBNIDExNy4zIDc0LjcgQyAxMTYuOCA3NC43IDExNiA3NS43IDExNS44IDc2LjEgTCAxMTcuMiA3Ni4xIEwgMTE3LjIgNzYuOCBDIDExNy4yIDc5LjYgMTE5LjggODEuOCAxMjIuOCA4MS44IEMgMTI2LjUgODEuOCAxMjguMyA3OC42IDEyOC4zIDc0LjcgTCAxMTcuMyA3NC43IHogTSAxMTEuMyA4My42IEMgMTEwLjUgODMuNiA5OS40IDkxLjggOTcuOCA5Mi45IEMgOTUuNiA5NC40IDkzIDk2LjEgOTEgOTcuNyBDIDg5LjEgOTkuMiA4NS40IDEwMC41IDg1LjQgMTAzLjYgTCA4NS40IDEwNCBDIDg1LjQgMTA0LjcgODcuMSAxMDYuNyA4OC4yIDEwNi43IEwgODguOCAxMDYuNyBDIDkwLjIgMTA2LjcgMTA4IDkzLjQgMTExLjMgOTEuNyBMIDExMS4zIDEwNS4zIEwgMTI2IDgzLjYgTCAxMTEuMyA4My42IHogTSA3NS4zIDgzLjYgQyA3NC41IDgzLjYgNzMuNCA4NC40IDczLjQgODUgTCA3My40IDEwOC45IEMgNzMuNCAxMDkuOCA3My45IDExMC4yIDc0LjQgMTEwLjUgTCA3OC41IDExMC41IEwgNzguNSA4My42IEwgNzUuMyA4My42IHogTSA3OC41IDExMC41IEwgNzguNSAxMzUuMiBMIDEwNS42IDEzNS4yIEwgMTA1LjYgMTEwLjUgTCA3OC41IDExMC41IHogTSAxMzAuNSA4My42IEMgMTI5LjYgODMuNiAxMjMuOCA5Mi45IDEyMi45IDk0LjIgQyAxMjEuOSA5NS43IDExNS43IDEwNC41IDExNS41IDEwNS4zIEwgMTI3LjYgMTA1LjMgTCAxMjcuNiAxMTAuMyBMIDExMS41IDExMC4zIEwgMTExLjUgMTM0LjggTCAxMTkuNiAxMzQuOCBDIDEyMC42IDEzNC44IDEyMS4xIDEyNy45IDEyMS4zIDEyNi42IEMgMTIxLjcgMTIzLjkgMTIyLjQgMTIwLjQgMTIyLjYgMTE3LjggTCAxMjIuOSAxMTcuOCBMIDEyNS40IDEzNC44IEwgMTMzLjkgMTM0LjggTCAxMzMuOSA4Ni43IEMgMTMzLjkgODUuNiAxMzEuOSA4My42IDEzMC43IDgzLjYgTCAxMzAuNSA4My42XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLHN0cm9rZTohMSxkOlwiTSAxMTcuNSA3Mi45IEwgMTE3LjMgNzQuNyBMIDEyOC4zIDc0LjcgTCAxMjguMyA3Mi45IEwgMTE3LjUgNzIuOSB6IE0gMTI2IDgzLjcgTCAxMTEuMyAxMDUuMyBMIDExMS41IDExMC4zIEwgMTI3LjcgMTEwLjMgTCAxMjcuNyAxMDUuMyBMIDExNS41IDEwNS4zIEMgMTE1LjcgMTA0LjUgMTIxLjkgOTUuNyAxMjIuOSA5NC4zIEMgMTIzLjggOTIuOSAxMjkuNiA4My43IDEzMC41IDgzLjcgTCAxMjYgODMuNyB6IFwifV0saVtcIkdSLklDLkZGLkRFUEFSVE1FTlQgT0YgSlVTVElDRSAoRE9KKVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTAwLjIgNjIuMyBDIDEwMC4xIDYzLjIgOTkgNjYuMyA5OC43IDY3LjQgQyA5Ny44IDY5LjkgOTkuNCA3MCA5OS40IDcyLjMgTCA5OS40IDczIEMgOTkuNCA3My43IDk4LjkgNzMuNSA5OC4zIDczLjggQyA5Ni42IDcyLjQgOTQuMiA3MSA5MS4zIDcxIEwgOTAgNzEgQyA4NC4yIDcxIDgwIDc1LjUgNzQuNiA3NS41IEwgNzMuOSA3NS41IEMgNzIuMyA3NS41IDcxLjUgNzQuMSA3MS4zIDc1LjggTCA3NC4zIDc3LjIgQyA3MS44IDgyLjQgNjkuOSA4OS43IDY3LjUgOTUuNSBDIDY2LjMgOTguNiA2NS4zIDEwMS42IDY0LjEgMTA0LjcgQyA2My41IDEwNi4zIDYzLjEgMTA3LjcgNjIuNSAxMDkuMyBDIDYyIDExMC41IDYxLjggMTEzLjEgNjAuMiAxMTMuMiBDIDYyLjQgMTE2LjQgNjggMTIwLjUgNzMuMyAxMjAuNSBMIDc2IDEyMC41IEMgODEuNiAxMjAuNSA4Ny4zIDExNi42IDg5LjUgMTEzLjIgTCA4OC4yIDExMy4yIEwgNzUuNCA3Ny4yIEwgNzQuNSA3Ny4yIEwgNzQuNSA3NyBMIDc1LjQgNzcuMiBMIDc4LjYgNzcuNyBMIDc5LjMgNzcuNyBMIDg5LjMgNzYuMiBMIDkwLjQgNzYuMyBDIDkzLjcgNzYuMyA5My44IDgwLjIgOTQuNyA4MC4yIEwgOTcuNyA4MC4yIEwgOTcuNyAxMjkuMiBMIDg2LjEgMTI5LjIgTCA4Ni4xIDEzMS41IEwgODEuNCAxMzEuNSBMIDgxLjQgMTM0LjEgTCA3Ny41IDEzNC4xIEwgNzcuNSAxMzguMiBMIDEyMy4zIDEzOC4yIEwgMTIzLjMgMTMzLjkgTCAxMTkuMyAxMzMuOSBMIDExOS4zIDEzMS42IEwgMTE0LjUgMTMxLjYgTCAxMTQuNSAxMjkuMiBMIDEwMi42IDEyOS4yIEwgMTAyLjYgODAuMiBMIDEwNiA4MC4yIEMgMTA3IDgwLjIgMTA2LjYgNzYuNCAxMTAuNyA3Ni40IEwgMTExLjMgNzYuNCBMIDEyMS4yIDc3LjcgTCAxMjIuMiA3Ny43IEwgMTI1LjQgNzcuMyBDIDEyNC4zIDc5LjcgMTIzLjEgODMuOCAxMjIuMSA4Ni40IEMgMTIwLjkgODkuNiAxMTkuOSA5Mi42IDExOC43IDk1LjggQyAxMTcuNSA5OC45IDExNi42IDEwMS45IDExNS40IDEwNSBDIDExNC45IDEwNi40IDExNC4yIDEwOC4xIDExMy43IDEwOS42IEMgMTEzLjQgMTEwLjQgMTEzLjEgMTExLjEgMTEyLjkgMTExLjkgQyAxMTIuNSAxMTMuMiAxMTIuOCAxMTMuMiAxMTEuMiAxMTMuMiBDIDExMy4zIDExNi40IDExOS4yIDEyMC41IDEyNC42IDEyMC41IEwgMTI3LjIgMTIwLjUgQyAxMzIuNiAxMjAuNSAxMzguOCAxMTYuNCAxNDAuOSAxMTMuMiBMIDEzOS44IDExMy4yIEwgMTI2LjQgNzcuMSBDIDEyNy40IDc2LjkgMTI5LjMgNzYuMiAxMjkuMyA3NS4zIEMgMTI5LjMgNzQuNSAxMjcuOCA3NS41IDEyNi43IDc1LjUgTCAxMjYuMyA3NS41IEMgMTIwLjggNzUuNSAxMTYuNiA3MSAxMTAuOSA3MSBMIDEwOS42IDcxIEMgMTA2LjcgNzEgMTA0LjIgNzIuNCAxMDIuNiA3My44IEMgMTAxLjggNzMuNCAxMDEuMyA3My42IDEwMS4zIDcyLjMgQyAxMDEuMyA3MS45IDEwMi40IDY4LjggMTAyLjUgNjguNSBMIDEwMC42IDYyLjMgTCAxMDAuMiA2Mi4zIHogTSAxMjYuMSA4MC44IEwgMTM3LjggMTEzLjIgTCAxMTQuMSAxMTMuMiBMIDEyNi4xIDgwLjggeiBNIDc0LjggODAuOCBMIDg2LjUgMTEzLjIgTCA2My4xIDExMy4xIEwgNzQuOCA4MC44IHpcIn0saVtcIkdSLklDLkZGLkRJUkVDVElPTiBGSU5ESU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE0MCBsMCwtODAgTTgwLDgwIGwyMCwtMjAgMjAsMjBcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuRElWSVNJT04gQU5EIEJFTE9XIFNVUFBPUlRcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk00MCw3NSBsMTUsMjUgLTE1LDI1XCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsNTAgbDMwLDUwIC0zMCw1MFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw1MCBsMjAsNTAgLTIwLDUwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDgwIGwxNSwyMCAtMTUsMjBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCA2NSBMIDExNS4yIDkxLjMgTCAxMzAuMyAxMTcuNSBDIDEzMy4zIDExMi40IDEzNSAxMDYuNCAxMzUgMTAwIEMgMTM1IDgwLjcgMTE5LjMgNjUgMTAwIDY1IHogTSAxMDAgNjUgQyA4MC43IDY1IDY1IDgwLjcgNjUgMTAwIEMgNjUgMTA2LjQgNjYuNyAxMTIuNCA2OS43IDExNy41IEwgODQuOCA5MS4zIEwgMTAwIDY1IHogTSA2OS43IDExNy41IEMgNzUuNyAxMjggODcgMTM1IDEwMCAxMzUgQyAxMTMgMTM1IDEyNC4zIDEyOCAxMzAuMyAxMTcuNSBMIDEwMCAxMTcuNSBMIDY5LjcgMTE3LjUgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxzdHJva2U6ITEsZDpcIk0gNjkuNywxMTcuNSAxMDAsNjUgbCAzMC4zLDUyLjUgelwifV0saVtcIkdSLklDLkZGLkZJRUxEIEFSVElMTEVSWSBST0NLRVRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTUwIGwwLC05NyBNODUsMTMwIGwwLC01MCBNMTE1LDEzMCBsMCwtNTAgTTg1LDczIGwxNSwtMjAgMTUsMjBcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuSEVBRFFVQVJURVJTIE9SIEhFQURRVUFSVEVSUyBFTEVNRU5UXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMzUsODAgbDEzMCwwIFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDgwIGwxNTAsMCBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsODAgbDExMCwwIFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw4MCBsMTAwLDAgXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5IT1JTRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjksNzIuOCBjIDAsMCAtNi4zLDIgLTksMi42IC0zLjQsMC43IC00LjksMS44IC03LjcsMy4xIC00LjIsMS45IC02LjgsMy42IC0xMS4zLDQuMyAtMy4zLDAuNSAtNy43LDEuNyAtMTEsMSAtMy45LC0wLjkgLTYuMSwtMi45IC0xMC4xLC0yLjkgLTMuNywtMCAtNy40LC0wLjYgLTEwLjYsMS4zIC0yLjYsMS42IC00LjcsNC4yIC01LjgsNy4xIC0yLjMsNS40IC0wLjgsMTIuNSAtMS4yLDE4LjQgLTAuMiwzLjEgLTAuNCw5LjMgLTAuNiwxMC4yIDAsMCAxLjYsLTAgMy40LC0yLjUgMC45LC0xLjIgMS43LC0zLjQgMS45LC00LjkgMC41LC0zLjEgLTAuNywtNy41IC0wLjQsLTEwIDEuMSwtMC4zIDIuNCwyLjggMi42LDQuNyAwLjIsMiAtMSwzLjMgLTEuNCw1LjIgLTAuNSwzIDAuMyw1IDAuNiw4LjMgMC4xLDEuNiAwLjgsMy45IDAuNSw2IC0wLjIsMiAtMC4yLDQuMyAtMC4yLDQuMyBsIDYuOSwwIC0wLjQsLTMuOCBjIDAsMCAtMS44LC0yLjUgLTIuMSwtNC4zIC0wLjUsLTIuNyAtMC41LC01LjQgMC4yLC04IDAuNSwtMiAzLjEsLTQuMyA0LjEsLTYuMSAxLjgsLTMuMSAzLjEsLTcuMSAzLjEsLTcuMSAwLDAgNS4xLDMuNCA5LjEsNC4yIDMuOCwwLjggMTEuNiwxLjQgMTEuNiwxLjQgMCwwIC0wLjIsNy4zIDAuMSwxMi40IC0wLDAuMSAwLjMsMy45IDAuMywzLjEgLTEuNCwzLjIgLTAsOC4yIC0wLDguMiAwLDAgMi45LDAgNi4zLC0wIGwgLTAuMywtMy40IGMgMCwwIC0xLjUsLTMuNSAtMS41LC01LjMgMCwtMy4xIDAuMSwtNS45IDAuOSwtOC45IDAuNCwtMS4yIDAuNywtMi45IDEuMywtNCAxLjQsLTIuMiAzLjEsLTMuOCA0LjIsLTYuMSAxLjEsLTIuNiAyLjMsLTUuMyAzLjYsLTcuOSAxLjYsLTMuMyA3LjgsLTcuMyA3LjgsLTcuMyAwLDAgNSwyLjkgOC40LDQuOSAxLjIsMC43IDMsMC4xIDMuNywtMSAwLjcsLTEuMSAwLjgsLTIuMiAwLjMsLTMuMyAtMy4yLC02LjcgLTcuOCwtOS40IC03LjgsLTkuNCB6XCIsc3Ryb2tlOiExfSxpW1wiR1IuSUMuRkYuSU5GQU5UUllcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw2NUwxNTAsMTM1TTUwLDEzNUwxNTAsNjVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsNTAgTDE3NSwxNTAgTTI1LDE1MCBMMTc1LDUwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw0NUwxNTUsMTU1TTQ1LDE1NUwxNTUsNDVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTYwLDcwTDE0MCwxMzBNNjAsMTMwTDE0MCw3MFwifX1bVF0saVtcIkdSLklDLkZGLklORkFOVFJZIERJU01PVU5URURcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw2NUwxNTAsMTM1TTUwLDEzNUwxNTAsNjVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDQ1LDcwIDExMCw2MCBNIDQ1LDEzMCAxNTUsNzBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDQ1TDE1NSwxNTVNNDUsMTU1TDE1NSw0NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjAsNzBMMTQwLDEzME02MCwxMzBMMTQwLDcwXCJ9fVtUXSxpW1wiR1IuSUMuRkYuSU5URVJDRVBUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDEyMCBsMCwtNjAgTTgwLDEyMCBsMjAsMjAgMjAsLTIwXCJ9LGlbXCJHUi5JQy5GRi5KQU1NSU5HXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjMsNjAgYzEwLDAgMCwxMCA3LDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDcsLTEwIE00MCw3NSBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDYwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgTTI1LDc1IGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNjAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCAgTTQ1LDc1IGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjcsNjAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMywxMCAgIE01Miw3NSBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDcsLTEwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTkuNiw1MSBjIC0yLjgsMCAtNSwyLjMgLTUsNS4zIDAsMi4xIDEuMiwzLjkgMi44LDQuNyBMIDg3LjgsNzguMyA2OS41LDc4LjQgYyAtMC4xLC0yLjggLTIuMywtNS4xIC01LC01LjEgLTIuOCwwIC01LDIuMyAtNSw1LjMgMCwyLjkgMi4yLDUuMyA1LDUuMyAwLjcsMCAxLjQsLTAuMiAyLC0wLjQgbCA5LjIsMTYuOCAtOS40LDE3LjIgYyAtMC42LC0wLjIgLTEuMiwtMC40IC0xLjgsLTAuNCAtMi44LDAgLTUsMi40IC01LDUuMyAwLDIuOSAyLjIsNS4zIDUsNS4zIDIuOCwwIDUsLTIuMyA1LC01LjMgMCwtMC4xIC0wLC0wLjIgLTAsLTAuMyBsIDE4LjMsMC4xIDkuNSwxNy4xIGMgLTEuNiwwLjkgLTIuNywyLjYgLTIuNyw0LjYgMCwyLjkgMi4zLDUuMyA1LDUuMyAyLjgsMCA1LC0yLjMgNSwtNS4zIDAsLTEuOSAtMC45LC0zLjUgLTIuMywtNC40IGwgOS42LC0xNy4zIDE4LjcsLTAuMSBjIC0wLDAuMSAtMCwwLjIgLTAsMC4zIDAsMi45IDIuMyw1LjMgNSw1LjMgMi44LDAgNSwtMi4zIDUsLTUuMyAwLC0yLjkgLTIuMiwtNS4zIC01LC01LjMgLTAuOCwwIC0xLjUsMC4yIC0yLjEsMC41IGwgLTkuNSwtMTcuNCA5LjUsLTE3LjQgYyAwLjYsMC4zIDEuNCwwLjUgMi4xLDAuNSAyLjgsMCA1LC0yLjQgNSwtNS4zIDAsLTIuOSAtMi4yLC01LjMgLTUsLTUuMyAtMi44LDAgLTUsMi4zIC01LDUuMyAwLDAuMSAwLDAuMiAwLDAuMyBMIDExMS44LDc4LjMgMTAyLjEsNjAuOCBjIDEuNSwtMC45IDIuNSwtMi42IDIuNSwtNC41IDAsLTIuOSAtMi4yLC01LjMgLTUsLTUuMyB6XCJ9LGlbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk01NSw2NUw1NSwxMzVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTUsNTBMNTUsMTUwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk01NSw0NUw1NSwxNTVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTU1LDcyTDU1LDEyOFwifX1bVF0saVtcIkdSLklDLkZGLk1FRElDQUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsXCIrUy5iYm94LnkxK1wiTDEwMCxcIitTLmJib3gueTIrXCJNXCIrUy5iYm94LngxK1wiLDEwMExcIitTLmJib3gueDIrXCIsMTAwXCJ9LGlbXCJHUi5JQy5GRi5NRURJQ0FMIFRIRUFURVJcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTcwIGwwLC0xNDAgTTQwLDc1IGwxNSwyNSAtMTUsMjUgTTE2MCw3NSBsLTE1LDI1IDE1LDI1IE01NSwxMDAgbDkwLDBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTUwIGwwLC0xMDAgTTI1LDUwIGwzMCw1MCAtMzAsNTAgTTE3NSw1MCBsLTMwLDUwIDMwLDUwIE01NSwxMDAgbDkwLDBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE1NSBsMCwtMTEwICBNNDUsNTAgbDIwLDUwIC0yMCw1MCBNMTU1LDUwIGwtMjAsNTAgMjAsNTAgTTY1LDEwMCBsNzAsMFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTcyIGwwLC0xNDQgTTUwLDgwIGwxNSwyMCAtMTUsMjAgTTE1MCw4MCBsLTE1LDIwIDE1LDIwIE02NSwxMDAgbDcwLDBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLk1FRElDQUwgQ09SUFNcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTcwIGwwLC0xNDAgTTE2MCw3NSBsLTE1LDI1IDE1LDI1IE0zMCwxMDAgbDExNSwwXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE1MCBsMCwtMTAwICBNMTc1LDUwIGwtMzAsNTAgMzAsNTAgTTI1LDEwMCBsMTIwLDBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE1NSBsMCwtMTEwIE0xNTUsNTAgbC0yMCw1MCAyMCw1MCBNNDUsMTAwIGw5MCwwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxNzIgbDAsLTE0NCAgTTE1MCw4MCBsLTE1LDIwIDE1LDIwIE0yOCwxMDAgbDExMCwwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5NRURJQ0FMIFRSRUFUTUVOVCBGQUNJTElUWVwiXT1baVtcIkdSLklDLkZGLk1FRElDQUxcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTcwLDkwIGwwLDIwICBNMTMwLDkwIGwwLDIwXCJ9XSxpW1wiR1IuSUMuRkYuTUlMSVRBUlkgUE9MSUNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwxNDAgQyA1My43NDY1LDEyMi42NTQgNzEuMDkxNiw5NS42NzM3IDY1LjMwOTksNzAuNjE5NyBjIDExLjU2MzQsMTMuNDkwNiAyMy4xMjY3LDEzLjQ5MDYgMzQuNjkwMSwwIDExLjU2NCwxMy40OTA2IDIzLjEyNiwxMy40OTA2IDM0LjY5LDAgQyAxMjguOTA4LDk1LjY3MzcgMTQ2LjI1NCwxMjIuNjU0IDEwMCwxNDAgWlwiLGZpbGw6ITF9LGlbXCJHUi5JQy5GRi5NT1RPUklaRURcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsXCIrUy5iYm94LnkxK1wiTDEwMCxcIitTLmJib3gueTJ9LGlbXCJHUi5JQy5GRi5OQVZBTFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk0gMTAwLDE0NSAxMDAsNjVcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSA3MCw3MCA2MCwwXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNTcuOCwxMDUuNSBjIC0yLjIsMC4xIDEuMywyMC42IDIuOCwyMi4xIDAuOCwwLjggMy41LC0zLjggNC42LC0yLjYgMTcuNCwyMC4yIDMzLDE5LjcgMzQuNywxOS42IDAsMCAwLjIsLTAgMC4zLDAgMS43LDAuMSAxNy4zLDAuNSAzNC43LC0xOS42IDEsLTEuMiAzLjcsMy40IDQuNiwyLjYgMS40LC0xLjUgNC45LC0yMS45IDIuOCwtMjIuMSAtMi4yLC0wLjEgLTQsNC4yIC02LjcsNi40IC0zLDIuNCAtNy41LDMuNCAtNy43LDQuNSAtMC4xLDAuOCA0LjksMy41IDMuOSw0LjkgLTUuMSw2LjMgLTE1LjEsMTYuNiAtMzEuMywxNyBsIC0wLjMsNC4zIC0wLjMsLTQuMyBjIC0xNi4yLC0wLjQgLTI2LjMsLTEwLjcgLTMxLjMsLTE3IC0xLjEsLTEuMyA0LC00LjEgMy45LC00LjkgLTAuMiwtMSAtNC43LC0yIC03LjcsLTQuNSAtMi43LC0yLjMgLTQuNSwtNi42IC02LjcsLTYuNCB6XCIsc3Ryb2tlOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo2MCxyOjUsZmlsbDohMX1dLGlbXCJHUi5JQy5GRi5QUklTT05cIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDYyLjUgNjcuOSBMIDYyLjUgNzMuNCBMIDY5LjkgNzMuNCBMIDY5LjkgMTA2IEMgNjYuOCAxMDYuNyA2NC40IDEwOS42IDY0LjQgMTEzLjQgQyA2NC40IDExNiA2NS44IDExNi45IDY1LjkgMTE4LjQgQyA2NiAxMjAuNCA2NS42IDEyMi41IDY1LjYgMTI0LjcgTCA2NS42IDEyNi42IEwgNjIuNSAxMjYuNiBMIDYyLjUgMTMyLjEgTCAxMzcuNSAxMzIuMSBMIDEzNy41IDEyNi42IEwgMTM2IDEyNi42IEwgMTM1LjYgMTE3LjUgQyAxMzguMyAxMTMuNCAxMzUuOCAxMDcgMTMxLjUgMTA2IEwgMTMxLjUgNzMuNCBMIDEzNy41IDczLjQgTCAxMzcuNSA2Ny45IEwgNjIuNSA2Ny45IHogTSA3NC41IDczLjQgTCA4Ny4yIDczLjQgTCA4Ny4yIDEwOC40IEMgODcuMiAxMDkuMiA4NC44IDEwOS43IDgzLjkgMTEwLjYgQyA4My4xIDExMS4zIDgyLjIgMTEyLjcgODEuNiAxMTMuNiBDIDgwLjUgMTE1LjIgNzguNiAxMTguNyA3OC42IDEyMS4xIEwgNzYuMSAxMTcgQyA3Ni41IDExNi40IDc2LjkgMTE0LjYgNzYuOSAxMTMuNyBMIDc2LjkgMTEyLjIgQyA3Ni45IDEwOS41IDc0LjUgMTA3LjkgNzQuNSAxMDYuNSBMIDc0LjUgNzMuNCB6IE0gOTEuNSA3My40IEwgMTEwLjIgNzMuNCBMIDExMC4yIDkwLjkgQyAxMDkgODkuNiAxMDguOCA4Ny44IDEwNi44IDg1LjcgQyAxMDUuNCA4NC4zIDEwMy41IDgzIDEwMC44IDgzIEwgMTAwLjMgODMgQyA5OC4yIDgzIDk2LjEgODMuNiA5NC45IDg0LjUgQyA5NC4zIDg1IDkzLjYgODUuNCA5My4xIDg2IEMgOTIuNCA4Ni42IDkyLjIgODcuMyA5MS41IDg3LjggTCA5MS41IDczLjQgeiBNIDExNC4zIDczLjQgTCAxMjcuMiA3My40IEwgMTI3LjIgMTA2LjUgQyAxMjcuMiAxMDYuOSAxMjQuOCAxMDkuMiAxMjQuNCAxMTEuMSBDIDEyMy43IDExNC4yIDEyNC41IDExNC42IDEyNSAxMTcgTCAxMjMuMyAxMjAuMiBDIDEyMi43IDExOC4zIDEyMC43IDExNSAxMTkuNyAxMTMuNSBDIDExOC4zIDExMS40IDExNy4zIDEwOS4xIDExNC4zIDEwOC45IEwgMTE0LjMgNzMuNCB6IE0gOTkuNyA4NC45IEwgMTAwLjYgODQuOSBDIDEwNC44IDg0LjkgMTA4LjUgOTAuNCAxMDguNSA5NC43IEwgMTA4LjUgOTYuNCBDIDEwOC41IDEwMC40IDEwNSAxMDYuMiAxMDEuMyAxMDYuMiBMIDk5LjQgMTA2LjIgQyA5NC45IDEwNi4yIDkxLjQgMTAwLjIgOTEuNiA5NS41IEMgOTEuOCA5MC43IDk0LjkgODQuOSA5OS43IDg0LjkgeiBNIDExMC4zIDEwMC41IEwgMTEwLjIgMTA2LjkgTCAxMDYuNyAxMDYuMyBMIDExMC4zIDEwMC41IHogTSA5MS41IDEwMy42IEwgOTQuMyAxMDYuOCBMIDkxLjUgMTA3LjQgTCA5MS41IDEwMy42IHogTSA3MC43IDEwNy45IEMgNzIuOSAxMDcuOSA3NC43IDExMC40IDc0LjcgMTEyLjcgTCA3NC43IDExMy40IEMgNzQuNyAxMTcuOSA3MCAxMjAuMiA2Ny42IDExNi43IEMgNjUuNyAxMTMuOCA2Ni45IDEwNy45IDcwLjcgMTA3LjkgeiBNIDEzMC42IDEwNy45IEMgMTMyLjggMTA3LjkgMTM0LjQgMTEwLjggMTM0LjQgMTEzLjIgTCAxMzQuNCAxMTMuNCBDIDEzNC40IDExNi43IDEzMyAxMTYuNyAxMzIgMTE4LjIgTCAxMjguOSAxMTguMyBMIDEyNi43IDExNS40IEwgMTI2LjUgMTEzLjIgQyAxMjYuMSAxMTEgMTI4LjIgMTA3LjkgMTMwLjYgMTA3LjkgeiBNIDEwNS45IDEwOC4yIEMgMTA3LjIgMTA4LjIgMTA4LjkgMTA5IDExMC4yIDEwOS4zIEwgMTEwLjIgMTI2LjYgTCA5MS41IDEyNi42IEwgOTEuNSAxMTAuMSBDIDkxLjUgMTA4LjYgOTYuNiAxMDguOSA5OC40IDEwOC45IEMgMTAxLjEgMTA4LjkgMTA0IDEwOC4yIDEwNS45IDEwOC4yIHogTSAxMTQuMyAxMTAuOCBDIDExNy4yIDExMi4zIDExNy40IDExMy40IDExOSAxMTYuNCBDIDEyMC4xIDExOC41IDEyMS43IDEyMC45IDEyMS43IDEyNCBDIDEyMS45IDEyNC4yIDEyMi4zIDEyNC45IDEyMi43IDEyNC45IEMgMTI0IDEyNC45IDEyNS41IDExOS44IDEyNi43IDExOC45IEwgMTI2LjcgMTE5LjQgTCAxMjcuMiAxMTkuNCBMIDEyNy4yIDEyNi42IEwgMTE0LjMgMTI2LjYgTCAxMTQuMyAxMTAuOCB6IE0gODcuMiAxMTEuMyBMIDg3LjIgMTI2LjYgTCA3NC41IDEyNi42IEwgNzQuNSAxMTguOSBDIDc1LjggMTE5LjQgNzcuNCAxMjUuNCA3OC42IDEyNS40IEMgODAuNiAxMjUuNCA4MC43IDExOS42IDgxLjkgMTE3LjUgQyA4My4yIDExNS4zIDg0LjQgMTExLjkgODcuMiAxMTEuMyB6IE0gMTMzLjYgMTE5LjcgTCAxMzMuOSAxMjYuNiBMIDEzMS41IDEyNi42IEwgMTMxLjUgMTIwLjQgTCAxMzMuNiAxMTkuNyB6IE0gNjguMSAxMTkuOSBDIDY4LjYgMTIwLjEgNjkuOSAxMjAuMyA2OS45IDEyMS4xIEwgNjkuOSAxMjYuNiBMIDY3LjcgMTI2LjYgTCA2OC4xIDExOS45IHpcIn0saVtcIkdSLklDLkZGLkpBSUwgQlJFQUtcIl09W2lbXCJHUi5JQy5GRi5QUklTT05cIl0se3R5cGU6XCJwYXRoXCIsc3Ryb2tld2lkdGg6NSxkOlwibSA3MCwxMzAgTDEzMCw3MFwiLGZpbGw6ITF9XSxpW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk01MCwxMzVMMTUwLDY1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDE1MEwxNzUsNTBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDE1NUwxNTUsNDVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTYwLDEzMEwxNDAsNzBcIn19W1RdLGlbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRSBESVNNT1VOVEVEXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsMTM1TDE1MCw2NVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNDUsMTMwIDE1NSw3MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsMTU1TDE1NSw0NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTMwTDE0MCw3MFwifX1bVF0saVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFIEVRVVBJTUVOVFwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDEzNUwxNTAsNjVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDUwLjYgMTMyLjkgTCAxNDkuMyA2N1wifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsMTU1TDE1NSw0NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTMwTDE0MCw3MFwifX1bVF0saVtcIkdSLklDLkZGLlNFQVJDSFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTQ1IDAsLTkwIG0gMzAsNjUgLTMwLDI1IC0zMCwtMjVcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuU0VOU09SXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTVwiK1MuYmJveC54MStcIiwxMDAgTDc1LDEwMCBNXCIrKDIwMC1TLmJib3gueDEpK1wiLDEwMCBMMTI1LDEwMFwifSx7dHlwZTpcInBhdGhcIixkOlwiTTY1LDg1IGw3MCwwIC0xNSwzMCAtNDAsMCB6XCIsZmlsbDohIVImJkd9XSxpW1wiR1IuSUMuRkYuU0lHTkFMXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01MCw2NSAxMDAsMTEwIDEwMCw5MCAxNTAsMTM1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMjUsNTAgMTAwLDExMCAxMDAsOTAgMTc1LDE1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk00NSw0NSAxMDAsMTEwIDEwMCw5MCAxNTUsMTU1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTU3LDcwIDEwMCwxMTAgMTAwLDkwIDE0MywxMzBcIn19W1RdLGlbXCJHUi5JQy5GRi5TSUdOQUwgRElTTU9VTlRFRFwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTAsNjUgMTAwLDExMCAxMDAsOTAgMTUwLDEzNVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA1Miw2Ni44IDEwMCwxMTAgbCAwLC0yMCA0Ny45LDQzLjFcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNDUsNDUgMTAwLDExMCAxMDAsOTAgMTU1LDE1NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01Nyw3MCAxMDAsMTEwIDEwMCw5MCAxNDMsMTMwXCJ9fVtUXSxpW1wiR1IuSUMuRkYuU09VTkRcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNXCIrUy5iYm94LngxK1wiLDEwMCBMNzUsMTAwIE1cIisoMjAwLVMuYmJveC54MSkrXCIsMTAwIEwxMjUsMTAwXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJNNjUsODUgbDcwLDAgLTE1LDMwIC00MCwwIHpcIixmaWxsOiEhUiYmR30se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJTXCJ9XSxpW1wiR1IuSUMuRkYuU1VQUExZXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMzUsMTIwIGwxMzAsMCBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSwxMjAgbDE1MCwwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDEyMCBsMTEwLDBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsMTIwIGwxMDAsMCBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTE2MCw3NSBsLTE1LDI1IDE1LDI1IE0zNSwxMjAgbDEyMCwwXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTc1LDUwIGwtMzAsNTAgMzAsNTAgTTI1LDEyMCBsMTM1LDBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTU1LDUwIGwtMjAsNTAgMjAsNTAgTTQ1LDEyMCBsMTAwLDBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTUwLDgwIGwtMTUsMjAgMTUsMjAgTTUwLDEyMCBsMTAwLDBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLlNVUFBMWSBESVZJU0lPTiBBTkQgQkVMT1dcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIm0gNDUsMTIwIDEyMCwwIE0gNDAsNzUgNTUsMTAwIDQwLDEyNVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwibSA0NSwxMjAgMTMwLDAgTSAyNSw1MCA1NSwxMDAgMjUsMTUwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwibSA1NywxMjAgOTgsMCBNIDQ1LDUwIDY1LDEwMCA0NSwxNTBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDUwLDEyMCAxMDAsMCBNIDUwLDgwIDY1LDEwMCA1MCwxMjBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDAsNzUgbDE1LDI1IC0xNSwyNSBNMTYwLDc1IGwtMTUsMjUgMTUsMjUgTTQ1LDEyMCBsMTEwLDAgXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsNTAgbDMwLDUwIC0zMCw1MCBNMTc1LDUwIGwtMzAsNTAgMzAsNTAgTTQwLDEyMCBsMTIwLDAgXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiIE00NSw1MCBsMjAsNTAgLTIwLDUwIE0xNTUsNTAgbC0yMCw1MCAyMCw1MCBNNTUsMTIwIGw5MCwwIFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw4MCBsMTUsMjAgLTE1LDIwIE0xNTAsODAgbC0xNSwyMCAxNSwyMCBNNTAsMTIwIGwxMDAsMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuQ0xBU1MgQUxMXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQUxMXCJ9LGlbXCJHUi5JQy5GRi5DTEFTUyBNVUxUSVBMRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1VTFRcIn0saVtcIkdSLklDLkZGLkNMQVNTIElcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA1LDg1IGMgLTUsMTAgLTUsMjAgMCwzMCBtIDAsLTMwIGMgLTIwLDAgLTIwLDMwIDAsMzBcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgSVwiXT1hKFwiSVwiKSxpW1wiR1IuSUMuRkYuQ0xBU1MgSUlcIl09aVtcIkdSLklDLlFVQVJURVJNQVNURVJcIl0saVtcIkdSLklDLkZGLk5BVE8gU1VQUExZIENMQVNTIElJXCJdPWEoXCJJSVwiKSxpW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMjAgMCwtMjAgLTE1LC0yMCAzMCwwIC0xNSwyMCBcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuQ0xBU1MgSVZcIl09aVtcIkdSLklDLkVOR0lORUVSXCJdLGlbXCJHUi5JQy5GRi5OQVRPIFNVUFBMWSBDTEFTUyBJVlwiXT1hKFwiSVZcIiksaVtcIkdSLklDLkZGLkNMQVNTIFZcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsMTE1IDAsLTI1IGMgMCwtMTAgMjAsLTEwIDIwLDAgbCAwLDI1IG0gLTI1LDAgMzAsMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5JTlRFUlBSRVRFUi9UUkFOU0xBVE9SXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA2NSw5MCAxNSwwIDAsLTEwIDIwLDIwIC0yMCwyMCAwLC0xMCAtMTUsMCB6XCIsZmlsbDpHfSx7dHlwZTpcInBhdGhcIixkOlwibSAxMzUsOTAgLTE1LDAgMCwtMTAgLTIwLDIwIDIwLDIwIDAsLTEwIDE1LDAgelwifV0saVtcIkdSLklDLkZGLk5BVE8gU1VQUExZIENMQVNTIEFMTFwiXT1hKFwiQUxMXCIpLGlbXCJHUi5JQy5GRi5DTEFTUyBWSVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6ODUscjo1LGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDk1IDMwLDAgbSAtMTUsMTUgMCwtMjAgbSAtMTAsMzAgMTAsLTEwIDEwLDEwXCIsZmlsbDohMX1dLGlbXCJHUi5JQy5GRi5DTEFTUyBWSUlcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6NzUsY3k6MTAwLHI6N30se3R5cGU6XCJjaXJjbGVcIixjeDoxMjUsY3k6MTAwLHI6N30se3R5cGU6XCJwYXRoXCIsZDpcIk03NSwxMDAgYzAsLTIwIDUwLC0yMCA1MCwwXCIsZmlsbDohMX1dLGlbXCJHUi5JQy5GRi5DTEFTUyBWSUlJXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC05MCBNMTY1LDgwIGwtMTMwLDBcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC03MCBNMTc1LDgwIGwtMTUwLDBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtNzUgTTE1NSw4MCBsLTExMCwwXCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTkyIE0xNTMsODAgbC0xMDYsMFwifX1bVF0saVtcIkdSLklDLkZGLkNMQVNTIFZJSUkuVEhFQVRFUlwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtOTAgTTE1NSw4MCBsLTExMCwwXCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtNzAgTTE1NSw4MCBsLTExMCwwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTc1IE0xNDUsODAgbC05MCwwXCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTkyIE0xNTMsODAgbC0xMDYsMFwifX1bVF0saVtcIkdSLklDLkZGLkNMQVNTIFZJSUkuQ09SUFNcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTkwIE0xNTUsODAgbC0xMjAsMFwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTcwIE0xNTUsODAgbC0xMzAsMFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC03NSBNMTQ1LDgwIGwtMTAwLDBcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtOTIgTTE1Myw4MCBsLTEwNiwwXCJ9fVtUXSxpW1wiR1IuSUMuRkYuQ0xBU1MgSVhcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjEwLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMTAgMCwxMCBtIDAsLTMwIDAsLTEwIG0gOC43LDE0LjIgOC40LC00LjggbSAtOC40LDE1LjkgOCw1LjQgbSAtMjUuNCwtNS40IC04LjIsNS40IG0gOC4yLC0xNi4zIC04LC01LjRcIixmaWxsOiExfV0saVtcIkdSLklDLkVRVUlQTUVOVCBNQU5VRkFDVFVSRVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjAsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDEyMCAwLDIwIG0gMCwtNjAgMCwtMjAgbSAxOC4xLDI4LjQgMTYsLTkuNiBtIC0xNiwzMS4yIDE2LDEyIE0gODIuNSwxMTAgNjYuMSwxMjIgTSA4Mi41LDg4LjggNjYuNSw3OFwiLGZpbGw6ITF9XSxpW1wiR1IuSUMuRkYuQ0xBU1MgWFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkNBXCJ9LGlbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk00MCw3NSBsMTUsMjUgLTE1LDI1IE0xNjAsNzUgbC0xNSwyNSAxNSwyNVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDUwIGwzMCw1MCAtMzAsNTAgTTE3NSw1MCBsLTMwLDUwIDMwLDUwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDUwIGwyMCw1MCAtMjAsNTAgTTE1NSw1MCBsLTIwLDUwIDIwLDUwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDgwIGwxNSwyMCAtMTUsMjAgTTE1MCw4MCBsLTE1LDIwIDE1LDIwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5VUyBNQVJTSEFMUyBTRVJWSUNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw3MCA3LjEsMjAuMyAyMS41LDAuNCAtMTcuMSwxMyA2LjIsMjAuNiBMIDEwMCwxMTIgODIuNCwxMjQuMyA4OC42LDEwMy43IDcxLjUsOTAuNyA5Mi45LDkwLjMgeiBtIDAsLTUgYyAtMTkuMywwIC0zNSwxNS43IC0zNSwzNSAwLDE5LjMgMTUuNywzNSAzNSwzNSAxOS4zLDAgMzUsLTE1LjcgMzUsLTM1IDAsLTE5LjMgLTE1LjcsLTM1IC0zNSwtMzUgeiBtIDAsNSBjIDE2LjYsMCAzMCwxMy40IDMwLDMwIDAsMTYuNiAtMTMuNCwzMCAtMzAsMzAgLTE2LjYsMCAtMzAsLTEzLjQgLTMwLC0zMCAwLC0xNi42IDEzLjQsLTMwIDMwLC0zMCB6XCJ9LGlbXCJHUi5NMS5BQ0NJREVOVFwiXT1sKFwiQUNDXCIpLGlbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTg1LDU1IEwxMDAsNzUgMTE1LDU1XCJ9LGlbXCJHUi5NMS5BUk1PUkVEXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsNjAgMjAsMCBjIDEwLDAgMTAsMTUgMCwxNSBMIDkwLDc1IEMgODAsNzUgODAsNjAgOTAsNjBcIn0saVtcIkdSLk0xLkNBUkdPXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDYwIDAsMTUgLTE1LDAgMCwtMTUgMzAsMCAwLDE1IC0xNSwwXCJ9LGlbXCJHUi5NMS5BTU1VTklUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTUsNzUgTDk1LDYwIEM5NSw1NSAxMDUsNTUgMTA1LDYwIEwxMDUsNzUgTTkwLDc1IEwxMTAsNzVcIixmaWxsOiExfSxpW1wiR1IuTTEuQU1QSElCSU9VUyBXQVJGQVJFIFNISVAgXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDExMyw3NSAxMDAsNzUgOTAsNjQuMyA5NSw2NSBsIDAsLTggMTAsMCAwLDggNS41LC0wLjYgTCAxMDAsNzVcIn0saVtcIkdSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXT1sKFwiUFwiKSxpW1wiR1IuTTEuQVJFQVwiXT1sKFwiQVJFQVwiKSxpW1wiR1IuTTEuQVJNWVwiXT1sKFwiWFhYWFwiKSxpW1wiR1IuTTEuQVRUQUNLXCJdPWwoXCJBXCIpLGlbXCJHUi5NMS5BVklBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSw2MCAwLDE1IDUwLC0xNSAwLDE1IHpcIn0saVtcIkdSLk0xLkJBVFRBTElPTlwiXT1sKFwiSUlcIiksaVtcIkdSLk0xLkJJT0xPR0lDQUxcIl09bChcIkJcIiksaVtcIkdSLk0xLkJPUkRFUlwiXT1sKFwiQk9SXCIpLGlbXCJHUi5NMS5CUklER0lOR1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLDgwIDUsLTUgMzAsMCA1LDUgbSAtNDAsLTIwIDUsNSAzMCwwIDUsLTVcIn0saVtcIkdSLk0xLkJSSUdBREVcIl09bChcIlhcIiksaVtcIkdSLk0xLkNIRU1JQ0FMXCJdPWwoXCJDXCIpLGlbXCJHUi5NMS5JTlRSVVNJT05cIl09bChcIklcIiksaVtcIkdSLk0xLkNIRU1JQ0FMIFNVUlZFSUxMQU5DRVwiXT1sKFwiUlNcIiksaVtcIkdSLk0xLkNJVklMSUFOXCJdPWwoXCJDSVZcIiksaVtcIkdSLk0xLkNMT1NFIFBST1RFQ1RJT05cIl09bChcIkNMUFwiKSxpW1wiR1IuTTEuQ09NQkFUXCJdPWwoXCJDQlRcIiksaVtcIkdSLk0xLkNPTU1BTkQgQU5EIENPTlRST0xcIl09bChcIkMyXCIpLGlbXCJHUi5NMS5DT01NQU5EIEFORCBDT05UUk9MIFJPVEFSWSBXSU5HXCJdPWwoUj9cIllcIjpcIkMyXCIpLGlbXCJHUi5NMS5USUxULVJPVE9SXCJdPWwoXCJUUlwiKSxpW1wiR1IuTTEuQ09NTUFORCBQT1NUIE5PREVcIl09bChcIkNQTlwiKSxpW1wiR1IuTTEuQ09NTVVOSUNBVElPTlMgQ09OVElOR0VOQ1kgUEFDS0FHRVwiXT1sKFwiQ0NQXCIpLGlbXCJHUi5NMS5DT05TVFJVQ1RJT05cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzUsZm9udHNpemU6MjAsdGV4dDpcIkNPTlNUXCJ9LGlbXCJHUi5NMS5DT01QQU5ZXCJdPWwoXCJJXCIpLGlbXCJHUi5NMS5DT1JQU1wiXT1sKFwiWFhYXCIpLGlbXCJHUi5NMS5DUk9TUyBDVUxUVVJBTCBDT01NVU5JQ0FUSU9OXCJdPWwoXCJDQ0NcIiksaVtcIkdSLk0xLkNST1dEIEFORCBSSU9UIENPTlRST0xcIl09bChcIkNSQ1wiKSxpW1wiR1IuTTEuREVDT05UQU1JTkFUSU9OXCJdPWwoXCJEXCIpLGlbXCJHUi5NMS5ERVRFTlRJT05cIl09bChcIkRFVFwiKSxpW1wiR1IuTTEuREVQVVRZXCJdPWwoXCJERVBcIiksaVtcIkdSLk0xLkRJUkVDVCBDT01NVU5JQ0FUSU9OU1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDk1LDY1IC01LDUgNSw1IG0gMTAsLTEwIDUsNSAtNSw1IE0gOTAsNzAgYyAyMCwwIDIwLDAgMjAsMCBtIDE1LDAgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHogbSAtNDAsMCBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgelwifSxpW1wiR1IuTTEuRElWSU5HXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTA0LjYsNjQuOCBjIDAsMi43IC0yLjEsNC44IC00LjYsNC44IC0yLjUsMCAtNC42LC0yLjIgLTQuNiwtNC44IDAsLTIuNyAyLjEsLTQuOCA0LjYsLTQuOCAyLjUsMCA0LjYsMi4yIDQuNiw0LjggeiBtIDAsOC43IDQuNiw0LjggLTE4LjMsMCA0LjYsLTQuOCBNIDEwOC4zLDYwIGwgNC42LDAgMCw5LjYgLTQuNiwwIG0gLTE2LjUsMCAtNC42LDAgMCwtOS42IDQuNiwwIG0gMTcuNCw0LjggYyAwLDUuMyAtNC4xLDkuNiAtOS4yLDkuNiAtNS4xLDAgLTkuMiwtNC4zIC05LjIsLTkuNiAwLC01LjMgNC4xLC05LjYgOS4yLC05LjYgNS4xLDAgOS4yLDQuMyA5LjIsOS42IHpcIn0saVtcIkdSLk0xLkRJVklTSU9OXCJdPWwoXCJYWFwiKSxpW1wiR1IuTTEuTUFSSU5FIERJVklTSU9OXCJdPWwoXCJEXCIpLGlbXCJHUi5NMS5ET0dcIl09bChcIkRPR1wiKSxpW1wiR1IuTTEuRFJJTExJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNjAgNSwxNSAxMCwwIDUsLTE1IHpcIn0saVtcIkdSLk0xLkVMRUNUUk8tT1BUSUNBTFwiXT1sKFwiRU9cIiksaVtcIkdSLk0xLkVOSEFOQ0VEXCJdPWwoXCJFTkhcIiksaVtcIkdSLk0xLkVYUExPU0lWRSBPUkROQU5DRSBESVNQT1NBTFwiXT1sKFwiRU9EXCIpLGlbXCJHUi5NMS5FQVJMWSBXQVJOSU5HIFJBREFSXCJdPWwoXCJFV1JcIiksaVtcIkdSLk0xLkZJUkUgRElSRUNUSU9OIENFTlRSRVwiXT1sKFwiRkRDXCIpLGlbXCJHUi5NMS5GT1JDRVwiXT1sKFwiRlwiKSxpW1wiR1IuTTEuRk9SV0FSRFwiXT1sKFwiRldEXCIpLGlbXCJHUi5NMS5HUk9VTkQgU1RBVElPTiBNT0RVTEVcIl09bChcIkdTTVwiKSxpW1wiR1IuTTEuSElKQUNLSU5HXCJdPWwoXCJIXCIpLGlbXCJHUi5NMS5JTkRJVklEVUFMXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk04NSw2NSBsMzAsMFwifSxpW1wiR1IuTTEuSU5UUlVTSU9OXCJdPWwoXCJJXCIpLGlbXCJHUi5NMS5KMVwiXT1sKFwiSjFcIiksaVtcIkdSLk0xLkoyXCJdPWwoXCJKMlwiKSxpW1wiR1IuTTEuSjNcIl09bChcIkozXCIpLGlbXCJHUi5NMS5KNFwiXT1sKFwiSjRcIiksaVtcIkdSLk0xLko1XCJdPWwoXCJKNVwiKSxpW1wiR1IuTTEuSjZcIl09bChcIko2XCIpLGlbXCJHUi5NMS5KN1wiXT1sKFwiSjdcIiksaVtcIkdSLk0xLko4XCJdPWwoXCJKOFwiKSxpW1wiR1IuTTEuSjlcIl09bChcIko5XCIpLGlbXCJHUi5NMS5KT0lOVCBORVRXT1JLIE5PREVcIl09bChcIkpOTlwiKSxpW1wiR1IuTTEuTEFORElORyBTVVBQT1JUXCJdPWwoXCJMU1wiKSxpW1wiR1IuTTEuTEFSR0UgQ09NTVVOSUNBVElPTlMgQ09OVElOR0VOQ1kgUEFDS0FHRVwiXT1sKFwiTENDUFwiKSxpW1wiR1IuTTEuTEFSR0UgRVhURU5TSU9OIE5PREVcIl09bChcIkxFTlwiKSxpW1wiR1IuTTEuTE9BRCBIQU5ETElORyBTWVNURU1cIl09bChcIkxIU1wiKSxpW1wiR1IuTTEuTUFJTlRFTkFOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4NCw3MCAzMiwwIG0gNCwtNSBjIC01LDAgLTUsMTAgMCwxMCBNIDgwLDY1IGMgNSwwIDUsMTAgMCwxMFwifSxpW1wiR1IuTTEuTUVERVZBQ1wiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk05NS41LDgwIGw5LDAgMCwtOSA5LDAgMCwtOSAtOSwwIDAsLTkgLTksMCAwLDkgLTksMCAwLDkgOSwwIFpcIn0saVtcIkdSLk0xLk1FVEVPUk9MT0dJQ0FMXCJdPWwoXCJNRVRcIiksaVtcIkdSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVcIl09bChcIk1DTVwiKSxpW1wiR1IuTTEuTUlTU0lMRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTk1LDgwIEw5NSw2MCBDOTUsNTUgMTA1LDU1IDEwNSw2MCBMMTA1LDgwIE0xMDAsODAgTDEwMCw1NVwiLGZpbGw6ITF9LGlbXCJHUi5NMS4oTU9CSUxFKSBBRFZJU09SIEFORCBTVVBQT1JUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSw2NSA1LDUgLTUsNSBNIDkwLDcwIGMgMjAsMCAyMCwwIDIwLDAgbSAxNSwwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6IG0gLTQwLDAgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHpcIixmaWxsOiExfSxpW1wiR1IuTTEuTU9CSUxFIFNVQlNDUklCRVIgRVFVSVBNRU5UXCJdPWwoXCJNU0VcIiksaVtcIkdSLk0xLk1PQklMSVRZIEFTU0FVTFRcIl09bChcIk1BXCIpLGlbXCJHUi5NMS5NT0JJTElUWSBTVVBQT1JUXCJdPWwoXCJNU1wiKSxpW1wiR1IuTTEuTU9WRU1FTlQgQ09OVFJPTCBDRU5UUkVcIl09bChcIk1DQ1wiKSxpW1wiR1IuTTEuTVVMVElOQVRJT05BTFwiXT1sKFwiTU5cIiksaVtcIkdSLk0xLk1VTFRJTkFUSU9OQUwgU1BFQ0lBTElaRUQgVU5JVFwiXT1sKFwiTVNVXCIpLGlbXCJHUi5NMS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk04NSw3NSBsMTUsLTE1IDE1LDE1IE04NSw2NyBsMTUsLTE1IDE1LDE1XCIsZmlsbDohMX0saVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTIwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIjFcIn0saVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTIwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIjJcIn0saVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDNcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTIwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIjNcIn0saVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDRcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTIwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIjRcIn0saVtcIkdSLk0xLk5BVkFMXCJdPXMuX3RyYW5zbGF0ZSgwLC0zNSxzLl9zY2FsZSguNixpW1wiR1IuSUMuTkFWQUxcIl0pKSxpW1wiR1IuTTEuTk9ERSBDRU5UUkVcIl09bChcIk5DXCIpLGlbXCJHUi5NMS5OVUNMRUFSXCJdPWwoXCJOXCIpLGlbXCJHUi5NMS5PRi0xXCJdPWwoXCJPRi0xXCIpLGlbXCJHUi5NMS5PRi0yXCJdPWwoXCJPRi0yXCIpLGlbXCJHUi5NMS5PRi0zXCJdPWwoXCJPRi0zXCIpLGlbXCJHUi5NMS5PRi00XCJdPWwoXCJPRi00XCIpLGlbXCJHUi5NMS5PRi01XCJdPWwoXCJPRi01XCIpLGlbXCJHUi5NMS5PRi02XCJdPWwoXCJPRi02XCIpLGlbXCJHUi5NMS5PRi03XCJdPWwoXCJPRi03XCIpLGlbXCJHUi5NMS5PRi04XCJdPWwoXCJPRi04XCIpLGlbXCJHUi5NMS5PRi05XCJdPWwoXCJPRi05XCIpLGlbXCJHUi5NMS5PRi0xMFwiXT1sKFwiT0YtMTBcIiksaVtcIkdSLk0xLk9GLURcIl09bChcIk9GLURcIiksaVtcIkdSLk0xLk9QRVJBVElPTlNcIl09bChcIk9QU1wiKSxpW1wiR1IuTTEuT1BUSUNBTFwiXT1sKFwiT1BUXCIpLGlbXCJHUi5NMS5PUi0xXCJdPWwoXCJPUi0xXCIpLGlbXCJHUi5NMS5PUi0yXCJdPWwoXCJPUi0yXCIpLGlbXCJHUi5NMS5PUi0zXCJdPWwoXCJPUi0zXCIpLGlbXCJHUi5NMS5PUi00XCJdPWwoXCJPUi00XCIpLGlbXCJHUi5NMS5PUi01XCJdPWwoXCJPUi01XCIpLGlbXCJHUi5NMS5PUi02XCJdPWwoXCJPUi02XCIpLGlbXCJHUi5NMS5PUi03XCJdPWwoXCJPUi03XCIpLGlbXCJHUi5NMS5PUi04XCJdPWwoXCJPUi04XCIpLGlbXCJHUi5NMS5PUi05XCJdPWwoXCJPUi05XCIpLGlbXCJHUi5NMS5PVEhFUlwiXT1sKFwiT1RIXCIpLGlbXCJHUi5NMS5QQUxMRVRJWkVEIExPQUQgU1lTVEVNXCJdPWwoXCJQTFNcIiksaVtcIkdSLk0xLlBFUlNPTk5FTCBSRUNPVkVSWVwiXT1sKFwiSFwiKSxpW1wiR1IuTTEuUExBVE9PTlwiXT1be3R5cGU6XCJjaXJjbGVcIixzdHJva2U6ITEsY3g6ODAsY3k6Njgscjo4fSx7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMDAsY3k6Njgscjo4fSx7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMjAsY3k6Njgscjo4fV0saVtcIkdSLk0xLlJBREFSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsNTUgYyAwLjEsMjEuNCAxMS43LDI0LjYgMjUsMjUgTSAxMTYsNTUgMTAxLDY3LjUgMTAxLDU1IDg2LjYsNjYuOVwifSxpW1wiR1IuTTEuUkFESU8gRlJFUVVFTkNZIElERU5USUZJQ0FUSU9OIChSRklEKSBJTlRFUlJPR0FUT1IvIFNFTlNPUlwiXT1sKFwiUkZcIiksaVtcIkdSLk0xLlJBSUxST0FEXCJdPXMuX3RyYW5zbGF0ZSgwLC01MCxbe3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMjAgbDgwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojc1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjUscjo1fV0pLGlbXCJHUi5NMS5SQURJT0xPR0lDQUxcIl09bChcIlJBRFwiKSxpW1wiR1IuTTEuUkFOR0VSXCJdPWwoXCJSR1JcIiksaVtcIkdSLk0xLlJFQ09OXCJdPWwoXCJSXCIpLGlbXCJHUi5NMS5SRUdJTUVOVFwiXT1sKFwiSUlJXCIpLGlbXCJHUi5NMS5SRVRSQU5TTUlTU0lPTiBTSVRFXCJdPWwoXCJSVE5TXCIpLGlbXCJHUi5NMS5ST0JPVElDXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw1Mi43IDE0LjksMTQuOCBjIDAuNCwtMC4zIDAuOSwtMC40IDEuNCwtMC40IDEuNSwwIDIuNywxLjIgMi43LDIuNyAwLDEuNCAtMS4yLDIuNyAtMi43LDIuNyAtMS41LDAgLTIuNywtMS4zIC0yLjcsLTIuNyAwLC0wLjQgMC4xLC0wLjcgMC4yLC0xIGwgLTEwLjQsLTUuMiAtMi41LDguNiBjIDAuMiwwLjEgMC40LDAuMiAwLjYsMC4zIDAuNywwLjUgMS4yLDEuMyAxLjIsMi4zIDAsMS41IC0xLjIsMi43IC0yLjcsMi43IC0wLjU1LDAgLTEuMDYsLTAuMiAtMS40OSwtMC41IC0wLjczLC0wLjQgLTEuMjIsLTEuMyAtMS4yMiwtMi4yIDAsLTEuMiAwLjc3LC0yLjIgMS44NSwtMi42IGwgLTIuNTMsLTguNiAtMTAuNDIsNS4yIGMgMC4xMiwwLjMgMC4xOCwwLjYgMC4xOCwxIDAsMS41IC0xLjIxLDIuNyAtMi43LDIuNyAtMS40OSwwIC0yLjcsLTEuMiAtMi43LC0yLjcgMCwtMS41IDEuMjEsLTIuNyAyLjcsLTIuNyAwLjUyLDAgMS4wMSwwLjEgMS40MiwwLjQgbCAxNC45LC0xNC44IDAsMCAwLDAgelwiLHN0cm9rZTohMX0saVtcIkdSLk0xLkFTU0FVTFRcIl09bChcIkFTTFRcIiksaVtcIkdSLk0xLldFQVBPTlwiXT1sKFwiV1BOXCIpLGlbXCJHUi5NMS5XRUFQT05TXCJdPWwoXCJXXCIpLGlbXCJHUi5NMS5DUklNSU5BTCBJTlZFU1RJR0FUSU9OIERJVklTSU9OXCJdPWwoXCJDSURcIiksaVtcIkdSLk0xLkRJR0lUQUxcIl09bChcIkRJR1wiKSxpW1wiR1IuTTEuTkVUV09SSyBPUiBORVRXT1JLIE9QRVJBVElPTlNcIl09bChcIk5FVFwiKSxpW1wiR1IuTTEuQUlSRklFTEQsIEFFUklBTCBQT1JUIE9GIERFQkFSS0FUSU9OLCBPUiBBRVJJQUwgUE9SVCBPRiBFTUJBUktBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4MCw3MCA0MCwwIE0gODAsODAgMTExLDU1XCIsZmlsbDohMX0saVtcIkdSLk0xLlBJUEVMSU5FXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkyLDY2IC0xMiwwIG0gMTIsOCAtMTIsMCBtIDI4LDAgMTIsMCBtIC0xMiwtOCAxMiwwIG0gLTIwLC0xMSAwLDcgbSAtNSwtNyAxMCwwIG0gLTEzLDcgMCwxNiAxNiwwIDAsLTE2IC0xNiwwXCIsZmlsbDohMX0saVtcIkdSLk0xLlBPU1RBTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw2MCAxNSwwIGMgMCw1IDAsMTAgMTAsMTUgLTE1LDAgLTIwLDAgLTI1LC0xNVwiLGZpbGw6ITF9LGlbXCJHUi5NMS5XQVRFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw1NSAyMCwwIG0gLTEwLDEwIDAsLTEwIG0gLTI1LDEwIDQwLDAgYyAxMCwwIDE1LDUgMTUsMTBcIixmaWxsOiExfSxpW1wiR1IuTTEuSU5ERVBFTkRFTlQgQ09NTUFORFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTEuOCw1OS4yIDAsMTUuOCBtIC03LjksLTcuOSAxNS44LDAgbSAtMzEuNiwtNy45IDAsMTUuOCBtIDcuOSwtNy45IC0xNS44LDBcIixmaWxsOiExfSxpW1wiR1IuTTEuTVVMVEktUFVSUE9TRSBCTEFERVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4MCw2NSAyMCwtMTAgMjAsMTAgbSAtMjAsMTUgMCwtMjVcIixmaWxsOiExfSxpW1wiR1IuTTEuVEFOSy1XSURUSCBNSU5FIFBMT1dcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsNjUgNSwtMi41IG0gNSwtMi41IDUsLTIuNSBtIDEwLDAgNSwyLjUgbSA1LDIuNSA1LDIuNSBtIC0yMCwxNSAwLC0yMFwiLGZpbGw6ITF9LGlbXCJHUi5NMS5ST1VURSwgUkVDT05OQUlTU0FOQ0UsIEFORCBDTEVBUkFOQ0VcIl09bChcIlJSQ1wiKSxpW1wiR1IuTTEuU0VBUkNIIEFORCBSRVNDVUVcIl09bChcIlNBUlwiKSxpW1wiR1IuTTEuU0VDVElPTlwiXT1be3R5cGU6XCJjaXJjbGVcIixzdHJva2U6ITEsY3g6OTAsY3k6Njgscjo4fSx7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMTAsY3k6Njgscjo4fV0saVtcIkdSLk0xLlNFQ1VSSVRZXCJdPWwoXCJTRUNcIiksaVtcIkdSLk0xLlNFTlNPUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNTUgYyAtMiw1IC01LDggLTEwLDEwIDUsMiA4LDUgMTAsMTAgMiwtNSA1LC04IDEwLC0xMCAtNSwtMiAtOCwtNSAtMTAsLTEwIHpcIn0saVtcIkdSLk0xLlNFTlNPUiBDT05UUk9MIE1PRFVMRVwiXT1sKFwiU0NNXCIpLGlbXCJHUi5NMS5TSUdOQUxTIElOVEVMTElHRU5DRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw1NSAwLDIzIG0gLTE1LC0xOCA1LC01IDUsNSA1LC01IDUsNSA1LC01IDUsNVwifSxpW1wiR1IuTTEuU0lHTkFMIFNVUFBPUlRcIl09bChcIlNQVFwiKSxpW1wiR1IuTTEuU0lOR0xFIFNIRUxURVIgU1dJVENIXCJdPWwoXCJTU1NcIiksaVtcIkdSLk0xLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk04NSw3NSBsMTUsLTE1IDE1LDE1XCIsZmlsbDohMX0saVtcIkdSLk0xLlNNQUxMIEVYVEVOU0lPTiBOT0RFXCJdPWwoXCJTRU5cIiksaVtcIkdSLk0xLlNNT0tFXCJdPWwoXCJTXCIpLGlbXCJHUi5NMS5TTU9LRS9ERUNPTlwiXT1sKFwiU0RcIiksaVtcIkdSLk0xLlNOSVBFUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTc1LDYwIGwyMCwwIE0xMDAsNzYgbDAsLTE4IE0xMjUsNjAgbC0yMCwwXCIsZmlsbDohMX0saVtcIkdSLk0xLlNPVU5EIFJBTkdJTkdcIl09bChcIlNEUlwiKSxpW1wiR1IuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFUyAoU09GKVwiXT1sKFwiU09GXCIpLGlbXCJHUi5NMS5TUEVDSUFMIFdFQVBPTlMgQU5EIFRBQ1RJQ1NcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzcsZm9udHNpemU6MjMsdGV4dDpcIlNXQVRcIn0saVtcIkdSLk0xLlNRVUFEXCJdPXt0eXBlOlwiY2lyY2xlXCIsc3Ryb2tlOiExLGN4OjEwMCxjeTo2OCxyOjh9LGlbXCJHUi5NMS5TVVBQT1JUXCJdPWwoXCJTUFRcIiksaVtcIkdSLk0xLlNVUlZFWVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDgsNzggLTgsLTggbSAwLDAgLTgsOCBtIDgsLTggMCwtMTUgMTUsOCB6XCJ9LGlbXCJHUi5NMS5UQUNUSUNBTCBFWFBMT0lUQVRJT05cIl09bChcIlRFXCIpLGlbXCJHUi5NMS5UQVJHRVQgQUNRVUlTSVRJT05cIl09bChcIlRBXCIpLGlbXCJHUi5NMS5URUFNXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjY1LHI6MTB9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDc1IGwyMCwtMjBcIn1dLGlbXCJHUi5NMS5USEVBVFJFXCJdPWwoXCJYWFhYWFwiKSxpW1wiR1IuTTEuVE9QT0dSQVBISUNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5Miw2NSBjIDYsMyAxMCwzIDE2LDAgbSAtMTgsMTMgMTAsLTIzIDEwLDIzXCJ9LGlbXCJHUi5NMS5UUkFJTklORyBDQU1QXCJdPWwoXCJUTkdcIiksaVtcIkdSLk0xLkhJSkFDS0VSXCJdPWwoXCJISlwiKSxpW1wiR1IuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgwLDY1IDIwLDEzIDIwLC0xMyAwLC01IC0yMCwxMCAtMjAsLTEwIHpcIn0saVtcIkdSLk0xLlVQR1JBREVEIEVBUkxZIFdBUk5JTkcgUkFEQVJcIl09bChcIlVFV1wiKSxpW1wiR1IuTTEuVVRJTElUWVwiXT1sKFwiVVwiKSxpW1wiR1IuTTEuVklERU8gSU1BR0VSWVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyMCw2NSAtMTEsMCBtIDExLDEwIC0xNCwwIG0gNCwtMTQgLTMwLDAgMCwxOCAyNSwwIHogbSAxMCwyIDAsMTRcIn0saVtcIkdSLk0xLldPLTFcIl09bChcIldPLTFcIiksaVtcIkdSLk0xLldPLTJcIl09bChcIldPLTJcIiksaVtcIkdSLk0xLldPLTNcIl09bChcIldPLTNcIiksaVtcIkdSLk0xLldPLTRcIl09bChcIldPLTRcIiksaVtcIkdSLk0xLldPLTVcIl09bChcIldPLTVcIiksaVtcIkdSLk0xLllBUkRcIl09bChcIllSRFwiKSxpW1wiR1IuTTIuQUlSQk9STkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk03NSwxNDAgQzc1LDEyNSAxMDAsMTI1IDEwMCwxNDAgQzEwMCwxMjUgMTI1LDEyNSAxMjUsMTQwXCIsZmlsbDohMX0saVtcIkdSLk0yLkFSQ1RJQ1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTExNSwxMjUgQzEyNSwxMjUgMTI1LDEzNSAxMTUsMTM1IEw4NSwxMzUgQzc1LDEzNSA3NSwxMjUgODUsMTI1XCIsZmlsbDohMX0saVtcIkdSLk0yLkFUVEFDS1wiXT1yKFwiQVwiKSxpW1wiR1IuTTIuTEFORElORyBDUkFGVFwiXT1yKFwiTENcIiksaVtcIkdSLk0yLkxBTkRJTkcgU0hJUFwiXT1yKFwiTFNcIiksaVtcIkdSLk0yLlNFUlZJQ0UgQ1JBRlQvWUFSRFwiXT1yKFwiWVlcIiksaVtcIkdSLk0yLlRVRyBIQVJCT1JcIl09cihcIllUXCIpLGlbXCJHUi5NMi5PQ0VBTiBHT0lORyBUVUcgQk9BVFwiXT1yKFwiQVRcIiksaVtcIkdSLk0yLlNVUkZBQ0UgREVQTE9ZTUVOVCBBTkQgRElTVFJJQlVUSU9OIENPTU1BTkRcIl09cihcIlNERENcIiksaVtcIkdSLk0yLkNPTVBPU0lURVwiXT1yKFwiQ09NUFwiKSxpW1wiR1IuTTIuTElHSFQgQU5EIE1FRElVTVwiXT1yKFwiTC9NXCIpLGlbXCJHUi5NMi5CQVRUTEUgREFNQUdFIFJFUEFJUlwiXT1yKFwiQkRSXCIpLGlbXCJHUi5NMi5CSUNZQ0xFIEVRVUlQUEVEXCJdPXt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzMixyOjExLGZpbGw6ITF9LGlbXCJHUi5NMi5DQVNVQUxUWSBTVEFHSU5HXCJdPXIoXCJDU1wiKSxpW1wiR1IuTTIuQ0xFQVJJTkdcIl09cihcIkNMUlwiKSxpW1wiR1IuTTIuQ0xPU0UgUkFOR0VcIl09cihcIkNSXCIpLGlbXCJHUi5NMi5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl09cihcIkNTQVJcIiksaVtcIkdSLk0yLkNPTlRST0xcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTgsMTMwIDIsLTQgMiw0IG0gLTgsOCAtNCwtMiA0LC0yIG0gOCw4IC0yLDQgLTIsLTQgbSA4LC04IDQsMiAtNCwyIG0gLTE0LC0yIDE2LDAgbSAtOCwtOCAwLDE2XCIsZmlsbDohMX0saVtcIkdSLk0yLk5PTkNPTUJBVEFOVCBHRU5FUklDIFZFU1NFTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5NSwxMzUgMCwtMTAgMTAsMCAwLDEwIDUsMCAwLDEwIC0yMCwwIDAsLTEwIHpcIixzdHJva2U6ITF9LGlbXCJHUi5NMi5TSEVMVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDE0MCAzMCwwIC01LC0xNSAtMTAsLTUgLTEwLDUgelwiLHN0cm9rZTohMX0saVtcIkdSLk0yLlNFTEYtUFJPUEVMTEVEXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDEyNSAzMCwwIGMgMTAsMCAxMCwxNSAwLDE1IGwgLTMwLDAgYyAtMTAsMCAtMTAsLTE1IDAsLTE1XCIsZmlsbDohMX0saVtcIkdSLk0yLkNST1NTLUNPVU5UUlkgVFJVQ0tcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTIwIGw4MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjUscjo1fV0saVtcIkdSLk0yLkNBVkFMUllcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTEwLHk6MTQwLGZvbnRzaXplOjI1LHRleHQ6XCJDQVZcIn0saVtcIkdSLk0yLkRFQ09OVEFNSU5BVElPTlwiXT1yKFwiRFwiKSxpW1wiR1IuTTIuREVNT0xJVElPTlwiXT1yKFwiREVNXCIpLGlbXCJHUi5NMi5ERU5UQUxcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTE1LHk6MTMzLGZvbnRzaXplOjI1LHRleHQ6XCJEXCJ9LGlbXCJHUi5NMi5ESUdJVEFMXCJdPXIoXCJESUdcIiksaVtcIkdSLk0yLkVOSEFOQ0VEIFBPU0lUSU9OIExPQ0FUSU9OIFJFUE9SVElORyBTWVNURU1cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODcsMTQyIDEzLC0xMiAxMywxMiBtIC0xMywtMjAgMCwyMCAwLDBcIixmaWxsOiExfSxpW1wiR1IuTTIuRVFVSVBNRU5UXCJdPXIoXCJFXCIpLGlbXCJHUi5NMi5FUVVJTUVOVC9UUk9PUFwiXT1yKFwiRS9UXCIpLGlbXCJHUi5NMi5IRUFWWVwiXT1yKFwiSFwiKSxpW1wiR1IuTTIuSElHSCBBTFRJVFVERVwiXT1yKFwiSEFcIiksaVtcIkdSLk0yLkhJR0ggVE8gTUVESVVNIEFMVElUVURFXCJdPXIoXCJITUFcIiksaVtcIkdSLk0yLkhJR0ggVE8gTE9XIEFMVElUVURFXCJdPXIoXCJITEFcIiksaVtcIkdSLk0xLkNZQkVSU1BBQ0VcIl09bChcIkNZQlwiKSxpW1wiR1IuTTIuQUlSIEFTU0FVTFRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4NSwxMjUgMTUsMjAgMTUsLTIwXCJ9LGlbXCJHUi5NMi5WRVJZIEhFQVZZXCJdPXIoXCJWSFwiKSxpW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXT1yKFwiQ1lCXCIpLGlbXCJHUi5NMi5OQVZZIEJBUkdFLCBTRUxGLVBST1BFTExFRFwiXT1yKFwiWVNcIiksaVtcIkdSLk0yLk5BVlkgQkFSR0UsIE5PVCBTRUxGLVBST1BFTExFRFwiXT1yKFwiWUJcIiksaVtcIkdSLk0yLkxBVU5DSFwiXT1yKFwiWUZUXCIpLGlbXCJHUi5NMS5UQUNUSUNBTCBTQVRFTExJVEUgQ09NTVVOSUNBVElPTlNcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSw2NSAxMCwwIG0gLTMwLDAgMTAsMCBNIDg1LDc3IGMgMTAsLTcgMjAsLTcgMzAsMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LjQsNjAuOSAwLDkuMSAxMy4xLDAgMCwtOS4xIHogbSAzNiwwIDAsOS4xIDEzLjEsMCAwLC05LjEgeiBtIC0xOCwwIDAsOS4xIDEzLjEsMCAwLC05LjEgelwiLHN0cm9rZTohMX1dLGlbXCJHUi5NMi5JTlRFUk1PREFMXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyNSA0MCwwIDAsLTQgOCw5IC04LDkgMCwtNCAtNDAsMCAwLDQgLTgsLTkgOCwtOSB6XCIsZmlsbDohMX0saVtcIkdSLk0yLklOVEVOU0lWRSBDQVJFXCJdPXIoXCJJQ1wiKSxpW1wiR1IuTTIuSjFcIl09cihcIkoxXCIpLGlbXCJHUi5NMi5KMlwiXT1yKFwiSjJcIiksaVtcIkdSLk0yLkozXCJdPXIoXCJKM1wiKSxpW1wiR1IuTTIuSjRcIl09cihcIko0XCIpLGlbXCJHUi5NMi5KNVwiXT1yKFwiSjVcIiksaVtcIkdSLk0yLko2XCJdPXIoXCJKNlwiKSxpW1wiR1IuTTIuSjdcIl09cihcIko3XCIpLGlbXCJHUi5NMi5KOFwiXT1yKFwiSjhcIiksaVtcIkdSLk0yLko5XCJdPXIoXCJKOVwiKSxpW1wiR1IuTTIuTElHSFRcIl09cihcIkxcIiksaVtcIkdSLk0yLkxBQk9SQVRPUllcIl09cihcIkxBQlwiKSxpW1wiR1IuTTIuTEFVTkNIRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTgwLDE0MCBMMTE1LDEyMCAxMjAsMTQwXCJ9LGlbXCJHUi5NMi5MT05HIFJBTkdFXCJdPXIoXCJMUlwiKSxpW1wiR1IuTTIuTE9ORyBSQU5HRSBTVVJWRUlMTEFOQ0VcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTEwLHk6MTQwLGZvbnRzaXplOjI1LHRleHQ6XCJMUlNcIn0saVtcIkdSLk0yLkxPVyBBTFRJVFVERVwiXT1yKFwiTEFcIiksaVtcIkdSLk0yLk1FRElVTVwiXT1yKFwiTVwiKSxpW1wiR1IuTTIuTUVESVVNIEFMVElUVURFXCJdPXIoXCJNQVwiKSxpW1wiR1IuTTIuTUVESVVNIFRPIExPVyBBTFRJVFVERVwiXT1yKFwiTUxBXCIpLGlbXCJHUi5NMi5NRURJVU0gUkFOR0VcIl09cihcIk1SXCIpLGlbXCJHUi5NMi5NT1VOVEFJTlwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk05MCwxNDAgTDEwMCwxMjAgMTEwLDE0MFwifSxpW1wiR1IuTTIuTVVMVElQTEUgQUxUSVRVREVTXCJdPXIoXCJIL01BXCIpLGlbXCJHUi5NMi5NVUxUSS1DSEFOTkVMXCJdPXIoXCJNQ1wiKSxpW1wiR1IuTTIuT0YtMVwiXT1yKFwiT0YtMVwiKSxpW1wiR1IuTTIuT0YtMlwiXT1yKFwiT0YtMlwiKSxpW1wiR1IuTTIuT0YtM1wiXT1yKFwiT0YtM1wiKSxpW1wiR1IuTTIuT0YtNFwiXT1yKFwiT0YtNFwiKSxpW1wiR1IuTTIuT0YtNVwiXT1yKFwiT0YtNVwiKSxpW1wiR1IuTTIuT0YtNlwiXT1yKFwiT0YtNlwiKSxpW1wiR1IuTTIuT0YtN1wiXT1yKFwiT0YtN1wiKSxpW1wiR1IuTTIuT0YtOFwiXT1yKFwiT0YtOFwiKSxpW1wiR1IuTTIuT0YtOVwiXT1yKFwiT0YtOVwiKSxpW1wiR1IuTTIuT0YtMTBcIl09cihcIk9GLTEwXCIpLGlbXCJHUi5NMi5PRi1EXCJdPXIoXCJPRi1EXCIpLGlbXCJHUi5NMi5PUFRJQ0FMXCJdPXIoXCJPUFRcIiksaVtcIkdSLk0yLk9SLTFcIl09cihcIk9SLTFcIiksaVtcIkdSLk0yLk9SLTJcIl09cihcIk9SLTJcIiksaVtcIkdSLk0yLk9SLTNcIl09cihcIk9SLTNcIiksaVtcIkdSLk0yLk9SLTRcIl09cihcIk9SLTRcIiksaVtcIkdSLk0yLk9SLTVcIl09cihcIk9SLTVcIiksaVtcIkdSLk0yLk9SLTZcIl09cihcIk9SLTZcIiksaVtcIkdSLk0yLk9SLTdcIl09cihcIk9SLTdcIiksaVtcIkdSLk0yLk9SLThcIl09cihcIk9SLThcIiksaVtcIkdSLk0yLk9SLTlcIl09cihcIk9SLTlcIiksaVtcIkdSLk0yLkdVRVJJTExBXCJdPXIoXCJHXCIpLGlbXCJHUi5NMi5BTVBISUJJT1VTXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDY0IDE0NC45IEMgODAuNCAxNDMuOSA2My4xIDEyNSA4MS40IDEyNSBDIDEwMC4yIDEyNSA4MS40IDE0NSAxMDAuMiAxNDUgQyAxMTkgMTQ1IDEwMC4yIDEyNSAxMTkgMTI1IEMgMTM3LjEgMTI1IDEyMC4yIDE0My42IDEzNS45IDE0NC45XCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDI1LDE0NSBjIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAyMCwyMFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNDUgMTI1IEMgNjEuNyAxMjUuOSA0NC4yIDE0NSA2Mi42IDE0NSBDIDgxLjQgMTQ1IDYyLjYgMTI1IDgxLjQgMTI1IEMgMTAwLjIgMTI1IDgxLjQgMTQ1IDEwMC4yIDE0NSBDIDExOSAxNDUgMTAwLjIgMTI1IDExOSAxMjUgQyAxMzcuOCAxMjUgMTE5IDE0NSAxMzcuOCAxNDUgQyAxNTUuOSAxNDUgMTM4LjkgMTI2LjIgMTU0LjggMTI1IFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNzAuNCAxNDIuNCBDIDc0LjggMTM3IDY2LjggMTI1IDgxLjQgMTI1IEMgMTAwLjIgMTI1IDgxLjQgMTQ1IDEwMC4yIDE0NSBDIDExOSAxNDUgMTAwLjIgMTI1IDExOSAxMjUgQyAxMzMuMyAxMjUgMTI1LjcgMTM2LjYgMTI5LjcgMTQyLjEgXCIsZmlsbDohMX19W1RdLGlbXCJHUi5NMi5QQUNLIEFOSU1BTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NCwxNDAgOSwtMTUgNywxNSA3LC0xNSA5LDE1XCIsZmlsbDohMX0saVtcIkdSLk0yLlBBVElFTlQgRVZBQ1VBVElPTiBDT09SRElOQVRJT05cIl09cihcIlBFQ1wiKSxpW1wiR1IuTTIuUFJFVkVOVElWRSBNQUlOVEVOQU5DRVwiXT1yKFwiUE1cIiksaVtcIkdSLk0yLlBTWUNIT0xPR0lDQUxcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTE1LHk6MTMzLGZvbnRzaXplOjI1LHRleHQ6XCJQXCJ9LGlbXCJHUi5NMi5SQURJTyBSRUxBWSBMSU5FIE9GIFNJR0hUXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzIscjoxMSxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwiTSA5MC44IDEyOC4yIEMgOTAuMyAxMjkuMyA5MCAxMzAuNiA5MCAxMzIgQyA5MCAxMzMuNCA5MC4zIDEzNC43IDkwLjggMTM1LjggTCAxMDAgMTMyIEwgOTAuOCAxMjguMiB6IE0gMTAwIDEzMiBMIDEwOS4zIDEzNS44IEMgMTA5LjcgMTM0LjcgMTEwIDEzMy40IDExMCAxMzIgQyAxMTAgMTMwLjYgMTA5LjcgMTI5LjMgMTA5LjMgMTI4LjIgTCAxMDAgMTMyIHpcIn1dLGlbXCJHUi5NMi5SQUlMUk9BRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMjAgbDgwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojc1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjUscjo1fV0saVtcIkdSLk0yLlRSQUNUT1IgVFJBSUxFUlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMjAgbDgwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojc1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTI1LHI6NX1dLGlbXCJHUi5NMi5SRUNPVkVSWSAoVU5NQU5ORUQgU1lTVEVNUylcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTI1IGMwLDIwIDYwLDIwIDYwLDBcIixmaWxsOiExfSxpW1wiR1IuTTIuUkVDT1ZFUlkgKE1BSU5URU5BTkNFKVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNzUsMTI1IGM4LDAgOCwxNiAwLDE2IG04LC04IGwzNSwwIG04LC04IGMtOCwwIC04LDE2IDAsMTZcIn0saVtcIkdSLk0yLlJFRlVFTFwiXT1yKFwiS1wiKSxpW1wiR1IuTTIuUkVTQ1VFIENPT1JESU5BVElPTiBDRU5UUkVcIl09cihcIlJDQ1wiKSxpW1wiR1IuTTIuUklWRVJJTkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsMTI1IGMgMCwxMCA0MCwxMCA0MCwwIHpcIixmaWxsOiExfSxpW1wiR1IuTTIuUk9CT1RJQ1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxMjEuNjhMMTE0Ljg5NSwxMzYuNDU5QzExNS4zMDksMTM2LjIwMSAxMTUuNzk4LDEzNi4wNTIgMTE2LjMyMSwxMzYuMDUyQzExNy44MTIsMTM2LjA1MiAxMTkuMDIyLDEzNy4yNjIgMTE5LjAyMiwxMzguNzUzQzExOS4wMjIsMTQwLjI0MyAxMTcuODEyLDE0MS40NTQgMTE2LjMyMSwxNDEuNDU0QzExNC44MzEsMTQxLjQ1NCAxMTMuNjIsMTQwLjI0MyAxMTMuNjIsMTM4Ljc1M0MxMTMuNjIsMTM4LjQwNyAxMTMuNjg2LDEzOC4wNzYgMTEzLjgwNSwxMzcuNzcyTDEwMy4zNzgsMTMyLjZMMTAwLjg1MSwxNDEuMjI0QzEwMS4wNzIsMTQxLjI5OCAxMDEuMjgsMTQxLjQgMTAxLjQ3MSwxNDEuNTI2QzEwMi4yMTEsMTQyLjAwOCAxMDIuNzAxLDE0Mi44NDMgMTAyLjcwMSwxNDMuNzkxQzEwMi43MDEsMTQ1LjI4MSAxMDEuNDkxLDE0Ni40OTIgMTAwLDE0Ni40OTJDOTkuNDUxLDE0Ni40OTIgOTguOTM5LDE0Ni4zMjcgOTguNTEyLDE0Ni4wNDVDOTcuNzc2LDE0NS41NjIgOTcuMjksMTQ0LjczIDk3LjI5LDE0My43ODVDOTcuMjksMTQyLjU5MiA5OC4wNjQsMTQxLjU3OSA5OS4xMzgsMTQxLjIyMkw5Ni42MTMsMTMyLjYwNkw4Ni4xODYsMTM3Ljc3OEM4Ni4zMDUsMTM4LjA4MiA4Ni4zNywxMzguNDEzIDg2LjM3LDEzOC43NTlDODYuMzcsMTQwLjI1IDg1LjE2LDE0MS40NiA4My42NjksMTQxLjQ2QzgyLjE3OSwxNDEuNDYgODAuOTY5LDE0MC4yNSA4MC45NjksMTM4Ljc1OUM4MC45NjksMTM3LjI2OCA4Mi4xNzksMTM2LjA1OCA4My42NjksMTM2LjA1OEM4NC4xOTMsMTM2LjA1OCA4NC42ODEsMTM2LjIwNyA4NS4wOTUsMTM2LjQ2NUw5OS45OTEsMTIxLjY3MUwxMDAsMTIxLjY2MkwxMDAsMTIxLjY4WlwiLHN0cm9rZTohMX0saVtcIkdSLk0yLlNFQ1VSSVRZIEZPUkNFIEFTU0lTVEFOQ0VcIl09cihcIlNGQVwiKSxpW1wiR1IuTTIuU0lOR0xFIENIQU5ORUxcIl09cihcIlNDXCIpLGlbXCJHUi5NMi5TS0lcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsMTQ1IC05LC04IG0gMjgsMCAtOSw4IG0gLTE1LC0yNCAyMCwyMCBtIDAsLTIwIC0yMCwyMFwiLGZpbGw6ITF9LGlbXCJHUi5NMi5TSE9SVCBSQU5HRVwiXT1yKFwiU1JcIiksaVtcIkdSLk0yLlNUUkFURUdJQ1wiXT1yKFwiU1RSXCIpLGlbXCJHUi5NMi5TVFJBVEVHSUMgTUlTU0lMRVwiXT1yKFwiU1wiKSxpW1wiR1IuTTIuU1VQUE9SVFwiXT1yKFwiU1BUXCIpLGlbXCJHUi5NMi5UQUNUSUNBTFwiXT1yKFwiVEFDXCIpLGlbXCJHUi5NMi5UQUNUSUNBTCBNSVNTSUxFXCJdPXIoXCJUXCIpLGlbXCJHUi5NMi5UQVJHRVQgQUNRVUlTSVRJT05cIl09cihcIlRBXCIpLGlbXCJHUi5NMi5UT1dFRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk03MCwxMjAgbDYwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTIwLHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjAscjo1fV0saVtcIkdSLk0yLlRST09QXCJdPXIoXCJUXCIpLGlbXCJHUi5NMi5UUkFDS0VEXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDcwLDEyMCBsIDYwLDAgYzEwLDAgMTAsMTAgMCwxMCBsIC02MCwwIGMtMTAsMCAtMTAsLTEwIDAsLTEwXCIsZmlsbDohMX0saVtcIkdSLk0yLlRSVUNLXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTTYwLDEyMCBsODAsMFwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo2NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTM1LGN5OjEyNSxyOjV9XSxpW1wiR1IuTTIuVVRJTElUWVwiXT1yKFwiVVwiKSxpW1wiR1IuTTIuVkVSVElDQUwgT1IgU0hPUlQgVEFLRS1PRkYgQU5EIExBTkRJTkcgXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEzNSxmb250c2l6ZToyMCx0ZXh0OlwiVlNUT0xcIn0saVtcIkdSLk0yLlZFVEVSSU5BUllcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTE1LHk6MTMzLGZvbnRzaXplOjI1LHRleHQ6XCJWXCJ9LGlbXCJHUi5NMi5XSEVFTEVEXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjcwLGN5OjEyNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTI1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEzMCxjeToxMjUscjo1LGZpbGw6ITF9XSxpW1wiR1IuTTIuV0hFRUxFRCBMSU1JVEVEXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjcwLGN5OjEyNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMzAsY3k6MTI1LHI6NSxmaWxsOiExfV0saVtcIkdSLk0yLldPLTFcIl09cihcIldPLTFcIiksaVtcIkdSLk0yLldPLTJcIl09cihcIldPLTJcIiksaVtcIkdSLk0yLldPLTNcIl09cihcIldPLTNcIiksaVtcIkdSLk0yLldPLTRcIl09cihcIldPLTRcIiksaVtcIkdSLk0yLldPLTVcIl09cihcIldPLTVcIiksaVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDEwMCAzMCwwXCIsZmlsbDohMX0saVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMDUgMzAsMCBtIC0zMCwtMTAgMzAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5MT05HIFJBTkdFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDExMCAzMCwwIG0gLTMwLC0yMCAzMCwwIG0gLTMwLDEwIDMwLDBcIixmaWxsOiExfSxpW1wiR1IuRVEuV0VBUE9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDgwXCIsZmlsbDohMX0saVtcIkdSLkVRLlJJRkxFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDgwIE0gODUsNzUgMTAwLDYwIDExNSw3NVwiLGZpbGw6ITF9LGlbXCJHUi5FUS5SSUZMRSBESVNNT1VOVEVEMVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw5MCAxMCwtMTAgMTAsMTAgbSAtMTAsLTEwIDAsNDBcIixmaWxsOiExfSxpW1wiR1IuRVEuTUFDSElORSBHVU5cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDYwIDAsODAgTSA4NSw3NSAxMDAsNjAgMTE1LDc1IE0gODAsMTQwIDEyMCwxNDBcIixmaWxsOiExfSxpW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXT1baVtcIkdSLkVRLlJJRkxFXCJdLHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjkwLHI6MTUsZmlsbDohMX1dLGlbXCJHUi5FUS5GTEFNRSBUSFJPV0VSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMTM1IDAsLTcwIGMgMCwtMTUgMjAsLTE1IDIwLDBcIn0saVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTQwIDMwLDAgYyAwLC0yMCAtMzAsLTIwIC0zMCwwIHogbSAxNSwtODAgMCw2NSBtIDE1LC00NSAwLDQwIG0gLTMwLC00MCAwLDQwXCIsZmlsbDohMX1dLFJ8fE58fGlbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0ucHVzaCh7dHlwZTpcInBhdGhcIixkOlwiTSA4NSw3NSAxMDAsNjAgMTE1LDc1XCIsZmlsbDohMX0pLGlbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTQwIDE1LC0xNSAxNSwxNSBtIC0xNSwtODAgMCw2NSBtIC0xNSwtNDUgMCw0MCBtIDMwLC00MCAwLDQwXCIsZmlsbDohMX0saVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgMCw4MCBtIDE1LC02MCAwLDQwIG0gLTMwLC00MCAwLDQwXCIsZmlsbDohMX0saVtcIkdSLkVRLlJFQ09JTExFU1MgR1VOXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDc1IDE1LC0xNSAxNSwxNSBtIDAsNSAwLDQwIG0gLTMwLC00MCAwLDQwIG0gMTUsLTYwIDAsODBcIixmaWxsOiExfSxpW1wiR1IuRVEuSE9XSVRaRVJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzMCxyOjEwLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDExNSw4MCAwLDQwIG0gLTMwLC00MCAwLDQwIG0gMTUsLTYwIDAsNjBcIixmaWxsOiExfV0sUnx8aVtcIkdSLkVRLkhPV0lUWkVSXCJdLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk0gODUsNzUgMTAwLDYwIDExNSw3NVwiLGZpbGw6ITF9KSxpW1wiR1IuRVEuSE9XSVRaRVIgVFJBQ0tFRFwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA3MCwxMjAgbCA2MCwwIGMxMCwwIDEwLDEwIDAsMTAgbCAtNjAsMCBjLTEwLDAgLTEwLC0xMCAwLC0xMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5NSVNTSUxFIExBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxNDAgMCwtODAgbSAtMTUsODAgMCwtNjUgYyAwLC0yMCAzMCwtMjAgMzAsMCBsIDAsNjVcIixmaWxsOiExfSxpW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxNDAgMzAsMCBjIDAsLTIwIC0zMCwtMjAgLTMwLDAgeiBtIDE1LC0xNSAwLC02NSBtIC0xNSw4MCAwLC02NSBjIDAsLTIwIDMwLC0yMCAzMCwwIGwgMCw2NVwiLGZpbGw6ITF9LGlbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRMQVJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJSXCJ9LGlbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRFTEFSXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiRVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlJcIn1dLGlbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRIRUFUUkVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTQ1LGZvbnRzaXplOjMwLHRleHQ6XCJUXCJ9LGlbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDE0MCAxNSwtMTUgMTUsMTUgTSA4NSwxMjAgODUsNzUgYyAwLC0yMCAzMCwtMjAgMzAsMCBsIDAsNDUgbSAtMTUsNSAwLC02NVwiLGZpbGw6ITF9LGlbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXT1baVtcIkdSLkVRLk1JU1NJTEUgTEFVTkNIRVJcIl1dLFImJmlbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDE0MCAzMCwwXCIsZmlsbDohMX0pLGlbXCJHUi5FUS5NT1JUQVJcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDYwIE0gODUsNzUgMTAwLDYwIDExNSw3NVwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzMCxyOjEwLGZpbGw6ITF9XSxpW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSw3NSAxNSwtMTUgMTUsMTUgbSAtMTUsLTUgMCw3MCBNIDg1LDg1IDEwMCw3MCAxMTUsODVcIixmaWxsOiExfSxpW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDExNSw5MCAwLDQwIG0gLTMwLC00MCAwLDQwIG0gMCwtNTUgMTUsLTE1IDE1LDE1IG0gLTE1LC01IDAsNzAgTSA4NSw4NSAxMDAsNzAgMTE1LDg1XCIsZmlsbDohMX0saVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxNDAgMTUsLTE1IDE1LDE1IE0gODUsODUgMTAwLDcwIDExNSw4NSBtIC0xNSwtMTUgMCw1NSBNIDg1LDc1IDEwMCw2MCAxMTUsNzVcIixmaWxsOiExfSxpW1wiR1IuRVEuTk9OLUxFVEhBTCBXRUFQT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDYwIDAsODAgTSA4MCw2MCBsNDAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5OT04tTEVUSEFMIEdSRU5BREUgTEFVTkNIRVJcIl09W2lbXCJHUi5FUS5OT04tTEVUSEFMIFdFQVBPTlwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo5MCxyOjE1LGZpbGw6ITF9XSxpW1wiR1IuRVEuVEFTRVJcIl09W2lbXCJHUi5FUS5OT04tTEVUSEFMIFdFQVBPTlwiXSxhKFwiWlwiKV0saVtcIkdSLkVRLldBVEVSIENBTk5PTlwiXT1baVtcIkdSLkVRLk5PTi1MRVRIQUwgV0VBUE9OXCJdLGEoXCJXXCIpXSxpW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA3MCwxMzAgNjAsMFwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzUsY3k6MTM1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEyNSxjeToxMzUscjo1LGZpbGw6ITF9XSxpW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTMwIDYwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjEzNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTM1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEyNSxjeToxMzUscjo1LGZpbGw6ITF9XSxpW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3MCwxMDAgMzAsLTMwIDMwLDMwIC0zMCwzMCB6IG0gNjAsLTMwIDAsNjAgbSAtNjAsLTYwIDAsNjAgMCwwXCIsZmlsbDohMX0saVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEUgKEFGVikgQ09NTUFORCBBTkQgQ09OVFJPTFwiXT1baVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEVcIl1dLE4/aVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEUgKEFGVikgQ09NTUFORCBBTkQgQ09OVFJPTFwiXS5wdXNoKHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQzJcIn0pOmlbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFIChBRlYpIENPTU1BTkQgQU5EIENPTlRST0xcIl0ucHVzaCh7dHlwZTpcInBhdGhcIixkOlwibSA4MCw5MCAyMCwxNSAwLC0xMCAyMCwxNVwiLGZpbGw6ITF9KSxpW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4MCAzMCwtMTAgMzAsMTAgbSAtNjAsLTEwIDAsNjAgNjAsMCAwLC02MFwifSxpW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVIgQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVCBWRUhJQ0xFXCJdPVtpW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTIwIDYwLDBcIixmaWxsOiExfV0saVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSIEVOR0lORUVSIFJFQ09OIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMzAsODAgNzAsMTMwXCJ9LGlbXCJHUi5FUS5DT01CQVQgU0VSVklDRSBTVVBQT1JUIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA3MCwxMjAgMTMwLDEyMFwifSxpW1wiR1IuRVEuQVJNT1VSRUQgTUVESUNBTCBQRVJTT05ORUwgQ0FSUklFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDEwMCA2MCwwIG0gLTMwLC0zMCAwLDYwXCJ9LGlbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNjAsMTIwIDgwLDAgTSAxMjAsODAgYyAyNSwwLjIgMjUsNDAgMCw0MCBsIC00MCwwIEMgNTUsMTIwIDU1LDgwIDgwLDgwIFpcIixmaWxsOiExfSxpW1wiR1IuTTIuV0hFRUxFRCBMSU1JVEVEXCJdXSxpW1wiR1IuRVEuQVJNT1VSRUQgVkVISUNMRVwiXT1hKFwiQVwiKSxpW1wiR1IuRVEuQVJNT1JFRCBDQVJSSUVSIFdJVEggVk9MQ0FOT1wiXT1hKFwiVlwiKSxpW1wiR1IuRVEuVEFOS1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDgwIDYwLDAgbSAtNjAsNDAgNjAsMCBtIC02MCwtNTAgMCw2MCAwLDAgbSA2MCwtNjAgMCw2MFwifSxpW1wiR1IuRVEuQVNTQVVMVCBCUkVBQ0hFUiBWRUhJQ0xFIChBQlYpIFdJVEggQ09NQkFUIERPWkVSIEJMQURFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDk1IDMwLDI1IG0gLTMwLC02MCAwLDM1IC0zMCwyNSBtIDEwLC02MCA0MCwwIG0gLTUwLDIwIDYwLDAgbSAtNjAsNDAgNjAsMCBtIC02MCwtNTAgMCw2MCAwLDAgbSA2MCwtNjAgMCw2MFwifSxpW1wiR1IuRVEuTElHSFQgVEFOS1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw4MCAwLDQwXCJ9LGlbXCJHUi5FUS5NRURJVU0gVEFOS1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwNSw4MCAwLDQwIG0gLTEwLC00MCAwLDQwXCJ9LGlbXCJHUi5FUS5IRUFWWSBUQU5LXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTEwLDgwIDAsNDAgbSAtMjAsLTQwIDAsNDAgbSAxMCwtNDAgMCw0MFwifSxpW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsMTAwIDMwLDAgbSAxMCwtMTAgYyAtMTMuMSwwIC0xMi40LDIwIDAsMjAgTSA3NSw5MCBjIDEyLjcsMC4zIDEyLjcsMjAuMyAwLDIwXCJ9LGlbXCJHUi5FUS5CUklER0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTE1LDc1IC0xMCwxMCAwLDMwIDEwLDEwIG0gLTMwLC01MCAxMCwxMCAwLDMwIC0xMCwxMCBtIC0xNSwtNTUgNjAsMCAwLDYwIC02MCwwIDAsLTYwXCIsZmlsbDohMX0saVtcIkdSLkVRLkZJWEVEIEJSSURHRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMDAsNzAgMTAwLDEzMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5GT0xESU5HIEdJUkRFUiBCUklER0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTEwLCA4MCA5MCw4MCA5MCwxMjAgMTEwLDEyMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5IT0xMT1cgREVDSyBCUklER0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTEwLCA4MCA5MCw4MCA5MCwxMjAgMTEwLDEyMCB6XCIsZmlsbDohMX0saVtcIkdSLkVRLkRSSUxMXCJdPWlbXCJHUi5JQy5EUklMTElOR1wiXSxpW1wiR1IuRVEuRE9aRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNjAgMjAsMCBtIC0xMCwwIDAsMjAgbSAtMzAsMCA2MCwwIG0gLTYwLC0xMCAwLDYwIDAsMCBtIDYwLC02MCAwLDYwIG0gLTYwLC0xMCA2MCwwXCIsZmlsbDohMX0saVtcIkdSLkVRLkRPWkVSIEFSTU9SRURcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTMwIDYwLDAgbSAtMzAsLTcwIDAsMTAgbSAtMzAsMTAgMzAsLTEwIDMwLDEwIG0gMCwtMTAgMCw2MCBtIC02MCwtNjAgMCw2MCAwLDAgbSAyMCwtNzAgMjAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5FQVJUSE1PVkVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDIwIG0gLTI1LC0xNSA1LC01IDQwLDAgNSw1IG0gLTU1LDE1IDYwLDAgbSAtNjAsNDAgNjAsMCBtIDAsLTUwIDAsNjAgbSAtNjAsLTYwIDAsNjAgMCwwXCIsZmlsbDohMX0saVtcIkdSLkVRLk1VTFRJRlVOQ1RJT05BTCBFQVJUSE1PVkVSL0RJR0dFUlwiXT1baVtcIkdSLkVRLkVBUlRITU9WRVJcIl0sYShcIk1GXCIpXSxpW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDgwIDAsMTUgLTMwLDI1IDYwLDAgLTMwLC0yNVwiLGZpbGw6ITF9LGlbXCJHUi5FUS5NSU5FIExBWUlORyBWRUhJQ0xFXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA5MCw4NSAyMCwzMCBtIDAsLTMwIC0yMCwzMCBtIDEwLC0zMCAwLDMwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTB9XSxpW1wiR1IuRVEuTUlORSBTQ0FUVEVSQUJMRVwiXT1bYShcIlNcIikse3R5cGU6XCJjaXJjbGVcIixjeDo4NSxjeToxMTUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjExNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMTUsY3k6MTE1LHI6NSxmaWxsOiExfV0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDY1IGMgMCwxNSA2MCwxNSA2MCwwIGwgMCw2NSAtNjAsMCB6XCJ9LGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgQkFDS0hPRVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMzAsMTMwIDEwMCw4MCA3NSw5NSA3NSw5NVwifSx7dHlwZTpcInBhdGhcIixkOlwiTSA3NSwxMDUgODUsOTUgNzUsOTUgelwifV0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBGRVJSWSBUUkFOU1BPUlRFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDEwMCBjIDE1LDE1IDM1LDE1IDUwLDAgelwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIExJR0hUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTAwLDc4LjMgMTAwLDEzMFwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIE1FRElVTVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwNSwxMzAgMCwtNTIgTSA5NSwxMzAgbDAsLTUyXCJ9LGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgSEVBVllcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMTAsMTMwIDAsLTUzIG0gLTIwLDUwIDAsLTUzIG0gMTAsMS4zIDAsNTJcIn0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0tcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMzAsMTMwIC00MCwtNDAgMCwyNSBjIDAsNSAtMTAsNSAtMTAsMFwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDSy5MSUdIVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwNSwxMTUgMTAsLTEwXCJ9LGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLLkhFQVZZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTIwLDExMCAtMTAsMTAgbSAtMTAsLTEwIDEwLC0xMCBtIC01LDE1IDEwLC0xMFwifSxpW1wiR1IuRVEuTUVESUNBTCBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsMTAwIGwgNjAsMCBNIDEwMCw3OC4zIDEwMCwxMzBcIn0saVtcIkdSLkVRLk1FRElDQUwgRVZBQ1VBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5NSw4NSAxMCwwIDAsMTAgMTAsMCAwLDEwIC0xMCwwIDAsMTAgLTEwLDAgMCwtMTAgLTEwLDAgMCwtMTAgMTAsMCB6XCJ9LGlbXCJHUi5FUS5NT0JJTEUgRU1FUkdFTkNZIFBIWVNJQ0lBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDEwMCBsIDYwLDAgTSAxMDAsNzguMyAxMDAsMTMwIE0gODUsODUgMTE1LDg1XCJ9LGlbXCJHUi5FUS5CVVNcIl09W2lbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sYShcIkJcIildLGlbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl09W2lbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxNDAsOTAgMCwyMCBtIC0xMCwtMTAgMTAsMFwifSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjEzNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDo4NSxjeToxMzUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTI1LGN5OjEzNSxyOjUsZmlsbDohMX1dLGlbXCJHUi5FUS5XQVRFUiBWRUhJQ0xFXCJdPVtpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsOTUgYyAxMCwwIDAsMTAgMTAsMTAgMTAsMCAwLC0xMCAxMCwtMTAgMTAsMCAwLDEwIDEwLDEwIDEwLDAgMCwtMTAgMTAsLTEwIDEwLDAgMCwxMCAxMCwxMCAxMCwwIDAsLTEwIDEwLC0xMFwifSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjEzNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMjUsY3k6MTM1LHI6NSxmaWxsOiExfV0saVtcIkdSLkVRLlRSQUlOIExPQ09NT1RJVkVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw3MCAwLDYwIDYwLDAgMCwtMzAgLTMwLDAgMCwtMzAgelwifSxpW1wiR1IuRVEuUkFJTENBUlwiXT1baVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NzUsY3k6MTM1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojg1LGN5OjEzNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMTUsY3k6MTM1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEyNSxjeToxMzUscjo1fV0saVtcIkdSLkVRLkNCUk4gRVFVSVBNRU5UXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTTgwLDE0MCBjMCwtMjAgMTAsLTYwIDUwLC02MyBtLTEwLDYzIGMwLC0yMCAtMTAsLTYwIC01MCwtNjMgXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDo3MCxjeTo4NSxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTMwLGN5Ojg1LHI6OH1dLGlbXCJHUi5FUS5DT01QVVRFUiBTWVNURU1cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDEzMiAwLC0xMCAtMzUsMCAwLC01MCA3MCwwIDAsNTAgLTM1LDAgbSAtMjUsMTAgNTAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5DT01NQU5EIExBVU5DSCBFUVVJUE1FTlQgKENMRSlcIl09YShcIkNMRVwiKSxpW1wiR1IuRVEuR0VORVJBVE9SIFNFVFwiXT1hKFwiR1wiKSxpW1wiR1IuRVEuR1JPVU5ELUJBU0VEIE1JRENPVVJTRSBERUZFTlNFIChHTUQpIEZJUkUgQ09OVFJPTCAoR0ZDKSBDRU5URVJcIl09YShcIkdGQ1wiKSxpW1wiR1IuRVEuSU4tRkxJR0hUIElOVEVSQ0VQVE9SIENPTU1VTklDQVRJT05TIFNZU1RFTSAoSUZJQ1MpIERBVEEgVEVSTUlOQUwgKElEVClcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4MCw4Mi40IDQ1LC0yIC00LDM3IG0gLTYsLTEgMCwtMzUgLTM0LDkgbSAxMiwyMSAwLDggTSA4MCw4Mi40IGMgMCwyNSAxNiwzNSA0MSwzNVwifSxpW1wiR1IuRVEuTEFTRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsNTUgMCwyNSAxMCw1IC0yMCw1IDIwLDUgLTIwLDUgMTAsNSAwLDE1IDEwLDUgLTIwLDUgMjAsNSAtMjAsNSAyMCw1IE0gOTAsNjUgMTAwLDU1IDExMCw2NVwifSxpW1wiR1IuRVEuVEVOVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEyNC40IDEwLC0zNyAyNSwtMTAgMjUsMTAgMTAsMzcgelwifSxpW1wiR1IuRVEuVEVOVCBDSVZJTElBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDEyMCAxMCwtMzAgMTUsLTEwIDE1LDEwIDEwLDMwIHpcIn0saVtcIkdSLkVRLlRFTlQgTUlMSVRBUllcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTIwIDEwLC0zMCAxNSwtMTAgMTUsMTAgMTAsMzAgelwifSxpW1wiR1IuRVEuVU5JVCBERVBMT1lNRU5UIFNISVBNRU5UU1wiXT1hKFwiRFBMWVwiKSxpW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxMjUgMCwtMjBcIn0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAzLDEwNSAwLDIwIG0gLTYsLTIwIDAsMjBcIn0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDYsMTA1IDAsMjAgbSAtMTIsLTIwIDAsMjAgbSA2LC0yMCAwLDIwXCJ9LGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxNDAsMTA1IDAsMjAgbSAtMTAsLTEwIDEwLDBcIn0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsZDpcIm0gOTAsMTI1IDIwLDAgbSAtMjAsMCBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgeiBtIDM1LDAgNSwwIDAsLTIwIC0yMCwwIDAsLTIwIC0yMCwwIDAsMjAgLTIwLDAgMCwyMCA1LDAgbSA1MCwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tld2lkdGg6MixkOlwibSA5NSw5MCAwLDE1IDEwLDAgMCwtMTUgelwifV0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLDEyNSAyMCwwIG0gLTIwLDAgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAzNSwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMCwwIDUsMCAwLC0yMCAtMjAsMCAtMjAsMCAwLC0yMCAtMjAsMCAwLDIwIDAsMjAgNSwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tld2lkdGg6MixkOlwibSA3NSw5MCAwLDE1IDEwLDAgMCwtMTUgelwifV0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLDEyNSAyMCwwIG0gLTIwLDAgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAzNSwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMCwwIDUsMCAwLC0yMCAwLC0yMCAtMjAsMCAtMjAsMCAtMjAsMCAwLDIwIDAsMjAgNSwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tld2lkdGg6MixkOlwibSAxMTUsOTAgMCwxNSAxMCwwIDAsLTE1IHogbSAtMjAsMCAwLDE1IDEwLDAgMCwtMTUgeiBtIC0yMCwwIDAsMTUgMTAsMCAwLC0xNSB6XCJ9XSxpW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLDEyNSBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgeiBtIDM1LDAgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAtMzUsMCAyMCwwIG0gMTUsMCA1LDAgMCwtMjAgMCwtMjAgLTIwLDAgLTIwLDAgMCwyMCAtMjAsMCAwLDIwIDUsMFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjIsZDpcIm0gOTUsOTAgMCwxNSAxMCwwIDAsLTE1IHpcIn1dLGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLDEyNSAyMCwwIG0gLTIwLDAgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAzNSwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMCwwIDUsMCAwLC0yMCAtNjAsMCAwLDIwIDUsMCBtIDE1LC0yMCA1LC0xNVwifSxpW1wiR1IuRVEuUEFDSyBBTklNQUxcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCwxMjUgMTUsLTUwIDE1LDUwIDE1LC01MCAxNSw1MCBcIn0saVtcIkdSLkVRLk1JU1NJTEUgU1VQUE9SVFwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTAwLGZvbnRzaXplOjIwLHRleHQ6XCJNU0xcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjIwLHRleHQ6XCJTUFRcIn1dLGlbXCJHUi5FUS5NSVNTSUxFIFRSQU5TTE9BREVSXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1TTFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDcwIDUwLDAgbSAtMjUsMTAgYyAwLC01IDAsLTEwIDAsLTEwXCJ9XSxpW1wiR1IuRVEuTUlTU0lMRSBUUkFOU1BPUlRFUlwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNU0xcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1NSw4NSA5MCwwXCJ9XSxpW1wiR1IuRVEuTUlTU0lMRSBDUkFORS9MT0FESU5HIERFVklDRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNU0xcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSw4MCAyNSwtMjAgYyAwLDAgMCwxNSAwLDE1IGwgNSwwIDAsLTVcIn1dLGlbXCJHUi5FUS5NSVNTSUxFIFBST1BFTExBTlQgVFJBTlNQT1JURVJcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjkwLHk6MTEwLGZvbnRzaXplOjIwLHRleHQ6XCJNU0xcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjAsMTE1IDAsLTE1IC0xMCwtMTAgMjAsMCAtMTAsMTBcIn1dLGlbXCJHUi5FUS5NSVNTSUxFIFdBUkhFQUQgVFJBTlNQT1JURVJcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMCxmb250c2l6ZToyMCx0ZXh0OlwiTVNMXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZToyMCx0ZXh0OlwiV0hEXCJ9XSxpW1wiR1IuRVEuTEFORCBNSU5FXCJdPU4/e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjIsZmlsbDohMX06W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsNjUgNjAsMCAtMzAsNjUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo5MCxmb250ZmFtaWx5OlwiQXJpYWxcIixmb250c2l6ZTozMCx0ZXh0OlwiTVwifV0saVtcIkdSLkVRLkFOVElQRVJTT05ORUwgTEFORCBNSU5FXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMn0se3R5cGU6XCJwYXRoXCIsZDpcIk0xMTcsODIgbDIwLC0xOCAtMTgsMjV6IE04Myw4MiBsLTIwLC0xOCAxOCwyNXpcIixzdHJva2U6ITF9XSxpW1wiR1IuRVEuQU5USVBFUlNPTk5FTCBMQU5EIE1JTkUgTEVTUyBUSEFOIExFVEhBTFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIk0xMTcsODIgbDIwLC0xOCAtMTgsMjV6IE04Myw4MiBsLTIwLC0xOCAxOCwyNXpcIixzdHJva2U6ITF9XSxpW1wiR1IuRVEuQU5USVRBTksgTUlORVwiXT17dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMn0saVtcIkdSLkVRLklNUFJPVklTRUQgRVhQTE9TSVZFIERFVklDRVwiXT1hKFwiSUVEXCIpLGlbXCJHUi5FUS5MQU5EIE1JTkVTXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1cIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlI/XCJtIDEzNSw3MCAtNzAsMCAzNSw3MCB6XCI6XCJtIDY1LDEzMCA3MCwwIC0zNSwtNzAgelwifV0saVtcIkdSLkVRLlNFTlNPUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgYyAwLDE1IDI1LDQwIDQwLDQwIC0xNSwwIC00MCwyNSAtNDAsNDAgMCwtMTUgLTI1LC00MCAtNDAsLTQwIDE1LDAgNDAsLTI1IDQwLC00MCB6XCJ9LGlbXCJHUi5FUS5TRU5TT1IgRU1QTEFDRURcIl09W3MuX3NjYWxlKC43NSxpW1wiR1IuRVEuU0VOU09SXCJdKSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDc1IDEwLC0xNSAxMCwxNSAxMCwtMTUgMTAsMTUgMTAsLTE1IDEwLDE1XCJ9XSxpW1wiR1IuRVEuUkFEQVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk03Miw5NSBsMzAsLTI1IDAsMjUgMzAsLTI1IE03MCw3MCBjMCwzNSAxNSw1MCA1MCw1MFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5BTlRFTk5BRVwiXT1bXSxpW1wiR1IuRVEuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TIEVRVUlQTUVOVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxzdHJva2U6byxkOlwibSAxMTAsOTUgMTAsMCBtIC0xMCwxMCAxMCwwIG0gLTEwLDEwIDEwLDAgbSAtMTAsLTMwIDEwLDAgbSAtMTAsLTUgLTEwLDEwIC0zMCwwIDAsMjAgMzAsMCAxMCwxMCB6XCJ9LGlbXCJHUi5JTi5JQy5FTERFUiBDQVJFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMC4xLDExOS4xIGMgMCwtNi4zIDIuMywtOC4yIDMuOSwtMTIuNiAxLC0yLjYgMS42LC0zLjMgMS44LC02LjUgMC4yLC0yLjQgMC45LC00LjcgMC45LC03LjIgdiAtMi42IGMgMCwtMi42IC0yLjIsLTguOSAtMy4zLC0xMC41IC0xLjMsLTIgLTQuOCwtNS40IC02LjcsLTYuOSAtMi4yLC0xLjggLTUuNCwtNC42IC04LjIsLTUuNiAtMS42LC0wLjUgLTkuOCwtMi40IC0xMS40LC0yLjMgbCAtNS43LDAuNiB2IDAuOCBjIDAsMC44IDIsMi43IDIuNCwzLjMgMCwzLjMgMC44LDYuOCAtMS4zLDguNCAtMi4yLDEuNiAtMi44LDMuNCAtMy44LDYuMyAtMC40LDEgLTAuOSwzLjEgLTEsNCAtMC4yLDEgLTAuMiw0IC0wLjQsNC42IC0xLjEsMi40IC0yLjYsNC4yIC0zLjgsNi40IGwgLTUuMSwwLjUgYyAtMi4xLDMuMiAtNC42LDQuMSAtNC42LDkuNiB2IDI2LjQgYyAwLjYsMC4yIDAuNCwwLjIgMC45LDAuMiAwLjUsMCAwLjMsLTAuMSAwLjksLTAuMiB2IC0yNy41IGMgMCwtMC43IDAuOCwtMyAxLjEsLTMuNSAwLjQsMC4yIDAuOCwwLjYgMS4zLDAuNiAwLjMsMCAxLjEsLTAuMyAxLjMsLTAuNCBsIDIuNiwwLjkgMC44LC0wLjYgMC42LDIuNSBjIDAuNCwwLjMgMC40LDAuNSAwLjgsMC41IGggMC40IGMgMC41LDAgMC42LC0wLjIgMC42LC0wLjYgdiAtMC40IGMgMCwtMSAtMS4yLC0zIC0xLjUsLTMuNyAxLjIsLTIuNSA2LjMsLTIuNiA4LjIsLTUuOCAwLjksLTEuNiAxLjgsLTMgMi42LC00LjUgMC40LC0wLjkgMi4zLC00LjEgMi40LC00LjQgaCA0LjQgYyAyLjMsMCAyLjEsMi41IDIuNiw0LjIgMC42LDIgMiwyIDIsNC42IDAsMi44IC0yLjksNyAtNCw5IC0wLjMsMC43IC0zLjksOC44IC0zLjksOC45IHYgMiBjIDAsMyAyLjYsOS4xIDIuNiwxMS4yIHYgMi4yIGMgLTEuMiwwLjMgLTYuOCwyLjQgLTYuOCwzLjUgMCwwLjMgMC40LDAuNiAwLjksMC42IGggNi44IGMgMi4zLDAgNC41LC0xIDYuNiwtMS4xIHYgLTMgYyAwLC0wLjYgLTEuMSwtMi4yIC0xLjEsLTMuNyAtMC45LC0xLjMgLTEuOCwtNiAtMS44LC04LjIgMCwtMy4yIDEuMiwtNS40IDIuNSwtNy40IDIuNSwtNCAwLjQsLTIuMyA0LjYsLTUuMSBsIDEuOCwxLjcgYyAtMSwxLjggLTIuMywzLjcgLTIuMyw2LjQgdiA1LjkgaCAwLjQgdiAwLjYgYyAwLDAuOSA1LDkgNS43LDEwLjMgLTEuNSwyLjMgLTYuNywxLjYgLTYuOCw1IGggNy41IGMgMS4yLDAgMy4zLC0xIDQuNSwtMS40IDEuNiwtMC41IDIuOSwtMS4xIDIuOSwtMyAwLC0wLjcgLTIuOSwtNC42IC0zLjYsLTUuNyAtMC4zLC0wLjQgLTIuNCwtNiAtMi40LC02LjYgdiAtMC40IHogbSAtNDUuMywtNDcuOSB2IDAuNiBjIDAsNC4zIDMuNyw3LjkgOC4xLDcuOSBoIDAuMiBjIDMuNywwIDcuNywtMy42IDcuNywtNyB2IC0yLjIgYyAwLC0zLjIgLTMuOSwtNi44IC03LjUsLTYuOCBoIC0xLjIgYyAtMy40LDAgLTcuMyw0IC03LjMsNy41IHpcIixzdHJva2U6ITF9LGlbXCJHUi5JTi5JQy5SQVcgTUFURVJJQUwgUFJPRFVDVElPTi9TVE9SQUdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo5MCxmb250c2l6ZTozMCx0ZXh0OlwiUFNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTIwLGZvbnRzaXplOjMwLHRleHQ6XCJSTVwifV0saVtcIkdSLklOLklDLk1JTkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA1LDg1IDEwLDEwIDUsLTUgYyAtNSwtNSAtMTAsLTUgLTE1LC01IHogTSA5NSw4NSA4NSw5NSA4MCw5MCBjIDUsLTUgMTAsLTUgMTUsLTUgeiBtIC01LDUgMzAsMzAgbSAtNDAsMCAzMCwtMzBcIn0saVtcIkdSLklOLklDLlBST0NFU1NJTkcgRkFDSUxJVFlcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjkwLGZvbnRzaXplOjMwLHRleHQ6XCJQUk9DXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiRkFDXCJ9XSxpW1wiR1IuSU4uSUMuVVRJTElUWSBGQUNJTElUWVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlVUSUxcIn0saVtcIkdSLklOLklDLlJFU0VBUkNIXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiUiZEXCJ9LGlbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsODAgMTAsMjAgLTEwLDAgMTAsMjBcIixmaWxsOiExfSxpW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDYwLjUgYyAtMTYuNCwwIC0yOS42LDEzLjIgLTI5LjYsMjkuNiAwLDEyLjggOC4zLDIzLjkgMTkuNywyNy44IGwgMCwxOS43IGMgMy4yLDEuMiA2LjMsMS44IDkuOSwxLjggMy42LDAgNi43LC0wLjYgOS45LC0xLjggbCAwLC0xOS44IGMgMTEuNSwtMy45IDE5LjgsLTE1IDE5LjcsLTI3LjggMCwtMTYuNCAtMTMuMiwtMjkuNiAtMjkuNiwtMjkuNiB6XCIsZmlsbDohMX0saVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSIE5VQ0xFQVJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTA1LGZvbnRzaXplOjQwLHRleHQ6XCJOXCJ9LGlbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBEQU1cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTA1LGZvbnRzaXplOjQwLHRleHQ6XCJIXCJ9LGlbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBGT1NTSUxcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTA1LGZvbnRzaXplOjQwLHRleHQ6XCJGXCJ9LGlbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZXCJdPXt0eXBlOlwicGF0aFwiLGQ6Uj9cIk0gOTAuNCwxMTkgQyA4NC4yLDExNSA4MCwxMDkgODAsMTAxIGwgMjAsMCAtOS42LDE4IHogbSAxOS42LDAgLTEwLC0xOCAyMCwwIGMgMCw4IC00LDE0IC0xMCwxOCB6IE0gMTAwLDEwMSA4OS43LDgzLjggYyAzLC0yIDYuNSwtMyAxMC4zLC0zIDQsMCA3LDEgMTAsMyBMIDEwMCwxMDEgWlwiOlwiTSA4OS45LDgyLjUgMTEwLDgyLjcgODkuNywxMTcuMSA4MCw5OS45IDEyMC4xLDEwMCAxMTAsMTE3LjMgelwiLGZpbGw6ITF9LGlbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZIFdFQVBPTlMgR1JBREVcIl09e3R5cGU6XCJwYXRoXCIsZDpSP1wiTSA5MC40LDExOSBDIDg0LjIsMTE1IDgwLDEwOSA4MCwxMDEgbCAyMCwwIC05LjYsMTggeiBtIDE5LjYsMCAtMTAsLTE4IDIwLDAgYyAwLDggLTQsMTQgLTEwLDE4IHogTSAxMDAsMTAxIDg5LjcsODMuOCBjIDMsLTIgNi41LC0zIDEwLjMsLTMgNCwwIDcsMSAxMCwzIEwgMTAwLDEwMSBaXCI6XCJNIDg5LjksODIuNSAxMTAsODIuNyA4OS43LDExNy4xIDgwLDk5LjkgMTIwLjEsMTAwIDExMCwxMTcuMyB6XCJ9LGlbXCJHUi5JTi5JQy5BSVJDUkFGVCBQUk9EVUNUSU9OICYgQVNTRU1CTFlcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk1LjEsMTA5LjMgYyAwLDAgLTIwLjgsNC45IC0zMC4xLDYuNyAtMi4yLDAuNCAtNS43LDAuMiAtNi41LC0yIC0wLjQsLTEuMSAzLjMsLTYuNiA2LjUsLTcuMyA4LjcsLTEuOSAyNS43LC01LjUgMjUuNywtNS41IGwgMy4xLC0xNi4xIDQsLTAuOCAwLjMsMTUuOSAyNS42LC01LjggNi41LC0xMy4yIDUuMywtMS40IC0zLjMsMTYuMSAxNCw0LjggLTQuMywxLjIgLTEzLjcsLTIuOCAtMjMuNiw2LjcgMzEuNiwxMS44IC01LjUsMi41IHpcIn0saVtcIkdSLklOLklDLkJSSURHRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3MCwxMTUgMTAsLTEwIDQwLDAgMTAsMTAgbSAtNjAsLTMwIDEwLDEwIDQwLDAgMTAsLTEwXCIsZmlsbDohMX0saVtcIkdSLklOLklDLkJBU0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsODUgNTAsMzAgbSAtNTAsMCA1MCwtMzBcIixmaWxsOiExfSxpW1wiR1IuSU4uSUMuU0VBIFNVUkZBQ0UgSU5TVEFMTEFUSU9OLCBPSUwgUklHL1BMQVRGT1JNXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMDUgMCwtNDAgbSAyNSw0MCAwLDE1IG0gLTM1LDAgMCwtMTUgNTAsMCAwLDE1XCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsOTAgMTUsMCAwLDE1IC0xNSwwIDAsLTE1XCJ9XSxpW1wiR1IuSU4uSUMuTUlMSVRBUlkvQ0lWSUxJQU4uTUFURVJJRUxcIl09YShcIk1BVFwiKSxpW1wiR1IuSU4uSUMuTUlMSVRBUlkvQ0lWSUxJQU4uUFJJTlRFRCBNRURJQVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6OTAscjoxMCxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMTAscjoxMCxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSA2NSwxMDAgNzUsMFwiLGZpbGw6ITF9XSxpW1wiR1IuSU4uSUMuSU5GUkFTVFJVQ1RVUkUuQkFOS0lORyBGSU5BTkNFIEFORCBJTlNVUkFOQ0UgIElORlJBU1RSVUNUVVJFLkVDT05PTUlDIElORlJBU1RSVUNUVVJFIEFTU0VUXCJdPWEoXCJFQ09OXCIpLGlbXCJHUi5JTi5JQy5JTkZSQVNUUlVDVFVSRS5URUxFQ09NTVVOSUNBVElPTlMgSU5GUkFTVFJVQ1RVUkUuVEVMRUNPTU1VTklDQVRJT05TXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDEwNSAyMCwwIDAsMCBtIC0yNSwxNSAxNSwtMzAgMTUsMzAgbSAtNTUsLTQwIDI1LDEwIDAsLTEwIDE1LDEwIDE1LC0xMCAwLDEwIDI1LC0xMFwiLGZpbGw6ITF9LGlbXCJHUi5JTi5NMS5SQURJT0xPR0lDQUxcIl09bChcIlJcIiksaVtcIkdSLklOLk0xLkNPQUxcIl09bChcIkNPXCIpLGlbXCJHUi5JTi5NMS5HRU9USEVSTUFMXCJdPWwoXCJHVFwiKSxpW1wiR1IuSU4uTTEuSFlEUk9FTEVDVFJJQ1wiXT1sKFwiSFlcIiksaVtcIkdSLklOLk0xLk5BVFVSQUwgR0FTXCJdPWwoXCJOR1wiKSxpW1wiR1IuSU4uTTEuUEVUUk9MRVVNXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw3NSAwLC0xMCAtNiwtMTAgMTIsMCAtNiwxMFwiLGZpbGw6ITF9LGlbXCJHUi5JTi5NMS5DSVZJTElBTlwiXT1sKFwiQ0lWXCIpLGlbXCJHUi5JTi5NMS5DSVZJTElBTiBURUxFUEhPTkVcIl09bChcIlRcIiksaVtcIkdSLklOLk0xLkNJVklMSUFOIFRFTEVWSVNJT05cIl09bChcIlRWXCIpLGlbXCJHUi5JTi5NMi5DSEVNSUNBTCBXQVJGQVJFIFBST0RVQ1RJT05cIl09cihcIkNcIiksaVtcIkdSLklOLk0yLk5VQ0xFQVIgV0FSRkFSRSBQUk9EVUNUSU9OXCJdPXIoXCJOXCIpLGlbXCJHUi5JTi5NMi5SQURJT0xPR0lDQUwgV0FSRkFSRSBQUk9EVUNUSU9OXCJdPXIoXCJSXCIpLGlbXCJHUi5JTi5NMi5BVE9NSUMgRU5FUkdZIFJFQUNUT1JcIl09cihcIkFcIiksaVtcIkdSLklOLk0yLk5VQ0xFQVIgTUFURVJJQUwgUFJPRFVDVElPTlwiXT1yKFwiUFwiKSxpW1wiR1IuSU4uTTIuTlVDTEVBUiBNQVRFUklBTCBTVE9SQUdFXCJdPXIoXCJTXCIpLGlbXCJHUi5JTi5NMi5DSEVNSUNBTCAmIEJJT0xPR0lDQUwgV0FSRkFSRVwiXT1yKFwiQlwiKSxpW1wiR1IuSU4uTTIuU0hJUCBDT05TVFJVQ1RJT05cIl09cihcIllSRFwiKSxpW1wiR1IuSU4uTTIuV0VBUE9OUyBHUkFERSBQUk9EVUNUSU9OXCJdPXIoXCJXXCIpLGlbXCJTT0YuSUMuVU5ERVJXQVRFUiBERU1PTElUSU9OIFRFQU1cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMyLHRleHQ6XCJVRFRcIn0saVtcIlNPRi5NMi5BVFRBQ0tcIl09cihcIkFcIiksaVtcIlNPRi5NMi5SRUZVRUxcIl09cihcIktcIiksaVtcIlNPRi5NMi5VVElMSVRZXCJdPXIoXCJVXCIpLGlbXCJTT0YuTTIuVlNUT0xcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTM1LGZvbnRzaXplOjIwLHRleHQ6XCJWU1RPTFwifSxpW1wiU09GLk0yLkNPTUJBVCBTRUFSQ0ggQU5EIFJFU0NVRVwiXT1yKFI/XCJDU0FSXCI6XCJIXCIpLGlbXCJTVC5JQy5BUlJFU1RcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTIuNSwxMDAgMTUsMCBtIC0yLjUsLTEwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6IG0gLTUsNSAwLDIwIG0gMjAsLTE1IGMgMCwxMSAtOSwyMCAtMjAsMjAgLTExLDAgLTIwLC05IC0yMCwtMjAgMCwtMTEgOSwtMjAgMjAsLTIwIDExLDAgMjAsOSAyMCwyMCB6XCIsZmlsbDohMX0saVtcIlNULklDLkFSU09OL0ZJUkVcIl09Uj9be3R5cGU6XCJwYXRoXCIsZDpcIm0gODQuNiwxMDEuNiBjIDEuMywyMy4xIDMxLDIzLjIgMzAuNywtMS45IC0xLjUsMi4xIC00LjYsNi41IC04LjEsNy4zIDEuOSwtMi40IDIuNiwtOC41IDIuNCwtMTIuOSAtMS43LDMuNCAtNCw3LjkgLTcsNy44IDEuNywtNC4zIDIuNywtOS40IC0wLjUsLTEzLjcgLTAuMiwzIDAuOCw3LjEgLTEuOSw3IC0yLjcsLTAuMSAtMi45LC00LjQgLTEuMSwtMTAuOCAtNCw0LjEgLTYuMiw5LjggLTMuOCwxNy41IC0xLjksLTAuMiAtNC40LC0xLjkgLTcsLTcuOCAtMS41LDQuOSAxLjIsOS42IDMuMiwxMy43IC0yLjQsLTEuMSAtNiwtMyAtNywtNi4yIHpcIixzdHJva2U6ITF9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5Ojc1LGZvbnRzaXplOjI1LHRleHQ6XCJBU05cIn1dOnt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiRklSRVwifSxpW1wiU1QuSUMuQVRURU1QVEVEIENSSU1JTkFMIEFDVElWSVRZXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyNywxMjcgNSw1IG0gLTE1LC0xNSA1LDUgbSAtMTUsLTE1IDUsNSBtIC0xNSwtMTUgNSw1IG0gLTE1LC0xNSA1LDUgbSAtMTUsLTE1IDUsNSBtIC0xNSwtMTUgNSw1XCIsZmlsbDohMX0saVtcIlNULklDLkJMQUNLIExJU1QgTE9DQVRJT05cIl09YShcIkJMS1wiKSxpW1wiU1QuSUMuQkxBQ0sgTUFSS0VUSU5HXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiQkxLXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiTUtUXCJ9XSxpW1wiU1QuSUMuQk9NQlwiXT1hKFwiQk9NQlwiKSxpW1wiU1QuSUMuQk9PQlkgVFJBUFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMDUgMTUsLTI1IDE1LDI1IG0gLTM1LDUgYyAwLC0xMCA0MCwtMTAgNDAsMCAwLDEwIC00MCwxMCAtNDAsMCB6XCIsZmlsbDohMX0saVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4NSAwLDMwIG0gLTM1LC0xNSA0NSwwIG0gMjAsMCBjIDAsNS41IC00LjUsMTAgLTEwLDEwIC01LjUsMCAtMTAsLTQuNSAtMTAsLTEwIDAsLTUuNSA0LjUsLTEwIDEwLC0xMCA1LjUsMCAxMCw0LjUgMTAsMTAgelwiLGZpbGw6ITF9LGlbXCJTVC5JQy5ERU1PTlNUUkFUSU9OXCJdPWEoXCJNQVNTXCIpLGlbXCJTVC5JQy5EUklWRS1CWSBTSE9PVElOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA5NSw4NSA1LC01IDUsNSBtIC01LC01IDAsMzAgbSAtMTUsMCAzMCwwIG0gNSw1IGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6IG0gLTMwLDAgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHpcIixmaWxsOiExfSxpW1wiU1QuSUMuRFJVRyBSRUxBVEVEIEFDVElWSVRJRVNcIl09YShcIkRSVUdcIiksaVtcIlNULklDLkVYUExPU0lPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTAsNTUgNSwyMCAxNSwtMTAgMCwxNSAxNSw1IC0xNSwxMCAxNSwxMCAtMTUsNSA1LDE1IC0yMCwtNSAtNSwyMCAtMTAsLTE1IC0xMCwyMCAtNSwtMjUgLTIwLDEwIDUsLTE1IEwgNTUsMTA1IDcwLDk1IDYwLDg1IDcwLDgwIDcwLDY1IDg1LDc1IDkwLDU1IDEwMCw3MCB6XCIsZmlsbDohMX0saVtcIlNULklDLkVYVE9SVElPTlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMzAsZm9udHNpemU6ODAsdGV4dDpcIiRcIn0saVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDUsODUgYyAtNSwxMCAtNSwyMCAwLDMwIG0gMCwtMzAgYyAtMjAsMCAtMjAsMzAgMCwzMFwiLGZpbGw6ITF9LHtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMzUsMTIwIGwxMzAsMCBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSwxMjAgbDE1MCwwIFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSwxMjAgbDExMCwwIFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCwxMjAgbDEwMCwwIFwiLGZpbGw6ITF9fVtUXV0saVtcIlNULklDLkdSQUZGSVRJXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCw4MCBjIC0xMCwwIC0xMCwxMCAwLDEwIDEwLDAgMTAsMTAgMCwxMCAtMTAsMCAtMTAsMTAgMCwxMCAxMCwwIDEwLDEwIDAsMTAgTSA5MCw4MCBjIC0xMCwwIC0xMCwxMCAwLDEwIDEwLDAgMTAsMTAgMCwxMCAtMTAsMCAtMTAsMTAgMCwxMCAxMCwwIDEwLDEwIDAsMTBcIixmaWxsOiExfSxpW1wiU1QuSUMuR1JPVVBcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTMzLDkwIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwIG0gLTUyLC0xMi4zIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwIG0gMjMsLTcuMyBjIDAsMTAgLTE1LDEwIC0xNSwwIDAsLTEwIDE1LC0xMCAxNSwwIHogbSAtOCw3LjMgMCwyNSBtIC0xMCwtMjAgMjAsMFwiLGZpbGw6ITF9LGlbXCJTVC5JQy5ISUpBQ0tJTkcgKEFJUlBMQU5FKVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxkOlwibSA3MCw5NSAwLDEwIDY1LDAgMCwtMTAgeiBtIDU1LDEwIDAsMTAgNSwwIDAsLTEwIHogbSAwLC0xMCAwLC0xMCA1LDAgMCwxMCB6IG0gLTQ1LDEwIDAsMTUgMTAsMCAwLC0xNSB6IG0gMCwtMTAgMCwtMTUgMTAsMCAwLDE1IHpcIn0saVtcIlNULklDLkhJSkFDS0lORyAoQk9BVClcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP0c6IUMmJkcsZDpcIm0gMTA1LDgwIDAsMjAgMjAsMCB6IG0gLTUsMjUgMCwtMjUgbSAtMzAsMjUgMTAsMTUgNDAsMCAxMCwtMTUgelwifSxpW1wiU1QuSUMuR1JBWSBMSVNUIExPQ0FUSU9OXCJdPWEoXCJHUkFZXCIpLGlbXCJTVC5JQy5JRURcIl09YShcIklFRFwiKSxpW1wiU1QuSUMuSU5ESVZJRFVBTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDgsOTAgYyAwLDEwIC0xNSwxMCAtMTUsMCAwLC0xMCAxNSwtMTAgMTUsMCB6IG0gLTgsNy4zIDAsMjUgbSAtMTAsLTIwIDIwLDBcIixmaWxsOiExfSxpW1wiU1QuSUMuSU5URVJOQUwgU0VDVVJJVFkgRk9SQ0VcIl09YShcIklTRlwiKSxpW1wiU1QuSUMuS0lMTElORyBWSUNUSU1cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEwOCw5MCBjIDAsMTAgLTE1LDEwIC0xNSwwIDAsLTEwIDE1LC0xMCAxNSwwIHogbSAtOCw3LjMgMCwyNSBtIC0xMCwtMjAgMjAsMFwiLGZpbGw6ITF9LHtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01MCw2NSAxNTAsMTM1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMjUsNTAgMTc1LDE1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk00NSw0NSAxNTUsMTU1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTU3LDcwIDE0MywxMzBcIn19W1RdXSxpW1wiU1QuSUMuS0lMTElORyBWSUNUSU1TXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMzMsOTAgYyAwLDEwIC0xNSwxMCAtMTUsMCAwLC0xMCAxNSwtMTAgMTUsMCB6IG0gLTgsNy4zIDAsMjUgbSAtMTAsLTIwIDIwLDAgbSAtNTIsLTEyLjMgYyAwLDEwIC0xNSwxMCAtMTUsMCAwLC0xMCAxNSwtMTAgMTUsMCB6IG0gLTgsNy4zIDAsMjUgbSAtMTAsLTIwIDIwLDAgbSAyMywtNy4zIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwXCIsZmlsbDohMX0se1Vua25vd246e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTUwLDY1IDE1MCwxMzVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0yNSw1MCAxNzUsMTUwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTQ1LDQ1IDE1NSwxNTVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTcsNzAgMTQzLDEzMFwifX1bVF1dLGlbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2NSw5NSA3MCwwIG0gMCwxMCBjIDAsNS41IC00LjUsMTAgLTEwLDEwIC01LjUsMCAtMTAsLTQuNSAtMTAsLTEwIDAsLTUuNSA0LjUsLTEwIDEwLC0xMCA1LjUsMCAxMCw0LjUgMTAsMTAgeiBtIC01MCwwIGMgMCw1LjUgLTQuNSwxMCAtMTAsMTAgLTUuNSwwIC0xMCwtNC41IC0xMCwtMTAgMCwtNS41IDQuNSwtMTAgMTAsLTEwIDUuNSwwIDEwLDQuNSAxMCwxMCB6XCIsZmlsbDohMX0saVtcIlNULklDLk1BU1MgR1JBVkUgTE9DQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzcuNSw5MCAxMCwwIG0gLTUsLTUgMCwxNSBtIDcuNSwtMjAgMCwzMCAtMTUsMCAwLC0zMCB6IG0gMjIuNSwxMCAxMCwwIG0gLTUsLTUgMCwxNSBtIC03LjUsLTIwIDAsMzAgMTUsMCAwLC0zMCB6IG0gLTE1LDIwIDEwLDAgbSAtNSwtNSAwLDIwIG0gLTcuNSwtMjUgMTUsMCAwLDMwIC0xNSwwIHpcIixmaWxsOiExfSxpW1wiU1QuSUMuTUlORSBMQVlJTkdcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDg1IDgwLDAgMCwzMCAtODAsMCB6XCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTM1LDEwMCBjIDAsNS41IC00LjUsMTAgLTEwLDEwIC01LjUsMCAtMTAsLTQuNSAtMTAsLTEwIDAsLTUuNSA0LjUsLTEwIDEwLC0xMCA1LjUsMCAxMCw0LjUgMTAsMTAgeiBtIC0yNSwwIGMgMCw1LjUgLTQuNSwxMCAtMTAsMTAgLTUuNSwwIC0xMCwtNC41IC0xMCwtMTAgMCwtNS41IDQuNSwtMTAgMTAsLTEwIDUuNSwwIDEwLDQuNSAxMCwxMCB6IG0gLTI1LDAgYyAwLDUuNSAtNC41LDEwIC0xMCwxMCAtNS41LDAgLTEwLC00LjUgLTEwLC0xMCAwLC01LjUgNC41LC0xMCAxMCwtMTAgNS41LDAgMTAsNC41IDEwLDEwIHpcIixzdHJva2U6ITF9XSxpW1wiU1QuSUMuUEFUUk9MTElOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMzEsOTcgMCwtMTQgNSwwIGMgNCwwIDQsNyAwLDcgbCAtNSwwIG0gLTcxLDE1IDE1LDEwIE0gNjAsMTA1IDc1LDk1IG0gLTE1LDEwIDQwLDAgLTE1LC0xNSA0MCwwXCIsZmlsbDohMX0saVtcIlNULklDLlBPSVNPTklOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSw5NSBjIDAsLTIwIDMwLC0yMCAzMCwwIDAsMjAgLTMwLDIwIC0zMCwwIHogbSAtMTUsMTAgNjAsMTUgbSAtNjAsMCA2MCwtMTVcIixmaWxsOiExfSxpW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLHN0cm9rZTpvLGQ6XCJtIDExMCw5NSAxMCwwIG0gLTEwLDEwIDEwLDAgbSAtMTAsMTAgMTAsMCBtIC0xMCwtMzAgMTAsMCBtIC0xMCwtNSAtMTAsMTAgLTMwLDAgMCwyMCAzMCwwIDEwLDEwIHpcIn0saVtcIlNULklDLlJBRElPIEFORCBURUxFVklTSU9OIFBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXT1baVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXSx7VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTAsNjUgMTAwLDExMCAxMDAsOTAgMTUwLDEzNVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTI1LDUwIDEwMCwxMTAgMTAwLDkwIDE3NSwxNTBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNDUsNDUgMTAwLDExMCAxMDAsOTAgMTU1LDE1NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01Nyw3MCAxMDAsMTEwIDEwMCw5MCAxNDMsMTMwXCJ9fVtUXV0saVtcIlNULklDLlJJT1RcIl09YShcIlJJT1RcIiksaVtcIlNULklDLlNBRkUgSE9VU0VcIl09YShcIlNBRkVcIiksaVtcIlNULklDLlNFQVJDSElOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxNDAsMTA1IGMgLTEwLDAgLTUsMCAtMTAsMCAtMTUsMCAtNSwtMTUgLTIwLC0xNSAtMTUsMCAtNSwyMCAtMjAsMjAgLTE1LDAgLTUsLTIwIC0yMCwtMjAgLTEwLDAgLTEwLDEwIC0xMCwxMCBtIDcwLDAgMTAsNSAtMTAsNVwiLGZpbGw6ITF9LGlbXCJTVC5JQy5TUFlcIl09YShcIlNQWVwiKSxpW1wiU1QuSUMuU05JUElOR1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsODUgNSwtNSA1LDUgbSAtNSwtNSAwLDQwXCIsZmlsbDohMX0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzUsZm9udHNpemU6MjUsdGV4dDpcIlNcIn1dLGlbXCJTVC5JQy5WQU5EQUxJU00vTE9PVC9SQU5TQUNLL1BMVU5ERVIvU0FDS1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTUsMTAwIGMgMCwtNSA1LC0xMCAxMCwtMTAgTSA4NSwxMDAgQyA4NSw5NSA4MCw5MCA3NSw5MCBtIDUsMjUgYyAtMC41LC0yOS41IDQwLC0zMCA0MCwwIHpcIixmaWxsOiExfSxpW1wiU1QuSUMuV0hJVEUgTElTVCBMT0NBVElPTlwiXT1hKFwiV0hUXCIpLGlbXCJTVC5JQy5ST0JCRVJZXCJdPWEoXCJST0JcIiksaVtcIlNULklDLlRIRUZUXCJdPWEoXCJUSEZcIiksaVtcIlNULklDLkJVUkdMQVJZXCJdPWEoXCJCVVJcIiksaVtcIlNULklDLlNNVUdHTElOR1wiXT1hKFwiU01HTFwiKSxpW1wiU1QuSUMuU0FCT1RBR0VcIl09YShcIlNBQlwiKSxpW1wiU1QuSUMuSUxMRUdBTCBEUlVHIE9QRVJBVElPTlwiXT1hKFwiRFJVR1wiKSxpW1wiU1QuSUMuU1BZXCJdPWEoXCJTUFlcIiksaVtcIlNULklDLldBUlJBTlQgU0VSVkVEXCJdPWEoXCJXTlRcIiksaVtcIlNULklDLlBPTExJTkcgUExBQ0UvRUxFQ1RJT05cIl09YShcIlZPVEVcIiksaVtcIlNULklDLk5BVFVSQUwgRVZFTlRcIl09YShcIk5BVFwiKSxpW1wiU1QuSUMuR0VPTE9HSUNcIl09YShcIkdFT0xcIiksaVtcIlNULklDLkhZRFJPLU1FVEVPUk9MT0dJQ0FMXCJdPWEoXCJIWURSXCIpLGlbXCJTVC5JQy5JTkZFU1RBVElPTlwiXT1hKFwiSU5GU1wiKSxpW1wiU1QuSUMuR1JFTkFERVwiXT1hKFwiR1wiKSxpW1wiU1QuSUMuSU5DRU5ESUFSWVwiXT1hKFwiSVwiKSxpW1wiU1QuSUMuTUlORVwiXT1hKFwiTVwiKSxpW1wiU1QuSUMuSE9VU0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsZDpcIm0gNzAsMTAwIDYwLDAgbSAtMzAsLTIwIC0zMCwyMCAwLDM1IDYwLDAgMCwtMzUgLTMwLC0yMCB6XCJ9LGlbXCJTVC5JQy5ST0NLIFRIUk9XSU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDYwIDI1LDI1IE0gNzAsNjUgOTUsOTAgTSA2MCw4MCA4MCwxMDAgbSA0NSwtNSA1LDE1IC01LDE1IC0yMCwxMCAtMjAsLTUgLTUsLTIwIDUsLTUgMTAsMCA1LC0xMCAxMCwtNSAxNSw1IHpcIn0saVtcIlNULk0xLkFDQ0lERU5UXCJdPWwoXCJBQ0NcIiksaVtcIlNULk0xLkFTU0FTU0lOQVRJT05cIl09bChcIkFTXCIpLGlbXCJTVC5NMS5DSVZJTElBTlwiXT1sKFwiQ0lWXCIpLGlbXCJTVC5NMS5DT0VSQ0VEL0lNUFJFU1NFRFwiXT1sKFwiQ1wiKSxpW1wiU1QuTTEuQ09NQkFUXCJdPWwoXCJDQlRcIiksaVtcIlNULk0xLkRFQUQgQk9EWVwiXT1sKFwiREJcIiksaVtcIlNULk0xLkRJU1BMQUNFRCBQRVJTT05TLCBSRUZVR0VFUywgQU5EIEVWQUNVRUVTXCJdPWwoXCJEUFJFXCIpLGlbXCJTVC5NMS5EUlVHXCJdPWwoXCJEUlVHXCIpLGlbXCJTVC5NMS5FVklDVElPTlwiXT1sKFwiRVZcIiksaVtcIlNULk0xLkVYRUNVVElPTiAoV1JPTkdGVUwgS0lMTElORylcIl09bChcIkVYXCIpLGlbXCJTVC5NMS5FWEZJTFRSQVRJT05cIl09bChcIkVYRkxcIiksaVtcIlNULk0xLkZPUkVJR04gRklHSFRFUlNcIl09bChcIkZGXCIpLGlbXCJTVC5NMS5HQU5HXCJdPWwoXCJHQU5HXCIpLGlbXCJTVC5NMS5HT1ZFUk5NRU5UIE9SR0FOSVpBVElPTlwiXT1sKFwiR09cIiksaVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXT1sKFwiSFwiKSxpW1wiU1QuTTEuSE9VU0UtVE8tSE9VU0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsZDpcIm0gMTEwLDY1IC0yMCwwIDAsMTUgMjAsMCB6IG0gLTEwLC0xMCAtMTAsMTAgMjAsMCB6XCJ9LGlbXCJTVC5NMS5JRURcIl09bChcIklFRFwiKSxpW1wiU1QuTTEuSU5DSURFTlRcIl09bChcIklOQ1wiKSxpW1wiU1QuTTEuSU5GSUxUUkFUSU9OXCJdPWwoXCJJTkZMXCIpLGlbXCJTVC5NMS5LSUROQVBQSU5HXCJdPWwoXCJLXCIpLGlbXCJTVC5NMS5MQUJSQVRPUllcIl09bChcIkxBQlwiKSxpW1wiU1QuTTEuTEVBREVSXCJdPWwoXCJMRFJcIiksaVtcIlNULk0xLkxPT1RcIl09bChcIkxPT1RcIiksaVtcIlNULk0xLk1FRVRJTkdcIl09bChcIk1UR1wiKSxpW1wiU1QuTTEuTVVSREVSXCJdPWwoXCJNVVwiKSxpW1wiU1QuTTEuTk9OR09WRVJOTUVOVEFMIE9SR0FOSVpBVElPTiAoTkdPKVwiXT1sKFwiTkdPXCIpLGlbXCJTVC5NMS5PVEhFUlwiXT1sKFwiT1RIXCIpLGlbXCJTVC5NMS5QSVJBQ1lcIl09bChcIlBJXCIpLGlbXCJTVC5NMS5QUkVNQVRVUkVcIl09bChcIlBcIiksaVtcIlNULk0xLlJBSURcIl09bChcIlJBSURcIiksaVtcIlNULk0xLlJBUEVcIl09bChcIlJBXCIpLGlbXCJTVC5NMS5SRUxJR0lPVVNcIl09bChcIlJFTFwiKSxpW1wiU1QuTTEuU1BFQUtFUlwiXT1sKFwiU1BLXCIpLGlbXCJTVC5NMS5UQVJHRVRFRFwiXT1sKFwiVEdUXCIpLGlbXCJTVC5NMS5URVJST1JJU1RcIl09bChcIlRFUlwiKSxpW1wiU1QuTTEuVFJBRkZJQ0tJTkdcIl09bChcIlRGS1wiKSxpW1wiU1QuTTEuV0lMTElORyBSRUNSVUlUXCJdPWwoXCJXUlwiKSxpW1wiU1QuTTEuV1JJVFRFTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl09aVtcIlNULk0xLldJTExJTkdcIl09bChcIldcIiksaVtcIlNULk0xLkZBTFNFXCJdPWwoXCJGQUxcIiksaVtcIlNULk0xLkZJTkRcIl09bChcIkZORFwiKSxpW1wiU1QuTTEuRk9VTkQgQU5EIENMRUFSRURcIl09bChcIkNMUlwiKSxpW1wiU1QuTTEuSE9BWCAoREVDT1kpXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDkwLDc1IDgwLDY3LjUgOTAsNjAgOTAsNzUgWiBtIDE1LDAgLTEwLC03LjUgMTAsLTcuNSAwLDE1IHogbSAxNSwwIC0xMCwtNy41IDEwLC03LjUgMCwxNSB6XCJ9LGlbXCJTVC5NMS5BVFRFTVBURURcIl09bChcIkFUVFwiKSxpW1wiU1QuTTEuQUNDSURFTlRcIl09bChcIkFDQ1wiKSxpW1wiU1QuTTEuSU5DSURFTlRcIl09bChcIklOQ1wiKSxpW1wiU1QuTTEuVEhFRlRcIl09bChcIlRIRlwiKSxpW1wiU1QuTTEuUElSQVRFXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo2MCxyOjcsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4Mi41LDc1IDM1LC0xNSBtIDAsMTUgLTM1LC0xNSBtIDMsNyA1LDEwIG0gMjcsLTEwIC0xMCwxMFwifV0saVtcIlNULk0yLkxFQURFUiBPUiBMRUFERVJTSElQXCJdPXIoXCJMRFJcIiksaVtcIlNULk0yLlJFTElHSU9VU1wiXT1yKFwiUkVMXCIpLGlbXCJBQy5JQy5DUklNSU5BTC5BQ1RJVklUWS5JTkNJREVOVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk4LjcsNjYuNyBjIC0zLjIsMC43IC02LjMsMy43IC02LjQsNyAwLjMsMy42IDUuMywyLjggNywwLjYgMiwtMS4yIDEuNywtNC41IDQuNSwtMy43IDIuNiwtMC42IDMuMiwzLjIgNS45LDMuMiAxLjYsMS41IDQuNCwtMC42IDUuNCwxLjIgMC43LDEuMSAxLjUsMi4yIDIuMiwzLjMgLTIsMy4xIC0xLjMsNy45IDEuOSwxMCAzLjUsMS4xIDQuOCwtMy41IDQuMSwtNi4yIC0wLjIsLTMgLTIuNSwtNSAtNS4xLC01LjQgLTEuNSwtMS45IC0yLjcsLTMuNCAtMS42LC01LjYgLTEsLTMuMyAtNS4xLC00LjUgLTguMiwtNC4zIC0yLjIsMC4zIC0yLjksMi42IC01LjMsMS45IC0xLjksMC40IC0xLjksLTIuOCAtNC4zLC0yIHogbSAwLjIsMS4zIGMgMi43LDAuNSAwLjksMC42IC0wLjYsMS4zIC0wLjUsMi4yIDMuOCwwLjQgMS40LDIuOSAtMC45LDEuOSAtNS44LDQuNyAtNS45LDEuMSAwLjEsLTIuNSAyLjcsLTQuOCA1LjEsLTUuMiB6IG0gMTAuMywwLjEgYyAyLjQsLTAuNSA3LjEsMi4zIDUuNiwzLjcgLTAuOCwtMi4xIC0zLDAgLTEuMiwxLjIgLTEuNywwLjkgLTcuNCwtMS42IC01LjcsLTIuNCAyLjUsMC44IDIuOCwtMi43IC0wLC0xLjkgLTEuNCwwLjIgMS4xLC0wLjggMS4zLC0wLjYgeiBNIDgxLjksNzEuNiBjIC0xLjgsMS45IC0zLjYsMy45IC01LjUsNS44IC03LjUsLTAuMSAtMTQsNi4yIC0xNS43LDEzLjIgLTAuNiw0LjIgMC41LDguNSAyLjgsMTIgMC43LDMuOSAtMy4yLDYuNyAtMywxMC43IC0wLjgsNy40IDQuOCwxNC41IDExLjcsMTYuOCAyLjMsLTAuNCAxLjMsMS4zIDEuNCwyIDEuNSwtMC40IDMsLTAuOCA0LjYsLTEuMiAtMC4yLDEuNSAtMC4xLDIuNyAxLjQsMS4yIDAuOSwtMC4zIDIuMywtMi4yIDIuOSwtMS41IDAuMiwyLjIgMS4yLDAuMSAyLC0wLjcgMC44LC0xLjIgMS42LC0yLjMgMi40LC0wLjUgMS4yLC0yLjQgNC4xLC03LjIgLTAuOCwtNy4zIC0zLjQsMi4zIC03LjUsNC42IC0xMS44LDMuNSAtNi4zLC0xLjUgLTEwLjksLTguOCAtOC4yLC0xNC45IDAuNCwtMy45IDYuOCwtMy40IDUsLTguMiAtMS44LC0yLjYgLTUuNywtMi45IC01LjcsLTcgLTEuNSwtNy4zIDUuNiwtMTQuNyAxMywtMTMuNyA0LjcsMC41IDcuNCw0LjkgMTAuOCw3LjYgMS45LDEuOSA0LjEsNS4xIDUuOSwxLjQgMi44LC0yIDQuMywtNC43IDEuOCwtNy42IEMgOTQuOCw3OS43IDkwLjksNzcuMyA4OCw3NC40IDg2LjMsNzIuOSA4My45LDcyLjYgODEuOSw3MS42IHogbSAzLjMsMy44IGMgMS42LDEuMSAyLjksMi4xIDAuMywzLjMgLTAuOSwzLjcgLTUuMSwtMC41IC0xLjUsLTEuNSAwLjQsLTAuNiAwLjksLTEuMSAxLjIsLTEuOCB6IG0gMzQuMiwzLjEgYyAzLDEuNCAzLjksNi40IDEuNCw4LjggLTIuOSwwLjEgLTMuNiwtNC4zIC0zLjEsLTYuNiAwLjEsLTIuOSAyLjUsMi43IDIuNSwtMC43IC0wLjIsLTAuNSAtMC41LC0xIC0wLjgsLTEuNCB6IE0gMTI3LjMsOTAuMiBjIC00LjMsMC40IC04LjgsLTAgLTEzLjEsMSAtMi4xLDEuMSAtNS43LDEuNSAtNC42LDQuNSAwLjEsMS44IDAuMiwzLjYgMC40LDUuNCAtNC45LDQuOSAtNS41LDEzLjMgLTIuMiwxOS4yIDIuNCw0LjMgNyw3IDExLjgsNy44IDMuMyw0LjkgNy4zLC0xLjMgMTEuMiwtMS43IDUuNSwtMi41IDguOSwtOC41IDguNSwtMTQuNSAwLjIsLTUgLTIuNCwtMTAuMSAtNi43LC0xMi44IC0wLjEsLTIuMyAtMC4yLC00LjYgLTAuMywtNi45IC0xLjYsLTAuOCAtMy40LC0xLjQgLTUuMSwtMi4xIHogTSAxMjcuOCw5Mi41IGMgLTAuOSwxLjcgMC42LDMuOCAtMC45LDQuOSAtMi4zLDAuNyAtMS43LC0yLjQgLTEuOSwtMy44IC0wLjYsLTEuNyAxLjksLTAuNyAyLjgsLTEgeiBtIC0yLjksOC4zIGMgNC4xLDAuOSA4LDMuNyA5LjMsNy45IDAuOSwzLjcgMC41LDggLTIuMywxMC45IC0xLjcsMiAtNS4zLDQuMyAtNy43LDMuMSAtMy4xLC0wLjggLTUuOCwyLjEgLTguNiwtMC41IC02LjksLTQuMiAtNy4yLC0xNiAwLjIsLTE5LjggMi43LC0xLjYgNiwtMS42IDkuMSwtMS42IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDg1LjEgNzUuMyBDIDg1IDc1LjggODQuMiA3Ni43IDgzLjkgNzcuMSBDIDgzLjYgNzcuNiA4Mi40IDc3LjkgODIuNCA3OC42IEwgODIuNCA3OSBDIDgyLjQgNzkuNCA4My4zIDgwLjEgODMuNiA4MC4xIEwgODMuOCA4MC4xIEMgODQuOCA4MC4xIDg1IDc5LjEgODUuNCA3OC42IEMgODUuNyA3OC4yIDg2LjcgNzcuNCA4Ny4yIDc3IEwgODUuMSA3NS4zIHogTSAxMjcuOCA5Mi41IEwgMTI1IDkyLjcgTCAxMjUuMiA5Ni41IEMgMTI1LjMgOTcuNSAxMjUuOSA5Ny4zIDEyNi41IDk3LjYgQyAxMjcuMSA5Ny4zIDEyNy44IDk3LjEgMTI3LjggOTYuMyBDIDEyNy44IDk1LjggMTI3LjcgOTUuNiAxMjcuNSA5NS4zIEwgMTI3LjggOTIuNSB6XCJ9XSxpW1wiQUMuSUMuQ1JJTUlOQUwuQ0lWSUwgRElTVFVSQkFOQ0VcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExMC42LDE0Mi40IDAsLTI4LjYgLTcuMSwwIDAsMjguNiB6IG0gLTIxLjIsMCA3LjEsMCAwLC0yOC42IC03LjEsMCB6IG0gNy4xLC0yOC42IGggNy4xIHYgLTExLjggaCAyNC40IFYgNzcuMiBoIC02LjMgdiAxOC42IGggLTE4IHYgLTEwLjcgYyAwLC0wLjkgMi4xLC0xLjIgMywtMS43IDAuOCwtMC40IDIuMSwtMS40IDIuNywtMiAxLjUsLTEuNCAzLjIsLTMuNiAzLjgsLTUuOSAxLjYsLTYuMyAtMC4yLC0xMC42IC0zLjgsLTE0LjEgLTMsLTMuMSAtOS4yLC00LjkgLTE0LjMsLTIuNyAtMy42LDEuNiAtOC40LDYuMiAtOC40LDExIHYgMy4yIGMgMCwyLjggMS45LDYuMiAzLjMsNy43IDEsMSAxLjgsMS43IDMsMi41IDEsMC42IDMuNiwxLjMgMy42LDIuMiB2IDEwLjcgSCA3OC40IHYgLTE4LjYgaCAtNi4zIHYgMjQuOSBoIDI0LjQgdiAxMS44IGggLTAgelwifSxpW1wiQUMuSUMuU0hPT1RJTkdcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDkzLjIsODkuNyBoIDE2LjggdiA5LjMgYyAtMi42LDAgLTcuMywxLjYgLTksMSAtMi4zLC0wLjggLTUuNCwtMiAtNy44LC0yLjYgdiAtNy44IGwgMCwwIHogbSAtMzAsMCBoIDI2LjEgdiA5LjYgYyAwLDAuOSA0LjEsMiA1LDIuMyAxLjksMC42IDMuNiwxLjQgNS41LDIgMiwwLjcgMy40LDAuNCA2LC0wLjEgMS42LC0wLjMgNS43LC0wLjQgNi42LC0wLjkgMC42LDIuNyA0LjYsMTQgNC42LDE1LjIgMCwxLjYgLTEuMiw0IC0xLjMsNS43IGwgMjEuNSwwIC04LjIsLTI1LjkgNy44LC03LjcgYyAtMC44LC0xLjYgLTQuMSwtMTMuNCAtNS4yLC0xMy40IGggLTY4LjQgdiAxMy4yIGwgMCwwIHpcIn0saVtcIkFDLklDLkZJUkUgRVZFTlRcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk2LjUsNzguNSBjIDAsLTUuMSA0LjEsLTkuNyA0LjEsLTEzIHYgLTAuNCBjIDAsLTEuMyAtMCwtMy44IC0xLjEsLTQuMSAtMSw0LjUgLTMuNSw4IC01LjksMTEuMiAtMS4yLDEuNiAtMi40LDMuMyAtMy42LDUgLTEsMS40IC0zLjEsMy41IC0zLjEsNS41IDAsMS40IDYuMSwxNy43IDMsMTcuNyAtMC4xLDAgLTMuOCwtMi41IC00LjIsLTIuOSAtMS40LC0xIC0yLjQsLTIuMyAtMy4zLC0zLjcgLTMuMSwtNC42IC0yLjQsLTQuNCAtMy44LC0xMC4zIC0xLjUsMC40IC0yLjYsNSAtMi45LDYuOSAtMC40LDIuNCAtMC4zLDYuNiAwLjIsOSAwLjYsMi44IDEuNCw1IDIuNSw3LjMgMC42LDEuMiAzLDUuNSAzLjEsNi41IC0yLjIsLTAuNSAtNywtNC42IC04LjYsLTYuMiAtMS41LC0xLjUgLTUuNSwtOC4zIC01LjksLTguNiAwLDkuOSA1LDIyLjggOS44LDI3LjYgMy4xLDMuMSA2LjMsNi40IDEwLjIsOC42IDIuNCwxLjUgMTAuNSw0LjMgMTQuMyw0LjMgaCAyLjQgYyAyLjgsMCAxMC44LC0zIDEyLjksLTQuMiAzLjQsLTEuOSA2LjksLTQuNyA5LC03LjkgNC40LC02LjUgOCwtMTUgOCwtMjUuOCB2IC0xLjMgbCAtMC40LC01LjggYyAtMC43LDAuNCAtMi4yLDQuNCAtMi41LDUuMiAtMC41LDEuMyAtMiwzLjQgLTIuOSw0LjYgLTEuNCwyLjEgLTUuMiw2LjMgLTcuOCw2LjkgdiAtMS4xIGMgMCwtNC40IDIuOCwtOC44IDIuOCwtMTIuNCB2IC0xLjkgbCAtMS4zLC0xMi4yIGggLTAuNiBjIC0wLjMsMy45IC0xLjYsNy45IC0zLjQsMTAuNSAtMS4zLDIgLTUuMyw1LjYgLTcuNyw2LjIgLTAuMiwtMC40IC0wLjQsLTAuNiAtMC40LC0xLjMgdiAtMi4zIGMgMCwtNS4xIDMsLTguOSAzLC0xMi44IHYgLTAuOCBjIDAsLTEuNSAtMi4xLC0zLjkgLTIuOSwtNS4yIC0wLjcsLTEuMSAtMi40LC00LjMgLTMuNSwtNC42IHYgMS4zIGMgMCw2LjIgLTEuNCwxMC42IC01LjYsMTIuNiAtMS4xLC0xLjcgLTMuNiwtMy4yIC0zLjYsLTYuMiB2IC0xLjkgbCAwLDAgelwifSxpW1wiQUMuSUMuTk9OLVJFc0lkRU5USUFMIEZJUkVcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyMS4yLDEyMi4zIC02LjIsMCAwLDUuOSA2LjIsMCB6IG0gLTEyLjEsMCAtNi4xLDAgMCw1LjkgNi4xLDAgeiBtIC0xMi4yLDAgLTUuOSwwIDAsNS45IDUuOSwwIHogbSAtMTIuMywwIC01LjcsMCAwLDUuOSA1LjcsMCB6IG0gMzAuNCwtNC44IGggNi4xIHYgLTYuMiBoIC0yLjUgYyAtMS4yLDAgLTIuNSwxLjUgLTMuNiwxLjggdiA0LjQgeiBtIC01LjksLTYuMiAtNi4xLDAgMCw2LjIgNi4xLDAgeiBtIC0xMi4yLDAgLTUuOSwwIDAsNi4yIDUuOSwwIHogbSAtMTIuMywwIC01LjcsMCAwLDYuMiA1LjcsMCB6IG0gMjUsLTMzLjQgYyAwLC0zLjQgMy40LC03LjQgMy40LC05LjEgMCwtMS40IC0wLjgsLTQuMiAtMS44LC00LjYgMCw3LjEgLTguNiwxMi44IC04LjYsMTUuNyB2IDAuNCBjIDAsMC43IDEuOSw1LjIgMi4zLDYuNiAwLjQsMS43IDEuNCw1LjYgMS42LDcuMyAtNi4yLC0wLjEgLTcuMywtOS44IC0xMC4zLC0xMS44IGwgLTAuMywzIDAsNC42IGMgMCw0LjcgMy40LDExLjQgNS42LDEzLjkgMSwxLjEgNC4yLDMuNyA1LjUsNC4zIDAuOCwwLjQgNi4zLDMgNi42LDMgMS40LDAgOS4yLC03LjIgMTAuNSwtOC42IDIuNSwtMi41IDQsLTkuNiA0LC0xNC44IHYgLTAuNyBsIC0wLjcsLTUuNyBjIC0xLDAuNiAtMi4xLDUuNiAtMi44LDcgLTEuNSwzLjIgLTEuOCwzLjEgLTUuNCw0IC0wLjMsLTEyLjIgNi43LC04LjMgLTIuNywtMTkuMSAwLDQuOSAtMC45LDcuOSAtNC4xLDkuNiAtMS40LC0wLjcgLTMsLTIuNyAtMywtNC44IHogbSAtMTQuOCwyNi40IGggMy42IGMgLTAuMSwtMC42IC0wLjMsLTEuNCAtMS4xLC0xLjQgaCAtMS4yIHYgLTIuNyBjIDAsLTAuOSAtMC45LC0yLjQgLTEuNCwtMyB2IDcgeiBtIC0xNi40LC0yOC42IGggMy45IHYgMjguNiBoIDguOSB2IC0yOC42IGggMy42IHYgNS40IGMgMC4zLC0wLjIgMS40LC0xLjQgMS40LC0xLjggdiAtNSBoIC02LjQgdiAyOC42IGggLTYuNCB2IC0yOC42IGggLTYuMSB2IDI4LjYgaCAtNS4yIHYgMzIuNyBoIDU0LjggdiAtMzAuNyBjIC0wLjQsMC4yIC0xLjEsMSAtMS4xLDEuNiB2IDI3LjUgaCAtNTIuNSB2IC0yOS44IGggNS4yIHYgLTI4LjYgaCAtMCB6XCJ9LGlbXCJBQy5JQy5SRXNJZEVOVElBTCBGSVJFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5MS41LDg4LjMgLTAuNywtMyAtMzAuMSwyNS4yIDE1LjYsMC4xIHYgMjUuNiBoIDUwLjUgdiAtMjUuNiBoIDEyLjQgYyAtMC40LC0wLjUgLTcuNiwtNS45IC04LC01LjkgLTAuMywwIC0xLjIsMS42IC0xLjQsMS45IGwgMS40LDEuNCBoIC0yLjQgYyAtMC43LDAuNSAtNC45LDMuMSAtNC45LDMuOCB2IDIyLjMgaCAtMTguMyB2IC0xMi45IGggLTguNyB2IDEyLjkgaCAtMTguMSB2IC0yMy41IGggMjIuNiBsIC0yLjIsLTIuNyAtMzAuNywtMC4xIEwgOTEuNSw4OC4zIHogbSAyNy42LDI4IC04LjIsMCAwLDguNSA4LjIsMCB6IG0gLTI3LDAuMiAtOC43LDAgMCw4LjIgOC43LDAgeiBtIDExLC0zNi40IGMgMCwwLjkgMi4xLDUuMyAyLjUsNi45IDAuNCwxLjggMS41LDYuMSAxLjUsNy44IC03LjEsLTEuNiAtNi45LC05LjkgLTEwLjMsLTEyLjIgLTEuNyw3LjUgMC44LDE1LjEgMy43LDE5LjUgMi40LDMuNiAyLjYsMy40IDYsNiAwLjQsMC40IDcuOSw0LjMgNy45LDQuMyAyLDAgOS42LC03LjEgMTEuMSwtOC42IDEuOCwtMS44IDUuNiwtMTAuOCA1LjYsLTE0LjQgViA4My41IGMgMCwtMS45IC0wLjMsLTMuMiAtMS40LC00IDAsMiAtMS44LDcgLTIuNiw4LjQgLTAuOCwxLjggLTQuMyw0LjIgLTYuMyw0LjcgdiAtMS43IGMgMCwtNC40IDIuNCwtNi44IDIuNCwtMTAuMSAwLC0yIC00LC03LjIgLTUuMiwtOCAwLDUuNCAtMC43LDggLTQuMiw5LjggLTEuMiwtMC43IC0zLjEsLTIuNiAtMy4xLC00LjQgdiAtMSBjIDAsLTEuNSAxLjgsLTUuNCAyLjUsLTYuNiAyLC0zLjkgMC41LC0zLjggLTAuNCwtNyBoIC0wLjQgYyAtMS4zLDUuNSAtMC44LDQuOCAtMy44LDguOSAtMSwxLjQgLTUuNCw1LjkgLTUuNCw3LjUgelwifSxpW1wiQUMuSUMuU0NIT09MIEZJUkVcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEzMS4zLDczIGMgLTQsLTEgLTE3LC03LjIgLTE5LjgsLTcuMiBoIC0yLjQgViA5NiBoIC0wLjcgYyAwLDUuNiAtMy44LDE1LjMgLTYuMiwxOC42IC0yLDIuNyAtMy43LDQuMSAtNi4yLDYuMiAtMC44LDAuNiAtNyw0LjkgLTcsNS40IHYgOCBoIDQ0LjEgViA5NiBoIC0yMC40IGwgMCwtMTQuOCAxOC44LC04LjIgeiBtIC00OS4yLDExLjggYyAwLC0zIDMuNiwtOCAzLjYsLTEwIDAsLTEuOCAtMC44LC0zLjkgLTIsLTQuNiAtMC40LDAuOCAtMC40LDMuNiAtMC45LDUgLTAuMywwLjcgLTEuOCwyLjcgLTIuMywzLjUgLTEuNiwyLjMgLTMuNCw0LjIgLTUuMSw2LjQgLTIuMiwyLjggMCw1IDEuMSw4LjIgMC44LDIuMiAxLjQsNy45IDIuMSw5LjQgQyA3MS45LDEwMi40IDcwLjYsOTEuOCA2Ny42LDg5LjkgbCAtMC42LDcuNiAwLjEsMC4yIGMgMCw1IDMuNiwxMi4zIDUuOSwxNSAxLjEsMS4zIDQuMywzLjYgNS45LDQuNiAxLjEsMC43IDIuNSwxIDMuNywxLjYgMC40LDAuMiAzLjIsMS45IDMuMiwxLjkgMi4xLDAgOS45LC03LjQgMTEuNSwtOSAxLjgsLTEuOCA1LjgsLTExIDUuOCwtMTQuNCB2IC02LjMgYyAwLC0yLjEgLTAuNCwtMi42IC0wLjcsLTQuMiBoIC0wLjggYyAtMC4yLDEuOSAtMi4yLDcuMSAtMyw4LjcgLTAuNywxLjMgLTYuMyw1LjcgLTYuMywzLjcgdiAtMS4yIGMgMCwtMy44IDIuNCwtNy4yIDIuNCwtMTAgdiAtMC44IGMgMCwtMS41IC00LjMsLTYuOCAtNS40LC03LjYgMCwyLjUgMC4xLDQuOCAtMC44LDYuNSAtMC41LDAuOSAtMi41LDMuNSAtMy42LDMuNSAtMS4xLDAgLTMuMiwtMy40IC0zLjIsLTUuMSB6XCJ9LGlbXCJBQy5JQy5IT1QgU1BPVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk2LjMsNzguNSBjIDAsLTUuMSA0LjEsLTkuNyA0LjEsLTEzIHYgLTAuNCBjIDAsLTEuMyAtMCwtMy44IC0xLjEsLTQuMSAtMSw0LjUgLTMuNSw4IC01LjksMTEuMiAtMS4zLDEuNiAtMi4zLDMuMyAtMy42LDQuOSAtMSwxLjMgLTMuMSwzLjQgLTMuMSw1LjUgMCwxLjQgNi4xLDE3LjcgMywxNy43IC0wLjEsMCAtMy43LC0yLjUgLTQuMiwtMi45IC0xLjQsLTEgLTIuNCwtMi4zIC0zLjMsLTMuNyAtMy4xLC00LjYgLTIuNCwtNC40IC0zLjgsLTEwLjMgLTEuNSwwLjQgLTIuNiw1IC0yLjksNi45IC0wLjQsMi40IC0wLjMsNi43IDAuMyw5IDAuNiwyLjggMS4zLDUgMi41LDcuMyAwLjYsMS4yIDMuMSw1LjUgMy4xLDYuNSAtMi4yLC0wLjUgLTcuMSwtNC42IC04LjYsLTYuMSAtMS41LC0xLjUgLTUuNSwtOC4zIC01LjksLTguNiAwLDkuOSA1LDIyLjggOS44LDI3LjYgMy4xLDMuMSA2LjMsNi40IDEwLjEsOC43IDIuNSwxLjUgMTAuNSw0LjMgMTQuMyw0LjMgaCAyLjQgYyAyLjksMCAxMC44LC0zIDEyLjksLTQuMiAzLjQsLTEuOSA2LjksLTQuNyA5LC03LjkgNC40LC02LjUgOCwtMTUgOCwtMjUuNyBWIDk5LjkgbCAtMC40LC01LjggYyAtMC43LDAuNCAtMi4yLDQuNCAtMi41LDUuMiAtMC41LDEuMyAtMiwzLjQgLTIuOCw0LjYgLTEuNCwyLjEgLTUuMiw2LjMgLTcuOSw2LjkgdiAtMS4xIGMgMCwtNC40IDIuOCwtOC44IDIuOCwtMTIuNCB2IC0xLjkgbCAtMS4zLC0xMi4yIC0wLjcsOGUtNCBjIC0wLjMsMy45IC0xLjcsNy45IC0zLjQsMTAuNSAtMS4zLDIgLTUuMyw1LjYgLTcuNyw2LjIgLTAuMiwtMC40IC0wLjQsLTAuNiAtMC40LC0xLjMgdiAtMi40IGMgMCwtNS4xIDMsLTguOSAzLC0xMi44IFYgODIuNiBjIDAsLTEuNSAtMi4xLC0zLjkgLTIuOSwtNS4yIC0wLjcsLTEuMSAtMi40LC00LjMgLTMuNSwtNC42IHYgMS4zIGMgMCw2LjIgLTEuNCwxMC42IC01LjYsMTIuNiAtMS4xLC0xLjcgLTMuNiwtMy4xIC0zLjYsLTYuMiB2IC0xLjkgbCAwLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTEzLDEyNi45IGMgMCw2LjMgLTUuMSwxMS40IC0xMS40LDExLjQgLTYuMywwIC0xMS40LC01LjEgLTExLjQsLTExLjQgMCwtNi4zIDUuMSwtMTEuNCAxMS40LC0xMS40IDYuMywwIDExLjQsNS4xIDExLjQsMTEuNCB6XCJ9XSxpW1wiQUMuSUMuRklSRSBPUklHSU5cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5Ni4zLDc4LjUgYyAwLC01LjEgNC4xLC05LjcgNC4xLC0xMyB2IC0wLjQgYyAwLC0xLjMgLTAsLTMuOCAtMS4xLC00LjEgLTEsNC41IC0zLjUsOCAtNS45LDExLjIgLTEuMywxLjYgLTIuMywzLjMgLTMuNiw0LjkgLTEsMS4zIC0zLjEsMy40IC0zLjEsNS41IDAsMS40IDYuMSwxNy43IDMsMTcuNyAtMC4xLDAgLTMuNywtMi41IC00LjIsLTIuOSAtMS40LC0xIC0yLjQsLTIuMyAtMy4zLC0zLjcgLTMuMSwtNC42IC0yLjQsLTQuNCAtMy44LC0xMC4zIC0xLjUsMC40IC0yLjYsNSAtMi45LDYuOSAtMC40LDIuNCAtMC4zLDYuNyAwLjMsOSAwLjYsMi44IDEuMyw1IDIuNSw3LjMgMC42LDEuMiAzLjEsNS41IDMuMSw2LjUgLTIuMiwtMC41IC03LjEsLTQuNiAtOC42LC02LjEgLTEuNSwtMS41IC01LjUsLTguMyAtNS45LC04LjYgMCw5LjkgNSwyMi44IDkuOCwyNy42IDMuMSwzLjEgNi4zLDYuNCAxMC4xLDguNyAyLjUsMS41IDEwLjUsNC4zIDE0LjMsNC4zIGggMi40IGMgMi45LDAgMTAuOCwtMyAxMi45LC00LjIgMy40LC0xLjkgNi45LC00LjcgOSwtNy45IDQuNCwtNi41IDgsLTE1IDgsLTI1LjcgViA5OS45IGwgLTAuNCwtNS44IGMgLTAuNywwLjQgLTIuMiw0LjQgLTIuNSw1LjIgLTAuNSwxLjMgLTIsMy40IC0yLjgsNC42IC0xLjQsMi4xIC01LjIsNi4zIC03LjksNi45IHYgLTEuMSBjIDAsLTQuNCAyLjgsLTguOCAyLjgsLTEyLjQgdiAtMS45IGwgLTEuMywtMTIuMiAtMC43LDhlLTQgYyAtMC4zLDMuOSAtMS43LDcuOSAtMy40LDEwLjUgLTEuMywyIC01LjMsNS42IC03LjcsNi4yIC0wLjIsLTAuNCAtMC40LC0wLjYgLTAuNCwtMS4zIHYgLTIuNCBjIDAsLTUuMSAzLC04LjkgMywtMTIuOCBWIDgyLjYgYyAwLC0xLjUgLTIuMSwtMy45IC0yLjksLTUuMiAtMC43LC0xLjEgLTIuNCwtNC4zIC0zLjUsLTQuNiB2IDEuMyBjIDAsNi4yIC0xLjQsMTAuNiAtNS42LDEyLjYgLTEuMSwtMS43IC0zLjYsLTMuMSAtMy42LC02LjIgdiAtMS45IGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDk5LjYgMTA1LjkgQyA5My4zIDEwNS45IDg4LjIgMTExIDg4LjIgMTE3LjMgQyA4OC4yIDEyMy42IDkzLjMgMTI4LjcgOTkuNiAxMjguNyBDIDEwNS45IDEyOC43IDExMSAxMjMuNiAxMTEgMTE3LjMgQyAxMTEgMTExIDEwNS45IDEwNS45IDk5LjYgMTA1LjkgeiBNIDEwNSAxMDkuNCBMIDEwNi44IDExMSBMIDEwMS4yIDExNy4xIEwgMTA3LjMgMTIzLjIgTCAxMDUuNiAxMjQuOSBMIDk5LjUgMTE4LjggTCA5My43IDEyNS4zIEwgOTEuOSAxMjMuNiBMIDk3LjggMTE3LjIgTCA5Mi4xIDExMS40IEwgOTMuOCAxMDkuOCBMIDk5LjUgMTE1LjQgTCAxMDUgMTA5LjQgelwifV0saVtcIkFDLklDLlNNT0tFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTkuMyw2OS4yIGMgMC4yLC0yLjYgNC40LC01LjUgNy4yLC02IDQuMiwtMC44IDYuOSwxLjIgOS4xLDMuMyAxLjEsMS4xIDEuOSwyLjcgMi40LDQuMyAwLjYsMi4yIDEuOSwxLjMgNCwyLjUgMi40LDEuNCA0LjksNC40IDUuNiw3LjQgNS4zLDAgMTAuMyw0LjggMTAuMyw5LjkgdiAxLjMgYyAwLDMgLTEuMiw0LjkgLTIuOCw2LjUgLTEuMSwxLjEgLTEuMiwxLjIgLTIuNiwyLjEgLTEuMywwLjggLTIuNSwwLjYgLTIuNywyIC0wLjYsNC42IC00LjIsOSAtOS40LDkgMy4zLDUgMi4zLDguNyAtMC42LDEzIDAsNC44IC0wLjIsNi4yIC0yLjgsOC44IC0yLjQsMi41IC00LjUsMi40IC04LjYsMi40IDAuNywtMSAxLjIsLTEgMiwtMi40IDAuNiwtMS4xIDAuOCwtMS43IDEuNCwtMi45IDEsLTIuMiAxLjgsLTMuNyAxLjgsLTYuOCB2IC0yLjEgYyAwLC0xLjQgLTAuMiwtMi40IC0wLjgsLTMuMiAtMS4yLDUuMiAtMS40LDYuNCAtNS43LDguNiAwLC04LjMgMy44LC02LjggLTEuOSwtMTMuNCAwLDMuOCAtMC4yLDUuNiAtMi43LDYuOSAtMC44LC0wLjUgLTIuMSwtMS43IC0yLjEsLTIuOSB2IC0wLjQgYyAwLC0yIDIuNSwtNS4yIDIuNSwtNi43IHYgLTAuNCBjIDAsLTEuMSAtMC40LC0yLjEgLTEsLTIuNSAwLDIuOSAtMy40LDcuNiAtNC45LDkuMiAtMS42LDEuNyAtMS4xLDIuOCAtMC4yLDUgMC43LDEuNyAxLjEsMy41IDEuMSw1LjggdiAxIGMgLTMuMiwtMC4zIC00LjQsLTYuMiAtNi4xLC04LjIgMCwzLjQgLTAuOCw2LjMgMC40LDkuNCAwLjgsMS45IDIuNCw1LjYgNC40LDYuMSB2IDAuNCBsIC0zLjQsMC42IC0wLjIsLTAuMSBjIC0zLjQsMCAtNi40LC0yLjQgLTcuOCwtNC40IC0wLjgsLTEuMSAtMS41LC0yLjcgLTEuNywtNC40IC0wLjMsLTIuMyAwLjYsLTMuNiAwLjYsLTUgMCwwIC01LjEsLTQuNyAtNC40LC05IGwgMC4yLC0xLjcgYyAtMC40LC0wLjUgLTEuNCwtMS40IC0yLC0yLjIgLTAuNiwtMC44IC0xLjEsLTEuOCAtMS42LC0yLjYgLTEuNCwwIC0yLDAuNiAtMy4yLDAuNiBoIC0wLjYgYyAtNS40LDAgLTEwLjUsLTUuMiAtMTAuNSwtMTAuNSB2IC0wLjggYyAwLC00LjkgNC4xLC05LjIgOSwtOS4yIGggMi4xIGMgMC44LC0zLjIgNS43LC02LjkgMTAuMSwtNS45IC0wLjQsLTEuNSAtMSwtMi43IC0xLC00LjggdiAtMC40IGMgMCwtMy44IDMuMiwtNy44IDYuMSwtOC44IDEuOSwtMC43IDMuOSwtMSA2LjEsLTAuNCAyLjMsMC42IDMuNywyLjIgNC44LDIuNSBsIDAsMCB6IG0gLTAuNCwtMS45IGMgLTEuMywtMC4xIC0yLjksLTIuMSAtNS45LC0yLjEgaCAtMS45IGMgLTUsMCAtMTAuNiw1LjggLTEwLDExLjQgbCAwLjUsMy40IGggLTAuNiBjIC00LjMsMCAtNy4xLDMuMiAtOC42LDYuMSAtMi4zLC0xLjEgLTYuOCwxLjIgLTcuOSwyLjQgLTEuNiwxLjYgLTMuNiw0LjIgLTMuNiw3LjMgdiAxLjUgYyAwLDMuNiAyLjQsNy4zIDQuNSw4LjkgMS44LDEuMyAyLDEuNiA0LjQsMi40IDIuNywwLjkgMy43LDAuMSA1LjksMC4yIGwgMy4xLDMuNyBjIC0wLjYsMS4zIDAuNCw0LjkgMC45LDYgMC41LDEuMiAwLjcsMS40IDEuNCwyLjQgMC4yLDAuNCAxLjcsMiAxLjcsMiAwLDEuMSAtMC40LDEuNCAtMC40LDIuNyB2IDAuMiBjIDAsNi4zIDQuOCwxMiAxMC43LDEyIDIuMSwwIDMuNiwtMC40IDUsLTEgMi42LDEuNCA3LjEsMyA5LjIsLTAuMSBsIDMuNCwwLjUgYyAyLjcsMC40IDYuOCwtMi4yIDcuOSwtMy42IDEsLTEuNCAzLjcsLTYgMi40LC04LjggMS4xLC0wLjcgMi42LC0zLjcgMi43LC01LjUgMC4xLC0xLjcgMC4yLC0xLjggLTAuMSwtMy42IC0wLjIsLTEuNCAtMC45LC0yLjIgLTEsLTMuMiA0LC0wLjMgOC40LC01LjIgOC40LC05LjcgMi41LC0xLjYgMy40LC0xLjIgNS42LC0zLjggMS4zLC0xLjQgMi42LC00LjQgMi42LC03IDAsLTYuMyAtNC43LC0xMiAtMTAuNywtMTIgLTAuOSwtNCAtNC44LC04LjMgLTkuMiwtOC42IC0wLjQsLTQuNCAtNS43LC05LjQgLTEwLjcsLTkuNCAtNC4xLC0wIC04LjksMi43IC05LjYsNS42IGwgMCwwIHogbSAxNS44LDM4LjQgYyAwLjUsMCAxLDAuMSAxLC0wLjQgMCwtMy4xIC00LjEsLTYuNyAtNy42LC02LjcgaCAtMS45IGMgLTAuNiwwIC0xLDAuOCAtMC42LDEgMC40LDAuMiAxLjYsMC4xIDIsMC4xIDEuMiwwIDIuNiwwLjUgMy40LDEgMi4xLDEuNiAyLjgsMi4xIDMuNSw1LjEgeiBtIC0zNC41LC0xMi42IHYgMS43IGMgMCwxLjQgMC42LDIuMiAwLjYsMy4yIDAsMCAtMy42LDMuNCAtMy44LDUuNCBsIDAuNiwwLjIgYyAxLC0wLjYgMS42LC0yLjYgMywtNCAxLC0wLjkgMy4xLC0yLjIgNC44LC0yLjIgaCAwLjYgYyAxLjMsMCAzLjYsMSAzLjYsLTAuMiAwLC0wLjkgLTIuNiwtMSAtMy42LC0xIGggLTAuMiBjIC0xLjYsMCAtMywwLjYgLTQsMS4zIC0wLjEsLTEgLTAuNiwtMS45IC0wLjYsLTMuMiAwLC00LjYgMy43LC04LjYgOC40LC04LjYgaCAxIGMgMSwwIDEuNSwwLjIgMi4zLDAuNCAwLjEsLTAuMiAwLjQsLTAuNiAwLjQsLTAuNyAwLC0wLjcgLTEuOCwtMSAtMi41LC0xIGggLTEuNSBjIC00LjUsLThlLTQgLTkuMiw0LjQgLTkuMiw4LjYgeiBtIDE5LjEsLTE1LjggMC42LDAuNiBjIDEuNiwtMC45IDMuNCwtMi4zIDUuOSwtMi4zIGggMSBjIDUuNSwwIDEwLjEsNC40IDEwLjEsOS43IHYgMC42IGMgLTEuNSwtMCAtMi42LC0wLjggLTQuNiwtMC44IGggLTEgYyAtMS41LDAgLTQuMSwwLjMgLTQuMiwxLjcgMC42LDAuMSAwLjQsMC4yIDAuOCwwLjIgMC45LDAgMS40LC0wLjYgMywtMC42IGggMi4zIGMgMi4yLDAgNS42LDEuOCA2LjYsMy4xIDIsMi42IDEuOCwzLjcgMi42LDcuMiAwLjUsMCAxLDAuMSAxLC0wLjQgMCwtNCAtMi42LC04LjEgLTUuMiwtOS40IDAsLTYuOSAtNC41LC0xMi40IC0xMS4xLC0xMi40IGggLTEuMyBjIC0yLjMsMCAtNS42LDEuNiAtNi41LDIuOSB6XCJ9XSxpW1wiQUMuSUMuU1BFQ0lBTCBORUVEUyBGSVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzUuMywxMzMuOSBoIDQ5LjQgdiAtMjguOSBjIC0wLjYsMC40IC0yLjQsMS4yIC0yLjQsMiB2IDI0LjggSCA3Ny40IHYgLTMwIGggLTIuMiB2IDMyLjEgbCAwLDAgeiBNIDkzLDEyOS4xIGggMiBjIDQuMiwwIDcuNiwtMi40IDkuMywtNSBsIC0xLjMsLTMuNSBjIC0xLjIsMC4zIC0yLjEsNS4yIC04LjYsNS4yIGggLTAuOCBjIC0zLjQsMCAtNi4zLC0zLjMgLTcuMiwtNiAtMC42LC0xLjcgLTAuNiwtMy42IDAsLTUuNCAwLjgsLTIuNSAxLjYsLTIuNCAyLjYsLTQgbCAtMC40LC0zLjQgYyAtMy4yLDAuOCAtNy4xLDggLTUuNywxMi44IDEuMiw0LjEgNS40LDkuMiAxMC4yLDkuMiB6IE0gODguOSw5Ny45IHYgMC40IGMgMCwwLjggMC41LDEuNCAwLjgsMiBsIDEuNCwxNC43IDExLjMsMCA0LjMsMTAuMiA2LjIsLTIgLTEsLTMgLTMuNSwxIEMgMTA4LDExOS45IDEwNC44LDExMS43IDEwNCwxMTEuNyBIIDk0LjEgQyA5NCwxMTEgOTMuOCwxMTAuOSA5My44LDExMC4xIHYgLTEuMSBoIDcuNiB2IC0yLjQgaCAtOCBsIC0wLjIsLTMuNyB2IC0yLjIgYyAzLjQsLTAuOCAyLjcsLTYuMiAtMS4xLC02LjIgLTEuOCwwIC0zLjIsMS40IC0zLjIsMy4yIHogbSAxOS45LC03LjQgdiAxIGwgLTAuNCwwLjMgQyAxMDUuMSw4OS43IDEwMSw4Ni4xIDEwMSw4MC44IDk5LjYsODEuNyA5OC44LDg0LjggOTguOCw4Ny4xIHYgMS4xIGMgMCw0LjUgMywxMC43IDUsMTMuMyAyLjgsMy43IDcuNCw0LjggMTEuNiw3IDEuNiwtMC44IDkuMywtNS40IDEwLC02LjMgMS4zLC0xLjcgNC4yLC05LjggNC4yLC0xMi40IDAsLTEuOSAtMC4zLC04LjIgLTEuMywtOC44IC0wLjcsMi43IC0wLjgsNC43IC0yLjMsNi44IC0xLDEuNCAtMy4zLDMuNSAtNSw0IGwgLTAuMiwtMi40IHYgLTAuMiBjIDAsLTMgMiwtNS40IDIsLTguOCAwLC0xIC0zLjQsLTYuMSAtNC4xLC02LjIgMCwxLjggLTAuMiw0LjEgLTAuNiw1LjQgLTAuMywxIC0xLjksMy40IC0yLjksMy40IGggLTAuNiBjIC0wLjQsLTEuNCAtMS45LC0xLjcgLTEuOSwtNC44IFYgNzYuOSBjIDAsLTIuMyAyLjYsLTUuNSAyLjYsLTcuOCBsIDAsLTAuNiAtMC4zLC0yLjQgYyAtMSwwLjIgLTEsMS45IC0xLjQsMi45IC0wLjQsMSAtMSwyIC0xLjYsMi45IC0xLjMsMS43IC0yLjYsMy40IC0zLjksNS4xIC0yLDIuOCAtMi4xLDIuNyAtMSw2LjEgMC42LDIgMS43LDQuOCAxLjcsNy40IHogbSAyNC4zLDEwLjIgLTMuMywtMiAtMS4yLDEuOSAzLjUsMiB6IG0gLTY2LjIsMCAxLDEuOSBjIDUsLTIuNyAxMSwtNi45IDE2LC0xMC4xIDIuNywtMS43IDUuMiwtMy40IDcuOCwtNS4xIDEuNCwtMC45IDIuNiwtMS42IDMuOSwtMi42IDEuOCwtMS4yIDEuOSwtMS45IDIuNCwtNC4zIGwgLTMxLjIsMjAuMiB6XCJ9XSxpW1wiQUMuSUMuV0lMRCBGSVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTEwLjgsMTM5LjUgYyAwLjIsLTAuNSA2LjUsLTYuMiA3LjQsLTcgMi42LC0yLjYgNS42LC01LjIgNy44LC04LjEgMy45LC01LjIgOCwtMTUgOCwtMjQgdiAtNi45IGMgMCwtMSAwLC0yLjIgLTAuOCwtMi40IC0wLjgsMy40IC0zLjMsNy43IC01LjEsMTAuMSAtMC41LDAuNiAtNy45LDguNyAtNy45LDYuMiAwLC00LjcgMi41LC04LjQgMi45LC0xMy40IDAuMiwtMi45IC0wLjgsLTExLjQgLTEuNCwtMTQuMyAtMC45LDAuNyAtMS4yLDQuMiAtMS43LDUuNyAtMC42LDEuNyAtMS4yLDMuNiAtMi4xLDUgLTAuNywxLjEgLTYuMSw3LjIgLTcsNy4yIC0wLjcsMCAtMS42LC0yLjkgLTEuNiwtNC4xIDAsLTQuNyAzLjMsLTkuNyAzLjMsLTEzLjQgdiAtMC42IGMgMCwtMi40IC0xLjksLTMuNiAtMywtNS42IC0wLjYsLTEgLTIuNywtNC43IC0zLjcsLTQuOCB2IDIuOSBjIDAsMi4yIC0wLjUsNS42IC0xLjMsNy4xIC0wLjQsMC44IC0zLjIsNC4xIC00LDQuMSAtMSwwIC0zLjksLTMuOSAtMy45LC01LjcgdiAtMy41IGMgMCwtNC4xIDQuMSwtOC42IDQuMSwtMTIuNiB2IC0wLjIgYyAwLC0xLjUgLTAsLTQgLTEuNCwtNC4xIC0wLjcsOCAtMTIuNiwxOC43IC0xMi42LDIxLjggMCw0LjQgMy45LDkuMiAzLjksMTUuOSB2IDIuMiBjIDAsMC43IC0wLjIsMC44IC0wLjIsMS40IC0wLjgsLTAuMiAtMS40LC0xLjMgLTEuOSwtMiAtMC43LC0wLjggLTEuNCwtMS4xIC0yLjIsLTEuNyAtMS41LC0xIC0yLjcsLTIuMyAtMy44LC0zLjcgLTEuOSwtMi41IC00LjEsLTYuNyAtNC4xLC0xMC45IC0xLjgsMC41IC0zLjMsNi4zIC0zLjMsOC44IHYgMy41IGMgMCw4LjMgNS45LDE1LjEgNS45LDE4LjEgLTMuMiwtMS43IC02LC0zLjkgLTguNSwtNi40IC0xLjIsLTEuMiAtNS41LC04LjUgLTYuMiwtOC43IDAsNS43IDEuNywxMC4zIDIuNiwxNS4xIDAuNSwyLjMgMS4yLDUuMSAxLjksNy4xIDEsMi43IDEuOSwzLjMgMy40LDUuMyAzLDQgNC45LDYgOC4zLDkuNCAxLjUsMS41IDIuOSwyLjkgNC40LDQuNCBsIDQuNywzLjQgNS45LDIuOCBWIDEyOS45IGggLTEzIGwgOS45LC0xMS41IC03LjQsLTAuMSA5LjgsLTExLjEgLTYuNiwtMC4xIDEwLjksLTE3LjMgMC4xLC0wLjIgMTEuMiwxNy41IC02LjEsLTAgOS40LDExIC03LjYsMCAxMC4xLDExLjcgLTEzLjEsMC4xIHYgMTMgbCA2LC0zLjQgelwifV0saVtcIkFDLklDLkhBWkFSRE9VUyBNQVRFUklBTFMgSU5DSURFTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2MC43LDEwMC42IDc4LjUsLTAgLTM5LjMsMzkuMiAtMzkuMiwtMzkuMiB6IE0gMTI3LjYsODcuOCBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIFYgMTAwIGggLTYuMSBWIDg3LjggeiBNIDExNS4zLDc1LjUgYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiBWIDEwMCBoIC02LjEgViA3NS41IHogTSA5MC44LDY5LjUgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViAxMDAgSCA5MC44IFYgNjkuNSB6IG0gLTEyLjIsMTIuMiBjIDAsLTAuNCA1LjUsLTUuOCA2LjEsLTYuMiBWIDEwMCBIIDc4LjYgViA4MS43IHogbSAtNi4zLDYgMCwxMi4yIEggNjYuNCBWIDk0LjIgYyAwLC0wLjMgLTAsLTAuMyAtMC4xLC0wLjQgbCA2LC02IHogbSAzMC44LC0yNC41IDYuMiw2LjEgYyAtMC4yLDAuNCAtMC4xLC0wLjEgLTAuMSwwLjQgViAxMDAgaCAtNi4xIFYgNjMuMyB6IE0gNTYuNywxMDAgMTAwLDE0My4zIDE0My4zLDEwMCAxMDAsNTYuNyA1Ni43LDEwMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDMuMSw2My4zIDYuMiw2LjEgYyAtMC4yLDAuNCAtMC4xLC0wLjEgLTAuMSwwLjQgViAxMDAgaCAtNi4xIFYgNjMuMyB6IG0gLTMwLjgsMjQuNSAwLDEyLjIgSCA2Ni40IFYgOTQuMiBjIDAsLTAuMyAtMCwtMC4zIC0wLjEsLTAuNCBsIDYsLTYgeiBtIDYuMywtNiBjIDAsLTAuNCA1LjUsLTUuOCA2LjEsLTYuMiBWIDEwMCBIIDc4LjYgViA4MS43IHogbSAxMi4yLC0xMi4yIGMgMCwtMC40IDUuNSwtNS44IDYuMSwtNi4yIFYgMTAwIEggOTAuOCBWIDY5LjUgeiBtIDI0LjUsNiBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIFYgMTAwIGggLTYuMSBWIDc1LjUgeiBtIDEyLjMsMTIuMyBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIFYgMTAwIGggLTYuMSBWIDg3LjggeiBtIC02Ni45LDEyLjggNzguNSwtMCAtMzkuMywzOS4yIC0zOS4yLC0zOS4yIHpcIn1dLGlbXCJBQy5JQy5DSEVNSUNBTCBBR0VOVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMC43LDEwNy43IGMgLTMuMiwyZS01IC01LjgsMSAtNy42LDMgLTEuOSwyIC0yLjgsNC43IC0yLjgsOC4xIC0yZS02LDMuNCAwLjksNi4xIDIuOCw4LjEgMS45LDIgNC40LDMgNy42LDMgMS4zLDAgMi40LC0wLjIgMy42LC0wLjUgMS4xLC0wLjMgMi4yLC0wLjkgMy4yLC0xLjUgbCAwLjEsLTAuMSAwLC0wLjEgMCwtMyAwLC0wLjUgLTAuMywwLjMgYyAtMC45LDAuOSAtMS45LDEuNSAtMywxLjkgLTEuMSwwLjQgLTIuMiwwLjcgLTMuNCwwLjcgLTIuNCwwIC00LjEsLTAuNyAtNS4zLC0yLjEgLTEuMiwtMS40IC0xLjksLTMuNSAtMS45LC02LjIgLTRlLTYsLTIuNyAwLjYsLTQuOCAxLjksLTYuMiAxLjIsLTEuNCAzLC0yLjEgNS4zLC0yLjEgMS4yLDJlLTUgMi4zLDAuMiAzLjQsMC42IDEuMSwwLjQgMi4xLDEuMSAzLDEuOSBsIDAuMywwLjMgMCwtMC41IDAsLTMgLTAuMiwwIDAuMSwtMC4yIGMgLTEsLTAuNyAtMi4xLC0xLjIgLTMuMiwtMS41IC0xLjEsLTAuMyAtMi4zLC0wLjUgLTMuNiwtMC41IHogTSA5Mi43LDY0LjIgaCAxNC43IHYgMzMgYyAwLDguMiAxMi45LDkuNiAxMi40LDIxLjggLTAuMyw2LjggLTcsMTguNiAtMTQuMywxOC42IGggLTExIGMgLTYuOCwwIC0xNC42LC0xMy4xIC0xNC4zLC0yMCAwLjYsLTEwLjYgMTIuNCwtMTIuOCAxMi40LC0yMC40IHYgLTMzIHogbSAtMTQuNyw1NSBjIDAsNi44IDcuOSwyMC4yIDE0LjcsMjAuMiBoIDE0LjcgYyA4LjEsMCAxNC43LC0xMyAxNC43LC0yMiAwLC0xMS44IC0xMi44LC0xMy42IC0xMi44LC0yMiBWIDYwLjYgSCA5MC44IFYgOTUuNCBjIDAsNy44IC0xMi44LDguNyAtMTIuOCwyMy45IGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6RS5maWxsQ29sb3IuVW5rbm93bixkOlwibSA5Mi43LDY0LjIgMCwzMyBjIDAsNy42IC0xMS45LDkuOCAtMTIuNCwyMC40IEMgNzkuOSwxMjQuNSA4Ny43LDEzNy42IDk0LjUsMTM3LjYgbCAxMSwwIGMgNy4yLDAgMTQsLTExLjggMTQuMywtMTguNiAwLjUsLTEyLjIgLTEyLjQsLTEzLjYgLTEyLjQsLTIxLjggbCAwLC0zMyAtMTQuNywwIHogTSAxMDAuNywxMDcuNyBjIDEuMywyZS01IDIuNSwwLjIgMy42LDAuNSAxLjEsMC4zIDIuMiwwLjggMy4yLDEuNSBsIC0wLjEsMC4yIDAuMiwwIDAsMyAwLDAuNSAtMC4zLC0wLjMgYyAtMC45LC0wLjkgLTEuOSwtMS41IC0zLC0xLjkgLTEuMSwtMC40IC0yLjIsLTAuNiAtMy40LC0wLjYgLTIuNCwyZS01IC00LjEsMC43IC01LjMsMi4xIC0xLjIsMS40IC0xLjksMy41IC0xLjksNi4yIC00ZS02LDIuNyAwLjYsNC44IDEuOSw2LjIgMS4yLDEuNCAzLDIuMSA1LjMsMi4xIDEuMiwwIDIuMywtMC4yIDMuNCwtMC43IDEuMSwtMC40IDIuMSwtMS4xIDMsLTEuOSBsIDAuMywtMC4zIDAsMC41IDAsMyAwLDAuMSAtMC4xLDAuMSBjIC0xLDAuNyAtMi4xLDEuMiAtMy4yLDEuNSAtMS4xLDAuMyAtMi4zLDAuNSAtMy42LDAuNSAtMy4yLDAgLTUuOCwtMSAtNy42LC0zIC0xLjksLTIgLTIuOCwtNC43IC0yLjgsLTguMSAtMmUtNiwtMy40IDAuOSwtNi4xIDIuOCwtOC4xIDEuOSwtMiA0LjQsLTMgNy42LC0zIHpcIn1dLGlbXCJBQy5JQy5DT1JST1NJVkUgTUFURVJJQUxcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDIuOSwxMzUuNCBjIDAuOCwwIDEuNCwtMC44IDEuNCwtMS41IDAsLTAuNyAtMC42LC0xLjUgLTEuMiwtMS41IEggMTAyLjMgYyAtMC41LDAgLTEuMiwwLjcgLTEuMiwxLjQgdiAwLjMgYyAwLDAuOCAwLjYsMS40IDEuNCwxLjQgSCAxMDIuOSB6IE0gOTYuOSwxMzIuNSBjIDAsMC43IDAuNiwxLjUgMS4yLDEuNSBoIDAuNiBjIDAuOCwwIDEuNCwtMC44IDEuNCwtMS41IHYgLTAuMiBjIDAsLTAuNyAtMC42LC0xLjUgLTEuMiwtMS41IEggOTguMSBjIC0wLjYsMCAtMS4yLDAuOSAtMS4yLDEuNSB2IDAuMiB6IG0gOC41LC0wLjkgYyAxLjMsMCAyLjIsLTEuOCAxLjEsLTIuOCAtMSwtMSAtMi44LC0wLjIgLTIuOCwxLjEgMCwwLjggMC45LDEuNyAxLjcsMS43IHogbSAtNi4yLC00LjQgYyAwLDAuNiAwLjYsMS41IDEuMiwxLjUgaCAwLjYgYyAwLjgsMCAxLjQsLTAuNiAxLjQsLTEuNCB2IC0wLjYgYyAwLC0wLjUgLTAuNywtMS4yIC0xLjQsLTEuMiBoIC0wLjMgYyAtMC44LDAgLTEuNSwwLjggLTEuNSwxLjYgeiBtIC0wLjYsLTQuMSBjIDAuNiwwIDEuMiwtMC44IDEuMiwtMS41IDAsLTEgLTAuNywtMS43IC0xLjcsLTEuNyAtMC42LDAgLTEuNSwwLjYgLTEuNSwxLjIgdiAwLjYgYyAwLDAuNyAwLjcsMS40IDEuMiwxLjQgaCAwLjggViAxMjMuMSB6IG0gMi40LC0yLjcgYyAwLDAuNiAwLjcsMS41IDEuMiwxLjUgaCAwLjggYyAwLjQsMCAxLjIsLTAuOCAxLjIsLTEuMiB2IC0wLjggYyAwLC0wLjYgLTAuOCwtMS4yIC0xLjUsLTEuMiBoIC0wLjEgYyAtMC44LDAgLTEuNSwwLjggLTEuNSwxLjUgdiAwLjEgeiBtIC0yLjcsLTMuNSBjIDAuNiwwIDEuNCwtMC44IDEuNCwtMS41IHYgLTAuMiBjIDAsLTIuMiAtMy4yLC0xLjggLTMuMiwtMC4zIHYgMC44IGMgMCwwLjcgMS4xLDEuMiAxLjgsMS4yIHogbSA0LjEsLTMuNiBjIDAsMiAzLjMsMS45IDMuMiwtMC4xIC0wLjEsLTIuMyAtMy4yLC0xLjggLTMuMiwtMC4zIHYgMC40IHogbSA0LjcsLTE2LjIgMCwyLjkgLTMsLTAuMiAwLjksMi44IC0xLjEsMC4xIC0xLjYsLTAuOSAtMC40LDMgLTEsLTEuNSAtMy4zLDEgLTAuNiwtMy4yIC0yLDEuMyAtMC42LC0xLjYgLTIuNSwwLjQgMS41LC0yLjcgLTAuNiwtMS41IC0yMi4yLDAgMCwxMi40IDU5LjIsMCAwLC0xMi40IHogTSA5NC4zLDg1LjIgdiAxLjQgYyAwLDQuNCAyLjEsOC43IDUuNyw5LjQgMy43LDAuOCA3LC00LjUgNywtOCB2IC0xLjUgYyAwLC0zIC0yLjEsLTguNiAtMywtMTEuMyAtMC41LC0xLjQgLTMuMSwtMTAuNiAtMy45LC0xMC42IC0wLjgsMCAtMC45LDQuNSAtMS4xLDUuNCAtMC42LDIuMSAtMC45LDMuMiAtMS42LDUuMSAtMC44LDIuMyAtMy4yLDcuNiAtMy4yLDEwLjEgbCAwLDAgelwifV0saVtcIkFDLklDLkhBWkFSRE9VUyBXSEVOIFdFVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDYwLjYsMTAwLjUgNzguOCwtMCAtMzkuNCwzOS40IEwgNjAuNiwxMDAuNSB6IE0gMTI3LjYsODcuOCBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIHYgNS44IEggMTI3LjYgViA4Ny44IHogTSAxMTUuMyw3NS41IGMgMC42LDAuNCA2LjEsNS45IDYuMSw2LjIgdiAxOC4xIGggLTYuMSBWIDc1LjUgeiBNIDkwLjgsNjkuNSBjIDAsLTAuNCA1LjUsLTUuOCA2LjEsLTYuMiBWIDk5LjggSCA5MC44IFYgNjkuNSB6IE0gNzguNiw4MS43IGMgMCwtMC40IDUuNSwtNS44IDYuMSwtNi4yIFYgOTkuOCBIIDc4LjYgViA4MS43IHogbSAtNi4zLDYgMCwxMi4xIEggNjYuNCBWIDk0LjIgYyAwLC0wLjMgLTAsLTAuMyAtMC4xLC0wLjQgbCA2LC02IHogbSAzMC44LC0yNC41IDYuMiw2LjEgYyAtMC4yLDAuNCAtMC4xLC0wLjIgLTAuMSwwLjQgdiAzMCBoIC02LjEgViA2My4zIHogTSA1Ni43LDEwMCAxMDAsMTQzLjMgMTQzLjMsMTAwIDEwMCw1Ni43IDU2LjcsMTAwIHogbSA0MS4yLDI1LjMgYyAwLjIsMSAwLjYsMS42IDEuNiwxLjggbCAtMC44LDAuNiBjIC0xLjMsLTAuNiAtMS4zLC0wLjEgLTEuNywtMS45IGwgMC45LC0wLjQgeiBtIC0yLjQsLTEgYyAwLDIuOSAxLjMsNC45IDQuMiw0LjkgaCAwLjkgYyAxLjksMCAzLC0xIDMuNiwtMi4zIDAuOSwtMS44IDAuNiwtMy4xIC0wLjIsLTQuNiAtMC44LC0xLjQgLTEuNiwtMi4zIC0yLjIsLTMuOCAtMC41LC0xLjIgLTAuOCwtMy44IC0xLjcsLTQuNCBDIDk5LjYsMTE4LjEgOTUuNSwxMjIuNSA5NS41LDEyNC4yIHogbSAtMTIuNiwtOS40IGMgMC40LDAuOSAwLjQsMS40IDEuNSwxLjcgbCAtMC42LDAuNiBDIDgyLjIsMTE2LjcgODIuNiwxMTYuNSA4MiwxMTUuMyBsIDAuOSwtMC41IHogbSAxLjYsMy44IEggODYgYyAyLjMsMCAzLjcsLTIuMiAzLjcsLTQuNiAwLC0xLjIgLTEuOSwtMy45IC0yLjYsLTQuOSAtMC45LC0xLjQgLTEuMiwtNC43IC0yLjIsLTUuNCAtMC4yLDMgLTIuMyw1LjkgLTMuNiw4IC0xLjksMi45IC0wLjQsNi45IDMuMSw2LjkgeiBtIDI4LjQsLTMuOCBjIDAuMiwxLjYgMC45LDEuMSAxLjUsMiBsIC0wLjgsMC4zIGMgLTEsLTAuMiAtMS43LC0wLjggLTEuOCwtMS45IEwgMTEyLjksMTE0LjggeiBtIDIsLTExLjEgYyAtMC4zLDMuNiAtMi4yLDUuNiAtMy42LDguMSAtMS43LDMuMSAtMC4zLDYuOCAzLjIsNi44IGggMS4zIGMgMi4yLDAgMy43LC0xLjcgMy43LC0zLjkgdiAtMC45IGMgMCwtMS40IC0xLjksLTMuOCAtMi42LC00LjkgLTAuOSwtMS40IC0wLjcsLTQuNCAtMiwtNS4yIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDExMi45LDExNC44IGMgMC4yLDEuNiAwLjksMS4xIDEuNSwyIGwgLTAuOCwwLjMgYyAtMSwtMC4yIC0xLjcsLTAuOCAtMS44LC0xLjkgTCAxMTIuOSwxMTQuOCB6IG0gLTMwLDAgYyAwLjQsMC45IDAuNCwxLjQgMS41LDEuNyBsIC0wLjYsMC42IEMgODIuMiwxMTYuNyA4Mi42LDExNi41IDgyLDExNS4zIGwgMC45LC0wLjUgeiBtIDE1LDEwLjQgYyAwLjIsMSAwLjYsMS42IDEuNiwxLjggbCAtMC44LDAuNiBjIC0xLjMsLTAuNiAtMS4zLC0wLjEgLTEuNywtMS45IGwgMC45LC0wLjQgeiBtIDUuMiwtNjIgNi4yLDYuMSBjIC0wLjIsMC40IC0wLjEsLTAuMiAtMC4xLDAuNCB2IDMwIGggLTYuMSBWIDYzLjMgeiBtIC0zMC44LDI0LjUgMCwxMi4xIEggNjYuNCBWIDk0LjIgYyAwLC0wLjMgLTAsLTAuMyAtMC4xLC0wLjQgbCA2LC02IHogbSA2LjMsLTYgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViA5OS44IEggNzguNiBWIDgxLjcgeiBtIDEyLjIsLTEyLjIgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViA5OS44IEggOTAuOCBWIDY5LjUgeiBtIDI0LjUsNiBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIHYgMTguMSBoIC02LjEgViA3NS41IHogbSAxMi40LDEyLjMgYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiB2IDUuOCBIIDEyNy42IFYgODcuOCB6IG0gMTEuNywxMi42IC03OC44LDAgMzkuNCwzOS40IEwgMTM5LjQsMTAwLjQgeiBNIDg1LDEwMy43IGMgMSwwLjcgMS4zLDQgMi4yLDUuNCAwLjYsMSAyLjYsMy42IDIuNiw0LjkgMCwyLjQgLTEuNCw0LjYgLTMuNyw0LjYgbCAtMS41LDAgYyAtMy41LDAgLTUsLTQgLTMuMSwtNi45IDEuMywtMi4xIDMuNCwtNSAzLjYsLTggeiBtIDI5LjgsMCBjIDEuMywwLjkgMS4yLDMuOCAyLDUuMiAwLjcsMS4xIDIuNiwzLjUgMi42LDQuOSBsIDAsMC45IGMgMCwyLjIgLTEuNiwzLjkgLTMuNywzLjkgbCAtMS4zLDAgYyAtMy41LDAgLTQuOSwtMy43IC0zLjIsLTYuOCAxLjQsLTIuNSAzLjQsLTQuNSAzLjcsLTguMSB6IE0gMTAwLDExNC4xIGMgMC44LDAuNiAxLjIsMy4xIDEuNyw0LjMgMC42LDEuNSAxLjUsMi40IDIuMiwzLjggMC44LDEuNSAxLjIsMi43IDAuMyw0LjYgLTAuNiwxLjMgLTEuNywyLjMgLTMuNiwyLjMgbCAtMC45LDAgYyAtMi44LDAgLTQuMiwtMiAtNC4yLC00LjkgMCwtMS43IDQuMSwtNi4xIDQuNSwtMTAuMSB6XCJ9XSxpW1wiQUMuSUMuRVhQTE9TSVZFIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTYuNSwxMDQuNiAwLDAuMiAtMC4yLDAgMCw0IDAsMC4yIDAuMiwwIDMuMiwwIDAuMiwwIDAsLTAuMiAwLC00IDAsLTAuMiAtMC4yLDAgLTMuMiwwIHogbSAyLjMsLTIwIGMgLTEuMSwyLjRlLTUgLTIuMiwwLjEgLTMuMiwwLjUgLTEsMC4zIC0yLDAuOCAtMywxLjQgbCAtMC4xLDAuMSAwLDAuMSAwLDMgMCwwLjQgMC4zLC0wLjIgYyAxLC0wLjcgMiwtMS4yIDIuOSwtMS42IDAuOSwtMC40IDEuOCwtMC41IDIuNiwtMC41IDEuMSwyLjFlLTUgMiwwLjMgMi42LDAuOCAwLjcsMC41IDEsMS4yIDEsMi4xIC0xMGUtNiwwLjUgLTAuMSwxIC0wLjQsMS40IC0wLjIsMC41IC0wLjcsMSAtMS4zLDEuNSBsIC0wLDAgLTEuNCwxLjQgYyAtMSwwLjkgLTEuNiwxLjcgLTEuOSwyLjUgLTAuMywwLjcgLTAuNSwxLjYgLTAuNSwyLjcgbCAwLDIuNCAwLDAuMiAwLjIsMCAzLDAgMCwtMC4yIDAuMiwwIDAsLTEuOSBjIC04ZS02LC0wLjUgMCwtMSAwLC0xLjMgMCwtMC4zIDAuMSwtMC42IDAuMSwtMC44IDAuMSwtMC4yIDAuMiwtMC41IDAuNCwtMC44IDAuMiwtMC4zIDAuNSwtMC43IDEsLTEuMSBsIDEuNCwtMS40IGMgMSwtMC45IDEuNiwtMS43IDIsLTIuNSAwLjQsLTAuOCAwLjYsLTEuNiAwLjYsLTIuNCAtMmUtNSwtMS43IC0wLjYsLTMuMSAtMS44LC00LjIgLTEuMiwtMS4xIC0yLjgsLTEuNiAtNC44LC0xLjYgeiBtIDQuOCwtMzEuMSAtMS41LDQuNSAtNC4zLDEyLjkgLTQuNSwtNyAtMS42LC0yLjUgLTAuMywyLjkgLTEuMywxNC40IC05LjUsLTEwLjcgLTIuOCwtMy4yIDEuMSw0LjEgMy40LDEyLjkgLTEzLjEsLTAuNyAtMC43LC0wIC0wLjMsMC42IC0wLjEsMC4yIC0wLjQsMC44IDAuNywwLjUgMTEuMyw4LjEgLTIwLjEsMS40IC01LjYsMC40IDUuNCwxLjYgMTgsNS4zIC0xMi4zLDcuMSAtMC44LDAuNCAwLjMsMC44IDAuMSwwLjIgMC4zLDAuNyAwLjgsLTAuMSAxNi4xLC0yIC00LjgsOC4zIC0xLjUsMi42IDIuNywtMS4xIDguOCwtMy43IC0zLjQsMTQuNSAtMS4xLDQuNSAyLjgsLTMuNyA4LjksLTExLjYgNSwxOS4yIDAuMiwwLjggMC44LDAgMC40LDAgMC45LDAgMC4xLC0xIDAuOSwtMTguNyA5LjIsMTEuMiAyLjYsMy4yIC0wLjksLTQgLTMuMywtMTUuMiAxMC42LDUuOSA0LjcsMi42IC0zLjQsLTQuMSAtNS41LC02LjYgMTUuNiw0LjQgNCwxLjIgLTMuMSwtMi45IC0xMC43LC05LjkgMTMuNywtMi4xIDQuNiwtMC43IC00LjUsLTEuMiAtMTUuNSwtNC4zIDE4LjksLTkuNiA0LjcsLTIuNCAtNS4yLDAuNSAtMTcuMSwxLjYgNi43LC0xMC44IDIsLTMuMiAtMy4zLDEuOCAtMTQuNiw3LjkgNS4yLC0xNi41IDEuNywtNS41IC0zLjUsNC41IC0xMC42LDE0IC0xLjcsLTE4LjggLTAuNCwtNC44IHogbSAtMS4xLDkuNyAxLjUsMTYuNiAwLjIsMi42IDEuNiwtMiA4LjcsLTExLjUgLTQuMiwxMy40IC0wLjgsMi40IDIuMiwtMS4yIDEzLjQsLTcuMyAtNS44LDkuMyAtMS4xLDEuNyAyLC0wLjIgMTMuOSwtMS4zIC0xNi41LDguNCAtMi4zLDEuMiAyLjUsMC43IDEzLjUsMy43IC0xMS4yLDEuNyAtMiwwLjMgMS41LDEuNCA5LjEsOC40IC0xNC42LC00LjIgLTMuMSwtMC45IDIuMSwyLjUgNC4yLDUgLTcuOCwtNC4zIC0xLjksLTEuMSAwLjUsMi4yIDIuOSwxMy4zIC04LjIsLTEwIC0xLjYsLTIgLTAuMSwyLjYgLTAuOCwxNi4xIC00LjIsLTE2LjMgLTAuNSwtMiAtMS4yLDEuNiAtNy4zLDkuNSAyLjgsLTExLjkgMC40LC0xLjkgLTEuOCwwLjcgLTcuOSwzLjMgNC4zLC03LjQgMSwtMS43IC0yLDAuMiAtMTMuOSwxLjcgMTAuMywtNiAwLjUsLTAuMyAwLC0wLjYgMCwtMC4zIDAsLTAuOCAtMC43LC0wLjIgLTE0LjUsLTQuMiAxNy4zLC0xLjIgMi44LC0wLjIgLTIuMywtMS42IC0xMSwtOCAxMS41LDAuNiAxLjQsMC4xIC0wLjMsLTEuMyAtMi43LC0xMC4xIDguMiw5LjMgMS41LDEuOCAwLjIsLTIuMyAxLjMsLTEzLjggNCw2LjMgMS4xLDEuOCAwLjcsLTIgMy40LC0xMC4zIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDEwMi41IDYzLjIgTCA5OSA3My41IEwgOTguNCA3NS41IEwgOTcuMyA3My43IEwgOTMuMiA2Ny40IEwgOTEuOSA4MS4zIEwgOTEuNyA4My42IEwgOTAuMiA4MS44IEwgODIgNzIuNSBMIDg0LjcgODIuNyBMIDg1LjEgODQgTCA4My43IDgzLjkgTCA3Mi4yIDgzLjQgTCA4My4yIDkxLjMgTCA4NS41IDkzIEwgODIuNyA5My4yIEwgNjUuNCA5NC4zIEwgNzkuOSA5OC41IEwgODAuNyA5OC44IEwgODAuNyA5OS41IEwgODAuNyA5OS44IEwgODAuNyAxMDAuMyBMIDgwLjIgMTAwLjcgTCA2OS44IDEwNi42IEwgODMuOCAxMDQuOSBMIDg1LjggMTA0LjcgTCA4NC44IDEwNi40IEwgODAuNCAxMTMuOCBMIDg4LjMgMTEwLjYgTCA5MC4xIDEwOS44IEwgODkuNyAxMTEuNyBMIDg2LjkgMTIzLjYgTCA5NC4yIDExNC4xIEwgOTUuNSAxMTIuNSBMIDk2IDExNC40IEwgMTAwLjIgMTMwLjggTCAxMDEgMTE0LjYgTCAxMDEuMiAxMTIgTCAxMDIuOCAxMTQgTCAxMTEgMTI0IEwgMTA4LjEgMTEwLjcgTCAxMDcuNiAxMDguNSBMIDEwOS42IDEwOS42IEwgMTE3LjMgMTEzLjkgTCAxMTMuMiAxMDguOSBMIDExMS4xIDEwNi40IEwgMTE0LjMgMTA3LjMgTCAxMjguOSAxMTEuNSBMIDExOS43IDEwMy4xIEwgMTE4LjIgMTAxLjcgTCAxMjAuMyAxMDEuMyBMIDEzMS40IDk5LjYgTCAxMTcuOSA5NS45IEwgMTE1LjQgOTUuMiBMIDExNy44IDk0IEwgMTM0LjMgODUuNiBMIDEyMC4zIDg2LjkgTCAxMTguMyA4Ny4xIEwgMTE5LjQgODUuNCBMIDEyNS4yIDc2LjEgTCAxMTEuOCA4My4zIEwgMTA5LjYgODQuNSBMIDExMC4zIDgyLjIgTCAxMTQuNSA2OC44IEwgMTA1LjggODAuMyBMIDEwNC4zIDgyLjMgTCAxMDQgNzkuOCBMIDEwMi41IDYzLjIgeiBNIDk4LjggODQuNSBDIDEwMC44IDg0LjUgMTAyLjQgODUuMSAxMDMuNiA4Ni4xIEMgMTA0LjggODcuMiAxMDUuNSA4OC42IDEwNS41IDkwLjMgQyAxMDUuNSA5MS4yIDEwNS4zIDkyIDEwNC45IDkyLjcgQyAxMDQuNSA5My41IDEwMy44IDk0LjMgMTAyLjggOTUuMiBMIDEwMS41IDk2LjYgQyAxMDEgOTcuMSAxMDAuNiA5Ny40IDEwMC40IDk3LjcgQyAxMDAuMiA5OCAxMDAuMSA5OC4yIDEwMCA5OC41IEMgMTAwIDk4LjcgOTkuOSA5OC45IDk5LjkgOTkuMiBDIDk5LjggOTkuNSA5OS44IDEwMCA5OS44IDEwMC41IEwgOTkuOCAxMDIuNCBMIDk5LjcgMTAyLjQgTCA5OS43IDEwMi43IEwgOTYuNiAxMDIuNyBMIDk2LjQgMTAyLjcgTCA5Ni40IDEwMi40IEwgOTYuNCAxMDAgQyA5Ni40IDk4LjkgOTYuNiA5OCA5Ni45IDk3LjMgQyA5Ny4yIDk2LjYgOTcuOSA5NS44IDk4LjggOTQuOCBMIDEwMC4yIDkzLjQgQyAxMDAuOCA5Mi45IDEwMS4yIDkyLjQgMTAxLjUgOTEuOSBDIDEwMS43IDkxLjQgMTAxLjkgOTEgMTAxLjkgOTAuNSBDIDEwMS45IDg5LjYgMTAxLjUgODguOSAxMDAuOSA4OC4zIEMgMTAwLjIgODcuOCA5OS40IDg3LjUgOTguMyA4Ny41IEMgOTcuNSA4Ny41IDk2LjYgODcuNyA5NS43IDg4LjEgQyA5NC44IDg4LjUgOTMuOCA4OSA5Mi44IDg5LjcgTCA5Mi41IDg5LjkgTCA5Mi41IDg5LjUgTCA5Mi41IDg2LjUgTCA5Mi41IDg2LjQgTCA5Mi42IDg2LjMgQyA5My42IDg1LjcgOTQuNiA4NS4zIDk1LjYgODUgQyA5Ni43IDg0LjcgOTcuNyA4NC41IDk4LjggODQuNSB6IE0gOTYuNSAxMDQuNiBMIDk5LjggMTA0LjYgTCA5OS45IDEwNC42IEwgOTkuOSAxMDQuOCBMIDk5LjkgMTA4LjggTCA5OS45IDEwOSBMIDk5LjggMTA5IEwgOTYuNSAxMDkgTCA5Ni4zIDEwOSBMIDk2LjMgMTA4LjggTCA5Ni4zIDEwNC44IEwgOTYuNSAxMDQuOCBMIDk2LjUgMTA0LjYgelwifV0saVtcIkFDLklDLkZMQU1NQUJMRSBHQVNcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5My4zLDgyLjUgYyAwLC00LjMgMTMuOCwtNC4zIDEzLjgsMCB2IDU1LjYgYyAwLDEuMyAtNC40LDEuMiAtNS45LDEuMiBoIC0yIGMgLTEuNSwwIC01LjksMC4xIC01LjksLTEuMiBWIDgyLjUgbCA0ZS00LDAgeiBtIDUuMywtMjAuNiBoIC02LjUgdiAyLjkgaCA2LjMgdiAzLjIgaCAtMy43IHYgMiBoIDMuNyB2IDUuMyBoIC00LjYgdiA0LjUgYyAtMS4xLDAuMyAtMiwxLjYgLTIsMyB2IDU0LjggYyAwLDMuMyAzLjcsMy4yIDcuMSwzLjIgaCAyLjQgYyAzLjQsMCA3LjEsMC4yIDcuMSwtMy4yIFYgODMuMSBjIDAsLTIuOCAtMS44LC0yLjggLTEuOCwtMy43IHYgLTQuMSBoIC00LjcgdiAtMTAuNCBoIDYuMyB2IC0zIGggLTYuNyB2IC0yLjUgaCAtMi45IHYgMi41IGwgMCwwIHogbSAyMS44LDMyLjMgdiAwLjYgYyAwLDIuMiAyLjMsNS4xIDEuNiw4LjEgLTEuMywtMC4zIC0zLjEsLTIgLTMuOCwtMyAtMC4zLC0wLjQgLTAuOSwtMS43IC0xLjIsLTIuMiAtMC40LC0wLjkgLTAuNCwtMi4zIC0wLjcsLTIuOCAtMS4xLDAuOCAtMS42LDMuNSAtMS42LDUuNSB2IDAuMiBjIDAsMy4yIDIuNCw3LjUgMy44LDkuNiAyLDMgNi4zLDMuMyA4LjQsNS4xIDEuNiwtMC45IDYuOSwtMy43IDcuNywtNC45IDAuOSwtMS4yIDMuMiwtNy40IDMsLTkuNiBsIC0wLjcsLTUuOSBoIC0wLjQgYyAtMCwzLjIgLTIuNyw3LjYgLTUuNSw3LjkgdiAtMiBjIDAsLTEuNyAxLjQsLTQgMS40LC02LjEgdiAtMC4yIGMgMCwtMC45IC0yLjQsLTQuNCAtMy4yLC00LjcgMCwzLjQgLTAuMyw1LjUgLTIuNSw2LjcgLTAuOCwtMC43IC0xLjgsLTEuNiAtMS44LC0zLjEgdiAtMS4yIGMgMCwtMi4xIDIsLTQuMSAyLC02LjEgMCwtMC45IC0wLjEsLTEuNiAtMC42LC0yIC0wLjksMy44IC01LjksOC45IC01LjksMTAuMiB6IG0gLTUyLjcsMCB2IDAuNCBjIDAsMS4yIDEuOCw0LjMgMS44LDYuMSB2IDIuMiBjIC0yLjQsLTAuMiAtNS43LC01IC01LjcsLTguMSAtMS43LDEuMSAtMS41LDQuMyAtMS40LDYuNyAwLjEsMi40IDEuMyw0LjcgMi4yLDYuMyAxLjMsMi42IDEuNiwyLjkgNCw0LjUgMC42LDAuNCA1LjMsMi44IDUuOSwyLjggMS4yLDAgNi44LC0zLjkgNy41LC00LjcgMC45LC0xIDMuMywtNy4zIDMuMSwtOS4xIGwgLTAuNiwtNi41IGggLTAuNCBjIC0wLjUsMi4zIC0wLjMsMy4zIC0xLjYsNSAtMC42LDAuOCAtMi43LDIuNyAtMy44LDIuOCAwLC0wLjkgLTAuMiwtMC43IC0wLjIsLTEuNCAwLC0xLjggMS40LC00LjMgMS43LC02LjYgMC4xLC0xIC0yLjYsLTQuNiAtMy4zLC01IDAuNCwyIC0wLjgsNi41IC0yLjQsNi41IGggLTAuMiBjIC0wLjksMCAtMS44LC0yLjIgLTEuOCwtMy40IDAsLTMuOSAyLjYsLTQuNSAxLjYsLTguOCAtMCwwIC0yLjIsNC41IC0yLjksNS40IC0wLjYsMC42IC0zLjUsNC4zIC0zLjUsNC45IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDkzLjMsODIuNSBjIDAsLTQuMyAxMy44LC00LjMgMTMuOCwwIHYgNTUuNiBjIDAsMS4zIC00LjQsMS4yIC01LjksMS4yIGggLTIgYyAtMS41LDAgLTUuOSwwLjEgLTUuOSwtMS4yIFYgODIuNSBsIDRlLTQsMCB6XCJ9XSxpW1wiQUMuSUMuRkxBTU1BQkxFIExJUVVJRFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMC4xLDEzNS40IGMgLTcuNCwwIC0xMS4zLC01LjQgLTEzLjEsLTExLjEgLTIuMSwtNi43IC0yLjQsLTE0LjQgMC44LC0yMC4yIDUuOSwtMTAuNiAxMC43LC0yMS42IDExLjksLTM2LjcgNCw0LjYgMy42LDE3LjQgNi4zLDIzLjkgMi42LDYuNSA4LjksMTMuNCA4LjksMjEgdiAxLjcgYyAwLDEwIC00LjUsMjEuMyAtMTQuMiwyMS4zIGggLTAuNyB2IDAgeiBtIC0wLjYsMS43IGggMS45IGMgMTAuMSwwIDE1LjQsLTExLjcgMTUuNCwtMjEuOSB2IC0zIGMgMCwtOS41IC03LjcsLTE1LjggLTkuOSwtMjQuMSAtMi40LC04LjkgLTEuNywtMjEuMiAtOS4xLC0yNS4xIDAsOC42IC0xLjMsMTYgLTMuNiwyMi40IC0xLjIsMy4zIC0yLjQsNi4yIC0zLjYsOS41IC0xLjIsMi43IC0zLjEsNS44IC00LjUsOC42IC0xLjQsMi43IC0zLDYuMSAtMi42LDEwLjUgMC40LDQuNCAwLjYsNy42IDEuOCwxMS4zIDIsNS45IDYuNywxMS45IDE0LjMsMTEuOSB6IE0gMTIyLDg3IHYgMC4yIGMgMCwyLjMgMi40LDUuNSAxLjcsOC42IC0xLjMsLTAuMSAtMy41LC0yLjIgLTQuMSwtMy4yIC0wLjUsLTAuOSAtMC45LC0xLjMgLTEuMiwtMi40IC0wLjMsLTAuNyAtMC42LC0yLjYgLTAuOCwtMyAtMS4yLDAuOSAtMS43LDQgLTEuNyw2LjEgMCwzLjIgMi42LDguNCA0LDEwLjQgMSwxLjMgMi41LDIuMyA0LjEsMy4xIDAuNiwwLjMgNC44LDIuNCA1LDIuNCAwLjksMCA3LjYsLTQuNCA4LjIsLTUuMSAwLjksLTEuMSAzLjUsLTggMy4zLC0xMC4xIGwgLTAuNywtNi44IGggLTAuNCBjIC0wLjEsMy41IC0yLjgsOC4yIC01LjksOC40IDAsMCAwLjMsLTMuNSAwLjUsLTQuNCAwLjMsLTEuMyAxLC0yLjkgMSwtNC4zIFYgODYuOCBjIDAsLTEgLTIuNywtNC42IC0zLjQsLTUuMSAwLDMuNyAtMC4yLDYgLTIuNyw3LjIgLTAuNywtMC42IC0xLjksLTEuNyAtMS45LC0zIHYgLTEuNCBjIDAsLTIuMyAyLjEsLTQuNyAyLjEsLTYuNSBsIDAsLTAuMiAtMC4zLC0xLjkgYyAtMSwwLjIgLTEuMSwyIC0xLjUsMi45IC0wLjUsMC45IC0xLjIsMS45IC0xLjgsMi42IC0wLjksMS4yIC0zLjUsNC4xIC0zLjUsNS43IHogbSAtNTYuNiwwIGMgMCwxLjMgMS45LDQuNyAxLjksNyB2IDEuOSBjIC0yLjYsLTAuMiAtNi4xLC01LjIgLTYuMSwtOC42IC0zLjQsMi40IC0wLjcsMTEuNCAwLjksMTQuMSAxLjUsMi42IDEuOCwzIDQuNCw0LjcgMC40LDAuMyA2LjEsMy4xIDYuMiwzLjEgMS4zLDAgNC4xLC0yLjUgNS4zLC0zLjIgMi41LC0xLjIgMi45LC0xLjcgNC4yLC00LjMgMC40LC0wLjkgMS42LC01LjQgMS45LC02LjYgMC40LC0yLjEgLTAuNSwtNS44IC0wLjUsLTcuOSBoIC0wLjUgYyAtMC4zLDMuNSAtMi45LDguNCAtNS45LDguNCAtMCwtMC45IC0wLjIsLTAuNSAtMC4yLC0xLjIgMCwtMiAxLjUsLTQuOSAxLjgsLTcuMSAwLjIsLTEuMiAtMi43LC01LjIgLTMuNSwtNS40IDEsMi4xIC0xLjEsNi4xIC0yLjcsNyAtMC45LC0wLjYgLTEuOSwtMi4yIC0xLjksLTMuNiB2IC0wLjQgYyAwLC0zLjcgMi43LC00LjYgMS43LC05LjEgLTAuNSwwLjQgLTAuOCwyIC0xLjQsMyAtMC43LDEgLTEsMS43IC0xLjgsMi43IC0wLjgsMSAtMy42LDQuMiAtMy42LDUuNSBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDAuMSwxMzUuNCBjIC03LjQsMCAtMTEuMywtNS40IC0xMy4xLC0xMS4xIC0yLjEsLTYuNyAtMi40LC0xNC40IDAuOCwtMjAuMiA1LjksLTEwLjYgMTAuNywtMjEuNiAxMS45LC0zNi43IDQsNC42IDMuNiwxNy40IDYuMywyMy45IDIuNiw2LjUgOC45LDEzLjQgOC45LDIxIHYgMS43IGMgMCwxMCAtNC41LDIxLjMgLTE0LjIsMjEuMyBoIC0wLjcgdiAwIHpcIn1dLGlbXCJBQy5JQy5GTEFNTUFCTEUgU09MSURcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2OC42LDEwMiBjIDAsLTIgMS45LC00LjIgMS45LC02LjMgdiAtMS41IGMgMCwtMC42IC0wLjEsLTAuNCAtMC40LC0wLjcgLTAuOCwzLjcgLTYuMSw5LjEgLTYuMSwxMC40IDAsMS42IDEuOSw0LjYgMS45LDguMiAtMi42LC0wLjIgLTUuOSwtNC45IC01LjksLTggLTAuOCwwLjkgLTEuNSwyLjYgLTEuNSw0LjMgMCw0LjQgMS43LDguMSAzLjUsMTAuNiAwLjgsMS4yIDcsNS4yIDguNyw1LjIgMS4xLDAgNi43LC0zLjcgNy4zLC00LjQgMC45LC0xLjIgMy4yLC02LjggMy4yLC04LjYgMCwtMS42IC0wLC02LjYgLTAuOSwtNy4yIC0xLjEsNC44IC0xLjUsNS45IC01LjQsOC4xIDAsLTQuMyAxLjMsLTUuNyAxLjMsLTguMiB2IC0wLjQgYyAwLC0wLjEgLTIuOCwtNC40IC0zLC00LjYgMCwyLjQgLTAuNyw2LjcgLTIuNiw2LjcgLTEsOGUtNCAtMiwtMi40IC0yLC0zLjcgeiBtIDYwLjMsLTAuNCBjIDAsLTEuNyAyLjIsLTQuNSAyLjIsLTYuMyAwLC0wLjcgLTAuMiwtMS42IC0wLjcsLTEuOSAtMC45LDMuNyAtNS45LDguOSAtNS45LDEwLjIgdiAwLjQgYyAwLDEuOSAxLjUsMy43IDEuNSw2LjEgdiAyLjIgYyAtMi4zLC0wLjYgLTUuNiwtNC45IC01LjcsLTggLTEsMC43IC0xLjUsMyAtMS41LDQuOCB2IDEuMSBjIDAsMi44IDIuNSw3LjcgMy44LDkuNSAyLDIuNyA2LjQsMy4xIDguNCw0LjggMi4xLC0xLjEgMy4xLC0xLjggNS4xLC0yLjkgMi42LC0xLjYgMi4yLC0xLjUgMy41LC00LjMgMC43LC0xLjQgMS43LC00LjUgMS44LC02LjIgMC4xLC0xLjUgLTAuMSwtNi40IC0wLjksLTcgLTAuOCwzLjUgLTIuMSw3LjEgLTUuNCw4IC0wLC0wLjcgLTAuMiwtMC43IC0wLjIsLTEuNSB2IC0wLjIgYyAwLC0xLjggMS43LC00LjkgMS41LC02LjQgLTAuMSwtMC44IC0yLjUsLTQuOCAtMywtNS4xIDAsMi44IC0wLjUsNi43IC0zLDYuNyAtMC40LC0xLjMgLTEuNSwtMSAtMS41LC0zLjkgeiBtIC0zNS42LDEuOSB2IC0yMCBsIDIwLC0wLjQgdiAxOS40IGwgLTIwLDEgeiBtIC0xMy45LC03LjYgMCwtMTYuOCAxMC44LDQgdiAxOS44IGMgLTEuMiwtMC43IC0xMC45LC02LjIgLTEwLjksLTcgeiBtIDEuNSwtMTguNCBjIDUuNywwIDExLjQsMCAxNy4yLDAgMi4xLDAgMTIuMSwzLjEgMTMuMiwzLjkgbCAtMy43LDAuMyBIIDkyLjYgYyAtMC45LDAgLTExLjEsLTMuNyAtMTEuNywtNC4xIHogbSAtMy41LC0xLjUgMCwxNC43IC0wLjMsNi43IGMgMi4yLDEuMiA1LjMsMyA3LjUsNC41IDEuOSwxLjIgNS41LDQgOC4xLDQgNy42LDAgMTUuMywtMS4xIDIzLjEsLTEuMSBsIC0wLC0yMy42IGMgLTEsLTAuNSAtMTQuOCwtNS40IC0xNS4yLC01LjQgbCAtMy45LC0wLjEgLTE5LjMsMC40IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDgwLjksNzcuNSBjIDUuNywwIDExLjQsMCAxNy4yLDAgMi4xLDAgMTIuMSwzLjEgMTMuMiwzLjkgbCAtMy43LDAuMyBIIDkyLjYgYyAtMC45LDAgLTExLjEsLTMuNyAtMTEuNywtNC4xIHogbSAtMS41LDE4LjQgMCwtMTYuOCAxMC44LDQgdiAxOS44IGMgLTEuMiwtMC43IC0xMC45LC02LjIgLTEwLjksLTcgeiBtIDEzLjksNy42IHYgLTIwIGwgMjAsLTAuNCB2IDE5LjQgbCAtMjAsMSB6XCJ9XSxpW1wiQUMuSUMuTk9OLUZMQU1NQUJMRSBHQVNcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5Mi43LDgxLjMgYyAwLC00LjYgMTQuNywtNC42IDE0LjcsMCB2IDU5LjQgYyAwLDEuNCAtNC43LDEuMyAtNi4zLDEuMyBoIC0yLjEgYyAtMS42LDAgLTYuMywwLjEgLTYuMywtMS4zIFYgODEuMyB6IG0gNS43LC0yMiBoIC03IHYgMy4yIGggNi43IHYgMy4zIGggLTQgdiAyLjEgaCA0IHYgNS43IGggLTQuOCB2IDQuOCBjIC0xLjEsMC4zIC0yLjEsMS43IC0yLjEsMy4xIHYgNTguNiBjIDAsMy41IDQsMy4zIDcuNiwzLjMgaCAyLjUgYyAzLjYsMCA3LjYsMC4yIDcuNiwtMy4zIFYgODEuOSBjIDAsLTMgLTEuOSwtMyAtMS45LC00IHYgLTQuNCBoIC01IHYgLTExLjEgaCA2LjcgdiAtMy4xIGggLTcuMiB2IC0yLjcgaCAtMy4xIHYgMi43IGwgLTRlLTQsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA5Mi43LDgxLjMgYyAwLC00LjYgMTQuNywtNC42IDE0LjcsMCB2IDU5LjQgYyAwLDEuNCAtNC43LDEuMyAtNi4zLDEuMyBoIC0yLjEgYyAtMS42LDAgLTYuMywwLjEgLTYuMywtMS4zIFYgODEuMyB6XCJ9XSxpW1wiQUMuSUMuT1JHQU5JQyBQRVJPWElERVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEzMi4xLDEyOC4yIHYgNi4yIGwgLTM2LjYsMi4yIHYgLTYuNyBsIDAuNiwwLjEgMzYsLTEuNyB6IG0gLTYzLjgsLTExLjEgYyAyLjYsMS43IDI2LjEsMTIuMSAyNi4xLDEzLjIgdiA1LjkgbCAtMC4xLDAuMiAtMjYsLTE0LjcgdiAtNC42IHogbSA2MS4xLDEwIGMgLTQuNywwIC0zMywyLjEgLTM0LjYsMS41IC0xLjgsLTAuNyAtMjMuOCwtMTEuNCAtMjQuNCwtMTIgMy44LDAgNy41LDAgMTEuMywwIDIuOSwwIDguOCwtMC44IDEwLDEuMSBsIC05LDAuNiAyLjEsMC43IHYgMC40IGggLTEuMiBsIC0xLjgsMC4yIGMgMiwxLjMgMTguMyw1LjIgMjIuNCw1LjIgaCAxLjkgYyA0LjgsMCA5LjIsLTEuMyAxMywtMS40IDAuNywwIDkuOSwzLjMgMTAuNCwzLjcgeiBtIC0yNS40LC0yMy4yIDEuMSw5LjQgNS40LC02LjggLTIuNSw4LjIgNy43LC00LjMgLTMuNyw1LjkgOC40LC0wLjggLTkuMiw0LjcgOC4xLDIuNiAtMTQuNCwxLjcgYyAtMy4zLDAuMiAtMTksLTMuNyAtMjAuNSwtNC44IGwgMTAuMywtMC42IC02LjIsLTQuNSA2LjgsMC4xIC0xLjcsLTUuOSA1LjEsNS4yIDAuNywtNy41IDIuNiwzLjkgMi4xLC02LjYgeiBtIDAuNywtMi4yIC0wLjEsLTAuNiBoIC0wLjMgbCAtMS44LDYuMiAtMC40LC0wIC0yLjQsLTMuNyAtMCwyLjEgLTAuNywtMS4xIC0wLjYsNi4yIC00LjksLTUuNCAwLjYsMi42IC0xLjUsLTEuMiAxLjgsNi4yIC0yLjUsMCAtNCwtMC4yIDEuNSwxLjEgLTIuNCwtMC4xIDEuNSwxLjQgaCAtMjEuMyBjIC0wLjEsMC41IC0wLjIsMC41IC0wLjIsMS4xIHYgNSBjIDAsMS42IDQuOCwzLjcgNi4yLDQuNCAyLjMsMS4zIDQuNiwyLjQgNi45LDMuOCA0LjQsMi43IDkuMiw1IDEzLjcsNy42IDEuOCwxLjEgNi44LDAuNSA5LjYsMC4yIDIuOCwtMC4zIDcuMiwtMC4yIDkuOSwtMC43IDIuOCwtMC41IDcsLTAuNCA5LjksLTAuNyAyLjcsLTAuNCA3LjQsLTAuNiAxMCwtMC43IHYgLTcuOSBjIDAsLTAuOSAtNS4zLC0yLjQgLTYuNCwtMi44IC0xLjYsLTAuNSAtNS43LC0xLjkgLTYuOCwtMi42IGwgMi45LC0wLjMgLTguNCwtMi4yIDAsLTAuNCA5LjIsLTQuNyAtMS41LDAuMiAxLjcsLTEuMSAtMTAsMSAzLjksLTYuNiAtOC4xLDQuNyAyLjksLTEwIC02LjQsOC40IC0xLjEsLTExLjEgLTAuNiwxLjkgeiBtIDEuMSwtNi4yIGMgLTUuNiwwIC05LjYsLTMuNCAtOS42LC05IHYgLTEuMSBjIDAsLTQuOCA5LC0xMi41IDksLTIxLjEgMi44LDMuMiAyLjIsNy42IDQuMywxMSAxLjIsMS45IDUuMyw3LjggNS4zLDkuOSB2IDEuMSBjIDAsNS4zIC0zLjcsOS4yIC05LDkuMiB6IG0gLTEwLjksLTEwIHYgMS4xIGMgMCwxMy43IDIxLjEsMTMuMiAyMS4xLDAuOCB2IC0yLjEgYyAwLC0zLjUgLTQuNSwtOC4zIC01LjksLTExLjcgLTIuMiwtNS4xIC0xLjEsLTguOCAtNi4yLC0xMS42IDAsMTEuMiAtOSwxNy42IC05LDIzLjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTA1LjcsOTUuNSBjIC01LjYsMCAtOS42LC0zLjQgLTkuNiwtOSB2IC0xLjEgYyAwLC00LjggOSwtMTIuNSA5LC0yMS4xIDIuOCwzLjIgMi4yLDcuNiA0LjMsMTEgMS4yLDEuOSA1LjMsNy44IDUuMyw5LjkgdiAxLjEgYyAwLDUuMyAtMy43LDkuMiAtOSw5LjIgeiBtIC0xLjgsOC40IDEuMSw5LjQgNS40LC02LjggLTIuNSw4LjIgNy43LC00LjMgLTMuNyw1LjkgOC40LC0wLjggLTkuMiw0LjcgOC4xLDIuNiAtMTQuNCwxLjcgYyAtMy4zLDAuMiAtMTksLTMuNyAtMjAuNSwtNC44IGwgMTAuMywtMC42IC02LjIsLTQuNSA2LjgsMC4xIC0xLjcsLTUuOSA1LjEsNS4yIDAuNywtNy41IDIuNiwzLjkgMi4xLC02LjYgeiBtIC0zNS42LDEzLjIgYyAyLjYsMS43IDI2LjEsMTIuMSAyNi4xLDEzLjIgdiA1LjkgbCAtMC4xLDAuMiAtMjYsLTE0LjcgdiAtNC42IHogbSA2My44LDExLjEgdiA2LjIgbCAtMzYuNiwyLjIgdiAtNi43IGwgMC42LDAuMSAzNiwtMS43IHogbSAtMi43LC0xLjEgYyAtNC43LDAgLTMzLDIuMSAtMzQuNiwxLjUgLTEuOCwtMC43IC0yMy44LC0xMS40IC0yNC40LC0xMiAzLjgsMCA3LjUsMCAxMS4zLDAgMi45LDAgOC44LC0wLjggMTAsMS4xIGwgLTksMC42IDIuMSwwLjcgdiAwLjQgaCAtMS4yIGwgLTEuOCwwLjIgYyAyLDEuMyAxOC4zLDUuMiAyMi40LDUuMiBoIDEuOSBjIDQuOCwwIDkuMiwtMS4zIDEzLC0xLjQgMC43LDAgOS45LDMuMyAxMC40LDMuNyB6XCJ9XSxpW1wiQUMuSUMuT1hJRElaRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MC45LDEzNS4zIDAsMC4yIDAsNC4yIDAsMC4yIDAuMiwwIDQwLjcsMCAwLjIsMCAwLC0wLjIgMCwtNC4yIDAsLTAuMiAtMC4yLDAgLTQwLjcsMCAtMC4yLDAgeiBtIDYuNSwtMjAuNyBjIDAsLTcuNCA2LjEsLTE0IDEzLjQsLTE0IGggMS4xIGMgNy41LDAgMTMuNiw2LjYgMTMuNiwxNCAwLDcuMSAtNi4yLDEzLjkgLTEzLjIsMTMuOSBoIC0xLjkgYyAtNi44LC0wIC0xMywtNi44IC0xMywtMTMuOSB6IG0gMTIuOCwtMzUuOSBjIC0wLjcsMCAtMi4xLC0yLjEgLTIuMywtMi45IC0wLjMsLTEuMiAtMC40LC0zIDAsLTQuNCAwLjUsLTIuMSAyLjgsLTUuOSAyLjgsLTcuNSAwLC0xLjEgLTAuMSwtMyAtMS4zLC0zLjEgLTEsNC40IC0yLjEsNC45IC00LjEsOCAtMSwxLjUgLTQuNyw1LjggLTQuNyw3LjMgdiAwLjQgYyAwLDIuNCAzLjEsOC4xIDIuNywxMC41IGwgLTAuMiwxLjcgYyAtMy41LC0wLjggLTguMSwtNy4zIC04LjEsLTEyIC0xLjQsMC4xIC0yLjUsNC40IC0yLjUsNi4xIHYgMi45IGMgMCw1LjcgMy4zLDguMyA0LjIsMTIgLTIuNywtMS40IC00LC0yLjIgLTUuOSwtNC40IC0xLjEsLTEuMiAtMy43LC01LjYgLTQuMSwtNS45IC0xLjEsMi40IDEuNywxMC4zIDIuNCwxMi4xIDAuNywxLjcgMS40LDMuNSAyLjMsNSAxLjEsMS44IDIuMiwyLjYgMy4yLDQuMSAwLDEuNyAtMC41LDIuNCAtMC42LDQuNyAtMCwxLjggLTAsMi42IDAuMiw0LjYgMC4yLDIuMSAyLjEsNi4xIDMuMiw3LjMgMi40LDIuNiAyLjQsMi44IDUuNiw0LjggMiwxLjMgNC45LDIuMiA4LjEsMi4yIGggMC42IGMgNi40LDAgMTEuNCwtMy41IDE0LjIsLTcuMiAzLjgsLTUuMiAzLjgsLTkuOSAyLjIsLTE2LjcgMy41LC02LjYgNS45LC05LjMgNS45LC0xOS43IHYgLTAuNCBsIC0wLjQsLTQgYyAtMC4xLDAgLTMuMyw2LjIgLTMuOCw3IC0xLDEuNSAtMy43LDQuOCAtNS43LDUgMC4xLC0zLjIgMi4xLC02LjIgMi4xLC05LjQgdiAtMi4yIGwgLTEuMSwtOCBjIC0xLDAuNyAtMS41LDUuOSAtMyw3LjcgLTAuNCwwLjUgLTUuNiw1LjUgLTUuNiwzLjYgdiAtMS43IGMgMCwtMy4xIDIuMSwtNi4zIDIuMSwtOSB2IC0xLjMgYyAwLC0wLjggLTMuOSwtNi41IC00LjYsLTYuOSAwLDIuMyAtMC4yLDQuNCAtMC43LDYuMiAtMC4zLDEuMSAtMiwzLjcgLTMsMy43IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDg3LjQsMTE0LjUgYyAwLC03LjQgNi4xLC0xNCAxMy40LC0xNCBoIDEuMSBjIDcuNSwwIDEzLjYsNi42IDEzLjYsMTQgMCw3LjEgLTYuMiwxMy45IC0xMy4yLDEzLjkgaCAtMS45IGMgLTYuOCwtMCAtMTMsLTYuOCAtMTMsLTEzLjkgelwifV0saVtcIkFDLklDLlJBRElPQUNUSVZFIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODMuNywxMzAuNCBjIC0xMC4xLC01LjYgLTE2LjYsLTE3IC0xNi40LC0yOC41IGwgMTcuOCwtMCBjIC0wLjIsNSAzLjEsMTAuNyA3LjUsMTMuMSBsIC05LDE1LjQgeiBtIDQ5LjEsLTI4LjIgYyAwLjIsMTEuNSAtNi40LDIyLjkgLTE2LjQsMjguNSBsIC05LC0xNS40IGMgNC40LC0yLjQgNy43LC04LjEgNy42LC0xMy4xIGwgMTcuOCwwIHogTSA4My41LDczLjggYyA5LjksLTUuOSAyMywtNS45IDMyLjksMCBsIC04LjksMTUuNSBjIC00LjMsLTIuNiAtMTAuOSwtMi42IC0xNS4xLDAgbCAtOC45LC0xNS41IHogbSAyNi41LDI4LjUgYyAwLDUuNSAtNC40LDkuOSAtOS45LDkuOSAtNS41LDAgLTkuOSwtNC40IC05LjksLTkuOSAwLC01LjUgNC40LC05LjkgOS45LC05LjkgNS41LDAgOS45LDQuNCA5LjksOS45IHpcIn1dLGlbXCJBQy5JQy5TUE9OVEFORU9VU0xZIENPTUJVU1RJQkxFIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAxLjIsMTI4LjQgLTIuMSwwIDAsMTIuNiAyLjEsMCB6IG0gMjYuNSwwLjYgLTguNywtOC42IC0xLjIsMS4yIDguNyw4LjcgeiBtIC00NSwtNy41IC0xLjMsLTEuMyAtOC44LDguOCAxLjMsMS40IHogbSA1NS41LC0xOS43IC0xMi4yLDAgMCwxLjkgMTIuMiwwIHogbSAtNjMuMywwIC0xMy4xLDAgMCwxLjkgMTIuOCwwIHogbSA1Mi44LC0yNS4zIC0xLjMsLTEuMiAtOSw4LjcgMS41LDEuNSB6IG0gLTQ2LjEsOS4xIDEuNCwtMS41IC05LjMsLTkuMiAtMCwwLjIgLTEuMiwxLjMgeiBtIDE5LjUsLTI2LjUgLTIuMSwwIDAsOS43IDIuMSwwIHogTSA5MS43LDg4IHYgMC42IGMgMCwwLjUgMS40LDQuMyAxLjcsNS4xIDAuNywyLjIgMC43LDMuNCAwLjcsNS43IC0xLjIsLTAuMSAtNC40LC0zIC01LjEsLTQgLTEuNywtMi41IC0xLjcsLTMuNCAtMi41LC02LjcgLTAuOSwwLjcgLTEuOSwzLjggLTEuOSw1LjUgdiAyLjMgYyAwLDUuNiAzLjYsOC40IDMuOCwxMS4xIC0wLjksLTAuMiAtNC44LC0zLjIgLTUuNCwtMy44IC0wLjcsLTAuOCAtMy4zLC01LjMgLTMuOCwtNS40IDAsMy45IDEuMSw2LjkgMi4xLDkuNyAwLjYsMS41IDEuMiwyLjkgMS43LDQuMiAwLjgsMi4yIDEuNCwyIDIuNiwzLjUgMi45LDMuNiA5LjQsOC4zIDE1LjcsOC4zIGggMC44IGMgMi4yLDAgNi40LC0xLjcgNy45LC0yLjYgMi40LC0xLjMgNC41LC0yLjcgNiwtNC44IDIuOCwtMy44IDUuMywtOS4zIDUuMywtMTYgdiAtMi43IGwgLTAuMiwtMi4zIGggLTAuNCBjIC0xLjEsNC43IC00LjIsOC40IC04LDEwLjUgMCwtMy42IDEuMywtNS4zIDEuOSwtOC40IDAuNCwtMi40IC0xLC02LjkgLTEsLTkuMiAtMC40LDAuMyAtMS4yLDUuNCAtMi41LDcgLTAuMywwLjQgLTUuMSw1LjIgLTUuMSwzLjEgdiAtMi4xIGMgMCwtMyAxLjksLTQuOCAxLjksLTguMiAwLC0wLjggLTMuNSwtNiAtNC4xLC02LjMgbCAwLjEsMC45IGMgMCwxLjIgLTAuNCw0LjEgLTAuNyw1IC0wLjIsMC41IC0yLjMsMyAtMi42LDMgLTEuMiwwIC0yLjUsLTIuOSAtMi41LC00LjQgdiAtMS4xIGMgMCwtMi45IDIuOCwtNi4xIDIuNiwtOCBsIC0wLjUsLTIuOSBjIC0wLjUsMC40IC0xLjIsMyAtMS42LDMuOSAtMC42LDEuMyAtMS40LDIuMiAtMi4yLDMuMiBDIDk1LjQsODIuNCA5MS43LDg3LjEgOTEuNyw4OCB6XCJ9XSxpW1wiQUMuSUMuVU5FWFBMT0RFRCBPUkROQU5DRVwiXT1hKFwiVVhPXCIpLGlbXCJBQy5JQy5UT1hJQyBJTkZFQ1RJT1VTIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA0LjYsMTE2LjIgYyAwLC0zLjYgMC45LC00LjYgMS41LC03LjMgbCAtMi41LC0xLjIgYyAtMi40LDIuMSAtNC40LDEuNiAtNi44LDAgbCAtMi41LDEuNCBjIDAuMiwyLjYgMiwzLjkgMS41LDguNyAtMC40LDMuMSAtMS4xLDUuOCAtMi42LDcuOCAtMi45LDMuOSAtNyw3LjQgLTEzLjcsNy40IGggLTEgYyAtNC43LDAgLTEwLjIsLTMuMiAtMTIsLTYgbCAtMS4yLDAuNiBjIDMuMyw0LjkgMTEuNCwxMCAxOS44LDEwIGggMC4yIGMgNi40LDAgMTAuOSwtMi43IDE0LjgsLTUuMyAzLjcsMi41IDcuNiw1IDEzLjgsNSBoIDMgYyAzLjgsMCA4LjIsLTEuNiAxMC42LC0zLjIgMS44LC0xLjIgNi43LC00LjUgNy4yLC02LjYgLTEuMSwtMC4zIC0wLjUsLTAuNSAtMS4zLC0wLjUgLTAuNSwwIC0xLjcsMS45IC0yLjIsMi4zIC0wLjgsMC42IC0xLjgsMS4xIC0yLjYsMS42IC0xLjQsMC45IC00LjcsMS44IC03LDEuOCBoIC0xLjggYyAtNy45LDAgLTE1LjMsLTcuNyAtMTUuMywtMTUuOCB2IC0wLjggeiBtIDIuMywzLjUgMi41LDQuMyBjIDMuMiwtMC44IDcuNywtNS4yIDkuMywtNy44IDIuMiwtMy43IDMuNSwtNy44IDMuNSwtMTMuOCBoIC01LjUgYyAwLjEsNS4yIC0wLjEsNy4yIC0yLjUsMTAuOCAtMS4yLDEuOCAtMS43LDIuMSAtMy4yLDMuNiAtMSwxIC0zLjYsMi4yIC00LjEsMi45IHogbSAtMjguNiwtMTMuOCBjIDAsNy40IDYuOCwxNi43IDEyLjUsMTggbCAyLjMsLTQuNSBjIC02LjUsLTMuNCAtOS41LC04IC05LjUsLTE3LjEgaCAtNS4zIHYgMy41IHogbSAtMi41LC0xNyB2IDEgYyAwLDAuNSAtNSwzLjIgLTUuOCwzLjggLTEuNiwxLjEgLTMuNSwzLjIgLTQuNyw0LjggLTIuOCwzLjYgLTQuOCw4LjEgLTQuOCwxNC4yIDAsNC40IDEsNiAxLjgsOS40IGwgMS4yLC0wLjYgYyAtMC4xLC0xLjUgLTAuOCwtMi4zIC0wLjgsLTQgdiAtMiBjIDAsLTcuOCA3LjksLTE1LjYgMTYsLTE1LjYgaCAxLjggYyAyLjYsMCA1LjksMS4zIDcuNSwyLjIgMi4yLDEuMyAzLjYsMy42IDUuMyw0LjggbCAyLjMsLTEgdiAtMS44IGMgMCwtMiAxLjYsLTMuOSAzLjMsLTQuMyB2IC0zIGMgLTcuNiwtMC4yIC0xNS4zLC03LjggLTE1LjMsLTE1LjUgdiAtMS41IGMgMCwtNC4xIDIuMSwtOC42IDQuMiwtMTAuNiAxLjMsLTEuMiAyLjUsLTIuMyA0LC0zLjIgMC44LC0wLjUgNS4xLC0xLjUgNS4xLC0yLjUgdiAtMSBjIC02LjYsMS42IC0xMS43LDMuOCAtMTUuNCw4LjUgLTQuMyw1LjUgLTUuNyw5IC01LjcsMTcuOSBsIDAsMCB6IG0gMjcuNiwtMjUuNCBjIDAsMC42IDQuMiwyLjEgNSwyLjUgMS4yLDAuNiAzLjUsMi40IDQuMiwzLjUgMi4xLDIuOSA0LjMsNiA0LjMsMTEgMCw4LjIgLTcuNCwxNi4zIC0xNS42LDE2LjMgdiAzIGMgMi4zLDAuMiA0LjQsMy40IDMuMyw1LjggMC42LDAuMiAyLjUsMS4yIDIuNSwxLjIgMC43LDAgNSwtNyAxNC4zLC03IGggMC4yIGMgNC41LDAgOSwyLjYgMTEuMSw1IDEuNywxLjkgNS4zLDcuNiA0LjgsMTEuNCBsIC0wLjgsNS41IDEuMiwwLjYgYyAwLjEsLTAuOSAwLjgsLTIuMyAxLjEsLTMuNiAwLjMsLTEuMiAwLjQsLTMgMC40LC00LjQgdiAtMy4zIGMgMCwtOC40IC04LjMsLTE4LjggLTE1LC0yMC4zIDAsLTUgMC40LC02LjQgLTAuOSwtMTAuOSAtMC45LC0yLjggLTIuNiwtNi40IC00LjMsLTguMyAtNS4xLC01LjMgLTcuNSwtNyAtMTUuOSwtOSB2IDEgbCAtNGUtNCwwIHogbSAtMTUuOCwyMi42IDIuOCw0LjggYyAzLC0xLjYgNC44LC0zLjMgOS41LC0zLjMgaCAwLjUgYyA1LjgsMCA2LjksMi42IDkuNywzLjIgbCAyLjYsLTQuNyBjIC05LjUsLTUgLTE1LjcsLTUgLTI1LjEsMCB6XCJ9XSxpW1wiQUMuSUMuVE9YSUMgR0FTXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTAuMiwxMDIuMyBjIDAuNiwtMS45IDUuNywtMS45IDExLjMsLTAgNS42LDEuOSA5LjYsNC45IDksNi44IC0wLjYsMS45IC01LjcsMS45IC0xMS4zLDAgLTUuNiwtMS45IC05LjYsLTQuOSAtOSwtNi44IHogbSA3LjcsLTIyLjIgYyAxMGUtNywzLjcgLTEuNyw2LjcgLTMuOCw2LjcgLTIuMSwtMmUtNiAtMy44LC0zIC0zLjgsLTYuNyAyZS02LC0zLjcgMS43LC02LjcgMy44LC02LjcgMi4xLDAgMy44LDMgMy44LDYuNyB6IG0gMTcsMi4yIGMgMCw0LjEgLTIuOCw3LjMgLTYuMyw3LjMgLTMuNSwyZS02IC02LjMsLTMuMyAtNi4zLC03LjMgMCwtNC4xIDIuOCwtNy4zIDYuMywtNy4zIDMuNSwwIDYuMywzLjMgNi4zLDcuMyB6IG0gLTcuOSw0OS42IGMgLTEsMi45IC04LjUsMi45IC0xNi42LDAgLTguMiwtMi45IC0xMy45LC03LjYgLTEyLjksLTEwLjUgMSwtMi45IDguNSwtMi45IDE2LjYsLTAgOC4yLDIuOSAxMy45LDcuNiAxMi45LDEwLjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTA3LjUgNjQuMyBDIDEwMi4yIDY0LjIgOTYuOSA2Ny4xIDkyLjggNzEuNiBDIDkwLjYgNzMuNiA4OS4yIDc2LjggODkuMiA4MC40IEMgODkuMiA4MyA5MCA4NS40IDkxLjIgODcuMyBDIDkyLjEgODkuOSA5Mi43IDkxLjggOTIuNyA5NC41IEwgOTIuNCA5Ni43IEwgOTAuNyAxMDEuNiBDIDkyLjMgMTAwLjUgOTYuNyAxMDAuNyAxMDEuNSAxMDIuMyBDIDEwNi42IDEwNCAxMTAuNCAxMDYuNyAxMTAuNSAxMDguNiBMIDExMiAxMDQuMiBDIDExNS45IDEwNCAxMjAuNSA5Ni45IDEyMi43IDg3LjYgQyAxMjQuOSA3Ny45IDEyMy41IDY5LjMgMTE5LjggNjcuOSBDIDExOC40IDY2LjYgMTE2LjEgNjUuNSAxMTIuOCA2NS4zIEMgMTExLjEgNjQuNiAxMDkuMyA2NC4zIDEwNy41IDY0LjMgeiBNIDk0LjEgNzMuNCBDIDk0LjQgNzMuNCA5NC42IDczLjQgOTQuOCA3My41IEMgOTUuMSA3My42IDk1LjMgNzMuOCA5NS42IDczLjkgQyA5Ni4yIDc0LjQgOTYuOCA3NS4zIDk3LjIgNzYuMyBDIDk3LjUgNzcuMSA5Ny43IDc3LjkgOTcuOCA3OC43IEMgOTcuOSA3OS4yIDk3LjkgNzkuNiA5Ny45IDgwLjEgQyA5Ny45IDgwLjUgOTcuOSA4MSA5Ny44IDgxLjQgQyA5Ny43IDgyLjMgOTcuNSA4My4xIDk3LjIgODMuOCBDIDk2LjkgODQuNyA5Ni40IDg1LjQgOTUuOSA4NS45IEMgOTUuNiA4Ni4yIDk1LjIgODYuNSA5NC44IDg2LjYgQyA5NC43IDg2LjYgOTQuNiA4Ni43IDk0LjUgODYuNyBDIDk0LjMgODYuNyA5NC4yIDg2LjcgOTQuMSA4Ni43IEMgOTMuOCA4Ni43IDkzLjYgODYuNyA5My4zIDg2LjYgQyA5MyA4Ni41IDkyLjYgODYuMiA5Mi4zIDg1LjkgQyA5Mi4yIDg1LjggOTIuMSA4NS43IDkyIDg1LjYgQyA5MS42IDg1LjEgOTEuMiA4NC41IDkxIDgzLjggQyA5MC44IDgzLjQgOTAuNyA4My4xIDkwLjYgODIuNyBDIDkwLjQgODEuOSA5MC4zIDgxIDkwLjMgODAuMSBDIDkwLjMgNzkuMSA5MC40IDc4LjMgOTAuNiA3Ny41IEMgOTAuNyA3Ny4xIDkwLjggNzYuNyA5MSA3Ni4zIEMgOTEuMiA3NS42IDkxLjYgNzUgOTIgNzQuNSBDIDkyLjIgNzQuMyA5Mi40IDc0LjEgOTIuNiA3My45IEMgOTIuOSA3My44IDkzLjEgNzMuNiA5My4zIDczLjUgQyA5My42IDczLjQgOTMuOCA3My40IDk0LjEgNzMuNCB6IE0gMTA4LjYgNzUgQyAxMTAuNCA3NSAxMTIuMSA3NS45IDExMy4zIDc3LjMgQyAxMTMuMyA3Ny40IDExMy40IDc3LjUgMTEzLjUgNzcuNiBDIDExMy41IDc3LjYgMTEzLjUgNzcuNiAxMTMuNSA3Ny43IEMgMTEzLjYgNzcuOCAxMTMuNyA3OCAxMTMuOCA3OC4yIEMgMTEzLjggNzguMyAxMTMuOSA3OC4zIDExMy45IDc4LjQgQyAxMTQgNzguNSAxMTQgNzguNSAxMTQgNzguNiBDIDExNC4xIDc4LjcgMTE0LjIgNzguOCAxMTQuMiA3OSBDIDExNC4zIDc5LjEgMTE0LjMgNzkuMyAxMTQuNCA3OS40IEMgMTE0LjQgNzkuNSAxMTQuNSA3OS41IDExNC41IDc5LjYgQyAxMTQuNSA3OS43IDExNC42IDc5LjkgMTE0LjYgODAgQyAxMTQuNiA4MC4xIDExNC42IDgwLjIgMTE0LjcgODAuMyBDIDExNC43IDgwLjQgMTE0LjcgODAuNiAxMTQuOCA4MC44IEMgMTE0LjkgODEuMyAxMTQuOSA4MS44IDExNC45IDgyLjMgQyAxMTQuOSA4NC42IDExNCA4Ni42IDExMi42IDg4IEMgMTEyIDg4LjYgMTExLjMgODkgMTEwLjUgODkuMyBDIDExMC4zIDg5LjQgMTEwLjEgODkuNSAxMDkuOSA4OS41IEMgMTA5LjUgODkuNiAxMDkgODkuNyAxMDguNiA4OS43IEMgMTA4LjIgODkuNyAxMDcuNyA4OS42IDEwNy4zIDg5LjUgQyAxMDcuMyA4OS41IDEwNy4zIDg5LjUgMTA3LjMgODkuNSBDIDEwNy4xIDg5LjUgMTA2LjkgODkuNCAxMDYuNyA4OS4zIEMgMTA1LjkgODkgMTA1LjIgODguNiAxMDQuNiA4OCBDIDEwNCA4Ny40IDEwMy41IDg2LjYgMTAzLjEgODUuOCBDIDEwMi45IDg1LjQgMTAyLjcgODUgMTAyLjYgODQuNSBDIDEwMi41IDg0LjMgMTAyLjUgODQgMTAyLjQgODMuOCBDIDEwMi40IDgzLjUgMTAyLjQgODMuMyAxMDIuMyA4My4xIEMgMTAyLjMgODIuOCAxMDIuMyA4Mi42IDEwMi4zIDgyLjMgQyAxMDIuMyA4MiAxMDIuMyA4MS44IDEwMi4zIDgxLjUgQyAxMDIuMyA4MS41IDEwMi40IDgxLjUgMTAyLjQgODEuNCBDIDEwMi40IDgxIDEwMi41IDgwLjUgMTAyLjYgODAuMSBDIDEwMi42IDgwLjEgMTAyLjYgODAuMSAxMDIuNiA4MCBDIDEwMy40IDc3LjEgMTA1LjggNzUgMTA4LjYgNzUgeiBNIDg4LjggMTA0IEMgODYuNiAxMDQgODQuOCAxMDQuNCA4My45IDEwNS4yIEwgODMuOCAxMDUuMiBMIDgzLjcgMTA1LjMgQyA4My40IDEwNS42IDgzLjIgMTA1LjkgODMuMSAxMDYuMiBDIDgzIDEwNi41IDgzIDEwNi44IDgzIDEwNy4yIEwgNzguMSAxMjAuNSBDIDgwLjIgMTE4LjUgODYuOSAxMTguNyA5NC4yIDEyMS4zIEMgMTAxLjIgMTIzLjggMTA2LjQgMTI3LjcgMTA3LjEgMTMwLjYgTCAxMTEuOCAxMTcuOCBDIDExMi4yIDExNy41IDExMi41IDExNy4yIDExMi43IDExNi44IEMgMTEzLjcgMTEzLjggMTA3LjkgMTA5LjEgOTkuOCAxMDYuMiBDIDk1LjcgMTA0LjggOTEuOCAxMDQgODguOCAxMDQgeiBNIDgyIDEyMC44IEMgNzkgMTIwLjggNzYuOSAxMjEuNSA3Ni40IDEyMyBDIDc1LjQgMTI1LjkgODEuMSAxMzAuNyA4OS4zIDEzMy42IEMgOTcuNCAxMzYuNSAxMDQuOSAxMzYuNSAxMDUuOSAxMzMuNiBDIDEwNyAxMzAuNiAxMDEuMiAxMjUuOSA5MyAxMjMgQyA4OSAxMjEuNSA4NSAxMjAuOCA4MiAxMjAuOCB6IE0gODYuMSAxMjUuNiBDIDg3LjQgMTI1LjUgODkuNCAxMjUuOSA5MS41IDEyNi42IEMgOTQuOCAxMjcuOCA5Ny4yIDEyOS42IDk2LjkgMTMwLjYgQyA5Ni41IDEzMS42IDkzLjUgMTMxLjUgOTAuMSAxMzAuMyBDIDg2LjggMTI5LjEgODQuNCAxMjcuMyA4NC43IDEyNi4zIEMgODQuOSAxMjUuOSA4NS40IDEyNS43IDg2LjEgMTI1LjYgeiBcIn1dLGlbXCJBQy5JQy5BRlRFUlNIT0NLXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTksNjIuNSAtMCwwIC0wLDAgLTAuOSwwIC0wLDAgLTAsMCAtMC45LDAuMSAtMCwwIC0wLDAgLTAuOSwwLjEgLTAsMCAtMCwwIC0wLjksMC4xIC0wLDAgLTAsMCAtMC45LDAuMSAtMCwwIC0wLDAgLTAuOSwwLjEgLTAsMCAtMCwwIC0wLjksMC4yIC0wLDAgLTAsMCAtMC43LDAuMSAwLjYsMi43IDAuNywtMC4xIDAsLTAgMC44LC0wLjEgMCwtMCAwLjgsLTAuMSAwLDAgMC44LC0wLjEgMCwwIDAuOSwtMC4xIDAsMCAwLjksLTAuMSAwLDAgMC45LC0wLjEgMCwwIDAuOSwtMCAwLDAgMC45LC0wIDAsMCAwLDAgMC45LDAgMCwwIDAuOSwwIDAsMCAwLjEsMCAwLjIsLTIuOCAtMC4xLC0wIC0wLDAgLTAsMCAtMC45LC0wIC0wLDAgLTAsMCAtMSwtMCAtMCwwIC0wLDAgeiBtIDguOCwzLjYgMC4yLDAgMCwwIDAuOCwwLjIgMCwwIDAuOCwwLjIgMCwwIDAuOCwwLjIgMCwwIDAuOCwwLjMgMCwwIDAsMCAwLjgsMC4zIDAsMCAwLjgsMC4zIDAsMCAwLjgsMC4zIDAsMCAwLjgsMC4zIDAsMCAwLjgsMC4zIDAsMCAwLjgsMC40IDAsMCAwLDAgMC43LDAuNCAwLDAgMC4xLDAgMS4zLC0yLjUgLTAuMSwtMC4xIC0wLC0wIC0wLDAgLTAuOCwtMC40IC0wLC0wIC0wLDAgLTAuOCwtMC40IC0wLDAgLTAsLTAgLTAuOCwtMC40IC0wLC0wIC0wLDAgLTAuOCwtMC40IC0wLDAgLTAsLTAgLTAuOCwtMC4zIC0wLC0wIC0wLDAgLTAuOCwtMC4zIC0wLC0wIC0wLDAgLTAuOCwtMC4zIC0wLDAgLTAsLTAgLTAuOSwtMC4zIC0wLDAgLTAsMCAtMC45LC0wLjMgLTAsMCAtMCwwIC0wLjksLTAuMiAtMCwwIC0wLC0wIC0wLjksLTAuMiAtMCwwIC0wLDAgLTAuMiwtMC4xIHogbSAtMjIuNywtMC43IC0wLDAgLTAsMCAtMC44LDAuNCAtMCwwIC0wLDAgLTAuOCwwLjQgLTAsMCAtMCwwIC0wLjgsMC40IC0wLDAgLTAsMCAtMC44LDAuNCAtMCwwIC0wLDAgLTAuOCwwLjQgLTAsMCAtMCwwIC0wLjgsMC41IC0wLDAgLTAsMCAtMC44LDAuNSAtMCwwIC0wLDAgLTAuNywwLjUgLTAsMCAtMCwwIC0wLjcsMC41IC0wLDAgLTAsMCAtMC43LDAuNSAtMCwwIC0wLDAgLTAuNywwLjUgLTAsMCAtMCwwIC0wLjEsMC4xIDEuNywyLjIgMC4xLC0wLjEgMCwtMCAwLjcsLTAuNSAwLC0wIDAuNywtMC41IDAsLTAgMC43LC0wLjUgMCwtMCAwLjcsLTAuNSAwLC0wIDAuNywtMC40IDAsLTAgMC43LC0wLjQgMCwtMCAwLjcsLTAuNCAwLC0wIDAuNywtMC40IDAsLTAgMCwwIDAuOCwtMC40IDAsLTAgMC44LC0wLjMgMCwtMCAwLjgsLTAuMyAwLC0wIDAuMywtMC4xIC0xLC0yLjYgeiBtIDM2LjksNy4zIDAuNiwwLjUgMCwwIDAuNiwwLjUgMCwwIDAuNiwwLjUgMCwwIDAuNiwwLjUgMCwwIDAuNiwwLjYgMCwwIDAsMCAwLjYsMC42IDAsMCAwLjYsMC42IDAsMCAwLjUsMC42IDAsMCAwLjUsMC42IDAsMCAwLjUsMC42IDAsMCAwLjUsMC42IDAsMCAwLjQsMC41IDIuMywtMS43IC0wLjQsLTAuNiAtMCwtMCAwLC0wIC0wLjYsLTAuNyAtMCwtMCAwLC0wIC0wLjYsLTAuNyAtMCwtMCAtMCwtMCAtMC42LC0wLjcgLTAsLTAgLTAsLTAgLTAuNiwtMC43IC0wLC0wIC0wLC0wIC0wLjYsLTAuNiAtMCwtMCAtMCwtMCAtMC42LC0wLjYgLTAsLTAgLTAsLTAgLTAuNiwtMC42IC0wLC0wIC0wLDAgLTAuNywtMC42IC0wLC0wIC0wLDAgLTAuNywtMC42IC0wLC0wIC0wLC0wIC0wLjcsLTAuNiAtMCwtMCAtMCwtMCAtMC42LC0wLjUgeiBtIC01MSwyLjcgLTAsMCAtMCwwIC0wLjYsMC43IC0wLDAgLTAsMCAtMC42LDAuNyAwLDAgLTAsMCAtMC42LDAuNyAwLDAgLTAsMCAtMC41LDAuNyAtMCwwIC0wLDAgLTAuNSwwLjcgLTAsMCAtMCwwIC0wLjUsMC43IC0wLDAgMCwwIC0wLjUsMC43IC0wLDAgMCwwIC0wLjUsMC44IDAsMCAtMCwwIC0wLjQsMC44IC0wLDAgMCwwIC0wLjQsMC44IDAsMCAtMCwwIC0wLjMsMC42IDIuNSwxLjMgMC4zLC0wLjYgMCwtMCAwLjQsLTAuNyAwLC0wIDAuNCwtMC43IDAsLTAgMC40LC0wLjcgMCwtMCAwLjQsLTAuNyAwLC0wIDAuNSwtMC43IDAsLTAgMC41LC0wLjcgMCwtMCAwLjUsLTAuNyAwLC0wIDAuNSwtMC42IDAsLTAgMC41LC0wLjYgMCwtMCAwLjUsLTAuNiAwLC0wIDAuNSwtMC41IC0yLjEsLTEuOSB6IG0gNjAuOSw5LjQgMC4xLDAuMSAwLDAgMCwwIDAuMywwLjcgMCwwIDAuMywwLjcgMCwwIDAuMywwLjggMCwwIDAuMywwLjggMCwwIDAuMywwLjggMCwwIDAsMCAwLjMsMC44IDAsMCAwLjIsMC44IDAsMCAwLjIsMC44IDAsMCAwLjIsMC44IDAsMCAwLjIsMC44IDAsMCAwLjIsMC44IDAsMCAwLDAuMiAyLjgsLTAuNSAtMCwtMC4zIC0wLC0wIDAsLTAgLTAuMiwtMC45IDAsLTAgMCwtMCAtMC4yLC0wLjkgMCwtMCAtMCwtMCAtMC4yLC0wLjkgMCwtMCAtMCwtMCAtMC4yLC0wLjkgMCwtMCAtMCwtMCAtMC4zLC0wLjggLTAsLTAgMCwtMCAtMC4zLC0wLjggMCwtMCAtMCwtMCAtMC4zLC0wLjggMCwtMCAtMCwtMCAtMC4zLC0wLjggLTAsLTAgMCwtMCAtMC4zLC0wLjggMCwtMCAtMCwtMCAtMC4zLC0wLjggLTAsLTAgLTAsLTAgLTAuNCwtMC44IC0wLC0wIDAsLTAgLTAuMSwtMC4yIHogbSAtNjguOCw0LjkgLTAsMCAwLDAgLTAuMiwwLjkgLTAsMCAwLDAgLTAuMiwwLjkgLTAsMCAwLDAgLTAuMiwwLjkgMCwwIDAsMCAtMC4yLDAuOSAwLDAgLTAsMCAtMC4xLDAuOSAwLDAgMCwwIC0wLjEsMC45IC0wLDAgMCwwIC0wLjEsMC45IDAsMCAtMCwwIC0wLjEsMC45IDAsMCAwLDAgLTAuMSwwLjkgMCwwIDAsMCAtMCwwLjkgMCwwIDAsMCAtMCwwLjkgMCwwIDAsMCAwLDAgMS40LC0wIDAuMywwIDEuMSwwIDAsLTAgMCwtMC45IDAsLTAgMCwtMC45IC0wLDAgMC4xLC0wLjggMCwtMCAwLjEsLTAuOSAtMCwwIDAuMSwtMC45IDAuMSwtMC45IC0wLDAgMC4xLC0wLjggMCwtMCAwLjIsLTAuOCAwLC0wIDAuMiwtMC44IDAsLTAgMC4yLC0wLjggMCwtMCAwLjIsLTAuOCAwLC0wIDAuMSwtMC4yIC0yLjcsLTAuOCB6IG0gNzMsMTAuMyAtMC42LDAgMCwwIDAsMCAtMCwwLjkgMCwwIC0wLDAuOSAwLDAgLTAuMSwwLjggMCwwIC0wLjEsMC45IDAsMCAtMC4xLDAuOSAtMC4xLDAuOSAwLDAgLTAuMSwwLjggMCwwIC0wLjIsMC44IC0wLDAgLTAuMiwwLjggLTAsMCAtMC4yLDAuOCAwLDAgLTAuMiwwLjggLTAsMCAtMC4xLDAuMiAyLjcsMC44IDAuMSwtMC4yIDAsLTAgMCwtMCAwLjIsLTAuOSAwLC0wIDAsLTAgMC4yLC0wLjkgMCwtMCAwLC0wIDAuMiwtMC45IDAsLTAgMCwtMCAwLjIsLTAuOSAwLC0wIDAsLTAgMC4xLC0wLjkgMCwtMCAwLC0wIDAuMSwtMC45IDAsLTAgMCwtMCAwLjEsLTAuOSAwLC0wIDAsLTAgMC4xLC0wLjkgMCwtMCAwLC0wIDAuMSwtMC45IDAsLTAgMCwtMCAwLC0wLjkgMCwtMCAwLC0wIDAsLTAuOSAtMS40LC0wIDEuNCwtMCAwLC0wIHogbSAtNzMuOSw2LjQgMCwwLjMgMCwwIDAsMCAwLjIsMC45IDAsMCAwLDAgMC4yLDAuOSAwLDAgMCwwIDAuMiwwLjkgMCwwIDAsMCAwLjIsMC45IDAsMCAwLDAgMC4zLDAuOCAwLDAgMCwwIDAuMywwLjggMCwwIDAsMCAwLjMsMC44IDAsMCAwLDAgMC4zLDAuOCAwLDAgMCwwIDAuMywwLjggMCwwIDAsMCAwLjMsMC44IDAsMCAwLDAgMC40LDAuOCAwLDAgMCwwIDAuMSwwLjIgMi41LC0xLjMgLTAuMSwtMC4xIC0wLC0wIC0wLjMsLTAuNyAtMCwtMCAtMC4zLC0wLjcgLTAsLTAgLTAuMywtMC44IC0wLC0wIC0wLjMsLTAuOCAtMCwtMCAtMC4zLC0wLjggLTAsLTAgMCwtMCAtMC4zLC0wLjggLTAsLTAgLTAuMiwtMC44IC0wLC0wIC0wLjIsLTAuOCAwLC0wIC0wLjIsLTAuOCAtMCwtMCAtMC4yLC0wLjggLTAsLTAgLTAuMiwtMC44IDAsLTAgLTAsLTAuMiB6IG0gNjkuNCw5LjQgLTAsMCAtMC40LDAuNyAtMCwwIC0wLjQsMC43IC0wLDAgLTAuNCwwLjcgLTAsMCAtMC40LDAuNyAtMCwwIC0wLjUsMC43IC0wLDAgLTAuNSwwLjcgLTAsMCAtMC41LDAuNyAtMCwwIC0wLjUsMC42IC0wLDAgLTAuNSwwLjYgLTAsMCAtMC41LDAuNiAtMCwwIC0wLjUsMC42IDIuMSwxLjkgMC41LC0wLjYgMCwtMCAwLC0wIDAuNiwtMC43IDAsLTAgMCwtMCAwLjYsLTAuNyAwLC0wIDAsLTAgMC42LC0wLjcgMCwtMCAwLC0wIDAuNSwtMC43IDAsLTAgMCwtMCAwLjUsLTAuNyAwLC0wIDAsLTAgMC41LC0wLjcgMCwtMCAwLC0wIDAuNSwtMC43IDAsLTAgMCwtMCAwLjUsLTAuOCAwLC0wIDAsLTAgMC40LC0wLjggMCwtMCAwLC0wIDAuNCwtMC44IDAsLTAgMCwtMCAwLjMsLTAuNiAtMi41LC0xLjMgeiBtIC02Mi44LDYuMSAwLjQsMC42IDAsMCAwLDAgMC42LDAuNyAwLDAgMCwwIDAuNiwwLjcgMCwwIDAsMCAwLjYsMC43IDAsMCAwLDAgMC42LDAuNyAwLDAgMCwwIDAuNiwwLjYgMCwwIDAsMCAwLjYsMC42IDAsMCAwLDAgMC42LDAuNiAwLDAgMCwwIDAuNywwLjYgMCwwIDAsMCAwLjcsMC42IDAsMCAwLDAgMC43LDAuNiAwLDAgMCwwIDAuNiwwLjUgMS43LC0yLjIgLTAuNiwtMC41IC0wLC0wIC0wLjYsLTAuNSAtMCwtMCAtMC42LC0wLjUgLTAsLTAgLTAuNiwtMC41IC0wLC0wIC0wLjYsLTAuNiAtMCwtMCAtMCwtMCAtMC42LC0wLjYgLTAsLTAgLTAuNiwtMC42IC0wLC0wIC0wLjUsLTAuNiAtMCwtMCAtMC41LC0wLjYgLTAsLTAgLTAuNSwtMC42IC0wLC0wIC0wLjUsLTAuNiAtMCwtMCAtMC40LC0wLjUgeiBtIDUzLjEsNS40IC0wLDAgLTAuNywwLjUgLTAsMCAtMC43LDAuNSAtMCwwIC0wLjcsMC41IC0wLDAgLTAuNywwLjUgLTAsMCAtMC43LDAuNCAtMCwwIC0wLjcsMC40IC0wLDAgLTAuNywwLjQgLTAsMCAtMC43LDAuNCAtMCwwIC0wLDAgLTAuOCwwLjQgLTAsMCAtMC44LDAuMyAtMCwwIC0wLjgsMC4zIC0wLDAgLTAuMywwLjEgMSwyLjYgMC40LC0wLjEgMCwtMCAwLDAgMC44LC0wLjQgMCwwIDAsLTAgMC44LC0wLjQgMCwtMCAwLDAgMC44LC0wLjQgMCwwIDAsLTAgMC44LC0wLjQgMCwwIDAsLTAgMC44LC0wLjQgMCwtMCAwLDAgMC44LC0wLjUgMCwwIDAsLTAgMC44LC0wLjUgMCwtMCAwLDAgMC43LC0wLjUgMCwwIDAsLTAgMC43LC0wLjUgMCwtMCAwLDAgMC43LC0wLjUgMCwtMCAwLC0wIDAuNywtMC41IDAsLTAgMCwtMCAwLjEsLTAuMSAtMS43LC0yLjIgeiBtIC00MC40LDUuNiAwLjEsMC4xIDAsMCAwLDAgMC44LDAuNCAwLDAgMCwwIDAuOCwwLjQgMCwwIDAsMCAwLjgsMC40IDAsMCAwLDAgMC44LDAuNCAwLDAgMCwwIDAuOCwwLjMgMCwwIDAsMCAwLjgsMC4zIDAsMCAwLDAgMC44LDAuMyAwLDAgMCwwIDAuOSwwLjMgMCwwIDAsMCAwLjksMC4zIDAsMCAwLDAgMC45LDAuMiAwLDAgMCwwIDAuOSwwLjIgMCwwIDAsMCAwLjIsMC4xIDAuNiwtMi43IC0wLjIsLTAgLTAsLTAgLTAuOCwtMC4yIC0wLC0wIC0wLjgsLTAuMiAtMCwtMCAtMC44LC0wLjIgLTAsLTAgLTAuOCwtMC4zIC0wLC0wIC0wLDAgLTAuOCwtMC4zIDAsLTAgLTAuOCwtMC4zIC0wLC0wIC0wLjgsLTAuMyAtMCwtMCAtMC44LC0wLjMgLTAsLTAgLTAuOCwtMC4zIC0wLC0wIC0wLjgsLTAuNCAtMCwwIC0wLC0wIC0wLjcsLTAuNCAtMCwtMCAtMC4xLC0wIHogbSAyNS42LDEuMSAtMCwwIC0wLjgsMC4xIC0wLDAgLTAuOCwwLjEgLTAsMCAtMC44LDAuMSAwLC0wIC0wLjksMC4xIDAsLTAgLTAuOSwwLjEgLTAsMCAtMC45LDAuMSAtMCwwIC0wLjksMCAtMCwwIC0wLjksMCAtMCwwIC0wLDAgLTAuOSwtMCAtMCwwIC0wLjksLTAgLTAsMCAtMC4xLDAgLTAuMiwyLjggMC4xLDAgMCwwIDAsMCAwLjksMCAwLDAgMCwwIDEsMCAwLDAgMCwwIDEsLTAgMCwwIDAsMCAwLjksLTAgMCwwIDAsMCAwLjksLTAuMSAwLDAgMCwwIDAuOSwtMC4xIDAsLTAgMCwwIDAuOSwtMC4xIDAsMCAwLDAgMC45LC0wLjEgMCwtMCAwLDAgMC45LC0wLjEgMCwwIDAsMCAwLjksLTAuMiAwLDAgMCwwIDAuNywtMC4xIC0wLjYsLTIuNyB6IG0gLTcuMiwtNTguOSAtMCwxLjIgMC4xLDAgMCwwIDEuMywwIDAsLTAgMS4zLDAuMSAxLjEsMC4xIDAuMSwwIDAsMCAxLjEsMC4yIDAuMSwwIDAuNywwLjEgMC43LC0zLjEgLTAuNywtMC4yIC0wLDAgLTAsLTAgLTEuMywtMC4yIC0wLDAgLTAsLTAgLTEuMywtMC4yIC0wLDAgLTAsMCAtMS4zLC0wLjEgLTAsMCAtMC4xLDAgLTEuMywtMCAtMCwwIC0wLDAgLTAsMCB6IG0gLTUuNSwtMS40IC0wLDAgLTAsMCAtMS4zLDAuMyAtMCwwIC0wLDAgLTEuMiwwLjMgLTAsMCAtMCwwIC0xLjIsMC40IC0wLDAgLTAsMCAtMC45LDAuMyAxLjEsMyAwLjgsLTAuMyAwLjEsLTAgMCwwIDEuMSwtMC40IDAsLTAgMS4xLC0wLjMgMS4yLC0wLjMgMC4xLC0wIDEuMSwtMC4yIC0wLjYsLTMuMSB6IG0gMTQuOCw0LjQgMC4yLDAuMSAwLjEsMCAxLjEsMC41IDEsMC41IDAuMSwwIDEsMC41IDAsMCAwLDAgMC45LDAuNiAwLjEsMCAwLjUsMC40IDEuOCwtMi42IC0wLjYsLTAuNCAtMCwtMCAtMCwtMCAtMS4xLC0wLjcgLTAsLTAgLTAsLTAgLTEuMSwtMC42IC0wLC0wIC0wLC0wIC0xLjEsLTAuNiAtMCwtMCAtMCwtMCAtMS4xLC0wLjUgLTAsLTAgLTAsLTAgLTAuMywtMC4xIHogbSAtMjMuNiwtMS4xIC0wLDAgLTAsMCAtMS4xLDAuNyAtMCwwIC0wLDAgLTEsMC43IC0wLDAgLTAsMCAtMSwwLjggLTAsMCAtMCwwIC0wLjksMC44IC0wLDAgLTAsMCAtMC44LDAuNyAyLjIsMi40IDAuNywtMC43IDAuMSwtMC4xIDAuOCwtMC43IDAsLTAgMCwtMCAwLjksLTAuNyAwLjEsLTAgMC45LC0wLjYgMC4xLC0wIDAuOSwtMC42IDAsLTAgMCwtMCAtMC40LC0wLjYgLTEuMiwtMi4yIHogbSAzMS41LDYuMiAwLjEsMC4xIDAsMCAwLDAgMC44LDAuOCAwLjEsMC4xIDAuNywwLjggMC4xLDAuMSAwLjcsMC44IDAsMCAwLDAuMSAwLjYsMC45IDAsMC4xIDAsMCAwLjUsMC43IDIuNywtMS44IC0wLjUsLTAuOCAtMCwtMCAtMCwtMCAtMC43LC0xIC0wLC0wIC0wLC0wIC0wLjgsLTAuOSAtMCwtMCAtMCwtMCAtMC44LC0wLjkgLTAsLTAgLTAsLTAgLTAuOSwtMC45IC0wLC0wIC0wLC0wIC0wLjEsLTAuMSB6IG0gLTQwLjEsMS44IC0wLDAgLTAsMCAtMC43LDEgLTAsMCAtMCwwIC0wLjYsMS4xIC0wLDAgLTAsMCAtMC42LDEuMSAtMCwwIC0wLDAgLTAuNSwxLjEgLTAsMCAtMCwwIC0wLDAuMSAyLjQsMSAwLjUsMC4zIDAsLTAgMC41LC0xIDAsLTAuMSAwLC0wIDAuNSwtMC45IDAsLTAuMSAwLjYsLTAuOSAwLjYsLTEgMCwtMCAwLC0wLjEgMC42LC0wLjggLTIuNiwtMS45IHogbSA0NS40LDUuOSAwLjQsMS4xIDAsMC4xIDAuMywxIDAsMC4xIDAuMywxLjEgMC4zLDEuMSAwLjIsMSAzLjEsLTAuNiAtMC4yLC0xLjEgMCwtMCAtMCwtMCAtMC4zLC0xLjIgLTAsLTAgLTAsLTAuMSAtMC4zLC0xLjIgLTAsLTAgLTAsLTAgLTAuNCwtMS4yIC0wLC0wIC0wLC0wIC0wLjUsLTEuMSB6IG0gLTQ5LjYsMy44IC0wLDAgMCwwIC0wLjIsMS4zIDAsMCAtMCwwIC0wLjIsMS4zIC0wLDAgMCwwIC0wLjEsMS4zIDAsMCAwLDAuMSAtMCwxLjMgMCwwIDAsMCAwLDAgMS45LC0wIDEuMywwIDAsLTAuMSAwLC0wIDAsLTEuMiAwLjEsLTEuMSAwLDAgMC4xLC0xLjIgMCwtMC4xIDAsLTAgMC4yLC0xLjEgMC4yLC0wLjkgLTMuMSwtMC43IHogbSA1Mi44LDUuNSAtMS4yLC0wIDAsMC4xIDAsMCAtMCwxLjIgLTAuMSwxLjEgLTAsMCAtMC4xLDEuMiAwLDAgLTAsMC4xIC0wLjIsMS4xIC0wLjIsMC45IDMuMSwwLjggMC4yLC0wLjkgMCwtMCAwLC0wIDAuMiwtMS4zIDAsLTAgMCwtMCAwLjIsLTEuMyAwLC0wIDAsLTAgMC4xLC0xLjMgMCwtMCAwLC0wLjEgMCwtMS4zIC0xLjYsLTAgMS42LC0wIDAsLTAgeiBtIC01Myw0LjMgMC4yLDEuMSAwLDAgMCwwIDAuMywxLjIgMCwwIDAsMC4xIDAuMywxLjIgMCwwIDAsMCAwLjQsMS4yIDAsMCAwLDAgMC41LDEuMSAzLC0xLjIgLTAuNCwtMSAtMCwtMC4xIC0wLjMsLTEgLTAsLTAuMSAtMC4zLC0xLjEgLTAuMywtMS4xIC0wLjIsLTEgeiBtIDQ5LjksNC45IC0wLjUsMSAtMCwwLjEgLTAsMCAtMC41LDEgLTAsMC4xIC0wLjYsMC45IC0wLjYsMSAtMCwwIC0wLDAuMSAtMC42LDAuOCAyLjYsMS45IDAuNiwtMC45IDAsLTAgMCwtMCAwLjcsLTEgMCwtMCAwLC0wIDAuNiwtMS4xIDAsLTAgMCwtMCAwLjYsLTEuMSAwLC0wIDAsLTAgMC41LC0xLjEgMCwtMCAwLC0wIDAsLTAgLTIuMiwtMC45IC0wLjgsLTAuMyB6IG0gLTQ2LDUgMC41LDAuOCAwLDAgMCwwIDAuNywxIDAsMCAwLDAgMC44LDAuOSAwLDAgMCwwIDAuOCwwLjkgMCwwIDAsMCAwLjksMC45IDAsMCAwLDAgMC4xLDAuMSAyLjIsLTIuMyAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAuOCwtMC44IC0wLjEsLTAuMSAtMC43LC0wLjggLTAuMSwtMC4xIC0wLjcsLTAuOCAtMCwtMCAtMCwtMC4xIC0wLjYsLTAuOSAtMC4xLC0wLjEgLTAuNSwtMC43IHogbSA0MCwzLjMgLTAuMSwwLjEgLTAuOCwwLjcgLTAsMCAtMCwwIC0wLjksMC43IC0wLjEsMCAtMC45LDAuNiAtMC4xLDAgLTAuOSwwLjYgMCwtMCAtMC4xLDAgMCwwIC0wLDAgMC4zLDAuNCAxLjMsMi40IDAsLTAgMCwtMCAwLC0wIDEuMSwtMC43IDAsLTAgMCwtMCAxLC0wLjcgMCwtMCAwLC0wIDEsLTAuOCAwLC0wIDAsLTAgMC45LC0wLjggMCwtMCAwLC0wIDAuOCwtMC43IC0yLjIsLTIuNCB6IG0gLTMyLjYsNC40IDAuNiwwLjQgMCwwIDAsMCAxLjEsMC43IDAsMCAwLDAgMS4xLDAuNiAwLDAgMCwwIDEuMSwwLjYgMCwwIDAsMCAxLjEsMC41IDAsMCAwLDAgMC4zLDAuMSAxLjEsLTMgLTAuMiwtMC4xIC0wLjEsLTAgLTEuMSwtMC41IC0xLC0wLjUgLTAuMSwtMCAtMSwtMC42IDAsMCAtMC45LC0wLjYgLTAuMSwtMCAtMC41LC0wLjQgeiBtIDI0LjUsMC4zIC0wLjEsMCAtMS4xLDAuMyAtMC4xLDAgLTEuMSwwLjMgLTEuMiwwLjMgLTAuMSwwIC0xLjEsMC4yIDAuNiwzLjEgMS4yLC0wLjIgMCwwIDAsLTAgMS4zLC0wLjMgMCwwIDAsLTAgMS4yLC0wLjMgMCwtMCAwLC0wIDEuMiwtMC40IDAsLTAgMCwtMCAwLjksLTAuMyAtMS4xLC0zIHogbSAtMTQuOCwzLjkgMC43LDAuMiAwLDAgMCwwIDEuMywwLjIgMCwwIDAsMCAxLjMsMC4yIDAsMCAwLDAgMS4zLDAuMSAwLDAgMC4xLDAgMS4zLDAgMCwwIDAsMCAwLDAgLTAuMSwtMS42IDAsLTAuMSAwLC0xLjUgLTAuMSwwIC0xLjMsLTAgMCwwIC0xLjMsLTAuMSAtMS4xLC0wLjEgLTAuMSwtMCAtMCwwIC0xLjEsLTAuMiAtMC4xLC0wIC0wLjcsLTAuMSB6IG0gNi4zLC00My4xIC0wLjQsMCAwLjEsNCAwLjMsLTAgMC4xLDAgMC4xLDAgMC42LDAgMC4xLDAgMC42LDAgMC4xLDAgMC42LDAuMSAwLjEsMCAwLjYsMC4xIDAuNywwLjEgMC4xLDAgMC4xLDAgMC42LDAuMiAwLjUsMC4yIDAuMSwwIDAuNSwwLjIgMC4xLDAgMCwwIDAuNSwwLjIgMC4xLDAgMC40LDAuMiAxLjgsLTMuNiAtMC41LC0wLjMgLTAsLTAgLTAuMSwtMCAtMC43LC0wLjMgLTAuMSwtMCAtMC4xLC0wIC0wLjcsLTAuMyAtMCwtMCAtMC4xLC0wIC0wLjcsLTAuMiAtMC4xLC0wIC0wLC0wIC0wLjcsLTAuMiAtMC4xLC0wIC0wLjEsLTAgLTAuNywtMC4yIC0wLjEsLTAgLTAuMSwtMCAtMC44LC0wLjEgLTAsLTAgLTAuMSwtMCAtMC44LC0wLjEgLTAuMSwtMCAtMC4xLDAgLTAuOCwtMC4xIC0wLjEsMCAtMC4xLDAgLTAuOCwtMCAtMC4xLC0wIHogbSAtNS4xLDAuNyAtMC4xLDAgLTAsMCAtMC43LDAuMiAtMC4xLDAgLTAuMSwwIC0wLjcsMC4zIC0wLDAgLTAuMSwwIC0wLjcsMC4zIC0wLjEsMCAtMCwwIC0wLjcsMC4zIC0wLDAgLTAsMCAtMC43LDAuNCAtMCwwIC0wLjEsMCAtMC42LDAuNCAtMCwwIC0wLDAgLTAuNiwwLjQgLTAsMCAtMCwwIC0wLjYsMC40IC0wLDAgLTAsMCAtMC42LDAuNSAtMCwwIC0wLDAgLTAuNSwwLjUgLTAsMCAtMCwwIC0wLjIsMC4yIDIuOSwyLjggMC4xLC0wLjEgMC4xLC0wLjEgMC40LC0wLjQgMC4xLC0wLjEgMC40LC0wLjMgMCwtMCAwLjEsLTAuMSAwLjQsLTAuMyAwLjUsLTAuNCAwLjEsLTAuMSAwLjYsLTAuMyAwLC0wIDAuNSwtMC4zIDAuMSwtMCAwLjUsLTAuMyAwLjEsLTAgMC41LC0wLjIgMCwwIDAuMSwtMCAwLjYsLTAuMiAwLC0wIDAuNSwtMC4yIDAuMSwtMCAwLjEsLTAgLTEuMSwtMy45IHogbSAxNC4yLDYuNyAwLjQsMC4zIDAuNSwwLjUgMC4xLDAuMSAwLjMsMC40IDAuMSwwLjEgMC4zLDAuNCAwLjEsMC4xIDAuMywwLjQgMCwwIDAsMC4xIDAuMywwLjQgMC4xLDAuMSAwLjMsMC41IDAsMCAwLDAuMSAwLjMsMC41IDAsMC4xIDAuMiwwLjUgMCwwLjEgMC4yLDAuNSAwLDAuMSAwLDAgMC4yLDAuNiAzLjgsLTEuMyAtMC4yLC0wLjcgLTAsLTAuMSAtMCwtMC4xIC0wLjMsLTAuNyAtMCwtMC4xIC0wLC0wIC0wLjMsLTAuNyAtMCwtMC4xIC0wLC0wIC0wLjMsLTAuNyAtMCwtMC4xIC0wLC0wIC0wLjQsLTAuNiAtMCwtMCAtMCwtMC4xIC0wLjQsLTAuNiAtMCwtMCAtMCwtMC4xIC0wLjQsLTAuNiAtMCwtMC4xIC0wLC0wIC0wLjUsLTAuNiAtMCwtMCAtMCwtMCAtMC41LC0wLjUgLTAsLTAgLTAsLTAgLTAuNSwtMC41IC0wLC0wIC0wLC0wIC0wLjUsLTAuNCB6IG0gLTI0LjQsMS40IC0wLDAgLTAsMC4xIC0wLjMsMC43IC0wLDAgLTAsMC4xIC0wLjMsMC43IC0wLDAgLTAsMC4xIC0wLjMsMC43IC0wLDAuMSAtMCwwLjEgLTAuMiwwLjcgLTAsMC4xIC0wLDAuMSAtMC4yLDAuNyAtMCwwLjEgMCwwLjEgLTAuMiwwLjcgLTAsMC4xIC0wLDAuMSAtMC4xLDAuNyAtMCwwLjEgMCwwLjEgLTAuMSwwLjggMCwwLjEgLTAsMC4xIC0wLjEsMC44IDAsMC4xIDAsMC4xIC0wLDAuOCAwLDAuMSAwLDAuMSAwLDAuMyA0LC0wLjEgLTAsLTAuMiAwLC0wLjEgMCwtMCAwLC0wLjcgMCwtMC42IDAsLTAuMSAwLC0wIDAuMSwtMC41IDAuMSwtMC42IDAsLTAuMSAwLjEsLTAuNSAwLC0wIDAsLTAuMSAwLjEsLTAuNSAwLjIsLTAuNiAwLC0wLjEgMCwtMCAwLjIsLTAuNSAwLjMsLTAuNiAwLjEsLTAuMSAwLjMsLTAuNSAwLC0wLjEgMCwtMCAwLC0wIC0zLjUsLTIgeiBtIDI4LjcsNy42IDAsMC41IDAsMC4xIDAsMCAtMCwwLjYgLTAuMSwwLjcgLTAsMC4xIDAsMC4xIC0wLjEsMC42IC0wLjEsMC41IC0wLDAuMSAtMC4xLDAuNSAwLDAgLTAsMC4xIC0wLjEsMC41IC0wLDAuMSAtMC4yLDAuNSAtMCwwIC0wLDAuMSAtMC4yLDAuNSAtMCwwIC0wLDAuMSAtMC4yLDAuNSAtMCwwLjEgLTAuMywwLjUgLTAsMC4xIC0wLDAgLTAuMiwwLjMgMy41LDIgMC4yLC0wLjQgMCwtMC4xIDAsLTAgMC4zLC0wLjcgMCwtMCAwLC0wLjEgMC4zLC0wLjcgMCwtMCAwLC0wLjEgMC4zLC0wLjcgMCwtMC4xIDAsLTAuMSAwLjIsLTAuNyAwLC0wIDAsLTAuMSAwLjIsLTAuNyAwLC0wLjEgMCwtMC4xIDAuMiwtMC43IDAsLTAuMSAwLC0wLjEgMC4xLC0wLjcgMCwtMC4xIDAsLTAuMSAwLjEsLTAuOCAwLC0wLjEgMCwtMC4xIDAuMSwtMC44IDAsLTAuMSAwLC0wLjEgMCwtMC44IC0yLC0wLjEgMiwtMC4xIC0wLC0wLjYgeiBtIC0zMC4xLDUuMyAwLjEsMC4zIDAsMC4xIDAsMCAwLjIsMC43IDAsMC4xIDAsMC4xIDAuMywwLjcgMCwwLjEgMCwwIDAuMywwLjcgMCwwLjEgMCwwIDAuMywwLjcgMCwwIDAsMC4xIDAuNCwwLjYgMCwwIDAsMC4xIDAuNCwwLjYgMCwwIDAsMCAwLjQsMC42IDAsMCAwLDAgMC41LDAuNiAwLDAgMCwwIDAuNSwwLjUgMCwwIDAsMCAwLjUsMC41IDAsMCAwLDAgMC4yLDAuMiAyLjcsLTIuOSAtMC4yLC0wLjEgLTAuMSwtMC4xIC0wLC0wIC0wLjQsLTAuNCAtMC4xLC0wLjEgLTAuNCwtMC40IC0wLC0wLjEgLTAsLTAgLTAuMywtMC40IC0wLjEsLTAuMSAtMC40LC0wLjUgLTAuMywtMC40IC0wLjEsLTAuMSAtMC4zLC0wLjUgLTAsLTAgLTAsLTAuMSAtMC4zLC0wLjUgLTAuMSwtMC4xIC0wLjIsLTAuNSAtMCwtMC4xIC0wLC0wIC0wLjIsLTAuNSAtMCwtMC4xIC0wLC0wLjEgLTAuMiwtMC42IC0wLC0wLjEgeiBtIDI1LjgsNC44IC0wLjEsMC4xIC0wLjQsMC4zIC0wLDAgLTAuMSwwLjEgLTAuNCwwLjMgLTAuMSwwLjEgLTAuNSwwLjMgLTAsMCAtMC4xLDAgLTAuNSwwLjMgLTAuMSwwIC0wLDAgLTAuNiwwLjMgLTAuNSwwLjMgLTAuMSwwIC0wLjUsMC4yIC0wLDAgLTAuMSwwIC0wLjUsMC4yIC0wLjEsMCAtMC41LDAuMiAtMC41LDAuMSAxLjEsMy45IDAuNSwtMC4xIDAsLTAgMC4xLC0wIDAuNywtMC4yIDAuMSwtMCAwLC0wIDAuNywtMC4zIDAuMSwtMCAwLjEsLTAgMC43LC0wLjMgMC4xLC0wIDAsLTAgMC43LC0wLjMgMC4xLC0wIDAsLTAgMC43LC0wLjQgMCwtMCAwLC0wIDAuNiwtMC40IDAsLTAgMC4xLC0wIDAuNiwtMC40IDAsLTAgMCwtMCAwLjYsLTAuNSAwLC0wIDAsLTAgMC42LC0wLjUgMCwtMCAwLC0wIDAuNSwtMC41IC0yLjcsLTIuOSB6IG0gLTE1LjUsMS44IC0xLjksMy41IDAuMSwwLjEgMCwwIDAsMCAwLjcsMC4zIDAsMCAwLjEsMCAwLjcsMC4zIDAuMSwwIDAsMCAwLjcsMC4zIDAuMSwwIDAuMSwwIDAuNywwLjIgMCwwIDAuMSwwIDAuNywwLjIgMCwwIDAuMSwwIDAuOCwwLjIgMC4xLDAgMC4xLDAgMC44LDAuMSAwLjEsMCAwLjEsMCAwLjgsMC4xIDAuMSwwIDAuMSwwIDAuOCwwLjEgMC4xLDAgMC4xLDAgMC44LDAgMC4xLDAgMC4xLDAgMC4xLDAgLTAuMSwtNCAtMC4xLDAgLTAuMSwwIC0wLjYsLTAgLTAuMSwwIC0wLjYsLTAgMCwtMCAtMC43LC0wLjEgLTAsMCAtMC4xLC0wIC0wLjYsLTAuMSAtMC4xLC0wIC0wLjYsLTAuMSAwLC0wIC0wLjcsLTAuMiAtMC41LC0wLjIgMCwtMCAtMC42LC0wLjIgLTAuMSwtMCAtMCwwIC0wLjUsLTAuMiAtMC4xLC0wIC0wLjUsLTAuMyAtMC4xLC0wLjEgeiBNIDEwMCw5My4yIGMgLTMuNSwtNGUtNCAtNi43LDIuOSAtNi43LDYuNSBsIDAsMC40IGMgMCwzLjUgMyw2LjUgNi41LDYuNSBsIDAuNCwwIGMgMy40LDAgNi41LC0zIDYuNSwtNi4zIGwgMCwtMC45IGMgMCwtMy40IC0zLjMsLTYuMyAtNi44LC02LjMgelwifV0saVtcIkFDLklDLkFWQUxBTkNIRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExNS43LDg3LjMgLTMuNiwwLjkgMTEsMzggLTQuNiwxLjUgOS42LDkuMiAzLjEsLTEzIC00LjYsMS40IHogbSAzLDQ2LjQgLTguNSwtMTAgNC4zLC0xLjIgLTExLjIsLTQwLjYgLTM0LjUsNTEuOSB6IG0gLTEyLjEsLTU5LjggMCw4LjQgMS42LDAgMCwtOC4zIDcuMSw0LjMgMC44LC0xLjMgLTcuNCwtNC4xIDcuNSwtNC40IC0xLC0xLjIgLTcsNCAwLC04LjIgLTEuNiwwIDAsOC4yIC03LjQsLTQgLTAuNiwxLjEgNy4yLDQuNCAtNy4yLDQuMSAwLjYsMS40IHpcIn1dLGlbXCJBQy5JQy5FQVJUSFFVQUtFIEVQSUNFTlRFUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDYyLjgsOTkuOCBjIDAsLTEwLjggNC45LC0yMC4yIDEwLjMsLTI1LjcgNS4xLC01LjEgMTQuOCwtMTEuMyAyNC43LC0xMS4zIGggNC4xIGMgNC45LDAgMTAuNSwxLjkgMTMuOSwzLjYgNSwyLjUgNi40LDQgMTAuNCw3IDQuNiwzLjYgMTEuMSwxNS40IDExLjEsMjMuOCB2IDUuMyBjIDAsMTcuNCAtMTcuNSwzNC42IC0zNS4xLDM0LjYgaCAtNC42IGMgLTEwLjMsMCAtMTkuNCwtNi4yIC0yNC42LC0xMS40IC01LjUsLTUuNCAtMTAuMywtMTUgLTEwLjMsLTI1LjggeiBtIDM5LjQsMzguNSBjIDEwLjcsMCAyMCwtNi4zIDI1LjUsLTExLjggNi43LC02LjcgOS45LC0xMy45IDEwLjcsLTI2LjUgMS4zLC0xOS4yIC0xNy43LC0zOC4xIC0zNi4yLC0zOC4xIGggLTQuOCBjIC0xMC4zLDAgLTIwLjEsNi42IC0yNS4yLDEyLjEgLTMsMy4yIC01LjYsNi43IC03LjUsMTEuMSAtMS4xLDIuOCAtMy41LDExLjMgLTMsMTUuMyAwLjcsNi40IDAuOSwxMC40IDMuNCwxNS4zIDIuMiw0LjQgNCw3LjYgNy4zLDExIDUsNS4zIDE1LjIsMTEuNyAyNS4zLDExLjcgaCA0LjYgeiBtIC0zLjksLTExLjYgYyAtMTMuNiwwIC0yNC43LC0xMy4xIC0yNS4yLC0yNi44IC0wLjUsLTEzLjIgMTIuNSwtMjYuNCAyNS40LC0yNi40IGggMi45IGMgMTIuOCwwIDI1LjIsMTIuNCAyNS4yLDI1LjIgdiAyLjQgYyAwLDEyLjggLTEyLjQsMjUuNyAtMjUuMiwyNS43IGggLTMuMSB2IC0wIHogbSAtMjcuMSwtMjYuOSBjIDAsOC44IDMuNywxNiA4LjEsMjAuNSAyLjMsMi40IDUuMiw0LjQgOC4zLDUuOSA0LjIsMi4yIDYuMywxLjkgMTEuNSwyLjggMi45LDAuNSAxMCwtMS4zIDEyLC0yLjIgNC42LC0yLjIgNSwtMi45IDguNiwtNS42IDQuMywtMy4xIDkuMSwtMTIuMyA5LjEsLTE5LjcgdiAtMy40IGMgMCwtMTMuNyAtMTMuNiwtMjYuOCAtMjcuMywtMjYuOCBoIC0zLjIgYyAtMTQuNSwtNGUtNCAtMjcuMSwxMy42IC0yNy4xLDI4LjUgeiBtIDI4LjUsMTQuOCBjIC04LjQsMCAtMTMuNSwtNi41IC0xNC40LC0xNC40IC0wLjcsLTcuMyA2LjgsLTE0LjYgMTMuOSwtMTQuNiBoIDEuNyBjIDcuMywwIDEzLjYsNi45IDEzLjYsMTQuNSAwLDcuNyAtNi4yLDE0LjUgLTEzLjgsMTQuNSBoIC0xIHogbSAtMTguNiwtMTQuOCBjIDAsMTEuNSA4LDE4LjEgMTguNCwxOS4zIDYuMiwwLjggMTAuMywtMi45IDEzLjYsLTUuMyAyLjgsLTIgNS44LC04LjMgNS44LC0xMy4zIFYgOTkuOCBjIDAsLTEwLjQgLTguMywtMTguNiAtMTguNiwtMTguNiBoIC0wLjcgYyAtOS45LDAgLTE4LjQsOC42IC0xOC40LDE4LjYgeiBtIDEwLjksMCB2IDAuMiBjIDAsMy43IDMuNSw3LjcgNyw3LjcgaCAxLjcgYyAzLjksMCA3LjMsLTMuOSA3LjMsLTcuNyAwLC00IC0zLjUsLTggLTcsLTggaCAtMS43IGMgLTMuNSwwIC03LjMsNCAtNy4zLDcuNyB6XCJ9XSxpW1wiQUMuSUMuTEFORFNMSURFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTI5LjQsMTEwLjggYyAtMi43LDAgLTYuMiw0LjEgLTQuMyw1LjEgLTEsMS41IC0zLjYsMiAtMy42LDQgMCwxLjggMi42LDQuNyAzLjQsNi4yIDEuMSwyIDMuMiwzLjIgNi4yLDMuMiBoIDEuOCBjIDIuNywwIDQuNiwtMi42IDQuNiwtNS4zIHYgLTEgYyAwLC0zLjQgLTEsLTUgLTIuMSwtNy41IC0xLC0yLjQgLTEuNiwtNC42IC00LjksLTQuNiBoIC0xIHogbSAtMjIuMiwtMzUgLTUuMywtNS4yIC0zOS4zLDU4LjMgNTUuOCwwLjEgdiAtMS4yIGMgMCwtMC43IC0xLC0xLjUgLTEuNSwtMS44IDAsLTIgLTAuNiwtMS42IC0wLjksLTIuOSAtMC4yLC0wLjkgLTAuMSwtMi43IC0wLjEsLTMuNyAwLC0yLjggLTAuMSwtNC4zIC0xLjcsLTUuNiAtMi4yLC0xLjkgLTEuMywtMS41IC00LjMsLTMuMSAtMiwtMSAtMS41LC0yLjEgLTUuMiwtMi4yIHYgLTEuNSBjIDAsLTEuOSAtMiwtMy42IC0yLjgsLTQuOCAwLC0yLjMgLTAuNSwtNC43IC0wLjUsLTYuOCAwLC0xLjYgLTAuMiwtMiAtMC4yLC0zLjMgLTAuMSwtMS43IC0wLjgsLTEuNSAtMC44LC0yLjggdiAtMC4yIGMgMCwtMyAwLjUsLTQuNSAyLjEsLTYgMi4yLC0yLjEgMC45LC0yLjIgMy44LC0zLjkgbCAwLjgsLTMuMyAwLDAgeiBtIDkuNywzNCBjIDAsMy42IDYuMSwyLjggNi4xLC0wLjggMCwtNC4yIC02LjEsLTEuOSAtNi4xLDAuOCB6IG0gMi44LC0xNi40IGMgLTIuMiwwIC03LDYuNCAtNCw4LjYgMS43LDEuMiAyLjYsMS42IDUuMywwLjYgMiwtMC44IDIuOCwtMS42IDIuOCwtNC4zIDRlLTQsLTIuNCAtMiwtNC44IC00LC00LjggeiBtIC04LjQsNS4zIGMgMC44LDAgMSwtMC43IDEuMywtMS4zIC0wLjYsLTEuNCAtMC41LC0yLjUgLTIuNiwtMi41IGggLTAuMiBjIC0xLDAgLTIsMC42IC0yLDEuNSAwLDAuNyAxLjYsMi4zIDIuOCwyLjMgaCAwLjggeiBtIC0zLjMsLTEzLjcgYyAtMC4xLDEgLTAuMywwLjYgLTAuMywxLjUgMCwxIDAuOCwzIDEuOCwzIGggMC4yIGMgMy4xLDAgMy4xLC0wLjIgNC44LC0xLjUgLTEsLTIuMyAtMC40LC0zLjYgLTQuMiwtMy42IC0xLjEsMCAtMS40LDAuMyAtMi4zLDAuNSB6XCJ9XSxpW1wiQUMuSUMuU1VCU0lERU5DRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDU2LjgsNzUuNiAwLDIgMTQuNCwwIDMuOCw3LjkgYyAtMC4xLDAuMyAtMC4zLDAuNyAtMC4zLDEuNiBsIDAsMC42IGMgMCwwLjcgMC4zLDEuMSAwLjcsMS41IDAuMywwLjQgMC43LDAuOCAxLjEsMS4zIDAuNywwLjggMS41LDEuNSAxLjgsMiBsIC0wLjMsNC4xIGMgLTAuMSwxIDAuNCwyIDEsMi42IDAuNiwwLjYgMS4zLDEuMSAyLDEuNSAwLjcsMC40IDEuMywwLjggMS43LDEuMiAwLjQsMC40IDAuNiwwLjYgMC42LDEgMCwxLjMgLTAuNSwyLjIgLTAuNSw0LjIgMCwwLjkgMC41LDEuNyAxLjEsMi4xIDAuNiwwLjQgMS4yLDAuNyAxLjgsMC45IDAuNiwwLjIgMS4xLDAuNCAxLjQsMC42IDAuMywwLjIgMC4zLDAuMiAwLjMsMC4zIDAsMC42IC0wLjEsMC44IC0wLjMsMS4yIC0wLjIsMC4zIC0wLjUsMC43IC0wLjUsMS41IGwgMCwwLjYgYyAwLDEuOCAxLDIuOSAxLjksMy41IDAuOCwwLjYgMS4zLDAuOCAxLjUsMS4zIDAsMCAwLDAgMCwwIDAuMiwwLjggMC4zLDIgMC43LDMuMSAwLjIsMC42IDAuNSwxLjIgMSwxLjYgMC41LDAuNSAxLjIsMC43IDIsMC43IGwgMC4zLDAgYyAxLjEsMCAxLjksLTAgMi42LC0wLjIgMC43LC0wLjEgMS4zLC0wLjQgMS43LC0wLjkgMC40LC0wLjUgMC41LC0xLjEgMC43LC0xLjcgMC4xLC0wLjYgMC4yLC0xLjMgMC4zLC0yLjEgNy42ZS00LC0wIC03LjZlLTQsLTAgMCwtMCAwLjIsLTEuNCAwLjcsLTIuMSAxLjMsLTIuOCAwLjUsLTAuNyAxLjIsLTEuNyAxLjIsLTMuMSAwLC0wLjYgLTAuMiwtMSAtMC41LC0xLjMgLTAuMiwtMC4zIC0wLjUsLTAuNyAtMC43LC0xIC0wLjUsLTAuNyAtMC44LC0xLjUgLTAuOCwtMi40IGwgMCwtMC45IGMgMCwtMCAtMCwtMCAwLjEsLTAuMiAwLjIsLTAuMiAwLjUsLTAuNCAwLjgsLTAuNiAwLjQsLTAuMyAwLjgsLTAuNSAxLjEsLTEgMC40LC0wLjQgMC43LC0xLjEgMC43LC0xLjggMCwtMS4yIC0wLjUsLTIuNCAtMC45LC0zLjUgLTAuNCwtMS4xIC0wLjgsLTIuMiAtMC44LC0yLjUgMCwtMC41IDAuMiwtMSAwLjYsLTEuNiAwLjQsLTAuNiAxLC0xLjMgMS41LC0yLjIgMC41LC0wLjggMC45LC0xLjggMC45LC0zIC0wLC0xLjEgLTAuNSwtMi40IC0xLjYsLTMuNiBsIC0wLC0wIC0wLDAgYyAtMC4zLC0wLjMgLTAuNywtMS4zIC0wLjgsLTIuMiAtMC4xLC0wLjkgMC4xLC0xLjkgMC40LC0yLjMgMC4zLC0wLjUgMC45LC0wLjkgMS43LC0xLjQgMC43LC0wLjYgMS41LC0xLjYgMS41LC0zIGwgMCwtMS40IDM4LjEsMCAwLC0yIC00MC4xLDAgLTMwLjYsMCAtMC42LDAgLTE1LDAgelwifV0saVtcIkFDLklDLlZPTENBTklDIEVSVVBUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIyLjIsNjYgLTEwLjQsMTcuOSAxLjcsMSAxMC40LC0xNy45IC0xLjcsLTEgeiBtIC0yMy4yLDAuNSAwLDE3LjkgMiwwIDAsLTE3LjkgLTIsMCB6IG0gLTE5LjUsLTAuNCAtMS44LDAuOCA4LDE3LjkgMS44LC0wLjggLTgsLTE3LjkgeiBNIDk5LjMsMTIwLjggYyAtMS43LC0wIC0zLjMsMC44IC00LjUsMiAtMS4yLDEuMiAtMiwyLjkgLTIsNC41IGwgMCwxLjkgYyAwLDEuNyAwLjgsMy4zIDIsNC41IDEuMiwxLjIgMi44LDIgNC41LDIgbCAxLjMsMCBjIDEuNywwIDMuMywtMC44IDQuNSwtMiAxLjIsLTEuMiAyLC0yLjggMiwtNC41IGwgMCwtMS45IGMgMCwtMS43IC0wLjgsLTMuMyAtMiwtNC41IC0xLjIsLTEuMiAtMi44LC0yIC00LjUsLTIgbCAtMS4yLDAgLTAsMCB6IE0gODAuMyw4Ni41IGMgLTAuNSwwIC0wLjksMC4zIC0xLjQsMC44IC0wLjQsMC41IC0wLjgsMS4yIC0xLjMsMiAtMC44LDEuNyAtMS42LDMuOSAtMi40LDYuMyAtMS41LDQuNyAtMi44LDkuOCAtMy40LDExLjQgbCAtMCwwIGMgLTIsNyAtNS44LDE1LjIgLTcsMjEuNiBsIC0wLjEsMC4yIDAuMiwwIDIwLjksMC42IDAuMiwwIDAsLTAuMiAwLC0xLjkgMCwtMC4yIC0wLjIsLTAgLTE3LjYsLTAuNyBMIDgwLjUsODkuNCBsIDM5LjEsMCAxMS45LDM3LjEgLTE3LjUsMC43IC0wLjIsMCAwLDAuMiAwLDEuOSAwLDAuMiAwLjIsLTAgMjAuOSwtMC42IDAuMiwwIC0wLjEsLTAuMiBjIC0xLjMsLTYuNCAtNS4xLC0xNC43IC03LC0yMS42IEwgMTI4LjEsMTA3IGMgLTAuNiwtMS42IC0xLjksLTYuNyAtMy40LC0xMS40IC0wLjgsLTIuMyAtMS42LC00LjYgLTIuNCwtNi4zIC0wLjQsLTAuOCAtMC44LC0xLjUgLTEuMywtMiAtMC40LC0wLjUgLTAuOSwtMC44IC0xLjQsLTAuOCBsIC0zOS40LDAgelwifV0saVtcIkFDLklDLlZPTENBTklDIFRIUkVBVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgwLjMsODUuNiBjIC0wLjUsMCAtMC45LDAuMyAtMS40LDAuOCAtMC40LDAuNSAtMC44LDEuMiAtMS4zLDIgLTAuOCwxLjcgLTEuNiwzLjkgLTIuNCw2LjMgLTEuNSw0LjcgLTIuOCw5LjggLTMuNCwxMS4zIGwgMCwwIC0wLDAgYyAtMiw3IC01LjgsMTUuMiAtNywyMS42IGwgLTAuMSwwLjIgMC4yLDAgMjAuOSwwLjYgMC4yLDAgMCwtMC4yIDAsLTEuOSAwLC0wLjIgLTAuMiwtMCAtMTcuNiwtMC43IDEyLC0zNy4xIDM5LjEsMCAxMS45LDM3LjEgLTE3LjUsMC43IC0wLjIsMCAwLDAuMiAwLDEuOSAwLDAuMiAwLjIsMCAyMC45LC0wLjYgMC4yLC0wIC0wLjEsLTAuMiBjIC0xLjMsLTYuNCAtNS4xLC0xNC43IC03LC0yMS42IGwgLTAsMCAwLC0wIGMgLTAuNiwtMS42IC0xLjksLTYuNyAtMy40LC0xMS4zIC0wLjgsLTIuMyAtMS42LC00LjYgLTIuNCwtNi4zIC0wLjQsLTAuOCAtMC44LC0xLjUgLTEuMywtMiAtMC40LC0wLjUgLTAuOSwtMC44IC0xLjQsLTAuOCBsIC0zOS40LDAgeiBNIDk5LjMsMTIwIGMgLTEuNywtMCAtMy4zLDAuOCAtNC41LDIgLTEuMiwxLjIgLTIsMi45IC0yLDQuNSBsIDAsMS45IGMgMCwxLjcgMC44LDMuMyAyLDQuNSAxLjIsMS4yIDIuOCwyIDQuNSwyIGwgMS4zLDAgYyAxLjcsMCAzLjMsLTAuOCA0LjUsLTIgMS4yLC0xLjIgMiwtMi44IDIsLTQuNSBsIDAsLTEuOSBjIDAsLTEuNyAtMC44LC0zLjMgLTIsLTQuNSAtMS4yLC0xLjIgLTIuOCwtMiAtNC41LC0yIGwgLTEuMiwwIC0wLDAgeiBtIC0yLjcsLTQyLjEgMCwwLjIgLTAuMiwwIDAsNC4yIDAsMC4yIDAuMiwwIDMuMywwIDAuMiwwIDAsLTAuMiAwLC00LjIgMCwtMC4yIC0wLjIsMCAtMy4zLDAgeiBNIDk5LDU3LjEgYyAtMS4xLDIuNWUtNSAtMi4zLDAuMiAtMy4zLDAuNSAtMS4xLDAuMyAtMi4xLDAuOCAtMy4yLDEuNCBsIC0wLjEsMC4xIDAsMC4xIDAsMy4xIDAsMC40IDAuMywtMC4yIGMgMS4xLC0wLjcgMiwtMS4zIDMsLTEuNiAxLC0wLjQgMS45LC0wLjYgMi43LC0wLjYgMS4xLDIuMmUtNSAyLDAuMyAyLjcsMC44IDAuNywwLjYgMSwxLjMgMSwyLjIgLTFlLTUsMC41IC0wLjEsMSAtMC40LDEuNSAtMC4zLDAuNSAtMC43LDEgLTEuMywxLjYgbCAwLDAgLTEuNSwxLjUgYyAtMSwwLjkgLTEuNywxLjggLTIsMi41IC0wLjMsMC43IC0wLjUsMS43IC0wLjUsMi44IGwgMCwyLjUgMCwwLjIgMC4yLDAgMy4xLDAgMCwtMC4yIDAuMiwwIDAsLTIgYyAtMTBlLTYsLTAuNiAwLC0xIDAuMSwtMS4zIDAsLTAuMyAwLjEsLTAuNiAwLjEsLTAuOCAwLjEsLTAuMiAwLjIsLTAuNSAwLjQsLTAuOCAwLjIsLTAuMyAwLjYsLTAuNyAxLjEsLTEuMiBsIDEuNCwtMS40IGMgMSwtMC45IDEuNywtMS44IDIuMSwtMi42IGwgMCwtMCBjIDAuNCwtMC44IDAuNiwtMS42IDAuNiwtMi41IC0yZS01LC0xLjggLTAuNiwtMy4zIC0xLjksLTQuMyAtMS4zLC0xLjEgLTIuOSwtMS42IC01LC0xLjYgelwifV0saVtcIkFDLklDLkNBVkUgRU5UUkFOQ0VcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTUsMTAwIDU1LDAgMzAsLTIwIDAsNDAgLTMwLC0yMFwifV0saVtcIkFDLklDLkRST1VHSFRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4Ny42LDEyNy40IGMgMS4zLDAuNiA0LjUsMCA2LjEsMCBoIDQuMiBsIC0yLC01LjkgLTQuOSwtMC4zIGMgLTUuNywxMC44IC0yLjQsNC4zIC0zLjQsNi4yIHogbSAtMjQuMSwtNyBjIC0wLjYsMS45IDE3LjYsNi45IDIwLjUsNy40IDIuNywtMS44IDQuNSwtMi40IDQuOCwtNi43IC00LDAgLTExLjQsLTAuOCAtMTQuOCwtMS43IC0yLjIsLTAuNiAtNC4yLC0xLjIgLTYuNCwtMS43IC0zLjUsLTAuOSAtNC4yLC0xLjUgLTQuMiwyLjYgeiBtIDM1LjksNi4xIDYuNywtMC4zIDE4LjYsLTEuNyBjIDEuNSwtMC40IDQuNSwtMC40IDYsLTEuNCAtMS4zLC0yLjYgLTIuNCwtNC4xIC0zLjcsLTYuNiAtMS40LC0yLjYgLTEuOSwtNC45IC0zLC03LjIgLTMuNywwLjggLTQuNywzLjUgLTYuMyw0IC0zLjUsMS4xIC00LjgsMC40IC02LjcsMy44IC0xLjcsMyAtMi41LDMuMyAtNS4zLDUuMiAtMi40LDEuNyAtMy42LDIuOCAtNi4zLDQuMiB6IG0gLTIuOCwtOSBjIDAsMy43IDAuNSw0LjIgMi4yLDcuMyBsIDguNSwtNy4xIC0wLjIsLTAuMiBjIC0xLjcsLTAuNCAtMi40LC0xLjUgLTQuOCwtMi4yIC0xLjYsLTAuNCAtNC4xLC0xLjMgLTUuOCwtMS40IHYgMy42IGggMC4xIHogbSAzNy42LDAuNSBjIC0wLjksMCAtMSwtMC4yIC0xLjksLTAuMiBsIDEsMi40IDIuNywtMi44IGMgLTAuOSwwLjIgLTAuOCwwLjUgLTEuOCwwLjUgeiBtIC01MS4zLC0wLjMgYyAtMC4xLDEuOSA3LjcsMS41IDkuMywxLjUgaCAyLjggYyAwLC0xLjcgLTAuNywtMi44IC0wLjgsLTQuNCAtMC4xLC0yLjUgLTAuNCwtMS44IC0zLjEsLTIuMSAtNCwtMC40IC00LjYsLTIgLTcuNywtMi44IGwgLTAuNiw3LjcgeiBtIC0yNS41LC0xMi42IDMsMTIuMSBjIDAuNywtMyAyLjIsLTQuNSAyLjgsLTcuMyAwLjMsLTEuOCAwLjEsLTIuNiAwLjksLTQgMC40LC0wLjcgMS4zLC0yLjggMS41LC0zLjYgLTEuNCwtMC4zIC02LjksLTEuNiAtOC42LC0xLjYgbCAwLjQsNC40IHogbSA2OS45LC0yLjIgYyAtMSw0LjEgLTAuNywzLjUgMSw3IDEuMiwyLjQgMiw0LjQgMy4xLDYuNiA1LjgsLTAuNSA2LjIsLTAuNSA5LjQsLTMuNiAxLjYsLTEuNiAxLC02LjggMiwtOC4zIC0yLjUsLTEuMiAtMS43LC0wLjYgLTQuNiwtMS4zIC00LjUsLTEgLTYuNiwtMC40IC0xMC45LC0wLjMgeiBtIC0zMC45LDEuMSB2IDAuOCBjIDAsMi4yIC0wLjEsMy4zIDAsNS40IDAuMSwzLjMgLTAuMywyLjUgMy4xLDIuOCAxLjIsMC4xIDMuNSwxIDQuNSwxLjQgMC43LDAuNCAxLjUsMC41IDIsMC44IDAuOCwwLjQgMC4zLDAuNiAxLjcsMS40IGwgLTAuMiwtMC4yIDUuNiwtNC43IGMgMy4xLDAgNC4yLDAuNCA1LjgsLTEuMyAyLjQsLTIuNSAwLjgsLTEuNCA0LC0zLjEgbCAwLjYsLTMuMSBjIC0yLjUsMC42IC01LjUsMi4yIC04LjIsMS4xIC0yLjYsLTEuMSAtMy44LC0yLjggLTcuNCwtMi44IGwgLTEuNiwtMC4zIC05LjksMS44IHogbSAtMzIuMSwxMS4yIGMgMS4zLDAgNS44LDAuNyA2LjksMSAxLjQsMC40IDQuNywyLjMgNS42LDIuMyBoIDIuOCBjIDEsMCAwLjksLTAuMyAxLjcsLTAuNSBsIDEuNywtOC4zIC01LjIsLTQuNSAtOSwtMiBjIC0wLjQsMS43IC0yLjQsMyAtMy4xLDUuMSAtMC4zLDAuNyAtMS41LDYuMyAtMS41LDcgeiBtIDQxLC0zNS4xIGMgMSwxLjIgMS40LDIuOCAyLjIsNC4yIDAuNCwwLjYgMi45LDMuMyAyLjksMy41IDAsMC44IC0wLjksMi4zIC0xLjMsMi4zIC0yLjcsMCAtMy44LC02LjcgLTMuOCwtMTAgeiBtIC0xLjgsLTEuMiBjIC0wLjMsMSAtMS45LDQuNSAtMi41LDUuNiAtMC45LDEuOCAtMS45LDMuNSAtNC40LDMuNSAtMC41LDAgLTEsLTAuNCAtMSwtMC44IDAsLTMuMSAzLjgsLTUuOCA1LjIsLTcuNiBsIDIuOCwtMC44IHogbSA5LjUsOC42IGggLTAuOCBjIC0yLjMsMCAtNi45LC04IC02LjksLTkuNyAwLC0wLjEgMC4zLC0wLjUgMC4zLC0wLjUgMS43LDAuNSA3LjksNiA3LjksOC43IC00ZS00LDAuNSAtMC40LDAuOCAtMC41LDEuNSB6IG0gMC42LC02IGMgLTAuNywtMC4zIC0xLjcsLTEgLTIuNCwtMS4zIC0xLjQsLTAuOCAtMy41LC0yLjkgLTQuNywtMy4zIGwgMS4xLC0xLjMgYyAzLjEsMS41IDEwLjEsMS4zIDEwLjEsNS43IDAsMC4zIC0wLjgsMC44IC0xLDEgLTAuOCwtMC4zIC0yLC0wLjQgLTMuMSwtMC44IHogbSAtMjQuOSwxLjMgaCAtMSBjIDEsLTIgLTIuMiwtNi43IC00LjQsLTcuMiAtMi4yLDEuMiAtNC4yLDAuNiAtNS41LDMuMyAtMC40LDEgLTAuNywyLjIgLTEuNSwyLjggLTAuOCwwLjYgLTIuNCwwLjggLTIuNCwxLjkgMCwxLjUgNC4zLDAuNCA0LjksLTAuMiAxLjIsLTEuMSAyLjQsLTIuMSA0LjUsLTIuMSAyLDAgMi45LDUuOCAzLjEsOC4yIDAuMiwzLjIgLTIuMyw3LjcgLTIuMiw5LjUgbCAwLjksNi44IC00LjQsLTAuMyBjIDIuMSwzLjEgOC41LDYgMTMuNCw2LjQgbCAtMC40LC03LjcgLTUuNiwxLjMgYyAwLC00LjQgLTIsLTUuNSAtMC41LC05LjUgMC42LC0xLjcgMSwtMi4yIDEsLTQuNyAwLC0xLjEgMC4yLC00LjYgMC42LC01LjMgMS41LC0yLjUgMS45LC01LjYgMy4xLC04LjQgMS4yLC0yLjggNSwtMi42IDguMywtMy41IGwgMS4yLDEuMyAtMSwwLjMgMC44LDEuOCBjIC0xLjcsMiAtMi45LDIuOSAtNC41LDUgLTAuOCwxIC0zLjgsNi4zIC0wLjYsNi4zIGggMSBjIDMuOSwwIDUuMSwtNy4xIDYuOSwtOS4yIDAuNCw0LjQgMS4yLDkuNSA0LjQsMTEuMiAxLjcsLTAuNCAyLjIsLTEuMSAyLjYsLTIuOCAwLjcsMC4yIDAuNSwwLjMgMSwwLjMgMS4zLDAgMiwtMS4xIDIsLTIuMyBWIDg1LjggYyAwLC0yLjEgLTEuMiwtMi40IC0xLjUsLTMuOCAwLjgsMC40IDIuMiwxIDMuMywxIGggMC41IGMgMS4yLDAgMS4zLC0wLjYgMS44LC0xLjMgLTAuMiwtMi41IC0xLjUsLTMuOSAtMy41LC00LjYgLTEuMywtMC40IC01LjIsLTEuNyAtNi43LC0xLjcgbCAwLjUsLTEgaCAtMC43IGwgMC44LC0xLjYgLTQuOSwxIGMgLTAuOSwtMC42IC0xLjIsLTEuNSAtMi42LC0xLjUgaCAtMS44IEMgOTIuMyw3Mi4yIDg4LjcsNzUuOCA4OC43LDgyLjkgbCAwLDAgelwifV0saVtcIkFDLklDLkZMT09EXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk03Ny4yLDkyLjlMNzcuMyw5Mi44TDk5LjMsNzIuNUw5OS43LDcyLjFMMTAwLDcyLjFMMTAwLjQsNzIuNUwxMjIuNCw5Mi44TDEyMy41LDkzLjlMMTIyLjQsOTMuOUwxMjIuNCwxMTUuOTAyQzEyMy4wMjMsMTE1LjEwNiAxMjMuNjU3LDExNC41IDEyNC40LDExNC41QzEyNS40NTQsMTE0LjE5OSAxMjQuODU3LDExNi43MTIgMTI1LjUsMTE3LjZDMTI1Ljk4OCwxMTguMjczIDEyNi44MDUsMTE4LjcyMSAxMjcuNjA5LDExOC45MjhDMTMwLjE0NiwxMTkuNTggMTMyLjc0NywxMTcuMzAzIDEzNC41LDExNi4yQzEzNS4wNDMsMTE1Ljg1OSAxMzYuMzU2LDExNS4yNiAxMzYuNCwxMTUuOUMxMzYuNjUyLDExOS41NTggMTM2LjUyNiwxMjMuMjM1IDEzNi40LDEyNi45TDYzLjcsMTI2LjlMNjMuNywxMTQuOUM2NC44MTksMTE3Ljk0MyA2Ni44MzUsMTIwLjk0OCA3MC42MzcsMTE5LjA1QzcyLjM1NywxMTguMTkyIDczLjIwOSwxMTUuNzQ1IDc1LjEsMTE1LjRDNzUuNDY0LDExNS4zMzQgNzYuMjY2LDExNi4zMzUgNzcuMSwxMTcuMjc4TDc3LjEsOTMuOUw3Ni4yLDkzLjlMNzcuMSw5M0w3Ny4xLDkyLjlMNzcuMiw5Mi45Wk0xMjEuMiwxMTcuNTQ0TDEyMS4yLDk0LjFMNzguMyw5NC4xTDc4LjMsMTE4LjQ5Qzc4LjUyMSwxMTguNjY3IDc4LjcyNywxMTguNzk1IDc4LjkxMSwxMTguODQ1QzgzLjQwNywxMjAuMDg0IDgyLjM0NSwxMTYuMDA5IDg2LjksMTE1LjVDODcuNTg4LDExNS40MjMgOTAuNTQ5LDExOS4xMTQgOTEuNTgzLDExOS41MzZDOTUuNjk0LDEyMS4yMTUgOTUuODI2LDExNi42OTQgOTguOSwxMTUuOUMxMDAuMDc0LDExNS41OTcgMTAwLjUzOCwxMTguMjM3IDEwMC45LDExOC41QzEwMS44NiwxMTkuMTk4IDEwMy4wMjgsMTE5LjY1MSAxMDQuMiwxMTkuODM3QzEwOS4zMywxMjAuNjU1IDEwOC42ODUsMTE3LjIxNiAxMTEuOSwxMTQuOUMxMTIuODQ4LDExNC4yMTcgMTEzLjU1NiwxMTYuNjAyIDExMy41NjMsMTE2LjYxM0MxMTUuMSwxMTkuMjI5IDExNS4wOTIsMTIwLjI3MyAxMTguNjU5LDExOS42MDZDMTE5LjY2NiwxMTkuNDE4IDEyMC40NjUsMTE4LjUyOSAxMjEuMiwxMTcuNTQ0Wk05OS43NSw3My44NDZMOTkuOCw3My44TDk5LjcsNzMuOEw5OS43NSw3My44NDZMNzkuMyw5Mi43TDEyMC4yLDkyLjdMOTkuNzUsNzMuODQ2WlwifV0saVtcIkFDLklDLklOVkVSU0lPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDY5LjUsODcuOSBDIDY5LjUsODYuNyA3My42LDgzLjkgNzUuNSw4My45IGggMC4zIGMgMy4zLDAgOSw5LjEgMTUuMiw5LjEgaCAxLjggYyA1LjQsMCAxMS4zLC05LjEgMTQuOSwtOS4xIDMuNSwwIDguOCw5LjEgMTUuMiw5LjEgaCAwLjkgYyA4LjUsMCAxMC41LC00LjQgMTUuNSwtNyBsIC01LjMsLTYuNCBjIC0zLjQsMS44IC00LjEsNC42IC05LjUsNS4zIC0yLjIsMC4zIC02LjYsLTMuOSAtOC4zLC01LjUgLTgsLTYuOCAtMTMsLTMgLTE5LjQsMiAtMy45LDMuMSAtMy45LDUuMyAtOC41LDEuMyAtMi4yLC0xLjggLTUuNiwtNC44IC04LjIsLTYgLTMuOCwtMS44IC04LjYsLTAuNyAtMTEuNCwxLjIgLTEuNiwxIC03LjMsNS4yIC03LjMsNi45IHYgNTIuMiBoIDguMiBWIDg3LjkgeiBtIC05LjQsLTE2LjQgNzkuOSwwIDAsLTguNSAtNzkuOSwwIHpcIn1dLGlbXCJBQy5JQy5UU1VOQU1JXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjMsMTIyIDM5LjUsLTAuMSAzMC44LDAuMyBjIC03LjEsMCAtMTIuOCwtMS43IC0xNi45LC00LjggLTMuNywtMi45IC03LjcsLTggLTcuNywtMTQuNCAwLC05LjEgNi45LC0xNi41IDE1LjgsLTE2LjUgaCAwLjcgYyA2LjUsMCA4LjIsMi44IDExLjgsNS4zIC0yLC04LjYgLTEwLjYsLTE0LjIgLTIxLjQsLTE0LjIgaCAtMC4yIGMgLTE4LjIsMCAtNDQuOSwzMyAtNTIuNCw0NC4zIGwgMCwwIDAsMCB6XCJ9XSxpW1wiQUMuSUMuQklSRFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgxLjYsOTIuNSAtMTguNCwyLjkgdiAwLjMgbCA2LjYsMC41IGMgLTAuNywwLjUgLTMuMywxLjEgLTQuNSwxLjUgLTIuNiwwLjkgLTIsMC4zIC0zLjUsMi40IGwgMy40LDAuMSAtMSwxIGMgMS44LDAgMy4zLDAuMSA0LjgsMC4yIDEuNCwwLjEgMS45LC0xLjMgMy41LC0xLjQgMywtMC4yIDUuNywwLjIgOS4zLDAuMyBsIC0wLjgsMC41IGMgMC42LDAuMSAwLjcsMC4yIDEuNCwwLjIgaCAxLjYgbCAwLjEsMC45IDIuOSwxLjIgMS42LC0wLjEgYyAxLjYsMS4xIDEuOSwyLjMgNS4yLDIuNCAwLjIsMi43IDAuNiwzLjggMyw0LjQgdiAwLjggYyAwLDIuMiAwLjIsNC44IDIuMSw1IGwgMS4yLDUuMyBoIC0wLjQgdiAwLjQgYyAtMC4zLC0wLjMgLTEuNCwtMS4yIC0xLjgsLTEuMiBoIC0wLjIgYyAtMC41LDAgLTAuNSwwLjEgLTEsMC4yIDAuNiwwLjggMi43LDEuNyAzLjEsMi43IDAuNSwxLjYgMC4xLDMuOCAwLjIsNS4zIGwgMC45LDAuNiAwLjgsLTAuMSAwLjEsLTAuOCAtMC4xLC0yLjcgYyAwLjcsMC41IDIuNywzIDMuMywzIGggMSBjIC0wLjUsLTIgLTEuOCwtMi40IC0yLjcsLTMuOSBsIDMuNywxLjEgYyAtMSwtMS41IC0wLjksLTEuOCAtMi45LC0yLjMgLTMuMSwtMC44IC0xLjgsLTEuOSAtMy4xLC0yLjIgbCAtMSwtNS40IGMgMSwtMC4yIDEuNCwtMSAxLjQsLTIuMiBsIDAuMSwtMS42IC0wLjMsLTIuNiBoIDEgYyAwLjcsMCAwLjcsLTAuMiAxLjQsLTAuNCAwLjEsMS42IDEuMiwzLjMgMi43LDMuNCBsIDMuMSw2LjMgYyAtMC4zLDAuMyAtMC40LDAuMyAtMC40LDAuOCB2IDAuNyBsIC00LjQsLTAuOSB2IDAuMiBjIDAuOCwwLjcgMy43LDEuNyA1LjEsMi44IDEuMSwwLjggMS4yLDAuNiAyLDEuOSAwLjMsMC41IDEuMywyLjIgMS45LDIuMiBoIDAuOCBsIDAuMiwtMC4xIC0xLjcsLTMuMiA0LjMsMS45IGMgLTAuMSwtMi4xIC0yLjEsLTEuNSAtMy42LC0yLjggaCAzIGMgLTEuMywtMS4xIC0xLjYsLTAuOSAtMy41LC0xLjIgLTEuNiwtMC4yIC0xLjcsLTEuMiAtMi43LC0yLjEgLTEuMSwtMS4yIC0yLC00LjkgLTIuOSwtNi42IDEuMiwtMS44IDEsLTEuNCAxLC00LjQgNC44LC0yLjMgNS42LC0yLjEgOS4zLC01LjkgMi43LC0yLjcgMy45LC02LjEgNS44LC05LjcgMC45LC0xLjggMS41LC0zLjMgMi4yLC01LjIgMC43LC0xLjggMC43LC00LjcgMS40LC02LjMgMi4zLC00LjYgOSwtMy4yIDEwLjMsLTUuMiBsIC00LjQsMC4yIHYgLTAuMiBsIDUsLTAuNiBjIC0yLjIsLTEuOSAtNC44LC0xLjQgLTguMywtMS44IC0yLjEsLTAuMyAtMi45LDAuNyAtNC40LC0wLjMgLTEuNCwtMSAtMS42LC0xLjIgLTMuNywtMS41IC0zLjEsLTAuNSAtNS42LDEuMiAtNy40LDIuNSAtMS43LDEuMyAtMy4yLDUuMiAtNC4yLDYuMSAtMC4zLDAuMiAtNi4xLDIuNyAtNy4xLDMuMiAtMi45LDEuNSAtMy41LDIuNSAtNy4zLDMuMSAtNi4zLDEgLTkuOSwzLjQgLTE0LjIsNi4zIGwgMCwwIHpcIn1dLGlbXCJBQy5JQy5JTlNFQ1RcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3Ny40LDg4LjggMC4xLC0wLjMgNi4xLDQuOSAtMC4xLDAuMiBjIC0yLjIsMS41IC03LjcsOSAtMTAsOSBsIC0xLjYsLTAuMSA1LjYsLTEzLjcgeiBtIDcuMSwzLjMgYyAtMC40LC0xLjcgLTUsLTYuNCAtNi43LC03LjIgLTAuNCwwLjMgLTEuOCwxIC0xLjgsMS42IDAsMC44IDAuMywxIDAuNSwxLjUgbCAtNS42LDE0LjcgaCAtMSBjIDAuMiwwLjkgMC41LDAuNyAwLjUsMSAwLDAuMyAtMyw3LjggLTMuMyw4LjcgLTAuNiwxLjQgLTEsMi43IC0xLjYsNC4yIC0wLjMsMC44IC0wLjYsMS42IC0wLjksMi4yIC0wLjUsMS4xIC0wLjYsMC4zIC0xLjQsMS43IGwgLTEuMywwLjMgYyAwLjMsMC41IDEuOCwwLjUgMi41LDAuNCAxLjIsLTAuMiAwLjQsLTEgMC44LC0yLjIgMC43LC0xLjggMS40LC0zLjUgMi4xLC01LjQgMC41LC0xLjIgMy43LC0xMC4zIDQuNiwtMTAuMyBoIDEuMyBjIDAuOCwwIDEsMC4zIDEuNSwwLjUgbCAyLjMsLTIuOCBjIDIuNywxLjggOC41LDQuNiAxMi44LDQuNiBoIDAuNyBsIDAuMiwtMC4xIC0zLjUsLTUgLTkuOSwtMC4xIDYuNSwtNi4zIGMgNC4zLDIuOSAxMS43LDE2LjkgMTQuOSwxNi45IGggMC4zIGMgMS40LDAgMS4zLC0wLjYgMS44LC0xLjYgLTAuOSwtMy43IC00LjgsLTYuMyAtNy4zLC04LjUgLTIuNCwtMiAtNi4xLC02LjUgLTguMywtNy45IDEuMiwtMS43IDEwLjMsLTEwLjggMTIuMiwtMTEuMyBsIDAuOSw3LjcgMC4xLDIuOSAtMS4yLDcuNCBoIC0xLjggbCA1LjIsNC40IDcuMiwtMy45IGMgLTAuNSwyLjEgLTAuMywyLjUgLTIuMiwzLjQgLTAuNiwwLjMgLTMuNywxLjkgLTMuNywyLjMgMCwwLjUgMC43LDEuNyAwLjcsMy4xIDAsMi45IC0zLjEsNC40IC01LjgsMy4zIC0yLjEsLTEgLTQuOSwtNS4xIC01LjUsLTUuMSBoIC0xIGMgLTQuNiwwIC02LjcsMS42IC0xMC41LDEuNiBoIC0wLjUgYyAtMS45LDAgLTIuNSwtMC43IC00LjEsLTAuNyBoIC0wLjUgYyAtMC42LDAgLTEsMC40IC0xLDEgMCwzLjIgMTIuMyw0LjcgMTYuOSw0LjYgbCAxMy4xLC0wLjMgdiAwLjMgYyAtMC45LDEuMyAtNS44LDQuOCAtOCw0LjggLTAuMSwwLjIgLTAuNSwwLjcgLTAuNSwwLjggMCwwLjcgMC4xLDAuNyAwLjMsMS4zIDAuNywwLjEgMC41LDAuMyAxLDAuMyAwLjUsMCAwLjUsLTAuMiAxLC0wLjUgdiAtMS4zIGwgNy43LC01LjQgLTEuNiw2LjEgYyAtMC45LDAuMSAtMS4zLDAuNCAtMS4zLDEuMyAwLDAuOSAwLjUsMC43IDEuNCwxLjIgbCAxLjIsLTEuNCBjIDAsLTAuMiAtMC43LC0xLjMgLTAuNywtMS40IDAsLTEuMyAyLjQsLTcuNiAyLjgsLTkuNSBsIDE1LjYsLTAuNSAxLjIsOC40IC0wLjQsMC4xIGMgMC4zLDAuNSAwLjMsMSAxLDEgMSwwIDEuMSwtMC4zIDEuNiwtMC43IC0wLjUsLTEgLTAuNSwtMS45IC0xLjcsLTEuMyBsIC0wLjgsLTYuNyA0LjgsNS41IC0wLjcsMC44IDEuNCwxLjIgYyAwLjUsLTAuMyAxLC0wLjIgMSwtMSB2IC0wLjUgYyAwLC0wLjkgLTAuOSwtMSAtMS42LC0xLjIgbCAtNC41LC01IDAuMywtMSBoIC04LjUgYyAwLC01IDIsLTguMiAyLjMsLTEyLjQgbCAtOS4yLDAuNCAtMC44LDIuNSBoIC00LjYgYyAtMS44LDAgLTIuOCwtOCAtMi45LC0xMC4zIDAsLTIuNCAtMC4zLC00LjEgLTAuMiwtNi40IDAuMSwtMS40IDEsLTUuMSAtMSwtNS4xIGggLTAuNyBjIC0xLDAgLTEuMywxIC0xLjYsMS44IC0wLjMsMSAtMSwxLjQgLTEuNiwyIC0xLjIsMS4zIC0yLjMsMi40IC0zLjUsMy42IC0xLjIsMS4yIC02LjIsNi43IC03LjQsNyBsIDAsMCB6IG0gMzcuOSw4IGMgMCwtMC4zIDAuMywtMC41IDAuNywtMC41IGggMC43IGwgMC4xLDAuNSAtMC4zLDEgaCAtMSBjIC0wLjEsLTAuNyAtMC4zLC0wLjQgLTAuMywtMSB6IG0gMy42LC0xLjggYyAtMC4yLDAgLTEuNiwtMS44IC0zLjMsLTEuOCBoIC0wLjUgYyAtMiwwIC0yLDIuMiAtMi41LDMuOSAtMC41LDEuNCAtMS40LDMuNyAtMS40LDUuNCAwLDAuNiAwLjQsMSAxLDEgMi40LDAgNi40LC01LjIgNi45LC03LjQgMy45LDAgMTEuMSwtMS4xIDExLjgsLTMuOSAtMi42LDAuNyAtMi45LDIuNCAtOCwyLjggMS44LC0xLjYgNS42LC00LjMgNS45LC03LjIgaCAtMC41IGMgLTAuOCwzLjEgLTUuNiw3LjIgLTkuNSw3LjIgelwifV0saVtcIkFDLklDLk1JQ1JPQklBTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgzLjksOTMuMyBjIC0zLjMsMCAtNiwyLjcgLTYsNiAwLDMuMyAyLjcsNiA2LDYgMy4zLDAgNiwtMi43IDYsLTYgMCwtMy4zIC0yLjcsLTYgLTYsLTYgeiBNIDEwMCw4NS41IGMgLTExLjEsMCAtMjEuMiwxLjUgLTI4LjYsNC4xIC0zLjcsMS4zIC02LjcsMi44IC04LjgsNC41IC0yLjEsMS43IC0zLjQsMy43IC0zLjQsNS45IDAsMi4yIDEuMyw0LjIgMy40LDUuOSAyLjEsMS43IDUuMSwzLjIgOC44LDQuNSA3LjQsMi41IDE3LjUsNC4xIDI4LjYsNC4xIDExLjEsMCAyMS4yLC0xLjUgMjguNiwtNC4xIDMuNywtMS4zIDYuNywtMi44IDguOCwtNC41IDIuMSwtMS43IDMuNCwtMy43IDMuNCwtNS45IDAsLTIuMiAtMS4zLC00LjIgLTMuNCwtNS45IC0yLjEsLTEuNyAtNS4xLC0zLjIgLTguOCwtNC41IEMgMTIxLjIsODcuMSAxMTEuMSw4NS41IDEwMCw4NS41IHogbSAwLDEuNCBjIDExLDAgMjEsMS41IDI4LjIsNCAzLjYsMS4yIDYuNSwyLjcgOC40LDQuMyAxLjksMS42IDIuOSwzLjIgMi45LDQuOCAwLDEuNiAtMSwzLjMgLTIuOSw0LjggLTEuOSwxLjYgLTQuOCwzIC04LjQsNC4zIC03LjIsMi41IC0xNy4xLDQgLTI4LjIsNCAtMTEsMCAtMjEsLTEuNSAtMjguMiwtNCAtMy42LC0xLjIgLTYuNSwtMi43IC04LjQsLTQuMyAtMS45LC0xLjYgLTIuOSwtMy4yIC0yLjksLTQuOCAwLC0xLjYgMSwtMy4zIDIuOSwtNC44IDEuOSwtMS42IDQuOCwtMyA4LjQsLTQuMyA3LjIsLTIuNSAxNy4xLC00IDI4LjIsLTQgelwifV0saVtcIkFDLklDLlJFUFRJTEVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5My41LDgyLjMgYyAwLC0yIDEuOCwtMi43IDEuOCwtNC4zIDAsLTEgLTAuNiwtMS41IC0xLjIsLTIgLTIuOCwwLjMgLTYuNSwwLjYgLTcuNCwyLjcgLTAuNSwxLjIgLTAuNSwyLjQgLTEuMiwzLjkgLTAuNSwxIC0xLjIsMi40IC0xLjIsMy44IDAsMC44IDAuNCwwLjcgMC40LDEuNiB2IDAuOCBjIDAsMi4yIC0yLjQsMy41IC0wLjYsNi4xIC0wLjIsMC4zIC0yLDEuNSAtMi40LDEuNyAtMS43LDEgLTEuOCwtMC42IC0yLjYsLTAuNiBoIC0wLjggbCAtMC4zLC0xLjIgYyAtMC41LC0wLjMgLTEsLTAuOCAtMS43LC0wLjggLTAuOCwwIC0wLjgsMC41IC0wLjYsMSBsIC0yLjEsMC40IC0wLjgsMi4zIGggMSBjIDAuOSwwIDEuNCwwLjQgMS42LDEuMiBsIC0xLjUsMS4yIC0wLjEsMC40IGMgMi44LDAuMyA0LjYsLTAuNiA3LjIsLTEuMiAxLjUsLTAuNCA2LjgsLTAuNiA3LjMsLTEgbCAwLjEsLTIuMiBjIDEsMC4zIDIsMS4zIDMuMSwxLjcgMS4yLDAuNCAxLjcsMC44IDMuMSwxLjIgMi40LDAuNiA0LjUsMS4yIDcuNywxLjIgaCAwLjYgbCA2LjEsLTAuNiBjIDAsMi42IDIuMywyLjUgMi44LDQuNSAtMS4zLC0wLjMgLTIuMywtMiAtMy41LC0yIC0wLjEsMCAtMC40LDAuMSAtMC42LDAuMiBsIDAuMywxLjIgLTEuNiwwLjMgdiAwLjggbCAwLjYsMC40IC0wLjksMC42IDEsMSBjIC0wLjIsMC44IC0wLjcsMC42IC0wLjcsMS4zIDAsMC40IDAuMSwwLjYgMC42LDAuNiAwLjYsMCAxLjYsLTEgMi44LC0xIDEuOSwwIDguMywwLjggOC4zLC0wLjggdiAtMC4yIGMgMCwtMS41IC0zLjUsLTEuNiAtMy4zLC01LjUgNSwyLjYgOS4zLDcuNCA0LjUsMTMuNiAtMS41LDIgLTQuMSwzLjYgLTYuNyw0LjUgLTEuNCwwLjUgLTcuNCwxLjkgLTkuMywxLjUgLTQuMiwtMC44IC01LjQsLTAuOCAtOC44LC0yLjQgLTIuNiwtMS4yIC00LjcsLTIuNSAtNywtNCAtMy45LC0yLjQgLTEwLC02LjEgLTE2LjEsLTYuMSAtNSwwIC0xMS40LDMuMSAtMTEuNCw3LjkgMS4yLC0wLjYgMS4zLC0xLjMgMi4xLC0yLjIgMC41LC0wLjYgMS43LC0xLjMgMi40LC0xLjcgMS41LC0xIDMuOSwtMS44IDYuNSwtMS44IGggMSBjIDQuNCwwIDExLjYsNC43IDE0LjUsNi43IDQuNSwzLjEgOC4xLDUuNSAxNC43LDYuNyA3LDEuMiAxMi43LC0wLjEgMTcuNCwtMi44IDEuOSwtMS4xIDQuMywtMy4zIDUuNSwtNS4xIDEsLTEuNiAyLjksLTUuNCAyLjcsLTggbCAtMC4zLC0yLjYgYyAwLjMsMC4xIDIuOCwzLjcgMy42LDQuNSAwLjgsMC44IDMuOCwyLjUgNS4zLDIuNSAxLDAgNC40LC0yLjIgNC43LC0yLjkgbCAtMS4zLC0wLjYgMS4yLC0xIGMgLTEuNSwtMSAtMC44LC0wLjYgLTIuNCwtMC42IGggLTEgYyAwLC0xLjQgLTAuMywtMS44IC0xLjMsLTEuNiBsIDAuMiwwLjEgLTEuNywzLjQgYyAtMS40LDAgLTIuOSwtMC45IC0zLjYsLTEuOCAwLC0wLjEgLTEuMywtMy44IC0xLjMsLTMuOSAtMC42LC0yIC0wLjYsLTIuMiAtMS44LC0zLjYgLTEuMiwtMS4zIC0xLjksLTEuMiAtMy40LC0xLjkgbCAtMC4xLDAuNiBjIC0wLjYsLTEuOCAtNi4yLC02LjUgLTguMSwtNy40IC0yLjIsLTEuMiAtMy4yLC0xLjIgLTYsLTEuNyAtMi4xLC0wLjMgLTUuNCwwLjMgLTcsLTAuNSAwLjQsLTEuNSAxLjYsLTAuNiAxLjYsLTIuMiAwLC0wLjUgLTAuNywtMC40IC0xLjIsLTAuNCAwLjYsLTEuMiAtMC4zLC0xIC0xLjMsLTEgMC4xLC0wLjMgMC40LC0wLjYgMC40LC0xIDAsLTAuMyAtMC4zLC0wLjQgLTAuNiwtMC40IC0wLjQsMCAwLDAuNiAtMS4zLDAuNiAtMC4zLC0xIC0wLjMsLTEuMyAtMS41LC0xLjQgdiAxLjYgaCAtMS4zIHYgMC42IGMgMCwwLjggMC42LDEuNSAxLDIuMiAtMC40LDAuNyAtMC4zLDIgLTEuNCwyIC0wLjYsMCAtMS44LC0xLjUgLTMuMSwtMS45IC0xLjMsLTAuNCAtMywwLjUgLTMsLTEuNSAtMCwtMC45IDIuMSwtMi41IDIuOCwtMy41IGwgMCwwIHpcIn1dLGlbXCJBQy5JQy5ST0RFTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMTcuMiw4MC4zIGMgMC42LDEuMiAwLjYsMS43IDEuNSwyLjYgMC42LDAuNyAxLjgsMS4yIDEuOSwyLjIgLTIsLTAuMSAtNC4yLC0zLjMgLTQuNCwtNS4zIC0yLjEsLTAuNSAtOC40LC0zLjYgLTEwLjksLTQuNyAtMy4xLC0xLjMgLTguMywtMi43IC0xMi43LC0yLjcgaCAtMi4yIGMgLTQsMCAtOSwyLjUgLTExLjMsNC4yIC0zLDIuMiAtNS4yLDUuMiAtNS4yLDEwLjQgdiAwLjcgYyAtNC42LDEuMSAtMTEuNyw4LjQgLTExLjcsMTMuOSB2IDIuNCBjIDAsNi4yIDcuNywxMCAxMS44LDEyLjcgMi41LDEuNyA0LjcsMy4zIDcsNS4xIDIuMiwxLjcgNC43LDQuMiA2LjcsNS41IC0yLjEsLTkgLTIyLjQsLTEyLjcgLTIyLjQsLTI1LjEgMCwtNC41IDQuOSwtOS4zIDguNSwtMTAuMiAtMC4xLDAuNiAtMC4zLDAuNiAtMC4zLDEuMyB2IDAuNSBjIDAsNC41IDcuOCw0LjEgMTEuNSwzIDUuMSwtMS41IDguMSwtMi4yIDEzLjYsLTEuMiA1LjQsMS4xIDguMywxLjUgMTIuNywzLjYgMy43LDEuOSAyLDEuMiA0LjIsMy44IDEuMSwxLjMgMSwxLjEgMi45LDEuMyAwLjgsMC4xIDEuOCwxIDIuNCwxLjUgaCAxLjcgYyAtMS4zLC0yLjYgLTQuOSwtMi45IC01LjYsLTUuOCAwLjgsLTEuNSAxLjcsLTEuNyAzLjksLTEuNyAwLjgsMCAxLDAuMiAxLjcsMC4zIC0wLjMsLTAuNiAtMC42LC0xLjcgMC41LC0xLjcgaCAxLjkgYyA0LjUsMCA5LDIuNSAxMi43LDAgMCwtMyAwLjQsLTIuMiAtMC45LC00LjkgLTAuNSwtMC44IC0yLjEsLTIuNyAtMi44LC0zLjQgLTEuNiwtMS41IC01LjcsLTQuMSAtNi43LC01LjUgMCwtMi44IC0wLjQsLTMuNCAtMi43LC0zLjkgbCAtMC41LDEgMC41LDIuNyAtMSwwLjMgdiAwLjkgaCAtMC44IGMgLTAuMiwtMi40IC0xLjIsLTUuOCAtMy42LC01LjggaCAtMC4yIGMgLTEuOCwtNGUtNCAtMS41LDEgLTIsMS45IHogbSA5LjUsMjQuNiBoIDEuMiBjIC0wLjIsLTIuNiAtNS4xLC0yLjggLTUuNCwtNS40IGwgLTIuMiwwLjMgYyAwLjIsMS41IDEuMSwyLjkgMi40LDMuNSAwLjksMC4zIDEuNSwwIDIuMywwLjYgMC40LDAuMyAxLjEsMSAxLjcsMSB6IG0gLTQ1LjEsLTYuMSBjIDEuMiwxLjggNS45LDQuMiA4LjgsNC4yIDEsMCAxLjYsLTAuOCAxLjksLTEuNSAtMC45LC0xLjMgLTIuOSwtMi44IC00LjcsLTMuMSAtMy43LC0wLjggLTIuOSwwLjEgLTYsMC40IGwgMCwwIHogbSA5LjUsLTEuOSBjIDEuMywyIDUsMi45IDguMywyLjkgMC44LDAgMS40LC0wLjQgMS45LC0wLjcgLTIsLTIuOSAtNi4xLC0yLjYgLTEwLjIsLTIuMiB6XCJ9XSxpW1wiQUMuSUMuUEhBUk1BQ1lcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4My4zLDc0LjUgaCAxMy4yIGMgMywwIDYuMiwzLjggNiw3LjMgLTAuMSwzLjYgLTIuOSw2LjYgLTYuNSw2LjYgSCA4My4zIFYgNzQuNSB6IG0gLTguNyw0NS45IGggOC43IFYgOTggaCAyLjQgYyAwLjYsMCAxMy42LDE2LjEgMTMuNiwxNy4yIDAsMC42IC0xMy42LDE2LjYgLTE1LDE5LjMgbCAxMC41LC0wLjEgMTAuMywtMTIuMiA5LjYsMTIuMyAxMC45LC0wIC0xNS4yLC0xOS4zIDE0LjQsLTE3LjggLTEwLjIsLTAuMSAtOS43LDEwLjggLTcuNCwtMTAgYyA4LjUsLTIgMTQuMSwtNi44IDE0LjEsLTE3LjIgMCwtOC4xIC03LC0xNS4zIC0xNSwtMTUuMyBIIDc0LjYgdiA1NC44IHpcIn1dLGlbXCJHUi5JTi5JQy5FRFVDQVRJT05BTCBGQUNJTElUSUVTIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTkuNiwxMDcuMSBoIC0xNC44IHYgMzEuNyBoIDMyIHYgLTMxLjcgaCAtMTQuOCBWIDk1LjIgYyAwLC0wLjYgNi41LC0zIDcuNSwtMy40IDEuMywtMC41IDYuOSwtMyA3LjksLTMgLTAuMywtMC40IC0xNC43LC02LjMgLTE1LjcsLTYuMyBoIC0yLjMgdiAyNC41IHogbSAtMy4xLC00NSAtNS42LDE0LjggMS43LDAgMS4zLC0zLjggMC4xLC0wLjEgMC4xLDAgNi44LDAgMC4xLDAgMC4xLDAuMSAxLjMsMy44IDEuNywwIC01LjYsLTE0LjggLTIuMSwwIHogbSAwLjgsMS44IDAuMiwwLjEgMC4yLC0wLjEgMi44LDcuNSAwLjEsMC4zIC0wLjMsMCAtNS42LDAgLTAuMywwIDAuMSwtMC4zIDIuOCwtNy41IHogbSAtMTQuOCwtMS44IDguMywwIDAsMS4zIC02LjUsMCAtMC4yLDAgMCwwLjIgMCw0LjUgMCwwLjIgMC4yLDAgNS44LDAgMCwxLjMgLTUuOCwwIC0wLjIsMCAwLDAuMiAwLDcgLTEuNiwwIDAsLTE0LjggeiBtIDMwLjMsLTAuMyBjIDAuOSwxLjVlLTUgMS43LDAuMSAyLjUsMC40IGwgMCwwIGMgMC44LDAuMiAxLjQsMC42IDIuMSwxIGwgMCwxLjYgYyAtMC42LC0wLjUgLTEuMywtMC45IC0xLjksLTEuMiAtMC44LC0wLjMgLTEuNywtMC41IC0yLjYsLTAuNSAtMS44LDEuNGUtNSAtMy4yLDAuNiAtNC4xLDEuNyAtMSwxLjEgLTEuNCwyLjcgLTEuNCw0LjcgLTFlLTUsMiAwLjUsMy42IDEuNCw0LjcgMSwxLjEgMi40LDEuNyA0LjEsMS42IDAuOSwyZS02IDEuOCwtMC4yIDIuNiwtMC41IDAuNywtMC4zIDEuMywtMC43IDEuOSwtMS4yIGwgMCwxLjYgYyAtMC43LDAuNCAtMS40LDAuOCAtMi4xLDEgLTAuOCwwLjIgLTEuNiwwLjQgLTIuNSwwLjQgLTIuMywwIC00LC0wLjcgLTUuMywtMiAtMS4zLC0xLjQgLTEuOSwtMy4yIC0xLjksLTUuNiAwLC0yLjQgMC42LC00LjMgMS45LC01LjYgMS4zLC0xLjQgMywtMiA1LjMsLTIgelwifV0saVtcIkFUTU9TUEhFUklDLklDLkRSSVpaTEUuSU5URVJNSVRURU5UIExJR0hUXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigwLCAxMjgsIDApXCIsZDpcIm0gMTAwLDgyLjcgYyAtNS41LDAgLTEwLDQuNSAtMTAsMTAgMCw1LjUgNC41LDEwIDEwLDEwIDAuMSwwIDAuMSwwIDAuMiwwIGwgLTAuMiwwLjIgYyAwLjksNSAtOC40LDE0LjQgLTguNCwxNC40IDEyLjgsMC4xIDE4LjQsLTEzLjQgMTguMywtMjMuNCBsIC0wLDAgYyAwLC0wLjQgMC4xLC0wLjggMC4xLC0xLjIgMCwtNS41IC00LjUsLTEwIC0xMCwtMTAgelwifV0saVtcIkFUTU9TUEhFUklDLklDLkZPRy5TS1kgT0JTQ1VSRURcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDI1NSwgMjQ3LCAwKVwiLGQ6XCJtIDQ5LjYsNTkuNyAwLDggMTAwLjksMCAwLC04IC0xMDAuOSwwIHogbSAwLDcxLjYgMCw4IDEwMC45LDAgMCwtOCAtMTAwLjksMCB6IG0gMCwtMzUuNiAwLDggMTAwLjksMCAwLC04IC0xMDAuOSwwIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5IQUlMLkxJR0hUIE5PVCBBU1NPQ0lBVEVEIFdJVEggVEhVTkRFUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6XCJyZ2IoMTk4LCAxNiwgMzMpXCIsZDpcIm0gMTAwLDQ1LjUgLTAuOSwyLjEgLTE2LDM2IC0wLjYsMS40IDEuNSwwIDMyLDAgMS41LDAgLTAuNiwtMS40IC0xNiwtMzYgTCAxMDAsNDUuNSB6IG0gLTIxLjQsNDYuNyAwLjQsMS4zIDIwLDYwIDAuOSwyLjkgMC45LC0yLjkgMjAsLTYwIDAuNCwtMS4zIC0xLjQsMCAtNDAsMCAtMS40LDAgeiBtIDIuOCwyIDM3LjIsMCBMIDEwMCwxNTAgODEuNCw5NC4xIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5SQUlOLklOVEVSTUlUVEVOVCBMSUdIVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6XCJyZ2IoMCwgMTI4LCAwKVwiLGQ6XCJtIDEwMCw3OS44IGMgLTExLjIsMCAtMjAuMiw5IC0yMC4yLDIwLjIgMCwxMS4yIDksMjAuMiAyMC4yLDIwLjIgMTEuMiwwIDIwLjIsLTkgMjAuMiwtMjAuMiAwLC0xMS4yIC05LC0yMC4yIC0yMC4yLC0yMC4yIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5EVVNUIE9SIFNBTkQuTElHSFQgVE8gTU9ERVJBVEVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDE3MywgMTA1LCA3NSlcIixkOlwibSAxNDAuNyw4NSAtMiwyIDEzLDEzIC0xMywxMyAyLDIgMTQsLTE0IDEsLTEgLTEsLTEgTCAxNDAuNyw4NSB6IG0gLTkzLjUsMTMuNiAwLDIuOCAxMDYuNSwwIDAsLTIuOCAtMTA2LjUsMCB6IE0gOTguNSw2Mi4zIGMgLTMuMiwwIC02LjQsMC44IC05LjIsMi4yIC0zLjcsMS44IC02LjksNC40IC05LjMsNy4zIC0yLjMsMi45IC0zLjksNi4xIC0zLjksOS4zIDAsNS42IDIuOSw5LjkgNi45LDEzLjIgNCwzLjMgOSw1LjggMTMuOSw4LjMgNC45LDIuNSA5LjcsNC45IDEzLjEsNy43IDMuNCwyLjggNS40LDUuOCA1LjQsMTAuMSAwLDMuNiAtNCw5IC0xMCwxMS42IC02LDIuNiAtMTMuNiwyLjcgLTIwLjksLTMuNCBsIC0yLjcsMy4yIGMgOC40LDcuMSAxOCw3LjIgMjUuMyw0IDcuMiwtMy4xIDEyLjUsLTkuMiAxMi41LC0xNS40IDAsLTUuNiAtMi45LC0xMCAtNi45LC0xMy4zIC00LC0zLjMgLTksLTUuOCAtMTMuOSwtOC4yIC00LjksLTIuNSAtOS43LC00LjkgLTEzLjEsLTcuNyAtMy40LC0yLjggLTUuNCwtNS44IC01LjQsLTEwIDAsLTEuNyAxLC00LjMgMi45LC02LjcgMS45LC0yLjQgNC43LC00LjcgNy44LC02LjIgNi4yLC0zIDEzLjUsLTMuMSAxOS45LDQuNCBsIDMuMiwtMi43IEMgMTA5LjUsNjQuNCAxMDMuOSw2Mi4zIDk4LjUsNjIuMyB6XCJ9XSxpW1wiQVRNT1NQSEVSSUMuSUMuU05PVy5JTlRFUk1JVFRFTlQgTElHSFRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDAsIDEyOCwgMClcIixkOlwibSAxMTEuNSw3OC45IC0yNi40LDQwIDMuMywyLjIgMjYuNCwtNDAgLTMuMywtMi4yIHogbSAtMjMuMSwwIC0zLjMsMi4yIDI2LjQsNDAgMy4zLC0yLjIgLTI2LjQsLTQwIHogTSA4MCw5OCBsIDAsNCA0MCwwIDAsLTQgLTQwLDAgelwifV0saVtcIkFUTU9TUEhFUklDLklDLlNUT1JNUy5USFVOREVSU1RPUk0gTElHSFQgVE8gTU9ERVJBVEUgLSBXSVRIIEhBSUxcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDE5OCwgMTYsIDMzKVwiLGQ6XCJNIDEwMSA1MS45IEwgOTkuNyA1NC40IEwgODUuOCA4Mi4zIEwgODQuOCA4NC4zIEwgODcgODQuMyBMIDExNC45IDg0LjMgTCAxMTcuMiA4NC4zIEwgMTE2LjIgODIuMyBMIDEwMi4yIDU0LjQgTCAxMDEgNTEuOSB6IE0gMTAxIDU4LjEgTCAxMTIuNyA4MS41IEwgODkuMyA4MS41IEwgMTAxIDU4LjEgeiBNIDc4LjMgODcuNyBMIDc4LjMgOTAuNSBMIDgzLjkgOTAuNSBMIDgzLjkgMTQ1IEwgODYuNyAxNDUgTCA4Ni43IDkwLjUgTCAxMTcuOCA5MC41IEwgMTAyLjggMTE2LjQgTCAxMDIuNCAxMTcuMSBMIDEwMi45IDExNy44IEwgMTE3LjggMTQwLjkgTCAxMTEuMiAxMzYuOCBMIDEwOS44IDEzOS4yIEwgMTIwLjkgMTQ2LjIgTCAxMjMuMyAxNDcuNyBMIDEyMyAxNDQuOSBMIDEyMS43IDEzMC45IEwgMTE4LjkgMTMxLjIgTCAxMTkuNiAxMzguNiBMIDEwNS43IDExNyBMIDEyMS41IDg5LjggTCAxMjIuNyA4Ny43IEwgMTIwLjMgODcuNyBMIDc4LjMgODcuNyB6IFwifV0saVtcIkFUTU9TUEhFUklDLklDLlNUT1JNUy5GVU5ORUwgQ0xPVUQgKFRPUk5BRE8vV0FURVJTUE9VVClcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDE5OCwgMTYsIDMzKVwiLGQ6XCJNIDEyNS43LDU5LjEgMTEyLjQsNzIuNCAxMTIsNzIuOCBsIDAsMC42IDAsNTMuMyAwLDAuNiAwLjQsMC40IDEzLjMsMTMuMyAxLjksLTEuOSAtMTIuOSwtMTIuOSAwLC01Mi4yIDEyLjksLTEyLjkgLTEuOSwtMS45IHogbSAtNTEuNSwwIC0xLjksMS45IDEyLjksMTIuOSAwLDUyLjIgTCA3Mi40LDEzOS4xIDc0LjMsMTQwLjkgODcuNiwxMjcuNiA4OCwxMjcuMiBsIDAsLTAuNiAwLC01My4zIDAsLTAuNiBMIDg3LjYsNzIuNCA3NC4zLDU5LjEgelwifV0saVtcIkFUTU9TUEhFUklDLklDLlRST1BJQ0FMIFNUT1JNIFNZU1RFTVMuVFJPUElDQUwgU1RPUk1cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDE5OCwgMTYsIDMzKVwiLGQ6XCJNIDExMi4xIDU1IEMgOTYuOSA1OS45IDc2LjcgODEuOCA4Mi4yIDEwMS40IEMgODIuOSAxMTAuNiA5MC42IDExNy45IDEwMCAxMTcuOSBDIDEwMCAxMTcuOSAxMDAgMTE3LjkgMTAwLjEgMTE3LjkgQyA5OS4zIDEyOC4yIDg3LjkgMTQ1IDg3LjkgMTQ1IEMgMTAzLjEgMTQwLjEgMTIzLjMgMTE4LjIgMTE3LjggOTguNiBDIDExNy4xIDg5LjQgMTA5LjQgODIuMSAxMDAgODIuMSBDIDEwMCA4Mi4xIDEwMCA4Mi4xIDk5LjkgODIuMSBDIDEwMC43IDcxLjggMTEyLjEgNTUgMTEyLjEgNTUgeiBNIDEwMCA4NC41IEMgMTA2LjggODQuNSAxMTIuNSA4OC44IDExNC42IDk0LjggQyAxMTQuOCA5NS4yIDExNC45IDk1LjYgMTE1IDk2IEMgMTE1IDk2LjEgMTE1IDk2LjEgMTE1IDk2LjIgQyAxMTUuMSA5Ni42IDExNS4yIDk2LjkgMTE1LjMgOTcuMyBDIDExNS40IDk4LjEgMTE1LjUgOTkuMSAxMTUuNSAxMDAgQyAxMTUuNSAxMDEuMSAxMTUuNCAxMDIuMSAxMTUuMiAxMDMuMSBDIDExNSAxMDQuMSAxMTQuNyAxMDUgMTE0LjQgMTA1LjggQyAxMTQuNCAxMDUuOSAxMTQuMyAxMDUuOSAxMTQuMyAxMDYgQyAxMTQuMSAxMDYuNCAxMTQgMTA2LjcgMTEzLjggMTA3LjEgQyAxMTMuNyAxMDcuMiAxMTMuNyAxMDcuMyAxMTMuNyAxMDcuMyBDIDExMy42IDEwNy40IDExMy42IDEwNy41IDExMy41IDEwNy42IEMgMTEzLjMgMTA3LjkgMTEzLjEgMTA4LjMgMTEyLjkgMTA4LjYgQyAxMTIuNCAxMDkuMyAxMTEuOSAxMTAgMTExLjMgMTEwLjYgQyAxMTEuMiAxMTAuNyAxMTEuMSAxMTAuOCAxMTEuMSAxMTAuOSBDIDExMC44IDExMS4xIDExMC41IDExMS40IDExMC4zIDExMS42IEMgMTEwLjIgMTExLjcgMTEwLjIgMTExLjcgMTEwLjEgMTExLjggQyAxMDkuOCAxMTIgMTA5LjUgMTEyLjMgMTA5LjIgMTEyLjUgQyAxMDkuMSAxMTIuNSAxMDkuMSAxMTIuNSAxMDkuMSAxMTIuNSBDIDEwOC45IDExMi43IDEwOC42IDExMi45IDEwOC40IDExMyBDIDEwOC4xIDExMy4yIDEwNy44IDExMy40IDEwNy41IDExMy42IEMgMTA3LjQgMTEzLjYgMTA3LjQgMTEzLjYgMTA3LjQgMTEzLjcgQyAxMDYuNiAxMTQuMSAxMDUuNyAxMTQuNCAxMDQuOSAxMTQuNyBDIDEwNC43IDExNC44IDEwNC41IDExNC44IDEwNC4zIDExNC45IEMgMTA0IDExNSAxMDMuNiAxMTUuMSAxMDMuMyAxMTUuMiBDIDEwMy4yIDExNS4yIDEwMy4xIDExNS4yIDEwMy4xIDExNS4yIEMgMTAyLjEgMTE1LjQgMTAxLjEgMTE1LjUgMTAwIDExNS41IEMgOTMuMyAxMTUuNSA4Ny42IDExMS4zIDg1LjQgMTA1LjMgQyA4NS40IDEwNS4zIDg1LjQgMTA1LjIgODUuNCAxMDUuMiBDIDg1LjMgMTA0LjggODUuMiAxMDQuNSA4NS4xIDEwNC4yIEMgODUgMTA0IDg1IDEwMy45IDg1IDEwMy44IEMgODQuOSAxMDMuNSA4NC44IDEwMy4yIDg0LjggMTAyLjkgQyA4NC43IDEwMi41IDg0LjYgMTAyIDg0LjYgMTAxLjYgQyA4NC41IDEwMS4xIDg0LjUgMTAwLjUgODQuNSAxMDAgQyA4NC41IDk5IDg0LjYgOTggODQuOCA5NyBDIDg0LjggOTcgODQuOCA5Ni45IDg0LjggOTYuOSBDIDg0LjkgOTYuNCA4NSA5NiA4NS4yIDk1LjYgQyA4NS4zIDk1LjIgODUuNCA5NC45IDg1LjUgOTQuNSBDIDg1LjYgOTQuMyA4NS42IDk0LjIgODUuNyA5NCBDIDg1LjcgOTMuOSA4NS44IDkzLjggODUuOCA5My44IEMgODYgOTMuNCA4Ni4yIDkzIDg2LjMgOTIuNyBDIDg2LjQgOTIuNiA4Ni40IDkyLjUgODYuNSA5Mi40IEMgODYuNyA5Mi4xIDg2LjkgOTEuNyA4Ny4xIDkxLjQgQyA4Ny4zIDkxLjEgODcuNSA5MC44IDg3LjggOTAuNSBDIDg4IDkwLjIgODguMiA5MCA4OC40IDg5LjcgQyA4OC42IDg5LjUgODguOCA4OS4zIDg4LjkgODkuMSBDIDg5IDg5IDg5LjEgODkgODkuMiA4OC45IEMgODkuNCA4OC43IDg5LjcgODguNCA4OS45IDg4LjIgQyA5MC4yIDg4IDkwLjUgODcuOCA5MC44IDg3LjUgQyA5MC44IDg3LjUgOTAuOSA4Ny41IDkwLjkgODcuNSBDIDkxLjEgODcuMyA5MS40IDg3LjEgOTEuNiA4NyBDIDkxLjkgODYuOCA5Mi4yIDg2LjYgOTIuNSA4Ni40IEMgOTIuNiA4Ni40IDkyLjYgODYuNCA5Mi42IDg2LjMgQyA5My4xIDg2LjEgOTMuNSA4NS45IDk0IDg1LjcgQyA5NC40IDg1LjYgOTQuNyA4NS40IDk1LjEgODUuMyBDIDk1LjMgODUuMiA5NS41IDg1LjIgOTUuNyA4NS4xIEMgOTYgODUgOTYuNCA4NC45IDk2LjggODQuOCBDIDk2LjggODQuOCA5Ni44IDg0LjggOTYuOSA4NC44IEMgOTYuOSA4NC44IDk2LjkgODQuOCA5Ni45IDg0LjggQyA5Ny40IDg0LjcgOTcuOSA4NC42IDk4LjQgODQuNiBDIDk4LjkgODQuNSA5OS41IDg0LjUgMTAwIDg0LjUgeiBcIn1dLGlbXCJBQy5JQy5FTVQgU1RBVElPTiBMT0NBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEwMCA1NSBMIDcwIDgwIEwgNzUgODAgTCA3NSAxMjUgTCAxMjUgMTI1IEwgMTI1IDgwIEwgMTMwIDgwIEwgMTAwIDU1IHogTSA5NSA4MCBMIDEwNSA4MCBMIDEwNSA5MS4zIEwgMTE0LjggODUuNyBMIDExOS44IDk0LjMgTCAxMTAgMTAwIEwgMTE5LjggMTA1LjcgTCAxMTQuOCAxMTQuMyBMIDEwNSAxMDguNyBMIDEwNSAxMjAgTCA5NSAxMjAgTCA5NSAxMDguNyBMIDg1LjIgMTE0LjMgTCA4MC4yIDEwNS43IEwgOTAgMTAwIEwgODAuMiA5NC4zIEwgODUuMiA4NS43IEwgOTUgOTEuMyBMIDk1IDgwIHogXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSA5NSA4MCBMIDk1IDkxLjMgTCA4NS4yIDg1LjcgTCA4MC4yIDk0LjMgTCA5MCAxMDAgTCA4MC4yIDEwNS43IEwgODUuMiAxMTQuMyBMIDk1IDEwOC43IEwgOTUgMTIwIEwgMTA1IDEyMCBMIDEwNSAxMDguNyBMIDExNC44IDExNC4zIEwgMTE5LjggMTA1LjcgTCAxMTAgMTAwIEwgMTE5LjggOTQuMyBMIDExNC44IDg1LjcgTCAxMDUgOTEuMyBMIDEwNSA4MCBMIDk1IDgwIHogXCJ9XSxpW1wiQUMuSUMuSEVBTFRIIERFUEFSVE1FTlQgRkFDSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMzEuNCw4My42IDEwMCw2OC40IDY4LjUsODMuNSB6IG0gLTI2LjQsMTQuNiAwLC05LjcgLTEwLjEsMCAwLDkuNyAtOS41LDAgMCwxMC40IDkuNSwwIDAsOS41IDEwLjEsMCAwLC05LjUgOS42LDAgMCwtMTAuNCB6IG0gLTI3LjIsMTkuNSAwLC0yNy44IDEuNCwwIDAsLTMuNyAtNy4zLDAgMCwzLjcgMS4yLDAgMCwyNy44IC0xLjIsMCAwLDMuOCA3LjMsMCAwLC0zLjggeiBtIDQ4LjcsMCAwLC0yNy44IDEuNCwwIDAsLTMuNyAtNy4zLDAgMCwzLjcgMS4yLDAgMCwyNy44IC0xLjIsMCAwLDMuOCA3LjMsMCAwLC0zLjggeiBtIC01Ni40LDUuMSAwLDMgNTkuNCwwIDAsLTMgeiBtIC0xLjgsNi4xIDAsMi44IDYzLjIsMCAwLC0yLjggelwifV0saVtcIkFDLklDLk1FRElDQUwgRkFDSUxJVElFUyBPVVRQQVRJRU5UXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODEuOCw2My42IDI2LjYsOSAwLDYzLjkgLTI2LjYsLTkuMSB2IC02My44IGwgMCwwIHogbSAtMS42LDY1IDI5LjksMTAuNCB2IC0xMC42IGggOS44IFYgNjEgSCA4MC4yIHYgNjcuNiBsIDAsMCB6IG0gMjEuNCwtMTguMSBjIDAsMS4xIDEsMi42IDIuMiwyLjYgMC44LDAgMS4yLC0wLjggMS4yLC0xLjYgdiAtMC40IGMgMCwtMS4yIC0xLjEsLTMgLTIsLTMgLTAuOCwwIC0xLjQsMC44IC0xLjQsMS42IHYgMC44IEggMTAxLjUgeiBNIDg1LjksOTAuOSBjIDAuOSwwLjEgNS4zLDEuOCA1LjMsMi40IHYgNy4xIGwgNS43LDIuMiB2IC03LjUgbCA1LjUsMS45IFYgODkuMSBDIDEwMS41LDg4LjggOTYuOSw4Ny4yIDk2LjksODYuNiBWIDc5LjUgTCA5MS4yLDc3LjYgdiA3LjQgbCAtNS4zLC0yIHYgNy45IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDgxLjggNjMuNiBMIDgxLjggMTI3LjQgTCAxMDguNCAxMzYuNiBMIDEwOC40IDcyLjcgTCA4MS44IDYzLjYgeiBNIDkxLjIgNzcuNiBMIDk2LjkgNzkuNSBMIDk2LjkgODYuNiBDIDk2LjkgODcuMiAxMDEuNSA4OC45IDEwMi4zIDg5LjEgTCAxMDIuMyA5NyBMIDk2LjggOTUuMiBMIDk2LjggMTAyLjYgTCA5MS4xIDEwMC40IEwgOTEuMSA5My4zIEMgOTEuMSA5Mi42IDg2LjggOTEgODUuOSA5MC45IEwgODUuOSA4MyBMIDkxLjIgODUgTCA5MS4yIDc3LjYgeiBNIDEwMi45IDEwOC4xIEMgMTAzLjkgMTA4LjEgMTA1IDEwOS45IDEwNSAxMTEuMiBMIDEwNSAxMTEuNiBDIDEwNSAxMTIuNCAxMDQuNiAxMTMuMiAxMDMuOCAxMTMuMiBDIDEwMi41IDExMy4yIDEwMS41IDExMS42IDEwMS41IDExMC42IEwgMTAxLjUgMTEwLjYgTCAxMDEuNSAxMDkuOCBDIDEwMS41IDEwOC45IDEwMi4xIDEwOC4xIDEwMi45IDEwOC4xIHogXCJ9XSxpW1wiQUMuSUMuT1BFUkFUSU9OL0VNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDczLjcsODkuNyBjIDAuNCw0LjkgMi4zLDExLjMgMy40LDE1LjYgMS40LDUuNyAzLjUsOC43IDYuMSwxMy4xIDIuMiwzLjYgMy40LDkuNiA1LjYsMTMuNCAwLjcsMS4zIDIuOCw1LjMgMy42LDYgMC41LDAuNCA1LjUsNCA1LjYsNCAxLjYsMCA5LjcsLTAuNCAxMC40LC0wLjcgMC4zLC0wLjEgNC4xLC02LjYgNC4xLC03IHYgLTMgaCAtNy44IGMgLTIuNywwIC01LjYsLTEuMyAtOC40LC0xLjMgViAxMTIuNiBjIDAsLTIuNCAxLjMsLTE3LjMgMi4xLC0xOCAwLjgsLTAuNyAxMS40LC04LjIgMTEuOSwtOC4zIGwgLTEsLTguNSBjIC0wLjUsMC4yIC01LjYsMSAtNiwwLjkgLTEsLTAuMiAtNC43LC0xLjQgLTUuNSwtMS44IC0xLjksMS4xIC00LjQsMS44IC02LjUsMi43IC0xLjYsMC43IC0zLjUsMi43IC01LjUsMy43IC0yLjQsMS4yIC0zLjksMS43IC02LjcsMi41IC0xLjYsMC40IC0yLjQsMC40IC0zLjMsMS41IC0wLjcsMC44IC0xLjcsMS44IC0yLjIsMi41IHogbSAyNy44LDM2LjEgYyAwLC04LjEgMiwtMTYuOCAxLjksLTI0LjggMCwtMS4yIDAuMiwtMS45IDAuMiwtMy4yIDAsLTEuNCAwLjQsLTEuNCAxLjIsLTIuMiAxLjIsLTEuMSAyLjQsLTIgMy42LC0zIDIuMSwtMS43IDUsLTQuOCA3LjEsLTYuMSAwLjMsMC4xIDAuMywwLjIgMC45LDAuMiBoIDQuOSBjIDAuMiwwLjggNC45LDYuNCA1LjgsNy40IDIuNiwzLjEgMy44LDMuOSAyLjksOS42IC0wLjUsMy4yIC0wLjcsOC42IC0xLDEyIC0wLjMsNCAtMC45LDguMSAtMC45LDEyLjIgbCAtMjYuNywtMi4yIHogbSAtMS43LDEuMyAyOS44LDIuMiAyLjQsLTMxLjQgLTkuOCwtMTIuNiAtNy4yLC0wLjMgYyAtMC4yLDAgLTYuOSw1LjkgLTcuOCw2LjUgLTEuNCwxLjEgLTIuNSwyLjMgLTMuOSwzLjIgLTEuNywxLjIgLTEuMiwzLjMgLTEuNCw1LjkgLTAuNiw4LjQgLTIuMSwxOC4xIC0yLjEsMjYuNSB6IG0gMTIuOCwtOSAwLjIsMCBjIDIuMywwIDYuNSwyLjggOC4xLDIuOCBoIDMgViAxMTkuNCBIIDEyMS40IGMgLTAuNiwwIC02LjEsLTIuMyAtNy4yLC0yLjcgLTEuNSwtMC42IC02LjYsMC4zIC04LjYsMC4zIHYgMS4zIGwgNy4xLC0wLjMgeiBtIC01LjYsLTcuOSAwLjIsMS41IGMgMy4xLC0wLjcgNS42LC0xLjQgOC43LC0wLjggMS4zLDAuMyAyLjgsMC42IDQuMiwwLjkgMi41LDAuNiAyLjgsMS4yIDMuMywtMSAtMS4zLDAgLTYuOCwtMS4zIC04LjQsLTEuNyAtMi41LC0wLjcgLTUuNSwwLjQgLTguMSwxLjEgeiBtIC0wLjIsLTguMSAwLjUsMS40IDUuNywtMS45IDUsMy43IDgsLTEgLTAuMywtMS43IC03LjMsMSBjIC0wLjgsLTAuNiAtNC43LC0zLjYgLTUuMywtMy42IC0wLjUsMCAtNS42LDEuOSAtNi4yLDIuMiB6IG0gMTAuNywtNy4zIGggMS4xIGMgMS4yLDAgMi41LC0xLjMgMi41LC0yLjUgdiAtMC40IGMgMCwtMS40IC0xLjYsLTIuNSAtMywtMi41IC00LjQsLTAgLTMuNiw1LjUgLTAuNiw1LjUgeiBNIDY3LjksODEuOCBjIDAsMS41IDMuMiw0LjQgNC4yLDUuMSBsIDEuNSwtMS42IC0yLjEsLTQuNyBoIC0yLjIgYyAtMC41LDAgLTEuNSwxLjEgLTEuNSwxLjIgeiBNIDExMC4yLDcwLjUgYyAwLjgsMC40IDIuNCwwLjggMi40LDEuOSAwLDAuOSAtMC41LDEuNCAtMC42LDIuMSBsIC0yLjYsLTAuNCBjIC0xLC0wLjEgLTQuMiwwLjYgLTUuOCwwLjYgdiAxLjEgYyAwLDEuMSA0LDAgNS42LDAgaCAwLjQgYyAxLjcsMCA1LjQsMS4yIDYuMiwxLjkgMC41LDAuNSAxLjQsNS4yIDEuOSw2LjIgMS44LC0wLjkgMS4zLC0wLjUgMC42LC0zLjIgLTAuMywtMC45IC0xLjEsLTMuMSAtMS4xLC00IGwgLTMuOSwtMS42IDEuMiwtMi4zIGMgLTEuMSwtMi4xIC0wLjgsLTMuNiAtNCwtMy42IGwgLTAuMywxLjIgeiBtIC0zNi41LDYuNiBjIDAsMC45IDIsNC42IDIuMiw2IDAuMywwLjEgMS4xLDAuNCAxLjEsMC40IDAuMywwIDIuMSwtMC45IDIuOCwtMS4xIC0wLjcsLTMuMSAtMS43LC02LjYgLTQuMywtNy45IC0wLjIsMC43IC0xLjcsMi4zIC0xLjcsMi41IHogbSA1LjksLTMuNiBjIDEuOSw0LjEgMC40LDMuNyA0LjIsNyBsIDIuNCwtMS4yIHYgLTMuOCBjIDAsLTEuNSAtMS4yLC0zLjYgLTEuMywtNS4zIGwgLTEuOSwtMC4yIGggLTEuNyBsIC0xLjYsMy43IHogbSA3LjYsLTIuOCAyLjUsNSAzLjksLTAuOCBjIDAsLTEgMC42LC0yLjUgMC42LC0zLjQgMCwtMi4yIC0xLjEsLTQuNyAtMS4xLC02LjkgSCA4OC41IGwgLTEuMyw2IHogTSA5Ny44LDYyLjggYyAwLDAuNiAwLjIsNy4yIDAuMyw3LjQgMC4zLDEgMy43LDIuNiA1LjUsMi40IDAuOSwtMC4xIDIuNSwtMC4zIDMuNSwtMC40IDEuOCwtMC4yIDEuMiwtMC42IDEuNSwtMi42IDAuMiwtMS45IDAuNiwtNC45IDEuMSwtNi44IC0wLjQsLTAuOCAtMi40LC00LjcgLTMuMiwtNC43IGggLTUuMSBjIC0wLjcsMCAtMyw0IC0zLjUsNC43IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDExNS42IDg2LjYgQyAxMTMuNSA4OCAxMTAuNiA5MSAxMDguNSA5Mi43IEMgMTA3LjMgOTMuNyAxMDYgOTQuNiAxMDQuOCA5NS43IEMgMTA0IDk2LjQgMTAzLjYgOTYuNSAxMDMuNiA5Ny44IEMgMTAzLjYgOTkuMiAxMDMuNCA5OS45IDEwMy40IDEwMS4xIEMgMTAzLjUgMTA5LjEgMTAxLjUgMTE3LjggMTAxLjUgMTI1LjkgTCAxMjguMiAxMjggQyAxMjguMiAxMjQgMTI4LjggMTE5LjkgMTI5LjEgMTE1LjggQyAxMjkuMyAxMTIuNCAxMjkuNiAxMDcuMSAxMzAuMSAxMDMuOCBDIDEzMSA5OC4xIDEyOS44IDk3LjMgMTI3LjIgOTQuMiBDIDEyNi4zIDkzLjEgMTIxLjYgODcuNiAxMjEuNCA4Ni44IEwgMTE2LjUgODYuOCBDIDExNS45IDg2LjggMTE1LjkgODYuNyAxMTUuNiA4Ni42IHogTSAxMTguMiA4OS4zIEMgMTE5LjUgODkuMyAxMjEuMSA5MC40IDEyMS4xIDkxLjkgTCAxMjEuMSA5Mi4zIEMgMTIxLjEgOTMuNiAxMTkuOCA5NC45IDExOC42IDk0LjkgTCAxMTcuNSA5NC45IEMgMTE0LjUgOTQuOSAxMTMuOCA4OS4zIDExOC4yIDg5LjMgeiBNIDExMy4xIDEwMCBDIDExMy43IDEwMCAxMTcuNiAxMDMuMSAxMTguNCAxMDMuNyBMIDEyNS43IDEwMi42IEwgMTI2IDEwNC4zIEwgMTE4IDEwNS4zIEwgMTEzIDEwMS42IEwgMTA3LjMgMTAzLjYgTCAxMDYuOSAxMDIuMiBDIDEwNy41IDEwMS45IDExMi41IDEwMCAxMTMuMSAxMDAgeiBNIDExMy4yIDEwOSBDIDExMy45IDEwOSAxMTQuNSAxMDkuMSAxMTUuMiAxMDkuMiBDIDExNi43IDEwOS42IDEyMi4yIDExMC45IDEyMy41IDExMC45IEMgMTIzIDExMyAxMjIuNyAxMTIuNCAxMjAuMiAxMTEuOCBDIDExOC44IDExMS41IDExNy4zIDExMS4yIDExNiAxMTAuOSBDIDExMi44IDExMC4zIDExMC40IDExMSAxMDcuMyAxMTEuOCBMIDEwNy4xIDExMC4zIEMgMTA5IDEwOS44IDExMS4yIDEwOS4xIDExMy4yIDEwOSB6IE0gMTEyLjUgMTE2LjUgQyAxMTMuMiAxMTYuNSAxMTMuOCAxMTYuNiAxMTQuMiAxMTYuOCBDIDExNS4yIDExNy4xIDEyMC44IDExOS40IDEyMS40IDExOS40IEwgMTIzLjkgMTE5LjQgTCAxMjMuOSAxMjEgTCAxMjEgMTIxIEMgMTE5LjQgMTIxIDExNS4xIDExOC4yIDExMi45IDExOC4yIEwgMTEyLjYgMTE4LjIgTCAxMDUuNiAxMTguNCBMIDEwNS42IDExNy4xIEMgMTA3LjEgMTE3LjEgMTEwLjQgMTE2LjUgMTEyLjUgMTE2LjUgelwifV0saVtcIkFDLklDLlRSSUFHRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDkxLjYgNjkgQyA4Ny4zIDY5IDgzLjYgNzEuNSA4My42IDc1LjMgTCA4My42IDgzLjMgTCA4MC41IDgzLjMgQyA3NCA4My4zIDczLjYgODguMSA3MS4yIDkxLjUgQyA2OS4zIDk0LjMgNjMgOTQuNCA2MyAxMDAuOSBMIDYzIDEzMSBMIDEzNyAxMzEgTCAxMzcgMTAyLjYgQyAxMzcgOTkuNSAxMzYuMiA5Ny4zIDEzNC43IDk1LjYgQyAxMzMuMiA5NCAxMzAuOCA5My42IDEyOS4xIDkyIEMgMTI2IDg4LjggMTI2LjkgODMuMyAxMTkuMSA4My4zIEwgMTE2LjIgODMuMyBMIDExNi4yIDc1LjUgQyAxMTYuMiA3MS4zIDExMi45IDY5IDEwOC40IDY5IEwgOTEuNiA2OSB6IE0gODkuOSA3NiBMIDExMC4xIDc2IEwgMTEwLjEgODMuMyBMIDg5LjkgODMuMyBMIDg5LjkgNzYgeiBNIDk1LjMgOTAuNCBMIDEwNC40IDkwLjQgTCAxMDQuNCA5OS40IEwgMTEyLjIgOTQuOSBMIDExNi44IDEwMi44IEwgMTA5LjEgMTA3LjMgTCAxMTYuOCAxMTEuOSBMIDExMi4xIDExOS44IEwgMTA0LjQgMTE1LjMgTCAxMDQuNCAxMjQuMSBMIDk1LjMgMTI0LjEgTCA5NS4zIDExNS4zIEwgODcuNiAxMTkuNyBMIDgzIDExMS44IEwgOTAuNyAxMDcuMyBMIDgzIDEwMi44IEwgODcuNiA5NC45IEwgOTUuMyA5OS4zIEwgOTUuMyA5MC40IHogXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTIuMSwxMTkuOCA0LjYsLTcuOSAtNy42LC00LjYgNy43LC00LjUgLTQuNiwtNy45IC03LjcsNC40IC0wLC04LjkgLTkuMSwwIDAsOC45IC03LjcsLTQuNCAtNC41LDcuOSA3LjYsNC41IC03LjYsNC41IDQuNSw3LjkgNy43LC00LjQgMCw4LjggOS4xLDAgMCwtOC44IHpcIn1dLGlbXCJBQy5JQy5FTUVSR0VOQ1kgUFVCTElDIElORk9STUFUSU9OIENFTlRFUlwiXT1baVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0sYShcImlcIildLGlbXCJBQy5JQy5GSVJFIEhZRFJBTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MCwxMzEuMyB2IC0xIGMgMS4zLDAuMSA1LjcsMS44IDcuNywyLjIgMi44LDAuNiA1LjgsMSA5LjEsMSBoIDYuNSBjIDMuNCwwIDYuMSwtMC40IDguOSwtMSAyLC0wLjQgNi41LC0yLjEgNy43LC0yLjIgdiAxIGMgMCwyLjkgLTEyLjUsNC41IC0xNi42LDQuNSBoIC02LjQgYyAtNC4xLDAgLTE2LjksLTEuNiAtMTYuOSwtNC41IGwgMCwwIHogbSAxNy45LC00My40IDQuNSwwLjEgMTIuNCwwLjQgdiA4LjMgaCA2LjMgdiAxMS45IGggLTYuMyB2IDE3LjQgbCA0LjUsMS4zIGMgLTEuMiwxLjYgLTEyLjIsMy4zIC0xNS44LDMuMyBoIC02LjQgYyAtMy41LDAgLTE1LC0xLjggLTE2LC0zLjIgbCA0LjYsLTEuNiAwLjEsLTE3LjIgaCAtNi4zIFYgOTYuNyBoIDYuMyB2IC04LjMgbCAxMi40LC0wLjQgMCwwIHogbSAyNS43LDUuOSBoIDMgdiA2LjcgaCAzLjIgdiAzLjkgaCAtMy4yIHYgNi43IGggLTMgViA5My44IHogbSAtNTAsMCBoIDIuOSB2IDE3LjIgaCAtMi45IHYgLTYuNyBoIC0zLjUgdiAtMy45IGggMy40IFYgOTMuOCBoIDAuMSB6IG0gMjYuMSwtOC4zIGMgLTUuMiwwIC05LjcsMC4yIC0xNC44LDAuMiAtNC40LDAgLTMuNSwtMi42IC0xLjgsLTIuOCAyLjEsLTAuMyA0LjksLTAuMSA2LjksLTAuNCA1LjMsLTAuOCAyMy42LC0wLjMgMjguMSwwLjggMC4yLDEuOCAwLjQsMS41IC0xLDIuNCBsIC0xNS44LC0wLjIgLTEuNiwwLjEgeiBtIC0xLC0yMS4xIGggMi45IHYgMy44IGggMiB2IDEuOCBjIDMuMiwwLjcgNS4zLDEuMSA3LjQsMy4xIDEuMywxLjMgMy41LDQuMyAzLjcsNi43IGwgLTEwLjQsLTAuMyAtOS45LDAuMSAwLjIsLTAuMSAtOS4xLDAuNSBjIDAuNCwtNC43IDUuMiwtOS43IDEwLjQsLTkuNyBoIDAuOCB2IC0yIGggMiB2IC0zLjggeiBtIC0yLjYsMS4yIGggLTIgdiAyLjIgYyAtNS43LDAuNSAtMTAuNiw2LjYgLTExLjEsMTIuNSAtMi4yLDAuMiAtMi4zLDEuMyAtMy40LDIuMSBsIC0wLjIsMS42IGMgLTAuMywyLjIgMiwzLjkgMy42LDQuMyB2IDUuNSBoIC0zLjYgdiAtMi40IGggLTguMyB2IDYuNyBoIC0zLjIgViAxMDcgaCAzLjIgdiA2LjMgaCA4LjMgdiAtMi40IGggMy42IFYgMTIzLjggYyAtMi4zLDAuNiAtNS41LDIgLTUuNSw0LjkgdiAyIGMgMCw2LjMgMTIuOSw3LjcgMTkuOCw3LjcgaCA1LjkgYyA2LjksMCAxOS40LC0xLjIgMTkuNCwtNy43IHYgLTIgYyAwLC0yLjggLTMsLTQuMyAtNS4zLC00LjkgdiAtMTIuOSBoIDMuNiB2IDIuNCBoIDguMSBWIDEwNyBoIDMuMiB2IC05LjEgaCAtMy4yIHYgLTYuNCBoIC04LjEgdiAyLjQgaCAtMy42IHYgLTUuNSBjIDEuNiwtMC4zIDMuNiwtMS44IDMuNiwtMy44IDAsLTIuMiAtMS42LC0zLjkgLTMuNiwtNCAtMC41LC01LjkgLTUuNywtMTIuMSAtMTEuNCwtMTIuNiB2IC0yLjIgaCAtMiBWIDYxLjYgaCAtNy45IHYgNCB6IG0gMi45LDQ3LjIgYyAtNCwwIC04LjMsLTUgLTguMSwtOS4zIDAuMiwtNC40IDQuMiwtOSA4LjMsLTkgaCAyIGMgNC4yLDAgOC4zLDQuNyA4LjMsOS4xIDAsNC4zIC00LDkuMSAtOC4xLDkuMSBoIC0yLjQgbCAwLDAgeiBtIC0xMC41LC05LjkgdiAxLjggYyAwLDUuMiA1LjQsMTAuOCAxMC41LDEwLjggaCAyLjQgYyA1LjYsMCAxMC44LC01LjggMTAuOCwtMTEuOCAwLC02IC01LjMsLTExLjggLTEwLjksLTExLjggaCAtMi4xIEMgOTMuNyw5MiA4OC40LDk3LjUgODguNCwxMDMgbCAwLDAgeiBtIDkuNSwwLjggYyAwLjMsLTAuNiAwLjgsLTEuOCAxLjQsLTEuOCBoIDEuNCBjIDAuNywwIDEuNCwxLjMgMS40LDIgMCwwLjEgLTAuOSwxLjYgLTEuNCwxLjYgaCAtMS40IGMgLTAuNiwwLjEgLTEuMSwtMS4yIC0xLjQsLTEuOCB6IG0gLTIuOSwwIDIuMiw0LjMgaCA1IGMgMC43LDAgMi40LC0zLjYgMi45LC00LjMgbCAtMi40LC00LjUgaCAtNC45IGMgLTAuOCwwLjEgLTIuNSwzLjcgLTIuOSw0LjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTcuOSwxMDMuOCBjIDAuMywtMC42IDAuOCwtMS44IDEuNCwtMS44IGggMS40IGMgMC43LDAgMS40LDEuMyAxLjQsMiAwLDAuMSAtMC45LDEuNiAtMS40LDEuNiBoIC0xLjQgYyAtMC42LDAuMSAtMS4xLC0xLjIgLTEuNCwtMS44IHogbSAxLjIsLTkuMSBjIC00LjEsMCAtOC4xLDQuNiAtOC4zLDkgLTAuMiw0LjMgNC4xLDkuMyA4LjEsOS4zIGwgMi40LDAgYyA0LDAgOC4xLC00LjkgOC4xLC05LjEgMCwtNC40IC00LjEsLTkuMSAtOC4zLC05LjEgbCAtMiwwIHogbSAtMS4yLDQuNyA0LjksMCAyLjQsNC41IGMgLTAuNCwwLjcgLTIuMSw0LjMgLTIuOSw0LjMgbCAtNSwwIC0yLjMsLTQuMyBjIDAuNCwtMC44IDIuMSwtNC40IDIuOSwtNC41IHogTSA5OC43LDY0LjUgaCAyLjkgdiAzLjggaCAyIHYgMS44IGMgMy4yLDAuNyA1LjMsMS4xIDcuNCwzLjEgMS4zLDEuMyAzLjUsNC4zIDMuNyw2LjcgbCAtMTAuNCwtMC4zIC05LjksMC4xIDAuMiwtMC4xIC05LjEsMC41IGMgMC40LC00LjcgNS4yLC05LjcgMTAuNCwtOS43IGggMC44IHYgLTIgaCAyIHYgLTMuOCB6IG0gMSwyMS4xIGMgLTUuMiwwIC05LjcsMC4yIC0xNC44LDAuMiAtNC40LDAgLTMuNSwtMi42IC0xLjgsLTIuOCAyLjEsLTAuMyA0LjksLTAuMSA2LjksLTAuNCA1LjMsLTAuOCAyMy42LC0wLjMgMjguMSwwLjggMC4yLDEuOCAwLjQsMS41IC0xLDIuNCBsIC0xNS44LC0wLjIgLTEuNiwwLjEgeiBtIC0yNi4xLDguMyBoIDIuOSB2IDE3LjIgaCAtMi45IHYgLTYuNyBoIC0zLjUgdiAtMy45IGggMy40IFYgOTMuOCBoIDAuMSB6IG0gNTAsMCBoIDMgdiA2LjcgaCAzLjIgdiAzLjkgaCAtMy4yIHYgNi43IGggLTMgViA5My44IHogbSAtMjUuNywtNS45IC0xMi40LDAuNCAwLDguMyAtNi4zLDAgMCwxMS45IDYuMywwIC0wLjEsMTcuMyAtNC42LDEuNiBjIDEuMSwxLjUgMTIuNSwzLjMgMTYsMy4zIGwgNi40LDAgYyAzLjYsMCAxNC43LC0xLjcgMTUuOCwtMy4zIGwgLTQuNSwtMS4zIDAsLTE3LjQgNi4zLDAgMCwtMTEuOSAtNi4zLDAgMCwtOC4zIC0xMi40LC0wLjQgLTQuNSwtMC4xIHogbSAxLjIsNC4yIDIuMSwwIGMgNS43LDAgMTAuOSw1LjggMTAuOSwxMS44IDAsNS45IC01LjIsMTEuOCAtMTAuOCwxMS44IGwgLTIuNCwwIGMgLTUuMiwwIC0xMC41LC01LjYgLTEwLjUsLTEwLjggbCAwLC0xLjggYyAwLC01LjUgNS4zLC0xMSAxMC43LC0xMC45IHogTSA4MCwxMzEuMyB2IC0xIGMgMS4zLDAuMSA1LjcsMS44IDcuNywyLjIgMi44LDAuNiA1LjgsMSA5LjEsMSBoIDYuNSBjIDMuNCwwIDYuMSwtMC40IDguOSwtMSAyLC0wLjQgNi41LC0yLjEgNy43LC0yLjIgdiAxIGMgMCwyLjkgLTEyLjUsNC41IC0xNi42LDQuNSBoIC02LjQgYyAtNC4xLDAgLTE2LjksLTEuNiAtMTYuOSwtNC41IGwgMCwwIHpcIn1dLGlbXCJBQy5JQy5PVEhFUiBXQVRFUiBTVVBQTFkgTE9DQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMTMuMiwxMTYuNSBjIDAsLTIuOSA0LjQsLTkuMyA1LjgsLTExLjggMi44LC01IDMuMSwtNi44IDQuNiwtMTMgMi4xLDEuNCAyLjIsNC4zIDMsNy4xIDAuOCwyLjggMS42LDQuOCAyLjksNyAyLjIsMy44IDYuNyw4IDUsMTQuMSAtMS42LDUuOCAtNS4yLDcuOCAtMTIuMiw3LjUgLTUuOCwtMC4yIC05LjEsLTQuOSAtOS4xLC0xMSB6IG0gLTEuMiwtMC40IHYgMC42IGMgMCw3LjUgNC42LDEyLjIgMTIsMTIuMiA2LjgsMCAxMiwtNC42IDEyLC0xMSB2IC0xLjMgYyAwLC01IC00LjcsLTEwIC02LjYsLTEzLjggLTEuMSwtMi4yIC0xLjYsLTUuNSAtMi4zLC04LjEgLTAuOSwtMy4zIC0yLjQsLTQgLTQuOCwtNS42IDAsMTMuNiAtMTAuMywyMCAtMTAuMywyNi44IHogbSA0LjgsMy42IGMgMCwyLjQgMS44LDQuNCAzLjgsNC40IDAuNywwIDEuNSwtMC42IDEuNywtMS4zIC0xLjYsLTAuNCAtMy4yLC0yLjUgLTMuNCwtNC40IGwgLTIuMSwxLjMgeiBNIDg5LjIsNzMgdiAxNS44IGggLTIuMSB2IC0xNS44IGwgMC42LC0wLjEgMS41LDAuMSB6IG0gLTEwLjQsMi4zIGggNi42IHYgMTEgSCA3OC44IHYgLTExIHogbSAzNy4yLDEuMSBjIDAsLTAuNSAwLjIsLTAuNiAwLjYsLTAuNiBoIDEuNSBjIDAuNSwwIDAuNiwwLjIgMC42LDAuNiB2IDkuMSBoIC0yLjggdiAtOS4xIHogbSAtMjQuOSwtMS4zIDIyLjgsMi40IHYgNi41IGwgLTIyLjgsMS45IHYgLTEwLjcgeiBtIC0yNywxMS44IGggMTIuOSB2IDEgbCA4LjMsMC4xIDEuMiwyLjQgMS42LDAuMyBjIDAuNiwwLjEgMSwtMC4yIDEuOCwtMC4zIGwgMC45LC0wLjYgMC4yLC0yLjQgMjIuOCwtMS42IGMgMS4yLDIuNSA0LjIsMS42IDYuNiwxIDAsLTAuNyAwLjIsLTAuOCAwLjIsLTEuNSB2IC05LjUgYyAwLC0xLjUgLTAuOCwtMi4xIC0yLjMsLTIuMSBoIC0yLjEgYyAtMy44LDAgMC4yLDIuNSAtNSwxLjYgLTIuMSwtMC40IC00LjYsLTAuNCAtNi43LC0wLjcgLTMuMywtMC41IC0xMC40LC0xLjMgLTEzLjUsLTEuMyAtMC4xLC0zLjEgLTUuNiwtMy4zIC01LjcsMC40IGggLTguNCB2IDAuNiBoIC0xMyBsIDAuMSwxMi40IDAsMCB6IG0gMTUuNiwtNC44IDAsMS45IDQuNiwwIDAsLTEuOSB6IG0gMCwtNC4yIDAsMS43IDQuNiwwIDAsLTEuNyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA5MSw3NS4xIDIyLjgsMi40IHYgNi41IGwgLTIyLjgsMS45IHYgLTEwLjcgeiBtIDI0LjksMS4zIGMgMCwtMC41IDAuMiwtMC42IDAuNiwtMC42IGggMS41IGMgMC41LDAgMC42LDAuMiAwLjYsMC42IHYgOS4xIGggLTIuOCB2IC05LjEgeiBNIDc4LjgsNzUuMyBsIDAsMTEgNi42LDAgMCwtMTEgLTYuNiwwIHogbSAwLjgsMi42IDQuNywwIDAsMS43IC00LjcsMCAwLC0xLjcgeiBtIDAsNC4yIDQuNywwIDAsMS45IC00LjcsMCAwLC0xLjkgeiBNIDEyMy41LDkxLjggYyAtMS40LDYuMiAtMS44LDggLTQuNiwxMyAtMS4zLDIuNSAtNS44LDguOSAtNS44LDExLjggMCw2LjEgMy4zLDEwLjggOS4xLDExIDcsMC4yIDEwLjUsLTEuNyAxMi4yLC03LjUgMS43LC02LjEgLTIuOCwtMTAuMyAtNSwtMTQuMSAtMS4zLC0yLjIgLTIsLTQuMyAtMi45LC03IC0wLjgsLTIuOCAtMC45LC01LjcgLTMsLTcuMSB6IG0gLTQuNiwyNi43IGMgMC4yLDEuOSAxLjgsNCAzLjQsNC40IC0wLjIsMC42IC0xLDEuMyAtMS43LDEuMyAtMiwwIC0zLjgsLTIuMSAtMy44LC00LjQgbCAyLjEsLTEuMyB6IE0gODkuMiw3MyB2IDE1LjggaCAtMi4xIHYgLTE1LjggbCAwLjYsLTAuMSAxLjUsMC4xIHpcIn1dLGlbXCJBQy5JQy5CQU5LSU5HIEZJTkFOQ0UgQU5EIElOU1VSQU5DRSBJTkZSQVNUUlVDVFVSRVwiXT1hKFwi4oKsJMKjXCIpLGlbXCJHUi5JTi5JQy5QVUJMSUMgVkVOVUVTIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODcuOSw4Ny4zIGMgLTMuMiwwIC01LjgsMi42IC01LjgsNS44IDAsMi44IDIuMSw1LjIgNC44LDUuNyBsIDAsMy4zIC0zLjgsMCAwLDIgMy44LDAgMCw5LjQgMiwwIDAsLTkuNCAzLjgsMCAwLC0yIC0zLjgsMCAwLC0zLjMgYyAyLjcsLTAuNSA0LjgsLTIuOCA0LjgsLTUuNyAwLC0zLjIgLTIuNiwtNS44IC01LjgsLTUuOCB6IG0gMjQsMCBjIC0zLjIsMCAtNS44LDIuNiAtNS44LDUuOCAwLDIuOCAyLjEsNS4yIDQuOCw1LjcgbCAwLDMuMyAtMy44LDAgMCwyIDMuOCwwIDAsOS40IDIsMCAwLC05LjQgMy44LDAgMCwtMiAtMy44LDAgMCwtMy4zIGMgMi43LC0wLjUgNC44LC0yLjggNC44LC01LjcgMCwtMy4yIC0yLjYsLTUuOCAtNS44LC01LjggeiBtIC0yNCwyIGMgMi4xLDAgMy44LDEuNyAzLjgsMy44IDAsMi4xIC0xLjcsMy44IC0zLjgsMy44IC0yLjEsMCAtMy44LC0xLjcgLTMuOCwtMy44IDAsLTIuMSAxLjcsLTMuOCAzLjgsLTMuOCB6IG0gMjQsMCBjIDIuMSwwIDMuOCwxLjcgMy44LDMuOCAwLDIuMSAtMS43LDMuOCAtMy44LDMuOCAtMi4xLDAgLTMuOCwtMS43IC0zLjgsLTMuOCAwLC0yLjEgMS43LC0zLjggMy44LC0zLjggeiBtIDI0LjIsMzcuOCAwLC0zIC03Mi4xLDAgMCwzIHogbSAtMywtNi4yIDAsLTIuOCAtNjYuMiwwIDAsMi44IHogTSA2Ni44LDk4LjIgYyAwLDEuMyAtMC43LDIuNiAtMC43LDQuMyAtMCwxLjggLTAuMiwzLjEgLTAuMiw1IHYgMy4yIGwgMC42LDMuNiBoIDIuNyBsIC0wLjgsLTYuNCB2IC0xLjggYyAwLC04LjEgNSwtMTcuOSA5LjMsLTIxLjUgNS42LC00LjYgMTEuNiwtOS4xIDIxLjcsLTkuMSBoIDAuOSBjIDksMCAxNy4xLDQuNCAyMS42LDguOCAzLjIsMy4yIDQuMSw0LjcgNi40LDguNyAxLjQsMi40IDMuMyw4LjQgMy4zLDEyIHYgNC4zIGMgMCwxLjQgLTAuNywzIC0wLjcsNC40IHYgMC41IGggMi43IGwgMC42LC02LjQgdiAtMy44IGMgMCwtMS42IC0xLC01LjIgLTEuNCwtNi42IC0wLjgsLTIuNSAtMS4zLC0zLjYgLTIuMywtNS43IC0xLjgsLTMuOCAtMy44LC02LjQgLTYuNywtOS4zIC00LjYsLTQuNiAtMTMuNiwtOS42IC0yMi42LC05LjYgaCAtMi41IGMgLTcuOCwwIC0xNi42LDQuMSAtMjAuNiw3LjkgLTIuOCwyLjcgLTQuNCw0LjEgLTYuNyw3LjUgLTEuMSwxLjYgLTEuNSwzIC0yLjUsNC42IC0wLjksMS42IC0xLjIsNCAtMiw1LjIgelwifV0saVtcIkdSLklOLklDLlJFQ1JFQVRJT05BTCBBUkVBXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTYuNCw3OC44IDguMSwtMCBjIDAuOSwwIDIuNCw1LjcgMi40LDYuOSBsIDEuNSw0LjMgYyAwLDAuNCAyLDYuNiAyLDcgdiAwLjYgbCAtMTkuNCwtMCA1LjQsLTE4LjggeiBtIC0xOS45LC0wIDExLjEsMCAtMy41LDExLjIgYyAwLDEuNyAtMS45LDUuNyAtMS45LDYuOSB2IDAuNiBoIC0yMC44IHYgNy4yIGwgMTguNSwwIC0xLjIsMyAtMC4xLDAuOCAtMi42LDguMyAtMy42LDExLjUgYyAxLjEsMCA5LjMsMC4xIDkuNywtMC4xIDAuMiwtMC4xIDIsLTYuOCAyLjMsLTcuNyAwLjUsLTEuMiA0LjUsLTE1IDQuNSwtMTUuMiB2IC0wLjYgbCAyMy41LDAgNi43LDIzLjYgOS44LDAgLTEuNCwtNC44IC0wLjcsLTIuNiAtMi40LC03LjggLTAuOSwtMi44IC0xLjcsLTUuNyBoIDE1LjggdiAtNy4yIGggLTE4LjIgbCAtMi45LC04LjkgLTAuMSwtMC44IC0xLC0zIC0xLjcsLTYuMiBoIDEwLjYgdiAtNy4yIGggLTQ3LjkgdiA3LjIgbCAwLDAgMCwwIHogbSA2Mi4xLDE2LjkgMCwtNi4xIC0xNS4yLDAgMCw2LjEgeiBtIC02Mi4zLDAgMCwtNi4xIC0xNC45LDAgMCw2LjEgelwifV0saVtcIkdSLklOLklDLlNQRUNJQUwgTkVFRFMgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3My4xLDExMS4yIGMgMCwtMy44IDEsLTUuOCAyLjMsLTguNCAxLjQsLTIuOCAzLjMsLTMuOCA0LjYsLTUuOCBsIC0xLjEsLTguMiBjIC0yLjYsMC43IC03LjcsNi41IC05LjIsOSAtMi40LDQuMSAtMy44LDcuOSAtMy44LDE0LjIgdiAzLjMgYyAwLDIuMiAyLjIsOC4xIDMuMSw5LjYgMiwzLjIgMyw0LjUgNS41LDcuMSAzLjYsMy42IDEwLjcsNy4xIDE3LjksNy4xIGggMSBjIDQuOSwwIDkuOSwtMS42IDEzLjEsLTMuNiAxLjcsLTEgOC41LC02LjIgOC41LC03LjggMCwtMS4yIC0zLjEsLTYuNiAtMy41LC04LjQgLTEuMiwxLjUgLTEuNiwzIC0zLDQuOCAtMS4yLDEuNSAtMi4zLDIuNyAtMy44LDMuOCAtMi42LDIgLTYuOCw0IC0xMS4zLDQgaCAtMS4yIGMgLTEwLjIsMCAtMTkuMSwtOSAtMTkuMSwtMTkuMyB2IC0xLjQgbCAwLDAgeiBtIDguOSwtMzcuOSBjIDAuNSwwLjQgMC41LDIuOSAwLjUsNCBMIDg1LDEwNi44IGwgMjUuNCwwIDEwLDIzIGMgMS41LC0wLjEgNS41LC0xLjUgNy4xLC0yLjEgMS4yLC0wLjQgNi41LC0xLjQgNi41LC0yLjYgdiAtMC4yIGMgMCwtMC43IC0xLjksLTQuOCAtMiwtNi4zIGwgLTcuNiwyLjYgLTksLTIxLjYgSCA5MS42IGwgLTAuNCwtNiBoIDE3LjMgdiAtNS40IEggOTAuOCBsIC0xLjEsLTEyLjkgYyAyLjYsLTAuMiA1LjIsLTMuOSA1LjIsLTYuNyB2IC0yLjIgaCAtMC41IHYgLTAuOCBjIDAsLTAuOCAtMi4xLC0zLjEgLTIuNywtMy41IC0xLC0wLjcgLTMuMywtMS42IC00LjgsLTEuMyAtMi4yLDAuNCAtMy4yLDAuOCAtNC40LDIgLTAuNywwLjcgLTIuMiwzLjIgLTIuMiw0LjMgdiAxLjIgYyAwLDIuNCAwLjgsMy42IDEuNyw0LjkgbCAwLDAgeiBtIDAuNSw0IGMgMCwtMS4xIDAsLTMuNiAtMC41LC00IDAsMS4xIC0wLDMuNiAwLjUsNCB6XCJ9XSxpW1wiR1IuSU4uSUMuQURVTFQgREFZIENBUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDcsMTE4LjMgdiAtMC4yIGMgMCwtMTUuNSAyMi40LC0xNC43IDIyLjQsLTAuNiB2IDEuMyBjIDAsNS40IC01LjMsMTAuNCAtMTAuOCwxMC40IGggLTAuNiBjIC01LjksMCAtMTEsLTUuMSAtMTEsLTExIHogbSAtMS42LC0yMi4yIGggNC42IHYgMTAgYyAwLDAgLTMuMiwzLjMgLTMuOCw0LjMgLTAuNSwwLjggLTIuMiw0LjcgLTIuMiw1LjggdiAyLjMgYyAwLDYuOCA2LjYsMTMuNyAxMy4zLDEzLjcgaCAxIGMgNS44LDAgMTAuOCwtNSAxMSwtNSBoIDcuMSB2IC0xLjkgaCAtMy4yIGMgMC4yLC0wLjUgMC44LC0xLjMgMC44LC0xLjkgdiAtMTEgYyAwLC0xLjkgLTEsLTMuMyAtMi4xLC00IGggLTMuMyBsIC0wLjgsLTAuNyBjIDEuMSwtMC4zIDIsLTAuOSAyLC0yLjIgdiAtMC40IGMgMCwtMC41IC0xLC0xLjcgLTEuNiwtMS43IGggLTUgdiAtNS40IGMgMCwtMi43IC0xLjUsLTQuMiAtNC4yLC00LjIgaCAtMi4xIGMgLTUuOSwwIC00LjYsNS44IC00LjYsMTEuNiBsIC0wLjYsMC40IFYgOTQuNyBjIC0wLjQsLTAuMiAtMC40LC0wLjQgLTAuOCwtMC40IGggLTUuNCB2IDEuNyB6IG0gLTIyLjYsMSBjIDAsLTIuMiAzLjMsLTQuOCA0LjUsLTYuNiAxLjQsMSAxLjQsMS44IDMuNCwyLjggMS40LDAuNyAyLjYsMS40IDQsMS45IDIuNCwwLjkgMi4yLC0wLjEgNC4zLDEuOSAwLjksMC45IDEuOCwyLjUgMy41LDIuNSAwLjQsMCAwLjgsLTAuOCAwLjgsLTEuMyB2IC0xLjEgYyAwLC0yLjggLTMuMywtMy42IC01LjMsLTQuNSAtMi4zLC0wLjkgLTUuMywtMS42IC02LjEsLTMuOCAtMC44LC0yLjMgLTIuMiwtNC42IC0yLjksLTYuOSAtMC43LC0yLjEgLTEuOSwtNS4xIC00LjYsLTUuMSBoIC0wLjQgYyAtMywwIC03LjQsNy41IC04LjEsMTAuNCAtMC42LDIuMyAtMS42LDQuNyAtMi4xLDcuMiAtMC41LDIuOCAtMC42LDUuMiAtMS4xLDggLTAuMywxLjggMC4xLDIuMyAtMC42LDQgLTAuNCwxLjIgLTAuOCwyLjMgLTEuMiwzLjQgLTAuOSwyLjMgLTEuNyw0LjYgLTIuNSw2LjggLTAuOCwyLjEgLTQuOSwxMS44IC00LjksMTMuNSAwLDIuNiA2LjIsMS4zIDcuNywxLjEgLTAsLTEuOSAtMi4zLC0xLjYgLTMuMSwtMi43IDIuMSwtMy4xIDMuOCwtNi4zIDUuOCwtOS41IDEsLTEuNyA0LjYsLTkuMiA1LjQsLTkuOCAwLjYsMC40IDMsMy4xIDMuOCwzLjkgMS45LDEuOSAyLDEuOCAyLjgsNC44IDEuMSw0LjIgMS45LDcuNyAxLjksMTMuMSBsIDEuNywwLjIgNC4yLC0wIGMgMS4zLDAgMS44LC0wLjIgMi4zLC0xIC0wLjYsLTEgLTMuMSwtMS43IC00LjYsLTIuMSB2IC0xLjEgYyAwLC0wLjQgLTAuMSwtMC40IC0wLjQsLTAuOCB2IC0xMi4xIGMgLTEuNSwtMi4zIC0yLjksLTQuOSAtNC42LC03LjEgLTEuMSwtMS42IC0zLjgsLTUuMiAtMy44LC03LjYgdiAtMi41IGwgMCwwIHogbSAzMC4zLC05LjcgdiAxLjYgYyAwLDEuNSAyLjMsMy45IDQuMiwzLjkgaCAwLjggYyAyLjEsMCA0LjIsLTIuMyA0LjIsLTQuNSBWIDg3LjYgYyAwLC0yLjIgLTIuMiwtNC4yIC00LjUsLTQuMiBoIC0wLjEgYyAtMi4zLC0wIC00LjYsMiAtNC42LDQgeiBtIC0yOC40LC0xNS42IHYgMS43IGMgMCwwLjYgMSwyLjEgMS40LDIuNSAwLjYsMC42IDEuOCwxLjIgMi45LDEuMiBoIDEgYyAyLDAgNC4yLC0yLjIgNC4yLC00IHYgLTEuNCBjIDAsLTEuNiAtMi41LC0zLjkgLTQuNSwtMy45IGggLTAuNyBjIC0xLjgsMCAtNC4yLDIuMiAtNC4yLDMuOSB6XCJ9XSxpW1wiR1IuSU4uSUMuQUdSSUNVTFRVUkUgQU5EIEZPT0QgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3OS41LDEyNy45IGggLTcuOCB2IC0yMS40IGMgMCwtMSA2LjgsLTEzLjMgNy40LC0xMy42IDEsLTAuNiAxMy45LC03LjEgMTQuMSwtNy4xIDAuNSwwIDEzLjIsNi4zIDE0LjQsNyAwLjQsMC4zIDcuNywxMy4xIDcuNywxMy43IHYgMjEuNCBoIC03LjYgViAxMTAuNCBIIDc5LjUgdiAxNy41IHogbSAzNy40LC0zOS40IGggMTUuNCB2IDM5LjggaCAtMTIuMSB2IC0xOC44IGggMi42IGMgLTAuNSwtMC44IC01LjgsLTkuOCAtNS44LC0xMCBWIDg4LjUgeiBtIDAuMiwtMS45IGMgMCwtNC40IDIuOSwtOC4yIDcuMiwtOC4yIGggMC40IGMgNC41LDAgNy42LDMuNyA3LjYsOC4yIGggLTE1LjIgdiAwIHogTSAxMDUuMiw4Mi4xIGggOC45IGMgLTAuMiwxLjYgLTAuOSwyLjUgLTAuOSw1IDAsMiAwLDMuOSAwLDUuOCAtMS40LC0xIC0wLjksLTIuOCAtMy4yLC00IC0xLjIsLTAuNiAtMy44LC0yIC00LjgsLTIuMyB2IC00LjYgeiBtIDAsLTIuOCBjIDAsLTIuOCAzLjgsLTcuNCA2LjksLTcuNCBoIDAuNiBjIDMuMSwwIDUuNSwxLjggNi43LDMuNyAtMC4yLDAuMiAtNC44LDQuMyAtNC44LDQuMyBoIC05LjUgdiAtMC42IHogbSAtMTEuOSwxLjUgYyAtMy4yLDEuNyAtNi42LDMuMiAtOS45LDQuOCAtMS43LDAuOSAtMy4zLDEuNSAtNSwyLjQgLTIuOCwxLjQgLTIuMywwLjcgLTQsMy4xIC0wLjksMS4zIC0xLjgsMy4yIC0yLjcsNC43IC0wLjksMS42IC0xLjksMyAtMi44LDQuNiAtMS42LDIuOSAtMy42LDYuNSAtNS40LDkuMSBoIDIuOCB2IDIyLjUgSCA4NCBWIDExNC43IGggMTkgdiAxNy4zIGggMzMuMyBWIDg3LjUgYyAwLC03LjUgLTQuMiwtMTMgLTExLjcsLTEzIGggLTEuNyBjIC0wLjgsLTIuOSAtNS45LC02LjUgLTEwLC02LjUgaCAtMC40IGMgLTYuNCwwIC0xMSw1LjkgLTExLDEyLjEgdiA0LjYgbCAtOC4yLC0zLjkgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDc5LjUsMTEwLjQgaCAyOC4xIHYgMTcuNSBoIDcuNiB2IC0yMS40IGMgMCwtMC42IC03LjIsLTEzLjQgLTcuNywtMTMuNyAtMS4xLC0wLjggLTEzLjgsLTcuMSAtMTQuNCwtNy4xIC0wLjEsMCAtMTMsNi41IC0xNC4xLDcuMSAtMC42LDAuNCAtNy4zLDEyLjYgLTcuMywxMy42IHYgMjEuNCBoIDcuOCB2IC0xNy41IHogbSAzNy40LC0xMC44IGMgMCwwLjEgNS4zLDkuMiA1LjgsMTAgaCAtMi42IHYgMTguOCBoIDEyLjEgdiAtMzkuOCBoIC0xNS40IHYgMTEgeiBtIDAuMiwtMTMgaCAxNS4xIGMgMCwtNC42IC0zLC04LjIgLTcuNiwtOC4yIGggLTAuNCBjIC00LjIsLTAgLTcuMiwzLjggLTcuMiw4LjIgeiBtIC0xMS45LDAgYyAxLjEsMC4yIDMuNiwxLjcgNC44LDIuMyAyLjIsMS4xIDEuNywzIDMuMiwzLjkgMCwtMiAwLC0zLjkgMCwtNS44IDAsLTIuNSAwLjcsLTMuNCAwLjksLTUgaCAtOC45IHYgNC42IHogbSAwLC03LjQgdiAwLjYgaCA5LjUgYyAwLDAgNC42LC00LjEgNC44LC00LjMgLTEuMiwtMS44IC0zLjYsLTMuNyAtNi43LC0zLjcgaCAtMC42IGMgLTMuMSwwIC02LjksNC42IC02LjksNy40IHpcIn1dLGlbXCJHUi5JTi5JQy5BR1JJQ1VMVFVSQUwgTEFCT1JBVE9SWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk4LjQsNzcuOSAtMC4xLDAuMyAyLjYsMC42IDAsLTAuMyB6IG0gMi4xLDcuMyAwLjQsLTMuMiAtMC4zLC0wLjEgLTAuNCwzLjIgeiBtIC0zLjgsLTE2LjggMC4xLC0wLjIgLTEuNCwtMC4zIDEsLTIuNiAtMC40LC0wLjMgLTEuNyw1LjcgMC4xLDAgMC4zLC0wLjEgMC43LC0yLjQgeiBtIC0xLDUuMyBjIDAuOCwwIDAuNSwtMS43IDAuOCwtMi4zIGwgLTAuNCwtMC4xIC0wLjQsMi40IHogbSAxLjQsLTUuNSAwLjYsLTIuNiAtMC40LC0wLjEgLTAuNiwyLjcgeiBtIDAuMiwtMi43IDAuMSwtMC4zIC0xLC0wLjIgLTAuMSwwLjIgeiBtIDExLjgsNjUuNiAwLDUuNiAzLjMsMCBjIDEuMSwwIDEuOSwtMC4yIDIuNCwtMC43IDAuNSwtMC41IDAuOCwtMS4yIDAuOCwtMi4xIC0xMGUtNiwtMC45IC0wLjMsLTEuNiAtMC44LC0yLjEgLTAuNSwtMC41IC0xLjMsLTAuNyAtMi40LC0wLjcgbCAtMy4zLDAgbSAwLC02LjIgMCw0LjYgMywwIGMgMSwwIDEuNywtMC4yIDIuMiwtMC42IDAuNSwtMC40IDAuNywtMSAwLjcsLTEuNyAtMTBlLTYsLTAuOCAtMC4yLC0xLjMgLTAuNywtMS43IC0wLjUsLTAuNCAtMS4yLC0wLjYgLTIuMiwtMC42IGwgLTMsMCBtIC0yLjEsLTEuNyA1LjIsMCBjIDEuNiwxZS01IDIuOCwwLjMgMy42LDEgMC44LDAuNyAxLjMsMS42IDEuMywyLjggLTJlLTUsMC45IC0wLjIsMS43IC0wLjcsMi4yIC0wLjQsMC41IC0xLjEsMC45IC0xLjksMSAxLDAuMiAxLjgsMC43IDIuMywxLjQgMC42LDAuNyAwLjgsMS41IDAuOCwyLjYgLTFlLTUsMS40IC0wLjUsMi40IC0xLjQsMy4xIC0wLjksMC43IC0yLjIsMS4xIC0zLjksMS4xIGwgLTUuNCwwIDAsLTE1LjIgbSAtOS4yLDIgLTIuOCw3LjUgNS42LDAgLTIuOCwtNy41IG0gLTEuMiwtMiAyLjMsMCA1LjgsMTUuMiAtMi4xLDAgLTEuNCwtMy45IC02LjgsMCAtMS40LDMuOSAtMi4yLDAgNS44LC0xNS4yIG0gLTE2LDAgMi4xLDAgMCwxMy40IDcuNCwwIDAsMS43IC05LjQsMCAwLC0xNS4yIE0gOTguNiw5Mi41IGMgMC45LC0wLjIgMC44LC0xLjggMS4xLC0yLjYgbCAwLjksMC40IC0xLjQsNC4yIC0wLjYsLTIgeiBtIC0wLjIsLTAuNCAwLjEsMC4yIGMgLTAuNSwtMC4xIC0wLjgsLTEuMyAtMC44LC0xLjkgbCAwLjQsMC42IC0wLjMsLTIuMiAxLjYsMC44IGMgLTAsMC43IC0wLjQsMi4zIC0wLjksMi40IHogbSAtMC45LC0yLjMgLTAuNiwtMS40IGMgMC40LDAuMSAwLjYsMC4zIDAuNiwwLjkgdiAwLjUgeiBtIDIuNiwtNC40IC0wLjYsMy45IC0xLjcsLTAuOCB2IC0zLjQgLTAuMyBsIDIuMywwLjYgeiBtIC0yLjYsLTEuMSAwLjQsMC4xIHYgMC40IGggLTAuNCB2IDMuNSBsIC0wLjgsLTAuNCAwLjEsMC40IGggLTAuMiBjIDAsLTAuOSAtMS4yLC0yLjggLTEuNiwtMy41IDAuMSwtMC4xIDAuMSwtMC4xIDAuMSwtMC40IHYgLTAuNCBsIDIuNCwwLjYgMCwtMC40IHogbSA2LjEsLTEuNyAyLjUsMC42IHYgMC40IGMgMCwwLjIgMCwwLjIgMC4xLDAuMyAtMS4yLDAgLTEuOSwwLjQgLTIuOCwwLjggbCAwLjIsLTIgeiBtIC02LjEsMS43IC0yLjQsLTAuOCAwLjEsLTEuOCB2IC0xIGwgMi40LDAuNSAtMC4yLDMgeiBtIDguNiwtMS42IGMgLTAuMywwIC0yLjMsLTAuNCAtMi40LC0wLjYgMCwwIDAuMiwtMi4zIDAuMiwtMi43IGwgMi4yLDAuNCAwLjEsMS42IC0wLDEuMiB6IG0gLTEyLjcsLTIuNCBjIDAuNCwwIDAuNywwLjIgMS4xLDAuMiAwLjgsMC4yIDAuNCwwLjEgMC40LDAuNyB2IDIuMSBjIC0wLjMsLTAgLTAuNywtMC4yIC0xLC0wLjMgLTAuNywtMC4yIC0wLjUsMC4xIC0wLjUsLTAuNCB2IC0yLjQgeiBtIDEwLjcsLTQuMiAxLjcsMC40IDAuMywzIC0yLjIsLTAuNCAwLjIsLTMgeiBtIC02LjQsNS4yIHYgLTAuNCBsIC0yLjQsLTAuNSAwLjMsLTIuOCAyLjQsMC41IC0wLjIsMi45IGggMC4zIHYgMC40IGggLTAuMyB6IG0gLTQsLTQuMiAxLjYsMC40IC0wLjMsMi45IC0xLjUsLTAuNCAwLjIsLTIuOSB6IG0gNy42LDEuNCAwLjMsLTMuMSAyLjQsMC42IC0wLjMsMyAtMi40LC0wLjUgeiBtIC0wLjQsLTAuMSAwLjQsMC4xIHYgMC40IGMgMC40LDAgMi4zLDAuNCAyLjQsMC42IDAsMC4xIC0wLjIsMi4zIC0wLjIsMi42IC0wLjgsMCAtMS42LC0wLjQgLTIuMywtMC40IC0wLjIsMCAtMC4yLDAuMiAtMC4yLDAuNCBsIDIuNCwwLjUgLTAuMiwyLjIgaCAwLjIgYyAtMC41LDAuNyAtMS4xLDEuNiAtMS40LDIuNCAtMC4zLDAuOCAtMC43LDIuMSAtMS4xLDIuOCBsIC0wLjksLTAuNCAwLjYsLTQgaCAtMC4yIGwgLTAuMiwtMC4xIHYgLTAuNCBsIC0yLjMsLTAuNyAwLjIsLTMgMi41LDAuNSB2IC0wLjMgaCAwLjQgbCAwLjIsLTIuOCBoIC0wLjMgbCAtMC4zLDIuNyAtMi40LC0wLjQgMC4yLC0yLjkgYyAtMC4zLC0wLjEgLTAuMiwwIC0wLjMsLTAuNCBoIDAuMiBsIDAuMiwwLjEgMC40LC0zLjIgMi40LDAuNiAtMC4zLDMuMSB6IG0gMy4yLC01LjQgdiAtMC4zIGwgMC4zLDAuMSB2IDAuMyBjIDEsMC4xIDEuMSwwLjEgMS4yLDEgMCwwLjMgMC4yLDEuOCAwLjMsMS45IGwgLTEuNywtMC4zIHYgMC40IGggLTAuMyB2IC0wLjUgbCAtMi40LC0wLjYgMC4zLC0yLjUgMi4zLDAuNCB6IG0gMC4yLC0wLjIgMC4yLC0yLjkgYyAwLjYsMC4xIDAuNywyLjQgMC44LDMuMSBsIC0xLC0wLjIgeiBtIC01LjEsLTAuOSAyLjQsMC41IC0wLjMsMi42IC0yLjQsLTAuNiAwLjQsLTIuNSB6IG0gNC45LDAuOCBjIC0zLjMsLTAuOCAtMiwwIC0yLC0zLjMgbCAyLjIsMC40IC0wLjIsMi45IHogbSAtNC40LC0zLjggYyAzLjIsMC44IDEuOSwtMC4yIDEuOSwzLjIgbCAtMi4zLC0wLjUgMC40LC0yLjcgeiBtIC0yLjUsLTAuNCAyLjEsMC40IC0wLjQsMi43IC0yLjIsLTAuNCAwLjQsLTIuNiB6IG0gNy4xLDEuMyB2IC0wLjQgbCAtMi4yLC0wLjQgMC4yLC0yLjYgYyAwLjMsMCAwLjcsMC4xIDEuMSwwLjIgMC42LDAuMSAwLjUsMCAwLjcsMC42IDAuMywxIDAuMywwLjkgMC4zLDIuMiBsIDAuMywwLjQgLTAuNCwwLjEgeiBtIC00LjEsLTMuOSAxLjgsMC40IC0wLjIsMi42IC0yLjEsLTAuNCAwLjQsLTIuNiB6IG0gMi4zLC0yLjIgMS40LDIuNiAtMS41LC0wLjIgMC4xLC0yLjQgeiBtIC0xLjYsLTEuNiAwLC0wLjEgMS4yLDEuMiAtMC4xLDAgYyAwLjMsLTAuMSAwLjMsLTAuMSAwLjQsMC4zIGwgLTAuMiwtMC4yIC0wLjIsMi42IC0xLjgsLTAuNCAwLjcsLTMuNSB6IG0gLTIuOSwzIGMgMC41LC0xLjEgMC4zLC0zLjQgMS45LC0zLjQgMC4zLDAgMC4yLDAgMC41LDAuMSBsIC0wLjYsMy43IC0xLjgsLTAuNCB6IG0gLTAuNCwtMC4xIDAuNCwwLjEgdiAwLjMgbCAxLjgsMC40IC0wLjQsMi42IC0yLjEsLTAuNCB2IDAuMiBsIC0wLjEsMC4yIC0wLjIsLTAuMSBoIC0wLjIgbCAtMC41LDIuNiAtMS42LC0wLjMgdiAwLjMgYyAwLjUsMCAxLDAuMyAxLjQsMC4zIDAuMiwwIDAsLTAuMiAwLjUsLTAuMiB2IDAuNCBsIDIuMiwwLjQgLTAuMywyLjQgLTIuNCwtMC42IHYgMC40IGwgMi4zLDAuNiAtMC4zLDMuMSAtMi40LC0wLjYgMC40LC0zLjIgaCAtMC40IGMgLTAsMC44IC0wLjMsMS43IC0wLjMsMi40IC0wLDAuOCAtMCwwLjcgLTAuNywwLjUgLTAuMiwtMCAtMC45LC0wLjEgLTAuOSwtMC4zIC0wLC0wLjMgMC4yLC0yIDAuMywtMi40IDAuMiwtMS4yIDAuNSwtMC40IDEuNywtMC4zIGwgMC4xLC0wLjMgYyAtMC4yLC0wLjEgLTEuNiwtMC4zIC0xLjYsLTAuNSAwLC0wLjggMC40LC0xLjUgMC40LC0yLjMgLTAuNiwwLjEgLTAuNywyLjMgLTAuOCwzIC0wLjEsMC44IC0wLjQsMi42IC0wLjQsMy4zIDAsMC44IC0wLjIsMi40IC0wLjIsMy41IDAsMS4zIC0wLjEsMi40IC0wLjEsMy44IGggMC4zIHYgLTAuOSBsIDEuNSwwLjQgdiAxIGwgLTMuNCwtMC41IGggLTAuMSBjIC01LDAgLTguOCw5LjcgLTguOCwxNS40IDAsMi4zIDAuOCw1LjQgMiw2LjIgMC43LC0xLjQgMS4zLC0zLjEgMiwtNC42IDAuOCwtMS41IDEuNCwtMy4xIDIuMSwtNC42IDAuMywtMC43IDAuNywtMS41IDEsLTIuMiAwLjQsLTAuOCAwLjgsLTEuNSAxLjgsLTEuMiAwLjksMC4zIDEuOSwzLjIgMi4xLDQuNiAwLjUsMy44IDAsOSAwLjYsMTIuNiAwLjcsNCAyLjMsNi40IDUuNCw4IDEsLTAuNCAyLjUsLTAuNiAzLjQsLTEuMiAwLjksLTAuNiAxLjgsLTEuMiAyLjQsLTIuMiAxLjIsLTEuOCAyLC00LjEgMiwtNy4yIGwgMCwtMC42IC0wLjMsLTUuNiB2IC0wLjMgYyAwLC0yLjcgMC41LC04LjMgMi44LC04LjMgaCAwLjEgYyAxLjQsMCAyLDAuNiAyLjYsMS40IDAuNiwwLjggMS4yLDEuNCAxLjgsMi4yIDEuMiwxLjUgMi42LDIuOSAyLjYsNS41IHYgMC42IGwgMC40LDAuMSBjIDAuNCwtMS42IDEuOCwtMi44IDEuOCwtNS4yIHYgLTEuNSBjIDAsLTMuNSAtMS40LC02LjIgLTMsLTguMyAtMC44LC0xLjEgLTEuOCwtMiAtMi44LC0yLjggLTAuNywtMC41IC0yLjcsLTEuOSAtMy44LC0xLjkgbCAtMC44LC0wIC0yLjMsMC40IGMgLTAuMiwtMC44IDAuMSwtMiAtMC4xLC0zLjEgLTAuMSwtMC44IC0wLjIsLTIuNSAtMC4yLC0zLjMgLTAuMiwtMi4xIC0wLjUsLTQuMiAtMC45LC02LjEgLTAuNiwtMy4zIC0yLC04LjIgLTQuNiwtOS40IHYgMC4zIGwgLTAuNCwtMC4xIDAuMSwtMC4zIC0wLjgsLTAuMSBjIC0wLjksLTAuMSAtMS45LDAuOCAtMi4zLDEuMyAtMC4yLDAuMyAtMS43LDIgLTAuOCwyIDAuMiwtMC42IDEuMywtMi4yIDEuOCwtMi40IGwgLTAuOCwyLjcgeiBtIDMsMjAuNCAxLjYsMC41IDAuMiwtMCBjIC0wLjEsLTAuNSAtMS40LC0wLjYgLTEuOCwtMC44IHYgMC40IHogbSAzLjYsLTkuOCAwLjIsLTIuNiAtMC4yLC0wLjEgLTAuMiwyLjYgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTguNiw5Mi41IDAuNiwyIDEuNCwtNC4yIC0wLjksLTAuNCBjIC0wLjMsMC43IC0wLjIsMi4zIC0xLjEsMi42IHogbSAtMC42LC0xLjQgLTAuMywtMC42IGMgMCwwLjYgMC40LDEuOCAwLjgsMS45IGwgLTAuMSwtMC4yIGMgMC42LC0wLjIgMC45LC0xLjggMSwtMi40IGwgLTEuNiwtMC44IDAuMiwyLjIgeiBtIDIuNCwtNS45IGMgMC40LDAuMiAxLjcsMC4zIDEuOCwwLjggbCAtMC4yLDAgLTEuNiwtMC41IC0wLjYsNCAwLjksMC41IGMgMC40LC0wLjcgMC44LC0yIDEuMSwtMi44IDAuNCwtMC44IDEsLTEuNyAxLjQsLTIuNCBoIC0wLjIgbCAwLjIsLTIuMyAtMi40LC0wLjUgLTAuNCwzLjIgeiBtIC0xLDQuMSAwLjYsLTMuOSAtMi4zLC0wLjYgMCwwLjIgMCwzLjQgeiBtIDAuNiwtNC4yIDAuNCwtMy4yIC0yLjUsLTAuNSAtMC4yLDMgeiBtIDAuNywtNi42IDAuMywtMy4xIC0yLjQsLTAuNiAtMC40LDMuMiB6IG0gLTUuMSwtNC44IC0wLjEsMC4zIGMgLTEuMiwtMCAtMS41LC0wLjkgLTEuNywwLjMgLTAuMSwwLjQgLTAuMywyLjEgLTAuMywyLjQgMCwwLjIgMC43LDAuMiAxLDAuMyAwLjcsMC4yIDAuNywwLjIgMC43LC0wLjUgMCwtMC44IDAuMywtMS43IDAuNCwtMi40IGggMC40IGwgLTAuNCwzLjIgMi40LDAuNiAwLjQsLTMuMiAtMi4zLC0wLjUgdiAtMC40IGwgMi4zLDAuNiAwLjMsLTIuNCAtMi4yLC0wLjQgYyAtMC4zLDAuNiAwLDIuMyAtMC44LDIuMyB6IG0gOC4zLC0xIDAuMiwtMi45IC0yLjIsLTAuNCBjIDAsMy40IC0xLjMsMi42IDIsMy4zIHogbSAtNi4yLDExLjcgLTAuNCwtMC4xIHYgMC40IGwgLTIuNCwtMC42IHYgMC40IGMgMCwwLjIgLTAsMC4yIC0wLjEsMC40IDAuNCwwLjcgMS42LDIuNiAxLjYsMy41IGggMC4yIGwgLTAuMSwtMC40IDAuOCwwLjQgdiAtMy41IGggMC40IGwgLTAsLTAuNCAwLDAgeiBtIC0wLjMsNS40IDAsLTAuNiBjIDAsLTAuNSAtMC4yLC0wLjggLTAuNiwtMC45IGwgMC42LDEuNCB6IG0gMi42LC00LjggMCwwLjQgMC4yLDAuMSAwLjIsMCAwLC0wLjMgeiBtIDMuMywtMC40IGMgMC44LC0wLjQgMS41LC0wLjggMi44LC0wLjggLTAuMSwtMC4xIC0wLjEsLTAuMSAtMC4xLC0wLjIgdiAtMC40IGwgLTIuNSwtMC42IC0wLjIsMiB6IG0gLTguMywtMS4xIDIuNCwwLjggMC4yLC0zIC0yLjUsLTAuNSAwLDEgeiBtIC0xLjgsLTAuOCBjIDAsMC41IC0wLjIsMC4yIDAuNSwwLjQgMC4zLDAuMSAwLjYsMC4yIDEsMC4zIHYgLTIuMSBjIDAsLTAuNyAwLjQsLTAuNiAtMC40LC0wLjcgLTAuNCwtMC4xIC0wLjcsLTAuMiAtMS4xLC0wLjIgdiAyLjQgeiBtIDcuNSwtNCBoIDAuMyBsIC0wLjIsMi44IGggLTAuNCB2IDAuNCBsIDAuMywwLjEgYyAwLC0wLjIgMCwtMC40IDAuMiwtMC40IDAuNywwIDEuNiwwLjQgMi4zLDAuNCAwLC0wLjMgMC4zLC0yLjUgMC4yLC0yLjYgLTAsLTAuMiAtMiwtMC42IC0yLjMsLTAuNiB2IC0wLjQgbCAtMC40LC0wLjEgdiAwLjMgeiBtIDMuMywtOC45IDAuNCwtMCAtMC4zLC0wLjQgYyAwLC0xLjMgLTAsLTEuMiAtMC4zLC0yLjIgLTAuMiwtMC42IC0wLC0wLjUgLTAuNywtMC42IC0wLjQsLTAuMSAtMC44LC0wLjIgLTEuMSwtMC4yIGwgLTAuMiwyLjYgMi4yLDAuNCB2IDAuNCB6IG0gLTIuNCwtMC45IDAuMiwtMi42IC0xLjgsLTAuNCAtMC40LDIuNiB6IG0gNC40LDEzLjggMCwtMS4yIC0wLjEsLTEuNiAtMi4yLC0wLjQgYyAwLDAuNCAtMC4yLDIuNyAtMC4yLDIuNyAwLjEsMC4yIDIuMiwwLjYgMi40LDAuNiB6IG0gLTcuOCwtNC42IC0wLjIsMi45IDIuNCwwLjQgMC4zLC0yLjcgeiBtIC0wLjIsMy4yIDAsLTAuNCAtMC4zLDAgMC4yLC0yLjkgLTIuMywtMC41IC0wLjMsMi44IDIuNCwwLjUgMCwwLjQgeiBtIC0zLjEsLTEgMC4zLC0yLjkgLTEuNiwtMC40IC0wLjIsMi45IHogbSAxMS4xLC0wLjggLTAuMywtMyAtMS43LC0wLjQgLTAuMiwzIHogbSAtMiwtNi42IC0yLjMsLTAuNCAtMC4zLDIuNSAyLjQsMC42IHogbSAtMC40LDYgMC4yLC0zIC0yLjQsLTAuNiAtMC4yLDMuMSB6IG0gLTIuNCwtNCAwLjMsLTIuNiAtMi4zLC0wLjUgLTAuMywyLjUgeiBtIC0yLjksMy4yIDAuMSwtMC4zIC0wLjIsLTAuMSBoIC0wLjIgYyAwLDAuNCAtMC4xLDAuMyAwLjIsMC40IHogbSA1LjgsLTIuNCAxLjcsMC4zIGMgLTAuMSwtMC4yIC0wLjIsLTEuNiAtMC4zLC0xLjkgLTAuMSwtMSAtMC4yLC0xIC0xLjIsLTEgbCAtMC4yLDIuNiB6IG0gMCwwLjMgMCwtMC4zIC0wLjMsLTAuMSAwLDAuNCB6IG0gMC4yLC0zIDAsLTAuMyAtMC4yLC0wLjEgMCwwLjMgeiBtIDAsLTAuMyAxLDAuMiBjIC0wLjEsLTAuNiAtMC4yLC0zIC0wLjgsLTMgbCAtMC4yLDIuOSB6IG0gLTUuMSwtMS4xIDIuMywwLjUgYyAwLC0zLjQgMS4zLC0yLjUgLTEuOSwtMy4yIGwgLTAuNCwyLjcgeiBtIC0yLjUsLTAuNiAyLjIsMC40IDAuNCwtMi43IC0yLjEsLTAuNCB6IG0gMS4xLC01LjYgLTAuNiwyLjYgMi4xLDAuNCAwLjQsLTIuNiAtMS44LC0wLjQgMCwtMC4zIC0wLjQsLTAuMSAtMC4xLDAuMyB6IG0gLTAuNiwyLjggMCwtMC4yIC0wLjQsMCAtMC4xLDAuMiAwLjIsMCAwLjIsMC4xIHogbSAwLjIsLTIuOSAtMSwtMC4yIC0xLDIuNiAxLjQsMC4zIHogbSA0LjgsMC43IDEuNSwwLjIgLTEuNCwtMi42IHogbSAtMi4xLC0wLjQgMS44LDAuNCAwLjIsLTIuNiAwLjIsMC4yIGMgLTAsLTAuNCAtMCwtMC4zIC0wLjQsLTAuMyBsIDAuMSwtMC4xIC0xLjIsLTEuMSAtMC4xLDAuMSAtMC43LDMuNSB6IG0gLTIuMiwtMC40IDEuOCwwLjQgMC42LC0zLjcgYyAtMC40LC0wIC0wLjIsLTAuMSAtMC42LC0wLjEgLTEuNiwwIC0xLjQsMi4zIC0xLjksMy40IHpcIn1dLGlbXCJHUi5JTi5JQy5BTklNQUwgRkVFRExPVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyMS42LDEwNy4xIC0wLjQsLTIuMyAtMC4yLC0yIGggMTYuMyBsIC0xLjcsMTMuMiBoIC0xMyB2IC0wLjYgbCAtMSwtOC4yIHogbSAxNi4xLDQuMyAwLjQsLTIuMyAwLjksLTYuMiAtMC4xLC0xLjYgaCAtMTkuNiBsIDEuNCwxMC43IDAuMywwLjYgMC41LDQuMyAtMC4xLDAuNiBoIDE1LjcgdiAtMS42IGwgMC42LC00LjYgeiBNIDEyMyw4Mi42IGMgLTMuMywtMC44IC00LjYsMC40IC02LjgsMS45IGggLTEuNCBjIC0wLjMsMC40IC0wLjYsMS4yIC0xLjIsMS4yIGggLTEgYyAtMi4yLDAgLTMuOSwtMS44IC01LjgsLTEuOCBoIC0wLjYgYyAtMC45LDAgLTIuMSwwLjggLTMuOSwwLjggLTUuMSwwIC0zLjksMC4yIC04LDEuNSAtMiwwLjYgLTYuMiwwLjggLTguOSwwLjggaCAtNS4yIGMgLTIuOCwwIC01LC0wLjYgLTcuMiwtMC42IC0yLjYsMCAtNC43LDAuMiAtNy40LDAuMiAtMC41LDAgLTAuNSwtMC4xIC0wLjgsLTAuMiAtMi40LDEuMiAtMy4xLDQuMiAtMy4xLDcuOCAwLDMuNiAtMC42LDYuMyAtMC42LDEwLjEgdiAwLjIgYyAwLDAuNiAwLjEsMC42IDAuMiwxIGwgMSwtMC4zIDAsLTAuNSBoIDAuNCBsIDAuMiwtMTIuMiBoIDAuMiBjIDAsMiAwLjEsNC41IDAuNiw2IDAuNCwxLjIgMS43LDMuOCAxLjcsNC45IHYgMC4yIGwgLTEuNiwxMy4yIGggMy43IGMgMCwtMS40IC0wLjQsLTEuMSAtMC40LC0yLjEgdiAtMi4xIGMgMCwtMS40IDEsLTQuMiAyLjMsLTQuMyAwLjQsMS41IDMuMywzLjcgMy4zLDYuOCB2IDAuNiBjIDAsMC42IC0wLjEsMC42IC0wLjIsMSAwLjQsLTAuMSAwLjUsLTAuMiAxLC0wLjIgMS4yLDAgMy41LDAuNyAzLjUsLTAuNCAwLC0wLjMgLTEuOSwtMy4yIC0yLjIsLTMuNSAtMC40LC0wLjUgLTEuMywtMy42IC0xLjMsLTQuMyB2IC0wLjIgYyAwLC0wLjIgMS4yLC0yLjMgMS4yLC00LjggNCwyLjIgMy41LDIuNyA5LjksMi43IDIuMiwwIDQuMiwwLjUgNiwwLjQgMSwtMCAzLjMsLTEuNCA0LjMsLTEuOSAwLDEuMiAwLjQsMi40IDAuMiwzLjMgbCAtMS4yLDggYyAxLDAuMyAxLjYsMC42IDIuOCwwLjYgaCAwLjYgLTAuMiBsIDAuNywtMTEuMyBjIDAuNiwwLjQgMi44LDcuMSAyLjYsOC40IGwgLTAuMywyLjMgYyAwLjgsMC40IDEuNSwwLjYgMi42LDAuNiBoIDEgbCAtMS4yLC03LjQgLTAuMSwtMC44IGMgMCwtMC45IDEuNiwtMC43IDIuNSwtMS4yIDAuNiwtMC4zIDEuNCwtMS4yIDEuOCwtMS43IDEuMSwtMS41IDIsLTIuNyAzLC00LjIgMy45LC01LjQgMy41LC0yLjQgMTAuMiwtNCB2IC0wLjYgaCAxLjYgYyAxLDAgMS44LC0wLjggMS44LC0xLjggdiAtMC40IGMgMCwtMi40IC0yLjUsLTIuNSAtMi41LC01LjYgbCAtMy4zLC0zLjQgNS40LC0yLjkgeiBtIDE0LjYsMjguOSBjIDAuNCwtMC40IDAuNCwtMS41IDAuNCwtMi4zIGwgLTAuNCwyLjMgeiBtIC0xNi4xLC00LjMgYyAwLC0wLjggMCwtMS45IC0wLjQsLTIuMyBsIDAuNCwyLjMgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTIxLjIsMTA0LjkgYyAwLjQsMC40IDAuNCwxLjUgMC40LDIuMyBsIDEsOC4yIHYgMC42IGggMTMgbCAxLjcsLTEzLjIgaCAtMTYuMyBsIDAuMiwyLjEgelwifV0saVtcIkdSLkkuRkYuU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6IU4mJk8sZmlsbDohIU4mJk8sZDpcIm0gMTE1LDcwIDIwLDAgMCw1NSAtMjAsMCB6IG0gLTI1LDUgMjAsMCAwLDQ1IC0yMCwwIHogbSAtMjUsLTUgMjAsMCAwLDU1IC0yMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMTAsMTAwIDUsMCBtIC0zMCwwIDUsMCBtIDEwLDI3IDAsLTcgbSAtMjAsMTUgYyAxMCwtMTAgMzAsLTEwIDQwLDBcIn1dLGlbXCJHUi5JTi5JQy5GQVJNL1JBTkNIXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE5LjksMTE5IHYgLTAuMiBjIDAsLTIgMS41LC0zLjcgMy41LC0zLjcgaCAwLjQgYyAyLjIsMCAzLjcsMS42IDMuNyw0IHYgMC42IGMgMCwxLjIgLTIuMSwyLjggLTMuNywyLjggaCAtMC40IGMgLTEuOSwwIC0zLjUsLTEuNiAtMy41LC0zLjUgeiBtIC01MiwtMTAuNyBjIDEuMywtMiAxLjEsLTIuNyAzLjIsLTQuNCAxLjMsLTEgMy4zLC0xLjkgNS41LC0xLjkgaCAwLjYgYyA0LjcsMCA5LDQuMSA5LDguOCB2IDEuMSBjIDAsNSAtNCw5LjIgLTguOCw5LjIgSCA3Ni45IGMgLTUuNCwwIC05LjQsLTQuMiAtOS40LC05LjYgMCwtMS40IDAuNCwtMS42IDAuNCwtMyBsIDAsMCB6IG0gNy45LC0yMC4yIGMgLTAuOCwwIC0xLjUsLTQuNCAtMS44LC01LjMgLTAuMiwtMSAtMS4zLC00LjYgLTEuMywtNS41IGggMjQuMSBjIDAuNSwwIDEuMywtMC44IDEuMywtMS4zIHYgLTIuMiBjIDAsLTAuNyAtMC44LC0xLjEgLTEuNSwtMS4xIGggLTMxLjggYyAtMC43LDAgLTEuNSwwLjQgLTEuNSwxLjEgdiAyLjIgYyAwLDAuNSAwLjgsMS4zIDEuMywxLjMgaCAzLjUgbCAyLjYsMTYgLTYuOCwyLjUgMi44LDMuNCBjIC0xLDEuMyAtMi4zLDIuMSAtMy42LDQuMiAtMC40LDAuOCAtMS45LDQuNCAtMS45LDUuNSB2IDIuMiBjIDAsNS40IDEuNiw4LjggNC4zLDExLjUgMi4zLDIuMyA2LjUsNC44IDExLDQuOCBoIDAuNCBjIDguOCwwIDE1LjgsLTcuNCAxNS44LC0xNiBoIDEzLjQgYyAwLjYsMCAxLjksMS40IDIuNCwxLjggaCA4LjYgYyAtMS4xLDEuNiAtMi4yLDIuOSAtMi4yLDUuNyAwLDQuNiAzLjksOC42IDguNiw4LjYgNC40LDAgOC44LC0zLjggOC44LC03LjkgdiAtMiBjIDAsLTEuMiAtMS41LC0zLjQgLTIsLTQuNCBoIDcuMiBsIDEsLTQuNiBoIC03LjIgdiAtMC42IGwgMS4yLC04LjEgLTAuMSwtMy4zIGMgMCwtMC42IC0xLjcsLTIuMSAtMi4yLC0yLjQgbCAtMTYsLTAuNSBWIDc4LjIgYyAwLC0wLjUgLTAuNCwtMC45IC0wLjksLTAuOSAtMC41LDAgLTAuOSwwLjQgLTAuOSwwLjkgdiAxNS40IGMgLTIuMiwtMC4yIC02LC0wLjQgLTguMSwtMC40IC0xLjMsMCAtMi45LDAuMSAtNC4yLDAgLTIuMSwtMC4xIC0yLC0xLjMgLTIuOSwtMS4zIGggLTQuNiBsIDIsMTIuMyBIIDkxLjEgViA5OC42IEMgOTEuMSw5Ny44IDg3LjEsOTQuNCA4Ni4xLDk0LjQgSCA3OC43IFYgODkuOCBMIDc3LjUsODguMSA3NS44LDg4IHogTSA4OC4xLDkyIGMgMCwwLjUgMC4xLDAuMiAwLjIsMC45IGggMC42IGMgMC45LDAgOC41LC02LjQgMTAuMSwtNi44IFYgODUuNCBjIDAsLTAuNSAtMC4yLC0wLjYgLTAuNiwtMC42IGggLTAuNCBDIDk3LjUsODQuNyA4OC4xLDkxLjYgODguMSw5MiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTkuOSwxMTkgYyAwLDEuOSAxLjYsMy41IDMuNSwzLjUgaCAwLjQgYyAxLjYsMCAzLjcsLTEuNiAzLjcsLTIuOCB2IC0wLjcgYyAwLC0yLjMgLTEuNSwtNCAtMy43LC00IGggLTAuNCBjIC0yLDAgLTMuNSwxLjcgLTMuNSwzLjcgdiAwLjIgeiBtIC01MiwtMTAuNyBjIDAsMS40IC0wLjQsMS43IC0wLjQsMy4xIDAsNS40IDQuMSw5LjYgOS40LDkuNiBoIDAuNiBjIDQuOCwwIDguOCwtNC4zIDguOCwtOS4yIHYgLTEuMSBjIDAsLTQuNyAtNC4zLC04LjggLTksLTguOCBoIC0wLjYgYyAtMi4yLDAgLTQuMywwLjkgLTUuNSwxLjkgLTIuMiwxLjcgLTEuOSwyLjQgLTMuMiw0LjQgelwifV0saVtcIkdSLklOLklDLkdSQUlOIFNUT1JBR0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjIuOCw2OS42IGMgMC40LDAuMSAwLjksMC41IDEuMywxIDAuNCwwLjUgMC44LDEuMiAxLjMsMiBsIDIuMSw0LjEgLTIuMiwwIC0xLjksLTMuOSBjIC0wLjUsLTEgLTEsLTEuNyAtMS41LC0yIC0wLjUsLTAuMyAtMS4xLC0wLjUgLTEuOSwtMC41IGwgLTIuMiwwIDAsNi40IC0yLjEsMCAwLC0xNS4yIDQuNiwwIGMgMS43LDEuNWUtNSAzLDAuNCAzLjksMS4xIDAuOSwwLjcgMS4zLDEuOCAxLjMsMy4zIC0xZS01LDEgLTAuMiwxLjcgLTAuNywyLjQgLTAuNCwwLjYgLTEuMSwxLjEgLTEuOSwxLjMgbSAtNS4xLC02LjQgMCw1LjQgMi42LDAgYyAxLDhlLTYgMS43LC0wLjIgMi4yLC0wLjcgMC41LC0wLjUgMC44LC0xLjEgMC44LC0yIC0xZS01LC0wLjkgLTAuMywtMS42IC0wLjgsLTIgLTAuNSwtMC41IC0xLjIsLTAuNyAtMi4yLC0wLjcgbCAtMi42LDAgbSAtMTIuMywtMC4zIGMgLTEuNSwxLjRlLTUgLTIuNywwLjYgLTMuNiwxLjcgLTAuOSwxLjEgLTEuMywyLjYgLTEuMyw0LjUgMCwxLjkgMC40LDMuNCAxLjMsNC41IDAuOSwxLjEgMi4xLDEuNyAzLjYsMS43IDEuNSwxZS02IDIuNywtMC42IDMuNSwtMS43IDAuOSwtMS4xIDEuMywtMi42IDEuMywtNC41IC0yZS01LC0xLjkgLTAuNCwtMy40IC0xLjMsLTQuNSAtMC45LC0xLjEgLTIsLTEuNyAtMy41LC0xLjcgbSAwLC0xLjcgYyAyLjEsMS42ZS01IDMuOCwwLjcgNS4xLDIuMSAxLjMsMS40IDEuOSwzLjMgMS45LDUuNyAtMmUtNSwyLjQgLTAuNiw0LjMgLTEuOSw1LjcgLTEuMywxLjQgLTMsMi4xIC01LjEsMi4xIC0yLjEsMCAtMy44LC0wLjcgLTUuMSwtMi4xIC0xLjMsLTEuNCAtMS45LC0zLjMgLTEuOSwtNS43IC0xMGUtNywtMi40IDAuNiwtNC4zIDEuOSwtNS43IDEuMywtMS40IDMsLTIuMSA1LjEsLTIuMSBtIC0yMSwwLjMgMTIuOCwwIDAsMS43IC01LjQsMCAwLDEzLjQgLTIuMSwwIDAsLTEzLjQgLTUuNCwwIDAsLTEuNyBtIC0yLDAuNSAwLDIgYyAtMC44LC0wLjQgLTEuNSwtMC42IC0yLjIsLTAuOCAtMC43LC0wLjIgLTEuNCwtMC4zIC0yLC0wLjMgLTEuMSwxLjRlLTUgLTIsMC4yIC0yLjYsMC43IC0wLjYsMC40IC0wLjksMSAtMC45LDEuOCAtNGUtNiwwLjcgMC4yLDEuMiAwLjYsMS41IDAuNCwwLjMgMS4yLDAuNiAyLjMsMC44IGwgMS4yLDAuMyBjIDEuNSwwLjMgMi43LDAuOCAzLjQsMS41IDAuNywwLjcgMS4xLDEuNyAxLjEsMi45IC0xLjJlLTUsMS41IC0wLjUsMi42IC0xLjUsMy4zIC0xLDAuOCAtMi40LDEuMSAtNC4zLDEuMSAtMC43LDAgLTEuNSwtMC4xIC0yLjMsLTAuMiAtMC44LC0wLjIgLTEuNiwtMC40IC0yLjUsLTAuNyBsIDAsLTIuMSBjIDAuOCwwLjUgMS42LDAuOCAyLjQsMS4xIDAuOCwwLjIgMS42LDAuNCAyLjQsMC40IDEuMiwxZS02IDIuMSwtMC4yIDIuNywtMC43IDAuNiwtMC41IDEsLTEuMSAxLC0yIC0xMGUtNiwtMC43IC0wLjIsLTEuMyAtMC43LC0xLjcgLTAuNSwtMC40IC0xLjIsLTAuNyAtMi4yLC0wLjkgbCAtMS4yLC0wLjIgYyAtMS41LC0wLjMgLTIuNiwtMC44IC0zLjMsLTEuNCAtMC43LC0wLjYgLTEsLTEuNiAtMSwtMi43IC0xMGUtNywtMS4zIDAuNSwtMi40IDEuNCwtMy4yIDAuOSwtMC44IDIuMywtMS4yIDMuOSwtMS4yIDAuNywxLjZlLTUgMS40LDAuMSAyLjIsMC4yIDAuNywwLjEgMS41LDAuMyAyLjMsMC42IG0gMjQuNCw0OC4xIC0wLjIsMi40IGggMC40IGwgLTEuNywzIC0xLC0xLjcgLTAuMSwyIDAuNSwwLjYgLTEuMiwzIC0xLjUsLTMgMC40LDMuNiAwLjgsMC4yIC0zLjEsOS43IC0wLjUsLTQuMiAwLjEsLTEuOCBjIDAsLTEuNSAwLjgsLTQuNyAxLC02LjMgMC4zLC0xLjcgMS4zLC00LjUgMS40LC02IDAuNiwwLjEgMC40LDAuMiAwLjgsMC4yIDAuNCwwIDIuMywtMS41IDIuNiwtMS44IGwgLTMsMC42IDAuOCwtMi43IGMgMC42LDAuMSAwLjQsMC4yIDAuOCwwLjIgMC40LDAgMi42LC0xLjcgMi44LC0yIGwgLTMsMC44IDAuNywtMi40IGMgMS4zLDAgMi4xLC0wLjggMi44LC0xLjQgbCAtMi40LDAuNCAwLjgsLTIgYyAxLjEsLTAgMS41LC0wLjkgMS44LC0xLjggbCAtMS4zLDAuNyAyLjMsLTYuMSAtMC44LC0wLjEgLTIuMSw1LjkgLTAuMywwIC0wLjUsLTIuMSAtMC4xLC0wIGMgMCwxLjUgLTAuNCwxLjYgLTAuNCwyLjQgMCwwLjUgMC4yLDAuNSAwLjYsMC42IGwgLTAuOSwyLjEgLTEsLTEuNCBjIC0wLjEsMS42IC0wLjQsMS45IDAuNywyLjQgbCAtMC44LDIuNCAtMS43LC0yLjIgMC40LDIuOCAwLjYsMC41IC0wLjUsMi43IC0xLjUsLTEuOSAwLjIsMi40IDAuOSwwLjUgYyAwLDAuNCAtMSw0LjYgLTEuMiw2IC0wLjQsMi4zIC0wLjksMy41IC0wLjksNi4zIGwgLTEuMiwtMy42IDAuNiwtMC44IC0wLC0yIC0xLjIsMS4yIC0wLjgsLTIuOCAwLjYsLTAuOCAtMCwtMiAtMS4xLDEuMiAtMC43LC0xLjcgYyAxLC0wLjUgMSwtMS42IDEsLTMuMiBsIC0xLjMsMi4xIGMgLTAuNywtMC4yIC0xLjEsLTEuNCAtMS4zLC0yLjMgMC4zLC0wLjQgMC42LC0wLjUgMC42LC0xIHYgLTEuNiBoIC0wLjQgbCAtMC43LDEuOCBjIC0wLjIsLTAuMiAtMC43LC0wLjcgLTAuNywtMS4yIDAsLTAuNCAwLjYsLTAuMyAwLjYsLTEgdiAtMC4yIGMgMCwtMS4xIC0wLjQsLTEuMSAtMC40LC0yLjQgbCAtMC43LDIuMyAtMC4zLDAgLTIuOCwtNS45IC0wLjQsMC4yIDIuNSw1LjcgLTEuMywtMC43IDEsMS45IDEsMCAwLjYsMSAtMi42LC0wLjQgYyAwLjQsMC40IDEuNywxLjQgMi40LDEuNCAwLjEsMCAwLjQsLTAuMSAwLjYsLTAuMiBsIDEsMi4yIC0zLjIsLTAuNiBjIDEuMSwxIDIsMS43IDMuNiwxLjYgbCAxLjEsMi43IC0yLjksLTAuNCBjIDAuNywxIDEuNywxLjMgMywxLjUgMC40LDAuMSAxLjEsMi44IDEuMiwzLjUgbCAtMywtMC42IDIuMiwxLjYgaCAxIGMgMS4yLDIuMyAyLjQsMTEuOSAyLjQsMTUuOCBoIDEuNCBsIC0wLjIsLTIuMiAwLC0xIGMgMCwtNCAyLjksLTkuMyAzLjIsLTEyLjMgMC44LDAuMSAwLjUsMC4yIDEsMC4yIDAuMiwwIDIuOSwtMS4yIDMuMiwtMS40IGwgLTMuNiwwLjMgMS4yLC0zLjEgMC44LDAuNCAzLC0xLjMgLTMuMiwwLjIgMS40LC0yLjggYyAwLjQsMC4xIDAuNCwwLjIgMSwwLjIgMC4zLDAgMi4xLC0xIDIuNCwtMS4yIGwgLTIuOCwwLjIgMS40LC0yIGMgMS41LDAuMSAxLjUsLTAuNCAyLjQsLTEuNiBsIC0xLjQsMC40IGMgMC41LC0xLjEgMS4yLC0yLjIgMS44LC0zLjIgMC40LC0wLjYgMiwtMi43IDAuOCwtMyBsIDAuMiwwLjEgLTMuNCw1LjggLTAuNCwtMi4zIGggLTAuMiBjIDAsMS40IC0wLjYsMS43IC0wLjYsMi4yIDAsMC4zIDAuMywwLjcgMC40LDEgbCAtMS41LDIgLTAuNywtMS45IHogbSAtMjUuNCwxMy41IGMgMCwtMy43IDAuMSwtOS4xIDAuNywtMTIuNCAwLjQsLTIgMC4xLC00IDAuNiwtNiAwLjQsLTEuNyAwLjQsLTQuMiAwLjgsLTUuOCAyLjgsLTEwLjEgMSwtMTEuOCAxNC4zLC0xMS44IGggNC40IGMgMTEuNiwwIDEyLjYsMS4yIDE0LjIsMTEuMyAxLjIsNy42IDIsMTQuNiAyLDIzLjYgdiA4LjMgbCAtMC40LDMuNiBjIC0xLjEsMS42IC0yLjEsMy40IC00LjksMy40IEggODYuNyBjIC01LjQsMCAtNS4zLC02LjQgLTUuMywtMTEuOSB2IC0yLjQgeiBtIC01LjgsLTMyLjUgYyAyLjEsLTAuNiAwLjQsLTEuMyA0LjQsLTEgMi40LDAuMiAzLDAuMyA1LDAuOCAtMC43LDEuMSAtNC42LDMgLTYuNSwzIGggLTAuNCBjIC0wLjksMCAtMi40LC0xLjIgLTIuNCwtMiB2IC0wLjggaCAtMCB6IG0gNDMuMiwtMS41IGMgMi4yLC0wLjIgNC44LDAuOSA0LjgsMy4xIHYgMC42IGMgMCwwLjYgLTAuNiwwLjggLTEuMiwwLjggaCAtMC42IGMgLTEuOCwwIC02LjIsLTIuNyAtNi45LC0zLjkgbCA0LC0wLjYgeiBtIC0zNi42LC02LjcgYyAwLC0xIDEsLTIuMiAxLjgsLTIuMiBoIDAuNiBjIDAuNiwwIDEuNCwxLjYgMS40LDIuMiB2IDQuMiBjIDAsMS4zIC0wLjQsMS41IC0wLjQsMi44IC0xLC0wLjMgLTMuNCwtNC4zIC0zLjQsLTUuNSB2IC0xLjQgaCAtMCB6IG0gMzEuNywyLjggYyAwLC0yLjggLTAsLTUuMiAyLjgsLTUuMiBoIDAuNiBjIDAuNiwwIDEsMC43IDEsMS40IDAsMiAtMyw2LjggLTQuNCw3LjMgdiAtMy42IGggLTAgeiBtIDEuNCwzLjggYyAwLjUsLTEuOCAzLjgsLTUgMy44LC03LjEgdiAtMS40IGMgLTAuNiwtMC4zIC0wLjcsLTEuMiAtMS42LC0xLjIgaCAtMC42IGMgLTIuNiwwIC0zLjgsMiAtMy44LDQuNSB2IDQuMiBjIC0yLC0wLjUgLTIuMywtMSAtNS4yLC0xLjIgLTIsLTAuMiAtMy43LC0wLjQgLTYsLTAuNCBoIC0zLjYgYyAtNC44LDAgLTguOSwwLjMgLTEyLjEsMiAwLjIsLTAuNyAwLjQsLTAuOSAwLjQsLTEuOCB2IC0zLjQgYyAwLC0xLjQgLTEsLTMuOCAtMi4yLC0zLjggaCAtMC44IGMgLTAuOCwwIC0yLjYsMS45IC0yLjYsMyAwLDIgMi4xLDUuNSAzLDYuOCBsIC01LjcsLTAuNSBjIC0xLjIsMCAtMy40LDEuMSAtMy40LDIuMSB2IDAuNiBjIDAsMS4zIDEuNywyLjggMywyLjggaCAwLjIgYyAyLjksMCA0LjUsLTIgNi4zLC0yLjQgLTEuOSwzLjUgLTMuOCwyMiAtMy44LDI4LjEgdiA2IGMgMCw1LjkgMC4zLDEyLjMgNi4xLDEyLjMgaCAyNi4xIGMgNC4xLDAgNi4xLC0zLjggNi4xLC03LjkgdiAtMTAuNSBjIDAsLTIuMyAtMC4yLC01LjUgLTAuNCwtNy43IC0wLjIsLTEuOCAtMC44LC01LjcgLTAuOCwtNy40IDAsLTIuNiAtMC43LC00LjcgLTEsLTcuMSAtMC4yLC0yLjEgLTEuMywtNC4zIC0xLjgsLTYuMiAxLjIsMC42IDQuOSwzIDYuMSwzIGggMS4yIGMgMSwwIDEuOCwtMC44IDEuOCwtMS44IHYgLTAuMiBjIDAsLTIuMiAtMS41LC0zLjggLTMuOCwtMy44IGggLTIuNiBsIC0yLjgsMC40IHogbSAtMjguMSwwLjYgYyAwLjUsMS45IDguOSwzLjIgMTEuOSwzLjIgaCAxIGMgMy4xLDAgMTIuNSwtMS40IDEyLjcsLTMuNiAtNC4xLC0xIC02LjUsLTEuOCAtMTEuOSwtMS44IGggLTEuNCBjIC0yLjQsMCAtNC40LDAuNCAtNi41LDAuNiAtMi45LDAuNCAtMy44LDEuMSAtNS44LDEuNiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDUuMywxMTAuMSBjIC0wLjMsMC4zIC0yLjIsMS44IC0yLjYsMS44IC0wLjQsMCAtMC4yLC0wLjEgLTAuOCwtMC4yIDAsMS41IC0xLjEsNC4zIC0xLjMsNiAtMC4zLDEuNiAtMSw0LjggLTEsNi4zIGwgLTAuMSwxLjggMC41LDQuMiAzLjEsLTkuNyAtMC44LC0wLjIgLTAuNCwtMy42IDEuNSwzIDEuMiwtMyAtMC41LC0wLjYgMC4xLC0yIDEsMS43IDEuNywtMyBoIC0wLjQgbCAwLjIsLTIuNCAtMC4zLC0xLjIgLTEuMiwxLjIgeiBtIDAsMCAxLjIsLTEuMiAwLjMsMS4yIDAuNywxLjkgMS41LC0yIGMgLTAuMSwtMC4zIC0wLjQsLTAuNyAtMC40LC0xIDAsLTAuNSAwLjYsLTAuOCAwLjYsLTIuMiBoIDAuMiBsIDAuNCwyLjMgMy40LC01LjcgLTAuMiwtMC4xIGMgMS4zLDAuNCAtMC40LDIuNCAtMC44LDMgLTAuNiwxIC0xLjMsMi4xIC0xLjgsMy4yIGwgMS40LC0wLjQgYyAtMC44LDEuMiAtMC45LDEuNyAtMi40LDEuNiBsIC0xLjQsMiAyLjgsLTAuMiBjIC0wLjMsMC4yIC0yLDEuMiAtMi40LDEuMiAtMC41LDAgLTAuNSwtMC4xIC0xLC0wLjIgbCAtMS40LDIuOCAzLjIsLTAuMiAtMywxLjMgLTAuOCwtMC40IC0xLjIsMy4xIDMuNiwtMC40IGMgLTAuMywwLjIgLTIuOSwxLjQgLTMuMiwxLjQgLTAuNSwwIC0wLjIsLTAuMSAtMSwtMC4yIC0wLjMsMi45IC0zLjIsOC4yIC0zLjIsMTIuMyBsIC0wLjEsMSAwLjMsMi4yIGggLTEuNCBjIDAsLTQgLTEuMiwtMTMuNiAtMi40LC0xNS44IGggLTEgbCAtMi4yLC0xLjYgMywwLjYgYyAwLC0wLjcgLTAuOCwtMy40IC0xLjIsLTMuNSAtMS4zLC0wLjIgLTIuMywtMC41IC0zLC0xLjUgbCAyLjksMC40IC0xLjEsLTIuOCBjIC0xLjUsMC4xIC0yLjUsLTAuNiAtMy42LC0xLjYgbCAzLjIsMC42IC0xLjEsLTIuMiBjIC0wLjIsMC4xIC0wLjUsMC4yIC0wLjYsMC4yIC0wLjcsMCAtMiwtMSAtMi40LC0xLjQgbCAyLjYsMC40IC0wLjYsLTEgaCAtMSBsIC0xLC0xLjkgMS4zLDAuNyAtMi41LC01LjcgMC40LC0wLjIgMi44LDUuOSAwLjMsLTAgMC43LC0yLjQgYyAwLDEuMyAwLjQsMS4yIDAuNCwyLjQgdiAwLjIgYyAwLDAuNyAtMC42LDAuNiAtMC42LDEgMCwwLjQgMC41LDEgMC43LDEuMiBsIDAuNywtMS44IGggMC40IHYgMS42IGMgMCwwLjUgLTAuMywwLjYgLTAuNiwxIDAuMiwwLjkgMC41LDIuMSAxLjMsMi4zIGwgMS4zLC0yLjEgYyAwLDEuNSAwLDIuNiAtMSwzLjIgbCAwLjcsMS43IDEuMSwtMS4yIDAsMiAtMC42LDAuOCAwLjgsMi44IDEuMiwtMS4yIDAsMiAtMC42LDAuNyAxLjIsMy42IGMgMCwtMi44IDAuNCwtNCAwLjksLTYuMiAwLjMsLTEuMyAxLjMsLTUuNiAxLjIsLTYgbCAtMC45LC0wLjUgLTAuMiwtMi41IDEuNSwxLjkgMC41LC0yLjcgLTAuNiwtMC41IC0wLjQsLTIuOCAxLjcsMi4yIDAuOCwtMi40IGMgLTEsLTAuNSAtMC44LC0wLjggLTAuNywtMi40IGwgMSwxLjQgMC45LC0yLjEgYyAtMC40LC0wLjEgLTAuNiwtMCAtMC42LC0wLjYgMCwtMC44IDAuNCwtMC45IDAuNCwtMi40IGwgMC4xLDAgMC41LDIuMSAwLjMsLTAgMi4xLC01LjkgMC44LDAuMSAtMi4zLDYuMSAxLjMsLTAuNyBjIC0wLjIsMC45IC0wLjYsMS44IC0xLjgsMS44IGwgLTAuOCwyIDIuNCwtMC40IGMgLTAuNywwLjYgLTEuNSwxLjQgLTIuOCwxLjQgbCAtMC43LDIuNCAzLC0wLjggYyAtMC4yLDAuMyAtMi40LDIgLTIuOCwyIC0wLjQsMCAtMC4yLC0wLjEgLTAuOCwtMC4yIGwgLTAuOCwyLjcgMywtMC41IHogTSA4Ny4xLDkwLjEgYyAyLC0wLjUgMi45LC0xLjIgNS44LC0xLjYgMi4xLC0wLjMgNC4xLC0wLjYgNi41LC0wLjYgaCAxLjQgYyA1LjQsMCA3LjgsMC44IDExLjksMS44IC0wLjIsMi4yIC05LjYsMy42IC0xMi43LDMuNiBoIC0xIGMgLTMsMCAtMTEuNCwtMS4zIC0xMS45LC0zLjIgeiBtIC01LjgsMzMuNSB2IDIuNCBjIDAsNS41IC0wLjEsMTEuOSA1LjMsMTEuOSBoIDI2LjQgYyAyLjgsMCAzLjgsLTEuNyA0LjksLTMuNCBsIDAuNCwtMy42IHYgLTguMyBjIDAsLTkgLTAuOCwtMTUuOSAtMiwtMjMuNiAtMS42LC0xMC4xIC0yLjYsLTExLjMgLTE0LjIsLTExLjMgaCAtNC40IGMgLTEzLjMsMCAtMTEuNiwxLjcgLTE0LjMsMTEuOCAtMC40LDEuNiAtMC40LDQgLTAuOCw1LjggLTAuNSwyIC0wLjIsMy45IC0wLjYsNiAtMC42LDMuMyAtMC43LDguNiAtMC43LDEyLjQgeiBNIDExNC44LDkwLjIgYyAwLjcsMS4yIDUuMiwzLjkgNi45LDMuOSBoIDAuNiBjIDAuNiwwIDEuMiwtMC4yIDEuMiwtMC44IHYgLTAuNiBjIDAsLTIuMiAtMi42LC0zLjMgLTQuOCwtMy4xIGwgLTQsMC42IDAsMCB6IG0gLTM5LjIsMC45IHYgMC44IGMgMCwwLjggMS40LDIgMi40LDIgaCAwLjQgYyAyLDAgNS44LC0xLjkgNi41LC0zIC0yLC0wLjQgLTIuNiwtMC42IC01LC0wLjggLTMuOCwtMC4zIC0yLjEsMC40IC00LjMsMSB6IG0gMzguMywtNS4zIHYgMy42IGMgMS4zLC0wLjUgNC40LC01LjMgNC40LC03LjMgMCwtMC43IC0wLjQsLTEuNCAtMSwtMS40IGggLTAuNiBjIC0yLjgsLTAgLTIuOCwyLjQgLTIuOCw1LjEgeiBtIC0zMS43LC0yLjggdiAxLjQgYyAwLDEuMyAyLjQsNS4zIDMuNCw1LjUgMCwtMS4zIDAuNCwtMS41IDAuNCwtMi44IHYgLTQuMiBjIDAsLTAuNiAtMC44LC0yLjIgLTEuNCwtMi4yIGggLTAuNiBjIC0wLjgsMCAtMS44LDEuMyAtMS44LDIuMiB6XCJ9XSxpW1wiR1IuSU4uSUMuQVRNXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzMuNiwxMTYuMyBjIDUuMSwtMC4xIDE1LjgsLTYuNiAxNywtNi42IDAuNCwwIDcuNCwzLjggOC45LDQuMiAtMC40LDAuNiAtNS4xLDQuNiAtNi4yLDUuNyAtMS4yLDEuMiAtNC43LDUuOCAtNS41LDYuNCAtMS42LC0wLjggLTE0LC04LjkgLTE0LjIsLTkuNiB6IG0gLTE1LjEsLTYuMiAxMS45LC0yLjUgMTEuMSw1LjYgLTkuNiwzIDE2LjIsMTAuNyAtMCwtMC4yIDYuNCwtNy41IDI2LjksMTIuNyAyMC4zLC00Ni44IC01MC4yLC0xNy4yIGMgLTAuNiwyLjIgLTUuMiw5LjEgLTYuNSwxMS44IC0wLjgsMS44IC0yLjMsNC40IC0zLjMsNiAtMS4yLDEuOCAtMi4yLDQuMSAtMy4zLDYgLTEuMiwyIC0yLjEsMy44IC0zLjMsNS44IC0xLjIsMS45IC0yLjEsNC4yIC0zLjMsNiAtMi40LDMuNiAtMC4yLDIuNyAtNS41LDMuNyAtMi42LDAuNSAtNS4yLDEgLTcuNywxLjYgbSA2MiwyMS41IC0yNS4yLC0xMS44IDQuOCwtNCA3LjMsMy41IDEuMiwtMi40IC0yMy45LC0xMS43IHYgMC4yIGwgLTEsMi4yIDYsMi45IC02LjIsMy40IC0xMS44LC01LjggLTAuMiwwIDIwLjcsLTM3IDAuMiwwLjEgNDcuNCwxNi4xIGggMC4yIGwgLTE5LjQsNDQuMiB6IG0gNy44LC0zMS4zIDEuMSwtMiAtNS44LC0yLjMgLTAuOCwyLjMgeiBtIC0yLjcsNS4yIDEuMiwtMS45IC01LjYsLTIuMyAtMC44LDIuMiB6IG0gLTIyLC03LjMgYyAwLjYsMC40IDIuMSwxLjQgMi4xLDIuMSB2IDIuNCBjIDAsMC44IC0xLjcsMS41IC0yLjYsMS41IGggLTAuMiBjIC0wLjgsMCAtMSwtMC4yIC0xLjcsLTAuNCBsIDIuNCwtNS43IHogbSAtMy40LC02LjQgYyAwLC0yLjIgMS4xLC0yLjggMy4yLC0yLjggaCAwLjIgYyAwLjcsMCAxLDAuMiAxLjUsMC40IGwgLTIuMiw1LjEgYyAtMC45LC0wIC0yLjgsLTEuMiAtMi44LC0yLjQgdiAtMC4yIHogbSA1LjYsLTQuMiBjIC0wLjMsLTAuMSAtMS4yLC0wLjUgLTEuNiwtMC41IGggLTEuOSBjIC0wLjcsMCAtMi41LDAuNiAtMi45LDAuOSAtMC4zLDAuMiAtMS40LDIuMSAtMS40LDIuNSB2IDEuNyBjIDAsMi4xIDMuOCw0LjIgMy44LDQuOSAwLDAuNCAtMi4yLDQuNiAtMi40LDUuNyAtMC42LC0wLjMgLTIuNSwtMS44IC0yLjUsLTIuNiB2IC0wLjYgYyAwLC0wLjggMC42LC0xLjQgMC44LC0yLjEgLTAuOSwtMC4yIC0yLC0xLjEgLTIuNCwtMS4yIC0wLjQsLTAuMSAtMSwxLjcgLTEsMi4zIHYgMC40IGMgMCwyLjcgNC4yLDUuNCA0LjIsNS43IDAsMC42IC0wLjQsMS40IC0wLjUsMiBsIDEuNywwLjggMC42LC0xLjcgYyAxLjQsMCAyLDAuOCAzLjYsMC44IGggMC42IGMgMS40LDAgMi42LC0wLjUgMy4yLC0xLjMgMC4zLC0wLjQgMS41LC0yLjQgMS41LC0zIHYgLTAuNCBjIDAsLTIuNiAtMi44LC00LjggLTQuNCwtNS45IGwgMi41LC01LjYgaCAwLjQgYyAwLjQsMS4yIDEuNSwwLjYgMS41LDMuNiBsIDIuOCwxLjIgdiAtMS43IGMgMCwtMiAtMiwtNC4xIC0zLjgsLTQuNiBsIDAuOCwtMi4xIC0yLjEsLTAuNSAtMC44LDEuNSB6IG0gMTMsMTguNCAtMC45LDIgNS40LDIuMiAtMCwtMC4yIDEuMiwtMS44IHogbSAtMjIuNCwtMjUuMiAyNi4xLDkuNSAtMTEsMjQuMSAtMjYuNywtMTIuOCAxMS42LC0yMC44IHogbSAtMTIuNSwyMS4yIDI3LjgsMTMuNCAxMS43LC0yNS43IGMgLTEsLTAuMSAtMTEuOCwtNC4yIC0xMy40LC00LjggLTEuMiwtMC41IC0xMy4zLC01IC0xMy41LC01IC0wLjksMCAtNS40LDkuNSAtNi40LDEwLjggLTAuOCwxLjMgLTUuOSwxMC4zIC02LjEsMTEuMiB6IG0gMzEuNywxMS4yIDUuNCwyLjIgLTAuMSwtMC4yIDEuMywtMS44IGMgLTEuMSwtMC4yIC01LC0yLjIgLTUuNSwtMi4yIC0wLjQsMCAtMS4xLDEuNiAtMS4yLDIuMSB6IG0gLTI1LjgsMC42IDQuMywyLjkgLTYsNS44IC02LC00LjEgNy43LC00LjYgeiBtIC05LjEsNC41IDcuNCw0LjkgNy4xLC02LjYgYyAtMC41LC0wLjQgLTUuMywtMy42IC01LjQsLTMuNiAtMSwwIC03LjYsNC45IC05LjEsNS4zIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDExNS43LDExMS44IGMgMCwtMC41IDAuOCwtMi4xIDEuMiwtMi4xIDAuNSwwIDQuNCwyIDUuNSwyLjMgbCAtMS4zLDEuOCAwLjEsMC4yIC01LjQsLTIuMiB6IG0gMy4yLC03LjEgNS43LDIuMiAtMS4yLDEuOCAwLDAuMiAtNS40LC0yLjIgMC45LC0yIHogbSAyLjQsLTQuOCA1LjYsMi4zIC0xLjIsMS45IC01LjIsLTIgMC44LC0yLjIgeiBtIDIuNSwtNS4zIDUuOCwyLjMgLTEuMSwyIC01LjUsLTIgMC44LC0yLjMgeiBtIC0zOS43LDYgYyAwLjIsLTEgNS4zLC0xMCA2LjEsLTExLjIgMC45LC0xLjQgNS40LC0xMC44IDYuNCwtMTAuOCAwLjIsMCAxMi4zLDQuNSAxMy41LDUgMS43LDAuNyAxMi41LDQuOCAxMy41LDQuOCBsIC0xMS43LDI1LjcgLTI3LjgsLTEzLjQgeiBtIDU1LjksLTE0LjYgaCAtMC4yIGwgLTQ3LjQsLTE2LjEgLTAuMiwtMC4xIC0yMC43LDM3IDAuMiwtMCAxMS44LDUuOCA2LjMsLTMuNCAtNiwtMi45IDEsLTIuMiB2IC0wLjIgbCAyMy45LDExLjcgLTEuMiwyLjQgLTcuMywtMy41IC00LjgsNCAyNS4yLDExLjggMTkuNCwtNDQuMiAwLDAgeiBtIC01OS4xLDMwLjkgYyAxLjUsLTAuNCA4LC01LjMgOS4xLC01LjMgMC4yLDAgNC45LDMuMiA1LjUsMy42IGwgLTcuMiw2LjYgLTcuNCwtNC45IHogbSAtNy4yLC0wLjYgYyAwLjIsMC44IDEyLjYsOC44IDE0LjIsOS42IDAuOCwtMC42IDQuMywtNS4yIDUuNSwtNi40IDEuMSwtMS4xIDUuOCwtNS4xIDYuMiwtNS43IC0xLjYsLTAuMyAtOC41LC00LjEgLTguOSwtNC4xIC0xLjIsMCAtMTEuOSw2LjUgLTE3LDYuNiB6IG0gMjYuNiwtMjUuOSB2IDAuMiBjIDAsMS4yIDEuOCwyLjQgMi43LDIuNCBsIDIuMiwtNSBjIC0wLjQsLTAuMiAtMC44LC0wLjQgLTEuNSwtMC40IGggLTAuMiBjIC0yLjEsMCAtMy4yLDAuNyAtMy4yLDIuOCB6IG0gMC45LDEyLjEgYyAwLjcsMC4yIDAuOSwwLjQgMS43LDAuNCBoIDAuMiBjIDEsMCAyLjYsLTAuNyAyLjYsLTEuNSB2IC0yLjQgYyAwLC0wLjcgLTEuNiwtMS43IC0yLjEsLTIuMSBsIC0yLjQsNS42IHogbSA1LjUsLTE3LjcgMi4xLDAuNSAtMC44LDIuMSBjIDEuOCwwLjQgMy44LDIuNSAzLjgsNC42IHYgMS43IGwgLTIuOCwtMS4xIGMgMCwtMyAtMS4xLC0yLjQgLTEuNSwtMy42IGggLTAuNCBsIC0yLjUsNS42IGMgMS42LDEuMSA0LjQsMy4zIDQuNCw1LjkgdiAwLjQgYyAwLDAuNiAtMS4yLDIuNiAtMS41LDMgLTAuNiwwLjggLTEuOCwxLjMgLTMuMiwxLjMgaCAtMC42IGMgLTEuNiwwIC0yLjIsLTAuNyAtMy42LC0wLjggbCAtMC42LDEuNyAtMS43LC0wLjggYyAwLjEsLTAuNiAwLjUsLTEuNCAwLjUsLTIgMCwtMC4zIC00LjIsLTIuOSAtNC4yLC01LjcgdiAtMC40IGMgMCwtMC42IDAuNiwtMi40IDEsLTIuNCAwLjQsMC4xIDEuNCwxIDIuNCwxLjIgLTAuMiwwLjcgLTAuNywxLjMgLTAuNywyLjEgdiAwLjYgYyAwLDAuOCAxLjgsMi4zIDIuNCwyLjYgMC4yLC0xIDIuNCwtNS4zIDIuNCwtNS43IDAsLTAuNyAtMy44LC0yLjggLTMuOCwtNC45IFYgODkuMSBjIDAsLTAuNCAxLjEsLTIuMyAxLjQsLTIuNSAwLjQsLTAuMyAyLjIsLTAuOSAyLjksLTAuOSBoIDEuOSBjIDAuNCwwIDEuNCwwLjQgMS42LDAuNSBsIDAuOCwtMS40IHogbSAtMjEuOCwxNS40IDI2LjYsMTIuOSAxMSwtMjQuMSAtMjYsLTkuNSAtMTEuNiwyMC44IHogbSA1LDEyLjEgLTcuNyw0LjYgNiw0LjEgNiwtNS44IHpcIn1dLGlbXCJHUi5JTi5JQy5CQU5LXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLjgsMTEwLjYgYyAyLjQsMCA1LjMsMS45IDUuMyw0LjQgdiAwLjcgYyAwLDMuMSAtMi4xLDQuOSAtNS4zLDQuOSB2IC05LjkgeiBtIC02LjYsLTguOCBjIDAsLTIuMyAxLjcsLTQuNCA0LC00LjQgaCAwLjcgdiA5IGMgLTEuOSwtMC40IC00LjYsLTEuNiAtNC42LC0zLjcgdiAtMC45IHogbSA2LjYsLTQuNCBjIDIuMiwwIDQuNiwxLjYgNC42LDMuNSB2IDAuOSBoIDMuNSBjIDAsLTUuMyAtMy43LC02LjcgLTguMSwtNy43IHYgLTIuNCBoIC0yIHYgMi40IGMgLTMuOSwwIC04LjIsMy41IC04LjIsNyB2IDIuNiBjIDAsMS4zIDIsMy42IDMsNC4yIDEsMC42IDMuOCwxLjggNS4xLDEuOSB2IDEwLjYgYyAtMy40LC0wLjEgLTUuMiwtMi42IC01LjIsLTYuMSBoIC0zLjMgbCAwLjIsMy41IGMgMS4xLDEuNyAwLjksMi44IDIuOSw0LjEgMS4zLDAuOCAzLjQsMS42IDUuNSwxLjYgdiA0IGggMiB2IC0zLjkgYyA0LjksMCA5LC0zLjQgOSwtOC4xIHYgLTEuOCBjIDAsLTQuMiAtNS40LC02IC05LC02LjggdiAtOS40IHogbSAtMjUuMywxNS4yIHYgLTIuNCBjIDAsLTIuMiAyLjYsLTcuNCAzLjEsLTkuNCAwLjcsLTIuNyAzLjEsLTUuOSA0LjcsLTggMy41LC00LjYgOC41LC04LjkgMTYuNSwtOC45IGggNC40IGMgMy40LDAgOC44LDQuMyAxMC40LDYuNSAxLjMsMS43IDIuMiwzLjEgMy40LDUgMC41LDAuNyAyLjcsNS4yIDIuNyw1LjkgdiAwLjcgaCAwLjQgdiAwLjcgYyAwLDAuNCAwLjksMS41IDAuOCwzLjEgbCAwLjUsMC43IGMgMCwyIDEuMSw2LjggMS4zLDkgMC40LDMuMiAxLjMsNS42IC0wLjcsOC41IDAsMi40IC01LjIsOC43IC02LjIsOC44IGwgLTkuMiwtMS41IGMgLTEuOCwtMC4zIC02LjgsMiAtOS4yLDIgLTIsMCAtNS42LC0xLjcgLTcuNSwtMS43IC0xLjYsMCAtMy4yLDEuMyAtNS41LDEuMyBoIC0wLjYgYyAtMS45LDAgLTUuOSwtNi4xIC03LC03LjcgLTEuOCwtMi42IC0yLjQsLTggLTIuNCwtMTIuMyB6IG0gMzAuNywtMzEgLTYuMSwtMS4xIGMgLTAuOCwtMC4xIC01LjIsMS4xIC01LjgsMS4zIGwgLTYuMywtMTEuNSAxLjcsMC41IHYgLTIuOSBsIDguOSwzLjQgMC4zLC0zLjUgMy4yLDIuNSA1LjcsLTIuNiB2IDIuNiBsIDcuNSwtMS40IC05LjMsMTMgMCwwIHogbSAxMS44LC0xNC41IC05LjEsMS42IHYgLTIuOCBjIC0wLjksMC41IC01LjcsMi45IC02LjYsMi45IC0wLjEsMCAtMy40LC0yLjYgLTQsLTIuOSBsIC0wLjcsNCAtOC44LC0zLjYgdiAyLjkgbCAtMy4xLC0xIDguMSwxNS4xIC0wLjIsMC4xIGMgLTQuNiwxLjEgLTEwLjMsNi44IC0xMi43LDEwLjQgLTAuOCwxLjEgLTEuMywyLjYgLTIsMy43IC0xLjQsMS44IC0wLjksMi41IC0xLjcsNCAtMC42LDEuMSAtMi45LDcuMiAtMi45LDguNiB2IDMuNyBjIDAsMSAwLjcsNS44IDEsNi43IDAuNCwxLjQgMC40LDIgMC44LDMuMiAwLjMsMC45IDAuOSwxLjYgMS40LDIuMyAxLjMsMiA0LjgsNy41IDcuNiw3LjUgMi41LDAgNC4zLC0xLjMgNS43LC0xLjMgMi4zLDAgNS4yLDEuNyA3LjMsMS43IGggMC43IGMgMiwwIDUuNywtMS40IDgsLTEuOSAxLjgsLTAuMyA1LjksMSA4LjUsMSBoIDEuNyBjIDEuNywwIDQuOCwtNC4yIDUuOCwtNS41IDEuMSwtMS40IDEuMywtMi4yIDEuNywtNCAwLjEsLTAuNCAxLjEsLTQuMyAxLjEsLTQuNCAwLC0zIC0wLjksLTQuMSAtMS4xLC01LjkgLTAuMiwtMi40IC0wLjQsLTQgLTAuNywtNi4xIC0wLjIsLTEuNyAtMi44LC04LjYgLTMuNiwtMTAuMyAtMi40LC00LjkgLTcuNywtMTMuMiAtMTQsLTEzLjcgbCAxMS43LC0xNi4yIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEwMC44LDEyMC40IGMgMy4yLDAgNS4zLC0xLjcgNS4zLC00LjkgdiAtMC42IGMgMCwtMi41IC0yLjksLTQuMyAtNS4zLC00LjQgdiA5LjggeiBtIC02LjYsLTE4LjcgdiAwLjkgYyAwLDIuMiAyLjgsMy4zIDQuNiwzLjcgdiAtOSBoIC0wLjcgYyAtMi4zLDAgLTQsMiAtNCw0LjQgeiBtIDYuNiw1IGMgMy42LDAuOCA5LDIuNiA5LDYuOCB2IDEuNyBjIDAsNC43IC00LjEsOC4xIC05LDguMSB2IDQgaCAtMiB2IC0zLjkgYyAtMiwwIC00LjIsLTAuNyAtNS41LC0xLjYgLTIsLTEuMyAtMS43LC0yLjUgLTIuOSwtNC4yIGwgLTAuMiwtMy41IGggMy4zIGMgMCwzLjUgMS44LDYuMSA1LjMsNi4yIHYgLTEwLjYgYyAtMS4zLC0wLjEgLTQuMSwtMS4zIC01LjEsLTIgLTEsLTAuNiAtMywtMyAtMywtNC4yIHYgLTIuNiBjIDAsLTMuNSA0LjIsLTcgOC4xLC03IHYgLTIuNCBoIDIgdiAyLjQgYyA0LjQsMSA4LjEsMi4zIDguMSw3LjcgaCAtMy41IHYgLTAuOSBjIDAsLTEuOSAtMi41LC0zLjUgLTQuNiwtMy41IHYgOS41IGwgMCwwIHogbSAtMjUuMyw1LjggYyAwLDQuMyAwLjYsOS44IDIuNCwxMi4zIDEuMSwxLjYgNS4xLDcuNyA3LDcuNyBoIDAuNyBjIDIuMywwIDMuOSwtMS4zIDUuNSwtMS4zIDEuOSwwIDUuNSwxLjcgNy41LDEuNyAyLjUsMCA3LjQsLTIuMyA5LjIsLTIgbCA5LjEsMS41IGMgMSwwIDYuMiwtNi40IDYuMiwtOC44IDIsLTIuOSAxLC01LjMgMC43LC04LjYgLTAuMiwtMi4yIC0xLjMsLTYuOSAtMS4zLC05IGwgLTAuNSwtMC42IGMgMC4xLC0xLjYgLTAuOCwtMi43IC0wLjgsLTMuMSB2IC0wLjcgaCAtMC40IHYgLTAuNyBjIDAsLTAuNyAtMi4yLC01LjIgLTIuNywtNS45IC0xLjEsLTEuOSAtMi4xLC0zLjIgLTMuNCwtNSAtMS42LC0yLjIgLTcsLTYuNSAtMTAuNCwtNi41IGggLTQuNCBjIC04LDAgLTEzLDQuNCAtMTYuNSw4LjkgLTEuNiwyLjEgLTQsNS4zIC00LjcsOCAtMC41LDIgLTMuMSw3LjIgLTMuMSw5LjQgdiAyLjQgeiBtIDQwLC00NCAtNy40LDEuNSB2IC0yLjYgbCAtNS44LDIuNiAtMy4yLC0yLjQgLTAuMywzLjUgLTguOSwtMy40IHYgMi45IGwgLTEuNywtMC41IDYuMywxMS41IGMgMC41LC0wLjIgNSwtMS40IDUuOCwtMS4zIGwgNi4xLDEuMSA5LjMsLTEzIDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuQlVMTElPTiBTVE9SQUdFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIzLjEsNzcuOSBjIDAuNCwwLjEgMC45LDAuNSAxLjMsMSAwLjQsMC41IDAuOCwxLjIgMS4zLDIgbCAyLjEsNC4xIC0yLjIsMCAtMS45LC0zLjkgYyAtMC41LC0xIC0xLC0xLjcgLTEuNSwtMiAtMC41LC0wLjMgLTEuMSwtMC41IC0xLjksLTAuNSBsIC0yLjIsMCAwLDYuNCAtMi4xLDAgMCwtMTUuMiA0LjYsMCBjIDEuNywxLjVlLTUgMywwLjQgMy45LDEuMSAwLjksMC43IDEuMywxLjggMS4zLDMuMyAtMWUtNSwxIC0wLjIsMS43IC0wLjcsMi40IC0wLjQsMC42IC0xLjEsMS4xIC0xLjksMS4zIG0gLTUuMSwtNi40IDAsNS40IDIuNiwwIGMgMSw4ZS02IDEuNywtMC4yIDIuMiwtMC43IDAuNSwtMC41IDAuOCwtMS4xIDAuOCwtMiAtMWUtNSwtMC45IC0wLjMsLTEuNiAtMC44LC0yIC0wLjUsLTAuNSAtMS4yLC0wLjcgLTIuMiwtMC43IGwgLTIuNiwwIG0gLTEyLjMsLTAuMyBjIC0xLjUsMS40ZS01IC0yLjcsMC42IC0zLjYsMS43IC0wLjksMS4xIC0xLjMsMi42IC0xLjMsNC41IC0xMGUtNiwxLjkgMC40LDMuNCAxLjMsNC41IDAuOSwxLjEgMi4xLDEuNyAzLjYsMS43IDEuNSwxMGUtNyAyLjcsLTAuNiAzLjUsLTEuNyAwLjksLTEuMSAxLjMsLTIuNiAxLjMsLTQuNSAtMWUtNSwtMS45IC0wLjQsLTMuNCAtMS4zLC00LjUgLTAuOSwtMS4xIC0yLC0xLjcgLTMuNSwtMS43IG0gMCwtMS43IGMgMi4xLDEuNWUtNSAzLjgsMC43IDUuMSwyLjEgMS4zLDEuNCAxLjksMy4zIDEuOSw1LjcgLTFlLTUsMi40IC0wLjYsNC4zIC0xLjksNS43IC0xLjMsMS40IC0zLDIuMSAtNS4xLDIuMSAtMi4xLDAgLTMuOCwtMC43IC01LjEsLTIuMSAtMS4zLC0xLjQgLTEuOSwtMy4zIC0xLjksLTUuNyAtMTBlLTcsLTIuNCAwLjYsLTQuMyAxLjksLTUuNyAxLjMsLTEuNCAzLC0yLjEgNS4xLC0yLjEgbSAtMjEsMC4zIDEyLjgsMCAwLDEuNyAtNS40LDAgMCwxMy40IC0yLjEsMCAwLC0xMy40IC01LjQsMCAwLC0xLjcgbSAtMiwwLjUgMCwyIGMgLTAuOCwtMC40IC0xLjUsLTAuNiAtMi4yLC0wLjggLTAuNywtMC4yIC0xLjQsLTAuMyAtMiwtMC4zIC0xLjEsMS40ZS01IC0yLDAuMiAtMi42LDAuNyAtMC42LDAuNCAtMC45LDEgLTAuOSwxLjggLTNlLTYsMC43IDAuMiwxLjIgMC42LDEuNSAwLjQsMC4zIDEuMiwwLjYgMi4zLDAuOCBsIDEuMiwwLjMgYyAxLjUsMC4zIDIuNywwLjggMy40LDEuNSAwLjcsMC43IDEuMSwxLjcgMS4xLDIuOSAtMS4yZS01LDEuNSAtMC41LDIuNiAtMS41LDMuMyAtMSwwLjggLTIuNCwxLjEgLTQuMywxLjEgLTAuNywwIC0xLjUsLTAuMSAtMi4zLC0wLjIgLTAuOCwtMC4yIC0xLjYsLTAuNCAtMi41LC0wLjcgbCAwLC0yLjEgYyAwLjgsMC41IDEuNiwwLjggMi40LDEuMSAwLjgsMC4yIDEuNiwwLjQgMi40LDAuNCAxLjIsMTBlLTcgMi4xLC0wLjIgMi43LC0wLjcgMC42LC0wLjUgMSwtMS4xIDEsLTIgLTFlLTUsLTAuNyAtMC4yLC0xLjMgLTAuNywtMS43IC0wLjUsLTAuNCAtMS4yLC0wLjcgLTIuMiwtMC45IGwgLTEuMiwtMC4yIGMgLTEuNSwtMC4zIC0yLjYsLTAuOCAtMy4zLC0xLjQgLTAuNywtMC42IC0xLC0xLjYgLTEsLTIuNyAtMmUtNiwtMS4zIDAuNSwtMi40IDEuNCwtMy4yIDAuOSwtMC44IDIuMywtMS4yIDMuOSwtMS4yIDAuNywxLjVlLTUgMS40LDAuMSAyLjIsMC4yIDAuNywwLjEgMS41LDAuMyAyLjMsMC42IE0gMTAzLjYsMTE5LjMgaCA5LjYgYyAwLjQsMCA5LDkuMiA5LjYsMTAuMSBIIDk1LjYgYyAwLjIsLTEgNy40LC0xMC4xIDgsLTEwLjEgeiBtIC0yOS4yLDAgaCA5LjkgYyAwLjYsMCA4LjIsOSA4LjksMTAuMSBIIDY1LjkgYyAwLjMsLTEgNy44LC0xMC4xIDguNCwtMTAuMSBsIDAsMCB6IG0gMTEuNSwwIGggMTUuNCBsIC02LjksOS45IC04LjUsLTkuOSB6IG0gLTUuNSwtMSBjIDAuNywtMS4xIDcuNiwtOS40IDguNCwtOS40IGggOS4yIGMgMC43LDAgOC45LDguNSA5LjIsOS40IEggODAuNCB6IG0gNDMuNywxMC44IC05LjUsLTEwLjQgMTAuNCwtMTQuMyA5LjcsOC41IC0xMC43LDE2LjEgMCwwIHogbSAtNC44LC0yNC44IDQuOCwtMCAtMTAuNSwxNC4xIC00LjEsLTAuMSA5LjgsLTEzLjkgeiBtIC0zMS4xLC0wLjIgMi44LDAuMSBjIC0xLjEsMS42IC00LjYsNC45IC02LjIsNi44IC0xLjcsMi4xIC00LjIsNS4xIC01LjYsNy4yIGwgLTQuMiwtMC4xIDEzLjIsLTE0LjEgeiBtIDIxLjEsLTguNiBjIDAuOSwwLjYgOSw4LjIgOSw4LjUgMCwwLjEgLTkuMywxMy42IC05LjksMTQgbCAtOC45LC05LjkgOS44LC0xMi42IHogTSA4OS4xLDEwOCBjIDAuOSwtMS4zIDExLjQsLTEyLjYgMTIuMSwtMTIuNiBoIDYuOCBsIC05LjUsMTIuNSAtOS40LDAgeiBtIDIuOSwtNC42IGggLTQuNiBjIC0xLjIsMS44IC00LjMsNC45IC02LDYuNiAtMi4xLDIuMSAtMy45LDQuNCAtNiw2LjUgLTEuMywxLjMgLTExLjIsMTIuOCAtMTEuNCwxMy43IDAuNSwwLjEgMC41LDAuMiAxLjIsMC4yIGwgNTkuMywtMCAxMS42LC0xNy41IC0wLjMsMC4xIC0xMC41LC05LjYgaCAtNS44IGMgLTEuNSwtMSAtOS42LC04LjkgLTEwLjQsLTguOSBoIC04LjIgYyAtMC45LDAgLTcuNiw4IC05LDguOSBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDMuNiwxMTkuMyBjIC0wLjUsMCAtNy43LDkuMiAtOCwxMC4xIGggMjcuMyBjIC0wLjYsLTEgLTkuMiwtMTAuMSAtOS42LC0xMC4xIGggLTkuNiB6IG0gLTI5LjIsMCBjIC0wLjYsMCAtOC4yLDkuMSAtOC40LDEwLjEgaCAyNy4zIGMgLTAuNywtMS4xIC04LjMsLTEwLjEgLTguOSwtMTAuMSBIIDc0LjMgbCAwLDAgeiBtIDUwLjcsLTE0LjcgLTEwLjQsMTQuMyA5LjUsMTAuNCAxMC43LC0xNi4xIHogbSAtMzAuNywyNC43IDYuOSwtOS45IC0xNS40LDAgeiBtIDUuMSwtMjEuMSA4LjksOS45IGMgMC42LC0wLjQgOS45LC0xMy45IDkuOSwtMTQgMCwtMC4zIC04LjEsLTcuOSAtOSwtOC41IGwgLTkuOSwxMi42IHogbSAtMTkuMSwxMC4yIGggMjYuOCBjIC0wLjIsLTAuOSAtOC41LC05LjQgLTkuMiwtOS40IGggLTkuMiBjIC0wLjksMCAtNy43LDguMyAtOC40LDkuNCB6IG0gMzMuMiwwLjEgMTAuNSwtMTQuMSAtNC44LDAgLTkuOCwxMy45IHogbSAtMzguNiwtMC4yIDQuMiwwLjEgYyAxLjQsLTIuMSAzLjksLTUuMSA1LjYsLTcuMiAxLjYsLTEuOSA1LjEsLTUuMiA2LjIsLTYuOCBsIC0yLjgsLTAuMSAtMTMuMiwxNC4xIHogbSAxNC4xLC0xMC4zIDkuNCwtMCA5LjUsLTEyLjUgaCAtNi43IGMgLTAuNywwIC0xMS4yLDExLjIgLTEyLjEsMTIuNiB6XCJ9XSxpW1wiR1IuSU4uSUMuRkVERVJBTCBSRVNFUlZFIEJBTktcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2NS42LDEyNS40IGggNjguOCB2IDQuNCBIIDY1LjYgdiAtNC40IHogbSA1OC4xLC0zMS4zIGggNS4zIHYgMjkuOSBoIC01LjMgdiAtMjkuOSB6IG0gLTEwLjYsMCBoIDUuMSB2IDI5LjkgaCAtNS4xIHYgLTI5LjkgeiBtIC0zMS4zLDAgaCA1LjMgdiAyOS45IEggODEuOCB2IC0yOS45IHogbSAtMTAuNiwwIGggNS4xIHYgMjkuOSBoIC01LjEgdiAtMjkuOSB6IG0gMjcuNywxLjUgaCAyIHYgMS40IGggMC41IGMgMi45LDAgNiwyLjMgNiw1LjMgbCAtMi45LDAuNCBjIC0wLjIsLTAgLTEsLTEuOSAtMS40LC0yLjQgLTAuNCwtMC41IC0xLjUsLTEuMSAtMi4zLC0xLjIgdiA3LjggYyAzLDAuMyA3LjMsMi4zIDcuMyw1LjMgdiAxLjEgYyAwLDQgLTMuNCw2LjcgLTcuMyw2LjcgdiAyLjUgaCAtMiB2IC0yLjUgYyAtMS43LC0wIC00LjEsLTAuOCAtNS4xLC0xLjcgLTAuOCwtMC43IC0yLjQsLTIuOCAtMi40LC00LjEgdiAtMC45IGwgMy4xLC0wLjUgYyAwLDIuMyAyLDQuOSA0LjQsNC45IHYgLTguNiBjIC0yLjMsLTAgLTYuOSwtMi41IC02LjksLTUuMSB2IC0xLjggYyAwLC0zIDMuMiwtNS4zIDYuMiwtNS4zIGggMC43IHYgLTEuNCB6IG0gLTMzLjMsLTcuNSBoIDY4LjggdiA0LjYgSCA2NS42IHYgLTQuNiB6IE0gMTAwLDcwLjMgYyAwLjcsMC42IDYuNSwzLjQgNy45LDQuMSAyLjcsMS40IDUuMiwyLjcgNy45LDQuMSAyLjcsMS4zIDUuMywyLjcgNy45LDQuMSAxLjEsMC42IDcuNywzLjYgOC4xLDQgSCA2OC41IGwgMzEuNSwtMTYuMSAwLDAgeiBtIC0zNS45LDE3LjEgdiA2IGMgMCwwLjQgMC4zLDAuNyAwLjcsMC43IGggNC45IHYgMjkuOSBoIC01LjYgdiA3LjQgaCA3MS43IHYgLTcuNCBoIC01LjUgdiAtMjkuOSBoIDQuOSBjIDAuNCwwIDAuNSwtMC4xIDAuNSwtMC41IHYgLTYuNyBjIC0yLC0wLjcgLTYuNywtMy40IC04LjksLTQuNiAtMywtMS41IC01LjksLTMgLTguOSwtNC42IC0xLjcsLTAuOCAtMTcuOCwtOS4xIC0xNy45LC05LjEgLTAuNCwwIC0xNi4zLDguMiAtMTguMSw5LjIgLTEuOSwxIC0xNy44LDguNyAtMTcuOCw5LjYgbCAwLDAgMCwwIHogbSAzNi43LDMwLjQgYyAxLjcsMCA0LC0yIDQsLTMuNSB2IC0xLjQgYyAwLC0yLjEgLTIuMywtMi43IC00LC0zLjEgdiA4IHogbSAtNS42LC0xNCBjIDAsMS42IDIuMiwyLjYgMy42LDIuNyB2IC03LjQgYyAtMS4zLDAuMyAtMy42LDEuNCAtMy42LDIuNyB2IDIgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTM0LjQsMTI5LjggMCwtNC40IC02OC44LDAgMCw0LjQgeiBtIC01LjUsLTUuOCAwLC0yOS45IC01LjMsMCAwLDI5LjkgeiBtIC0xMC44LDAgMCwtMjkuOSAtNS4xLDAgMCwyOS45IHogbSAtMzEuMSwwIDAsLTI5LjkgLTUuMywwIDAsMjkuOSB6IG0gLTEwLjcsMCAwLC0yOS45IC01LjEsMCAwLDI5LjkgeiBtIC03LjksLTM3LjUgNjMuMywwIGMgLTAuNCwtMC4zIC02LjksLTMuNCAtOC4xLC00IC0yLjcsLTEuMyAtNS4yLC0yLjcgLTcuOSwtNC4xIC0yLjcsLTEuMyAtNS4yLC0yLjcgLTcuOSwtNC4xIC0xLjQsLTAuNyAtNy4yLC0zLjUgLTcuOSwtNC4xIGwgLTMxLjUsMTYuMSAwLDAgeiBtIDY1LjksNi4yIDAsLTQuNiAtNjguOCwwIDAsNC42IHogbSAtMzMuNSwyNS4xIHYgLTggYyAxLjcsMC40IDQsMSA0LDMuMSB2IDEuNSBjIDAsMS40IC0yLjIsMy41IC00LDMuNSB6IG0gLTUuNiwtMTQgdiAtMiBjIDAsLTEuMyAyLjQsLTIuNCAzLjYsLTIuNyB2IDcuNCBjIC0xLjUsLTAuMSAtMy42LC0xLjEgLTMuNiwtMi43IHogbSAzLjYsLTYuNyBoIC0wLjggYyAtMywwIC02LjIsMi4zIC02LjIsNS4zIHYgMS44IGMgMCwyLjUgNC42LDUuMSA2LjksNS4xIHYgOC42IGMgLTIuNCwwIC00LjQsLTIuNSAtNC40LC00LjkgbCAtMy4xLDAuNSB2IDAuOSBjIDAsMS4zIDEuNiwzLjUgMi40LDQuMSAxLDAuOCAzLjMsMS42IDUuMSwxLjcgdiAyLjUgaCAyIHYgLTIuNSBjIDMuOSwwIDcuMywtMi43IDcuMywtNi43IHYgLTEuMSBjIDAsLTMgLTQuMywtNSAtNy4zLC01LjMgdiAtNy44IGMgMC44LDAuMSAxLjksMC42IDIuMywxLjIgMC4zLDAuNSAxLjEsMi4zIDEuNCwyLjQgbCAyLjksLTAuNCBjIDAsLTMgLTMuMSwtNS4zIC02LC01LjMgaCAtMC42IHYgLTEuNCBoIC0yIHYgMS40IHpcIn1dLGlbXCJHUi5JTi5JQy5GSU5BTkNJQUwgRVhDSEFOR0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzMuNywxMjQuNiAwLC0xLjQgLTY2LjgsMCAwLjMsMCAwLC00NyAtMSwwIDAsNDguNCB6IG0gLTI5LjUsLTguNiAtOS44LC0yMC44IC01LjksMTQuNCAtNS4zLC02LjUgLTEzLjMsMTIuNCAwLjksMSB2IDAuMiBsIDEyLjQsLTExLjMgNS41LDcgaCAwLjMgYyAwLC0xIDIuMywtNS42IDIuOCwtNyAwLjMsLTEgMS4xLC0yLjQgMS41LC0zLjQgMC4zLC0wLjggMC45LC0zLjEgMS41LC0zLjIgbCA5LjQsMjAuMyAwLjEsMC4yIDE3LjQsLTI3LjQgMC4yLDAuMSA4LDE1LjYgMS40LC0wLjUgLTkuNCwtMTggYyAtMC4xLDAuNSAtNy43LDEyLjEgLTguNywxMy42IC0xLDEuNiAtOC4yLDEzLjIgLTguOSwxMy40IHogbSAyLjgsLTE5LjQgViA4OS4yIGMgMi4xLDAgNC4xLDEuNCA0LjEsMy42IHYgMC4yIGMgMCwyLjEgLTEuOSwzLjYgLTQuMSwzLjYgeiBtIC00LjcsLTEzLjYgYyAwLC0yIDEsLTMuNCAzLC0zLjQgaCAwLjUgdiA2LjYgYyAtMS44LC0wLjEgLTMuNCwtMS4zIC0zLjQsLTMuMiB6IG0gMy41LC01LjYgaCAtMSBjIC0yLjYsMCAtNS4yLDIuOSAtNS4yLDUuNiB2IDEgYyAwLDEuMSAxLjMsMi44IDIuMSwzLjQgMS4xLDAuOCAyLjUsMS4yIDQsMS41IHYgNy44IGMgLTIuNiwtMC42IC00LjEsLTEuNyAtNC4xLC00LjggaCAtMi40IGwgMC4yLDIuNSBjIDAuOSwxLjQgMC42LDIuMSAyLjIsMy4yIDEuMSwwLjcgMi40LDEuMiA0LjEsMS4yIHYgMi44IGggMS4yIHYgLTIuOCBjIDMsMCA2LjQsLTIuMyA2LjQsLTUgdiAtMi41IGMgMCwtMi45IC00LC00LjMgLTYuNCwtNC44IHYgLTYuOSBjIDIsMCAzLjQsMS40IDMuNCwzLjMgaCAyLjcgYyAwLC0zLjIgLTIuOCwtNS41IC02LjEsLTUuNSBWIDc1LjQgaCAtMS4yIHYgMS45IHpcIn1dLGlbXCJHUi5JTi5JQy5GSU5BTkNJQUwgU0VSVklDRVMsIE9USEVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAzLjQsMTM4LjIgLTIuNywwIC0wLC04LjIgYyAtMS45LC0wIC0zLjgsLTAuMyAtNS43LC0wLjcgLTEuOSwtMC40IC0zLjgsLTEgLTUuOCwtMS45IGwgMCwtNC45IGMgMS45LDEuMiAzLjcsMi4xIDUuNiwyLjcgMS45LDAuNiAzLjksMC45IDUuOSwwLjkgbCAwLC0xMi41IGMgLTQsLTAuNyAtNywtMS44IC04LjgsLTMuMyAtMS44LC0xLjYgLTIuNywtMy43IC0yLjcsLTYuNSAtNWUtNiwtMyAxLC01LjMgMywtNyAyLC0xLjcgNC44LC0yLjcgOC42LC0zIGwgMCwtNi40IDIuNywwIDAsNi4zIGMgMS43LDAuMSAzLjMsMC4zIDQuOSwwLjUgMS42LDAuMyAzLjEsMC43IDQuNiwxLjEgbCAwLDQuOCBjIC0xLjUsLTAuOCAtMy4xLC0xLjQgLTQuNywtMS44IC0xLjYsLTAuNCAtMy4yLC0wLjcgLTQuOSwtMC43IGwgMCwxMS43IGMgNC4xLDAuNiA3LjIsMS44IDkuMSwzLjQgMiwxLjYgMi45LDMuOSAyLjksNi43IC0zZS01LDMuMSAtMSw1LjUgLTMuMSw3LjMgLTIuMSwxLjggLTUsMi44IC04LjksMy4xIGwgMCw4LjMgbSAtMi43LC0yOS4zIDAsLTExLjIgYyAtMi4xLDAuMiAtMy43LDAuOCAtNC44LDEuOCAtMS4xLDEgLTEuNywyLjMgLTEuNywzLjkgLTFlLTUsMS42IDAuNSwyLjggMS41LDMuNyAxLDAuOSAyLjcsMS41IDUsMS45IG0gMi43LDUuMyAwLDExLjggYyAyLjMsLTAuMyA0LjEsLTEgNS4yLC0yIDEuMiwtMSAxLjgsLTIuMyAxLjgsLTQgLTNlLTUsLTEuNiAtMC42LC0yLjkgLTEuNywtMy44IC0xLjEsLTAuOSAtMi45LC0xLjYgLTUuMywtMi4xIG0gNS44LC01Mi4yIDIuMSwwIDAsNi4yIDcuNSwwIDAsLTYuMiAyLjEsMCAwLDE1LjIgLTIuMSwwIDAsLTcuMiAtNy41LDAgMCw3LjIgLTIuMSwwIDAsLTE1LjIgbSAtMTQuOCwwIDEyLjgsMCAwLDEuNyAtNS40LDAgMCwxMy40IC0yLjEsMCAwLC0xMy40IC01LjQsMCAwLC0xLjcgbSAtOC4xLDEuNCBjIC0xLjUsMS4zZS01IC0yLjcsMC42IC0zLjYsMS43IC0wLjksMS4xIC0xLjMsMi42IC0xLjMsNC41IC0zZS02LDEuOSAwLjQsMy40IDEuMyw0LjUgMC45LDEuMSAyLjEsMS43IDMuNiwxLjcgMS41LDFlLTYgMi43LC0wLjYgMy41LC0xLjcgMC45LC0xLjEgMS4zLC0yLjYgMS4zLC00LjUgLTEuM2UtNSwtMS45IC0wLjQsLTMuNCAtMS4zLC00LjUgLTAuOSwtMS4xIC0yLC0xLjcgLTMuNSwtMS43IG0gMCwtMS43IGMgMi4xLDEuNWUtNSAzLjgsMC43IDUuMSwyLjEgMS4zLDEuNCAxLjksMy4zIDEuOSw1LjcgLTEuNWUtNSwyLjQgLTAuNiw0LjMgLTEuOSw1LjcgLTEuMywxLjQgLTMsMi4xIC01LjEsMi4xIC0yLjEsLTEwZS03IC0zLjgsLTAuNyAtNS4xLC0yLjEgLTEuMywtMS40IC0xLjksLTMuMyAtMS45LC01LjcgLTFlLTYsLTIuNCAwLjYsLTQuMyAxLjksLTUuNyAxLjMsLTEuNCAzLC0yLjEgNS4xLC0yLjFcIn1dLGlbXCJHUi5JTi5JQy5DT01NRVJDSUFMIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAxLjksMTIzLjMgLTEuNywwIC0wLC01IGMgLTEuMiwtMCAtMi4zLC0wLjIgLTMuNSwtMC40IC0xLjIsLTAuMyAtMi4zLC0wLjYgLTMuNSwtMS4xIGwgMCwtMyBjIDEuMSwwLjcgMi4zLDEuMiAzLjQsMS42IDEuMiwwLjQgMi40LDAuNSAzLjYsMC41IGwgMCwtNy42IGMgLTIuNCwtMC40IC00LjIsLTEuMSAtNS4zLC0yIC0xLjEsLTEgLTEuNywtMi4zIC0xLjcsLTMuOSAtMmUtNiwtMS44IDAuNiwtMy4yIDEuOCwtNC4zIDEuMiwtMSAyLjksLTEuNiA1LjIsLTEuOCBsIDAsLTMuOSAxLjcsMCAwLDMuOSBjIDEsMCAyLDAuMiAzLDAuMyAxLDAuMiAxLjksMC40IDIuOCwwLjcgbCAwLDIuOSBjIC0wLjksLTAuNSAtMS45LC0wLjggLTIuOCwtMS4xIC0xLC0wLjMgLTIsLTAuNCAtMywtMC40IGwgMCw3LjEgYyAyLjUsMC40IDQuNCwxLjEgNS41LDIuMSAxLjIsMSAxLjgsMi40IDEuOCw0LjEgLTJlLTUsMS45IC0wLjYsMy4zIC0xLjksNC40IC0xLjMsMS4xIC0zLjEsMS43IC01LjQsMS45IGwgMCw1IG0gLTEuNywtMTcuOCAwLC02LjggYyAtMS4zLDAuMSAtMi4zLDAuNSAtMi45LDEuMSAtMC43LDAuNiAtMSwxLjQgLTEsMi4zIC02ZS02LDEgMC4zLDEuNyAwLjksMi4yIDAuNiwwLjUgMS42LDAuOSAzLDEuMSBtIDEuNywzLjIgMCw3LjIgYyAxLjQsLTAuMiAyLjUsLTAuNiAzLjIsLTEuMiAwLjcsLTAuNiAxLjEsLTEuNCAxLjEsLTIuNCAtMWUtNSwtMSAtMC4zLC0xLjcgLTEsLTIuMyAtMC43LC0wLjYgLTEuNywtMSAtMy4yLC0xLjMgTSAxMDQuNSw3NC44IGggNC41IHYgMTMuNCBoIDkuOSBWIDc0LjggaCA0LjUgdiAxMy40IGggNi43IHYgMzcgSCA3MCBWIDg4LjIgaCAzNC42IGwgNGUtNCwtMTMuNCAwLDAgeiBtIC0zNS43LDUxLjYgaCA2Mi4zIFYgODYuOSBoIC02LjQgViA3My41IGggLTcuMiB2IDEzLjQgaCAtNy4yIFYgNzMuNSBoIC03LjIgViA4Ni45IEggNjguOCB2IDM5LjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTAxLjksMTA4LjcgMCw3LjIgYyAxLjQsLTAuMiAyLjUsLTAuNiAzLjIsLTEuMiAwLjcsLTAuNiAxLjEsLTEuNCAxLjEsLTIuNCAtMWUtNSwtMSAtMC4zLC0xLjcgLTEsLTIuMyAtMC43LC0wLjYgLTEuNywtMSAtMy4yLC0xLjMgbSAtMS43LC0zLjIgMCwtNi44IGMgLTEuMywwLjEgLTIuMywwLjUgLTIuOSwxLjEgLTAuNywwLjYgLTEsMS40IC0xLDIuMyAtNmUtNiwxIDAuMywxLjcgMC45LDIuMiAwLjYsMC41IDEuNiwwLjkgMywxLjEgbSA0LjMsLTMwLjcgMCwxMy40IC0zNC42LDAgMCwzNyA2MC4xLDAgMCwtMzcgLTYuNywwIDAsLTEzLjQgLTQuNSwwIDAsMTMuNCAtOS45LDAgMCwtMTMuNCAtNC41LDAgeiBtIC00LjMsMTcuNiAxLjcsMCAwLDMuOCBjIDEsMCAyLDAuMiAzLDAuMyAxLDAuMiAxLjksMC40IDIuOCwwLjcgbCAwLDIuOSBjIC0wLjksLTAuNSAtMS45LC0wLjggLTIuOCwtMS4xIC0xLC0wLjMgLTIsLTAuNCAtMywtMC41IGwgMCw3LjEgYyAyLjUsMC40IDQuMywxLjEgNS41LDIuMSAxLjIsMSAxLjgsMi40IDEuOCw0LjEgLTJlLTUsMS45IC0wLjYsMy40IC0xLjksNC40IC0xLjMsMS4xIC0zLjEsMS43IC01LjQsMS45IGwgMCw1IC0xLjcsMCAtMCwtNSBjIC0xLjIsLTAgLTIuMywtMC4yIC0zLjUsLTAuNCAtMS4yLC0wLjMgLTIuMywtMC42IC0zLjUsLTEuMSBsIDAsLTMgYyAxLjEsMC43IDIuMywxLjMgMy40LDEuNiAxLjIsMC40IDIuNCwwLjUgMy42LDAuNSBsIDAsLTcuNiBjIC0yLjQsLTAuNCAtNC4yLC0xLjEgLTUuMywtMiAtMS4xLC0xIC0xLjcsLTIuMiAtMS43LC0zLjkgLTJlLTYsLTEuOCAwLjYsLTMuMiAxLjgsLTQuMyAxLjIsLTEgMywtMS42IDUuMiwtMS44IGwgMCwtMy45IHpcIn1dLGlbXCJHUi5JTi5JQy5DSEVNSUNBTCBQTEFOVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk0LjQsODkuNiAwLDAuMSBjIC0wLjUsMC4xIC0xLDAuMyAtMS40LDAuNiAtMC41LDAuNSAtMC42LDEuMyAtMC41LDEuOSAwLjIsMC44IDAuOCwxLjUgMS43LDEuOCAtMCwwLjUgLTAuMSwxLjcgMCwzIGwgLTAuMSwwIGMgLTAsMi43IC0yLjMsNS43IC00LjksOC44IC0yLjQsMyAtNSw2LjQgLTUuMywxMC40IGwgLTAuMSwwIGMgMCwwLjEgMCwwLjIgMCwwLjIgLTAsMC4xIC0wLDAuMiAtMCwwLjMgbCAwLjEsMCBjIDAuMiwyLjQgMS43LDQuMiAzLjcsNS4zIDIuMSwxLjIgNC42LDEuNyA2LjgsMS42IGwgMCwtMCA4LjksMCAwLDAuMSBjIDAuMywtMCAwLjUsLTAgMC44LC0wLjEgbCAwLjUsMCAwLC0wLjEgYyAyLjEsLTAuMiA0LjIsLTAuMyA2LC0xIDEuMSwtMC40IDIuMSwtMS4xIDIuOCwtMi4xIDAuNiwtMC45IDAuOSwtMi4xIDEuMSwtMy42IGwgMC4yLDAgYyAwLjIsLTQuNCAtMi4xLC03LjUgLTQuNSwtMTAuMyAtMi4zLC0yLjggLTQuNywtNS41IC01LjQsLTkuNiAwLC0xLjMgMC4xLC0zIDAuMSwtMy4zIDAuMiwtMC4xIDAuNCwtMC4yIDAuNiwtMC4zIDAuNSwtMC40IDAuOSwtMSAwLjksLTEuNyAtMCwtMC43IC0wLjUsLTEuMyAtMS4xLC0xLjYgLTAuNCwtMC4yIC0wLjksLTAuMyAtMS41LC0wLjQgbCAwLC0wLjEgYyAtMC4yLDAgLTAuNCwtMCAtMC42LDAgLTIuNSwwIC03LjIsMCAtOC4xLDAgLTAuMSwtMi40ZS00IC0wLjcsMCAtMC43LDAgeiBtIDAuNywyIGMgMC44LDAgNS41LDAgOC4xLDAgMC42LDAgMC45LDAuMSAxLjEsMC4yIC0wLjIsMC4xIC0wLjUsMC4zIC0wLjksMC40IGwgLTguMSwwIGMgLTAuNCwtMC4xIC0wLjcsLTAuMyAtMC43LC0wLjQgLTAsLTAuMSAtMCwtMC4xIC0wLC0wLjEgMCwtMCAwLjEsLTAuMSAwLjYsLTAuMSB6IG0gMS4yLDIuNiA2LjcsMCBjIC0wLDAuNyAtMC4xLDEuOSAtMC4xLDMuMSAtMCwwLjEgLTAsMC4yIC0wLDAuMyBsIDAuMSwwIGMgMC45LDQuNSAzLjUsNy42IDUuOCwxMC4zIDIuMiwyLjcgNCw1IDQsOC40IGwgLTAuMSwwIGMgLTAsMS40IC0wLjQsMi40IC0wLjgsMyAtMC40LDAuNyAtMSwxLjEgLTEuOCwxLjQgLTEuNCwwLjYgLTMuNiwwLjcgLTUuOCwwLjkgbCAtMTAuMywwIDAsMCBjIC0xLjYsMCAtMy42LC0wLjQgLTUuMSwtMS4zIC0xLjYsLTAuOSAtMi42LC0yLjIgLTIuNywtMy45IDAuMSwtMy4yIDIuNCwtNi4zIDQuOSwtOS40IDIuNCwtMyA1LjEsLTYuMSA1LjMsLTkuNiBsIDAuMSwtMCBjIC0wLjEsLTEgLTAuMSwtMi43IC0wLC0zLjMgeiBtIC03LDE5LjYgdiAxLjkgYyAwLDMuNSA2LDQuMyA5LjksNC4zIGggMy4yIGMgMi41LDAgOCwtMi4yIDgsLTQuMiB2IC0wLjggYyAwLC0zLjIgLTYuNiwtOS40IC03LjMsLTEyLjQgaCAtNy41IGMgLTAuNiwyLjUgLTYuMiwxMCAtNi4yLDExLjIgeiBtIDE0LjgsLTM5IGggNC41IHYgMTMuNCBoIDkuOSBWIDc0LjggaCA0LjUgdiAxMy40IGggNi43IHYgMzcgSCA2OS42IFYgODguMiBoIDM0LjYgbCA0ZS00LC0xMy40IDAsMCB6IG0gLTM1LjcsNTEuNiBoIDYyLjMgViA4Ni45IGggLTYuNCBWIDczLjUgaCAtNy4yIHYgMTMuNCBoIC03LjIgViA3My41IGggLTcuMiB2IDEzLjQgaCAtMzQuNCB2IDM5LjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIk0gMTA0LjEgNzQuOCBMIDEwNC4xIDg4LjIgTCA2OS42IDg4LjIgTCA2OS42IDEyNS4yIEwgMTI5LjYgMTI1LjIgTCAxMjkuNiA4OC4yIEwgMTIyLjkgODguMiBMIDEyMi45IDc0LjggTCAxMTguNSA3NC44IEwgMTE4LjUgODguMiBMIDEwOC42IDg4LjIgTCAxMDguNiA3NC44IEwgMTA0LjEgNzQuOCB6IE0gOTQuNCA4OS42IEMgOTQuNCA4OS42IDk1LjEgODkuNiA5NS4yIDg5LjYgQyA5Ni4xIDg5LjYgMTAwLjggODkuNiAxMDMuMyA4OS42IEMgMTAzLjUgODkuNiAxMDMuOCA4OS42IDEwMy45IDg5LjYgTCAxMDMuOSA4OS43IEMgMTA0LjUgODkuOCAxMDUgODkuOSAxMDUuNCA5MC4xIEMgMTA2IDkwLjQgMTA2LjUgOTEgMTA2LjUgOTEuNyBDIDEwNi41IDkyLjQgMTA2LjEgOTMgMTA1LjYgOTMuNCBDIDEwNS40IDkzLjUgMTA1LjIgOTMuNiAxMDUgOTMuOCBDIDEwNSA5NCAxMDQuOSA5NS43IDEwNC45IDk3LjEgQyAxMDUuNiAxMDEuMSAxMDggMTAzLjggMTEwLjMgMTA2LjcgQyAxMTIuNiAxMDkuNSAxMTQuOSAxMTIuNiAxMTQuNyAxMTcgTCAxMTQuNiAxMTYuOSBDIDExNC40IDExOC40IDExNC4xIDExOS42IDExMy41IDEyMC41IEMgMTEyLjggMTIxLjUgMTExLjggMTIyLjIgMTEwLjggMTIyLjcgQyAxMDguOSAxMjMuNCAxMDYuOCAxMjMuNSAxMDQuOCAxMjMuNyBMIDEwNC44IDEyMy43IEwgMTA0LjMgMTIzLjcgQyAxMDQuMSAxMjMuNyAxMDMuOCAxMjMuOCAxMDMuNSAxMjMuOCBMIDEwMy41IDEyMy43IEwgOTQuNiAxMjMuNyBMIDk0LjYgMTIzLjggQyA5Mi40IDEyMy45IDg5LjkgMTIzLjQgODcuOCAxMjIuMiBDIDg1LjkgMTIxLjEgODQuMyAxMTkuMiA4NC4xIDExNi44IEwgODQuMSAxMTYuOCBDIDg0LjEgMTE2LjcgODQuMSAxMTYuNiA4NC4xIDExNi41IEMgODQuMSAxMTYuNCA4NCAxMTYuNCA4NCAxMTYuMyBMIDg0LjEgMTE2LjMgQyA4NC4zIDExMi4zIDg2LjkgMTA5IDg5LjQgMTA1LjkgQyA5MS45IDEwMi43IDk0LjIgOTkuOCA5NC4zIDk3LjEgTCA5NC4zIDk3LjEgQyA5NC4yIDk1LjcgOTQuMyA5NC42IDk0LjMgOTQgQyA5My41IDkzLjcgOTIuOCA5My4xIDkyLjYgOTIuMyBDIDkyLjQgOTEuNiA5Mi42IDkwLjkgOTMuMSA5MC40IEMgOTMuNCA5MCA5My45IDg5LjggOTQuNCA4OS43IEwgOTQuNCA4OS42IHogTSA5NS4xIDkxLjYgQyA5NC43IDkxLjYgOTQuNSA5MS43IDk0LjUgOTEuOCBDIDk0LjUgOTEuOCA5NC41IDkxLjcgOTQuNiA5MS44IEMgOTQuNiA5MS45IDk0LjggOTIuMiA5NS4zIDkyLjIgTCAxMDMuNCA5Mi4yIEMgMTAzLjggOTIuMSAxMDQuMSA5MiAxMDQuMyA5MS44IEMgMTA0LjEgOTEuOCAxMDMuOCA5MS42IDEwMy4yIDkxLjYgQyAxMDAuNiA5MS42IDk1LjkgOTEuNiA5NS4xIDkxLjYgeiBNIDk2LjMgOTQuMiBDIDk2LjIgOTQuOSA5Ni4yIDk2LjUgOTYuMyA5Ny41IEwgOTYuMiA5Ny42IEMgOTYgMTAxLjEgOTMuNCAxMDQuMiA5MC45IDEwNy4yIEMgODguNSAxMTAuMyA4Ni4yIDExMy4zIDg2LjEgMTE2LjYgQyA4Ni4yIDExOC4zIDg3LjIgMTE5LjUgODguOCAxMjAuNSBDIDkwLjMgMTIxLjMgOTIuMyAxMjEuOCA5My45IDEyMS44IEwgOTMuOSAxMjEuNyBMIDEwNC4yIDEyMS43IEMgMTA2LjUgMTIxLjUgMTA4LjYgMTIxLjQgMTEwIDEyMC44IEMgMTEwLjggMTIwLjUgMTExLjQgMTIwLjEgMTExLjggMTE5LjQgQyAxMTIuMyAxMTguOCAxMTIuNiAxMTcuOCAxMTIuNyAxMTYuNCBMIDExMi43IDExNi40IEMgMTEyLjcgMTEzIDExMC45IDExMC42IDEwOC43IDEwNy45IEMgMTA2LjUgMTA1LjIgMTAzLjggMTAyLjEgMTAzIDk3LjYgTCAxMDIuOCA5Ny42IEMgMTAyLjggOTcuNSAxMDIuOSA5Ny40IDEwMi45IDk3LjMgQyAxMDIuOSA5Ni4xIDEwMi45IDk0LjkgMTAzIDk0LjIgTCA5Ni4zIDk0LjIgeiBNIDk1LjUgMTAyLjYgTCAxMDMgMTAyLjYgQyAxMDMuOCAxMDUuNyAxMTAuMyAxMTEuOSAxMTAuMyAxMTUuMSBMIDExMC4zIDExNS45IEMgMTEwLjMgMTE3LjkgMTA0LjkgMTIwIDEwMi40IDEyMCBMIDk5LjIgMTIwIEMgOTUuMyAxMjAgODkuMyAxMTkuMiA4OS4zIDExNS43IEwgODkuMyAxMTMuOCBDIDg5LjMgMTEyLjYgOTQuOSAxMDUuMSA5NS41IDEwMi42IHogXCJ9XSxpW1wiR1IuSU4uSUMuRklSRUFSTVMgTUFOVUZBQ1RVUkVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA0LjEsNzQuOCBoIDQuNSB2IDEzLjQgaCA5LjkgViA3NC44IGggNC41IHYgMTMuNCBoIDYuNyB2IDM3IEggNjkuNiBWIDg4LjIgaCAzNC42IGwgNGUtNCwtMTMuNCAwLDAgeiBtIC0zNS43LDUxLjYgaCA2Mi4zIFYgODYuOSBoIC02LjQgViA3My41IGggLTcuMiB2IDEzLjQgaCAtNy4yIFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTM0LjQgdiAzOS41IHogbSAyNS44LC0yNi42IGggMTAuOCB2IDUuOCBjIC0xLjYsMCAtNC43LDEgLTUuOCwwLjcgLTEuMiwtMC40IC0zLjgsLTEuNSAtNSwtMS42IHYgLTQuOCB6IG0gLTE5LjIsMCBoIDE2LjYgdiA2IGMgMCwwLjYgMywxLjQgMy43LDEuNyAwLjQsMC4xIDMuOSwxLjQgMy45LDEuNSBsIDcuMiwtMC45IDAuOCwyLjcgMS4xLDMuNyBjIDAuMywwLjQgMSwyLjQgMSwzLjEgdiAwLjIgYyAwLDEuMSAtMC42LDEuOSAtMC42LDMuNSBsIDEzLjUsLTAgLTAuOSwtMyAtMC42LC0xLjcgLTMsLTEwIGMgLTAuMiwtMC40IC0wLjUsLTAuNyAtMC41LC0xLjMgMCwtMS4zIDMuOSwtNC4xIDQuNywtNS4zIGwgLTIuNywtOC40IGggLTQzLjkgdiA4LjQgbCAwLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTQuMiw5OS45IGggMTAuOCB2IDUuOCBjIC0xLjYsMCAtNC43LDEgLTUuOCwwLjcgLTEuMiwtMC40IC0zLjgsLTEuNSAtNSwtMS42IHYgLTQuOCB6IG0gOS45LC0yNS4xIDAsMTMuNCAtMzQuNiwwIDAsMzcgNjAuMSwwIDAsLTM3IC02LjcsMCAwLC0xMy40IC00LjUsMCAwLDEzLjQgLTkuOSwwIDAsLTEzLjQgLTQuNSwwIHogbSAtMjkuMSwxNi43IDQzLjksMCAyLjcsOC40IGMgLTAuOCwxLjIgLTQuNyw0LjEgLTQuNyw1LjMgMCwwLjYgMC4yLDAuOSAwLjUsMS4zIGwgMy4xLDEwIDAuNiwxLjggMC45LDMgLTEzLjUsMCBjIDAsLTEuNiAwLjcsLTIuNCAwLjcsLTMuNiBsIDAsLTAuMiBjIDAsLTAuNyAtMC43LC0yLjcgLTEsLTMuMSBMIDEwNy4yLDExMC44IDEwNi40LDEwOC4xIDk5LjIsMTA5IGMgLTAsLTAuMSAtMy42LC0xLjQgLTMuOSwtMS41IC0wLjcsLTAuMyAtMy43LC0xLjEgLTMuNywtMS43IGwgMCwtNS45IC0xNi42LDAgMCwtOC40IHpcIn1dLGlbXCJHUi5JTi5JQy5GSVJFQVJNUyBSRVRBSUxFUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDg1LjEsMTIzIC0xLjEsMCAtMCwtMy4yIGMgLTAuOCwtMCAtMS41LC0wLjEgLTIuMywtMC4zIC0wLjgsLTAuMiAtMS41LC0wLjQgLTIuMywtMC43IGwgMCwtMS45IGMgMC43LDAuNSAxLjUsMC44IDIuMiwxIDAuOCwwLjIgMS41LDAuMyAyLjMsMC40IGwgMCwtNC45IGMgLTEuNiwtMC4zIC0yLjcsLTAuNyAtMy41LC0xLjMgLTAuNywtMC42IC0xLjEsLTEuNSAtMS4xLC0yLjUgLTJlLTYsLTEuMiAwLjQsLTIuMSAxLjIsLTIuOCAwLjgsLTAuNyAxLjksLTEuMSAzLjQsLTEuMiBsIDAsLTIuNSAxLjEsMCAwLDIuNSBjIDAuNywwIDEuMywwLjEgMS45LDAuMiAwLjYsMC4xIDEuMiwwLjMgMS44LDAuNSBsIDAsMS45IGMgLTAuNiwtMC4zIC0xLjIsLTAuNSAtMS44LC0wLjcgLTAuNiwtMC4yIC0xLjMsLTAuMyAtMS45LC0wLjMgbCAwLDQuNiBjIDEuNiwwLjMgMi44LDAuNyAzLjYsMS4zIDAuOCwwLjYgMS4xLDEuNSAxLjEsMi42IC0xLjJlLTUsMS4yIC0wLjQsMi4yIC0xLjIsMi45IC0wLjgsMC43IC0yLDEuMSAtMy41LDEuMiBsIDAsMy4zIG0gLTEuMSwtMTEuNSAwLC00LjQgYyAtMC44LDAuMSAtMS41LDAuMyAtMS45LDAuNyAtMC40LDAuNCAtMC43LDAuOSAtMC43LDEuNSAtNGUtNiwwLjYgMC4yLDEuMSAwLjYsMS40IDAuNCwwLjMgMS4xLDAuNiAyLDAuNyBtIDEuMSwyLjEgMCw0LjcgYyAwLjksLTAuMSAxLjYsLTAuNCAyLjEsLTAuOCAwLjUsLTAuNCAwLjcsLTAuOSAwLjcsLTEuNiAtMWUtNSwtMC42IC0wLjIsLTEuMSAtMC43LC0xLjUgLTAuNCwtMC40IC0xLjEsLTAuNiAtMi4xLC0wLjggbSAyMi42LC0yMS45IC04LDIwLjggMC44LDAuMyA4LC0yMC44IC0wLjgsLTAuMyB6IG0gLTQzLDYuNSAwLDAuOCAwLjMsMjYgMCwwLjggMC44LDAgMzIuMiwtMC4yIDAuNCwwIDAuMiwtMC4zIDcuMywtOC43IDAuMiwtMC4yIC0wLC0wLjMgLTAuMiwtMTAuMSAwLC0wLjQgLTAuMywtMC4yIC04LjQsLTYuNiAtMC4yLC0wLjIgLTAuMywwIC0zMS4zLC0wLjQgLTAuOCwwIHogbSAxLjYsMS42IDMwLjIsMC4zIDcuOSw2LjIgMC4yLDkuNCAtNi45LDguMiAtMzEsMC4yIC0wLjMsLTI0LjMgeiBNIDk3LjMsODUuNCBoIDE0LjQgdiA3LjcgYyAtMi4xLDAgLTYuMiwxLjQgLTcuOCwwLjkgLTEuNiwtMC41IC01LC0yLjEgLTYuNiwtMi4yIHYgLTYuNCB6IG0gLTI1LjUsMCBoIDIyLjEgdiA3LjkgYyAwLDAuOCA0LDEuOSA0LjgsMi4yIDAuNSwwLjIgNS4yLDEuOSA1LjIsMiBsIDkuNiwtMS4yIDEsMy42IDEuNCw0LjkgYyAwLjMsMC41IDEuMywzLjIgMS4zLDQuMSB2IDAuMiBjIDAsMS41IC0wLjksMi41IC0wLjksNC43IGggMTggbCAtMS4xLC0zLjkgLTAuOCwtMi40IC00LC0xMy40IGMgLTAuMywtMC41IC0wLjYsLTAuOSAtMC42LC0xLjcgMCwtMS43IDUuMiwtNS41IDYuMiwtNy4xIGwgLTMuNiwtMTEuMSBIIDcxLjggdiAxMS4xIGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDg1LjEsMTEzLjYgMCw0LjcgYyAwLjksLTAuMSAxLjYsLTAuNCAyLjEsLTAuOCAwLjUsLTAuNCAwLjcsLTAuOSAwLjcsLTEuNiAtMWUtNSwtMC42IC0wLjIsLTEuMSAtMC43LC0xLjUgLTAuNCwtMC40IC0xLjEsLTAuNiAtMi4xLC0wLjggbSAtMS4xLC0yLjEgMCwtNC40IGMgLTAuOCwwLjEgLTEuNSwwLjMgLTEuOSwwLjcgLTAuNCwwLjQgLTAuNywwLjkgLTAuNywxLjUgLTRlLTYsMC42IDAuMiwxLjEgMC42LDEuNCAwLjQsMC4zIDEuMSwwLjYgMiwwLjcgTSA2Ni40LDk5LjggbCAwLjMsMjQuMyAzMSwtMC4yIDYuOSwtOC4yIC0wLjIsLTkuNCAtNy45LC02LjIgLTMwLjIsLTAuMyB6IG0gMTcuNywzLjMgMS4xLDAgMCwyLjUgYyAwLjcsMCAxLjMsMC4xIDEuOSwwLjIgMC42LDAuMSAxLjIsMC4yIDEuOCwwLjQgbCAwLDEuOSBjIC0wLjYsLTAuMyAtMS4yLC0wLjUgLTEuOCwtMC43IC0wLjYsLTAuMiAtMS4zLC0wLjMgLTEuOSwtMC4zIGwgMCw0LjYgYyAxLjYsMC4zIDIuOCwwLjcgMy42LDEuMyAwLjgsMC42IDEuMiwxLjUgMS4yLDIuNyAtMS4yZS01LDEuMiAtMC40LDIuMiAtMS4yLDIuOSAtMC44LDAuNyAtMiwxLjEgLTMuNSwxLjIgbCAwLDMuMyAtMS4xLDAgMCwtMy4yIGMgLTAuOCwtMCAtMS41LC0wLjEgLTIuMywtMC4zIC0wLjgsLTAuMiAtMS41LC0wLjQgLTIuMywtMC44IGwgMCwtMS45IGMgMC43LDAuNSAxLjUsMC44IDIuMiwxLjEgMC44LDAuMiAxLjUsMC4zIDIuMywwLjMgbCAwLC00LjkgYyAtMS42LC0wLjMgLTIuNywtMC43IC0zLjUsLTEuMyAtMC43LC0wLjYgLTEuMSwtMS41IC0xLjEsLTIuNSAtMmUtNiwtMS4yIDAuNCwtMi4xIDEuMiwtMi44IDAuOCwtMC43IDEuOSwtMS4xIDMuNCwtMS4yIGwgMCwtMi41IHpcIn1dLGlbXCJHUi5JTi5JQy5IQVpBUkRPVVMgTUFURVJJQUwgUFJPRFVDVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwNC43LDcxLjggaCA1IHYgMTUgaCAxMS4xIHYgLTE1IGggNSB2IDE1IGggNy41IHYgNDEuNCBoIC02Ny40IFYgODYuOCBoIDM4LjggdiAtMTUgeiBtIC00MCw1Ny45IGggNjkuOCBWIDg1LjUgaCAtNy4xIHYgLTE1LjIgaCAtOCB2IDE1LjIgaCAtOCB2IC0xNS4yIGggLTggdiAxNS4yIGggLTM4LjYgdiA0NC4xIGwgMCwwIHogbSAxNS41LC0yMS44IGggMzguNiBsIC0xOS4zLDE4LjYgLTE5LjMsLTE4LjYgeiBtIDIxLjgsLTE2LjggYyAwLjUsMC40IDQuMywzLjggNC4zLDQuMyB2IDEyIGggLTQuMyBWIDkxLjEgeiBtIC01LC0wIDAsMTYuMyBoIC00LjMgbCAwLjEsLTEyLjIgNC4xLC00LjEgMCwwIHogbSAtMTIuMSwxMiBjIDAsLTAuNCAzLjEsLTMuMiAzLjYsLTMuNiB2IDcuOCBoIC0zLjYgdiAtNC4zIHogbSAyNS43LC0zLjYgMy43LDMuNCBjIC0wLjIsMC40IC0wLjIsLTAuMiAtMC4yLDAuNSB2IDQgaCAtMy42IHYgLTcuOSB6IG0gOS40LDguMiAtMjAuNSwtMjAgLTIwLjQsMjAgMjAuNCwxOS45IDIwLjUsLTE5LjkgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTkuNSwxMjYuNSAxOS4zLC0xOC42IC0zOC42LDAgeiBtIDAsMSAtMjAuNCwtMTkuOSAyMC40LC0yMCAyMC41LDIwIC0yMC41LDE5LjggeiBtIDUuMiwtNDAuOCBoIC0zOC44IHYgNDEuNCBoIDY3LjQgViA4Ni44IGggLTcuNSB2IC0xNSBoIC01IHYgMTUgaCAtMTEuMSB2IC0xNSBoIC01IHYgMTUgeiBtIDUuOSwyMC42IGggMy42IHYgLTQgYyAwLC0wLjcgLTAsLTAuMSAwLjIsLTAuNSBsIC0zLjcsLTMuNCB2IDcuOSB6IG0gLTguNiwwIGggNC4zIHYgLTEyIGMgMCwtMC40IC0zLjgsLTMuOSAtNC4zLC00LjMgdiAxNi4zIHogbSAtOS4zLDAgNC4zLDAgLTAsLTE2LjMgLTQuMSw0LjEgeiBtIC03LjgsLTQuMyB2IDQuMyBoIDMuNiB2IC03LjkgYyAtMC41LDAuMyAtMy42LDMuMiAtMy42LDMuNiB6XCJ9XSxpW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFNUT1JBR0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjIuNCw2OC44IGMgMC40LDAuMSAwLjksMC41IDEuMywxIDAuNCwwLjUgMC44LDEuMiAxLjMsMiBsIDIuMSw0LjEgLTIuMiwwIC0xLjksLTMuOSBjIC0wLjUsLTEgLTEsLTEuNyAtMS41LC0yIC0wLjUsLTAuMyAtMS4xLC0wLjUgLTEuOSwtMC41IGwgLTIuMiwwIDAsNi40IC0yLjEsMCAwLC0xNS4yIDQuNiwwIGMgMS43LDEuNWUtNSAzLDAuNCAzLjksMS4xIDAuOSwwLjcgMS4zLDEuOCAxLjMsMy4zIC0xMGUtNiwxIC0wLjIsMS43IC0wLjcsMi40IC0wLjQsMC42IC0xLjEsMS4xIC0xLjksMS4zIG0gLTUuMSwtNi40IDAsNS40IDIuNiwwIGMgMSw4ZS02IDEuNywtMC4yIDIuMiwtMC43IDAuNSwtMC41IDAuOCwtMS4xIDAuOCwtMiAtMTBlLTYsLTAuOSAtMC4zLC0xLjYgLTAuOCwtMiAtMC41LC0wLjUgLTEuMiwtMC43IC0yLjIsLTAuNyBsIC0yLjYsMCBtIC0xMi4zLC0wLjMgYyAtMS41LDEuNGUtNSAtMi43LDAuNiAtMy42LDEuNyAtMC45LDEuMSAtMS4zLDIuNiAtMS4zLDQuNSAtMWUtNSwxLjkgMC40LDMuNCAxLjMsNC41IDAuOSwxLjEgMi4xLDEuNyAzLjYsMS43IDEuNSwxZS02IDIuNywtMC42IDMuNSwtMS43IDAuOSwtMS4xIDEuMywtMi42IDEuMywtNC41IC0xMGUtNiwtMS45IC0wLjQsLTMuNCAtMS4zLC00LjUgLTAuOSwtMS4xIC0yLC0xLjcgLTMuNSwtMS43IG0gMCwtMS43IGMgMi4xLDEuNWUtNSAzLjgsMC43IDUuMSwyLjEgMS4zLDEuNCAxLjksMy4zIDEuOSw1LjcgLTEwZS02LDIuNCAtMC42LDQuMyAtMS45LDUuNyAtMS4zLDEuNCAtMywyLjEgLTUuMSwyLjEgLTIuMSwtMTBlLTcgLTMuOCwtMC43IC01LjEsLTIuMSAtMS4zLC0xLjQgLTEuOSwtMy4zIC0xLjksLTUuNyAtMmUtNiwtMi40IDAuNiwtNC4zIDEuOSwtNS43IDEuMywtMS40IDMsLTIuMSA1LjEsLTIuMSBtIC0yMSwwLjMgMTIuOCwwIDAsMS43IC01LjQsMCAwLDEzLjQgLTIuMSwwIDAsLTEzLjQgLTUuNCwwIDAsLTEuNyBtIC0yLDAuNSAwLDIgYyAtMC44LC0wLjQgLTEuNSwtMC42IC0yLjIsLTAuOCAtMC43LC0wLjIgLTEuNCwtMC4zIC0yLC0wLjMgLTEuMSwxLjRlLTUgLTIsMC4yIC0yLjYsMC43IC0wLjYsMC40IC0wLjksMSAtMC45LDEuOCAtM2UtNiwwLjcgMC4yLDEuMiAwLjYsMS41IDAuNCwwLjMgMS4yLDAuNiAyLjMsMC44IGwgMS4yLDAuMyBjIDEuNSwwLjMgMi43LDAuOCAzLjQsMS41IDAuNywwLjcgMS4xLDEuNyAxLjEsMi45IC0xLjJlLTUsMS41IC0wLjUsMi42IC0xLjUsMy4zIC0xLDAuOCAtMi40LDEuMSAtNC4zLDEuMSAtMC43LC0xMGUtNyAtMS41LC0wLjEgLTIuMywtMC4yIC0wLjgsLTAuMiAtMS42LC0wLjQgLTIuNSwtMC43IGwgMCwtMi4xIGMgMC44LDAuNSAxLjYsMC44IDIuNCwxLjEgMC44LDAuMiAxLjYsMC40IDIuNCwwLjQgMS4yLDFlLTYgMi4xLC0wLjIgMi43LC0wLjcgMC42LC0wLjUgMSwtMS4xIDEsLTIgLTFlLTUsLTAuNyAtMC4yLC0xLjMgLTAuNywtMS43IC0wLjUsLTAuNCAtMS4yLC0wLjcgLTIuMiwtMC45IGwgLTEuMiwtMC4yIGMgLTEuNSwtMC4zIC0yLjYsLTAuOCAtMy4zLC0xLjQgLTAuNywtMC42IC0xLC0xLjYgLTEsLTIuNyAtMmUtNiwtMS4zIDAuNSwtMi40IDEuNCwtMy4yIDAuOSwtMC44IDIuMywtMS4yIDMuOSwtMS4yIDAuNywxLjVlLTUgMS40LDAuMSAyLjIsMC4yIDAuNywwLjEgMS41LDAuMyAyLjMsMC42IE0gNzAuNiwxMTAgaCA1Ny45IGwgLTI5LDI3LjkgLTI4LjksLTI3LjkgeiBtIDMyLjgsLTI1LjIgYyAwLjgsMC41IDYuNCw1LjggNi40LDYuNCB2IDE3LjkgaCAtNi40IFYgODQuOCB6IG0gLTcuNiwtMC4xIDAuMSwyNC40IGggLTYuNSBsIDAuMiwtMTguMyA2LjIsLTYuMSAwLDAgeiBtIC0xOC4yLDE4IGMgMCwtMC43IDQuNywtNC45IDUuMywtNS4zIHYgMTEuOCBoIC01LjMgdiAtNi41IHogbSAzOC42LC01LjMgNS42LDUuMiBjIC0wLjMsMC43IC0wLjIsLTAuMyAtMC4yLDAuNyB2IDUuOSBoIC01LjMgViA5Ny40IHogbSAxNC4yLDEyLjMgLTMwLjcsLTMwLjEgLTMwLjcsMzAgMzAuNywyOS45IDMwLjgsLTI5LjggelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTkuNSwxMzcuOSAyOSwtMjcuOSAtNTcuOSwwIHogbSAxNi43LC0yOC43IGggNS4zIHYgLTUuOSBjIDAsLTEgLTAuMSwtMC4xIDAuMiwtMC43IGwgLTUuNiwtNS4yIHYgMTEuOCB6IG0gLTEyLjgsMCBoIDYuNCBWIDkxLjIgYyAwLC0wLjcgLTUuNiwtNS45IC02LjQsLTYuNCB2IDI0LjQgeiBtIC0xNCwtMTBlLTYgNi41LDAgLTAuMSwtMjQuNCAtNi4yLDYuMSB6IG0gLTExLjgsLTYuNCB2IDYuNCBoIDUuMyBWIDk3LjQgYyAtMC43LDAuNSAtNS4zLDQuNyAtNS4zLDUuMyB6XCJ9XSxpW1wiR1IuSU4uSUMuSU5EVVNUUklBTCBTSVRFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA0LjEsNzQuOCBoIDQuNSB2IDEzLjQgaCA5LjkgViA3NC44IGggNC41IHYgMTMuNCBoIDYuNyB2IDM3IEggNjkuNiBWIDg4LjIgaCAzNC42IGwgNGUtNCwtMTMuNCAwLDAgeiBtIC0zNS43LDUxLjYgaCA2Mi4zIFYgODYuOSBoIC02LjQgViA3My41IGggLTcuMiB2IDEzLjQgaCAtNy4yIFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTM0LjQgdiAzOS41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEwNC4xLDc0LjggaCA0LjUgdiAxMy40IGggOS45IFYgNzQuOCBoIDQuNSB2IDEzLjQgaCA2LjcgdiAzNyBIIDY5LjYgViA4OC4yIGggMzQuNiBsIDRlLTQsLTEzLjQgMCwwIHpcIn1dLGlbXCJHUi5JTi5JQy5MQU5ERklMTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyNC4xLDExNS44IGMgMCwyLjUgMS42LDIuNyAzLDMuNiBoIC0yMi44IGMgMS4yLC0wLjcgMi44LC0xLjIgMi44LC0zLjMgdiAtMS4yIGMgMCwtMS4zIC0xLjksLTIuOCAtMy42LC0yLjggLTEsMCAtMS44LDAuNCAtMi4zLDAuOSAtMC40LDAuNCAtMS4xLDEuNiAtMS4xLDIuMSB2IDEuMyBjIDAsMC4yIDAuOSwxLjcgMSwxLjkgMC42LDAuNyAxLjIsMC42IDEuOCwxIGggLTguNiBjIDAuNiwtMC40IDEuMywtMC41IDEuOCwtMS4xIDAuNCwtMC40IDAuNiwtMS40IDEsLTEuNiB2IC0xLjcgYyAwLC0wLjQgLTAuOSwtMS44IC0xLjIsLTIuMSAtMC42LC0wLjYgLTEuMywtMC45IC0yLjQsLTAuOSBoIC0wLjEgYyAtMS43LDAgLTMuNSwxLjUgLTMuNSwzLjEgdiAxLjMgYyAwLDEuNSAyLDIuMiAyLjgsMi44IGggLTguNyBjIC0wLjEsLTMuMiAtMi41LC0xLjggLTMuMSwtMyAtMS4xLC0xLjkgMC45LC0yLjIgLTIuOCwtMy4xIC0zLjEsLTAuOCAtMiwtMC4zIC0zLjksLTIuMiAtMC42LC0wLjcgLTMsLTEuOCAtNC4yLC0xLjggaCAtMC4xIGMgLTEsMCAtMS45LDEuMiAtMi43LDEuNSAtMS4xLDAuNSAtMi4zLDAuNCAtMy4yLDEuMSAtMS4xLDAuOCAtMi4zLDQuNCAtMi4zLDYuMiB2IDAuNiBoIC0wLjQgdiAyLjIgaCA3Mi4xIDQuOSB2IC0xLjUgaCAtOS41IGMgMC44LC0wLjUgMC45LC0wLjIgMS44LC0xIDAuNCwtMC40IDAuOSwtMS41IDEuMiwtMS42IHYgLTEuNiBjIDAsLTAuNSAtMC45LC0xLjkgLTEuMywtMi4yIC0wLjcsLTAuNSAtMS40LC0wLjggLTIuNSwtMC44IC0xLjksMCAtMy42LDEuNSAtMy42LDMuNSB2IDAuMiBoIDAgeiBtIC0xLC0xNy42IGggMy41IGMgMC41LDAgNC4yLDQuOCA0LjYsNS40IGggLTguMSB2IC01LjQgeiBtIC00LjEsLTE3LjggLTAuNywtMS4zIC03LDMuOSAxLjQsMy41IC0zMiwxNC41IGMgMC44LDAuNCAyLjEsNC4zIDIuNiw1LjMgMC4yLDAuNCAyLjMsNSAyLjMsNS4xIDAsMC41IC0wLjksMC4yIC0wLjgsMC42IGwgMC41LDMuMSBoIDMuNCBjIDAsLTIuNCAyLC00LjggNC4zLC00LjggaCAxIGMgMi40LDAgNC4zLDIuMyA0LjMsNC44IGggMC42IGMgMCwtMi40IDAuNiwtMi4zIDEuNSwtMy42IGwgLTIuMSwtNS42IDkuNSwtNC4zIDQuMiw5LjkgLTUuMSwwIGMgMC45LDEuMyAxLjYsMS4zIDEuNiwzLjYgaCAxNC40IHYgLTAuNSBjIDAsLTIuMSAyLjUsLTQuMyA0LjgsLTQuMyBoIDAuNSBjIDIuNiwwIDQuNiwyLjIgNC42LDQuOCBoIDIuNiB2IC0zLjEgaCAtMS4yIHYgLTcuNCBjIDAsLTEuMiAtNS44LC02LjggLTYuMSwtOC4xIGggLTYuNCB2IDE1IGggLTQuMSBsIC01LjMsLTEyLjEgNS41LC0yLjMgLTQuMywtOS41IDUuNiwtNy40IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEyMy4xLDEwMy42IGggOC4xIGMgLTAuNSwtMC42IC00LjIsLTUuNCAtNC42LC01LjQgaCAtMy41IHYgNS40IHpcIn1dLGlbXCJHUi5JTi5JQy5QSEFSTUFDRVVUSUNBTCBNQU5VRkFDVFVSRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDUuMiw3MS4zIGggNS4xIFYgODYuNSBIIDEyMS41IFYgNzEuMyBoIDUuMSB2IDE1LjIgaCA3LjYgdiA0Mi4xIEggNjUuOCBWIDg2LjYgaCAzOS40IFYgNzEuMyB6IE0gNjQuNSwxMzAuMSBoIDcxIFYgODUuMyBoIC03LjMgViA2OS45IGggLTguMiBWIDg1LjMgaCAtOC4yIFYgNjkuOSBIIDEwMy43IFYgODUuMyBIIDY0LjUgdiA0NC44IHogTSA5MC4zLDkzLjEgaCA3LjYgYyAxLjIsMCAzLjQsMS44IDMuNCwyLjcgdiAyLjYgYyAwLDEuMyAtMi40LDIuOSAtMy42LDIuOSBoIC03LjQgdiAtOC4yIHogbSAtNC45LDI2LjUgaCA0LjkgdiAtMTMuMSBsIDEuNywwLjEgNy42LDEwIC04LjgsMTEgNS45LDAuMSA1LjksLTcgYyAxLjIsMC4zIDQuMiw1LjkgNS42LDYuOSBoIDYuMiBjIC0wLjksLTEuNyAtOC40LC0xMC40IC04LjQsLTExIDAsLTAuMyA3LjQsLTkuNyA4LjIsLTEwLjQgbCAtNiwtMC4xIC01LjYsNi4yIC00LjMsLTUuNyBjIDUuMiwtMS4yIDguNCwtMy4zIDguNCwtOS44IHYgLTAuNiBjIDAsLTIgLTEuNywtNC43IC0yLjgsLTUuOCAtMSwtMSAtNC4xLC0yLjQgLTYuMiwtMi40IEggODUuNCB2IDMxLjYgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gODUuNCw4OCBoIDEyLjQgYyAyLjEsMCA1LjEsMS40IDYuMSwyLjQgMS4xLDEuMSAyLjgsMy44IDIuOCw1LjggdiAwLjYgYyAwLDYuNSAtMy4xLDguNiAtOC40LDkuOCBsIDQuMyw1LjcgNS42LC02LjIgNi4xLDAuMSBjIC0wLjgsMC42IC04LjIsMTAgLTguMiwxMC40IDAsMC43IDcuNCw5LjQgOC40LDExLjEgaCAtNi4yIGMgLTEuNSwtMSAtNC40LC02LjYgLTUuNiwtNi45IGwgLTUuOSw2LjkgLTUuOSwtMC4xIDguOCwtMTEgLTcuNiwtOS45IC0xLjgsLTAuMSB2IDEzLjEgaCAtNC45IHYgLTMxLjYgeiBtIDE5LjgsLTEuNCBoIC0zOS40IHYgNDIuMSBoIDY4LjQgViA4Ni42IGggLTcuNiBWIDcxLjMgSCAxMjEuNSBWIDg2LjUgSCAxMTAuMyBWIDcxLjMgaCAtNS4xIHYgMTUuMyB6IG0gLTE0LjksMTQuNyBoIDcuNCBjIDEuMiwwIDMuNiwtMS42IDMuNiwtMi45IHYgLTIuNSBjIDAsLTEgLTIuMiwtMi43IC0zLjQsLTIuNyBoIC03LjYgdiA4LjIgelwifV0saVtcIkdSLklOLklDLkNPTlRBTUlOQVRFRCBIQVpBUkRPVVMgV0FTVEUgU0lURVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEzMy43LDcxLjUgYyAtMC4zLDAgLTAuNywwLjEgLTAuOSwwLjIgbCAtNDkuNSwwIC0wLjcsMCAwLDAuMSBjIC0wLjcsMC4zIC0xLjMsMC45IC0xLjgsMS43IC0wLjYsMSAtMS4yLDIuNSAtMS42LDQuMiAtMC45LDMuNSAtMS40LDguMiAtMS40LDEzLjQgMCw0LjggMC41LDkuMiAxLjIsMTIuNiAtMSwwLjEgLTIuMSwwLjUgLTMsMC4zIC0xLjIsLTAuMSAtMi41LC0wLjEgLTMuOCwtMC4xIC0xLjMsMCAtNi41LC0wLjkgLTYuNSwwLjcgMCwxLjggNiwzLjQgNy41LDYuMSAtMC44LDEuNSAtNS45LDEuNCAtOC4xLDEuOCAtMS41LDAuMiAtMywwLjIgLTMuOCwxLjEgLTEsMSAwLjIsMi4zIDEuMSwyLjcgMS43LDAuOSA2LDEgOC4yLDEuNSAxLjMsMC4zIDIuNiwwLjcgMy4xLDEuOSAwLjQsMS4xIDAuNiwyLjYgMi4yLDIuNiBsIDAuMSwwIGMgMi4xLDAgNS4xLC0xLjcgNy45LC0xLjcgbCAxLjEsMCBjIDYuMiwwIDYuOCw3LjQgMTIuMyw3LjcgMy41LDAuMiA1LjMsLTAuOCA3LjgsLTEuOSAxLjYsLTAuNyA1LjUsLTIuOCA3LjMsLTIuOCBsIDAuMywwIGMgMS44LDAgMy4zLDEuMSA0LjgsMS41IDEuNiwwLjUgMy4zLDEgNS40LDEgbCAwLjUsMCBjIDEuMiwwIDIuMywtMC4yIDMuMiwtMC41IDEuMiwtMC40IDEuMSwtMSAxLjEsLTIuNCAtMC4xLC0xLjkgLTIuMiwtMy4zIC0zLjUsLTQgLTEuNCwtMC45IC0zLjQsLTEuOCAtNC45LC0yLjYgLTAuOCwtMC40IC0xLjUsLTAuOSAtMi4zLC0xLjQgLTEuMywtMSAtMSwtMC42IC0xLjcsLTIuMSAxLjIsLTEuOCA2LjksMC4yIDYuOSwtMS45IDAsLTAuMiAtMC4zLC0wLjUgLTAuNywtMC43IGwgMTIuMiwwIDAuNywwIDAsLTAuNCBjIDAuNywtMC4zIDEuMywtMC45IDEuOCwtMS43IDAuNiwtMSAxLjIsLTIuNSAxLjYsLTQuMiAwLjksLTMuNSAxLjQsLTguMiAxLjQsLTEzLjQgMCwtNS4yIC0wLjUsLTkuOSAtMS40LC0xMy40IC0wLjQsLTEuNyAtMSwtMy4yIC0xLjYsLTQuMiAtMC42LC0xIC0xLjQsLTEuOCAtMi41LC0xLjggeiBtIDAuMywxLjQgYyAwLjMsMCAwLjcsMC4zIDEuMywxLjEgMC41LDAuOCAxLDIuMiAxLjQsMy44IDAuOCwzLjMgMS40LDcuOSAxLjQsMTMuMSAwLDUuMSAtMC41LDkuOCAtMS40LDEzLjEgLTAuNCwxLjcgLTAuOSwzIC0xLjQsMy44IC0wLjUsMC44IC0xLDEuMSAtMS4zLDEuMSAtMC4yLDAgLTAuNCwtMC4xIC0wLjcsLTAuNCBsIDAsMC43IC00Ny45LDAgYyAwLjIsLTAuMiAwLjQsLTAuNCAwLjYsLTAuOCAwLjYsLTEgMS4xLC0yLjMgMS41LC00IDAuOSwtMy40IDEuNCwtOC4xIDEuNCwtMTMuMiAwLC01LjIgLTAuNSwtOS44IC0xLjQsLTEzLjIgLTAuNCwtMS43IC0wLjksLTMuMSAtMS41LC00IC0wLjIsLTAuMyAtMC40LC0wLjUgLTAuNiwtMC43IGwgNDcuOSwwIDAsMC4yIGMgMC4zLC0wLjMgMC41LC0wLjQgMC43LC0wLjQgeiBtIC01MC43LDAuMiBjIDAuMywwIDAuNywwLjMgMS4zLDEuMSAwLjUsMC44IDEsMi4yIDEuNCwzLjggMC44LDMuMyAxLjQsNy45IDEuNCwxMy4xIDAsNS4xIC0wLjUsOS44IC0xLjQsMTMuMSAtMC40LDEuNyAtMC45LDMgLTEuNCwzLjggLTAuNSwwLjggLTEsMS4xIC0xLjMsMS4xIC0wLjMsMCAtMC43LC0wLjMgLTEuMywtMS4xIC0wLjMsLTAuNSAtMC42LC0xLjEgLTAuOCwtMS44IDAuNCwxLjcgMSwzIDEuNywzLjUgbCA4LjMsLTAuMiA3LjEsMC4xIDIwLjMsLTAuMSBjIDAuNSwwIDEuNSwwLjUgMi4zLDEgbCAwLDAgYyAwLjUsMC4zIDAuOCwwLjYgMSwwLjcgLTAuMSwwLjIgLTAuNCwwLjMgLTAuNiwwLjQgLTAuMiwwLjEgLTAuNSwwLjIgLTAuOCwwLjIgLTAuNCwwLjEgLTAuOSwwLjEgLTEuMywwLjEgLTAuMiwtMCAtMC41LC0wIC0wLjcsLTAgLTAuNCwtMCAtMC45LC0wIC0xLjIsLTAgbCAtMC4zLDAgYyAtMC45LDAgLTEuNywwLjUgLTEuNywxLjQgbCAwLDAuMSAwLDAuMSBjIDAsMC4xIDAsMC4yIDAsMC4zIDAuNywzIDExLjMsNS44IDExLjksOS4yIDAsMC4xIDAsMC4yIDAsMC4zIC0wLDAuMSAtMCwwLjEgLTAsMC4xIC0wLjIsMS42IC0yLjksMi4yIC01LjIsMi4yIC0wLjcsMCAtMS4zLDAgLTEuOCwtMC4xIC0yLjYsLTAuNCAtNS40LC0yLjMgLTcuMywtMi4zIC01LjMsMCAtOS41LDUuNSAtMTUuMiw0LjggLTQuNCwtMC42IC01LjUsLTcuOSAtMTIuMywtNy45IGwgLTEuMywwIGMgLTMsMCAtNS42LDEuNyAtOC40LDEuNyAtMC41LDAgLTAuNywtMC4zIC0wLjksLTAuNiAtMCwtMCAtMCwtMC4xIC0wLjEsLTAuMSAtMC4yLC0wLjUgLTAuMywtMS4xIC0wLjYsLTEuNiAtMCwtMCAwLC0wIDAsLTAgLTAsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4yIC0wLC0wIC0wLC0wLjEgLTAuMSwtMC4xIC0wLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMC4xLC0wLjIgLTAuMywtMC4zIC0wLjQsLTAuNCAtMS4yLC0wLjkgLTIuMywtMS4xIC00LC0xLjQgLTEuOSwtMC4zIC01LjgsLTAuMyAtNy4zLC0xLjUgLTAsLTAgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMCwtMCAtMCwtMCAtMC4xLC0wLjEgLTAsLTAgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMCwtMCAtMCwtMCAtMCwtMC4xIC0wLC0wIC0wLC0wIC0wLC0wIC0wLjIsLTAuMyAtMC40LC0wLjYgLTAuNCwtMC45IGwgMCwtMC4zIGMgMCwtMi4xIDEzLjIsLTAuOSAxMy4yLC0zLjIgMCwtMC4zIC0wLjEsLTAuNiAtMC4zLC0wLjggLTAsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4yIC0wLC0wIC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLjIsLTAuMiAtMCwtMCAtMCwtMCAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLjMsLTAuMyAtMC41LC0wLjQgLTEuNywtMS4zIC00LjgsLTIuNyAtNi4zLC0zLjkgLTAuMSwtMC4xIC0wLjMsLTAuMiAtMC40LC0wLjMgLTAsLTAgLTAsLTAgLTAuMSwtMC4xIC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAuMSwtMC4xIC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLjIsLTAuMiAtMC4yLC0wLjQgMC4zLC0wLjEgMC42LC0wLjMgMS4xLC0wLjMgbCAyLjksMCA2LjMsMC4zIDIuNiwtMC4zIGMgOS40ZS00LDAgLTkuNGUtNCwwIDAsMCBsIDAuNywtMC4xIDAuOCwwLjEgYyAtMCwtMCAtMCwtMCAtMCwtMCAtMC44LC0zLjMgLTEuNCwtNy45IC0xLjQsLTEzLjEgMCwtNS4xIDAuNSwtOS43IDEuNCwtMTMuMSAwLjQsLTEuNyAwLjksLTMgMS40LC0zLjggMC41LC0wLjggMSwtMS4xIDEuMywtMS4xIHogbSAyNy43LDEuMSAtMTcuNCwxNyAxNy40LDE2LjkgMTcuNCwtMTYuOSAtMTcuNCwtMTcgeiBtIC0yLjIsMi45IDAsMTMuOCAtMy42LDAgMC4xLC0xMC40IDMuNSwtMy41IHogbSA0LjMsMCBjIDAuNCwwLjMgMy42LDMuMyAzLjYsMy43IGwgMCwxMC4yIC0zLjYsMCAwLC0xMy44IHogbSA3LjMsNy4yIDMuMiwyLjkgYyAtMC4xLDAuMSAtMC4xLDAuMSAtMC4xLDAuMSAtMCwtMCAwLDAgMCwwLjMgbCAwLDMuMyAtMy4xLDAgMCwtNi43IHogbSAtMTguOCwwIDAsNi43IC0zLDAgMCwtMy43IGMgMCwtMC40IDIuNywtMi44IDMsLTMgeiBtIC03LDcuMSAzMi44LDAgLTE2LjQsMTUuOCAtMTYuNCwtMTUuOCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMzQsNzIuOSBjIC0wLjIsMCAtMC40LDAuMSAtMC43LDAuNCBsIDAsLTAuMiAtNDcuOSwwIGMgMC4yLDAuMiAwLjQsMC40IDAuNiwwLjcgMC42LDEgMS4xLDIuMyAxLjUsNCAwLjksMy40IDEuNCw4LjEgMS40LDEzLjIgMCw1LjIgLTAuNSw5LjggLTEuNCwxMy4yIC0wLjQsMS43IC0wLjksMy4xIC0xLjUsNCAtMC4yLDAuMyAtMC40LDAuNSAtMC42LDAuOCBsIDQ3LjksMCAwLC0wLjcgYyAwLjMsMC4zIDAuNSwwLjQgMC43LDAuNCAwLjMsMCAwLjcsLTAuMyAxLjMsLTEuMSAwLjUsLTAuOCAxLC0yLjIgMS40LC0zLjggMC44LC0zLjMgMS40LC03LjkgMS40LC0xMy4xIDAsLTUuMSAtMC41LC05LjggLTEuNCwtMTMuMSAtMC40LC0xLjcgLTAuOSwtMyAtMS40LC0zLjggLTAuNSwtMC44IC0xLC0xLjEgLTEuMywtMS4xIHogbSAtNTAuNywwLjIgYyAtMC4zLDAgLTAuNywwLjMgLTEuMywxLjEgLTAuNSwwLjggLTEsMi4yIC0xLjQsMy44IC0wLjgsMy4zIC0xLjQsNy45IC0xLjQsMTMuMSAwLDUuMSAwLjUsOS44IDEuNCwxMy4xIDAsMCAwLDAgMCwwIGwgLTAuOCwtMC4xIC0zLjMsMC40IC02LjIsLTAuMyAtMi45LDAgYyAtMC41LDAgLTAuOCwwLjEgLTEuMSwwLjMgMC40LDEuNiA4LjQsNC4zIDguNCw2LjUgMCwyLjMgLTEzLjIsMS4xIC0xMy4yLDMuMiBsIDAsMC4zIGMgMCwyLjQgNS42LDIuMyA4LDIuNyAxLjcsMC4zIDIuOCwwLjUgNCwxLjQgMS4zLDEgMC44LDMuMyAyLjIsMy4zIDIuOCwwIDUuNCwtMS43IDguNCwtMS43IGwgMS4zLDAgYyA2LjgsMCA3LjksNy4zIDEyLjMsNy45IDUuNywwLjcgOS45LC00LjggMTUuMiwtNC44IDEuOCwwIDQuNywxLjkgNy4zLDIuMyAyLjMsMC4yIDcsLTAuMiA3LC0yLjQgMCwtMy42IC0xMiwtNi41IC0xMiwtOS44IGwgMCwtMC4xIGMgMCwtMC45IDAuOSwtMS40IDEuNywtMS40IGwgMC4zLDAgYyAxLjQsMCAzLjksMC4zIDQuNywtMC43IC0wLjMsLTAuNCAtMi41LC0xLjcgLTMuMiwtMS43IGwgLTIwLjMsMC4xIC03LjEsLTAuMSAtOC4zLDAuMiBjIC0wLjcsLTAuNSAtMS4zLC0xLjggLTEuNywtMy41IDAuMywwLjcgMC41LDEuMyAwLjgsMS44IDAuNSwwLjggMSwxLjEgMS4zLDEuMSAwLjMsMCAwLjcsLTAuMyAxLjMsLTEuMSAwLjUsLTAuOCAxLC0yLjIgMS40LC0zLjggMC44LC0zLjMgMS40LC03LjkgMS40LC0xMy4xIDAsLTUuMSAtMC41LC05LjcgLTEuNCwtMTMuMSAtMC40LC0xLjcgLTAuOSwtMyAtMS40LC0zLjggLTAuNSwtMC44IC0xLC0xLjEgLTEuMywtMS4xIHogbSAyNy43LDEuMSAxNy40LDE3IC0xNy40LDE2LjkgLTE3LjQsLTE2LjkgMTcuNCwtMTcgeiBtIC0yLjIsMi45IC0zLjUsMy41IC0wLjEsMTAuNCAzLjYsMCAtMCwtMTMuOCB6IG0gNC4zLDAgMCwxMy44IDMuNiwwIDAsLTEwLjIgYyAwLC0wLjQgLTMuMiwtMy40IC0zLjYsLTMuNyB6IG0gNy4zLDcuMiAwLDYuNyAzLjEsMCAwLC0zLjMgYyAwLC0wLjMgLTAsLTAuMyAtMCwtMC4zIDAsMCAwLDAgMC4xLC0wLjEgbCAtMy4yLC0yLjkgeiBtIC0xOC44LDAgYyAtMC40LDAuMyAtMywyLjcgLTMsMyBsIDAsMy43IDMsMCAwLC02LjcgeiBtIC03LDcuMSAxNi40LDE1LjggMTYuNCwtMTUuOCAtMzIuOCwwIHpcIn1dLGlbXCJHUi5JTi5JQy5UT1hJQyBSRUxFQVNFIElOVkVOVE9SWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgxLjgsNjEgMCwxNS4yIDIsMCAwLC02LjQgMi4yLDAgYyAwLjgsNmUtNiAxLjUsMC4yIDEuOSwwLjUgMC41LDAuMyAxLDEgMS41LDIgbCAxLjksMy45IDIuMiwwIC0yLjEsLTQuMiBjIC0wLjQsLTAuOSAtMC44LC0xLjUgLTEuMywtMiAtMC40LC0wLjUgLTAuOCwtMC44IC0xLjMsLTAuOSAwLjgsLTAuMiAxLjUsLTAuNyAxLjksLTEuMyAwLjQsLTAuNiAwLjcsLTEuNCAwLjcsLTIuNCAtMmUtNSwtMS41IC0wLjQsLTIuNiAtMS4zLC0zLjMgLTAuOSwtMC43IC0yLjEsLTEuMSAtMy45LC0xLjEgbCAtNC42LDAgeiBtIDE0LjUsMCAwLDE1LjIgOS44LDAgMCwtMS43IC03LjcsMCAwLC01LjUgNy4yLDAgMCwtMS43IC03LjIsMCAwLC00LjUgNy41LDAgMCwtMS43IC05LjYsMCB6IG0gMTMuMiwwIDAsMTUuMiA5LjQsMCAwLC0xLjcgLTcuNCwwIDAsLTEzLjQgLTIsMCB6IG0gLTI1LjYsMS43IDIuNiwwIGMgMSwxLjRlLTUgMS43LDAuMiAyLjIsMC43IDAuNSwwLjQgMC44LDEuMSAwLjgsMiAtMTBlLTYsMC45IC0wLjMsMS42IC0wLjgsMiAtMC41LDAuNSAtMS4yLDAuNyAtMi4yLDAuNyBsIC0yLjYsMCAwLC01LjQgeiBtIDE2LDE0LjcgYyAtNC4zLDEuMWUtNSAtOC4zLDAuNCAtMTEuMiwxLjIgLTEuNCwwLjQgLTIuNiwwLjggLTMuNSwxLjMgLTAuNywwLjQgLTEuMiwwLjkgLTEuNCwxLjUgbCAtMC4xLDAgMCwwLjYgYyAtMy4xZS01LDAgMCwwIDAsMCBsIDAsMzEuMSAtMC4yLC0wLjcgYyAtMC4xLDAgLTEuMSwwLjEgLTIuNCwwIC0xLjIsLTAuMSAtMi43LC0wLjIgLTQuMiwtMC4zIC0xLjUsLTAuMSAtMi45LC0wLjIgLTQsLTAuMSAtMC42LDAgLTEuMSwwIC0xLjUsMC4xIC0wLjIsMCAtMC40LDAuMSAtMC42LDAuMiAtMC4yLDAuMSAtMC40LDAuMiAtMC42LDAuNSAtMC4zLDAuNCAtMC40LDAuOSAtMC4zLDEuNCAwLjEsMC41IDAuMywwLjggMC41LDEuMiAwLjUsMC43IDEuMiwxLjIgMS45LDEuNyAwLjcsMC41IDEuNCwxIDEuOSwxLjUgMC41LDAuNSAwLjcsMC45IDAuNiwxLjIgLTAsMC4xIC0wLDAuMiAtMC4yLDAuMyAtMC4yLDAuMiAtMC42LDAuMyAtMSwwLjUgLTAuOSwwLjMgLTIuMiwwLjUgLTMuNSwwLjcgLTEuMywwLjIgLTIuNywwLjMgLTMuNywwLjUgLTAuNSwwLjEgLTEsMC4yIC0xLjQsMC40IC0wLjIsMC4xIC0wLjQsMC4yIC0wLjYsMC4zIC0wLjIsMC4yIC0wLjQsMC40IC0wLjQsMC43IC0wLjEsMC45IDAuMywxLjcgMSwyLjMgMC43LDAuNiAxLjUsMS4xIDIuNiwxLjYgMi4xLDAuOSA0LjksMS43IDcuOSwyLjQgMi45LDAuNyA1LjksMS4yIDguMywxLjcgMi40LDAuNCA0LjQsMC44IDQuOCwwLjkgMiwwLjYgMy4zLDEuOCA0LjksMy4yIDEuNSwxLjMgMy4yLDIuOCA1LjgsMy41IDMsMC44IDYuMiwtMC42IDkuNCwtMiAzLjIsLTEuNCA2LjQsLTIuOCA5LjEsLTIuNSAwLjEsMCAxLDAuMiAxLjksMC41IDEsMC4zIDIuMiwwLjYgMy40LDAuOCAxLjIsMC4zIDIuNCwwLjUgMy41LDAuNiAxLjEsMC4xIDIsMC4yIDIuNywtMC41IDAuOCwtMC43IDEuMywtMS40IDEuNCwtMi4xIDAuMiwtMC44IC0wLC0xLjUgLTAuNCwtMi4yIC0wLjgsLTEuMyAtMi4yLC0yLjMgLTMuOSwtMy4yIC0xLjYsLTAuOSAtMy41LC0xLjggLTUsLTIuNiAtMS41LC0wLjggLTIuNywtMS42IC0zLC0xLjkgLTAuMiwtMC4zIC0wLjIsLTAuMiAtMC4xLC0wLjQgMC4xLC0wLjEgMC4zLC0wLjQgMC43LC0wLjcgMC44LC0wLjUgMi4yLC0xIDMuMiwtMS41IDAuNSwtMC4zIDEsLTAuNSAxLjMsLTEgMC4yLC0wLjMgMC4zLC0wLjcgMC4yLC0xIC0wLjEsLTAuNCAtMC4zLC0wLjYgLTAuNiwtMC44IC0wLjUsLTAuNCAtMS4yLC0wLjcgLTIuMywtMS4xIC0xLjEsLTAuMyAtMi42LC0wLjcgLTQuNiwtMS4xIGwgLTAuMywxLjMgMCwtMzUuNCAwLC0wLjYgLTAuMSwwIGMgLTAuMiwtMC42IC0wLjcsLTEuMSAtMS40LC0xLjUgLTAuOSwtMC41IC0yLjEsLTEgLTMuNSwtMS4zIC0yLjksLTAuNyAtNi44LC0xLjIgLTExLjIsLTEuMiB6IG0gMCwxLjIgYyA0LjMsLTEuMWUtNSA4LjEsMC40IDEwLjksMS4xIDEuNCwwLjQgMi41LDAuOCAzLjIsMS4yIDAuMywwLjIgMC40LDAuMyAwLjYsMC41IDAuMSwwLjEgMC4yLDAuMiAwLjMsMC4zIDAsMCAwLDAgMCwwLjEgMCwwIDAsMC4xIDAsMC4xIDAsMCAwLDAuMSAwLDAuMSAwLDAgLTAsMC4xIC0wLDAuMSAtMCwwIC0wLDAgLTAsMCAtMCwwIC0wLDAgLTAsMC4xIC0wLDAgLTAsMCAtMCwwLjEgLTAsMCAtMCwwIC0wLDAuMSAtMCwwIC0wLDAuMSAtMC4xLDAuMSAtMCwwLjEgLTAuMSwwLjEgLTAuMSwwLjIgLTAsMCAtMCwwIC0wLDAgLTAuMSwwLjEgLTAuMywwLjMgLTAuNiwwLjUgLTAuNywwLjQgLTEuOCwwLjggLTMuMiwxLjIgLTIuOCwwLjcgLTYuNiwxLjIgLTEwLjksMS4yIC00LjMsMS4xZS01IC04LjEsLTAuNCAtMTAuOSwtMS4xIC0xLjQsLTAuNCAtMi41LC0wLjggLTMuMiwtMS4yIC0wLjMsLTAuMiAtMC41LC0wLjMgLTAuNiwtMC41IC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAsLTAgLTAsLTAgLTAsLTAuMSAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAsLTAgLTAsLTAgLTAsLTAuMSAtMC4xLC0wLjEgLTAsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4yIDAsLTAgMCwtMC4xIDAsLTAuMSAwLjEsLTAuMiAwLjMsLTAuNiAwLjksLTAuOSAwLjcsLTAuNCAxLjgsLTAuOCAzLjIsLTEuMiAyLjgsLTAuNyA2LjYsLTEuMSAxMC45LC0xLjEgeiBtIDE1LDUuMyAwLDM0LjEgMCwwIDAsNS42IGMgMC4xLDAuMiAwLjIsMC4zIDAuMiwwLjQgMCwwLjIgLTAuMiwwLjYgLTAuOSwxLjEgLTAuNywwLjQgLTEuOCwwLjggLTMuMiwxLjIgLTIuOCwwLjcgLTYuNiwxLjEgLTEwLjksMS4xIC00LjMsMWUtNSAtOC4xLC0wLjQgLTEwLjksLTEuMSAtMS40LC0wLjQgLTIuNSwtMC44IC0zLjIsLTEuMiAtMC42LC0wLjQgLTAuOSwtMC43IC0wLjksLTEgbCAtMCwwIDAsLTAuMSAwLC0xLjkgYyAtMC4xLDAuMSAtMC4xLDAuMSAtMC4yLDAuMSBsIDAsLTM4LjQgYyAwLjEsMC4xIDAuMiwwLjEgMC4zLDAuMiAwLjksMC41IDIuMSwxIDMuNSwxLjMgMi45LDAuNyA2LjgsMS4yIDExLjIsMS4yIDQuMywtMS4yZS01IDguMywtMC41IDExLjIsLTEuMiAxLjQsLTAuNCAyLjYsLTAuOCAzLjUsLTEuMyAwLjEsLTAuMSAwLjIsLTAuMSAwLjMsLTAuMiB6IG0gLTE1LjIsNi4xIC0xNC42LDE0LjIgMTQuMiwxMy44IDAuOCwwIDE0LjIsLTEzLjggLTE0LjYsLTE0LjMgeiBtIC0xLjgsMi40IDAsMTEuNiAtMy4xLDAgMC4xLC04LjcgMywtMi45IHogbSAzLjYsMCBjIDAuNCwwLjMgMywyLjcgMywzIGwgMCw4LjUgLTMsMCAwLC0xMS42IHogbSAtOS43LDYgMCw1LjYgLTIuNSwwIDAsLTMuMSBjIDAsLTAuMyAyLjIsLTIuMyAyLjUsLTIuNSB6IG0gMTUuOCwwIDIuNiwyLjUgYyAtMC4xLDAuMyAtMC4xLC0wLjEgLTAuMSwwLjMgbCAwLDIuOCAtMi41LDAgMCwtNS42IHogbSAtMjEuNyw2IDI3LjUsMCAtMTMuOCwxMy4zIC0xMy43LC0xMy4zIHogbSAtMTIuOCw5LjMgYyAxLjEsLTAgMi41LDAgMy45LDAuMSAxLjQsMC4xIDIuOSwwLjIgNC4yLDAuMyAxLjEsMC4xIDEuOSwwLjEgMi42LC0wIGwgMCwxMCAwLDAuNiAwLjMsMCBjIDAuMiwwLjYgMC43LDEuMSAxLjQsMS41IDAuOSwwLjUgMi4xLDEgMy41LDEuMyAyLjksMC43IDYuOCwxLjIgMTEuMiwxLjIgNC4zLC0xZS01IDguMywtMC40IDExLjIsLTEuMiAxLjQsLTAuNCAyLjYsLTAuOCAzLjUsLTEuMyAwLjksLTAuNSAxLjUsLTEuMiAxLjUsLTIuMSAwLC0wLjMgLTAuMSwtMC41IC0wLjIsLTAuOCBsIDAsLTUuNiBjIDEuOSwwLjQgMy40LDAuOCA0LjQsMS4xIDAuOSwwLjMgMS4zLDAuNSAxLjYsMC43IC0wLjEsMC4xIC0wLjEsMC4xIC0wLjQsMC4zIC0wLjgsMC40IC0yLjIsMC45IC0zLjMsMS42IC0wLjUsMC4zIC0xLDAuNyAtMS4zLDEuMyAtMC4zLDAuNiAtMC4yLDEuNCAwLjIsMiAwLjcsMSAyLDEuNiAzLjUsMi40IDEuNiwwLjggMy40LDEuNiA0LjksMi41IDEuNSwwLjkgMi44LDEuOSAzLjMsMi43IDAuMiwwLjQgMC4zLDAuNyAwLjIsMSAtMC4xLDAuMyAtMC4zLDAuOCAtMC45LDEuMyAwLC0wIC0wLjYsMC4yIC0xLjUsMC4xIC0wLjksLTAuMSAtMi4xLC0wLjMgLTMuMywtMC42IC0xLjIsLTAuMyAtMi40LC0wLjYgLTMuMywtMC44IC0xLC0wLjMgLTEuNywtMC41IC0yLjIsLTAuNSAtMy4zLC0wLjMgLTYuNywxLjMgLTkuOSwyLjcgLTMuMiwxLjQgLTYuMSwyLjUgLTguNCwxLjkgLTIuMywtMC42IC0zLjcsLTEuOCAtNS4yLC0zLjIgLTEuNSwtMS4zIC0zLjEsLTIuOCAtNS41LC0zLjUgLTAuOCwtMC4yIC0yLjUsLTAuNSAtNSwtMC45IC0yLjQsLTAuNCAtNS40LC0xIC04LjMsLTEuNiAtMi45LC0wLjcgLTUuNiwtMS41IC03LjYsLTIuMyAtMSwtMC40IC0xLjcsLTAuOSAtMi4yLC0xLjMgLTAuMywtMC4zIC0wLjQsLTAuNSAtMC41LC0wLjcgMC4yLC0wLjEgMC42LC0wLjIgMS4xLC0wLjMgMSwtMC4yIDIuMywtMC4zIDMuNiwtMC41IDEuNCwtMC4yIDIuNywtMC40IDMuOSwtMC44IDAuNiwtMC4yIDEuMSwtMC40IDEuNSwtMC44IDAuNCwtMC4zIDAuOCwtMC44IDAuOCwtMS40IDAuMSwtMSAtMC40LC0xLjggLTEuMSwtMi41IC0wLjYsLTAuNyAtMS40LC0xLjIgLTIuMSwtMS43IC0wLjcsLTAuNSAtMS4zLC0xIC0xLjYsLTEuNCAtMC4xLC0wLjIgLTAuMiwtMC4zIC0wLjIsLTAuNCAtMCwtMC4xIDAsLTAuMSAwLjEsLTAuMiAwLC0wIDAuMSwtMCAwLjEsLTAgMC4zLC0wIDAuNywtMC4xIDEuMiwtMC4xIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDg1LjgsMTA0LjQgMTMuNywxMy4zIDEzLjgsLTEzLjMgeiBtIDIxLjcsLTAuNCBoIDIuNSB2IC0yLjggYyAwLC0wLjUgLTAsLTAuMSAwLjEsLTAuNCBsIC0yLjcsLTIuNCB2IDUuNiB6IG0gLTYuMSwwIGggMy4xIHYgLTguNSBjIDAsLTAuMyAtMi43LC0yLjggLTMuMSwtMy4xIHYgMTEuNiB6IG0gLTYuNiwtOC43IC0wLjEsOC43IDMuMSwwIC0wLC0xMS42IHogbSAtNS43LDUuNiB2IDMuMSBoIDIuNSB2IC01LjYgYyAtMC4zLDAuMiAtMi41LDIuMiAtMi41LDIuNSB6IE0gOTkuOCw4NS40IGMgLTQuMywxLjJlLTUgLTguMSwtMC40IC0xMC45LC0xLjEgLTEuNCwtMC40IC0yLjUsLTAuOCAtMy4yLC0xLjIgLTAuNywtMC40IC0wLjksLTAuOCAtMC45LC0xIDAsLTAuMiAwLjIsLTAuNiAwLjksLTEgMC43LC0wLjQgMS44LC0wLjggMy4yLC0xLjIgMi44LC0wLjcgNi42LC0xLjIgMTAuOSwtMS4yIDQuMywtMS4xZS01IDguMSwwLjQgMTAuOSwxLjEgMS40LDAuNCAyLjUsMC44IDMuMiwxLjIgMC43LDAuNCAwLjksMC44IDAuOSwxIDAsMC4yIC0wLjIsMC42IC0wLjksMSAtMC43LDAuNCAtMS44LDAuOCAtMy4yLDEuMiAtMi44LDAuNyAtNi42LDEuMiAtMTAuOSwxLjIgeiBtIC0xNSwtMS41IDAsMzguNCBjIDAuMSwtMC4xIDAuMSwtMC4xIDAuMiwtMC4xIGwgMCwxLjggMCwwLjEgMCwwIGMgMCwwLjIgMC4zLDAuNiAwLjksMC45IDAuNywwLjQgMS44LDAuOSAzLjIsMS4yIDIuOCwwLjcgNi42LDEuMiAxMC45LDEuMiA0LjMsLTFlLTUgOC4yLC0wLjUgMTAuOSwtMS4yIDEuNCwtMC40IDIuNCwtMC44IDMuMiwtMS4yIDAuNywtMC40IDAuOSwtMC44IDAuOSwtMSAwLC0wLjEgLTAsLTAuMiAtMC4yLC0wLjQgbCAwLC01LjYgLTAsMCAwLC0zNC4xIGMgLTAuMSwwLjEgLTAuMiwwLjEgLTAuMywwLjIgLTAuOSwwLjUgLTIuMSwxIC0zLjUsMS4zIC0yLjksMC43IC02LjgsMS4yIC0xMS4yLDEuMiAtNC4zLDEuMWUtNSAtOC4zLC0wLjQgLTExLjIsLTEuMiAtMS40LC0wLjQgLTIuNiwtMC44IC0zLjUsLTEuMyAtMC4xLC0wLjEgLTAuMiwtMC4xIC0wLjMsLTAuMiB6IG0gMTQuOCw2LjEgMTQuNiwxNC4zIC0xNC4yLDEzLjggLTAuOCwwIEwgODUsMTA0LjIgOTkuNiw5MCB6IG0gLTI2LjcsMjMuNyBjIDEuMSwtMCAyLjUsMCAzLjksMC4xIDEuNCwwLjEgMi45LDAuMiA0LjIsMC4zIDEuMSwwLjEgMS45LDAuMSAyLjYsLTAgbCAwLDEwIDAsMC42IDAuMywwIGMgMC4yLDAuNiAwLjcsMS4xIDEuNCwxLjUgMC45LDAuNSAyLjEsMSAzLjUsMS4zIDIuOSwwLjcgNi44LDEuMiAxMS4yLDEuMiA0LjMsLTFlLTUgOC4zLC0wLjQgMTEuMiwtMS4yIDEuNCwtMC40IDIuNiwtMC44IDMuNSwtMS4zIDAuOSwtMC41IDEuNSwtMS4yIDEuNSwtMi4xIDAsLTAuMyAtMC4xLC0wLjUgLTAuMiwtMC44IGwgMCwtNS42IGMgMS45LDAuNCAzLjQsMC44IDQuNCwxLjEgMC45LDAuMyAxLjMsMC41IDEuNiwwLjcgLTAuMSwwLjEgLTAuMSwwLjEgLTAuNCwwLjMgLTAuOCwwLjQgLTIuMiwwLjkgLTMuMywxLjYgLTAuNSwwLjMgLTEsMC43IC0xLjMsMS4zIC0wLjMsMC42IC0wLjIsMS40IDAuMiwyIDAuNywxIDIsMS42IDMuNSwyLjQgMS42LDAuOCAzLjQsMS42IDQuOSwyLjUgMS41LDAuOSAyLjgsMS45IDMuMywyLjcgMC4yLDAuNCAwLjMsMC43IDAuMiwxIC0wLjEsMC4zIC0wLjMsMC44IC0wLjksMS4zIDAsLTAgLTAuNiwwLjIgLTEuNSwwLjEgLTAuOSwtMC4xIC0yLjEsLTAuMyAtMy4zLC0wLjYgLTEuMiwtMC4zIC0yLjQsLTAuNiAtMy4zLC0wLjggLTEsLTAuMyAtMS43LC0wLjUgLTIuMiwtMC41IC0zLjMsLTAuMyAtNi43LDEuMyAtOS45LDIuNyAtMy4yLDEuNCAtNi4xLDIuNSAtOC40LDEuOSAtMi4zLC0wLjYgLTMuNywtMS44IC01LjIsLTMuMiAtMS41LC0xLjMgLTMuMSwtMi44IC01LjUsLTMuNSAtMC44LC0wLjIgLTIuNSwtMC41IC01LC0wLjkgLTIuNCwtMC40IC01LjQsLTEgLTguMywtMS42IC0yLjksLTAuNyAtNS42LC0xLjUgLTcuNiwtMi4zIC0xLC0wLjQgLTEuNywtMC45IC0yLjIsLTEuMyAtMC4zLC0wLjMgLTAuNCwtMC41IC0wLjUsLTAuNyAwLjIsLTAuMSAwLjYsLTAuMiAxLjEsLTAuMyAxLC0wLjIgMi4zLC0wLjMgMy42LC0wLjUgMS40LC0wLjIgMi43LC0wLjQgMy45LC0wLjggMC42LC0wLjIgMS4xLC0wLjQgMS41LC0wLjggMC40LC0wLjMgMC44LC0wLjggMC44LC0xLjQgMC4xLC0xIC0wLjQsLTEuOCAtMS4xLC0yLjUgLTAuNiwtMC43IC0xLjQsLTEuMiAtMi4xLC0xLjcgLTAuNywtMC41IC0xLjMsLTEgLTEuNiwtMS40IC0wLjEsLTAuMiAtMC4yLC0wLjMgLTAuMiwtMC40IC0wLC0wLjEgMCwtMC4xIDAuMSwtMC4yIDAsLTAgMC4xLC0wIDAuMSwtMCAwLjMsLTAgMC43LC0wLjEgMS4yLC0wLjEgelwifV0saVtcIkdSLklOLklDLkNPTExFR0UvVU5JVkVSU0lUWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk3LjQsMTA2LjkgaCAtMTQuOCB2IDMxLjcgaCAzMiB2IC0zMS43IEggOTkuOCBWIDk1LjEgYyAwLC0wLjYgNi41LC0zIDcuNSwtMy40IDEuMywtMC41IDYuOSwtMyA3LjksLTMgLTAuMywtMC40IC0xNC43LC02LjMgLTE1LjcsLTYuMyBoIC0yLjMgdiAyNC41IHogbSAyMy4zLC0zMC4xIC05LjYsMCAwLC0xNS4xIDIsMCAwLDEzLjMgNy42LDAgMCwxLjggTSAxMDYsNjMuNSBjIDAuNiwwLjcgMS4xLDEuNSAxLjQsMi41IDAuMywxIDAuNSwyLjEgMC41LDMuMyAtMWUtNSwxLjIgLTAuMiwyLjQgLTAuNSwzLjQgLTAuMywxIC0wLjgsMS44IC0xLjQsMi41IC0wLjYsMC43IC0xLjQsMS4yIC0yLjIsMS41IC0wLjgsMC4zIC0xLjgsMC41IC0yLjksMC41IC0xLjEsMCAtMiwtMC4yIC0yLjksLTAuNSAtMC45LC0wLjQgLTEuNiwtMC45IC0yLjIsLTEuNSAtMC42LC0wLjcgLTEuMSwtMS41IC0xLjQsLTIuNSAtMC4zLC0xIC0wLjUsLTIuMSAtMC41LC0zLjMgLTEwZS03LC0xLjIgMC4yLC0yLjMgMC41LC0zLjMgMC4zLC0xIDAuOCwtMS44IDEuNCwtMi41IDAuNiwtMC43IDEuMywtMS4yIDIuMiwtMS41IDAuOSwtMC40IDEuOSwtMC41IDIuOSwtMC41IDEuMSwxLjVlLTUgMi4xLDAuMiAyLjksMC41IDAuOSwwLjQgMS42LDAuOSAyLjIsMS41IG0gLTAuMiw1LjggYyAtMmUtNSwtMiAtMC40LC0zLjUgLTEuMywtNC41IC0wLjksLTEuMSAtMi4xLC0xLjYgLTMuNiwtMS42IC0xLjUsMS40ZS01IC0yLjcsMC41IC0zLjYsMS42IC0wLjksMS4xIC0xLjMsMi42IC0xLjMsNC41IC0zZS02LDIgMC40LDMuNSAxLjMsNC42IDAuOSwxIDIuMSwxLjYgMy42LDEuNiAxLjUsMmUtNiAyLjcsLTAuNSAzLjYsLTEuNiAwLjksLTEuMSAxLjMsLTIuNiAxLjMsLTQuNiBtIC0xNCw2LjUgYyAtMC40LDAuMiAtMC43LDAuMyAtMSwwLjUgLTAuMywwLjEgLTAuNywwLjMgLTEuMiwwLjQgLTAuNCwwLjEgLTAuOSwwLjIgLTEuNCwwLjMgLTAuNSwwLjEgLTEsMC4xIC0xLjYsMC4xIC0xLjEsMCAtMi4xLC0wLjIgLTMsLTAuNSAtMC45LC0wLjMgLTEuNywtMC44IC0yLjMsLTEuNSAtMC43LC0wLjYgLTEuMiwtMS41IC0xLjUsLTIuNCAtMC40LC0xIC0wLjUsLTIuMSAtMC41LC0zLjUgLTEwZS03LC0xLjIgMC4yLC0yLjQgMC41LC0zLjMgMC40LC0xIDAuOSwtMS44IDEuNSwtMi41IDAuNiwtMC43IDEuNCwtMS4yIDIuMywtMS41IDAuOSwtMC4zIDEuOSwtMC41IDMsLTAuNSAwLjgsMS41ZS01IDEuNiwwLjEgMi40LDAuMyAwLjgsMC4yIDEuNywwLjUgMi43LDEgbCAwLDIuNCAtMC4yLDAgYyAtMC44LC0wLjcgLTEuNywtMS4yIC0yLjUsLTEuNSAtMC44LC0wLjMgLTEuNywtMC41IC0yLjYsLTAuNSAtMC44LDEuNGUtNSAtMS41LDAuMSAtMi4xLDAuNCAtMC42LDAuMiAtMS4yLDAuNiAtMS42LDEuMSAtMC41LDAuNSAtMC44LDEuMiAtMS4xLDEuOSAtMC4zLDAuOCAtMC40LDEuNyAtMC40LDIuNyAtM2UtNiwxLjEgMC4xLDIgMC40LDIuNyAwLjMsMC44IDAuNywxLjQgMS4xLDEuOSAwLjUsMC41IDEsMC45IDEuNywxLjEgMC42LDAuMiAxLjMsMC40IDIsMC40IDEsMmUtNiAxLjksLTAuMiAyLjcsLTAuNSAwLjgsLTAuMyAxLjYsLTAuOCAyLjQsLTEuNSBsIDAuMSwwIDAsMi40XCJ9XSxpW1wiR1IuSU4uSUMuU0NIT09MXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gOTguNCw5Ni40IEggODMuNyB2IDMxLjcgaCAzMiBWIDk2LjQgSCAxMDAuOSBWIDg0LjYgYyAwLC0wLjYgNi41LC0zIDcuNSwtMy40IDEuMywtMC41IDYuOSwtMyA3LjksLTMgLTAuMywtMC40IC0xNC43LC02LjMgLTE1LjcsLTYuMyBIIDk4LjQgViA5Ni40IHpcIn1dLGlbXCJHUi5JTi5JQy5SRVNUIFNUT1BcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDguNCw4OS42IHYgLTAuNCBsIDAuNiwtMC42IC0wLjQsMS40IC0zLjgsMTMuNCAtMC4yLDAuOCAtMC40LDAuNiAwLDAuOSAtMiw2LjcgNy4yLDAgdiAxOS43IGggNS4yIHYgLTE5LjcgaCAyLjcgdiAxOS43IGggNS4yIHYgLTE5LjcgaCA3LjEgbCAtMS4zLC01LjMgLTAuMiwtMC44IC00LjgsLTE2LjQgLTAuNSwtMS40IDAuNiwwLjcgMC4xLDAuNCBjIDIuMSwyLjQgNS40LDE0LjIgOC42LDE0LjIgaCAwLjQgYyAxLjIsMCAyLjEsLTEuMSAyLjEsLTIuMyB2IC0wLjYgYyAwLC0wLjUgLTQuOCwtMTAgLTUuMywtMTEuNiAtMC43LC0yIC0xLjcsLTQuMiAtMi42LC02IC0xLC0yLjEgLTEuMiwtMy44IC00LjYsLTMuOCBoIC0xMi40IGMgLTMuNCwwIC0zLjYsMS44IC00LjcsMy45IC0wLjksMS43IC0xLjksNCAtMi41LDUuOSAtMC42LDEuNiAtNS4yLDExLjEgLTUuMiwxMS42IHYgMC42IGMgMCwxLjMgMC42LDIuMyAxLjksMi4zIGggMC44IGMgMi40LDAgNi40LC0xMi4yIDguMiwtMTQuMiB6IG0gMC4yLDAuNCAwLjQsLTEuNSAtMC42LDAuNiAwLDAuNCB6IG0gMTUuMSwtMC40IC0wLjEsLTAuNCAtMC42LC0wLjYgMC41LDEuNCB6IE0gNjkuNiw4OC44IGggMi4zIHYgNDMuNiBoIDYuMSB2IC0yNS42IGggMi43IHYgMjUuNiBoIDUuOSB2IC00My42IGggMi4zIHYgMTYuNCBoIDQuNiBWIDg2LjMgbCAtMC4zLC0yLjMgaCAtMC40IGMgMCwtMi4zIC0xLjcsLTQuNCAtNCwtNC40IEggNjkuNiBjIC0zLDAgLTQuNCwzLjQgLTQuNCw2LjUgdiAxOS4xIGggNC40IFYgODguOCB6IE0gMTEwLjcsNzIuOCBjIDAsMi43IDIuNCw1LjQgNSw1LjQgaCAwLjIgYyAxLjYsMCAyLjgsLTAuNiAzLjYsLTEuNCAwLjUsLTAuNCAxLjgsLTIuNCAxLjgsLTMgdiAtMS42IGMgMCwtMi40IC0yLjgsLTQuNiAtNS40LC00LjYgLTMsLTAgLTUuMiwyLjQgLTUuMiw1LjIgeiBtIC0zNi43LDEuMSBjIDAsMiAyLjgsNC40IDUsNC40IGggMC4yIGMgNC4yLDAgNC4zLC0zLjQgNS4yLC0zLjggViA3MS42IGMgMCwtMS44IC0yLjgsLTQgLTUuMiwtNCAtMi4zLDAgLTUuMiwyLjIgLTUuMiw0IHYgMi4zIHpcIn1dLGlbXCJHUi5JTi5JQy5DT05UUk9MIFZBTFZFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE0LDExNC41IGggMTUuNyB2IDQgaCA5LjEgdiAtMjMuNiBoIC05LjEgViA5OC44IEggMTE0LjQgYyAtMC40LDAgLTIuNiwtMi42IC0yLjYsLTMuNCB2IC01LjYgaCAtOS45IHYgLTguMiBoIDEyLjMgdiAtMy42IGggLTI4LjIgdiAzLjYgaCAxMi4xIHYgOC4zIEggODkuMiB2IDYuNiBsIC0wLjIsLTAuMiAtMS44LDIuNCAtMTcuMiwwLjEgViA5NSBIIDYxLjIgdiAyMy42IGggOC45IHYgLTQgSCA4NyBjIDAuNCwwIDIsMi40IDIuNCwyLjggMC41LDAuNiAyLjIsMS45IDIuOSwyLjQgMS45LDEuMiA0LjcsMi40IDcuOCwyLjQgaCAwLjYgYyAzLjUsMCA1LjgsLTEgOC4xLC0yLjQgMS40LC0wLjggNC44LC0zLjggNS4yLC01LjMgelwifV0saVtcIkdSLklOLklDLkRBTVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDY4LjMsODkuMSBjIDIuMywwIDMuMiwtMS43IDQuNiwtMi42IDEuMSwwLjggMi4yLDIuNiA0LjQsMi42IGggMC4yIGMgMi42LDAgMy4zLC0xLjcgNC43LC0yLjYgMS40LDAuOSAyLjIsMi42IDQuNywyLjYgMi40LDAgMy4zLC0xLjggNC42LC0yLjYgMC42LDAuNCAxLjEsMS4xIDEuOSwxLjYgMC40LDAuMiAyLjIsMC45IDIuMiwxLjMgdiA2LjggQyA5NC4xLDk1LjggOTEuOCw5My44IDkxLjUsOTIuNiBoIC0wLjMgYyAtMC4zLDEuMSAtMywzLjYgLTQuNSwzLjYgLTEuNSwwIC00LjEsLTIuNiAtNC40LC0zLjggLTEsMC42IC0yLjYsMy44IC00LjYsMy44IGggLTAuNCBjIC0xLjIsMCAtNCwtMi43IC00LjIsLTMuNyAtMC44LDAuMiAtMi42LDMuNyAtNC43LDMuNyBoIC0wLjMgYyAtMS4xLDAgLTEuNywtMC43IC0yLjQsLTEuMiBsIC0xLDEuMiBjIDEsMC43IDEuNiwxLjggMy4yLDEuOCBoIDAuNCBjIDIuMywwIDMuMSwtMS44IDQuNiwtMi44IDAuNywxLjEgMi44LDIuOCA0LjcsMi44IDIuMywwIDMuMywtMiA0LjYsLTIuOCAxLjIsMC44IDIuNiwyLjggNC43LDIuOCAyLjEsMCAzLjQsLTIuMSA0LjcsLTIuOCAwLjcsMSAyLjYsMi40IDQsMi43IHYgNyBjIC0xLjQsLTAuMSAtMy40LC0yLjQgLTQsLTMuNSAtMS4xLDAuNyAtMi41LDMuNiAtNC43LDMuNiBoIC0wLjEgYyAtMi4zLDAgLTQuMSwtMy41IC00LjcsLTMuNyAtMC4zLDEgLTMsMy43IC00LjEsMy43IGggLTAuNCBjIC0yLjIsMCAtMy42LC0yLjkgLTQuNywtMy43IC0wLjYsMSAtMi44LDMuNyAtNC4xLDMuNyBIIDY3LjcgYyAtMC43LDAgLTEuNywtMSAtMi4yLC0xLjMgbCAtMC45LDEuNSBjIDEuMSwwLjcgMS43LDEuNiAzLjYsMS42IDIuNywwIDMuMSwtMS44IDQuNywtMi42IDEuNCwwLjkgMiwyLjYgNC43LDIuNiAyLjIsMCAzLjQsLTEuOCA0LjYsLTIuNiAxLjQsMSAyLjUsMi42IDQuOCwyLjYgMS44LDAgMy40LC0yIDQuNCwtMi42IDAuOSwwLjUgMSwxIDIsMS42IDAuNCwwLjMgMi4yLDAuNyAyLjIsMS4yIHYgNi44IGMgLTEuNCwtMC4zIC0zLjYsLTIuMiAtNCwtMy41IC0xLjEsMC43IC0yLjUsMy44IC00LjgsMy44IC0xLjQsMCAtNC4xLC0yLjYgLTQuNCwtMy44IC0xLjIsMC44IC0yLjYsMy44IC00LjgsMy44IC0yLDAgLTMuNywtMy4yIC00LjcsLTMuOCAtMC4zLDEgLTMsMy44IC00LjMsMy44IGggLTAuNiBjIC0wLjgsMCAtMS44LC0xIC0yLjQsLTEuMyBsIC0wLjksMS4zIGMgMS4xLDAuNyAxLjgsMS44IDMuNiwxLjggMi4yLDAgMy4zLC0xLjggNC43LC0yLjggMS4yLDAuOCAyLjYsMi45IDQuNywyLjggMi4zLC0wLjEgMy4zLC0xLjkgNC42LC0yLjggMS4yLDAuOCAyLjcsMi44IDQuNywyLjggMS45LDAgMy40LC0yIDQuNiwtMi44IDEuNiwxIDEuOCwyIDQuMSwyLjUgdiA1IGggMTcgbCAtMS40LC01LjIgYyAwLjgsMC4yIDEsMC42IDIuMiwwLjYgMiwwIDMuMywtMS45IDQuNiwtMi44IDEuMywwLjkgMi40LDIuOCA0LjcsMi44IDEuNiwwIDMuOCwtMS44IDQuNCwtMi44IDEuMywwLjMgMi41LDIuOCA1LjEsMi44IDEuMiwwIDIuNiwtMS40IDMuNCwtMS44IGwgLTEsLTEuMyBjIC0wLjcsMC40IC0xLjUsMS4zIC0yLjYsMS4zIC0yLjEsMCAtMy43LC0zLjEgLTQuNywtMy44IC0wLjcsMS40IC0yLjcsMy44IC00LjcsMy44IC0xLjMsMCAtNC4zLC0yLjYgLTQuNCwtMy44IC0xLDAuNyAtMi42LDMuOCAtNC43LDMuOCBoIC0wLjIgYyAtMS4xLDAgLTIuMiwtMC45IC0yLjcsLTEuNSAtMC40LC0wLjQgLTAuOCwtMi41IC0xLjEsLTMuMiAtMC40LC0xIC0xLjgsLTUuNiAtMS44LC02LjYgbCAtMC4zLC0wLjQgMCwtMC42IC0wLjMsLTAuNCB2IC0wLjYgbCAtMC4zLC0wLjQgLTUuMywtMTguNiAwLjIsLTAgLTAuMywtMC40IDAsLTAuNiBjIC0wLjIsLTAuMyAtMC4zLC0wLjMgLTAuMywtMC42IHYgLTAuNCBoIC01LjYgdiA3LjggYyAtMS40LC0wLjcgLTEuMiwtMC41IC0yLjQsLTEuNiAtMC4xLC0wLjEgLTEsLTAuOSAtMSwtMSAtMC40LC0wLjUgLTAuMSwtMC45IC0wLjgsLTEuMSAtMC4xLDEuMiAtMy4xLDMuOCAtNC4zLDMuOCBoIC0wLjIgYyAtMi41LDAgLTQuMiwtMy42IC00LjgsLTMuOCAtMC4zLDEuMSAtMywzLjggLTQuMiwzLjggaCAtMC40IGMgLTEuMiwwIC00LjIsLTIuNyAtNC4yLC0zLjggLTAuNSwwLjEgLTIuOCwzLjggLTQuNCwzLjggSCA2Ny43IGMgLTAuNywwIC0xLjcsLTEgLTIuMiwtMS4zIGwgLTAuOSwxLjMgYyAxLDAuNyAxLjYsMS42IDMuNCwxLjYgaCAwLjMgdiAwIHpcIn1dLGlbXCJHUi5JTi5JQy5ESVNDSEFSR0UgT1VURkFMTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDYzLjIsMTExLjQgdiAxMy40IGggNzMuNiBWIDExMS43IGwgLTMuMSwwLjUgLTEuMSwtMC4xIGMgLTIuMiwwIC0zLjYsLTAuNyAtNC45LC0xLjYgLTAuNiwtMC40IC0xLjEsLTEuMSAtMS41LC0xLjggLTAuNCwtMC42IC0wLjIsLTIuMSAtMSwtMi4xIGggLTAuNCBjIC0wLjgsMCAtMC43LDEuNiAtMS4yLDIuMiAtMC40LDAuNiAtMC45LDEuMiAtMS42LDEuNyAtMS4zLDEgLTMsMS42IC01LjEsMS42IGggLTAuOSBjIC0zLjIsMCAtNi44LC0yLjEgLTYuOCwtNS4xIC0wLjMsLTAuMiAtMC40LC0wLjQgLTAuOCwtMC40IGggLTAuMyBjIC0wLjcsMCAtMC44LDEuNSAtMS4xLDIuMSAtMC40LDAuNiAtMSwxLjQgLTEuNSwxLjggLTEuMiwxIC0yLjcsMS42IC00LjgsMS42IGggLTAuOSBjIC0zLjUsMCAtNy4zLC0yLjEgLTcuMywtNS40IC0wLjQsLTAuMSAtMC40LC0wLjIgLTAuOCwtMC4yIGggLTAuMyBjIC0wLjYsMCAtMC42LDEuNSAtMS4xLDIuMiAtMC41LDAuOCAtMC43LDEuMSAtMS41LDEuNyAtMS4zLDEgLTIuNywxLjYgLTQuOCwxLjYgSCA4Mi45IGMgLTMuNSwwIC02LjcsLTIuMiAtNywtNS40IC0wLjMsLTAuMSAtMC40LC0wLjIgLTAuOCwtMC4yIGggLTAuMSBjIC0wLjcsMCAtMC44LDEuNSAtMS4yLDIuMiAtMC40LDAuNiAtMC45LDEuMiAtMS42LDEuNyAtMS40LDEgLTIuNywxLjYgLTUsMS42IGggLTEgYyAtMS4yLDAgLTIuMiwtMC40IC0zLC0wLjggbCAwLDAgeiBtIDAsLTIxLjYgMTkuNSwwIDAsMS4yIDIuNywwIDAsLTE1LjggLTIuNywwIDAsMS4yIC0xOS41LDAgeiBNIDg5LjcsODAuOSB2IDAuMSBjIDguMSwwIDE2LjIsMS4yIDIwLjYsNC45IDIuOCwyLjQgMy4xLDQuNSAzLjEsOS42IDAsNC4xIDAuNSw4LjMgNC41LDguMyBoIDAuOCBjIDEuNywwIDIuOCwtMi42IDIuOCwtNC4zIHYgLTAuOSBjIDAsLTUuMSAtMy4zLC0xMC43IC01LjksLTEzLjMgLTEuNiwtMS42IC0zLjYsLTMgLTYuMSwtMy42IC0yLjIsLTAuNSAtNiwtMS4xIC04LjYsLTEuMSBsIC0xLjgsLTAuMSAtOS40LDAuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuR1JPVU5EIFdBVEVSIFdFTExcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTTg2LDY0TDg2LDcwTDc1LDExMEw4MSwxMTBMOTIsNzBMOTksNzBMOTksMTMwTDg2LDEzMEw4NiwxNDBMMTIwLDE0MEwxMjAsMTMwTDExMCwxMzBMMTEwLDg5TDEyMCw4OUwxMjAsOTNMMTMwLDkzTDEzMCw4N0MxMzAsODIuNjMxIDEyNS41NTEsODMgMTI1LjU1MSw4M0wxMTAsODNMMTEwLDcwTDExMy43NzQsNzBMMTEzLjc3NCw2NEw4Niw2NFpcIn1dLGlbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlMgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDkuNywxMTYuNiA0LjEsMTMuNCAtMC4yLDAuMSAtMTIuMiwtOC40IDguMywtNS4yIHogbSAtMTkuNywwIDgsNS4xIC0xMi4xLDguNCA0LjEsLTEzLjYgeiBtIDkuOCwtOS44IDguOCw4LjIgYyAtMS43LDAuNSAtOC4xLDUuNiAtOC44LDUuNiAtMC4yLDAgLTguMiwtNS40IC04LjYsLTUuOCBsIDguNSwtOC4xIHogbSA1LjMsLTQuOCAzLjEsOS44IC02LjksLTYuNCAzLjcsLTMuNCB6IG0gLTEwLjUsMC4xIDMuOCwzLjMgLTYuOSw2LjQgMy4xLC05LjcgeiBtIDIuMSwtMSA2LjQsLTAgLTMuMiwzLjIgLTMuMiwtMy4yIHogTSA5OS4yLDg0LjggQyA5OS4xLDg1LjQgOTksODUuNSA5OSw4Ni4xIHYgMiBoIC0zIGMgLTAuNSwwIC0wLjgsMC4zIC0wLjgsMC44IDAsMC41IDAuMSwwLjUgMC4yLDEgMC40LDAuMSAwLjQsMC4yIDEsMC4yIGggMi42IHYgMi44IGggLTQuNSBjIC0wLjYsMCAtMS4yLDAuMiAtMS4yLDAuOCAwLDAuNSAwLjMsMC44IDAuOCwwLjggaCA0LjkgdiA0LjkgaCAtNC41IGMgLTAuNSwwIC0wLjUsMC4xIC0wLjksMC4yIGwgLTIuNSw3LjkgLTEsMy4yIC00LjEsMTMuMyAtMS4xLDMuMSBjIDAsMiAtMS40LDMuNSAtMS40LDUuNSAwLDAuNCAwLjEsMC4yIDAuMiwwLjggaCAwLjUgYyAwLjYsMCAxNS4xLC0xMC4zIDE1LjQsLTEwLjMgMC42LDAgMTQuMiw5LjQgMTUuOCwxMC41IDAuNCwtMC4yIDEsLTAuNCAxLC0xIHYgLTAuNiBjIDAsLTAgLTEuNSwtNC40IC0xLjcsLTUgLTAuNCwtMS4xIC0xLjQsLTQuMyAtMS41LC01LjIgbCAtMSwtMy4yIC00LjEsLTEzLjIgLTAuOSwtMy40IGMgLTEsLTAuNCAtMC4zLC0yLjYgLTEuNiwtMi42IGggLTQuOCB2IC01IGggNC44IGMgMC41LDAgMC44LC0wLjMgMC44LC0wLjggMCwtMC41IC0wLjMsLTAuOCAtMC44LC0wLjggSCAxMDAuOCBWIDkwLjEgaCAyLjQgYyAwLjcsMCAxLjQsLTAuNCAxLjQsLTEgdiAtMC4yIGMgMCwtMC41IC0wLjMsLTAuOCAtMC44LC0wLjggaCAtMi45IHYgLTIuNiBjIDAsLTAuNCAtMC42LC0xIC0wLjgsLTEgLTAsLTAgLTAuNywwLjEgLTAuOCwwLjIgeiBtIDYuNywtMTUuNyBjIDcsMS42IDEwLjksNC42IDE1LjEsOC45IDMsMyA3LjMsMTEgNy4zLDE2LjkgdiA0IGMgMCwyLjEgLTEuNSw3LjcgLTIuMiw5IC0wLjcsMS4xIC0xLjIsMi40IC0xLjksMy42IC0wLjMsMC40IC0yLjQsMy4zIC0yLjQsMy40IDAsMC43IDEsMS42IDEuMiwyLjYgMS43LC0wLjQgNC44LC02LjMgNS43LC04LjIgMS4yLC0yLjUgMi43LC03LjggMi43LC0xMS40IFYgOTQuMyBjIDAsLTAuMSAtMC45LC00LjkgLTEsLTUuNSAtMC4zLC0wLjkgLTEuNCwtMy43IC0xLjgsLTQuOCAtMC45LC0yLjIgLTMuNywtNi40IC01LjIsLTggLTMuNiwtMy42IC0xMC42LC05LjIgLTE2LjksLTkuNyBsIC0wLjQsMi44IHogbSAtMS42LDEwLjcgYyA2LDAuNSAxMy4zLDkuMiAxMy4zLDE2LjEgdiAyLjIgYyAwLDEuNSAtMS40LDUuNSAtMS40LDUuNSAwLDAuMiAxLjIsMi45IDEuNCwzLjIgbCAwLjIsMC4xIDEuNiwtMy40IDAuMSwtMC42IDAuNywtNS45IDAuMiwtMC40IC0xLC01LjkgYyAtMC43LC0wLjMgLTAuNiwtMS40IC0xLjEsLTIuMiAtMC40LC0wLjggLTAuOCwtMS42IC0xLjMsLTIuMyAtMS4xLC0xLjYgLTEuOCwtMi42IC0zLjIsLTMuOSAtMi4yLC0yLjIgLTUuOCwtNC4yIC05LjIsLTUgbCAtMC4zLDIuOCB6IE0gNjguNyw5NS4yIHYgNS4xIGMgMCw0LjIgNS40LDE2LjMgNy45LDE3IDAuMSwtMC41IDEsLTIuMiAxLC0yLjYgMCwwIC0yLjEsLTIuOSAtMi4zLC0zLjQgLTAuNywtMS4zIC0xLjMsLTIuNCAtMS45LC0zLjggLTEsLTIuNiAtMS44LC02IC0xLjgsLTkuNiB2IC0yLjQgYyAwLC04IDMuMywtMTIuOSA2LjksLTE3LjUgMS40LC0xLjggNC43LC00LjQgNi43LC01LjYgMS40LC0wLjggMi41LC0xLjQgNC4xLC0yLjEgMC41LC0wLjIgNC41LC0xLjMgNC41LC0xLjYgbCAtMC4yLC0yLjYgYyAtMi40LDAuMSAtOCwyLjYgLTkuNiwzLjcgLTMuMiwxLjkgLTQuOCwzLjYgLTcuMyw2LjEgLTMuNiwzLjYgLTcuOCwxMiAtNy44LDE5LjEgbCAwLDAgeiBtIDEwLjcsMCB2IDIuOSBjIDAsMS45IDAuMiwzLjEgMC44LDQuNSAwLjIsMC40IDEuNSw0IDEuNSw0IGwgMC40LC0wIDEuNSwtMi45IGMgLTAuOSwtMS4yIC0xLjQsLTQgLTEuNCwtNi4yIHYgLTEuOCBjIDAsLTMuNyAyLjMsLTguMyA0LjIsLTEwLjMgMS44LC0xLjggNS45LC01LjUgOS4xLC01LjYgTCA5NSw3Ny4xIEMgODgsNzcuNiA3OS40LDg3LjMgNzkuNCw5NS4yIHpcIn1dLGlbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlMgVE9XRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDIuNSwxMTkuMiAxMiwtOCAyLjgsOS4yIDEuMyw0IDIuMSw2LjkgLTE4LjIsLTEyIHogbSAtMjMsMTIgMy40LC0xMS43IDIsLTUuOSAwLjgsLTIuNiAxMS45LDguMiAtMTgsMTIgeiBtIDIwLjQsLTM0LjYgMTMsMTIuMiBjIC0xLjUsMSAtMTIuMyw4LjUgLTEzLjEsOC41IC0wLjEsMCAtMTEuNiwtNy43IC0xMi43LC04LjUgTCA5OS45LDk2LjYgeiBtIDcuNywtNy4xIDAuMiwwLjIgMS44LDUuNyAyLjUsOC43IC0xMC4xLC05LjMgNS42LC01LjIgMCwwIHogbSAtMTUuNSwwLjYgdiAtMC42IGwgMC40LDAuMiA1LjQsNSAtMTAsOS40IDIuNiwtOSAxLjYsLTUgeiBtIDIuOSwtMS43IDkuOCwtMCAtNSw0LjQgLTQuOCwtNC40IHogbSAzLjYsLTIzLjEgdiAzLjYgaCAtNC40IGMgLTAuNSwwIC0xLDAuNiAtMSwxIHYgMC42IGMgMCwwLjcgMC44LDEgMS41LDEgaCA0IHYgNC4yIGggLTcuMiBjIC0wLjUsMCAtMSwwLjYgLTEsMSB2IDAuMiBjIDAsMSAwLjUsMS41IDEuNSwxLjUgaCA2LjggdiA3IGggLTYuOCBjIC0wLjgsMCAtMSwwLjMgLTEuMywwLjcgbCAtMC42LDIgLTQuOSwxNS42IC0zLDkuNiAtMy4xLDkuNCAtMC4xLDAuOCAtMi45LDguNyAtMC4xLDAuOCAtMC41LDIuMiBjIDEsMC4yIDAuNSwwLjYgMS4zLDAuNiBoIDAuMiBjIDAuOCwwIDIwLjEsLTEzLjcgMjMuMSwtMTUuMiAyLjUsMS43IDIyLjQsMTUuMiAyMy41LDE1LjIgMC42LDAgMSwtMC43IDEsLTEuMyAwLC0wLjEgLTEuNCwtNCAtMS41LC00LjIgbCAtMC4xLC0wLjggLTMuMSwtOS43IC0yLjksLTkuMyAtNC43LC0xNS43IGMgLTAuNiwtMC44IC0xLjQsLTMuOCAtMS44LC01IC0wLjYsLTEuOCAtMC41LC00LjMgLTIuNSwtNC4zIGggLTYuOCB2IC03IGggNy4yIGMgMC41LDAgMSwtMC42IDEsLTEgdiAtMC40IGMgMCwtMC42IC0wLjIsLTEuMyAtMC44LC0xLjMgaCAtNy40IHYgLTQuMiBoIDQgYyAwLjcsMCAxLjUsLTAuNCAxLjUsLTEgdiAtMC42IGMgMCwtMC43IC0wLjgsLTEgLTEuNSwtMSBoIC00IHYgLTQgYyAwLC0wLjYgLTAuNywtMSAtMS4zLC0xIC0wLjgsLTAgLTEuMywwLjYgLTEuMywxLjQgbCAwLDAgeiBtIC02LjYsMjQuOCAwLjQsLTAuNCAtMC40LC0wLjIgelwifV0saVtcIkdSLklOLklDLkFJUiBUUkFGRklDIENPTlRST0wgRkFDSUxJVFlcIl09YShcIkFUQ1wiKSxpW1wiR1IuSU4uSUMuUFJPUEFORSBGQUNJTElUWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk4LjcsNzMuMSB2IDAuMiBjIDAsMSAwLjUsMS41IDEuNSwxLjUgMC41LDAgMS4xLC0wLjYgMS4xLC0xLjEgMCwtMC44IC0wLjIsLTAuOCAtMC4yLC0xLjUgLTAuNSwtMC4xIC0wLjUsLTAuMiAtMS4xLC0wLjIgaCAtMC4yIGMgLTAuNSwwIC0xLjEsMC42IC0xLjEsMS4xIHogbSAtMTIuNiw1OC41IGggMjguNCB2IDMuMyBoIC0yOC40IHYgLTMuMyB6IE0gNzUuOCwxMTkgaCA0OC41IHYgMy4zIGMgMCwyIC04LjgsNy44IC05LjgsNy44IEggODUuOCBjIC0xLDAgLTEwLC01LjggLTEwLC03LjYgdiAtMy41IGwgMCwwIHogbSAwLC0yNy41IGMgMCwtMS4xIDcuMiwtNS44IDguNSwtNi42IDIuNiwtMS41IDcuNCwtMy43IDExLjQsLTMuNyBoIDguNSBjIDQuMSwwIDkuMSwyIDExLjYsMy43IDEuMywwLjkgOC41LDUuNCA4LjUsNi42IHYgNC4yIEggNzUuOCBWIDkxLjUgbCAwLDAgeiBNIDk4LjIsNzcuMSBjIDAuNywwIDAuOCwwLjIgMS41LDAuMiBoIDAuNCBjIDAuOCwwIDAuOCwtMC4yIDEuNSwtMC4yIHYgMS44IGwgMS4yLDAuOCAtNS41LDAgYyAwLjMsLTAuNSAwLjksLTAuOCAwLjksLTEuMyBsIC0wLC0xLjMgMCwwIHogbSAtMS4xLC00IGMgMCwtMS40IDEuNCwtMi40IDIuOCwtMi40IDEuMywwIDIuOCwwLjkgMi44LDIgdiAxLjEgYyAwLDEuNCAtMS42LDIuNCAtMywyLjQgLTEsMCAtMi42LC0xLjIgLTIuNiwtMi40IHYgLTAuNyBoIC0wIHogbSAxMi4yLC04LjEgaCAzLjUgdiAzLjUgaCAtMS44IHYgNi44IGMgMC43LDAgMi40LDAuNiAyLjQsMS4zIHYgMy43IEggMTA5LjQgViA2NS4xIHogbSAtMjIuNywwIGggNC4yIFYgODAuMyBIIDg1LjggdiAtNC4xIGMgMC44LC0wLjIgMy4xLC0wLjggMy4xLC0xLjUgdiAtNi4xIGggLTIuMiB2IC0zLjUgeiBtIDUuNywwIGggMTUuNSB2IDE1LjMgYyAtMS42LC0wLjQgLTQuOCwtMC45IC00LjgsLTIuNiB2IC0wLjkgYyAwLC0xLjUgMC45LC0yLjEgMC45LC0yLjYgdiAtMS4xIGMgMCwtMy4yIC0zLC0zLjIgLTMuMywtNC40IGggNC4yIHYgLTEuNSBoIC05LjYgdiAxLjUgaCA0LjIgdiAwLjYgYyAtMS45LDAuMSAtMy4xLDEuOSAtMy4xLDQgdiAwLjYgYyAwLDEgMC45LDIgMC45LDIuNCB2IDEuMyBjIDAsMS40IC0zLjQsMi4zIC00LjgsMi42IFYgNjUuMSBsIDAsMCB6IG0gLTcuMiw0LjggaCAyLjIgdiA0IGMgMCwwLjggLTIuMSwxLjIgLTIuOCwxLjMgdiA2LjggaCAzIGMgLTAuNiwwLjQgLTIuNywxLjIgLTMuNiwxLjggLTEuMiwwLjcgLTIuMiwxLjQgLTMuNCwyLjEgLTAuOSwwLjYgLTYuMSw0LjcgLTYuMyw0LjggdiAzMS42IGMgMCwxLjkgMy4yLDQuNCA0LjUsNS4zIDEsMC42IDUuOCwzLjMgNS44LDQuMSB2IDQuOCBoIDMxLjIgdiAtNC44IGMgMCwtMS42IDEwLC00LjYgMTAsLTEwIFYgOTEuMSBjIDAsLTAuOSAtNSwtNC40IC02LC01LjEgLTEuMiwtMC44IC0yLjEsLTEuNCAtMy4zLC0yLjEgLTAuOSwtMC42IC0zLjIsLTEuNCAtMy43LC0xLjkgaCAyLjQgdiAtNi44IGMgLTAuNywtMC4yIC0yLjYsLTAuNSAtMi42LC0xLjMgdiAtNCBoIDIgViA2My41IEggODUuMiB2IDYuMyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTQuNCwxMzQuOSAwLC0zLjMgLTI4LjQsMCAwLDMuMyB6IE0gNzUuOCwxMjIuNSBjIDAsMS45IDksNy42IDEwLDcuNiBoIDI4LjYgYyAxLDAgOS44LC01LjkgOS44LC03LjggdiAtMy4zIEggNzUuOCB2IDMuNSBsIDAsMCB6IG0gMCwtMzEgdiA0LjIgaCA0OC41IFYgOTEuNSBjIDAsLTEuMiAtNy4yLC01LjcgLTguNSwtNi42IC0yLjUsLTEuNyAtNy41LC0zLjcgLTExLjYsLTMuNyBoIC04LjUgYyAtMy45LDAgLTguOCwyLjIgLTExLjQsMy43IC0xLjMsMC44IC04LjUsNS40IC04LjUsNi42IGwgMCwwIHogTSAxMDkuNCw4MC4zIGggNC4yIHYgLTMuNyBjIDAsLTAuOCAtMS43LC0xLjIgLTIuNCwtMS4zIHYgLTYuOCBoIDEuOCBWIDY1LjEgSCAxMDkuNCBWIDgwLjMgeiBNIDg2LjcsNjguNiBoIDIuMiB2IDYuMSBjIDAsMC44IC0yLjMsMS40IC0zLDEuNSB2IDQuMiBoIDUgViA2NS4xIGggLTQuMiB2IDMuNSB6IG0gMTEuNiw5LjggYyAwLDAuNiAtMC42LDAuOCAtMC45LDEuMyBsIDUuNSwtMC4xIC0xLjEsLTAuOCBWIDc3LjEgYyAtMC43LDAgLTAuOCwwLjIgLTEuNSwwLjIgSCA5OS44IGMgLTAuOCwwIC0wLjgsLTAuMiAtMS41LC0wLjIgbCAtMCwxLjMgMCwwIHogbSAyLjgsLTYuMSBjIDAuMSwwLjcgMC4yLDAuOCAwLjIsMS42IDAsMC41IC0wLjYsMS4xIC0xLjEsMS4xIC0xLDAgLTEuNSwtMC41IC0xLjUsLTEuNSB2IC0wLjIgYyAwLC0wLjUgMC42LC0xLjEgMS4xLC0xLjEgaCAwLjIgYyAwLjYsMCAwLjYsMC4xIDEuMSwwLjIgeiBtIC0zLjksMC45IHYgMC43IGMgMCwxLjIgMS42LDIuNCAyLjYsMi40IDEuNCwwIDMsLTEgMywtMi40IFYgNzIuNyBjIDAsLTEgLTEuNiwtMiAtMi44LC0yIC0xLjQsMCAtMi44LDEgLTIuOCwyLjQgelwifV0saVtcIkdSLklOLklDLkdPVkVSTk1FTlQgU0lURSBJTkZSQVNUUlVDVFVSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEwMCw2Ny4zIEMgOTAuMTEyMiw3Mi4xMDM3IDc5LjMzMzYsNzcuMzk5MiA3MCw4MiBjIC0xLjIsMC42IC0zLjgsMS4zIC0zLjgsMi44IGwgLTAuMSwwIDAsMC40IGMgMCwwLjYgMC4xLDAuNiAwLjIsMS4xIDAuNSwwLjEgMC41LDAuMiAxLjEsMC4yIGwgNjUsMCBjIDAuNywwIDEuNywtMC42IDEuNywtMS4xIDAsLTIuMiAtMS43LC0yLjQgLTMuMiwtMyBDIDExOS4zOTEsNzYuNzU3NSAxMDkuMTcsNzEuNzk0MSAxMDAsNjcuMyBaIG0gLTAuMSwzLjQgYyAwLjIsMCAyNC41LDEyIDI1LjksMTMgbCAtNTEuNiwwIDAsLTAuMSBDIDc1LDgzIDk5LjcsNzAuNyA5OS45LDcwLjcgWiBtIDMxLjYsNTUuNiAwLC0zIC02My4zLDAgMCwzIHogbSAyLjMsNi40IDAsLTMgLTY3LjcsMCAwLDMgeiBtIC02LjIsLTQwLjcgMi40LDAgMCwtMy4yIC03LjksMCAwLDMuMiAyLjEsMCAtMC42LDI1LjUgLTEuNSwwIDAsMy44IDcuOSwwIDAsLTMuOCAtMS41LDAgeiBtIC0xNC42LC0zLjIgLTcuNiwwIDAsMy4yIDIuMiwwIC0wLjksMjUuNCAtMS4zLDAgMCwzLjggNy42LDAgMCwtMy44IC0xLjQsMCAtMC43LC0yNS41IDIuMSwwIHogbSAtMjAuOCwzLjEgMi4zLDAgMCwtMy4yIC03LjgsMCAwLDMuMiAyLjMsMCAtMC44LDI1LjQgLTEuNSwwIDAsMy44IDcuOCwwIDAsLTMuOCAtMS43LDAgeiBtIC0yMi41LDI1LjUgMCwzLjggOCwwIDAsLTMuOCAtMS41LDAgLTAuOCwtMjUuNSAyLjMsMCAwLC0zLjIgLTgsMCAwLDMuMiAyLjQsMCAtMC45LDI1LjUgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gNzQuMSw4My42IGggNTEuNiBDIDEyNC4zLDgyLjcgMTAwLDcwLjcgOTkuOCw3MC43IDk5LjYsNzAuNyA3NC45LDgzIDc0LjEsODMuNiBsIDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuTUlMSVRBUlkgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2NS4yLDkzLjEgYyAwLC0wLjUgMTUuNiwtMTEuNSAxNy4zLC0xMi44IDEuNSwtMS4yIDE3LjMsLTEyLjYgMTcuNCwtMTIuNiAwLjYsMCAxNS45LDExLjIgMTcuNiwxMi41IDEuNywxLjMgMTcuMywxMi40IDE3LjMsMTIuOSAwLDAgLTYuMSwxOC42IC02LjcsMjAuMyAtMS4yLDMuNCAtMi4yLDYuOCAtMy40LDEwLjMgLTEsMyAtMi43LDcuMiAtMy4zLDEwIEggNzguNCBjIC0wLjEsLTEuNyAtNS42LC0xOCAtNi41LC0yMC40IC0wLjYsLTEuNCAtNi42LC0yMC4xIC02LjYsLTIwLjEgeiBtIDguNCwzOC41IDIsNi4xIDQ5LDAgOC40LC0yNi40IDYuNiwtMjAuNSAtMzkuNywtMjguNyAtMzkuNiwyOC44IDEzLjMsNDAuNiAwLDAgeiBNIDEwMCw3Ni4yIGMgMi43LDIuNCAyNi42LDE4LjcgMjYuNiwxOS42IDAsMC44IC00LjEsMTIuNyAtNC41LDEzLjQgbCAtNS42LDE3LjQgLTMyLjUsMCBjIC0wLjksMCAtMywtNy40IC0zLjUsLTguNyAtMC42LC0xLjggLTIuOSwtNy44IC0yLjksLTkuNCBMIDc0LjMsOTguOSA3My41LDk1LjUgMTAwLDc2LjIgeiBtIDMwLjUsMTggYyAtMy4xLC0yLjEgLTMwLC0yMi4yIC0zMC43LC0yMi4yIC0wLjEsMCAtMTMuOCwxMC4xIC0xNS4yLDExLjEgLTIsMS40IC0xNC4zLDEwLjcgLTE1LjIsMTAuOSB2IDAuNyBjIDAsMSAyLjksNyAyLjksOS4zIGwgOC43LDI2LjMgMzcuNywwIDUsLTE1LjcgNi42LC0yMC40IHogbSAtNTAuNCwzLjIgYyAwLjgsLTAuMiA4LjYsLTYuMSAxMCwtNyAxLjIsLTAuOCA5LjUsLTcuMSAxMCwtNy4xIDAsMCA5LDYuNSAxMCw3LjIgMS4yLDAuOCA5LjcsNi41IDkuNyw3LjMgMCwxLjIgLTAuNCwyIC0wLjksMi43IDAsMS42IC0yLjYsOC43IC0zLjMsMTAuNiAtMC41LDEuNCAtMi44LDEwLjEgLTMuNywxMC4xIEggODguMSBjIC0wLjcsMCAtMS44LC00IC0yLC00LjggLTAuNiwtMS43IC0xLjIsLTMuMyAtMS43LC01LjEgLTAuNiwtMi4xIC0zLjEsLTguNyAtMy4xLC0xMC4zIGwgLTAuMywwLjEgLTAuOSwtMy43IHogbSAtMy4yLC0wLjcgOC44LDI3IDI4LjIsLTAgOC43LC0yNy4yIGMgLTMuMiwtMS43IC0yMS43LC0xNi4zIC0yMi45LC0xNi4zIC0wLjMsMCAtMjAuNiwxNSAtMjIuOSwxNi42IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDc3LDk2LjggYyAyLjMsLTEuNSAyMi42LC0xNi42IDIyLjksLTE2LjYgMS4yLDAgMTkuNywxNC42IDIyLjksMTYuMyBsIC04LjcsMjcuMiAtMjguMywwIC04LjgsLTI3IHogbSAtMy42LC0xLjMgMC45LDMuNCAzLjQsOS43IGMgMCwxLjUgMi4zLDcuNiAyLjksOS40IDAuNCwxLjMgMi41LDguNyAzLjUsOC43IGwgMzIuNSwtMCA1LjUsLTE3LjQgYyAwLjQsLTAuNiA0LjUsLTEyLjYgNC41LC0xMy40IDAsLTEgLTIzLjksLTE3LjIgLTI2LjYsLTE5LjYgTCA3My41LDk1LjUgeiBtIDYuNywyIDAuOSwzLjcgMC4zLC0wLjEgYyAwLDEuNiAyLjQsOC4yIDMuMSwxMC4zIDAuNSwxLjggMS4xLDMuNCAxLjcsNS4xIDAuMiwwLjggMS4zLDQuOCAyLDQuOCBoIDIzLjggYyAxLDAgMy4zLC04LjYgMy43LC0xMC4xIDAuNiwtMS45IDMuMywtOSAzLjMsLTEwLjYgMC41LC0wLjcgMSwtMS41IDEsLTIuNyAwLC0wLjggLTguNSwtNi41IC05LjcsLTcuMyAtMSwtMC43IC05LjksLTcuMiAtMTAsLTcuMiAtMC41LDAgLTguOCw2LjIgLTEwLDcgLTEuMywxIC05LjIsNi44IC0xMCw3LjEgeiBtIDQzLjgsMTcuMSAtNSwxNS43IC0zNy43LC0wIC04LjcsLTI2LjMgYyAwLC0yLjMgLTIuOSwtOC4zIC0yLjksLTkuMyB2IC0wLjcgYyAxLC0wLjIgMTMuMiwtOS41IDE1LjIsLTEwLjkgMS40LC0xIDE1LjEsLTExLjEgMTUuMiwtMTEuMSAwLjcsMCAyNy42LDIwIDMwLjcsMjIuMiBsIC02LjYsMjAuNCB6IE0gNjUuMiw5My4xIGMgMCwwIDYsMTguNyA2LjYsMjAuMSAxLDIuNCA2LjQsMTguNyA2LjUsMjAuNCBoIDQzLjEgYyAwLjYsLTIuOCAyLjMsLTcgMy4zLC0xMCAxLjIsLTMuNSAyLjEsLTYuOCAzLjQsLTEwLjMgMC42LC0xLjcgNi43LC0yMC4yIDYuNywtMjAuMyAwLC0wLjUgLTE1LjYsLTExLjUgLTE3LjMsLTEyLjkgQyAxMTUuOCw3OSAxMDAuNSw2Ny43IDk5LjksNjcuNyA5OS44LDY3LjcgODQuMSw3OS4yIDgyLjUsODAuMyA4MC44LDgxLjYgNjUuMiw5Mi43IDY1LjIsOTMuMSB6XCJ9XSxpW1wiR1IuSU4uSUMuUE9TVEFMIFNFUlZJQ0UgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA2NC4zLDg2LjYgOTkuOSwxMDIuMSAxMzUuNyw4Ni42IHYgMzEuOCBIIDY0LjMgdiAtMzEuOCBsIDAsMCB6IG0gNjIuNSwxLjkgYyAtMy4xLDEuMiAtNS45LDIuNiAtOSwzLjkgLTIuMiwwLjkgLTE3LjEsNy43IC0xOCw3LjcgLTAuNSwwIC0xNS44LC03IC0xNy44LC03LjggLTMsLTEuMiAtNS45LC0yLjggLTguOCwtMy45IC0yLjMsLTAuOSAtNi44LC0zLjQgLTguOCwtMy44IHYgLTMuMiBoIDcxLjUgdiAzLjIgYyAtMi4xLDAuNCAtNi42LDIuOSAtOSwzLjkgeiBtIC02NC4xLDMxLjcgaCA3NC43IFYgNzkuOCBIIDYyLjcgdiA0MC40IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDY0LjMsODYuNiAwLDMxLjggNzEuNSwwIDAsLTMxLjggLTM1LjgsMTUuNSB6IG0gMCwtMiBjIDIsMC41IDYuNSwzIDguOCwzLjggMi45LDEuMSA1LjgsMi43IDguOCwzLjkgMiwwLjggMTcuMyw3LjggMTcuOCw3LjggMC45LDAgMTUuOSwtNi44IDE4LC03LjcgMy4xLC0xLjMgNS45LC0yLjYgOSwtMy45IDIuNCwtMSA2LjksLTMuNCA5LC0zLjkgViA4MS40IEggNjQuMyB2IDMuMiBsIDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuUE9TVEFMIERJU1RSSUJVVElPTiBDRU5URVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA2NC4zLDk0LjYgOTkuOSwxMTAuMSAxMzUuNyw5NC42IFYgMTI2LjQgSCA2NC4zIGwgNGUtNCwtMzEuOCAwLDAgeiBtIDYyLjUsMS45IGMgLTMuMSwxLjIgLTUuOSwyLjYgLTksMy45IC0yLjIsMC45IC0xNy4xLDcuNyAtMTguMSw3LjcgLTAuNSwwIC0xNS43LC02LjkgLTE3LjgsLTcuOCAtMywtMS4yIC01LjksLTIuOCAtOC44LC0zLjkgLTIuMywtMC45IC02LjgsLTMuNCAtOC44LC0zLjkgdiAtMy4yIGggNzEuNSB2IDMuMiBjIC0yLjEsMC41IC02LjYsMi45IC05LDMuOSB6IE0gNjIuNywxMjguMiBoIDc0LjcgViA4Ny44IEggNjIuNyB2IDQwLjUgeiBtIDY2LjEsLTU0LjQgLTUuNCwwIDAsMTMuMyAtMiwwIDAsLTEzLjMgLTUuNCwwIDAsLTEuOCAxMi44LDAgMCwxLjggbSAtMTQsOSBjIC0xZS01LDAuNiAtMC4xLDEuMiAtMC40LDEuNyAtMC4zLDAuNiAtMC43LDEuMSAtMS4xLDEuNSAtMC41LDAuNCAtMS4yLDAuOCAtMS45LDEgLTAuNywwLjIgLTEuNiwwLjQgLTIuNiwwLjQgLTEuMSwwIC0yLjEsLTAuMSAtMi45LC0wLjMgLTAuOSwtMC4yIC0xLjgsLTAuNSAtMi43LC0wLjkgbCAwLC0yLjUgMC4xLDAgYyAwLjgsMC42IDEuNiwxLjEgMi43LDEuNSAxLDAuMyAxLjksMC41IDIuOCwwLjUgMS4yLDEwZS03IDIuMiwtMC4yIDIuOSwtMC43IDAuNywtMC41IDEsLTEuMSAxLC0xLjkgLTFlLTUsLTAuNyAtMC4yLC0xLjIgLTAuNSwtMS41IC0wLjMsLTAuMyAtMC44LC0wLjYgLTEuNSwtMC43IC0wLjUsLTAuMSAtMS4xLC0wLjIgLTEuNywtMC4zIC0wLjYsLTAuMSAtMS4yLC0wLjIgLTEuOSwtMC4zIC0xLjMsLTAuMyAtMi4zLC0wLjggLTMsLTEuNSAtMC42LC0wLjcgLTEsLTEuNiAtMSwtMi43IDAsLTEuMyAwLjUsLTIuMyAxLjYsLTMuMSAxLjEsLTAuOCAyLjQsLTEuMiA0LjEsLTEuMiAxLjEsMS42ZS01IDIsMC4xIDIuOSwwLjMgMC45LDAuMiAxLjcsMC41IDIuNCwwLjggbCAwLDIuNCAtMC4xLDAgYyAtMC42LC0wLjUgLTEuMywtMC45IC0yLjMsLTEuMiAtMC45LC0wLjMgLTEuOSwtMC41IC0yLjksLTAuNSAtMS4xLDEuM2UtNSAtMS45LDAuMiAtMi42LDAuNyAtMC43LDAuNCAtMSwxIC0xLDEuNyAtMWUtNSwwLjYgMC4yLDEuMSAwLjUsMS41IDAuMywwLjQgMC45LDAuNiAxLjcsMC44IDAuNCwwLjEgMSwwLjIgMS44LDAuMyAwLjgsMC4xIDEuNSwwLjMgMiwwLjQgMS4xLDAuMyAyLDAuNyAyLjUsMS40IDAuNiwwLjYgMC45LDEuNCAwLjksMi41IG0gLTE0LjQsNC4zIC02LDAgMCwtMS41IDIsMCAwLC0xMiAtMiwwIDAsLTEuNSA2LDAgMCwxLjUgLTIsMCAwLDEyIDIsMCAwLDEuNSBtIC04LjYsLTcuNSBjIC0xLjVlLTUsMS40IC0wLjMsMi42IC0wLjksMy43IC0wLjYsMS4xIC0xLjQsMiAtMi40LDIuNiAtMC43LDAuNCAtMS41LDAuNyAtMi4zLDAuOSAtMC44LDAuMiAtMiwwLjMgLTMuNCwwLjMgbCAtMy44LDAgMCwtMTUuMSAzLjgsMCBjIDEuNSwxLjVlLTUgMi42LDAuMSAzLjUsMC4zIDAuOSwwLjIgMS42LDAuNSAyLjIsMC45IDEsMC42IDEuOCwxLjUgMi40LDIuNiAwLjYsMS4xIDAuOSwyLjMgMC45LDMuOCBtIC0yLjEsLTAgYyAtMS4yZS01LC0xLjIgLTAuMiwtMi4yIC0wLjYsLTMgLTAuNCwtMC44IC0xLC0xLjUgLTEuOCwtMS45IC0wLjYsLTAuMyAtMS4yLC0wLjYgLTEuOSwtMC43IC0wLjcsLTAuMSAtMS41LC0wLjIgLTIuNCwtMC4yIGwgLTEuOSwwIDAsMTEuNyAxLjksMCBjIDEsMmUtNiAxLjgsLTAuMSAyLjUsLTAuMiAwLjcsLTAuMSAxLjQsLTAuNCAyLC0wLjggMC44LC0wLjUgMS4zLC0xLjEgMS43LC0xLjkgMC40LC0wLjggMC42LC0xLjggMC42LC0yLjlcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEyNi44LDk2LjUgYyAtMy4xLDEuMiAtNS45LDIuNiAtOSwzLjkgLTIuMiwwLjkgLTE3LjEsNy43IC0xOC4xLDcuNyAtMC41LDAgLTE1LjcsLTYuOSAtMTcuOCwtNy44IC0zLC0xLjIgLTUuOSwtMi44IC04LjgsLTMuOSAtMi4zLC0wLjkgLTYuOCwtMy40IC04LjgsLTMuOSB2IC0zLjIgaCA3MS41IHYgMy4yIGMgLTIuMSwwLjUgLTYuNiwyLjkgLTksMy45IHogbSAtNjIuNSwtMS45IDM1LjYsMTUuNSAzNS44LC0xNS41IFYgMTI2LjQgSCA2NC4zIGwgNGUtNCwtMzEuOCAwLDAgelwifV0saVtcIkdSLklOLklDLlBPU1QgT0ZGSUNFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzQuNyw5Mi44IDI0LjksMTAuOCBMIDEyNC43LDkyLjggViAxMTUuMSBIIDc0LjcgViA5Mi44IGwgMCwwIHogbSA0My43LDEuMyBjIC0yLjIsMC45IC00LjEsMS44IC02LjMsMi43IC0xLjUsMC42IC0xMiw1LjQgLTEyLjYsNS40IC0wLjQsMCAtMTEsLTQuOSAtMTIuNSwtNS40IC0yLjEsLTAuOCAtNC4xLC0xLjkgLTYuMiwtMi43IC0xLjYsLTAuNiAtNC44LC0yLjQgLTYuMiwtMi43IHYgLTIuMiBoIDUwIHYgMi4zIGMgLTEuNSwwLjMgLTQuNiwyIC02LjMsMi43IHogTSA3My42LDExNi40IEggMTI1LjggViA4OC4xIEggNzMuNiBWIDExNi40IHogTSA5OS44LDY0LjMgYyAwLjIsMCAzNS41LDE5LjggMzcuMSwyMS4yIGggLTQuOCB2IDM4LjYgaCAtNjMuOSB2IC0zOC42IGggLTQuOSBjIDEuNiwtMS40IDYuOSwtNC4xIDkuMSwtNS4zIDMuMSwtMS44IDYsLTMuNCA5LjEsLTUuMyAxLjYsLTEgMTguMywtMTAuNiAxOC40LC0xMC42IHogbSAtNDMuMywyMy4xIDkuOSwtMC4yIHYgMzguNCBoIDY3LjQgdiAtMzguNCBsIDkuOSwwLjIgYyAtMC41LC0wLjYgLTQzLjYsLTI1IC00My45LC0yNSAtMCwwIC0xOS41LDExLjQgLTIxLjcsMTIuNSAtMy41LDEuOCAtNy40LDQuMiAtMTAuOSw2LjIgLTIuNywxLjYgLTguOCw0LjYgLTEwLjgsNi4zIGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDk5LjgsNjQuMyBDIDk5LjgsNjQuMyA4My4xLDczLjkgODEuNSw3NC45IGMgLTMsMS44IC02LDMuNSAtOS4xLDUuMyAtMi4yLDEuMiAtNy41LDQgLTkuMSw1LjMgbCA0LjksMCAwLDM4LjYgNjMuOSwwIDAsLTM4LjcgNC44LDAgYyAtMS42LC0xLjQgLTM2LjksLTIxLjIgLTM3LjEsLTIxLjIgeiBNIDczLjYsODguMSBsIDUyLjMsMCAwLDI4LjMgLTUyLjMsMCAwLC0yOC4zIHogbSA0NC45LDYuMSBjIC0yLjIsMC45IC00LjEsMS44IC02LjMsMi43IC0xLjUsMC42IC0xMiw1LjQgLTEyLjYsNS40IC0wLjQsMCAtMTEsLTQuOSAtMTIuNSwtNS40IC0yLjEsLTAuOCAtNC4xLC0xLjkgLTYuMiwtMi43IC0xLjYsLTAuNiAtNC44LC0yLjQgLTYuMiwtMi43IHYgLTIuMiBoIDUwIHYgMi4zIGMgLTEuNSwwLjMgLTQuNiwyIC02LjMsMi43IHogTSA3NC43LDkyLjggOTkuNiwxMDMuNyAxMjQuNyw5Mi44IFYgMTE1LjEgSCA3NC43IFYgOTIuOCBsIDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuRU5DTE9TRUQgRkFDSVRMSVRZIChQVUJMSUMgVkVOVUUpXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE0LjksMTIxLjMgMCwtMS4yIC0zMC43LDAgMCwxLjIgeiBtIC0zMS45LC0yLjUgLTEwLjQsLTE2LjcgLTEsMC40IDEwLjYsMTYuNiB6IG0gMTMsLTEzLjggaCA3IGMgMC42LDAgNC40LC02IDUsLTYuOCBIIDkxIGMgMC42LDAuOSA0LjQsNi44IDUsNi44IHogbSAxNS4zLDEyIDAsLTEgLTIzLjUsMCAwLDEgeiBtIDIuNCwtMS42IDguNiwtMTMuNiAtMC44LC0wLjQgLTguNSwxMy4zIHogTSA3Ni44LDEwMS45IGMgMCwwLjMgMy43LDUuOSA0LjIsNi43IDAuNCwwLjYgNC4yLDYuNyA0LjMsNi43IDAuNCwwIDAuNSwtMC4yIDAuNywtMC41IGwgLTguNSwtMTMuNCBjIC0wLjIsMC4xIC0wLjcsMC4yIC0wLjcsMC41IHogbSAzMSwxMC44IDAsLTEgLTE2LjUsMCAwLDEgeiBtIC0xOS4zLC0xLjIgMC43LC0wLjQgLTYuNywtMTAuNSAtMC43LDAuNCB6IG0gMjIuMywtMCA2LjQsLTEwLjUgLTAuOCwtMC4zIC02LjYsMTAuNSB6IG0gLTYuNCwtMyAwLC0xIC05LjcsMCAwLDEgeiBtIDIuOCwtMS44IGMgMCwwLjYgMC4zLDAuNiAwLjcsMC42IGwgNC4yLC02LjkgLTAuNiwtMC40IGMgLTAuMiwwLjIgLTQuMyw2LjYgLTQuMyw2LjcgeiBtIC0yMC4zLC02LjMgNC4xLDcgYyAwLjMsLTAuMSAwLjgsLTAuMiAwLjgsLTAuNSAwLC0wLjYgLTMuNywtNS42IC00LC02LjkgbCAtMSwwLjQgeiBtIC0xOS43LDE4IDAuMywtMi44IGMgMC4xLC0zLjkgMiwtMTEuNCAzLC0xNC42IDEuNiwtNC43IDMuMiwtOC4zIDUuNiwtMTIgNC40LC02LjUgMTIsLTEyLjQgMjIuOCwtMTIuNCBoIDEuMSBjIDkuNiwwIDE3LDQuOCAyMS4zLDEwLjIgMS4yLDEuNSAyLjMsMi44IDMuMiw0LjYgMC41LDAuOSAxLDEuNiAxLjQsMi42IDAuNCwwLjkgMC43LDEuOSAxLjEsMi43IDAuOCwxLjQgMy42LDEwLjMgMy42LDEyLjEgdiAwLjYgaCAwLjMgdiAxIGwgMS4yLDEwLjggLTAuMSwyLjIgSCA2NyBsIDAuMiwtNSAwLDAgeiBtIC0yLjMsLTQgLTAuMywyLjQgLTAuNCw1LjYgdiAzLjggaCA3MC45IHYgLTEgYyAwLC0yIDAuMSwtNi40IC0wLjIsLTguMSAtMC40LC0yLjQgLTAuNSwtNS4yIC0xLC03LjUgLTAuNCwtMiAtMi45LC0xMi43IC0zLjksLTEzLjEgMCwtMS42IC0zLjUsLTcuNiAtNC4zLC04LjggLTEuOCwtMi42IC0zLjgsLTUgLTYuMiwtNyAtNC45LC0zLjkgLTEwLjUsLTcgLTE5LjMsLTcgaCAtMSBjIC0xMS44LDAgLTE5LjYsNS45IC0yNC42LDEyLjggLTEuNCwxLjkgLTIuNCwzLjggLTMuNSw1LjkgLTEuMiwyLjMgLTEuNyw0LjIgLTIuNiw2LjcgLTEuMiwzIC0zLjQsMTEuNCAtMy41LDE1LjMgbCAwLDAgeiBtIDUyLjIsNC43IGMgMC40LC0xLjMgNC4yLC02LjYgNS4yLC04LjMgMC42LC0xIDUuMSwtNy45IDUuMSwtOC4yIDAsLTAuMyAtMC42LC0wLjQgLTAuOCwtMC41IGwgLTEwLjYsMTYuNiAxLjEsMC40IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDg0LjIsMTIwLjEgaCAzMC43IHYgMS4yIEggODQuMiB2IC0xLjIgeiBtIDMuNiwtNC4yIGggMjMuNSB2IDEgSCA4Ny44IHYgLTEgeiBtIDMuNSwtNC4yIGggMTYuNSB2IDEgSCA5MS40IHYgLTEgeiBtIDMuMywtNC4yIGggOS43IHYgMSBoIC05LjcgdiAtMSB6IG0gMjIuNCwxMS41IC0xLjEsLTAuNCAxMC42LC0xNi42IGMgMC4zLDAuMSAwLjgsMC4yIDAuOCwwLjUgMCwwLjMgLTQuNiw3LjIgLTUuMSw4LjIgLTEsMS44IC00LjksNyAtNS4yLDguMyB6IG0gLTQ1LjQsLTE2LjYgMSwtMC40IDEwLjQsMTYuNyAtMC44LDAuNCAtMTAuNiwtMTYuNiB6IG0gMTMuNywxMi44IGMgLTAuMiwwIC00LC02IC00LjMsLTYuNyAtMC41LC0wLjggLTQuMiwtNi4zIC00LjIsLTYuNiAwLC0wLjMgMC40LC0wLjQgMC43LC0wLjUgbCA4LjUsMTMuMyBjIC0wLjIsMC4zIC0wLjIsMC41IC0wLjcsMC41IHogbSAzNi4yLC0xMy44IDAuOCwwLjQgLTguNiwxMy42IC0wLjgsLTAuNiA4LjYsLTEzLjQgeiBtIC01LjEsLTAuNiAwLjgsMC4zIC02LjQsMTAuNSAtMSwtMC4zIDYuNiwtMTAuNSB6IG0gLTMzLjksLTAgNi43LDEwLjUgLTAuNywwLjQgLTYuNywtMTAuNSAwLjcsLTAuNCB6IG0gMjQuNyw2IGMgMCwtMC4xIDQuMSwtNi41IDQuMywtNi43IGwgMC42LDAuNCAtNC4yLDYuOSBjIC0wLjQsMCAtMC43LC0wLjEgLTAuNywtMC42IHogbSAtMTkuNCwtNi43IGMgMC4zLDEuMyA0LDYuMyA0LDYuOSAwLDAuMyAtMC42LDAuNCAtMC44LDAuNSBsIC00LjEsLTcgMSwtMC40IHogbSA4LjIsNC45IGMgLTAuNiwwIC00LjQsLTYgLTUsLTYuOCBoIDE3IGMgLTAuNiwwLjggLTQuNCw2LjggLTUsNi44IGggLTcgeiBtIC0yOC41LDEwLjcgYyAwLDAuNSAtMCwyLjggLTAuMywyLjggbCAtMC4yLDUgaCA2NS4yIGwgMC4xLC0yLjIgLTEuMiwtMTAuOCB2IC0xIGggLTAuMyB2IC0wLjYgYyAwLC0xLjggLTIuOCwtMTAuNiAtMy42LC0xMi4xIC0wLjQsLTAuOCAtMC43LC0xLjggLTEuMSwtMi43IC0wLjUsLTEgLTEsLTEuNiAtMS41LC0yLjYgLTAuOSwtMS44IC0yLC0zLjEgLTMuMiwtNC42IC00LjIsLTUuNCAtMTEuNiwtMTAuMiAtMjEuMywtMTAuMiBoIC0xIGMgLTEwLjgsMCAtMTguNSw1LjggLTIyLjgsMTIuNCAtMi41LDMuOCAtNC4xLDcuNCAtNS43LDEyIC0xLjEsMy4yIC0zLDEwLjcgLTMsMTQuNiBsIDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuT1BFTiBGQUNJTElUWSAoT1BFTiBWRU5VRSlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjIuNCwxMTcuMSAwLC0xLjUgLTQ1LjEsMCAwLDEuNSB6IE0gNzQuNSwxMTQgNzUuNiwxMTMuNCA1OS44LDg4LjggNTguOCw4OS40IHogbSA0OS42LC0wLjYgYyAwLjIsMC4xIDEsMC41IDEuMywwLjUgMC4yLDAgMTQuNCwtMjIuNCAxNS45LC0yNC42IGwgLTEuNSwtMC41IC0xNS43LDI0LjYgeiBtIC02LjYsLTIuNiAwLC0xLjcgLTM1LDAgMCwxLjcgeiBtIDIuNCwtMy4yIGMgMCwwLjIgMSwwLjggMS4xLDAuOSBsIDEyLjgsLTIwIGggMC4yIGwgLTEuNiwtMC44IGMgLTEuMywyLjQgLTEyLjYsMTkuMyAtMTIuNiwyMCB6IG0gLTQxLjEsMC45IDEuNCwtMC44IC0xMi43LC0yMC4xIC0xLjMsMC44IHogbSAzMy4zLC0zLjkgMCwtMS42IC0yNC40LDAgMCwxLjYgeiBtIDMuNCwtMi44IGMgMCwwLjYgMC42LDAuNyAxLjEsMC45IGwgOS42LC0xNS40IC0xLjIsLTAuNiBjIC0wLjYsMiAtOS40LDE0LjUgLTkuNCwxNS4yIHogbSAtMzIuMiwxIDEuNCwtMC42IC05LjcsLTE1LjUgLTEuMywwLjggeiBtIDIzLjQsLTQuNSAwLC0xLjcgLTEzLjgsMCAwLDEuNyB6IG0gNS42LC0xLjcgNi40LC0xMC4zIC0xLjIsLTAuNSAtNi42LDEwLjIgeiBtIC0yNC42LDAuMSAxLjEsLTAuOCAtNi41LC0xMC4yIC0xLjMsMC42IHogbSA2LjYsLTQgMTEsMC4xIGMgMC42LDAgNi40LC04LjkgNywtMTAgSCA4Ny4zIGwgNi45LDkuOSB6XCJ9XSxpW1wiR1IuSU4uSUMuUkVMSUdJT1VTIElOU1RJVFVUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAxLjIsNjguMSBjIDcuOSwwIDE4LDMuOCAyMS43LDggNSw1LjcgNywxMi4zIDcsMjIuOCBWIDEzMS45IEggMTAxLjIgViA2OC4xIHogTSA3MC4xLDk2LjMgYyAwLC04LjQgMy40LC0xNi40IDcuNywtMjAuNyAzLjksLTMuOSAxMy4yLC03LjUgMjAuOSwtNy41IHYgNjMuOSBIIDcwLjEgViA5Ni4zIHogbSAtMi42LDM4LjMgaCA2NSBWIDk5LjMgYyAwLC0xMC44IC0yLjUsLTE5LjcgLTguMSwtMjUuMiAtNC44LC00LjggLTE1LC04LjcgLTI0LjYsLTguNyAtOC4zLDAgLTE5LjQsMy43IC0yMy42LDcuOSAtMy4yLDMuMyAtNC4zLDUgLTYuMiw5LjUgLTEsMi40IC0yLjUsMTAgLTIuNSwxMy4yIHYgMzguNSBsIDAsMCB6IE0gMTA1LjEsOTcuNiB2IDEyLjUgYyAwLDAuNSAwLjYsMS4xIDEuMSwxLjEgaCAwLjQgYyAwLjcsMCAxLjEsLTAuOCAxLjEsLTEuNSBWIDk3LjggYyAwLC0wLjUgLTAuNiwtMS4xIC0xLjEsLTEuMSBIIDEwNiBjIC0wLjUsMCAtMC45LDAuNCAtMC45LDAuOSB6IG0gLTExLjIsMTMuNiBjIDAuOCwwIDAuOSwtMSAwLjksLTEuNyBWIDk3LjYgYyAwLC0wLjUgLTAuNCwtMC45IC0wLjksLTAuOSBoIC0wLjYgYyAtMC41LDAgLTAuOSwwLjQgLTAuOSwwLjkgdiAxMi41IGMgMCwwLjUgMC42LDEuMSAxLjEsMS4xIGggMC40IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEwNS4xLDk3LjYgYyAwLC0wLjUgMC40LC0wLjkgMC45LC0wLjkgaCAwLjcgYyAwLjUsMCAxLjEsMC42IDEuMSwxLjEgdiAxMS44IGMgMCwwLjcgLTAuNCwxLjUgLTEuMSwxLjUgaCAtMC41IGMgLTAuNSwwIC0xLjEsLTAuNiAtMS4xLC0xLjEgViA5Ny42IGggMCB6IG0gLTMuOSwzNC40IGggMjguNyBWIDk4LjkgYyAwLC0xMC41IC0yLC0xNy4xIC03LC0yMi44IEMgMTE5LjIsNzEuOSAxMDkuMSw2OC4xIDEwMS4yLDY4LjEgdiA2My45IHogTSA5NCwxMTEuMiBIIDkzLjUgYyAtMC41LDAgLTEuMSwtMC42IC0xLjEsLTEuMSBWIDk3LjYgYyAwLC0wLjUgMC40LC0wLjkgMC45LC0wLjkgaCAwLjcgYyAwLjUsMCAwLjksMC40IDAuOSwwLjkgdiAxMS44IGMgMCwwLjggLTAuMSwxLjggLTAuOSwxLjggeiBNIDcwLjEsOTYuMyB2IDM1LjcgSCA5OC44IFYgNjguMSBjIC03LjcsMCAtMTcsMy42IC0yMC45LDcuNSAtNC4zLDQuMyAtNy43LDEyLjMgLTcuNywyMC43IHpcIn1dLGlbXCJHUi5JTi5JQy5DSElMRCBEQVkgQ0FSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDc2LjYsMTAwLjMgYyAwLDEuOCAxLjEsMy40IDMsMy40IGggMC42IGMgMS40LDAgMi40LC0xLjUgMi40LC0zIDAsLTQuMyAtNiwtNC4yIC02LC0wLjQgeiBtIDI2LjUsLTExLjkgdiAwLjQgYyAwLDEuNSAxLjQsMy4yIDIuOCwzLjIgaCAwLjQgYyAxLjYsMCAzLC0xLjIgMywtMi44IFYgODcuOCBjIDAsLTEgLTEuNiwtMiAtMi44LC0yIGggLTAuMiBjIC0xLjUsLTAgLTMuMiwxLjQgLTMuMiwyLjYgeiBtIC0zLjIsLTE2LjggMzUuNCwyMS43IGMgLTEuMywwLjIgLTQuNiwtMC4zIC00LjYsMC45IHYgMzQuOSBIIDY5LjMgViA5NC4xIGMgMCwtMS4yIC0zLjMsLTAuOCAtNC42LC0wLjkgbCAzNS4yLC0yMS43IDAsMCB6IG0gLTM5LjgsMjIuNCBjIDAuMiwwLjggMC4zLDEuMyAxLjMsMS4zIGggNi4yIHYgMzQuNiBjIDAsMC41IDAuMSwwLjUgMC4yLDAuOSBoIDY0IGMgMC40LDAgMC44LC0wLjMgMC44LC0wLjggViA5NS4yIGggNiBjIDAuOCwwIDEuMywtMC40IDEuMywtMS4xIDAsLTAuNiAtMTcuOCwtMTEuMiAtMTkuOCwtMTIuNSAtMS42LC0xIC0yMCwtMTIuMyAtMjAsLTEyLjMgLTAuMiwwIC0zNi43LDIyLjUgLTQwLDI0LjcgbCAwLDAgeiBtIDIwLjksMTQuMiA1LjksNC4zIC0wLjEsMC4xIC00LjgsMi4yIGMgLTAuMiwtMC44IC0xLC0xLjkgLTEsLTIuNSB2IC00LjEgeiBtIDI4LjQsLTguOCBjIDAuNSwtMC44IDAuNiwtMi45IDEsLTMuMSAwLjQsLTAuMiAyLjQsMC44IDIuOSwwLjkgdiAzLjYgbCAtNC40LDEuNyB2IC0wLjYgYyAtMCwtMC45IDAuNSwtMSAwLjUsLTIuNCB6IG0gLTMsMiBjIDAsMC45IDAsMS4xIC0wLjQsMS43IFYgMTA0IGMgLTIuNCwwLjIgLTE1LjQsNy41IC0xNyw3LjUgLTAuNSwwIC02LjUsLTYuNyAtNy4zLC02LjcgaCAtNC4zIGMgLTAuNSwwIC0yLjgsNS4yIC0yLjgsNS42IHYgNC43IGMgMCwwLjkgMS44LDEuNCAyLDIuNCBsIC00LjEsMS43IDEuMywyLjYgNi4yLC0yLjggYyAxLjUsMC44IDkuMyw1LjYgMTAuNSw1LjYgaCAwLjYgYyAwLjgsMCAxLjksLTAuOCAxLjksLTEuNSB2IC0wLjQgYyAwLC0wLjkgLTcuMywtNC44IC04LjQsLTUuOCBsIDE0LC02LjMgdiA4LjQgaCAtMyB2IDYuNyBoIDguNCB2IC02LjcgaCAtMi44IHYgLTkuOSBsIDEzLjIsLTUuOCBjIDAsMS42IDAuMiwzLjcgMC40LDUuMSAwLjIsMS44IC0wLjYsMy45IDEuNSwzLjkgMi4xLDAgMS4zLC0yLjUgMS4zLC00LjMgMCwtMS45IC0wLjIsLTMuNSAtMC4yLC01LjYgdiAtMC42IGwgOS4xLC00IC0xLC0yLjkgLTYuMiwyLjggYyAwLjMsLTAuNiAwLjcsLTAuOCAxLC0xLjQgMC4yLC0wLjcgMC40LC0xLjIgMC43LC0xLjggMC41LC0xIDAuOSwtMi42IDEuNCwtMy40IGwgLTExLjQsLTEuNiBjIC0wLjYsMC41IC0zLjIsMy4zIC0zLjIsNC4yIHYgMC42IGggLTAuNCBsIC0xLjEsNy4xIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDgxLDExMi4yIGMgMCwwLjYgMC44LDEuNyAxLDIuNSBsIDQuOCwtMi4yIDAuMiwtMC4xIC02LC00LjMgdiA0LjEgeiBtIDI4LjQsLTEyLjkgYyAwLDEuNCAtMC42LDEuNiAtMC42LDIuNCB2IDAuNiBsIDQuNSwtMS43IHYgLTMuNiBjIC0wLjUsLTAuMSAtMi42LC0xIC0yLjksLTAuOSAtMC40LDAuMiAtMC41LDIuNCAtMSwzLjEgeiBtIC0zMi45LDAuOSBjIDAsLTMuOSA2LC00IDYsMC40IDAsMS40IC0xLjEsMyAtMi40LDMgaCAtMC41IGMgLTEuOCwwIC0zLC0xLjYgLTMsLTMuNCB6IG0gMjkuNSwyLjggMC40LC0xLjcgMS4xLC03LjEgaCAwLjQgdiAtMC42IGMgMCwtMC44IDIuNiwtMy43IDMuMiwtNC4yIGwgMTEuNCwxLjYgYyAtMC41LDAuOCAtMC45LDIuNCAtMS40LDMuNCAtMC4zLDAuNiAtMC40LDEuMSAtMC43LDEuOCAtMC4zLDAuNyAtMC43LDAuOCAtMSwxLjQgbCA2LjIsLTIuOCAxLDIuOSAtOS4xLDQgdiAwLjYgYyAwLDIuMSAwLjIsMy43IDAuMiw1LjYgMCwxLjggMC44LDQuMyAtMS4zLDQuMyAtMi4xLDAgLTEuMywtMi4yIC0xLjUsLTMuOSAtMC4yLC0xLjQgLTAuNCwtMy41IC0wLjQsLTUuMSBsIC0xMy4yLDUuOCB2IDkuOSBoIDIuOCB2IDYuNyBoIC04LjQgdiAtNi43IGggMyB2IC04LjQgbCAtMTQsNi4zIGMgMS4xLDAuOSA4LjQsNC45IDguNCw1LjggdiAwLjQgYyAwLDAuNyAtMSwxLjUgLTEuOSwxLjUgSCA5MC42IGMgLTEuMiwwIC04LjksLTQuOCAtMTAuNSwtNS42IGwgLTYuMiwyLjggLTEuMywtMi42IDQuMSwtMS43IGMgLTAuMywtMSAtMiwtMS41IC0yLC0yLjQgdiAtNC42IGMgMCwtMC40IDIuMywtNS42IDIuOCwtNS42IGggNC4zIGMgMC44LDAgNi44LDYuNyA3LjMsNi43IDEuNSwwIDE0LjYsLTcuMyAxNywtNy41IHYgLTAuOSB6IG0gLTMsLTE0LjggYyAwLC0xLjIgMS43LC0yLjYgMy4yLC0yLjYgaCAwLjIgYyAxLjIsMCAyLjgsMS4xIDIuOCwyIHYgMS4zIGMgMCwxLjYgLTEuNCwyLjggLTMsMi44IGggLTAuNCBjIC0xLjQsMCAtMi44LC0xLjcgLTIuOCwtMy4yIHYgLTAuNCB6IG0gLTM4LjQsNC45IGMgMS4zLDAuMSA0LjYsLTAuMyA0LjYsMC44IHYgMzQuOSBoIDYxLjQgViA5NC4xIGMgMCwtMS4yIDMuMywtMC44IDQuNiwtMC45IGwgLTM1LjQsLTIxLjcgLTM1LjIsMjEuOCAwLDAgelwifV0saVtcIkdSLklOLklDLkhFTElDT1BURVIgTEFORElORyBTSVRFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6byxkOlwiTTgwLDcwIGwxMCwxMCBNMTIwLDExMCBsLTEwLC0xMCBNODAsMTEwIGwxMCwtMTAgTTEyMCw3MCBsLTEwLDEwIE0xMDAsMTE1IGwwLDIwIE05NSwxMzUgbDEwLDBcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixzdHJva2U6byxmaWxsOiEhUiYmRyxkOlwibSAxMTMsOTAgYyAtMC4zLDguOCAtMS45LDIwLjMgLTEwLjgsMjQuNiAtNy43LDIgLTEyLjMsLTcuMSAtMTMuOCwtMTMuMyAtMi42LC0xMS41IC0yLjMsLTI2IDYuOSwtMzQuNiA2LjAsLTQuOSAxMy4xLDEuOSAxNC45LDcuOCAyLDQuOSAyLjgsMTAuMiAyLjgsMTUuNSB6XCJ9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NDB9XSxpW1wiR1IuSU4uSUMuVFJBTlNQT1JUQVRJT04gSU5GUkFTVFJVQ1RVUkUgTE9DS1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw3MCA2NSwzMCAtNjUsMzBcIn1dLGlbXCJHUi5JTi5JQy5UUkFOU1BPUlRBVElPTiBJTkZSQVNUUlVDVFVSRSBTSElQIEFOQ0hPUkFHRVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6XCJyZ2IoMjU1LCAwLCAyNTUpXCIsZDpcIm0gNzMuNiwxMTIuOCBjIDAuOCw4IDI2LjQsMTEuMiAyNi40LDExLjIgMCwwIDI1LjYsLTMuMiAyNi40LC0xMS4yIE0gODAsODggbCA0MCwwIG0gLTIwLC0xMiAwLDQ4XCJ9XSxpW1wiR1IuSU4uSUMuTkFUVVJBTCBHQVMgRkFDSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDYwLjUgYyAtMTYuNCwwIC0yOS42LDEzLjIgLTI5LjYsMjkuNiAwLDEyLjggOC4zLDIzLjkgMTkuNywyNy44IGwgMCwxOS43IGMgMy4yLDEuMiA2LjMsMS44IDkuOSwxLjggMy42LDAgNi43LC0wLjYgOS45LC0xLjggbCAwLC0xOS44IGMgMTEuNSwtMy45IDE5LjgsLTE1IDE5LjcsLTI3LjggMCwtMTYuNCAtMTMuMiwtMjkuNiAtMjkuNiwtMjkuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMyxmb250c2l6ZTozNSx0ZXh0OlwiTkdcIn1dLGlbXCJHUi5JTi5JQy5UT0xMIEZBQ0lMSVRZXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjkuMSwxMTIuMyBjIDAsLTAuNyAwLjgsLTEuNyAxLjQsLTEuNyBoIDAuNSBjIDAuOCwwIDEuNSwwLjggMS41LDEuNSB2IDEuMiBjIDAsMC41IC0wLjksMS4yIC0xLjUsMS4yIGggLTAuMiBjIC0wLjgsMCAtMS43LC0wLjggLTEuNywtMS40IHYgLTAuOSBsIDAsMCB6IG0gLTEuMSwwLjUgdiAwLjMgYyAwLDEuMiAxLjUsMi42IDIuOSwyLjYgMS4zLDAgMi44LC0xLjUgMi44LC0yLjUgdiAtMSBjIDAsLTEuMiAtMS40LC0yLjYgLTIuOCwtMi42IC0xLjcsMCAtMi45LDEuNiAtMi45LDMuMiB6IG0gMjcuNiwtMTEuNiAtMiwtMi44IC0yLjMsMCA0LjMsMi44IHogbSAtMjkuNSwxNy44IGMgMCwtMC41IDAuOCwtMC45IDEuNCwtMC45IEggOTkuMSBjIDAuOCwwIDEuMywwLjYgMS40LDEuNCAtMC42LDAuMSAtMSwwLjMgLTEuNywwLjMgSCA2OCBjIC0wLjYsMCAtMS44LDAgLTEuOCwtMC42IHYgLTAuMiB6IG0gOS40LC0xMC4yIDE1LjEsMCA4LjIsMC4yIGMgMC41LDAuOSAyLDMgMS44LDQuMyBsIC0wLjIsMi42IGMgLTAuNSwwLjIgLTAuNSwwLjMgLTEsMC4zIEggNjcuMSBjIC0wLjYsMCAtMC41LC0wLjIgLTEuMSwtMC4zIC0wLjEsLTAuNyAtMC4zLC0xIC0wLjMsLTEuOCB2IC0wLjYgYyAwLC0xLjEgMS41LC0zLjUgMiwtNC40IGwgNy44LC0wLjIgeiBtIC01LjgsLTIgYyAwLjEsLTEuMSAzLjUsLTcuMSA0LjMsLTcuMSBoIDE4LjQgYyAxLDAgNCw1LjggNC4zLDcuMSBIIDY5LjcgeiBtIDIxLjcsLTguNCAyLjMsLTAgMiwyLjggLTQuMywtMi44IHogbSA0NC4zLDI3LjggViA3My44IGMgLTEsMC4yIC0xMC4zLDYgLTExLjksNyAtMS4zLDAuOCAtMTEuNiw2LjUgLTExLjYsNy4yIDAsMCAxLjMsMi4xIDEuNCwyLjMgbCA0LjksLTIuOCB2IDE5LjIgbCAtMC40LDAuMyBjIC0yLjksLTIgLTMzLjQsLTIyIC0zMy42LC0yMiAtMC4xLDAgLTMuOSw1LjYgLTQsNi4yIGwgMTAuOCw3IC0xOC4zLDAgYyAtMC45LDEuNCAtMS45LDIuNCAtMi44LDMuOCAtMC4yLDAuMyAtMiw0LjQgLTIsNC42IHYgMC44IGggLTEuMiBjIC0wLjEsMC45IC0yLjYsNC42IC0yLjYsNS40IHYgMC44IGMgMCwxLjUgMC40LDIuOSAxLjQsMy40IC0wLjIsMC4zIC0xLDEuMSAtMSwxLjYgdiAwLjkgYyAwLDEuMSAxLjUsMS41IDIuNiwxLjUgdiAyLjMgbCAwLjIsMiBjIDAuNSwwLjIgMC4zLDAuNSAxLjIsMC42IDAuNiwwLjEgMSwwLjIgMS43LDAuMiBoIDEuMSBsIDEuNywtMC4yIDAuMywtMC4zIDAuMiwtMiAwLC0yLjUgaCAxOS4xIHYgMy4xIGMgMCwwLjggMC4zLDEuMiAwLjYsMS43IGwgMS40LDAuMiAxLjIsLTAgYyAxLjcsMCAzLjEsLTAuMSAzLjEsLTEuOCB2IC0zLjEgYyAwLjgsLTAuMiAyLjYsLTAuNSAyLjYsLTEuNCB2IC0xLjcgYyAwLC0wLjUgLTAuNSwtMC43IC0wLjksLTAuOCAwLjEsLTAuNSAxLjIsLTEuMSAxLjIsLTIuNSB2IC0yIGMgMCwtMS41IC0yLjEsLTQuMSAtMi41LC01LjQgaCAtMS4yIHYgLTAuNCBjIDAsLTEuMSAtMi4yLC00LjggLTIuNSwtNS44IGwgMTksMTIuNSBjIC0wLjQsMS42IC0yLDQgLTIsNS4yIHYgNy4yIGggMjIuOSBsIDAsMCB6IE0gOTUuOSwxMTQuNiBIIDk1LjcgYyAtMS4xLDAgLTEuOCwtMC43IC0xLjgsLTEuNyB2IC0wLjUgYyAwLC0xIDAuNiwtMS44IDEuNSwtMS44IGggMC41IGMgMSwwIDEuNSwxLjEgMS41LDIgMCwxLjEgLTAuNSwyIC0xLjUsMiB6IG0gLTMuMSwtMi41IHYgMS4xIGMgMCwxIDEuNiwyLjUgMi45LDIuNSAxLjQsMCAyLjYsLTEuMyAyLjYsLTIuOCB2IC0wLjggYyAwLC0xLjIgLTEuMywtMi42IC0yLjUsLTIuNiBIIDk1LjcgYyAtMS40LDAgLTIuOSwxLjQgLTIuOSwyLjYgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTE0LjUsMTA3LjkgYyAwLDAuOSAtMC44LDEuNiAtMS44LDEuNiAtMSwwIC0xLjgsLTAuNyAtMS44LC0xLjYgMCwtMC45IDAuOCwtMS42IDEuOCwtMS42IDEsMCAxLjgsMC43IDEuOCwxLjYgeiBtIC0xMS4yLC03LjIgYyAwLDAuOSAtMC44LDEuNiAtMS44LDEuNiAtMSwwIC0xLjgsLTAuNyAtMS44LC0xLjYgMCwtMC45IDAuOCwtMS42IDEuOCwtMS42IDEsMCAxLjgsMC43IDEuOCwxLjYgeiBtIC01LjUsLTMuNyBjIDAsMC45IC0wLjgsMS42IC0xLjgsMS42IC0xLDAgLTEuOCwtMC43IC0xLjgsLTEuNiAwLC0wLjkgMC44LC0xLjYgMS44LC0xLjYgMSwwIDEuOCwwLjcgMS44LDEuNiB6IE0gMTA4LjksMTA0LjUgYyAwLDAuOSAtMC44LDEuNiAtMS44LDEuNiAtMSwwIC0xLjgsLTAuNyAtMS44LC0xLjYgMCwtMC45IDAuOCwtMS42IDEuOCwtMS42IDEsMCAxLjgsMC43IDEuOCwxLjYgeiBNIDkyLjMsOTMuNSBjIDAsMC45IC0wLjgsMS42IC0xLjgsMS42IC0xLDAgLTEuOCwtMC43IC0xLjgsLTEuNiAwLC0wLjkgMC44LC0xLjYgMS44LC0xLjYgMSwwIDEuOCwwLjcgMS44LDEuNiB6IE0gODYuNSw4OS44IGMgMCwwLjkgLTAuOCwxLjYgLTEuOCwxLjYgLTEsMCAtMS44LC0wLjcgLTEuOCwtMS42IDAsLTAuOSAwLjgsLTEuNiAxLjgsLTEuNiAxLDAgMS44LDAuNyAxLjgsMS42IHogbSAzNS42LDIuNiAxMC44LDAgMCwxNi4xIC0xMC44LDAgeiBtIC01NS45LDI2LjQgdiAwLjIgYyAwLDAuNiAxLjIsMC42IDEuOCwwLjYgaCAzMC44IGMgMC43LDAgMS4xLC0wLjIgMS43LC0wLjMgLTAuMSwtMC44IC0wLjYsLTEuNCAtMS40LC0xLjQgSCA2Ny41IGMgLTAuNSwwIC0xLjQsMC40IC0xLjQsMC45IHogbSAyNi42LC02LjggYyAwLC0xLjIgMS41LC0yLjYgMi45LC0yLjYgaCAwLjIgYyAxLjIsMCAyLjUsMS40IDIuNSwyLjYgdiAwLjggYyAwLDEuNCAtMS4yLDIuOCAtMi42LDIuOCAtMS40LDAgLTIuOSwtMS40IC0yLjksLTIuNSB2IC0xIGggLTAgeiBtIC0yNC44LDAuNiBjIDAsLTEuNiAxLjIsLTMuMiAyLjksLTMuMiAxLjMsMCAyLjgsMS41IDIuOCwyLjYgdiAxLjEgYyAwLDAuOSAtMS40LDIuNSAtMi44LDIuNSAtMS40LDAgLTIuOSwtMS40IC0yLjksLTIuNiB2IC0wLjMgeiBtIC0wLjMsLTMuOCBjIC0wLjUsMSAtMiwzLjQgLTIsNC40IHYgMC42IGMgMCwwLjkgMC4yLDEuMSAwLjMsMS44IDAuNSwwLjEgMC41LDAuMyAxLjEsMC4zIGggMzIuMyBjIDAuNiwwIDAuNSwtMC4yIDEsLTAuMyBsIDAuMiwtMi42IGMgMC4xLC0xLjIgLTEuNCwtMy40IC0xLjgsLTQuMyBsIC04LjIsLTAuMiAtMTUuMSwtMCAtNy44LDAuMiB6IG0gMiwtMi4yIGggMjcuMSBjIC0wLjQsLTEuMyAtMy4zLC03LjEgLTQuMywtNy4xIEggNzQgYyAtMC44LDAgLTQuMiw2IC00LjMsNy4xIHogbSAyNi4yLDcuOCBjIDEuMSwwIDEuNSwtMC45IDEuNSwtMiAwLC0wLjkgLTAuNiwtMiAtMS41LC0yIGggLTAuNSBjIC0xLDAgLTEuNSwwLjggLTEuNSwxLjggdiAwLjUgYyAwLDEgMC44LDEuNyAxLjgsMS43IGggMC4yIGwgMCwwIHogTSA2OS4xLDExMi4zIHYgMC45IGMgMCwwLjYgMSwxLjQgMS43LDEuNCBoIDAuMiBjIDAuNiwwIDEuNSwtMC44IDEuNSwtMS4yIHYgLTEuMiBjIDAsLTAuOCAtMC44LC0xLjUgLTEuNSwtMS41IGggLTAuNSBjIC0wLjYsMCAtMS40LDEgLTEuNCwxLjcgelwifV0saVtcIkdSLklOLklDLlRSQUZGSUMgSU5TUEVDVElPTiBGQUNJTElUWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyMS40LDgxLjcgaCAxLjEgdiAwLjYgYyAwLDAuNiAwLjgsMi4xIDEuMiwyLjQgMC41LDAuNCAxLjksMC45IDIuNywwLjkgMi42LDAgMy45LC0xLjkgMy45LC00LjUgdiAtMC41IGggLTcuNCBjIC0wLjUsMCAtMS4yLDAuOCAtMS40LDEuMSB6IG0gLTIyLjYsMjMuNSBjIDAsLTEuNyAxLjcsLTMgMy40LC0zIDEuNywwIDMuMSwxLjQgMy4xLDMuMSB2IDAuNiBjIDAsMS4zIC0xLjcsMi42IC0zLjEsMi42IC0xLjcsMCAtMy40LC0xLjMgLTMuNCwtMyB2IC0wLjUgeiBtIC0yOS43LDAgYyAwLC0xLjggMS4zLC0zIDMuMSwtMyAxLjcsMCAzLjMsMS40IDMuMywzLjEgdiAwLjMgYyAwLDEuNiAtMS42LDMgLTMuNCwzIC0xLjUsMCAtMywtMS4yIC0zLC0yLjYgdiAtMC44IHogbSAzLjcsLTcgYyAwLC0wLjQgMS42LC00LjIgMS45LC01IDAuNiwtMS43IDAuOSwtMy42IDMuMywtMy42IEggOTYuNSBjIDIuOCwwIDIuMiwxLjggMy4yLDMuNiAwLjIsMC40IDEuOCw0LjUgMS44LDQuOSBIIDcyLjggeiBtIC0zLjcsMSBjIC0yLjEsMCAtMy43LDEuNSAtMy43LDMuNiB2IDkuMiBjIDAsMSAxLjcsMi4zIDMuMSwyLjMgdiA1LjMgYyAwLDEuOCAxLjMsMy4zIDMuMywzLjMgMS40LDAgMy4xLC0xLjYgMy4xLC0yLjYgdiAtNS45IGggMjQuOCB2IDYuMiBjIDAsMSAxLjcsMi4zIDMsMi4zIGggMC4yIGMgMS40LDAgMy4xLC0xLjMgMy4xLC0yLjYgdiAtNS45IGMgMS45LDAgMy4zLC0xLjQgMy4zLC0zLjMgdiAtOC4xIGMgMCwtMiAtMS40LC0zLjMgLTMuMiwtMy43IC0xLjQsLTAuMiAtMS4xLC0wLjggLTEuNiwtMS45IC0wLjQsLTAuOCAtMC43LC0xLjYgLTEsLTIuNCAtMS4yLC0yLjYgLTIuMiwtOC4yIC01LjYsLTguMiBoIC0yMS4yIGMgLTIuOSwwIC0zLjUsMy4zIC00LjUsNS41IC0wLjYsMS40IC0yLjcsNS44IC0zLDcgeiBtIDU2LjUsMjAuMiAwLjMsLTMuMyAwLjUsLTYuMiBoIDEuNyBsIDAuOCwxMi45IGggNS44IFYgODguOSBjIDAsLTAuNiAtMS4yLC0xLjkgLTIsLTEuOSBsIC0wLjYsMC4xIC05LjksMTQuNiBoIDguNCB2IDMuNiBoIC0xMS4yIHYgMTcuNiBoIDYuMSBsIC0wLC0wLjggMC4yLC0yLjYgeiBtIC0xNi44LC0zMC44IGMgMC4yLC0wLjkgMSwtMS41IDIsLTEuNiB2IDIuMiBoIC0yIGMgMCwxLjQgMC44LDIuMiAyLjIsMi4yIHYgLTIgaCAyIGMgLTAsMS4zIC0wLjgsMS40IC0xLjQsMiBoIDcuOCBsIDAsMTAuMiAxMCwtMTQuMyAtMTAuMSwtMC4yIGggLTYuNCB2IC03LjYgYyAwLC0xLjIgLTAuOCwtMi4yIC0xLjksLTIuMiBoIC0wLjQgYyAtMi4yLDAgLTIsMi40IC0yLDQuNyAwLDEuMyAtMC40LDUuOCAwLjIsNi42IHogbSAwLDAgdiAwLjYgaCAyIHYgLTIuMiBjIC0xLjEsMCAtMS44LDAuNyAtMiwxLjYgeiBtIDIuMiwyLjggaCAwLjYgYyAwLjYsLTAuNiAxLjQsLTAuNyAxLjQsLTIgaCAtMiB2IDIgeiBtIDE5LjMsLTEyIDAsLTIgLTguOCwtMCAxLDIgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTMwLjMsNzkuNCAtNy45LC0wIDAuNCwxLjMgNy41LDAgeiBtIC04LjEsMjIuMiA5LjksLTE0LjYgMC42LC0wLjEgLTMuMSwwLjIgLTEwLDE0LjMgLTAuMSwzLjcgMTEuMiwwIDAsLTMuNiB6IG0gLTIzLjMsMy42IHYgMC41IGMgMCwxLjcgMS43LDMgMy40LDMgMS40LDAgMy4xLC0xLjQgMy4xLC0yLjYgdiAtMC42IGMgMCwtMS43IC0xLjQsLTMuMSAtMy4xLC0zLjEgLTEuOCwwIC0zLjQsMS4zIC0zLjQsMyB6IG0gLTI5LjcsMCB2IDAuOCBjIDAsMS40IDEuNSwyLjYgMywyLjYgMS44LDAgMy40LC0xLjMgMy40LC0zIHYgLTAuMyBjIDAsLTEuNiAtMS42LC0zLjEgLTMuMywtMy4xIC0xLjgsMCAtMy4xLDEuMiAtMy4xLDMgeiBtIDMuNywtNyBoIDI4LjYgYyAwLC0wLjUgLTEuNSwtNC41IC0xLjgsLTQuOSAtMSwtMS44IC0wLjQsLTMuNiAtMy4yLC0zLjYgSCA3Ny45IGMgLTIuNCwwIC0yLjYsMS45IC0zLjMsMy42IC0wLjIsMC44IC0xLjgsNC42IC0xLjgsNSB6XCJ9XSxpW1wiR1IuSU4uSUMuVFVOTkVMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTQuNCwxMTYuOCBjIDAsLTMuNSAyLjYsLTcuMiA1LjksLTcuMiAzLjIsMCA1LjYsNCA1LjYsNy4xIHYgMC44IEggOTQuNCB2IC0wLjcgeiBtIDI3LjIsLTQuNyA5LC00LjIgYyAwLjIsMS43IDAuOCwzLjIgMSw1LjIgMC4zLDEuOCAwLjYsMy4zIDAuNiw1LjYgdiAwLjUgaCAtMTAgbCAtMC43LC03LjEgeiBtIC00My41LDQuOSAwLjEsMi4yIEggNjggYyAwLC0xLjYgMC4zLC0zLjggMC42LC01LjQgMC4xLC0wLjcgMC4yLC0xLjggMC41LC0yLjQgMC4xLC0wLjIgMC43LC0yLjIgMC43LC0yLjQgbCA5LjIsMy4xIC0wLjgsNC45IHogbSAzOSwtMTYuOCA2LjIsLTYuMiBjIDAuNiwxIDEuMiwxLjggMS45LDIuOCAwLjgsMS4xIDEuMiwyIDEuOCwzLjEgMC42LDEgMi44LDUuNiAyLjgsNi45IGwgLTguNyw0LjIgYyAtMC4xLC0yLjUgLTMsLTkgLTQsLTEwLjYgeiBtIC0zNy45LDEwLjQgLTkuMSwtMyBjIDAuMSwtMS4yIDIuNCwtNS45IDMsLTcgMS4yLC0yLjEgMywtNC4yIDQsLTYgbCA3LjYsNC40IGMgLTAuMiwwLjUgLTIuNiw0LjMgLTMsNS40IC0wLjgsMS43IC0xLjYsNC45IC0yLjQsNi4yIHogTSAxMTEuMiw4My4yIGMgMi44LDAuNyA5LjgsNy4xIDExLjMsOS40IGwgLTYuMyw2LjIgYyAtMC41LC0xLjggLTYsLTYuOSAtOC4yLC03LjQgbCAzLjIsLTguMiB6IE0gNzguMSw5My40IEMgNzkuNyw5MSA4OCw4My44IDkxLDgzLjEgTCA5NC45LDkxIGMgLTIuNiwwLjYgLTcuOSw1IC05LjIsNi45IGwgLTcuNiwtNC41IHogTSA5Mi42LDgyLjQgYyAyLjYsLTAuNiA0LjEsLTEuOCA3LjgsLTEuOCBoIDEuNCBjIDQsMCA1LjMsMS4yIDguMSwxLjggLTAsMSAtMS45LDUuMiAtMi4zLDYuMyAtMC42LDEuNCAtMC40LDIgLTIuMiwxLjUgLTEuMSwtMC4zIC0yLjQsLTAuNiAtMy42LC0wLjYgaCAtMSBMIDk2LjEsOTAuMyA5Mi42LDgyLjQgeiBNIDY2LjUsMTE5LjggSCA2MC40IGMgLTAuNCwwIC0wLjUsMC4xIC0wLjUsMC41IHYgMC4yIGMgMCwwLjQgMC4xLDAuNSAwLjUsMC41IGggNzkgYyAwLjMsMCAwLjcsLTAuMyAwLjcsLTAuNSAwLC0wLjQgLTAuMywtMC43IC0wLjcsLTAuNyBoIC01LjcgdiAtMS41IGMgMCwtMTAuMSAtNC45LC0yMC40IC05LjUsLTI1LjkgQyAxMTkuOCw4NyAxMTEuNiw3OSAxMDIuMiw3OSBoIC0yIGMgLTkuNywwIC0xOC44LDguNCAtMjMuNiwxMy43IC01LDUuNiAtMTAuMSwxNi42IC0xMC4xLDI3LjEgbCAwLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gNzksMTEyIC05LjMsLTMuMSBjIC0wLDAuMiAtMC42LDIuMiAtMC43LDIuNCAtMC4yLDAuNiAtMC40LDEuNyAtMC41LDIuNCAtMC4yLDEuNSAtMC41LDMuOCAtMC41LDUuNCBoIDEwLjMgbCAtMC4xLC0yLjIgMC44LC00LjkgeiBtIDE1LjUsNS40IGggMTEuNCB2IC0wLjggYyAwLC0zLjEgLTIuNCwtNy4xIC01LjYsLTcuMSAtMy4zLDAgLTUuOSwzLjggLTUuOSw3LjIgdiAwLjcgeiBtIDI3LjksMS43IGggMTAgdiAtMC41IGMgMCwtMi4zIC0wLjQsLTMuOCAtMC42LC01LjYgLTAuMywtMiAtMC45LC0zLjUgLTEsLTUuMiBsIC05LDQuMiAwLjcsNy4xIHogbSAtNS4yLC0xOSBjIDEuMSwxLjYgNCw4LjEgNCwxMC42IGwgOC43LC00LjIgYyAwLC0xLjIgLTIuMSwtNS44IC0yLjgsLTYuOCAtMC43LC0xLjEgLTEuMSwtMiAtMS44LC0zLjEgLTAuNywtMSAtMS4zLC0xLjggLTEuOSwtMi44IGwgLTYuMiw2LjIgeiBtIC0zNy45LDEwLjQgYyAwLjcsLTEuNCAxLjYsLTQuNSAyLjQsLTYuMiAwLjUsLTEuMSAyLjksLTQuOSAzLC01LjQgbCAtNy42LC00LjQgYyAtMSwxLjggLTIuOCw0IC00LDYgLTAuNiwxLjEgLTIuOSw1LjggLTMsNyBsIDkuMSwzIHogbSAyOC44LC0xOS4xIGMgMi4xLDAuNSA3LjYsNS42IDguMiw3LjQgbCA2LjMsLTYuMSBjIC0xLjUsLTIuMyAtOC41LC04LjggLTExLjMsLTkuNSBsIC0zLjIsOC4yIHogbSAtMzAsMiA3LjYsNC42IEMgODcsOTYgOTIuMyw5MS42IDk0LjksOTEgbCAtMy44LC03LjkgYyAtMy4xLDAuNyAtMTEuNCw3LjkgLTEzLDEwLjMgeiBNIDkyLjYsODIuNCBsIDMuNSw3LjkgNC42LC0wLjYgaCAxIGMgMS4zLDAgMi42LDAuMyAzLjYsMC42IDEuNywwLjQgMS42LC0wLjEgMi4yLC0xLjUgMC40LC0xLjEgMi4zLC01LjMgMi4zLC02LjMgLTIuOCwtMC42IC00LC0xLjkgLTguMSwtMS45IGggLTEuNCBjIC0zLjYsMCAtNS4yLDEuMyAtNy43LDEuOSB6XCJ9XSxpW1wiR1IuSU4uSUMuUFVNUElORyBTVEFUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODMuMiw4My44IDAsMS4yIDAsNS42IC0xMS4zLDAgMCwtMCBjIC0wLjIsMCAtMC4zLDAgLTAuNSwwIC0wLjEsNi42ZS00IC0wLjEsLTkuNmUtNCAtMC4yLDAgLTIuNywwIC00LjksMC4zIC02LjUsMS43IC0xLjQsMS4yIC0yLDMuMyAtMi4xLDUuOSBsIC0wLjEsMCAwLDEuMiBjIDhlLTYsMC4xIC0wLDAuMiAtMCwwLjMgbCAwLDAgMCwxNC4xIC0yLjgsMCAwLDIuNCA4MC44LDAgMCwtMi40IC0yLjgsMCAwLC0xNCAwLC0xLjYgLTAuMSwwIGMgLTAuMSwtMi42IC0wLjUsLTQuNiAtMS44LC01LjkgLTEuNSwtMS40IC0zLjgsLTEuNyAtNi44LC0xLjcgbCAwLC0wIC0wLjMsMCBjIC0wLjIsLTUuNmUtNCAtMC4zLC0wIC0wLjQsLTAgbCAwLDAgLTExLjMsMCAwLC01LjYgMCwtMS4yIC0xLjIsMCAtMzEuMiwwIC0xLjIsMCB6IG0gMi40LDIuNCAyOC44LDAgMCwyNy4yIC0yOC44LDAgMCwtMjcuMiB6IE0gNzEuMiw5MyBjIDAuMSwtMCAwLjEsMCAwLjIsMCBsIDExLjgsMCAwLDguNCAtNy41LDAgYyAtMC44LC0wLjEgLTEuNCwtMC4xIC0yLC0wIC0wLDAgLTAsMCAtMC4xLDAgLTAsMCAtMCwtMCAtMCwwIGwgMCwwIGMgLTAuNSwwLjEgLTEuMiwwLjMgLTEuNSwwLjggLTAuNCwwLjUgLTAuNCwxLjEgLTAuNCwxLjYgLTAsMC40IC0wLDAuOCAwLDEuMiBsIC0wLDAgMCw4LjggLTYuOCwwIDAsLTE0LjUgYyAwLC0zIDAuNSwtNC41IDEuNCwtNS4zIEMgNjcuMSw5My4zIDY4LjcsOTMuMSA3MS4yLDkzIHogbSA0NS42LDAgMTEuOCwwIGMgMC4xLDkuN2UtNCAwLjEsLTAgMC4yLDAgMi44LDAuMSA0LjUsMC40IDUuMiwxLjEgMC44LDAuNyAxLjIsMi4zIDEuMiw1LjIgbCAwLDE0LjUgLTYuOCwwIDAsLTggMCwwIGMgLTAsLTAuMSAtMCwtMC4zIC0wLC0wLjQgMCwtMC45IDAuMiwtMS42IC0wLjEsLTIuNSAtMC4xLC0wLjUgLTAuNiwtMS4yIC0xLjIsLTEuNCAtMC4yLC0wLjEgLTAuNSwtMCAtMC43LC0wIGwgMCwtMC4xIC05LjYsMCAwLC04LjQgeiBNIDc0LDEwMy44IGwgOS4yLDAgMCwxMCAtOS4yLDAgMCwtOC41IDAsMCBjIDAsLTAuNiAtMCwtMS4xIC0wLC0xLjQgMCwtMC4xIC0wLC0wIDAsLTAuMSB6IG0gNDIuOCwwIDkuMiwwIGMgMCwwLjIgMCwwLjggMCwxLjYgbCAtMCwwIDAsOC40IC05LjIsMCAwLC0xMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTYuOCw5MyAxMS44LDAgYyAwLjEsOS43ZS00IDAuMSwtMCAwLjIsMCAyLjgsMC4xIDQuNSwwLjQgNS4yLDEuMSAwLjgsMC43IDEuMiwyLjMgMS4yLDUuMiBsIDAsMTQuNSAtNi44LDAgMCwtOCAwLDAgYyAtMCwtMC4xIC0wLC0wLjMgLTAsLTAuNCAwLC0wLjkgMC4yLC0xLjYgLTAuMSwtMi41IC0wLjEsLTAuNSAtMC42LC0xLjIgLTEuMiwtMS40IC0wLjIsLTAuMSAtMC41LC0wIC0wLjcsLTAgbCAwLC0wLjEgLTkuNiwwIDAsLTguNCB6IG0gLTQ1LjYsMCBjIDAuMSwtMCAwLjEsMCAwLjIsMCBsIDExLjgsMCAwLDguNCAtNy41LDAgYyAtMC44LC0wLjEgLTEuNCwtMC4xIC0yLC0wIC0wLDAgLTAsMCAtMC4xLDAgLTAsMCAtMCwtMCAtMCwwIGwgMCwwIGMgLTAuNSwwLjEgLTEuMiwwLjMgLTEuNSwwLjggLTAuNCwwLjUgLTAuNCwxLjEgLTAuNCwxLjYgLTAsMC40IC0wLDAuOCAwLDEuMiBsIC0wLDAgMCw4LjggLTYuOCwwIDAsLTE0LjUgYyAwLC0zIDAuNSwtNC41IDEuNCwtNS4zIEMgNjcuMSw5My4zIDY4LjcsOTMuMSA3MS4yLDkzIHogbSAxNC40LC02LjggMjguOCwwIDAsMjcuMiAtMjguOCwwIDAsLTI3LjIgelwifV0saVtcIkdSLklOLklDLlJFU0VSVk9JUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEyNy4zIDY5LjEgQyAxMjcgNjkuMSAxMjYuNyA2OS4yIDEyNi40IDY5LjIgQyAxMjMuNCA2OS41IDEyMC44IDcxLjkgMTE4LjQgNzQuNSBDIDExNS45IDc3IDExMy41IDc5LjcgMTExLjUgODAuOSBDIDEwOC45IDgyLjQgMTA1LjUgODIuNSAxMDEuOSA4Mi42IEMgOTguMyA4Mi43IDk0LjcgODIuOSA5MS44IDg0LjkgQyA4OS43IDg2LjUgODguNiA4OC41IDg3LjUgOTAuMyBDIDg2LjQgOTIgODUuMiA5My40IDgyLjcgOTQuMiBDIDc5LjQgOTUuMyA3MiA5Ni40IDY2LjkgOTguOCBDIDY0LjMgMTAwLjEgNjIuMSAxMDEuNyA2MS41IDEwNCBDIDYwLjggMTA2LjMgNjEuNyAxMDkuMSA2NC43IDExMi4zIEwgNjUuMSAxMTEuOSBMIDY1LjEgMTIwLjEgTCA4NC4zIDEyMC4xIEwgODQuMyAxMjkuNyBMIDg2LjcgMTI5LjcgTCA4Ni43IDEyMC4xIEwgOTcuOSAxMjAuMSBMIDk3LjkgMTI5LjcgTCAxMDAuMyAxMjkuNyBMIDEwMC4zIDEyMC4xIEwgMTE3LjEgMTIwLjEgTCAxMTcuMSAxMTIuNSBDIDExNy40IDExMi4yIDExNy43IDExMS45IDExOCAxMTEuNSBDIDExOSAxMTAuMSAxMTkuMyAxMDguNSAxMTkuNSAxMDYuOSBDIDExOS44IDEwMy43IDExOS41IDEwMC41IDEyMS43IDk3LjcgQyAxMjMuMSA5NS45IDEyNiA5NS40IDEyOS4xIDk0LjcgQyAxMzIuMSA5NC4xIDEzNS40IDkzLjMgMTM3LjIgOTAuNCBDIDEzOS40IDg2LjcgMTM5LjEgODEuMyAxMzcuMiA3Ni44IEMgMTM2LjMgNzQuNSAxMzQuOSA3Mi41IDEzMyA3MS4xIEMgMTMxLjQgNjkuOSAxMjkuNSA2OS4xIDEyNy4zIDY5LjEgeiBNIDEyNy40IDcwLjcgQyAxMjkuMiA3MC43IDEzMC43IDcxLjMgMTMyLjEgNzIuMyBDIDEzMy42IDczLjUgMTM0LjkgNzUuNCAxMzUuOCA3Ny40IEMgMTM3LjUgODEuNSAxMzcuNiA4Ni42IDEzNS44IDg5LjYgQyAxMzQuNSA5MS44IDEzMS43IDkyLjUgMTI4LjcgOTMuMiBDIDEyNS43IDkzLjggMTIyLjQgOTQuMyAxMjAuNSA5Ni43IEMgMTE3LjggMTAwIDExOC4yIDEwMy43IDExNy45IDEwNi43IEMgMTE3LjggMTA4LjIgMTE3LjUgMTA5LjUgMTE2LjcgMTEwLjYgQyAxMTYuNSAxMTAuOCAxMTYuMyAxMTEuMSAxMTYuMSAxMTEuMyBMIDY1LjggMTExLjMgTCA2NS45IDExMS4zIEMgNjMuMSAxMDguMiA2Mi42IDEwNi4xIDYzIDEwNC40IEMgNjMuNSAxMDIuOCA2NS4yIDEwMS40IDY3LjYgMTAwLjMgQyA3Mi4zIDk4IDc5LjUgOTYuOSA4My4xIDk1LjggQyA4Ni4xIDk0LjggODcuNyA5Mi45IDg4LjggOTEuMSBDIDkwIDg5LjMgOTAuOSA4Ny41IDkyLjggODYuMiBDIDk1LjEgODQuNSA5OC40IDg0LjMgMTAyIDg0LjIgQyAxMDUuNSA4NC4xIDEwOS4yIDg0LjEgMTEyLjMgODIuMyBDIDExNC43IDgwLjggMTE3LjEgNzguMSAxMTkuNSA3NS42IEMgMTIxLjkgNzMuMSAxMjQuNCA3MSAxMjYuNiA3MC44IEMgMTI2LjkgNzAuOCAxMjcuMSA3MC43IDEyNy40IDcwLjcgeiBcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEyNy40LDcwLjcgYyAxLjgsLTAgMy4zLDAuNiA0LjcsMS42IDEuNSwxLjIgMi44LDMgMy43LDUuMSAxLjcsNC4xIDEuOSw5LjIgMC4xLDEyLjIgLTEuMywyLjIgLTQuMSwzIC03LjEsMy42IC0zLDAuNiAtNi4zLDEuMSAtOC4zLDMuNSAtMi42LDMuMyAtMi4zLDcuMSAtMi42LDEwIC0wLjEsMS41IC0wLjQsMi44IC0xLjIsMy44IC0wLjIsMC4yIC0wLjQsMC41IC0wLjYsMC43IGwgLTUwLjIsMCAwLC0wIGMgLTIuOCwtMyAtMy4zLC01LjIgLTIuOCwtNi44IDAuNSwtMS42IDIuMSwtMyA0LjUsLTQuMiA0LjgsLTIuMyAxMS45LC0zLjQgMTUuNiwtNC41IDMsLTEgNC41LC0yLjggNS43LC00LjYgMS4yLC0xLjggMi4xLC0zLjYgMy45LC00LjkgMi4zLC0xLjcgNS43LC0xLjkgOS4yLC0yIDMuNSwtMC4xIDcuMywtMC4xIDEwLjMsLTEuOSAyLjUsLTEuNCA0LjgsLTQuMiA3LjIsLTYuNyAyLjQsLTIuNSA0LjksLTQuNiA3LjEsLTQuOCAwLjMsLTAgMC41LC0wLjEgMC44LC0wLjEgeiBtIC00MS45LDQ5IDEzLjYsMCAwLDEwIC0xMy42LDAgelwifV0saVtcIkdSLklOLklDLlNUT1JBR0UgVE9XRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMTguMywxMjEgMC40LDUuMyAwLjcsMTIuOCBoIDIuOSBjIDAsLTYuMSAtMS4xLC0xMi42IC0xLjEsLTE4LjYgMCwtMy40IC0wLjQsLTYuMiAtMC40LC05LjYgLTAuMSwtNS4zIDAuMiwtMyAyLjYsLTYuNiBsIC0wLjMsLTMuMSAwLC0xLjEgaCAtNC4yIFYgODQgYyAtMi41LDAuNiAtNS4yLDEuOCAtOC4zLDIuNiAtMi42LDAuNiAtNi40LDEuNCAtOS40LDEuNCBoIC0yLjQgYyAtNy42LDAgLTEyLjIsLTIuNiAtMTgsLTQgdiAxNi4yIGggLTQuMiB2IDAuNyBsIC0wLjMsMy43IDMuMiwzLjcgLTIsMzAuOCBoIDMuMSB2IC0zLjMgbCAxLjQsLTIxLjcgYyAwLjUsMC40IDIuMSwyLjcgMywzLjYgMC45LDAuOSAyLjQsMi4yIDMuNSwyLjkgMi4yLDEuNSA1LjYsMy44IDguNyw0LjEgdiAxNC40IGggNS42IHYgLTE0LjQgYyAzLjcsLTAuOSA2LjIsLTIuMiA4LjgsLTQuMyAxLjQsLTEuMSAyLjIsLTEuOCAzLjQsLTMgMC43LC0wLjcgMi41LC0zLjIgMywtMy40IHYgMy4xIGwgMC4yLDMuOCB6IE0gOTkuNyw4NS4yIGMgNy40LDAgMjMsLTQuNCAyNS43LC04LjQgLTIuOCwtMS41IC0yNS4xLC0xNiAtMjUuMywtMTYgLTAuNCwwIC0yNC45LDE1LjQgLTI1LjUsMTYuMiAyLjYsMy41IDE2LjYsOC4yIDIzLjMsOC4yIGggMS44IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk3LjksODUuMiBjIC00LjMsMCAtMTEuNywtMiAtMTcsLTQuMyBsIC0wLDMuMiBjIDUuOCwxLjQgMTAuNCw0IDE4LDQgaCAyLjQgYyAzLDAgNi45LC0wLjggOS40LC0xLjQgMywtMC44IDUuOCwtMiA4LjMsLTIuNiBWIDgwLjggYyAtNiwyLjQgLTE0LjQsNC40IC0xOS4zLDQuNCBIIDk3LjkgelwifV0saVtcIkdSLklOLklDLlNVUkZBQ0UgV0FURVIgSU5UQUtFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gNjMuNCA3NS41IEwgNjMuNCA3Ni4zIEwgNjMuNCA5MC43IEwgNjMuNCA5MS41IEwgNjQuMiA5MS41IEwgNzUuNyA5MS41IEMgNzYuNSA5Ni42IDc5LjggOTkuMSA4My4zIDEwMSBDIDg3LjEgMTAyLjkgOTEuMyAxMDQuMyA5My44IDEwNy41IEMgOTQuOCAxMDguOSA5NC45IDExMC43IDk1LjIgMTEyLjYgQyA5NS40IDExMy42IDk1LjYgMTE0LjUgOTYuMiAxMTUuNCBDIDk2LjcgMTE2LjIgOTcuNSAxMTcgOTguOCAxMTcuNSBDIDEwMS4yIDExOC42IDEwOC43IDEyMC43IDExNS45IDEyMi40IEMgMTE5LjYgMTIzLjIgMTIzLjEgMTIzLjkgMTI2IDEyNC4zIEMgMTI3LjUgMTI0LjQgMTI4LjcgMTI0LjUgMTI5LjggMTI0LjUgQyAxMzAuOCAxMjQuNCAxMzEuNiAxMjQuMyAxMzIuMiAxMjMuOCBDIDEzNC44IDEyMS43IDEzNi4xIDExOS45IDEzNi41IDExOC4zIEMgMTM2LjggMTE2LjggMTM2LjEgMTE1LjQgMTM1IDExNC40IEMgMTMzLjkgMTEzLjQgMTMyLjQgMTEyLjUgMTMxIDExMS43IEMgMTI5LjcgMTEwLjggMTI4LjQgMTA5LjkgMTI3LjcgMTA4LjggQyAxMjQuMiAxMDMuNiAxMjEgOTUuNSAxMTMuNCA5MS41IEwgMTE5IDkxLjUgTCAxMTkuOCA5MS41IEwgMTE5LjggOTAuNyBMIDExOS44IDc2LjMgTCAxMTkuOCA3NS41IEwgMTE5IDc1LjUgTCA2NC4yIDc1LjUgTCA2My40IDc1LjUgeiBNIDY1IDc3LjEgTCAxMTguMiA3Ny4xIEwgMTE4LjIgODkuOSBMIDEwOS40IDg5LjkgTCAxMDkuNCA4MS4xIEwgNzMuOCA4MS4xIEwgNzMuOCA4OS45IEwgNjUgODkuOSBMIDY1IDc3LjEgeiBNIDc2LjkgOTEuNSBMIDExMC41IDkxLjUgQyAxMTkuNCA5NC44IDEyMi43IDEwMy41IDEyNi43IDEwOS41IEMgMTI3LjYgMTEwLjggMTI5IDExMS44IDEzMC40IDExMi43IEMgMTMxLjggMTEzLjYgMTMzLjIgMTE0LjQgMTM0LjIgMTE1LjMgQyAxMzUuMSAxMTYuMiAxMzUuNiAxMTcgMTM1LjMgMTE4LjEgQyAxMzUuMSAxMTkuMiAxMzQgMTIwLjggMTMxLjQgMTIyLjkgQyAxMzEuMyAxMjMgMTMwLjYgMTIzLjIgMTI5LjcgMTIzLjMgQyAxMjguOCAxMjMuMyAxMjcuNiAxMjMuMyAxMjYuMiAxMjMuMSBDIDEyMy4zIDEyMi44IDExOS44IDEyMi4xIDExNi4yIDEyMS4zIEMgMTA5IDExOS42IDEwMS41IDExNy4zIDk5LjMgMTE2LjQgQyA5OC4yIDExNiA5Ny42IDExNS40IDk3LjIgMTE0LjggQyA5Ni44IDExNC4xIDk2LjYgMTEzLjMgOTYuNCAxMTIuNCBDIDk2LjEgMTEwLjYgOTYgMTA4LjUgOTQuNyAxMDYuOCBDIDkxLjkgMTAzLjIgODcuNiAxMDEuOCA4My45IDk5LjkgQyA4MC41IDk4LjEgNzcuNyA5Ni4xIDc2LjkgOTEuNSB6IFwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gNzYuOSw5MS41IDMzLjYsMCBjIDguOSwzLjMgMTIuMiwxMiAxNi4yLDE4IDAuOSwxLjMgMi4zLDIuMyAzLjcsMy4yIDEuNCwwLjkgMi44LDEuNyAzLjgsMi42IDAuOSwwLjkgMS40LDEuNyAxLjIsMi44IC0wLjIsMS4xIC0xLjMsMi43IC0zLjksNC44IC0wLjIsMC4xIC0wLjgsMC4zIC0xLjcsMC40IC0wLjksMCAtMi4yLC0wIC0zLjYsLTAuMiAtMi44LC0wLjMgLTYuNCwtMSAtMTAsLTEuOCAtNy4yLC0xLjcgLTE0LjcsLTMuOSAtMTYuOSwtNC44IC0xLjEsLTAuNCAtMS42LC0xIC0yLjEsLTEuNyAtMC40LC0wLjcgLTAuNiwtMS41IC0wLjgsLTIuMyAtMC4zLC0xLjggLTAuNCwtMy45IC0xLjcsLTUuNiAtMi44LC0zLjYgLTcuMSwtNSAtMTAuOCwtNi45IEMgODAuNSw5OC4xIDc3LjcsOTYuMSA3Ni45LDkxLjUgeiBtIC0xMS45LC0xNC40IDUzLjIsMCAwLDEyLjggLTguOCwwIDAsLTguOCAtMzUuNiwwIDAsOC44IC04LjgsMCAwLC0xMi44IHpcIn1dLGlbXCJHUi5JTi5JQy5XQVJFSE9VU0UvU1RPUkFHRSBGQUNJTElUWVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEzLGZvbnRzaXplOjIzLHRleHQ6XCJTVE9SXCJ9XSxpW1wiR1IuSU4uSUMuV0FTVEVXQVRFUiBUUkVBVE1FTlQgRkFDSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDcuMiwxMTQuOCBjIDEuOSwwIDMuOSwtMSA0LjMsLTIuNCAxLjUsMSAxLjcsMi40IDQuNiwyLjQgaCAwLjQgYyAxLjgsMCAzLjgsLTEuMSA0LjEsLTIuNCBoIDAuNCBjIDAuNCwxLjQgMi41LDIuNCA0LjUsMi40IGggMC40IGMgMi43LDAgMywtMS41IDQuNSwtMi40IDAuNCwxLjQgMi42LDIuNCA0LjUsMi40IHYgLTEuNSBjIC0yLjIsMCAtMy41LC0xLjYgLTMuOSwtMy40IGggLTEuNSBjIC0wLDEuOCAtMS43LDMuNCAtMy42LDMuNCBoIC0wLjQgYyAtMi4yLDAgLTMuNiwtMS40IC0zLjgsLTMuNCBoIC0xLjcgbCAtMC4yLDEuMyBjIC0xLDAuNyAtMS4xLDIgLTMuMywyIGggLTAuNCBjIC0zLjMsMCAtMy4yLC0zLjQgLTQuMSwtMy40IGggLTEuMyBjIC0wLjIsMiAtMS40LDMuNCAtMy42LDMuNCB2IDEuNSB6IG0gLTIuMiwtMzMuMyBoIDMyIHYgMzcgaCAtMzIgViA4MS41IHogTSA2NS4xLDExNC44IHYgLTEuNSBjIDIsMCAzLjcsLTEuNiAzLjgsLTMuNCBoIDEuOSBjIDAsMS44IDEuNSwzLjQgMy40LDMuNCBoIDAuNCBjIDEuOCwwIDMuNSwtMS42IDMuNiwtMy40IGggMS45IGMgMCwyIDEuNywzLjQgMy44LDMuNCBoIDAuMiBjIDIuMiwwIDMuMiwtMS42IDMuNiwtMy40IGggMS43IGMgMCwyIDEuNywzLjQgMy44LDMuNCB2IDEuNSBjIC0yLDAgLTQuMSwtMSAtNC41LC0yLjQgLTEuNCwwLjkgLTEuNywyLjUgLTQuNiwyLjUgaCAtMC42IGMgLTIuOSwwIC0zLjEsLTEuNSAtNC41LC0yLjQgLTAuNCwxLjMgLTIuNCwyLjQgLTQuMSwyLjQgSCA3NC4xIGMgLTIuNCwwIC0zLjQsLTEuMiAtNC41LC0yLjQgLTAuNCwxLjQgLTIuNiwyLjQgLTQuNSwyLjQgbCAwLDAgeiBNIDk2LjUsOTMuNCBoIDYuNyB2IDEzLjMgSCA5Ni41IFYgOTMuNCB6IG0gLTMxLjQsNy45IGMgMiwwIDMuNiwtMS41IDMuOCwtMy40IGggMS45IGMgMC4yLDEuOCAxLjQsMy40IDMuNCwzLjQgaCAwLjQgYyAxLjgsMCAzLjUsLTEuNyAzLjYsLTMuNCBoIDEuOSBjIDAsMiAxLjcsMy40IDMuOCwzLjQgaCAwLjIgYyAxLjUsMCAzLjQsLTEuNSAzLjQsLTIuNiB2IC0wLjggaCAxLjkgYyAwLDEuOSAxLjgsMy40IDMuOCwzLjQgdiAxLjUgYyAtMy42LDAgLTMuOCwtMiAtNC45LC0yLjIgLTAuNCwxLjMgLTIuNSwyLjIgLTQuMiwyLjIgaCAtMC42IGMgLTEuNywwIC0zLjgsLTEgLTQuMSwtMi4yIC0xLDAuMyAtMS40LDIuMiAtNC41LDIuMiBIIDc0LjEgYyAtMi43LDAgLTMsLTEuMyAtNC41LC0yLjIgLTEsMS40IC0yLjIsMi4yIC00LjUsMi4yIHYgLTEuNSBsIDAsMCB6IG0gMCwtMTIgYyAyLDAgMy42LC0xLjUgMy44LC0zLjQgaCAxLjkgYyAwLjEsMS44IDEuNCwzLjQgMy40LDMuNCBoIDAuNCBjIDEuOCwwIDMuNSwtMS43IDMuNiwtMy40IGggMS45IGMgMCwyIDEuNywzLjQgMy44LDMuNCBoIDAuMiBjIDEuNSwwIDMuNCwtMS41IDMuNCwtMi42IHYgLTAuOCBoIDEuOSBjIDAsMS45IDEuOCwzLjQgMy44LDMuNCB2IDEuNSBjIC0zLjEsMCAtMywtMSAtNC43LC0yIC0xLjQsMSAtMS43LDIuMSAtNC40LDIuMSBoIC0wLjYgYyAtMi43LDAgLTIuOSwtMS4xIC00LjMsLTIgLTEuNiwxIC0xLjYsMiAtNC41LDIgSCA3My45IGMgLTIuNCwwIC0yLjksLTEuMiAtNC4xLC0yIC0xLjYsMSAtMS43LDIgLTQuNywyIHYgLTEuNSBsIDAsMCB6IG0gMzEuNCwyMS4zIGggNi43IHYgMTAuMSBoIDM1LjYgViA3OS40IEwgMTAzLjMsNzkuMiBWIDg5LjUgSCA5Ni41IFYgNzkuNCBMIDYxLjIsNzkuMiB2IDQxLjYgaCAzNS40IHYgLTEwLjEgeiBtIDE0LjIsLTEyLjIgYyAwLDEuNCAtMS44LDIuOCAtMy42LDIuOCB2IDEuNSBjIDMuNCwwIDMuNSwtMS45IDQuNywtMi4yIDAuNCwxLjMgMi43LDIuMiA0LjUsMi4yIGggMC4yIGMgMi45LDAgMywtMS4zIDQuMywtMi4yIDEuMiwwLjkgMS43LDIuMiA0LjMsMi4yIGggMC44IGMgMi42LDAgMywtMS4zIDQuMywtMi4yIDEuNCwxIDEuNSwyLjIgNC42LDIuMiB2IC0xLjUgYyAtMS43LDAgLTMuOCwtMS42IC0zLjgsLTIuOCB2IC0wLjYgaCAtMS43IGMgLTAuMSwxLjggLTEuNiwzLjQgLTMuNiwzLjQgaCAtMC42IGMgLTEuNCwwIC0zLjQsLTEuNCAtMy40LC0yLjQgdiAtMC45IGggLTEuOSBjIDAsMS43IC0xLjcsMy40IC0zLjUsMy40IGggLTAuNCBjIC0xLjksMCAtMy41LC0xLjUgLTMuNiwtMy40IGggLTEuOCB2IDAuNiB6IG0gMCwtMTIgYyAwLDEuNCAtMS44LDIuOCAtMy42LDIuOCB2IDEuNSBjIDEuOCwwIDQsLTAuOSA0LjMsLTIuMiAxLjYsMS4xIDEuNywyLjIgNC45LDIuMiBoIDAuNCBjIDIuNiwwIDIuOSwtMS4zIDQuMywtMi4yIDAuMywxLjMgMi40LDIuMyA0LjEsMi4zIGggMC44IGMgMi43LDAgMywtMS4zIDQuNSwtMi4yIDAuNCwxLjMgMi43LDIuMiA0LjUsMi4yIHYgLTEuNSBjIC0xLjcsMCAtMy44LC0xLjYgLTMuOCwtMi44IHYgLTAuNiBoIC0xLjcgYyAtMC4xLDEuOCAtMS42LDMuNCAtMy42LDMuNCBoIC0wLjYgYyAtMS42LDAgLTMuNCwtMS40IC0zLjQsLTIuOCB2IC0wLjYgaCAtMS45IGMgMCwxLjcgLTEuNywzLjQgLTMuNSwzLjQgaCAtMC40IGMgLTEuOSwwIC0zLjUsLTEuNSAtMy42LC0zLjQgaCAtMS44IHYgMC41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDY1LjEsMTE0LjggYyAxLjksMCA0LjEsLTEgNC41LC0yLjQgMS4xLDEuMiAyLjIsMi40IDQuNSwyLjQgaCAwLjYgYyAxLjgsMCAzLjgsLTEuMSA0LjEsLTIuNCAxLjQsMSAxLjYsMi40IDQuNSwyLjQgaCAwLjYgYyAyLjgsMCAzLjIsLTEuNiA0LjUsLTIuNCAwLjQsMS40IDIuNSwyLjQgNC41LDIuNCB2IC0xLjUgYyAtMi4xLDAgLTMuNywtMS40IC0zLjgsLTMuNCBoIC0xLjYgYyAtMC40LDEuOCAtMS40LDMuNCAtMy42LDMuNCBoIC0wLjIgYyAtMi4xLDAgLTMuNywtMS40IC0zLjgsLTMuNCBoIC0xLjggYyAtMCwxLjggLTEuNywzLjQgLTMuNiwzLjQgSCA3NC4xIGMgLTEuOCwwIC0zLjMsLTEuNiAtMy40LC0zLjQgaCAtMS45IGMgLTAsMS44IC0xLjgsMy40IC0zLjgsMy40IHYgMS41IGwgMCwwIHogbSAwLC0xMy41IHYgMS41IGMgMi4zLDAgMy42LC0wLjkgNC41LC0yLjIgMS40LDEgMS44LDIuMiA0LjUsMi4yIGggMC42IGMgMy4xLDAgMy41LC0yIDQuNSwtMi4yIDAuNCwxLjMgMi40LDIuMiA0LjEsMi4yIGggMC42IGMgMS43LDAgMy44LC0xIDQuMSwtMi4yIDEuMSwwLjMgMS4yLDIuMiA0LjksMi4yIHYgLTEuNSBjIC0yLDAgLTMuOCwtMS40IC0zLjgsLTMuNCBoIC0xLjkgdiAwLjggYyAwLDEuMiAtMS45LDIuNiAtMy40LDIuNiBoIC0wLjIgYyAtMiwwIC0zLjcsLTEuNCAtMy44LC0zLjQgaCAtMS44IGMgLTAsMS42IC0xLjcsMy40IC0zLjYsMy40IEggNzQuMSBjIC0yLDAgLTMuMiwtMS41IC0zLjQsLTMuNCBoIC0xLjkgYyAtMC4yLDEuOCAtMS43LDMuNCAtMy44LDMuNCBsIDAsMCB6IG0gMCwtMTIgdiAxLjUgYyAzLDAgMy4xLC0xIDQuNywtMiAxLjIsMC45IDEuNywyIDQuMSwyIGggMC42IGMgMi45LDAgMi45LC0xIDQuNSwtMiAxLjQsMC45IDEuNiwyIDQuMywyIGggMC42IGMgMi43LDAgMi45LC0xLjEgNC4zLC0yIDEuNiwxLjEgMS42LDIgNC43LDIgdiAtMS41IGMgLTIsMCAtMy44LC0xLjQgLTMuOCwtMy40IGggLTEuOSB2IDAuOCBjIDAsMS4yIC0xLjksMi42IC0zLjQsMi42IGggLTAuMiBjIC0yLDAgLTMuNywtMS40IC0zLjgsLTMuNCBoIC0xLjggYyAtMCwxLjcgLTEuNywzLjQgLTMuNiwzLjQgSCA3NC4xIGMgLTIsMCAtMy4yLC0xLjUgLTMuNCwtMy40IGggLTEuOSBjIC0wLjIsMS44IC0xLjcsMy40IC0zLjgsMy40IGwgMCwwIHogbSA0Mi4xLDI1LjQgdiAtMS41IGMgMi4yLDAgMy40LC0xLjQgMy42LC0zLjQgaCAxLjMgYyAxLDAgMC44LDMuNCA0LjEsMy40IGggMC40IGMgMi4yLDAgMi40LC0xLjQgMy4zLC0yLjEgbCAwLjIsLTEuMyBoIDEuNyBjIDAuMiwyIDEuNiwzLjQgMy44LDMuNCBoIDAuNCBjIDEuOCwwIDMuNSwtMS42IDMuNiwtMy40IGggMS41IGMgMC40LDEuOCAxLjcsMy40IDMuOSwzLjQgdiAxLjUgYyAtMS45LDAgLTQuMSwtMSAtNC41LC0yLjQgLTEuNSwxIC0xLjgsMi41IC00LjUsMi41IGggLTAuNCBjIC0yLDAgLTQuMSwtMSAtNC41LC0yLjQgaCAtMC40IGMgLTAuNCwxLjMgLTIuMywyLjQgLTQuMSwyLjQgaCAtMC40IGMgLTIuOSwwIC0zLjEsLTEuNCAtNC43LC0yLjQgLTAuNCwxLjQgLTIuNCwyLjQgLTQuMywyLjQgeiBtIDMuNiwtMTYuOCBoIDEuOSBjIDAsMS44IDEuNiwzLjQgMy41LDMuNCBoIDAuNCBjIDEuOCwwIDMuNSwtMS42IDMuNiwtMy40IGggMS45IHYgMC45IGMgMCwxIDIsMi40IDMuNCwyLjQgaCAwLjYgYyAxLjksMCAzLjQsLTEuNiAzLjYsLTMuNCBoIDEuNyB2IDAuNiBjIDAsMS4yIDIsMi44IDMuOCwyLjggdiAxLjUgYyAtMy4xLDAgLTMuMiwtMS4yIC00LjcsLTIuMiAtMS4zLDAuOSAtMS43LDIuMiAtNC40LDIuMiBoIC0wLjcgYyAtMi42LDAgLTMsLTEuMyAtNC4zLC0yLjIgLTEuMywxIC0xLjQsMi4yIC00LjMsMi4yIGggLTAuMiBjIC0xLjgsMCAtNC4yLC0xIC00LjUsLTIuMiAtMS4yLDAuMyAtMS4yLDIuMiAtNC43LDIuMiB2IC0xLjUgYyAxLjgsMCAzLjYsLTEuNCAzLjYsLTIuOCB2IC0wLjYgbCAwLDAgeiBtIDAsLTEyIGggMS45IGMgMCwxLjkgMS42LDMuNCAzLjUsMy40IGggMC40IGMgMS44LDAgMy41LC0xLjYgMy42LC0zLjQgaCAxLjkgdiAwLjYgYyAwLDEuNCAxLjgsMi44IDMuNCwyLjggaCAwLjYgYyAxLjksMCAzLjQsLTEuNiAzLjYsLTMuNCBoIDEuNyB2IDAuNiBjIDAsMS4yIDIsMi44IDMuOCwyLjggdiAxLjUgYyAtMS44LDAgLTQuMiwtMSAtNC41LC0yLjIgLTEuNSwxIC0xLjgsMi4yIC00LjYsMi4yIGggLTAuNyBjIC0xLjcsMCAtMy44LC0xIC00LjEsLTIuMiAtMS40LDAuOSAtMS43LDIuMiAtNC4zLDIuMiBoIC0wLjQgYyAtMy4xLDAgLTMuMiwtMS4yIC00LjksLTIuMiAtMC40LDEuMyAtMi41LDIuMiAtNC4zLDIuMiB2IC0xLjUgYyAxLjgsMCAzLjYsLTEuNCAzLjYsLTIuOCB2IC0wLjYgeiBtIC01LjgsMzIuNiBoIDMyIFYgODEuNSBoIC0zMiB2IDM3IHogbSAtMS43LC0xMS44IDAsLTEzLjMgLTYuOCwwIDAsMTMuMyB6XCJ9XSxpW1wiR1IuSU4uSUMuVFJBTlNQT1JUQVRJT04gSU5GUkFTVFJVQ1RVUkUuVFJBRkZJQyBDT05UUk9MIFBPSU5UXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODUuNSw4MS4zIDAuNSwwLjcgMTMuNywxOC4yIDAuMywwLjUgMC4zLC0wLjUgMTMuNywtMTguMiAwLjUsLTAuNyAtMC45LDAgLTI3LjQsMCAtMC45LDAgeiBtIDEuNywwLjkgMjUuNywwIEwgMTAwLDk5LjMgODcuMiw4Mi4yIHogTSAxMDYuNyw1MC43IGMgMCwwLjIgLTAsMC41IC0wLjEsMC43IC0wLjEsMC4yIC0wLjIsMC40IC0wLjQsMC41IC0wLjIsMC4yIC0wLjQsMC4zIC0wLjcsMC40IC0wLjMsMC4xIC0wLjYsMC4xIC0xLDAuMSBsIC0wLjcsMCAwLDIuMSAtMC43LDAgMCwtNS42IDEuNSwwIGMgMC4zLDVlLTYgMC42LDAgMC45LDAuMSAwLjIsMC4xIDAuNCwwLjEgMC42LDAuMyAwLjIsMC4xIDAuNCwwLjMgMC41LDAuNSAwLjEsMC4yIDAuMiwwLjUgMC4yLDAuOCBtIC0wLjgsMCBjIC0xZS01LC0wLjIgLTAsLTAuNCAtMC4xLC0wLjUgLTAuMSwtMC4xIC0wLjIsLTAuMyAtMC4zLC0wLjMgLTAuMSwtMC4xIC0wLjMsLTAuMSAtMC40LC0wLjIgLTAuMiwtMCAtMC4zLC0wLjEgLTAuNiwtMC4xIGwgLTAuNywwIDAsMi4yIDAuNiwwIGMgMC4zLDNlLTYgMC41LC0wIDAuNywtMC4xIDAuMiwtMC4xIDAuMywtMC4xIDAuNSwtMC4zIDAuMSwtMC4xIDAuMiwtMC4yIDAuMiwtMC40IDAuMSwtMC4xIDAuMSwtMC4zIDAuMSwtMC40IG0gLTMuOSwzLjUgYyAtMC4xLDAuMSAtMC4zLDAuMSAtMC40LDAuMiAtMC4xLDAuMSAtMC4zLDAuMSAtMC40LDAuMiAtMC4yLDAgLTAuMywwLjEgLTAuNSwwLjEgLTAuMiwwIC0wLjQsMC4xIC0wLjYsMC4xIC0wLjQsMCAtMC44LC0wLjEgLTEuMSwtMC4yIC0wLjMsLTAuMSAtMC42LC0wLjMgLTAuOSwtMC41IC0wLjIsLTAuMiAtMC40LC0wLjUgLTAuNiwtMC45IC0wLjEsLTAuNCAtMC4yLC0wLjggLTAuMiwtMS4zIDAsLTAuNSAwLjEsLTAuOSAwLjIsLTEuMiAwLjEsLTAuNCAwLjMsLTAuNyAwLjYsLTAuOSAwLjIsLTAuMiAwLjUsLTAuNCAwLjksLTAuNiAwLjMsLTAuMSAwLjcsLTAuMiAxLjEsLTAuMiAwLjMsNmUtNiAwLjYsMCAwLjksMC4xIDAuMywwLjEgMC42LDAuMiAxLDAuNCBsIDAsMC45IC0wLjEsMCBjIC0wLjMsLTAuMyAtMC42LC0wLjQgLTAuOSwtMC42IC0wLjMsLTAuMSAtMC42LC0wLjIgLTEsLTAuMiAtMC4zLDVlLTYgLTAuNSwwIC0wLjgsMC4xIC0wLjIsMC4xIC0wLjQsMC4yIC0wLjYsMC40IC0wLjIsMC4yIC0wLjMsMC40IC0wLjQsMC43IC0wLjEsMC4zIC0wLjEsMC42IC0wLjEsMSAtMTBlLTcsMC40IDAuMSwwLjcgMC4yLDEgMC4xLDAuMyAwLjIsMC41IDAuNCwwLjcgMC4yLDAuMiAwLjQsMC4zIDAuNiwwLjQgMC4yLDAuMSAwLjUsMC4xIDAuNywwLjEgMC40LDEwZS03IDAuNywtMC4xIDEsLTAuMiAwLjMsLTAuMSAwLjYsLTAuMyAwLjksLTAuNiBsIDAuMSwwIDAsMC45IG0gLTUuMSwtNC41IC0yLDAgMCw0LjkgLTAuNywwIDAsLTQuOSAtMiwwIDAsLTAuNyA0LjcsMCAwLDAuNyBNIDg1LjksNDQuNiBsIDAsMC40IDAsMzYuNSAwLDAuNCAwLjQsMCAyNy40LDAgMC40LDAgMCwtMC40IDAsLTM2LjUgMCwtMC40IC0wLjQsMCAtMjcuNCwwIC0wLjQsMCB6IG0gMC45LDAuOSAyNi41LDAgMCwzNS42IC0yNi41LDAgMCwtMzUuNiB6XCJ9XSxpW1wiQUMuTTEuUklPVFwiXT1sKFwiUklPVFwiKSxpW1wiQUMuTTEuVEhSRUFUXCJdPWwoXCI/XCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1kgQ09MTEVDVElPTiBFVkFDVUFUSU9OIFBPSU5UXCJdPWwoXCJFQ0VQXCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1kgSU5DSURFTlQgQ09NTUFORCBDRU5URVJcIl09bChcIkVJQ0NcIiksaVtcIkFDLk0xLkVNRVJHRU5DWSBPUEVSQVRJT05TIENFTlRFUlwiXT1sKFwiRU9DXCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1kgU0hFTFRFUlwiXT1sKFwiRVNcIiksaVtcIkFDLk0xLkVNRVJHRU5DWSBTVEFHSU5HIEFSRUFcIl09bChcIlNBXCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1lcIl09bChcIkVNRVJcIiksaVtcIkFDLk0xLkNPTU1FUkNJQUxcIl09bChcIkNPTVwiKSxpW1wiQUMuTTEuUFJPRFVDVElPTlwiXT1sKFwiUFJPRFwiKSxpW1wiQUMuTTEuUkVUQUlMXCJdPWwoXCJSVExcIiksaVtcIkFDLk0xLk1JTElUQVJZIEFSTU9SWVwiXT1sKFwiUkVTXCIpLGlbXCJBQy5NMS5HRU5FUkFUSU9OIFNUQVRJT05cIl09bChcIkdFTlwiKSxpW1wiR1IuSS5GRi5DSVZJTElBTiBST1RBUlkgV0lOR1wiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOm8sZDpcIk04MCw3MCBsMTAsMTAgTTEyMCwxMTAgbC0xMCwtMTAgTTgwLDExMCBsMTAsLTEwIE0xMjAsNzAgbC0xMCwxMCBNMTAwLDExNSBsMCwyMCBNOTUsMTM1IGwxMCwwXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOm8sZmlsbDohIVImJkcsZDpcIm0gMTEzLDkwIGMgLTAuMyw4LjggLTEuOSwyMC4zIC0xMC44LDI0LjYgLTcuNywyIC0xMi4zLC03LjEgLTEzLjgsLTEzLjMgLTIuNiwtMTEuNSAtMi4zLC0yNiA2LjksLTM0LjYgNi4wLC00LjkgMTMuMSwxLjkgMTQuOSw3LjggMiw0LjkgMi44LDEwLjIgMi44LDE1LjUgelwifV0saVtcIkdSLklDLkhPU1BJVEFMIFNISVBcIl09YShcIkFIXCIpLGlbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/RzohQyYmRyxkOlwibSA3NSwxMDAgMCwtMzUgNTAsMCAwLDM1IDIwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMzUsMTAwIC0xNSwzNSAtMTAsMCAxNSwtMzUgelwifV0saVtcIkNZLklDLkNPTUJBVCBNSVNTSU9OIFRFQU1cIl09YShcIkNNVFwiKSxpW1wiQ1kuSUMuTkFUSU9OQUwgTUlTU0lPTiBURUFNXCJdPWEoXCJOTVRcIiksaVtcIkNZLklDLkNZQkVSIFBST1RFQ1RJT04gVEVBTVwiXT1hKFwiQ1BUXCIpLGlbXCJDWS5JQy5OQVRJT04gU1RBVEUgQ1lCRVIgVEhSRUFUIEFDVE9SXCJdPWEoXCJDVEFcIiksaVtcIkNZLklDLk5PTiBOQVRJT04gU1RBVEUgQ1lCRVIgVEhSRUFUIEFDVE9SXCJdPWEoXCJDVEFcIiksaVtcIkNZLklDLk5PTiBOQVRJT04gU1RBVEUgQ1lCRVIgVEhSRUFUIEFDVE9SXCJdLmZpbGw9Unx8Tj9HOiFDJiZHLGlbXCJDWS5JQy5OT04gTkFUSU9OIFNUQVRFIENZQkVSIFRIUkVBVCBBQ1RPUlwiXS5zdHJva2U9byxpW1wiQ1kuSUMuTk9OIE5BVElPTiBTVEFURSBDWUJFUiBUSFJFQVQgQUNUT1JcIl0uc3Ryb2tld2lkdGg9MyxpKWkuaGFzT3duUHJvcGVydHkoTCkmJihJLmhhc093blByb3BlcnR5KEwpJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIrTCksbi5jYWxsKHRoaXMsaVtMXSxPKSxJW0xdPWlbTF0pfXZhciBoPXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbY10saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtRy0tLS0tLS1cIl09W10sSVtcIlMtRy1VLS0tLS1cIl09W10sSVtcIlMtRy1VQy0tLS1cIl09W0VbXCJHUi5JQy5DT01CQVRcIl1dLElbXCJTLUctVUNELS0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl1dLElbXCJTLUctVUNEUy0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIFNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLVVDRFNDLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBDSEFQQVJSQUxcIl1dLElbXCJTLUctVUNEU1MtXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIE1JU1NJTEVcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIFNUSU5HRVJcIl1dLElbXCJTLUctVUNEU1YtXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkZGLk1BSU4gR1VOIFNZU1RFTVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgVlVMQ0FOXCJdXSxJW1wiUy1HLVVDRE0tLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdXSxJW1wiUy1HLVVDRE1MLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5NSVNTSUxFLkxJR0hUXCJdXSxJW1wiUy1HLVVDRE1MQVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJTLUctVUNETU0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIE1JU1NJTEVcIl0sRVtcIkdSLklDLk1JU1NJTEUuTUVESVVNXCJdXSxJW1wiUy1HLVVDRE1ILVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5NSVNTSUxFLkhFQVZZXCJdXSxJW1wiUy1HLVVDREgtLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBIL01BRFwiXV0sSVtcIlMtRy1VQ0RISC1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgSC9NQUQgSEFXS1wiXV0sSVtcIlMtRy1VQ0RIUC1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgSC9NQUQgUEFUUklPVFwiXV0sSVtcIlMtRy1VQ0RHLS1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgR1VOIFVOSVRcIl1dLElbXCJTLUctVUNEQy0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIENPTVBPU0lURVwiXV0sSVtcIlMtRy1VQ0RULS1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgVEFSR0VUSU5HIFVOSVRcIl1dLElbXCJTLUctVUNETy0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIFRIRUFURVIgTUlTU0lMRSBERUZFTlNFIFVOSVRcIl1dLElbXCJTLUctVUNBLS0tXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDQVQtLVwiXT1bRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FUQS1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDQVRXLVwiXT1bRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVtcIlMtRy1VQ0FUV1JcIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl0sRVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl1dLElbXCJTLUctVUNBVEwtXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ0FUTS1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLk1FRElVTVwiXV0sSVtcIlMtRy1VQ0FUSC1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVDQVRSLVwiXT1bRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuUkVDT1ZFUlkgKE1BSU5URU5BTkNFKVwiXV0sSVtcIlMtRy1VQ0FXLS1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXV0sSVtcIlMtRy1VQ0FXUy1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDQVdBLVwiXT1bRVtcIkdSLklDLkFSTU9SLCBXSEVFTEVEXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0FXVy1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVtcIlMtRy1VQ0FXV1JcIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXSxFW1wiR1IuTTIuUkVDT1ZFUlkgKE1BSU5URU5BTkNFKVwiXV0sSVtcIlMtRy1VQ0FXTC1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNBV00tXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLk0yLk1FRElVTVwiXV0sSVtcIlMtRy1VQ0FXSC1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVUNBV1ItXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl1dLElbXCJTLUctVUNBQS0tXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FBRC1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdXSxJW1wiUy1HLVVDQUFMLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDQUFNLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDQUFTLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0FBVS1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ0FBQy1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5NMi5BUkNUSUNcIl1dLElbXCJTLUctVUNBQUEtXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDQUFBVFwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FBQVdcIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLldIRUVMRURcIl1dLElbXCJTLUctVUNBQUFTXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLElbXCJTLUctVUNBQU8tXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVDQUFPU1wiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDVi0tLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdXSxJW1wiUy1HLVVDVkYtLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIEZJWEVEIFdJTkdcIl1dLElbXCJTLUctVUNWRlUtXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxFW1wiR1IuTTEuVVRJTElUWVwiXV0sSVtcIlMtRy1VQ1ZGQS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdLEVbXCJHUi5NMS5BVFRBQ0tcIl1dLElbXCJTLUctVUNWVVRQXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gVEFDVElDQUwgQUlSIENPTlRST0wgUEFSVFlcIl1dLElbXCJTLUctVUNWVUZDXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRk9SV0FSRCBBSVIgQ09OVFJPTExFUlwiXV0sSVtcIlMtRy1VQ1ZGUi1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdLEVbXCJHUi5NMS5SRUNPTlwiXV0sSVtcIlMtRy1VQ1ZSLS1cIl09Uj9bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lORyAyNTI1Q1wiXV06W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXV0sSVtcIlMtRy1VQ1ZSQS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuQVRUQUNLXCJdXSxJW1wiUy1HLVVDVlJTLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJHUi5NMS5SRUNPTlwiXV0sSVtcIlMtRy1VQ1ZSVy1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJW1wiUy1HLVVDVlJVLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJHUi5NMS5VVElMSVRZXCJdXSxJW1wiUy1HLVVDVlJVTFwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJHUi5NMS5VVElMSVRZXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ1ZSVU1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuVVRJTElUWVwiXSxFW1wiR1IuTTIuTUVESVVNXCJdXSxJW1wiUy1HLVVDVlJVSFwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJHUi5NMS5VVElMSVRZXCJdLEVbXCJHUi5NMi5IRUFWWVwiXV0sSVtcIlMtRy1VQ1ZSVUNcIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuQ09NTUFORCBBTkQgQ09OVFJPTCBST1RBUlkgV0lOR1wiXV0sSVtcIlMtRy1VQ1ZSVUVcIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuTUVERVZBQ1wiXV0sSVtcIlMtRy1VQ1ZSTS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVwiXV0sSVtcIlMtRy1VQ1ZTLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuUEVSU09OTkVMIFJFQ09WRVJZXCJdXSxJW1wiUy1HLVVDVkMtLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIENPTVBPU0lURVwiXV0sSVtcIlMtRy1VQ1ZWLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdLEVbXCJHUi5NMi5WRVJUSUNBTCBPUiBTSE9SVCBUQUtFLU9GRiBBTkQgTEFORElORyBcIl1dLElbXCJTLUctVUNWVS0tXCJdPVtFW1wiR1IuSUMuVU5NQU5ORUQgU1lTVEVNU1wiXV0sSVtcIlMtRy1VQ1ZVRi1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdLEVbXCJHUi5NMS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXV0sSVtcIlMtRy1VQ1ZVUi1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl1dLElbXCJTLUctVUNJLS0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl1dLElbXCJTLUctVUNJTC0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDSU0tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJTLUctVUNJTy0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLk0yLk1PVU5UQUlOXCJdXSxJW1wiUy1HLVVDSUEtLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0lTLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDSVotLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNJTi0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLklDLkZGLk5BVkFMXCJdXSxJW1wiUy1HLVVDSUktLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLklDLkZGLk1BSU4gR1VOIFNZU1RFTVwiXV0sSVtcIlMtRy1VQ0lDLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuTTIuQVJDVElDXCJdXSxJW1wiUy1HLVVDRS0tLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdXSxJW1wiUy1HLVVDRUMtLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMS5DT01CQVRcIl1dLElbXCJTLUctVUNFQ1MtXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0VDQS1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNFQ0MtXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0yLkFSQ1RJQ1wiXV0sSVtcIlMtRy1VQ0VDTC1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTEuQ09NQkFUXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ0VDTS1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTEuQ09NQkFUXCJdLEVbXCJHUi5NMi5NRURJVU1cIl1dLElbXCJTLUctVUNFQ0gtXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0xLkNPTUJBVFwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVUNFQ1QtXCJdPVtzLl9zY2FsZSguNyxFW1wiR1IuSUMuRU5HSU5FRVJcIl0pLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNFQ1ctXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVtcIlMtRy1VQ0VDTy1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTIuTU9VTlRBSU5cIl1dLElbXCJTLUctVUNFQ1ItXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVDRU4tLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMS5DT05TVFJVQ1RJT05cIl1dLElbXCJTLUctVUNFTk4tXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0xLk5BVkFMXCJdXSxJW1wiUy1HLVVDRi0tLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXV0sSVtcIlMtRy1VQ0ZILS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl1dLElbXCJTLUctVUNGSEUtXCJdPVtzLl9zY2FsZSguOCxFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdKSxFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDRkhTLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDRkhBLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNGSEMtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMi5BUkNUSUNcIl1dLElbXCJTLUctVUNGSE8tXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ0ZITC1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDRkhNLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTIuTUVESVVNXCJdXSxJW1wiUy1HLVVDRkhILVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVUNGSFgtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJW1wiUy1HLVVDRlItLVwiXT1bRVtcIkdSLklDLkZGLkZJRUxEIEFSVElMTEVSWSBST0NLRVRcIl1dLElbXCJTLUctVUNGUlMtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdXSxJW1wiUy1HLVVDRlJTLVwiXT1bcy5fc2NhbGUoLjgsRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksRVtcIkdSLk0xLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sUj9bXTpFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDRlJTU1wiXT1bcy5fc2NhbGUoLjgsRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksRVtcIkdSLk0xLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0ZSU1JcIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0xLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLk0yLlRSVUNLXCJdXSxJW1wiUy1HLVVDRlJTVFwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuTTIuVE9XRURcIl1dLElbXCJTLUctVUNGUk0tXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0sUj9cIlwiOkVbXCJHUi5NMi5DUk9TUy1DT1VOVFJZIFRSVUNLXCJdXSxJW1wiUy1HLVVDRlJNU1wiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNGUk1SXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLk0yLlRSVUNLXCJdXSxJW1wiUy1HLVVDRlJNVFwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5NMi5UT1dFRFwiXV0sSVtcIlMtRy1VQ0ZULS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0yLlRBUkdFVCBBQ1FVSVNJVElPTlwiXV0sSVtcIlMtRy1VQ0ZUUi1cIl09W3MuX3RyYW5zbGF0ZSgtMzAsMTAscy5fc2NhbGUoLjYsRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSkpLEVbXCJHUi5JQy5SQURBUlwiXV0sSVtcIlMtRy1VQ0ZUUy1cIl09W3MuX3RyYW5zbGF0ZSgwLDMwLHMuX3NjYWxlKC43LEVbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pKSxFW1wiR1IuSUMuRkYuU09VTkRcIl1dLElbXCJTLUctVUNGVEYtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMS5PUFRJQ0FMXCJdLEVbXCJHUi5NMi5UQVJHRVQgQUNRVUlTSVRJT05cIl1dLElbXCJTLUctVUNGVEMtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVDRlRDRFwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUctVUNGVENNXCJdPVtzLl9zY2FsZSguOCxFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdKSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0ZUQS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuTkFWQUxcIl1dLElbXCJTLUctVUNGTS0tXCJdPVtFW1wiR1IuSUMuTU9SVEFSXCJdXSxJW1wiUy1HLVVDRk1TLVwiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuVFJBQ0tFRFwiXV0sSVtcIlMtRy1VQ0ZNVy1cIl09SVtcIlMtRy1VQ0ZNU1dcIl09W0VbXCJHUi5JQy5NT1JUQVJcIl0sRVtcIkdSLk0yLlRSVUNLXCJdXSxJW1wiUy1HLVVDRk1ULVwiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuVE9XRURcIl1dLElbXCJTLUctVUNGTVRBXCJdPVtFW1wiR1IuSUMuTU9SVEFSXCJdLEVbXCJHUi5NMi5UT1dFRFwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNGTVRTXCJdPVtFW1wiR1IuSUMuTU9SVEFSXCJdLEVbXCJHUi5NMi5UT1dFRFwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDRk1UQ1wiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuQVJDVElDXCJdXSxJW1wiUy1HLVVDRk1UT1wiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuVE9XRURcIl0sRVtcIkdSLk0yLk1PVU5UQUlOXCJdXSxJW1wiUy1HLVVDRk1MLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTIwLEVbXCJHUi5JQy5NT1JUQVJcIl0pLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJW1wiUy1HLVVDRlMtLVwiXT1bRVtcIkdSLklDLlNVUlZFWVwiXV0sSVtcIlMtRy1VQ0ZTUy1cIl09W0VbXCJHUi5JQy5TVVJWRVlcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0ZTQS1cIl09W0VbXCJHUi5JQy5TVVJWRVlcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDRlNMLVwiXT1bRVtcIkdSLklDLlNVUlZFWVwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNGU08tXCJdPVtFW1wiR1IuSUMuU1VSVkVZXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ0ZPLS1cIl09W0VbXCJHUi5JQy5NRVRFT1JPTE9HSUNBTFwiXV0sSVtcIlMtRy1VQ0ZPUy1cIl09W0VbXCJHUi5JQy5NRVRFT1JPTE9HSUNBTFwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDRk9BLVwiXT1bRVtcIkdSLklDLk1FVEVPUk9MT0dJQ0FMXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0ZPTC1cIl09W0VbXCJHUi5JQy5NRVRFT1JPTE9HSUNBTFwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNGT08tXCJdPVtFW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl0sRVtcIkdSLk0yLk1PVU5UQUlOXCJdXSxJW1wiUy1HLVVDUi0tLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVDUkgtLVwiXT1bRVtcIkdSLklDLkZGLkhPUlNFXCJdXSxJW1wiUy1HLVVDUlYtLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLFI/RVtcIkdSLk0yLkNBVkFMUllcIl06W11dLElbXCJTLUctVUNSVkEtXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ1JWTS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVDUlZHLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVDUlZPLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXV0sSVtcIlMtRy1VQ1JDLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuTTIuQVJDVElDXCJdXSxJW1wiUy1HLVVDUlMtLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLElbXCJTLUctVUNSQS0tXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDUk8tLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ1JMLS1cIl09SVtcIlMtRy1VQ1JMTC1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNSUi0tXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbXCJTLUctVUNSUkQtXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl0sUj9FW1wiR1IuTTEuTUFSSU5FIERJVklTSU9OXCJdOltdXSxJW1wiUy1HLVVDUlJGLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdLEVbXCJHUi5NMS5GT1JDRVwiXV0sSVtcIlMtRy1VQ1JSTC1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5XSEVFTEVEXCJdXSxJW1wiUy1HLVVDUlgtLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLFI/RVtcIkdSLk0yLkxPTkcgUkFOR0UgU1VSVkVJTExBTkNFXCJdOltzLl90cmFuc2xhdGUoMCwtMjAsRVtcIkdSLk0yLk1PVU5UQUlOXCJdKSxFW1wiR1IuTTIuTE9ORyBSQU5HRVwiXV1dLElbXCJTLUctVUNNLS0tXCJdPVtFW1wiR1IuSUMuTUlTU0lMRVwiXV0sSVtcIlMtRy1VQ01ULS1cIl09W0VbXCJHUi5JQy5NSVNTSUxFXCJdLEVbXCJHUi5NMi5UQUNUSUNBTCBNSVNTSUxFXCJdXSxJW1wiUy1HLVVDTVMtLVwiXT1bRVtcIkdSLklDLk1JU1NJTEVcIl0sRVtcIkdSLk0yLlNUUkFURUdJQyBNSVNTSUxFXCJdXSxJW1wiUy1HLVVDUy0tLVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdXSxJW1wiUy1HLVVDU1ctLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTIwLEVbXCJHUi5JQy5TRUNVUklUWVwiXSksRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbXCJTLUctVUNTRy0tXCJdPVtFW1wiR1IuSUMuU0VDVVJJVFlcIl1dLElbXCJTLUctVUNTR0QtXCJdPVtFW1wiR1IuSUMuU0VDVVJJVFlcIl0sRVtcIkdSLklDLkZGLklORkFOVFJZXCJdXSxJW1wiUy1HLVVDU0dNLVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJTLUctVUNTR0EtXCJdPVtFW1wiR1IuSUMuU0VDVVJJVFlcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ1NNLS1cIl09W0VbXCJHUi5JQy5TRUNVUklUWVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5XSEVFTEVEXCJdXSxJW1wiUy1HLVVDU1ItLVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdLEVbXCJHUi5NMi5SQUlMUk9BRFwiXV0sSVtcIlMtRy1VQ1NBLS1cIl09W3MuX3RyYW5zbGF0ZSgwLC0yMCxFW1wiR1IuSUMuU0VDVVJJVFlcIl0pLEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXV0sSVtcIlMtRy1GLVMtLS1cIl09RVtcIkdSLklDLlNVUlZFSUxMQU5DRVwiXSxJW1wiUy1HLVVVLS0tLVwiXT1bRVtcIkdSLklDLkNPTUJBVCBTVVBQT1JUXCJdXSxJW1wiUy1HLVVVQS0tLVwiXT1bRVtcIkdSLklDLkNCUk5cIl1dLElbXCJTLUctVVVBQy0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuQ0hFTUlDQUxcIl1dLElbXCJTLUctVVVBQ0MtXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuU01PS0UvREVDT05cIl1dLElbXCJTLUctVVVBQ0NLXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuU01PS0UvREVDT05cIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VVUFDQ01cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5TTU9LRS9ERUNPTlwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVVQUNTLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLlNNT0tFXCJdXSxJW1wiUy1HLVVVQUNTTVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLlNNT0tFXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJTLUctVVVBQ1NBXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuU01PS0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VVUFDUi1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5DSEVNSUNBTFwiXSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUctVVVBQ1JXXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuV0hFRUxFRFwiXV0sSVtcIlMtRy1VVUFDUlNcIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5XSEVFTEVEXCJdLFI/RVtcIkdSLk0xLkNIRU1JQ0FMIFNVUlZFSUxMQU5DRVwiXTpbXV0sSVtcIlMtRy1VVUFOLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5OVUNMRUFSXCJdXSxJW1wiUy1HLVVVQUItLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkJJT0xPR0lDQUxcIl1dLElbXCJTLUctVVVBQlItXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuQklPTE9HSUNBTFwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtRy1VVUFELS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl1dLElbXCJTLUctVVVBRFQtXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuREVDT05UQU1JTkFUSU9OXCJdLEVbXCJHUi5NMi5UUk9PUFwiXV0sSVtcIlMtRy1VVUFERS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl0sRVtcIkdSLk0yLkVRVUlQTUVOVFwiXV0sSVtcIlMtRy1VVUFERVRcIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl0sRVtcIkdSLk0yLkVRVUlNRU5UL1RST09QXCJdXSxJW1wiUy1HLVVVQUwtLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0yLkxBQk9SQVRPUllcIl1dLElbXCJTLUctVVVNLS0tXCJdPVtFW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdXSxJW1wiUy1HLVVVTUEtLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSxFW1wiR1IuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl1dLElbXCJTLUctVVVNUy0tXCJdPVtzLl90cmFuc2xhdGUoLTI1LDAsRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSksRVtcIkdSLklDLlJBRElPXCJdXSxJW1wiUy1HLVVVTVNFLVwiXT1bRVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXV0sSVtcIlMtRy1VVU1TRUFcIl09W0VbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLldIRUVMRURcIl1dLElbXCJTLUctVVVNU0VEXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5ESVJFQ1RJT04gRklORElOR1wiXV0sSVtcIlMtRy1VVU1TRUlcIl09W0VbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sRVtcIkdSLklDLkZGLklOVEVSQ0VQVFwiXV0sSVtcIlMtRy1VVU1TRUpcIl09W0VbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sRVtcIkdSLklDLkZGLkpBTU1JTkdcIl1dLElbXCJTLUctVVVNU0VUXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVVNU0VDXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVVTUMtLVwiXT1bRVtcIkdSLklDLkNPVU5URVItSU5URUxMSUdFTkNFXCJdXSxJW1wiUy1HLVVVTVItLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXV0sSVtcIlMtRy1VVU1SRy1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0sRVtcIkdSLk0xLlJBREFSXCJdXSxJW1wiUy1HLVVVTVJTLVwiXT1bcy5fdHJhbnNsYXRlKDAsMzAscy5fc2NhbGUoLjgsRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSkpLEVbXCJHUi5JQy5GRi5TRU5TT1JcIl1dLElbXCJTLUctVVVNUlNTXCJdPVtzLl90cmFuc2xhdGUoMCwzMCxzLl9zY2FsZSguOCxFW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdKSksRVtcIkdSLklDLkZGLlNFTlNPUlwiXSxFW1wiR1IuTTEuU0VOU09SIENPTlRST0wgTU9EVUxFXCJdXSxJW1wiUy1HLVVVTVJYLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSxFW1wiR1IuTTEuR1JPVU5EIFNUQVRJT04gTU9EVUxFXCJdXSxJW1wiUy1HLVVVTU1PLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSxFW1wiR1IuTTEuTUVURU9ST0xPR0lDQUxcIl1dLElbXCJTLUctVVVNTy0tXCJdPVtFW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdLEVbXCJHUi5NMS5PUEVSQVRJT05TXCJdXSxJW1wiUy1HLVVVTVQtLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSxFW1wiR1IuTTEuVEFDVElDQUwgRVhQTE9JVEFUSU9OXCJdXSxJW1wiUy1HLVVVTVEtLVwiXT1bRVtcIkdSLklDLklOVEVSUk9HQVRJT05cIl1dLElbXCJTLUctVVVNSi0tXCJdPVtFW1wiR1IuSUMuSk9JTlQgSU5URUxMSUdFTkNFIENFTlRSRVwiXV0sSVtcIlMtRy1VVUwtLS1cIl09W0VbXCJHUi5JQy5GRi5NSUxJVEFSWSBQT0xJQ0VcIl0sRVtcIkdSLklDLk1JTElUQVJZIFBPTElDRVwiXV0sSVtcIlMtRy1VVUxTLS1cIl09W0VbXCJHUi5JQy5TSE9SRSBQQVRST0xcIl1dLElbXCJTLUctVVVMTS0tXCJdPVtFW1wiR1IuSUMuTUlMSVRBUlkgUE9MSUNFXCJdXSxJW1wiUy1HLVVVTEMtLVwiXT1bRVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVtcIlMtRy1VVUxGLS1cIl09W3MuX3RyYW5zbGF0ZSgwLC0yNSxzLl9zY2FsZSguOCxFW1wiR1IuSUMuU0hPUkUgUEFUUk9MXCJdKSksRVtcIkdSLklDLkFWSUFUSU9OIEZJWEVEIFdJTkdcIl1dLElbXCJTLUctVVVMRC0tXCJdPVtFW1wiR1IuSUMuQ1JJTUlOQUwgSU5WRVNUSUdBVElPTiBESVZJU0lPTlwiXV0sSVtcIlMtRy1VVVMtLS1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl1dLElbXCJTLUctVVVTQS0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5BUkVBXCJdXSxJW1wiUy1HLVVVU0MtLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuQ09NTVVOSUNBVElPTlMgQ09OVElOR0VOQ1kgUEFDS0FHRVwiXV0sSVtcIlMtRy1VVVNDTC1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLkxBUkdFIENPTU1VTklDQVRJT05TIENPTlRJTkdFTkNZIFBBQ0tBR0VcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVVU08tLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuT1BFUkFUSU9OU1wiXV0sSVtcIlMtRy1VVVNGLS1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLkZPUldBUkRcIl1dLElbXCJTLUctVVVTTS0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5NT0JJTEUgU1VCU0NSSUJFUiBFUVVJUE1FTlRcIl1dLElbXCJTLUctVVVTTVMtXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5TTUFMTCBFWFRFTlNJT04gTk9ERVwiXV0sSVtcIlMtRy1VVVNNTC1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLkxBUkdFIEVYVEVOU0lPTiBOT0RFXCJdXSxJW1wiUy1HLVVVU01OLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuTk9ERSBDRU5UUkVcIl1dLElbXCJTLUctVVVTUi0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5JQy5SQURJT1wiXV0sSVtcIlMtRy1VVVNSUy1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLkkuRkYuU0FURUxMSVRFXCJdXSxJW1wiUy1HLVVVU1JULVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuSUMuUkFESU8gVEVMRVRZUEUgQ0VOVFJFXCJdXSxJW1wiUy1HLVVVU1JXLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuSUMuUkFESU8gUkVMQVlcIl1dLElbXCJTLUctVVVTUy0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5TSUdOQUwgU1VQUE9SVFwiXV0sSVtcIlMtRy1VVVNXLS1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLklDLlRFTEVQSE9ORSBTV0lUQ0hcIl1dLElbXCJTLUctVVVTWC0tXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBSQU5HSU5HXCJdXSxJW1wiUy1HLVVVSS0tLVwiXT1bRVtcIkdSLklDLklORk9STUFUSU9OIE9QRVJBVElPTlNcIl1dLElbXCJTLUctVVVQLS0tXCJdPUlbXCJTLUctVVVYLS0tXCJdPVtFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXSxFW1wiR1IuTTEuTEFORElORyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVVRS0tLVwiXT1bRVtcIkdSLklDLkVYUExPU0lWRSBPUkROQU5DRSBESVNQT1NBTFwiXV0sSVtcIlMtRy1VVVQtLS1cIl09W0VbXCJHUi5JQy5UT1BPR1JBUEhJQ1wiXV0sSVtcIlMtRy1VVUQtLS1cIl09W0VbXCJHUi5JQy5EUklMTElOR1wiXV0sSVtcIlMtRy1VUy0tLS1cIl09W0VbXCJHUi5JQy5DT01CQVQgU0VSVklDRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQS0tLVwiXT1bRVtcIkdSLklDLkFETUlOSVNUUkFUSVZFXCJdXSxJW1wiUy1HLVVTQVQtLVwiXT1bRVtcIkdSLklDLkFETUlOSVNUUkFUSVZFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBQy0tXCJdPVtFW1wiR1IuSUMuQURNSU5JU1RSQVRJVkVcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBSi0tXCJdPVtFW1wiR1IuSUMuSlVER0UgQURWT0NBVEUgR0VORVJBTFwiXV0sSVtcIlMtRy1VU0FKVC1cIl09W0VbXCJHUi5JQy5KVURHRSBBRFZPQ0FURSBHRU5FUkFMXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBSkMtXCJdPVtFW1wiR1IuSUMuSlVER0UgQURWT0NBVEUgR0VORVJBTFwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FPLS1cIl09W0VbXCJHUi5JQy5QT1NUQUxcIl1dLElbXCJTLUctVVNBT1QtXCJdPVtFW1wiR1IuSUMuUE9TVEFMXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBT0MtXCJdPVtFW1wiR1IuSUMuUE9TVEFMXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUYtLVwiXT1bRVtcIkdSLklDLkZJTkFOQ0VcIl1dLElbXCJTLUctVVNBRlQtXCJdPVtFW1wiR1IuSUMuRklOQU5DRVwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUZDLVwiXT1bRVtcIkdSLklDLkZJTkFOQ0VcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUy0tXCJdPVtFW1wiR1IuSUMuUEVSU09OTkVMIFNFUlZJQ0VTXCJdXSxJW1wiUy1HLVVTQVNULVwiXT1bRVtcIkdSLklDLlBFUlNPTk5FTCBTRVJWSUNFU1wiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVNDLVwiXT1bRVtcIkdSLklDLlBFUlNPTk5FTCBTRVJWSUNFU1wiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FNLS1cIl09W0VbXCJHUi5JQy5NT1JUVUFSWSBBRkZBSVJTXCJdXSxJW1wiUy1HLVVTQU1ULVwiXT1bRVtcIkdSLklDLk1PUlRVQVJZIEFGRkFJUlNcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FNQy1cIl09W0VbXCJHUi5JQy5NT1JUVUFSWSBBRkZBSVJTXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVItLVwiXT1bRVtcIkdSLklDLlJFTElHSU9VUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVJULVwiXT1bRVtcIkdSLklDLlJFTElHSU9VUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUkMtXCJdPVtFW1wiR1IuSUMuUkVMSUdJT1VTIFNVUFBPUlRcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUC0tXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlNcIl1dLElbXCJTLUctVVNBUFQtXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlNcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FQQy1cIl09W0VbXCJHUi5JQy5QVUJMSUMgQUZGQUlSU1wiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FQQi1cIl09W0VbXCJHUi5JQy5QVUJMSUMgQUZGQUlSUyBCUk9BRENBU1RcIl1dLElbXCJTLUctVVNBUEJUXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlMgQlJPQURDQVNUXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUEJDXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlMgQlJPQURDQVNUXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVBNLVwiXT1bRVtcIkdSLklDLkpPSU5UIElORk9STUFUSU9OIEJVUkVBVVwiXV0sSVtcIlMtRy1VU0FQTVRcIl09W0VbXCJHUi5JQy5KT0lOVCBJTkZPUk1BVElPTiBCVVJFQVVcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FQTUNcIl09W0VbXCJHUi5JQy5KT0lOVCBJTkZPUk1BVElPTiBCVVJFQVVcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBWC0tXCJdPVtFW1wiR1IuSUMuUkVQTEFDRU1FTlQgSE9MRElORyBVTklUXCJdXSxJW1wiUy1HLVVTQVhULVwiXT1bRVtcIkdSLklDLlJFUExBQ0VNRU5UIEhPTERJTkcgVU5JVFwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVhDLVwiXT1bRVtcIkdSLklDLlJFUExBQ0VNRU5UIEhPTERJTkcgVU5JVFwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FMLS1cIl09W0VbXCJHUi5JQy5MQUJPVVJcIl1dLElbXCJTLUctVVNBTFQtXCJdPVtFW1wiR1IuSUMuTEFCT1VSXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBTEMtXCJdPVtFW1wiR1IuSUMuTEFCT1VSXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVctLVwiXT1bRVtcIkdSLklDLk1PUkFMRSwgV0VMRkFSRSwgQU5EIFJFQ1JFQVRJT05cIl1dLElbXCJTLUctVVNBV1QtXCJdPVtFW1wiR1IuSUMuTU9SQUxFLCBXRUxGQVJFLCBBTkQgUkVDUkVBVElPTlwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVdDLVwiXT1bRVtcIkdSLklDLk1PUkFMRSwgV0VMRkFSRSwgQU5EIFJFQ1JFQVRJT05cIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUS0tXCJdPVtFW1wiR1IuSUMuUVVBUlRFUk1BU1RFUlwiXV0sSVtcIlMtRy1VU0FRVC1cIl09W0VbXCJHUi5JQy5RVUFSVEVSTUFTVEVSXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUUMtXCJdPVtFW1wiR1IuSUMuUVVBUlRFUk1BU1RFUlwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU00tLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMXCJdXSxJW1wiUy1HLVVTTVQtLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgVEhFQVRFUlwiXV0sSVtcIlMtRy1VU01DLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIENPUlBTXCJdXSxJW1wiUy1HLVVTTU0tLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUxcIl0sRVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJW1wiUy1HLVVTTU1ULVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbXCJTLUctVVNNTUMtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbXCJTLUctVVNNVi0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTFwiXSxFW1wiR1IuTTIuVkVURVJJTkFSWVwiXV0sSVtcIlMtRy1VU01WVC1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIFRIRUFURVJcIl0sRVtcIkdSLk0yLlZFVEVSSU5BUllcIl1dLElbXCJTLUctVVNNVkMtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBDT1JQU1wiXSxFW1wiR1IuTTIuVkVURVJJTkFSWVwiXV0sSVtcIlMtRy1VU01ELS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMXCJdLEVbXCJHUi5NMi5ERU5UQUxcIl1dLElbXCJTLUctVVNNRFQtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBUSEVBVEVSXCJdLEVbXCJHUi5NMi5ERU5UQUxcIl1dLElbXCJTLUctVVNNREMtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBDT1JQU1wiXSxFW1wiR1IuTTIuREVOVEFMXCJdXSxJW1wiUy1HLVVTTVAtLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUxcIl0sRVtcIkdSLk0yLlBTWUNIT0xPR0lDQUxcIl1dLElbXCJTLUctVVNNUFQtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBUSEVBVEVSXCJdLEVbXCJHUi5NMi5QU1lDSE9MT0dJQ0FMXCJdXSxJW1wiUy1HLVVTTVBDLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgQ09SUFNcIl0sRVtcIkdSLk0yLlBTWUNIT0xPR0lDQUxcIl1dLElbXCJTLUctVVNTLS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdXSxJW1wiUy1HLVVTU1QtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdXSxJW1wiUy1HLVVTU0MtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXV0sSVtcIlMtRy1VU1MxLS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElcIl1dLElbXCJTLUctVVNTMVQtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElcIl1dLElbXCJTLUctVVNTMUMtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJXCJdXSxJW1wiUy1HLVVTUzItLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSUlcIl1dLElbXCJTLUctVVNTMlQtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJXCJdXSxJW1wiUy1HLVVTUzJDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSUlcIl1dLElbXCJTLUctVVNTMy0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbXCJTLUctVVNTM1QtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVtcIlMtRy1VU1MzQy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVtcIlMtRy1VU1MzQS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXSxzLl90cmFuc2xhdGUoMjUsNSxzLl9zY2FsZSguNSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0pKV0sSVtcIlMtRy1VU1MzQVRcIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdLHMuX3RyYW5zbGF0ZSgyNSw1LHMuX3NjYWxlKC41LEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSkpXSxJW1wiUy1HLVVTUzNBQ1wiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdLHMuX3RyYW5zbGF0ZSgyNSw1LHMuX3NjYWxlKC41LEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSkpXSxJW1wiUy1HLVVTUzQtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSVZcIl1dLElbXCJTLUctVVNTNFQtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElWXCJdXSxJW1wiUy1HLVVTUzRDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSVZcIl1dLElbXCJTLUctVVNTNS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWXCJdXSxJW1wiUy1HLVVTUzVULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWXCJdXSxJW1wiUy1HLVVTUzVDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXV0sSVtcIlMtRy1VU1M2LS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFZJXCJdXSxJW1wiUy1HLVVTUzZULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSVwiXV0sSVtcIlMtRy1VU1M2Qy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFZJXCJdXSxJW1wiUy1HLVVTUzctLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJXCJdXSxJW1wiUy1HLVVTUzdULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSUlcIl1dLElbXCJTLUctVVNTN0MtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSUlcIl1dLElbXCJTLUctVVNTOC0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSUlJXCJdXSxJW1wiUy1HLVVTUzhULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSUlJXCJdXSxJW1wiUy1HLVVTUzhDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJSVwiXV0sSVtcIlMtRy1VU1M5LS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElYXCJdXSxJW1wiUy1HLVVTUzlULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJWFwiXV0sSVtcIlMtRy1VU1M5Qy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElYXCJdXSxJW1wiUy1HLVVTU1gtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgWFwiXV0sSVtcIlMtRy1VU1NYVC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgWFwiXV0sSVtcIlMtRy1VU1NYQy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFhcIl1dLElbXCJTLUctVVNTTC0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5MQVVORFJZL0JBVEhcIl1dLElbXCJTLUctVVNTTFQtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkxBVU5EUlkvQkFUSFwiXV0sSVtcIlMtRy1VU1NMQy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkxBVU5EUlkvQkFUSFwiXV0sSVtcIlMtRy1VU1NXLS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLldBVEVSXCJdXSxJW1wiUy1HLVVTU1dULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5XQVRFUlwiXV0sSVtcIlMtRy1VU1NXQy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLldBVEVSXCJdXSxJW1wiUy1HLVVTU1dQLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuV0FURVIgUFVSSUZJQ0FUSU9OXCJdXSxJW1wiUy1HLVVTU1dQVFwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5XQVRFUiBQVVJJRklDQVRJT05cIl1dLElbXCJTLUctVVNTV1BDXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5XQVRFUiBQVVJJRklDQVRJT05cIl1dLElbXCJTLUctVVNULS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl1dLElbXCJTLUctVVNUVC0tXCJdPVtFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXV0sSVtcIlMtRy1VU1RDLS1cIl09W0VbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXV0sSVtcIlMtRy1VU1RNLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuTU9WRU1FTlQgQ09OVFJPTCBDRU5UUkVcIl1dLElbXCJTLUctVVNUTVQtXCJdPVtFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuTU9WRU1FTlQgQ09OVFJPTCBDRU5UUkVcIl1dLElbXCJTLUctVVNUTUMtXCJdPVtFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk1PVkVNRU5UIENPTlRST0wgQ0VOVFJFXCJdXSxJW1wiUy1HLVVTVFItLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5SQUlMUk9BRFwiXV0sSVtcIlMtRy1VU1RSVC1cIl09W0VbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5SQUlMUk9BRFwiXV0sSVtcIlMtRy1VU1RSQy1cIl09W0VbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuUkFJTFJPQURcIl1dLElbXCJTLUctVVNUUy0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk5BVkFMXCJdXSxJW1wiUy1HLVVTVFNULVwiXT1bRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk5BVkFMXCJdXSxJW1wiUy1HLVVTVFNDLVwiXT1bRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5OQVZBTFwiXV0sSVtcIlMtRy1VU1RBLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuSUMuQUlSUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVtcIlMtRy1VU1RBVC1cIl09W0VbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJW1wiUy1HLVVTVEFDLVwiXT1bRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJW1wiUy1HLVVTVEktLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5NSVNTSUxFXCJdXSxJW1wiUy1HLVVTVElULVwiXT1bRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk1JU1NJTEVcIl1dLElbXCJTLUctVVNUSUMtXCJdPVtFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk1JU1NJTEVcIl1dLElbXCJTLUctVVNYLS0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl1dLElbXCJTLUctVVNYVC0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU1hDLS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU1hILS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVVNYSFQtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVVNYSEMtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVTWFItLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5NMi5SQUlMUk9BRFwiXV0sSVtcIlMtRy1VU1hSVC1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5NMi5SQUlMUk9BRFwiXV0sSVtcIlMtRy1VU1hSQy1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuTTIuUkFJTFJPQURcIl1dLElbXCJTLUctVVNYTy0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLk0xLkFNTVVOSVRJT05cIl1dLElbXCJTLUctVVNYT1QtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuTTEuQU1NVU5JVElPTlwiXV0sSVtcIlMtRy1VU1hPQy1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuTTEuQU1NVU5JVElPTlwiXV0sSVtcIlMtRy1VU1hPTS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuTTEuTUlTU0lMRVwiXV0sSVtcIlMtRy1VU1hPTVRcIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5NMS5NSVNTSUxFXCJdXSxJW1wiUy1HLVVTWE9NQ1wiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5NMS5NSVNTSUxFXCJdXSxJW1wiUy1HLVVTWEUtLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5NMS5FTEVDVFJPLU9QVElDQUxcIl1dLElbXCJTLUctVVNYRVQtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuTTEuRUxFQ1RSTy1PUFRJQ0FMXCJdXSxJW1wiUy1HLVVTWEVDLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5NMS5FTEVDVFJPLU9QVElDQUxcIl1dLElbXCJTLUctVVNYQkRSXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLk0yLkJBVFRMRSBEQU1BR0UgUkVQQUlSXCJdXSxJW1wiUy1HLVVTWFBNLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5NMi5QUkVWRU5USVZFIE1BSU5URU5BTkNFXCJdXSxJW1wiUy1HLVVTWFAtLVwiXT1bRVtcIkdSLklDLlBJUEVMSU5FXCJdXSxJW1wiUy1HLVVTWEVQLVwiXT1bRVtcIkdSLklDLkVOVklST05NRU5UQUwgUFJPVEVDVElPTlwiXV0sSVtcIlMtRy1VSC0tLS1cIl09W10sSVtcIlMtRy1VSDEtLS1cIl09W0VbXCJHUi5JQy5GRi5IRUFEUVVBUlRFUlMgT1IgSEVBRFFVQVJURVJTIEVMRU1FTlRcIl1dLElbXCJTLUctVUgyLS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5IRUFEUVVBUlRFUlMgT1IgSEVBRFFVQVJURVJTIEVMRU1FTlRcIl1dLElbXCJTLUctVUhHTC0tXCJdPUlbXCJTLUctR0wtLS0tXCJdPVtFW1wiR1IuSUMuTElBSVNPTlwiXV19fSx4PXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbY10saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtRy1FLS0tLS1cIl09W10sSVtcIlMtRy1FVy0tLS1cIl09W10sSVtcIlMtRy1FV00tLS1cIl09W0VbXCJHUi5FUS5NSVNTSUxFIExBVU5DSEVSXCJdXSxJW1wiUy1HLUVXTUEtLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl1dLElbXCJTLUctRVdNQVMtXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdNQVNSXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVExBUlwiXV0sSVtcIlMtRy1FV01BU0VcIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXV0sSVtcIlMtRy1FV01BSS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdNQUlSXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRMQVJcIl1dLElbXCJTLUctRVdNQUlFXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRFTEFSXCJdXSxJW1wiUy1HLUVXTUFMLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdNQUxSXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdXSxJW1wiUy1HLUVXTUFMRVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEVMQVJcIl1dLElbXCJTLUctRVdNQVQtXCJdPVtzLl90cmFuc2xhdGUoMCwtMTUscy5fc2NhbGUoLjcsRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0pKSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUSEVBVFJFXCJdXSxJW1wiUy1HLUVXTUFUUlwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC43LEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdKSksRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEhFQVRSRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdXSxJW1wiUy1HLUVXTUFURVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC43LEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdKSksRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEhFQVRSRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXV0sSVtcIlMtRy1FV01TLS1cIl09W0VbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV01TUy1cIl09W0VbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdNU0ktXCJdPVtFW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV01TTC1cIl09W0VbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV01ULS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdXSxJW1wiUy1HLUVXTVRMLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXTVRNLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV01USC1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXUy0tLVwiXT1bRVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl1dLElbXCJTLUctRVdTTC0tXCJdPVtFW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdTTS0tXCJdPVtFW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXU0gtLVwiXT1bRVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdYLS0tXCJdPVtFW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdXSxJW1wiUy1HLUVXWEwtLVwiXT1bRVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwxMCxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl0pXSxJW1wiUy1HLUVXWE0tLVwiXT1bRVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwxMCxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdKV0sSVtcIlMtRy1FV1hILS1cIl09W0VbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMTAsRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0pXSxJW1wiUy1HLUVXVC0tLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV1RMLS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXVE0tLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXVEgtLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV1ItLS1cIl09W0VbXCJHUi5FUS5SSUZMRVwiXV0sSVtcIlMtRy1FV1JSLS1cIl09W0VbXCJHUi5FUS5SSUZMRVwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdSTC0tXCJdPVtFW1wiR1IuRVEuUklGTEVcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV1JILS1cIl09W0VbXCJHUi5FUS5SSUZMRVwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV1otLS1cIl09W0VbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdXSxJW1wiUy1HLUVXWkwtLVwiXT1bRVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdKV0sSVtcIlMtRy1FV1pNLS1cIl09W0VbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0pXSxJW1wiUy1HLUVXWkgtLVwiXT1bRVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0pXSxJW1wiUy1HLUVXTy0tLVwiXT1bRVtcIkdSLkVRLk1PUlRBUlwiXV0sSVtcIlMtRy1FV09MLS1cIl09W0VbXCJHUi5FUS5NT1JUQVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXT00tLVwiXT1bRVtcIkdSLkVRLk1PUlRBUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXT0gtLVwiXT1bRVtcIkdSLkVRLk1PUlRBUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV0gtLS1cIl09W0VbXCJHUi5FUS5IT1dJVFpFUlwiXV0sSVtcIlMtRy1FV0hMLS1cIl09W0VbXCJHUi5FUS5IT1dJVFpFUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdITFMtXCJdPVtzLl90cmFuc2xhdGUoMCwtMTUscy5fc2NhbGUoLjgsW0VbXCJHUi5FUS5IT1dJVFpFUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dKSksRVtcIkdSLkVRLkhPV0lUWkVSIFRSQUNLRURcIl1dLElbXCJTLUctRVdITS0tXCJdPVtFW1wiR1IuRVEuSE9XSVRaRVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV0hNUy1cIl09W3MuX3RyYW5zbGF0ZSgwLC0xNSxzLl9zY2FsZSguOCxbRVtcIkdSLkVRLkhPV0lUWkVSXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dKSksRVtcIkdSLkVRLkhPV0lUWkVSIFRSQUNLRURcIl1dLElbXCJTLUctRVdISC0tXCJdPVtFW1wiR1IuRVEuSE9XSVRaRVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdISFMtXCJdPVtzLl90cmFuc2xhdGUoMCwtMTUscy5fc2NhbGUoLjgsW0VbXCJHUi5FUS5IT1dJVFpFUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0pKSxFW1wiR1IuRVEuSE9XSVRaRVIgVFJBQ0tFRFwiXV0sSVtcIlMtRy1FV0ctLS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl1dLElbXCJTLUctRVdHTC0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1FV0dNLS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV0dILS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdHUi0tXCJdPVtFW1wiR1IuRVEuUkVDT0lMTEVTUyBHVU5cIl1dLElbXCJTLUctRVdELS0tXCJdPVtFW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdXSxJW1wiUy1HLUVXREwtLVwiXT1bRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdETFMtXCJdPVtzLl90cmFuc2xhdGUoMCwtMTUscy5fc2NhbGUoLjgsW0VbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSkpLEVbXCJHUi5FUS5IT1dJVFpFUiBUUkFDS0VEXCJdXSxJW1wiUy1HLUVXRE0tLVwiXT1bRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXRE1TLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC44LFtFW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dKSksRVtcIkdSLkVRLkhPV0lUWkVSIFRSQUNLRURcIl1dLElbXCJTLUctRVdESC0tXCJdPVtFW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXREhTLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC44LFtFW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSkpLEVbXCJHUi5FUS5IT1dJVFpFUiBUUkFDS0VEXCJdXSxJW1wiUy1HLUVXQS0tLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXV0sSVtcIlMtRy1FV0FMLS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXQU0tLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXQUgtLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FVi0tLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXV0sSVtcIlMtRy1FVkEtLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuQVJNT1VSRUQgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkFULS1cIl09W0VbXCJHUi5FUS5UQU5LXCJdXSxJW1wiUy1HLUVWQVRMLVwiXT1bRVtcIkdSLkVRLlRBTktcIl0sRVtcIkdSLkVRLkxJR0hUIFRBTktcIl1dLElbXCJTLUctRVZBVExSXCJdPUlbXCJTLUctRVZBVFctXCJdPVtFW1wiR1IuRVEuVEFOS1wiXSxFW1wiR1IuRVEuTElHSFQgVEFOS1wiXSxFW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQVRNLVwiXT1bRVtcIkdSLkVRLlRBTktcIl0sRVtcIkdSLkVRLk1FRElVTSBUQU5LXCJdXSxJW1wiUy1HLUVWQVRNUlwiXT1JW1wiUy1HLUVWQVRYLVwiXT1bRVtcIkdSLkVRLlRBTktcIl0sRVtcIkdSLkVRLk1FRElVTSBUQU5LXCJdLEVbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbXCJTLUctRVZBVEgtXCJdPVtFW1wiR1IuRVEuVEFOS1wiXSxFW1wiR1IuRVEuSEVBVlkgVEFOS1wiXV0sSVtcIlMtRy1FVkFUSFJcIl09SVtcIlMtRy1FVkFUWS1cIl09W0VbXCJHUi5FUS5UQU5LXCJdLEVbXCJHUi5FUS5IRUFWWSBUQU5LXCJdLEVbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbXCJTLUctRVZBQS0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl1dLElbXCJTLUctRVZBQVItXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sRVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkFJLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQUMtLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEUgKEFGVikgQ09NTUFORCBBTkQgQ09OVFJPTFwiXV0sSVtcIlMtRy1FVkFTLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUiBDT01CQVQgU0VSVklDRSBTVVBQT1JUIFZFSElDTEVcIl1dLElbXCJTLUctRVZBTC0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXV0sSVtcIlMtRy1FVlUtLS1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl1dLElbXCJTLUctRVZVQi0tXCJdPVtFW1wiR1IuRVEuQlVTXCJdXSxJW1wiUy1HLUVWVVMtLVwiXT1bRVtcIkdSLkVRLlNFTUktVFJBSUxFUiBUUlVDS1wiXV0sSVtcIlMtRy1FVlVTTC1cIl09W0VbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBMSUdIVFwiXV0sSVtcIlMtRy1FVlVTTS1cIl09W0VbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBNRURJVU1cIl1dLElbXCJTLUctRVZVU0gtXCJdPVtFW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgSEVBVllcIl1dLElbXCJTLUctRVZVTC0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl1dLElbXCJTLUctRVZVWC0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DUk9TUy1DT1VOVFJZXCJdXSxJW1wiUy1HLUVWVVItLVwiXT1bRVtcIkdSLkVRLldBVEVSIFZFSElDTEVcIl1dLElbXCJTLUctRVZVVC0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLXCJdXSxJW1wiUy1HLUVWVVRMLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDS1wiXSxFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDSy5MSUdIVFwiXV0sSVtcIlMtRy1FVlVUSC1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0tcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0suSEVBVllcIl1dLElbXCJTLUctRVZVQS0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbXCJTLUctRVZVQUEtXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sRVtcIkdSLkVRLk1FRElDQUwgRVZBQ1VBVElPTlwiXV0sSVtcIlMtRy1FVkUtLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxzLl9zY2FsZSguNyxFW1wiR1IuSUMuRU5HSU5FRVJcIl0pXSxJW1wiUy1HLUVWRUItLVwiXT1bRVtcIkdSLkVRLkJSSURHRVwiXV0sSVtcIlMtRy1FVkVFLS1cIl09W0VbXCJHUi5FUS5FQVJUSE1PVkVSXCJdXSxJW1wiUy1HLUVWRUMtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdLHMuX3NjYWxlKC42LEVbXCJHUi5JQy5FTkdJTkVFUlwiXSldLElbXCJTLUctRVZFTS0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5NSU5FIExBWUlORyBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWRU1BLVwiXT1bRVtcIkdSLkVRLk1JTkUgQ0xFQVJJTkcgRVFVSVBNRU5UXCJdLEVbXCJHUi5FUS5UQU5LXCJdXSxJW1wiUy1HLUVWRU1WLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEVbXCJHUi5FUS5BUk1PUkVEIENBUlJJRVIgV0lUSCBWT0xDQU5PXCJdXSxJW1wiUy1HLUVWRU1ULVwiXT1bRVtcIkdSLkVRLk1JTkUgQ0xFQVJJTkcgRVFVSVBNRU5UXCJdLHMuX3RyYW5zbGF0ZSgwLC0xMCxFW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdKV0sSVtcIlMtRy1FVkVNTC1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSxFW1wiR1IuRVEuQVJNT1JFRCBDQVJSSUVSIFdJVEggVk9MQ0FOT1wiXV0sSVtcIlMtRy1FVkVBLS1cIl09W0VbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXV0sSVtcIlMtRy1FVkVBQS1cIl09W0VbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXSxFW1wiR1IuRVEuVEFOS1wiXV0sSVtcIlMtRy1FVkVBVC1cIl09W0VbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXSxzLl90cmFuc2xhdGUoMCwtMTAsRVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSldLElbXCJTLUctRVZFTVNNXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sRVtcIkdSLkVRLk1JTkUgU0NBVFRFUkFCTEVcIl1dLElbXCJTLUctRVZFRC0tXCJdPVtFW1wiR1IuRVEuRE9aRVJcIl1dLElbXCJTLUctRVZFREEtXCJdPVtFW1wiR1IuRVEuRE9aRVIgQVJNT1JFRFwiXV0sSVtcIlMtRy1FVkVTLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxzLl9zY2FsZSguNixFW1wiR1IuSUMuRU5HSU5FRVJcIl0pXSxJW1wiUy1HLUVWRVItLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLHMuX3NjYWxlKC42LEVbXCJHUi5JQy5FTkdJTkVFUlwiXSksRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSIEVOR0lORUVSIFJFQ09OIFZFSElDTEVcIl1dLElbXCJTLUctRVZFSC0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBCQUNLSE9FXCJdXSxJW1wiUy1HLUVWRUYtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXSxFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIEZFUlJZIFRSQU5TUE9SVEVSXCJdXSxJW1wiUy1HLUVWRC0tLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXSxzLl9zY2FsZSguNyxFW1wiR1IuSUMuRFJJTExJTkdcIl0pXSxJW1wiUy1HLUVWVC0tLVwiXT1bRVtcIkdSLkVRLlRSQUlOIExPQ09NT1RJVkVcIl1dLElbXCJTLUctRVZDLS0tXCJdPVtFW1wiR1IuSS5DSVZJTElBTlwiXV0sSVtcIlMtRy1FVkNBLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl1dLElbXCJTLUctRVZDQUwtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJW1wiUy1HLUVWQ0FNLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbXCJTLUctRVZDQUgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJW1wiUy1HLUVWQ08tLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl1dLElbXCJTLUctRVZDT0wtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVtcIlMtRy1FVkNPTS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVtcIlMtRy1FVkNPSC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJW1wiUy1HLUVWQ00tLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl1dLElbXCJTLUctRVZDTUwtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVtcIlMtRy1FVkNNTS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVtcIlMtRy1FVkNNSC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJW1wiUy1HLUVWQ1UtLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQ1VMLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJW1wiUy1HLUVWQ1VNLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVtcIlMtRy1FVkNVSC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVtcIlMtRy1FVkNKLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQ0pMLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSkVFUCBUWVBFIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl1dLElbXCJTLUctRVZDSk0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbXCJTLUctRVZDSkgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVtcIlMtRy1FVkNULS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ1RMLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbXCJTLUctRVZDVE0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbXCJTLUctRVZDVEgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVtcIlMtRy1FVkNGLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbXCJTLUctRVZDRkwtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ0ZNLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbXCJTLUctRVZDRkgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWTS0tLVwiXT1bRVtcIkdSLkVRLlBBQ0sgQU5JTUFMXCJdXSxJW1wiUy1HLUVWUy0tLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEVbXCJHUi5FUS5NSVNTSUxFIFNVUFBPUlRcIl1dLElbXCJTLUctRVZTVC0tXCJdPVI/W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuTUlTU0lMRSBUUkFOU0xPQURFUlwiXV06W0VbXCJHUi5FUS5UUkFJTiBMT0NPTU9USVZFXCJdXSxJW1wiUy1HLUVWU1ItLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEVbXCJHUi5FUS5NSVNTSUxFIFRSQU5TUE9SVEVSXCJdXSxJW1wiUy1HLUVWU0MtLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEVbXCJHUi5FUS5NSVNTSUxFIENSQU5FL0xPQURJTkcgREVWSUNFXCJdXSxJW1wiUy1HLUVWU1AtLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEVbXCJHUi5FUS5NSVNTSUxFIFBST1BFTExBTlQgVFJBTlNQT1JURVJcIl1dLElbXCJTLUctRVZTVy0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sRVtcIkdSLkVRLk1JU1NJTEUgV0FSSEVBRCBUUkFOU1BPUlRFUlwiXV0sSVtcIlMtRy1FUy0tLS1cIl09W0VbXCJHUi5FUS5TRU5TT1JcIl1dLElbXCJTLUctRVNSLS0tXCJdPVtFW1wiR1IuRVEuUkFEQVJcIl1dLElbXCJTLUctRVNFLS0tXCJdPVtFW1wiR1IuRVEuU0VOU09SIEVNUExBQ0VEXCJdXSxJW1wiUy1HLUVYSS0tLVwiXT1bRVtcIkdSLkVRLklNUFJPVklTRUQgRVhQTE9TSVZFIERFVklDRVwiXV0sSVtcIlMtRy1FWC0tLS1cIl09W10sSVtcIlMtRy1FWEwtLS1cIl09W0VbXCJHUi5FUS5MQVNFUlwiXV0sSVtcIlMtRy1FWE4tLS1cIl09W0VbXCJHUi5FUS5DQlJOIEVRVUlQTUVOVFwiXV0sSVtcIlMtRy1FWEYtLS1cIl09W0VbXCJHUi5FUS5GTEFNRSBUSFJPV0VSXCJdXSxJW1wiUy1HLUVYTS0tLVwiXT1bRVtcIkdSLkVRLkxBTkQgTUlORVNcIl1dLElbXCJTLUctRVhNQy0tXCJdPVtFW1wiR1IuRVEuQU5USVBFUlNPTk5FTCBMQU5EIE1JTkVcIl1dLElbXCJTLUctRVhNTC0tXCJdPVtFW1wiR1IuRVEuQU5USVBFUlNPTk5FTCBMQU5EIE1JTkUgTEVTUyBUSEFOIExFVEhBTFwiXV07dmFyIGU9e1wiRS0tLS0tXCI6MCxcIkVXTS0tLVwiOjE0MCxcIkVXTUEtLVwiOjE0MCxcIkVXTUFTLVwiOjE0MCxFV01BU1I6MTQwLEVXTUFTRToxNDAsXCJFV01BSS1cIjoxNDAsRVdNQUlSOjE0MCxFV01BSUU6MTQwLFwiRVdNQUwtXCI6MTQwLEVXTUFMUjoxNDAsRVdNQUxFOjE0MCxcIkVXTUFULVwiOjE1MyxFV01BVFI6MTUzLEVXTUFURToxNTMsXCJFV01TLS1cIjoxNDAsXCJFV01TUy1cIjoxNDAsXCJFV01TSS1cIjoxNDAsXCJFV01TTC1cIjoxNDAsXCJFV01ULS1cIjoxNDAsXCJFV01UTC1cIjoxNDAsXCJFV01UTS1cIjoxNDAsXCJFV01USC1cIjoxNDAsXCJFV1MtLS1cIjoxNDAsXCJFV1NMLS1cIjoxNDAsXCJFV1NNLS1cIjoxNDAsXCJFV1NILS1cIjoxNDAsXCJFV1gtLS1cIjoxNDAsXCJFV1hMLS1cIjoxNDAsXCJFV1hNLS1cIjoxNDAsXCJFV1hILS1cIjoxNDAsXCJFV1QtLS1cIjoxNDAsXCJFV1RMLS1cIjoxNDAsXCJFV1RNLS1cIjoxNDAsXCJFV1RILS1cIjoxNDAsXCJFV1ItLS1cIjoxNDAsXCJFV1JMLS1cIjoxNDAsXCJFV1JNLS1cIjoxNDAsXCJFV1JILS1cIjoxNDAsXCJFV1otLS1cIjoxNDAsXCJFV1pMLS1cIjoxNDAsXCJFV1pNLS1cIjoxNDAsXCJFV1pILS1cIjoxNDAsXCJFV08tLS1cIjoxNDAsXCJFV09MLS1cIjoxNDAsXCJFV09NLS1cIjoxNDAsXCJFV09ILS1cIjoxNDAsXCJFV0gtLS1cIjoxNDAsXCJFV0hMLS1cIjoxNDAsXCJFV0hMUy1cIjoxMzAsXCJFV0hNLS1cIjoxNDAsXCJFV0hNUy1cIjoxMzAsXCJFV0hILS1cIjoxNDAsXCJFV0hIUy1cIjoxMzAsXCJFV0ctLS1cIjoxNDAsXCJFV0dMLS1cIjoxNDAsXCJFV0dNLS1cIjoxNDAsXCJFV0dILS1cIjoxNDAsXCJFV0dSLS1cIjoxNDAsXCJFV0QtLS1cIjoxNDAsXCJFV0RMLS1cIjoxNDAsXCJFV0RMUy1cIjoxMzAsXCJFV0RNLS1cIjoxNDAsXCJFV0RNUy1cIjoxMzAsXCJFV0RILS1cIjoxNDAsXCJFV0RIUy1cIjoxMzAsXCJFV0EtLS1cIjoxNDAsXCJFV0FMLS1cIjoxNDAsXCJFV0FNLS1cIjoxNDAsXCJFV0FILS1cIjoxNDAsXCJFVi0tLS1cIjoxMjksXCJFVkEtLS1cIjoxMjksXCJFVkFULS1cIjoxMzAsXCJFVkFUTC1cIjoxMzAsRVZBVExSOjEzMCxcIkVWQVRNLVwiOjEzMCxFVkFUTVI6MTMwLFwiRVZBVEgtXCI6MTMwLEVWQVRIUjoxMzAsXCJFVkFBLS1cIjoxMzAsXCJFVkFBUi1cIjoxMzAsXCJFVkFJLS1cIjoxMzAsXCJFVkFDLS1cIjoxMzAsXCJFVkFTLS1cIjoxMzAsXCJFVkFMLS1cIjoxNDAsXCJFVlUtLS1cIjoxMzAsXCJFVkFCLS1cIjoxMzAsXCJFVlVTLS1cIjoxNDAsXCJFVlVTTC1cIjoxNDAsXCJFVlVTTS1cIjoxNDAsXCJFVlVTSC1cIjoxNDAsXCJFVlVMLS1cIjoxNDAsXCJFVlVYLS1cIjoxNDAsXCJFVlVSLS1cIjoxMzAsXCJFVlVUTC1cIjoxMzAsXCJFVlVUSC1cIjoxMzAsXCJFVlVBLS1cIjoxMzAsXCJFVlVBQS1cIjoxMzAsXCJFVkUtLS1cIjoxMjksXCJFVkVCLS1cIjoxMzAsXCJFVkVFLS1cIjoxMzAsXCJFVkVDLS1cIjoxNDAsXCJFVkVNLS1cIjoxMzAsXCJFVkVNQS1cIjoxMzAsXCJFVkVNVi1cIjoxMzAsXCJFVkVNVC1cIjoxMzAsXCJFVkVNTC1cIjoxNDAsXCJFVkVBLS1cIjoxMjAsXCJFVkVBQS1cIjoxMzAsXCJFVkVBVC1cIjoxMzAsRVZFTVNNOjEzMCxcIkVWRUQtLVwiOjEzMCxcIkVWRURBLVwiOjEzMCxcIkVWRVMtLVwiOjEzMCxcIkVWRVItLVwiOjEzMCxcIkVWRUgtLVwiOjE0MCxcIkVWRUYtLVwiOjE0MCxcIkVWRC0tLVwiOjE0MCxcIkVWVC0tXCI6MTMwLFwiRVZDLS0tXCI6MTE5LFwiRVZDQS0tXCI6MTMyLjUsXCJFVkNBTC1cIjoxMzIuNSxcIkVWQ0FNLVwiOjEzMi41LFwiRVZDQUgtXCI6MTMyLjUsXCJFVkNPLS1cIjoxMzIuNSxcIkVWQ09MLVwiOjEzMi41LFwiRVZDT00tXCI6MTMyLjUsXCJFVkNPSC1cIjoxMzIuNSxcIkVWQ00tLVwiOjEzMi41LFwiRVZDTUwtXCI6MTMyLjUsXCJFVkNNTS1cIjoxMzIuNSxcIkVWQ01ILVwiOjEzMi41LFwiRVZDVS0tXCI6MTMyLjUsXCJFVkNVTC1cIjoxMzIuNSxcIkVWQ1VNLVwiOjEzMi41LFwiRVZDVUgtXCI6MTMyLjUsXCJFVkNKLS1cIjoxMzIuNSxcIkVWQ0pMLVwiOjEzMi41LFwiRVZDSk0tXCI6MTMyLjUsXCJFVkNKSC1cIjoxMzIuNSxcIkVWQ1QtLVwiOjEzMi41LFwiRVZDVEwtXCI6MTMyLjUsXCJFVkNUTS1cIjoxMzIuNSxcIkVWQ1RILVwiOjEzMi41LFwiRVZDRi0tXCI6MTMyLjUsXCJFVkNGTC1cIjoxMzIuNSxcIkVWQ0ZNLVwiOjEzMi41LFwiRVZDRkgtXCI6MTMyLjUsXCJFVk0tLS1cIjoxMjUsXCJFVlMtLS1cIjoxMjksXCJFVlNULS1cIjoxMjksXCJFVlNSLS1cIjoxMjksXCJFVlNDLS1cIjoxMjksXCJFVlNQLS1cIjoxMjksXCJFVlNXLS1cIjoxMjksXCJFUy0tLS1cIjoxNDAsXCJFU1ItLS1cIjoxMjAsXCJFU0UtLS1cIjoxMzYsXCJFWEktLS1cIjoxMTksXCJFWEwtLS1cIjoxNDUsXCJFWE4tLS1cIjoxNDAsXCJFWEYtLS1cIjoxMzUsXCJFWE0tLS1cIjoxMzAsXCJFWE1DLS1cIjoxMjIsXCJFWE1MLS1cIjoxMjJ9O2Zvcih2YXIgQSBpbiBlKWUuaGFzT3duUHJvcGVydHkoQSkmJih0W1wiUy1HLVwiK0FdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6ZVtBXX0pfX0sVT17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2NdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLUctSS0tLS0tXCJdPVtdLElbXCJTLUctSVItLS0tXCJdPVtFW1wiR1IuSU4uSUMuUkFXIE1BVEVSSUFMIFBST0RVQ1RJT04vU1RPUkFHRVwiXV0sSVtcIlMtRy1JUk0tLS1cIl09W0VbXCJHUi5JTi5JQy5NSU5FXCJdXSxJW1wiUy1HLUlSUC0tLVwiXT1bRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVtcIlMtRy1JUk4tLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdXSxJW1wiUy1HLUlSTkItLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkJJT0xPR0lDQUxcIl1dLElbXCJTLUctSVJOQy0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuQ0hFTUlDQUxcIl1dLElbXCJTLUctSVJOTi0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuTlVDTEVBUlwiXV0sSVtcIlMtRy1JUC0tLS1cIl09W0VbXCJHUi5JTi5JQy5QUk9DRVNTSU5HIEZBQ0lMSVRZXCJdXSxJW1wiUy1HLUlQRC0tLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkRFQ09OVEFNSU5BVElPTlwiXV0sSVtcIlMtRy1JRS0tLS1cIl09W0VbXCJHUi5JQy5FUVVJUE1FTlQgTUFOVUZBQ1RVUkVcIl1dLElbXCJTLUctSVUtLS0tXCJdPVtFW1wiR1IuSU4uSUMuVVRJTElUWSBGQUNJTElUWVwiXV0sSVtcIlMtRy1JVVItLS1cIl09W0VbXCJHUi5JTi5JQy5SRVNFQVJDSFwiXV0sSVtcIlMtRy1JVVQtLS1cIl09W0VbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlNcIl1dLElbXCJTLUctSVVFLS0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl1dLElbXCJTLUctSVVFTi0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0sRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSIE5VQ0xFQVJcIl1dLElbXCJTLUctSVVFRC0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0sRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSIERBTVwiXV0sSVtcIlMtRy1JVUVGLS1cIl09W0VbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUlwiXSxFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVIgRk9TU0lMXCJdXSxJW1wiUy1HLUlVUC0tLVwiXT1bRVtcIkdSLklDLldBVEVSXCJdXSxJW1wiUy1HLUlNLS0tLVwiXT1bXSxJW1wiUy1HLUlNRi0tLVwiXT1bRVtcIkdSLklOLklDLkFUT01JQyBFTkVSR1lcIl1dLElbXCJTLUctSU1GQS0tXCJdPVtFW1wiR1IuSU4uSUMuQVRPTUlDIEVORVJHWVwiXSxFW1wiR1IuSU4uTTIuQVRPTUlDIEVORVJHWSBSRUFDVE9SXCJdXSxJW1wiUy1HLUlNRlAtLVwiXT1bRVtcIkdSLklOLklDLkFUT01JQyBFTkVSR1lcIl0sRVtcIkdSLklOLk0yLk5VQ0xFQVIgTUFURVJJQUwgUFJPRFVDVElPTlwiXV0sSVtcIlMtRy1JTUZQVy1cIl09W0VbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZIFdFQVBPTlMgR1JBREVcIl0sRVtcIkdSLklOLk0yLk5VQ0xFQVIgTUFURVJJQUwgUFJPRFVDVElPTlwiXV0sSVtcIlMtRy1JTUZTLS1cIl09W0VbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZXCJdLEVbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFNUT1JBR0VcIl1dLElbXCJTLUctSU1BLS0tXCJdPVtFW1wiR1IuSU4uSUMuQUlSQ1JBRlQgUFJPRFVDVElPTiAmIEFTU0VNQkxZXCJdXSxJW1wiUy1HLUlNRS0tLVwiXT1bRVtcIkdSLklDLkZGLkNMQVNTIFZcIl1dLElbXCJTLUctSU1HLS0tXCJdPVtFW1wiR1IuRVEuVEFOS1wiXV0sSVtcIlMtRy1JTVYtLS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXV0sSVtcIlMtRy1JTU4tLS1cIl09W0VbXCJHUi5FUS5ET1pFUlwiXV0sSVtcIlMtRy1JTU5CLS1cIl09W0VbXCJHUi5JTi5JQy5CUklER0VcIl1dLElbXCJTLUctSU1DLS0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuSU4uTTIuQ0hFTUlDQUwgJiBCSU9MT0dJQ0FMIFdBUkZBUkVcIl1dLElbXCJTLUctSU1TLS0tXCJdPVtFW1wiR1IuSUMuTkFWQUxcIl0sRVtcIkdSLklOLk0yLlNISVAgQ09OU1RSVUNUSU9OXCJdXSxJW1wiUy1HLUlNTS0tLVwiXT1bRVtcIkdSLklDLk1JU1NJTEVcIl1dLElbXCJTLUctSUctLS0tXCJdPVtFW1wiR1IuSS5HT1ZFUk5NRU5UXCJdXSxJW1wiUy1HLUlCLS0tLVwiXT1bRVtcIkdSLklOLklDLkJBU0VcIl1dLElbXCJTLUctSUJBLS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLklDLkFJUlBPUlQgT0YgREVCQVJLQVRJT05cIl1dLElbXCJTLUctSUJOLS0tXCJdPVtFW1wiR1IuSUMuTkFWQUxcIl1dLElbXCJTLUctSVQtLS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl1dLElbXCJTLUctSVgtLS0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTFwiXV0sSVtcIlMtRy1JWEgtLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIFRSRUFUTUVOVCBGQUNJTElUWVwiXV0sSVtcIlMtRy1JUlItLS1cIl09SVtcIlMtRy1JUlNSLS1cIl09W0VbXCJHUi5JTi5JQy5TRUEgU1VSRkFDRSBJTlNUQUxMQVRJT04sIE9JTCBSSUcvUExBVEZPUk1cIl1dfX07ZnVuY3Rpb24gZChJLHQsRSxSLGUsQSl7dmFyIEM9dC5mcmFtZSxUPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsUz10Lm51bWJlclNJREMsTj1FLmljb25Db2xvcltUXSxPPUUuaWNvbkZpbGxDb2xvcltUXSxHPUUuYmxhY2tbVF0sbz1FLndoaXRlW1RdLE09e307Zm9yKHZhciBpIGluIE1bXCJTRS5JQy5NSUxJVEFSWVwiXT1hKFwiTUlMXCIpLE1bXCJTRS5JQy5NQU5VQUwgVFJBQ0tcIl09YShcIk1BTlwiKSxNW1wiU0UuSUMuQ09NQkFUQU5UXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA4Ni45LDExMCBjIC0zLjYsMiAtNy4yLDMuOSAtMTAuOCw1LjkgMi4xLDIuOSA2LjcsMy45IDEwLDIuMSAyLjYsLTAuOSA0LjcsLTMuOCAzLjEsLTYuMSAtMC44LC0wLjYgLTEuNSwtMS4zIC0yLjMsLTEuOSB6IG0gMjYuMywwLjEgYyAzLjYsMiA3LjIsMy45IDEwLjgsNS45IC0yLjEsMi45IC02LjcsMy45IC0xMCwyLjEgLTIuNiwtMC45IC00LjcsLTMuOCAtMy4xLC02LjEgMC44LC0wLjYgMS41LC0xLjMgMi4zLC0xLjkgelwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDExMi45LDExMCBjIC01LjYsLTQgLTExLjMsLTcuOSAtMTYuMSwtMTIuNSAtNC4yLC00LjUgLTcsLTkuOCAtOS4yLC0xNS4xIC0wLjgsNC40IC0wLjksOS4zIDIuNCwxMy4yIDMuNiw0LjUgOC42LDguMSAxMy41LDExLjggMi4zLDEuNyA0LjcsMy4zIDcuMSw0LjggMC44LC0wLjcgMS41LC0xLjUgMi4zLC0yLjIgbSAtMjUuNywwIGMgNS42LC00IDExLjMsLTcuOSAxNi4xLC0xMi41IDQuMiwtNC41IDcsLTkuOCA5LjIsLTE1LjEgMC44LDQuNCAwLjksOS4zIC0yLjQsMTMuMiAtMy42LDQuNSAtOC42LDguMSAtMTMuNSwxMS44IC0yLjMsMS43IC00LjcsMy4zIC03LjEsNC44IC0wLjgsLTAuNyAtMS41LC0xLjUgLTIuMywtMi4yXCIsZmlsbDpvLHN0cm9rZXdpZHRoOjJ9XSxNW1wiU0UuSUMuU1VSRkFDRSBDT01CQVRBTlQsIExJTkVcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMCwxMjAgLTI1LC0xNyAxNSwyIDAsLTEwIDUsMCAwLC01IC0xNSwwIDAsLTUgMTUsMCAwLC01IDEwLDAgMCw1IDE1LDAgMCw1IC0xNSwwIDAsNSA1LDAgMCwxMCAxNSwtMiB6XCJ9LE1bXCJTRS5JQy5DQVJSSUVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEwMCAyMCwyMCAyMCwtMjAgLTIwLDAgMCwtMjAgLTIwLDAgelwifSxNW1wiU0UuSUMuQkFUVExFU0hJUFwiXT1hKFwiQkJcIiksTVtcIlNFLklDLkNJVklMSUFOXCJdPWEoXCJDSVZcIiksTVtcIlNFLklDLkNJVklMSUFOXCJdLmZpbGw9Unx8Uz9POiFDJiZPLE1bXCJTRS5JQy5DSVZJTElBTlwiXS5zdHJva2U9RyxNW1wiU0UuSUMuQ0lWSUxJQU5cIl0uc3Ryb2tld2lkdGg9MyxNW1wiU0UuSUMuQ1JVSVNFUlwiXT1hKFwiQ0NcIiksTVtcIlNFLklDLkNSVUlTRVIsIEdVSURFRCBNSVNTSUxFXCJdPWEoXCJDR1wiKSxNW1wiU0UuSUMuREVTVFJPWUVSXCJdPWEoXCJERFwiKSxNW1wiU0UuSUMuRlJJR0FURVwiXT1hKFwiRkZcIiksTVtcIlNFLklDLkNPUlZFVFRFXCJdPWEoXCJGU1wiKSxNW1wiU0UuSUMuTElUVE9SQUwgQ09NQkFUQU5UIFNISVBcIl09YShcIkxMXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIFdBUkZBUkUgU0hJUFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTIwIDIwLDAgbSAtMjAsMCAtMjAsLTIwIDEwLDAgMCwtMjAgMjAsMCAwLDIwIDEwLDAgelwifSxNW1wiU0UuSUMuQU1QSElCSU9VUyBGT1JDRSBGTEFHU0hJUFwiXT1hKFwiTENDXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFRcIl09YShcIkxBXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgR0VORVJBTFwiXT1hKFwiTEhBXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgTVVMVEktUFVSUE9TRVwiXT1hKFwiTEhEXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIFRSQU5TUE9SVCwgRE9DS1wiXT1hKFwiTFBEXCIpLE1bXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgSEVMSUNPUFRFUlwiXT1hKFwiTFBIXCIpLE1bXCJTRS5JQy5MQU5ESU5HIFNISVBcIl09YShcIkxTXCIpLE1bXCJTRS5JQy5MQU5ESU5HIENSQUZUXCJdPWEoXCJMQ1wiKSxNW1wiU0UuSUMuTUlORSBXQVJGQVJFIFZFU1NFTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5OC4zLDgxIDAsNC4xIGMgLTIuNCwwLjMgLTQuNiwxLjQgLTYuNCwyLjkgbCAtMy41LC0zLjUgLTIuNCwyLjQgMy42LDMuNiBjIC0wLjksMS4zIC0xLjUsNC45IC0xLjgsNi41IGwgLTEwLjgsMCAwLDMgMywwIDIwLDIwIDIwLC0yMCAzLDAgMCwtMyAtMTAsMCBjIC0xLC0xLjcgLTIsLTUuMyAtMywtNi43IGwgNCwtMy43IC0yLC0yLjQgLTQsMy42IGMgLTIsLTEuNCAtNCwtMi40IC02LC0yLjcgbCAwLC00LjEgelwifSxNW1wiU0UuSUMuTUlORUxBWUVSXCJdPWEoXCJNTFwiKSxNW1wiU0UuSUMuTUlORVNXRUVQRVJcIl09YShcIk1TXCIpLE1bXCJTRS5JQy5NSU5FU1dFRVBFUiwgRFJPTkVcIl09YShcIk1TRFwiKSxNW1wiU0UuSUMuTUlORUhVTlRFUlwiXT1hKFwiTUhcIiksTVtcIlNFLklDLk1JTkUgQ09VTlRFUiBNRUFTVVJFIFNVUFBPUlQgU0hJUFwiXT1hKFI/XCJNQVwiOlwiTUNTXCIpLE1bXCJTRS5JQy5NSU5FIENPVU5URVJNRUFTVVJFU1wiXT1hKFwiTUNNXCIpLE1bXCJTRS5JQy5TRUEgU1VSRkFDRSBERUNPWVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMDUsMTEwIDkwLDk1IDEwNSw4MCB6IE0gODUsMTEwIDcwLDk1IDg1LDgwIHogbSA0MCwtMzAgLTE1LDE1IDE1LDE1IHogbSAtNTUsNDAgMCwtNSA1NSwwIDAsNSB6XCJ9LE1bXCJTRS5JQy5QQVRST0xcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsMTAwIDIwLDIwIDIwLC0yMCAtMTAsMCAwLC0yMCAtMjAsMCAwLDIwIHpcIn0sTVtcIlNFLklDLlBBVFJPTCBDUkFGVFwiXT1hKFwiUENcIiksTVtcIlNFLklDLlBBVFJPTCBBTlRJIFNVQk1BUklORSBXQVJGQVJFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMjAgLTI1LC0yNSA1LC01IDEwLDEwIDUsMCAwLC0yMCAxMCwwIDAsMjAgNSwwIDEwLC0xMCA1LDUgelwifSxNW1wiU0UuSUMuUEFUUk9MIEFOVElTSElQIE1JU1NJTEVcIl09YShcIlBNXCIpLE1bXCJTRS5JQy5QQVRST0wgVE9SUEVET1wiXT1hKFwiUFRcIiksTVtcIlNFLklDLlBBVFJPTCBHVU5cIl09YShcIlBHXCIpLE1bXCJTRS5JQy5QQVRST0wgU0hJUFwiXT1bXSxNW1wiU0UuSUMuTUlMSVRBUlkgU1BFRURCT0FUXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjAsMTIwIC00MCwwIC0xNSwtMjUgMTUsMCA1LC0xNSAxMCwwIC01LDE1IDQ1LDAgelwifSxNW1wiU0UuSUMuTUlMSVRBUlkgU1BFRURCT0FULCBSSUdJRC1IVUxMIElORkxBVEFCTEUgQk9BVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDg1IDgwIEwgODAgOTUgTCA2NSA5NSBMIDgwIDEyMCBMIDEyMCAxMjAgTCAxMzUgOTUgTCA5MCA5NSBMIDk1IDgwIEwgODUgODAgeiBNIDg3IDEwMC43IEwgOTMuMSAxMDAuNyBDIDk0LjYgMTAwLjcgOTUuNyAxMDAuOCA5Ni40IDEwMS4xIEMgOTcuMSAxMDEuMyA5Ny43IDEwMS44IDk4LjEgMTAyLjQgQyA5OC41IDEwMy4xIDk4LjcgMTAzLjggOTguNyAxMDQuNyBDIDk4LjcgMTA1LjggOTguNCAxMDYuNyA5Ny44IDEwNy40IEMgOTcuMSAxMDguMSA5Ni4yIDEwOC41IDk0LjkgMTA4LjcgQyA5NS42IDEwOS4xIDk2LjEgMTA5LjQgOTYuNSAxMDkuOSBDIDk2LjkgMTEwLjMgOTcuNCAxMTEuMSA5OC4xIDExMi4yIEwgOTkuOSAxMTUgTCA5Ni40IDExNSBMIDk0LjMgMTExLjkgQyA5My42IDExMC44IDkzLjEgMTEwLjEgOTIuOCAxMDkuOCBDIDkyLjUgMTA5LjUgOTIuMiAxMDkuMyA5MS45IDEwOS4yIEMgOTEuNiAxMDkuMSA5MS4yIDEwOSA5MC41IDEwOSBMIDg5LjkgMTA5IEwgODkuOSAxMTUgTCA4NyAxMTUgTCA4NyAxMDAuNyB6IE0gMTAxLjUgMTAwLjcgTCAxMDcuMiAxMDAuNyBDIDEwOC4zIDEwMC43IDEwOS4yIDEwMC43IDEwOS43IDEwMC44IEMgMTEwLjMgMTAwLjkgMTEwLjggMTAxLjEgMTExLjIgMTAxLjQgQyAxMTEuNyAxMDEuNyAxMTIgMTAyLjEgMTEyLjMgMTAyLjYgQyAxMTIuNiAxMDMuMSAxMTIuNyAxMDMuNyAxMTIuOCAxMDQuMyBDIDExMi43IDEwNSAxMTIuNiAxMDUuNiAxMTIuMiAxMDYuMSBDIDExMS45IDEwNi43IDExMS40IDEwNy4xIDExMC44IDEwNy40IEMgMTExLjYgMTA3LjcgMTEyLjMgMTA4LjEgMTEyLjggMTA4LjcgQyAxMTMuMiAxMDkuMyAxMTMuNSAxMTAgMTEzLjUgMTEwLjggQyAxMTMuNSAxMTEuNSAxMTMuMyAxMTIuMSAxMTMgMTEyLjggQyAxMTIuNyAxMTMuNCAxMTIuMyAxMTMuOCAxMTEuOCAxMTQuMiBDIDExMS4yIDExNC42IDExMC42IDExNC44IDEwOS44IDExNC45IEMgMTA5LjMgMTE1IDEwOC4yIDExNSAxMDYuMyAxMTUgTCAxMDEuNSAxMTUgTCAxMDEuNSAxMDAuNyB6IE0gMTA0LjMgMTAzLjEgTCAxMDQuMyAxMDYuNCBMIDEwNi4zIDEwNi40IEMgMTA3LjQgMTA2LjQgMTA4LjEgMTA2LjMgMTA4LjMgMTA2LjMgQyAxMDguOCAxMDYuMyAxMDkuMiAxMDYuMSAxMDkuNSAxMDUuOCBDIDEwOS44IDEwNS41IDEwOS45IDEwNS4xIDEwOS45IDEwNC43IEMgMTA5LjkgMTA0LjIgMTA5LjggMTAzLjkgMTA5LjYgMTAzLjYgQyAxMDkuMyAxMDMuMyAxMDkgMTAzLjIgMTA4LjUgMTAzLjEgQyAxMDguMiAxMDMuMSAxMDcuNCAxMDMuMSAxMDYgMTAzLjEgTCAxMDQuMyAxMDMuMSB6IE0gODkuOSAxMDMuMSBMIDg5LjkgMTA2LjggTCA5MiAxMDYuOCBDIDkzLjQgMTA2LjggOTQuMyAxMDYuNyA5NC42IDEwNi42IEMgOTUgMTA2LjQgOTUuMiAxMDYuMyA5NS40IDEwNiBDIDk1LjYgMTA1LjcgOTUuNyAxMDUuMyA5NS44IDEwNC45IEMgOTUuNyAxMDQuNCA5NS42IDEwNCA5NS4zIDEwMy43IEMgOTUuMSAxMDMuNCA5NC43IDEwMy4yIDk0LjMgMTAzLjIgQyA5NCAxMDMuMSA5My4zIDEwMy4xIDkyLjIgMTAzLjEgTCA4OS45IDEwMy4xIHogTSAxMDQuMyAxMDguOCBMIDEwNC4zIDExMi42IEwgMTA3IDExMi42IEMgMTA4LjEgMTEyLjYgMTA4LjcgMTEyLjYgMTA5IDExMi41IEMgMTA5LjQgMTEyLjQgMTA5LjggMTEyLjIgMTEwLjEgMTExLjkgQyAxMTAuMyAxMTEuNiAxMTAuNSAxMTEuMiAxMTAuNSAxMTAuNyBDIDExMC41IDExMC4zIDExMC40IDEwOS45IDExMC4yIDEwOS42IEMgMTA5LjkgMTA5LjMgMTA5LjYgMTA5LjEgMTA5LjMgMTA5IEMgMTA4LjkgMTA4LjggMTA4IDEwOC44IDEwNi43IDEwOC44IEwgMTA0LjMgMTA4LjggelwifSx7dHlwZTpcInRleHRcIixmaWxsOlI/TzohQyYmTyxzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MjAsdGV4dDpcIlJCXCJ9XSxNW1wiU0UuSUMuTUlMSVRBUlkgSkVUU0tJXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzUsMTA1IDAsMTUgLTYwLDAgLTEwLC0xNSAyMCwtMjUgMTAsMCAwLDEwIC01LDAgLTUsMTUgelwifSxNW1wiU0UuSUMuVU5NQU5ORUQgU1VSRkFDRSBXQVRFUiBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwiLHN0cm9rZTohMX0sTVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDgwIDE1LDE1IDAsMjUgTSA5MCw4MCA3NSw5NSBsIDAsMjVcIixmaWxsOiExfV0sUiYmTVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4MCAtMTUsMTUgMCwyNSAzMCwwIDAsLTI1IC0xNSwtMTVcIn0pLE1bXCJTRS5JQy5OQVZZIFRBU0sgRk9SQ0VcIl09W01bXCJTRS5JQy5OQVZZIFRBU0sgT1JHQU5JWkFUSU9OIFVOSVRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6Uj8xNTA6MTIwLGZvbnRzaXplOjMwLHRleHQ6XCJURlwifV0sTVtcIlNFLklDLk5BVlkgVEFTSyBHUk9VUFwiXT1bTVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTpSPzE1MDoxMjAsZm9udHNpemU6MzAsdGV4dDpcIlRHXCJ9XSxNW1wiU0UuSUMuTkFWWSBUQVNLIFVOSVRcIl09W01bXCJTRS5JQy5OQVZZIFRBU0sgT1JHQU5JWkFUSU9OIFVOSVRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6Uj8xNTA6MTIwLGZvbnRzaXplOjMwLHRleHQ6XCJUVVwifV0sTVtcIlNFLklDLk5BVlkgVEFTSyBFTEVNRU5UXCJdPVtNW1wiU0UuSUMuTkFWWSBUQVNLIE9SR0FOSVpBVElPTiBVTklUXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OlI/MTUwOjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiVEVcIn1dLE1bXCJTRS5JQy5DT05WT1lcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsMTE1IC0yMCwwIDAsLTM1IDgwLDAgMCwzNSAtMjAsMCAwLC0yMCAtNDAsMCB6XCJ9LE1bXCJTRS5JQy5OT05DT01CQVRBTlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsMTAwIDAsLTIwIDQwLDAgMCwyMCAxNSwwIDAsMjAgLTcwLDAgMCwtMjAgelwifSxNW1wiU0UuSUMuQVVYSUxJQVJZIFNISVBcIl09YShSP1wiQVJcIjpcIkFBXCIpLE1bXCJTRS5JQy5BTU1VTklUSU9OIFNISVBcIl09YShcIkFFXCIpLE1bXCJTRS5JQy5TVE9SRVMgU0hJUFwiXT1hKFwiQUZcIiksTVtcIlNFLklDLkFVWElMSUFSWSBGTEFHIE9SIENPTU1BTkQgU0hJUFwiXT1hKFwiQUdGXCIpLE1bXCJTRS5JQy5JTlRFTExJR0VOQ0UgQ09MTEVDVE9SXCJdPWEoUj9cIkpJXCI6XCJBSVwiKSxNW1wiU0UuSUMuT0NFQU4gUkVTRUFSQ0ggU0hJUFwiXT1hKFwiQUdPXCIpLE1bXCJTRS5JQy5TVVJWRVkgU0hJUFwiXT1hKFwiQUdTXCIpLE1bXCJTRS5JQy5IT1NQSVRBTCBTSElQXCJdPWEoXCJBSFwiKSxNW1wiU0UuSUMuQ0FSR08gU0hJUFwiXT1hKFwiQUtcIiksTVtcIlNFLklDLkNPTUJBVCBTVVBQT1JUIFNISVAsIEZBU1RcIl09YShcIkFPRVwiKSxNW1wiU0UuSUMuT0lMRVIsIFJFUExFTklTSE1FTlRcIl09YShcIkFPXCIpLE1bXCJTRS5JQy5SRVBBSVIgU0hJUFwiXT1hKFwiQVJcIiksTVtcIlNFLklDLlNVQk1BUklORSBURU5ERVJcIl09YShcIkFTXCIpLE1bXCJTRS5JQy5UVUcsIE9DRUFOIEdPSU5HXCJdPWEoUj9cIkFTXCI6XCJBVFwiKSxNW1wiU0UuSUMuU0VSVklDRSBDUkFGVCwgWUFSRCwgR0VORVJBTFwiXT1hKFI/XCJZWVwiOlwiWVRcIiksTVtcIlNFLklDLkJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl09YShcIllCXCIpLE1bXCJTRS5JQy5CQVJHRSwgU0VMRi1QUk9QRUxMRURcIl09YShcIllTXCIpLE1bXCJTRS5JQy5UVUcsIEhBUkJPVVJcIl09YShcIllUXCIpLE1bXCJTRS5JQy5MQVVOQ0hcIl09YShcIllGVFwiKSxNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohQyYmTyxkOlwibSA3NSwxMDAgMCwtMzUgNTAsMCAwLDM1IDIwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwifSxNW1wiU0UuSUMuQ0FSR08sIEdFTkVSQUxcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlI/XCJDQVwiOlwiQVwifV0sTVtcIlNFLklDLkNPTlRBSU5FUiBTSElQXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkNcIn1dLE1bXCJTRS5JQy5EUkVER0VcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlwiRFwifV0sTVtcIlNFLklDLlJBREFSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzIsOTUgbDMwLC0yNSAwLDI1IDMwLC0yNSBNNzAsNzAgYzAsMzUgMTUsNTAgNTAsNTBcIixmaWxsOiExfSxNW1wiU0UuSUMuUk9MTCBPTi1ST0xMIE9GRlwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOlwiMzBcIix0ZXh0OlI/XCJST1wiOlwiRVwifV0sTVtcIlNFLklDLkZFUlJZXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiRkVcIjpcIkZcIn1dLE1bXCJTRS5JQy5IRUFWWSBMSUZUXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkhcIn1dLE1bXCJTRS5JQy5IT1ZFUkNSQUZUXCJdPXt0eXBlOlwicGF0aFwiLGQ6Uj9cIm0gNjUsMTAwIDAsLTMwIDUsMTAgNjAsMCA1LC0xMCAwLDMwIDEwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwiOlwibSA5MCw4MCAwLDE1LjYgQyA3OC40LDk2LjkgNzAsMTAwLjYgNzAsMTA1IGMgMCw1LjUgMTMuNCwxMCAzMCwxMCAxNi42LDAgMzAsLTQuNSAzMCwtMTAgMCwtNC40IC04LjQsLTguMSAtMjAsLTkuNCBMIDExMCw4MCA5MCw4MCB6IG0gLTE1LDQwIDUwLDBcIn0sTVtcIlNFLklDLkhPVkVSQ1JBRlQgMjUyNURcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlwiSlwifV0sTVtcIlNFLklDLkhPVkVSQ1JBRlQgQ0lWSUxJQU5cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IUMmJk8sZDpSP1wibSA2NSwxMDAgMCwtMzAgNSwxMCA2MCwwIDUsLTEwIDAsMzAgMTAsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCI6XCJtIDkwLDgwIDAsMTUuNiBDIDc4LjQsOTYuOSA3MCwxMDAuNiA3MCwxMDUgYyAwLDUuNSAxMy40LDEwIDMwLDEwIDE2LjYsMCAzMCwtNC41IDMwLC0xMCAwLC00LjQgLTguNCwtOC4xIC0yMCwtOS40IEwgMTEwLDgwIDkwLDgwIHogbSAtMTUsNDAgNTAsMFwifSxNW1wiU0UuSUMuSE9WRVJDUkFGVCBOT05DT01CQVRBTlRcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDEwMCAwLC0zMCA1LDEwIDYwLDAgNSwtMTAgMCwzMCAxMCwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIixzdHJva2V3aWR0aDohMX0sUj97dHlwZTpcInRleHRcIixmaWxsOm8sc3Ryb2tlOiExLHg6MTAwLHk6MTIwLGZvbnRzaXplOjMwLHRleHQ6XCJOQ1wifTpbXV0sTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIExBU0ggQ0FSUklFUiAoV0lUSCBCQVJHRVMpXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkxcIn1dLE1bXCJTRS5JQy5PSUxFUi9UQU5LRVJcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlI/XCJPVFwiOlwiT1wifV0sTVtcIlNFLklDLlBBU1NFTkdFUiBTSElQXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiUEFcIjpcIlBcIn1dLE1bXCJTRS5JQy5UVUcsIE9DRUFOIEdPSU5HIENJVklMSUFOXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiVFVcIjpcIlRcIn1dLE1bXCJTRS5JQy5UT1dcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlwiVFdcIn1dLE1bXCJTRS5JQy5UUkFOU1BPUlQgU0hJUCwgSEFaQVJET1VTIE1BVEVSSUFMXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkhaXCJ9XSxNW1wiU0UuSUMuSlVOSy9ESE9XXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIlFKXCJ9XSxNW1wiU0UuSUMuQkFSR0UsIE5PVCBTRUxGLVBST1BFTExFRFwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJZQlwifV0sTVtcIlNFLklDLkhPU1BJVEFMIFNISVAyXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTUsOTUgMCwtMTUgMTAsMCAwLDE1IDE1LDAgMCwxMCAtMTUsMCAwLDE1IC0xMCwwIDAsLTE1IC0xNSwwIDAsLTEwIHpcIn1dLE1bXCJTRS5JQy5GSVNISU5HIFZFU1NFTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohQyYmTyxkOlwibSA3NSwxMDAgMCwtMTUgMjAsMCAwLDE1IDUwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgeiBNIDEwNSw1Ny40IDEwNSwxMDAgbSAzMCwtMzUgLTMwLDM1XCJ9LE1bXCJTRS5JQy5EUklGVEVSXCJdPVtNW1wiU0UuSUMuRklTSElORyBWRVNTRUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJERlwifV0sTVtcIlNFLklDLlRSQVdMRVJcIl09W01bXCJTRS5JQy5GSVNISU5HIFZFU1NFTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlRSXCJ9XSxNW1wiU0UuSUMuRklTSElORyBWRVNTRUwgRFJFREdFXCJdPVtNW1wiU0UuSUMuRklTSElORyBWRVNTRUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJEUlwifV0sTVtcIlNFLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzNSwxMDAgLTE1LDM1IC0xMCwwIDE1LC0zNSB6XCJ9XSxNW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgU0FJTElORyBCT0FUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFDJiZPLGQ6XCJtIDEwNSw1NSAwLDQwIDM1LDAgeiBtIC01LC01IDAsNTAgbSA0NSwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIn0sTVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRFwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohQyYmTyxkOlwibSA3MCw5Ny40IDE1LC0zMCAxMCwwIC0xNSwzMCA2NSwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIn0sTVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRCwgUklHSUQtSFVMTCBJTkZMQVRBQkxFIEJPQVRcIl09W01bXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRURcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSQlwifV0sTVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRCwgU1BFRURCT0FUXCJdPVtNW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVEXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiU1BcIn1dLE1bXCJTRS5JQy5MRUlTVVJFIENSQUZULCBKRVRTS0lcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IUMmJk8sZDpcIm0gODUsNjAgLTMwLDQ1IDEwLDE1IDc1LDAgMCwtMjAgLTYwLDAgMTAsLTMwIDUsMCAwLC0xMCB6XCJ9LE1bXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEUgKFVTVilcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohKCFSJiYhUykmJk8sc3Ryb2tlOkcsZDpcIm0gNjAsODQgNDAsMjAgNDAsLTIwIDAsOCAtNDAsMjUgLTQwLC0yNSB6XCJ9LE1bXCJTRS5JQy5PV04gU0hJUFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTplP046TyxkOlwibSA1MCwxMDAgMTAwLDAgbSAtNTAsLTUwIDAsMTAwIG0gNTAsLTUwIGMgMCwyNy42IC0yMi40LDUwIC01MCw1MCAtMjcuNiwwIC01MCwtMjIuNCAtNTAsLTUwIDAsLTI3LjYgMjIuNCwtNTAgNTAsLTUwIDI3LjYsMCA1MCwyMi40IDUwLDUwIHpcIn0sTVtcIlNFLklDLkRJVENIRUQgQUlSQ1JBRlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDplP046TyxzdHJva2U6ZT9OOk8sZDpcIm0gMTQ1LDEyMCAtMTUsLTE1IG0gLTE1LDE1IDE1LC0xNSBtIC03NSwxNSAxNSwtMTUgbSAxNSwxNSAtMTUsLTE1IG0gMTAsMTAgMjUsLTMwIC0xMCwtMTAgMTAsLTEwIDIwLDIwIC0xMCwzNSAtMTUsLTE1IC0xNSwxNSB6XCJ9LE1bXCJTRS5JQy5QRVJTT04gSU4gV0FURVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDplP046TyxzdHJva2U6ZT9OOk8sZDpcIm0gMTA1LDExMCAxMCwtMTAgMCwtMTUgNSwwIDAsMjAgLTEwLDEwIHogbSAtMTAsMCAtMTAsLTEwIDAsLTE1IC01LDAgMCwyMCAxMCwxMCB6IG0gNSwtNSAwLC0xMCAtNSwwIC01LC01IDAsLTEwIDUsLTUgMTAsMCA1LDUgMCwxMCAtNSw1IC01LDAgbSAtMTUsMjUgMTUsLTE1IG0gNDUsMTUgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSAtNzUsMTUgMTUsLTE1IG0gMTUsMTUgLTE1LC0xNSBtIDQ1LDE1IC0xNSwtMTVcIn0sTVtcIlNFLklDLkRJU1RSRVNTRUQgVkVTU0VMXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ZT9OOk8sc3Ryb2tlOmU/TjpPLGQ6XCJtIDEyMCw2NSAtMjAsMjAgMjAsLTIwIG0gLTUsNTUgLTM1LC0zNSAwLC0yMCA0NSw0NSB6IG0gLTMwLDAgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSA0NSwxNSAxNSwtMTUgbSAxNSwxNSAtMTUsLTE1IG0gLTQ1LDE1IDE1LC0xNVwifSxNW1wiU0UuSUMuU0VBIE1JTkVMSUtFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ZT9OOk8sc3Ryb2tlOmU/TjpPLGQ6XCJtIDExNy43LDc1IGMgMy41LC0zLjUgNy4xLC03LjEgNy4xLC03LjEgbCA3LjEsNy4xIC03LjEsNy4xIG0gLTQ5LjUsMCBjIC0zLjUsLTMuNSAtNy4xLC03LjEgLTcuMSwtNy4xIGwgNy4xLC03LjEgNy4xLDcuMSBNIDk1LDcwIGMgMCwtNSAwLC0xMCAwLC0xMCBsIDEwLDAgMCwxMCBtIDI1LDMwIGMgMCwxNi42IC0xMy40LDMwIC0zMCwzMCAtMTYuNiwwIC0zMCwtMTMuNCAtMzAsLTMwIDAsLTE2LjYgMTMuNCwtMzAgMzAsLTMwIDE2LjYsMCAzMCwxMy40IDMwLDMwIHpcIn0sTVtcIlNFLklDLk5BVklHQVRJT05BTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTplP046XCJyZWRcIixkOlwibSA3NSw5MCAtMTAsMTAgNzAsMCAtMTAsMTBcIn0sTVtcIlNFLklDLklDRUJFUkdcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDplP046TyxzdHJva2U6ZT9OOk8sZDpcIm0gNzUsMTAwIDI1LC0zMCAyNSwzMCAtNSwxNSAtNSwtNSAtMTUsMjAgLTE1LC0yMCAtNSw1IHogbSAtMTUsMCA4MCwwXCJ9LE1bXCJTRS5JQy5GVVNFRCBUUkFDS1wiXT1bYShcIj9cIikse3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw2NSAxMCwzNSAtMTAsMzUgNjAsMCAtMTAsLTM1IDEwLC0zNSB6XCJ9XSxNW1wiU0UuTTEuT1dOIFNISVBcIl09bChcIk9XTlwiKSxNW1wiU0UuTTEuQU5USUFJUiBXQVJGQVJFXCJdPWwoXCJBQVdcIiksTVtcIlNFLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXT1sKFwiQVNXXCIpLE1bXCJTRS5NMS5FU0NPUlRcIl09bChcIkVcIiksTVtcIlNFLk0xLkVMRUNUUk9OSUMgV0FSRkFSRVwiXT1sKFwiRVdcIiksTVtcIlNFLk0xLklOVEVMTElHRU5DRSwgU1VSVkVJTExBTkNFLCBSRUNPTk5BSVNTQU5DRVwiXT1sKFwiSVNSXCIpLE1bXCJTRS5NMS5NSU5FIENPVU5URVIgTUVBU1VSRVNcIl09bChcIk1DTVwiKSxNW1wiU0UuTTEuTUlTU0lMRSBERUZFTlNFXCJdPWwoXCJNRFwiKSxNW1wiU0UuTTEuTUVESUNBTFwiXT1sKFwiTUVcIiksTVtcIlNFLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdPWwoXCJNQ01cIiksTVtcIlNFLk0xLk1JTkUgV0FSRkFSRVwiXT1sKFwiTUlXXCIpLE1bXCJTRS5NMS5SRU1PVEUgTVVMVEktTUlTU0lPTiBWRUhJSExFXCJdPWwoXCJSTVZcIiksTVtcIlNFLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVwiXT1sKFwiU09GXCIpLE1bXCJTRS5NMS5TVVJGQUNFIFdBUkZBUkVcIl09bChcIlNVV1wiKSxNW1wiU0UuTTEuQkFMTElTVElDIE1JU1NJTEVcIl09bChcIkJcIiksTVtcIlNFLk0xLkdVSURFRCBNSVNTSUxFXCJdPWwoXCJHXCIpLE1bXCJTRS5NMS5PVEhFUiBHVUlERUQgTUlTU0lMRVwiXT1sKFwiTVwiKSxNW1wiU0UuTTEuVE9SUEVET1wiXT1sKFwiVFwiKSxNW1wiU0UuTTEuQ1lCRVJTUEFDRVwiXT1sKFwiQ1lCXCIpLE1bXCJTRS5NMS5ISUpBQ0tFUlwiXT1sKFwiSEpcIiksTVtcIlNFLk0yLkNZQkVSU1BBQ0VcIl09cihcIkNZQlwiKSxNW1wiU0UuTTEuRFJPTkUtRVFVSVBQRURcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgwLDY1IDIwLDEzIDIwLC0xMyAwLC01IC0yMCwxMCAtMjAsLTEwIHpcIn0sTVtcIlNFLk0xLkhFTElDT1BURVItRVFVSVBQRURcIl09bChcIkhcIiksTVtcIlNFLk0xLkJBTExJU1RJQyBNSVNTSUxFIERFRkVOU0UsIFNIT09URVJcIl09bChcIkJNXCIpLE1bXCJTRS5NMS5CQUxMSVNUSUMgTUlTU0lMRSBERUZFTlNFLCBMT05HLSBSQU5HRSBTVVJWRUlMTEFOQ0UgQU5EIFRSQUNLIChMUlMmVClcIl09bChcIlNUXCIpLE1bXCJTRS5NMS5TRUEtQkFTRSBYLUJBTkRcIl09bChcIlNCWFwiKSxNW1wiU0UuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdPWwoXCJIXCIpLE1bXCJTRS5NMi5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl09cihcIkFTV1wiKSxNW1wiU0UuTTIuTUlORSBXQVJGQVJFXCJdPXIoXCJNSVdcIiksTVtcIlNFLk0yLlNVUkZBQ0UgV0FSRkFSRVwiXT1yKFwiU1VXXCIpLE1bXCJTRS5NMi5OVUNMRUFSIFBPV0VSRURcIl09cihcIk5cIiksTVtcIlNFLk0yLkhFQVZZXCJdPXIoXCJIXCIpLE1bXCJTRS5NMi5MSUdIVFwiXT1yKFwiTFwiKSxNW1wiU0UuTTIuTUVESVVNXCJdPXIoXCJNXCIpLE1bXCJTRS5NMi5ET0NLXCJdPXIoXCJEXCIpLE1bXCJTRS5NMi5MT0dJU1RJQ1NcIl09cihcIkxPR1wiKSxNW1wiU0UuTTIuVEFOS1wiXT1yKFwiVFwiKSxNW1wiU0UuTTIuVkVISUNMRVwiXT1yKFwiVlwiKSxNW1wiU0UuTTIuRkFTVFwiXT1yKFwiRlwiKSxNW1wiU0UuTTIuQUlSLUNVU0hJT05FRFwiXT1yKFwiSlwiKSxNW1wiU0UuTTIuQUlSLUNVU0hJT05FRCAoVVNBIE9OTFkpXCJdPXIoXCJBQ1wiKSxNW1wiU0UuTTIuSFlEUk9GT0lMXCJdPXIoXCJLXCIpLE1bXCJTRS5NMi5BVVRPTk9NT1VTIENPTlRST0xcIl09cihcIkFVVFwiKSxNW1wiU0UuTTIuUkVNT1RFTFkgUElMT1RFRFwiXT1yKFwiUlBcIiksTVtcIlNFLk0yLkVYUEVOREFCTEVcIl09cihcIkVYUFwiKSxNKU0uaGFzT3duUHJvcGVydHkoaSkmJihJLmhhc093blByb3BlcnR5KGkpJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIraSksbi5jYWxsKHRoaXMsTVtpXSxOKSxJW2ldPU1baV0pfXZhciBwPXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbZF0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtUy0tLS0tLS1cIl09W10sSVtcIlMtUy1DLS0tLS1cIl09W0VbXCJTRS5JQy5DT01CQVRBTlRcIl1dLElbXCJTLVMtQ0wtLS0tXCJdPVtFW1wiU0UuSUMuU1VSRkFDRSBDT01CQVRBTlQsIExJTkVcIl1dLElbXCJTLVMtQ0xDVi0tXCJdPVtFW1wiU0UuSUMuQ0FSUklFUlwiXV0sSVtcIlMtUy1DTEJCLS1cIl09W0VbXCJTRS5JQy5CQVRUTEVTSElQXCJdXSxJW1wiUy1TLUNMQ0MtLVwiXT1bRVtcIlNFLklDLkNSVUlTRVJcIl1dLElbXCJTLVMtQ0xERC0tXCJdPVtFW1wiU0UuSUMuREVTVFJPWUVSXCJdXSxJW1wiUy1TLUNMRkYtLVwiXT1bRVtcIlNFLklDLkZSSUdBVEVcIl1dLElbXCJTLVMtQ0xMTC0tXCJdPVtFW1wiU0UuSUMuTElUVE9SQUwgQ09NQkFUQU5UIFNISVBcIl1dLElbXCJTLVMtQ0xMTEFTXCJdPVtFW1wiU0UuSUMuTElUVE9SQUwgQ09NQkFUQU5UIFNISVBcIl0sRVtcIlNFLk0yLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtUy1DTExMTUlcIl09W0VbXCJTRS5JQy5MSVRUT1JBTCBDT01CQVRBTlQgU0hJUFwiXSxFW1wiU0UuTTIuTUlORSBXQVJGQVJFXCJdXSxJW1wiUy1TLUNMTExTVVwiXT1bRVtcIlNFLklDLkxJVFRPUkFMIENPTUJBVEFOVCBTSElQXCJdLEVbXCJTRS5NMi5TVVJGQUNFIFdBUkZBUkVcIl1dLElbXCJTLVMtQ0EtLS0tXCJdPVtFW1wiU0UuSUMuQU1QSElCSU9VUyBXQVJGQVJFIFNISVBcIl1dLElbXCJTLVMtQ0FMQS0tXCJdPVtSP0VbXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFRcIl06RVtcIlNFLklDLkFNUEhJQklPVVMgQVNTQVVMVCBTSElQLCBHRU5FUkFMXCJdXSxJW1wiUy1TLUNBTFMtLVwiXT1bRVtcIlNFLklDLkxBTkRJTkcgU0hJUFwiXV0sSVtcIlMtUy1DQUxTTS1cIl09W0VbXCJTRS5JQy5MQU5ESU5HIFNISVBcIl0sRVtcIlNFLk0yLk1FRElVTVwiXV0sSVtcIlMtUy1DQUxTVC1cIl09W0VbXCJTRS5JQy5MQU5ESU5HIFNISVBcIl0sRVtcIlNFLk0yLlRBTktcIl1dLElbXCJTLVMtQ0FMQy0tXCJdPVtFW1wiU0UuSUMuTEFORElORyBDUkFGVFwiXV0sSVtcIlMtUy1DTS0tLS1cIl09W0VbXCJTRS5JQy5NSU5FIFdBUkZBUkUgVkVTU0VMXCJdXSxJW1wiUy1TLUNNTUwtLVwiXT1bRVtcIlNFLklDLk1JTkVMQVlFUlwiXV0sSVtcIlMtUy1DTU1TLS1cIl09W0VbXCJTRS5JQy5NSU5FU1dFRVBFUlwiXV0sSVtcIlMtUy1DTU1ILS1cIl09W0VbXCJTRS5JQy5NSU5FSFVOVEVSXCJdXSxJW1wiUy1TLUNNTUEtLVwiXT1bRVtcIlNFLklDLk1JTkUgQ09VTlRFUiBNRUFTVVJFIFNVUFBPUlQgU0hJUFwiXV0sSVtcIlMtUy1DTU1ELS1cIl09W0VbXCJTRS5JQy5NSU5FU1dFRVBFUiwgRFJPTkVcIl1dLElbXCJTLVMtQ1AtLS0tXCJdPVtFW1wiU0UuSUMuUEFUUk9MXCJdXSxJW1wiUy1TLUNQU0ItLVwiXT1bRVtcIlNFLklDLlBBVFJPTCBDUkFGVFwiXV0sSVtcIlMtUy1DUFNVLS1cIl09W0VbXCJTRS5JQy5QQVRST0wgQU5USSBTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtUy1DUFNVTS1cIl09W0VbXCJTRS5JQy5QQVRST0wgQU5USVNISVAgTUlTU0lMRVwiXV0sSVtcIlMtUy1DUFNVVC1cIl09W0VbXCJTRS5JQy5QQVRST0wgVE9SUEVET1wiXV0sSVtcIlMtUy1DUFNVRy1cIl09W0VbXCJTRS5JQy5QQVRST0wgR1VOXCJdXSxJW1wiUy1TLUNILS0tLVwiXT1bRVtcIlNFLklDLkhPVkVSQ1JBRlRcIl1dLElbXCJTLVMtRy0tLS0tXCJdPVtFW1wiU0UuSUMuTkFWWSBUQVNLIE9SR0FOSVpBVElPTiBVTklUXCJdXSxJW1wiUy1TLUdGLS0tLVwiXT1JW1wiUy1TLUdULS0tLVwiXT1bRVtcIlNFLklDLk5BVlkgVEFTSyBGT1JDRVwiXV0sSVtcIlMtUy1HRy0tLS1cIl09W0VbXCJTRS5JQy5OQVZZIFRBU0sgR1JPVVBcIl1dLElbXCJTLVMtR1UtLS0tXCJdPVtFW1wiU0UuSUMuTkFWWSBUQVNLIFVOSVRcIl1dLElbXCJTLVMtR0UtLS0tXCJdPVtFW1wiU0UuSUMuTkFWWSBUQVNLIEVMRU1FTlRcIl1dLElbXCJTLVMtR0MtLS0tXCJdPVtFW1wiU0UuSUMuQ09OVk9ZXCJdXSxJW1wiUy1TLUNELS0tLVwiXT1bRVtcIlNFLklDLlNFQSBTVVJGQUNFIERFQ09ZXCJdXSxJW1wiUy1TLUNVLS0tLVwiXT1bRVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXV0sSVtcIlMtUy1DVU0tLS1cIl09W0VbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl0sRVtcIlNFLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJW1wiUy1TLUNVUy0tLVwiXT1bRVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXSxFW1wiU0UuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJW1wiUy1TLUNVTi0tLVwiXT1bRVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXSxFW1wiU0UuTTEuU1VSRkFDRSBXQVJGQVJFXCJdXSxJW1wiUy1TLUNVUi0tLVwiXT1bRVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXSxFW1wiU0UuTTEuUkVNT1RFIE1VTFRJLU1JU1NJT04gVkVISUhMRVwiXV0sSVtcIlMtUy1OLS0tLS1cIl09W0VbXCJTRS5JQy5OT05DT01CQVRBTlRcIl1dLElbXCJTLVMtTlItLS0tXCJdPVtFW1wiU0UuSUMuQVVYSUxJQVJZIFNISVBcIl1dLElbXCJTLVMtTlJBLS0tXCJdPVtFW1wiU0UuSUMuQU1NVU5JVElPTiBTSElQXCJdXSxJW1wiUy1TLU5STy0tLVwiXT1bRVtcIlNFLklDLk9JTEVSLCBSRVBMRU5JU0hNRU5UXCJdXSxJW1wiUy1TLU5GLS0tLVwiXT1JW1wiUy1TLU5GVC0tLVwiXT1bRVtcIlNFLklDLlRVRywgT0NFQU4gR09JTkdcIl1dLElbXCJTLVMtTkktLS0tXCJdPVtFW1wiU0UuSUMuSU5URUxMSUdFTkNFIENPTExFQ1RPUlwiXV0sSVtcIlMtUy1OTS0tLS1cIl09W0VbXCJTRS5JQy5IT1NQSVRBTCBTSElQXCJdXSxJW1wiUy1TLU5TLS0tLVwiXT1bRVtcIlNFLklDLlNFUlZJQ0UgQ1JBRlQsIFlBUkQsIEdFTkVSQUxcIl1dLElbXCJTLVMtTlItLS0tXCJdPVtFW1wiU0UuSUMuUkVQQUlSIFNISVBcIl1dLElbXCJTLVMtTlRTLS0tXCJdPVtFW1wiU0UuSUMuU1VCTUFSSU5FIFRFTkRFUlwiXV0sSVtcIlMtUy1OSC0tLS1cIl09W0VbXCJTRS5JQy5IT1ZFUkNSQUZUIE5PTkNPTUJBVEFOVFwiXV0sSVtcIlMtUy1YLS0tLS1cIl09W10sSVtcIlMtUy1YTS0tLS1cIl09W0VbXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdXSxJW1wiUy1TLVhNQy0tLVwiXT1bRVtcIlNFLklDLkNBUkdPLCBHRU5FUkFMXCJdXSxJW1wiUy1TLVhNRS0tLVwiXT1JW1wiUy1TLVhNUi0tLVwiXT1bRVtcIlNFLklDLlJPTEwgT04tUk9MTCBPRkZcIl1dLElbXCJTLVMtWE1PLS0tXCJdPVtFW1wiU0UuSUMuT0lMRVIvVEFOS0VSXCJdXSxJW1wiUy1TLVhNVC0tLVwiXT1JW1wiUy1TLVhNVFUtLVwiXT1bRVtcIlNFLklDLlRVRywgT0NFQU4gR09JTkcgQ0lWSUxJQU5cIl1dLElbXCJTLVMtWE1GLS0tXCJdPVtFW1wiU0UuSUMuRkVSUllcIl1dLElbXCJTLVMtWE1QLS0tXCJdPVtFW1wiU0UuSUMuUEFTU0VOR0VSIFNISVBcIl1dLElbXCJTLVMtWE1ILS0tXCJdPVtFW1wiU0UuSUMuVFJBTlNQT1JUIFNISVAsIEhBWkFSRE9VUyBNQVRFUklBTFwiXV0sSVtcIlMtUy1YTUQtLS1cIl09W0VbXCJTRS5JQy5EUkVER0VcIl1dLElbXCJTLVMtWE1UTy0tXCJdPVtFW1wiU0UuSUMuVE9XXCJdXSxJW1wiUy1TLVhGLS0tLVwiXT1bRVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMXCJdXSxJW1wiUy1TLVhGREYtLVwiXT1bRVtcIlNFLklDLkRSSUZURVJcIl1dLElbXCJTLVMtWEZUUi0tXCJdPVtFW1wiU0UuSUMuVFJBV0xFUlwiXV0sSVtcIlMtUy1YRkRSLS1cIl09W0VbXCJTRS5JQy5GSVNISU5HIFZFU1NFTCBEUkVER0VcIl1dLElbXCJTLVMtWFItLS0tXCJdPVtFW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgU0FJTElORyBCT0FUXCJdXSxJW1wiUy1TLVhMLS0tLVwiXT1bRVtcIlNFLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbXCJTLVMtWEgtLS0tXCJdPVtFW1wiU0UuSUMuSE9WRVJDUkFGVCBDSVZJTElBTlwiXV0sSVtcIlMtUy1YQS0tLS1cIl09W0VbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRURcIl1dLElbXCJTLVMtWEFSLS0tXCJdPVtFW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVELCBSSUdJRC1IVUxMIElORkxBVEFCTEUgQk9BVFwiXV0sSVtcIlMtUy1YQVMtLS1cIl09W0VbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRUQsIFNQRUVEQk9BVFwiXV0sSVtcIlMtUy1YUC0tLS1cIl09W0VbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBKRVRTS0lcIl1dLElbXCJTLVMtTy0tLS0tXCJdPVtFW1wiU0UuSUMuT1dOIFNISVBcIl1dLElbXCJTLVMtRS0tLS0tXCJdPVtdLElbXCJTLVMtRUQtLS0tXCJdPVtFW1wiU0UuSUMuRElUQ0hFRCBBSVJDUkFGVFwiXV0sSVtcIlMtUy1FUC0tLS1cIl09W0VbXCJTRS5JQy5QRVJTT04gSU4gV0FURVJcIl1dLElbXCJTLVMtRVYtLS0tXCJdPVtFW1wiU0UuSUMuRElTVFJFU1NFRCBWRVNTRUxcIl1dLElbXCJTLVMtWi0tLS0tXCJdPVtdLElbXCJTLVMtWk0tLS0tXCJdPVtFW1wiU0UuSUMuU0VBIE1JTkVMSUtFXCJdXSxJW1wiUy1TLVpOLS0tLVwiXT1bRVtcIlNFLklDLk5BVklHQVRJT05BTFwiXV0sSVtcIlMtUy1aSS0tLS1cIl09W0VbXCJTRS5JQy5JQ0VCRVJHXCJdXX19O2Z1bmN0aW9uIEQoSSx0LEUsUixlLEEpe3ZhciBDPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsVD10LmZyYW1lLFM9dC5udW1iZXJTSURDLE49RS5pY29uQ29sb3JbQ10sTz1FLmljb25GaWxsQ29sb3JbQ10sRz1FLndoaXRlW0NdLG89RS5ibGFja1tDXSxNPXt9O2Zvcih2YXIgaSBpbiBNW1wiU1UuSUMuTUlMSVRBUllcIl09YShcIk1JTFwiKSxNW1wiU1UuSUMuQ0lWSUxJQU5cIl09YShcIkNJVlwiKSxNW1wiU1UuSUMuQ0lWSUxJQU5cIl0uZmlsbD1SfHxTP086IVQmJk8sTVtcIlNVLklDLkNJVklMSUFOXCJdLnN0cm9rZT1vLE1bXCJTVS5JQy5DSVZJTElBTlwiXS5zdHJva2V3aWR0aD0zLE1bXCJTVS5JQy5NQU5VQUwgVFJBQ0tcIl09YShcIk1BTlwiKSxNW1wiU1UuSUMuU1VCTUFSSU5FXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDg1IDUwLDAgMTUsMTUgLTE1LDE1IC01MCwwIC0xNSwtMTUgelwifSxNW1wiU1UuSUMuU1VCTUFSSU5FIENPTlZFTlRJT05BTCBQUk9QVUxTSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDExMCAtMTAsLTEwIDEwLC0xMCAyMCwwIDAsLTEwIDEwLDAgMCwxMCAyMCwwIDEwLDEwIC0xMCwxMCB6XCJ9LE1bXCJTVS5JQy5TVUJNQVJJTkUgQ09OVkVOVElPTkFMIFBST1BVTFNJT04sIFNVUkZBQ0VEXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMTAgLTEwLC0xMCAxMCwtMTAgMjAsMCAwLC0xMCAxMCwwIDAsMTAgMjAsMCAxMCwxMCAtMTAsMTAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEyMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn1dLE1bXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDExMCAtMTAsLTEwIDEwLC0xMCAwLC0xMCA1MCwwIDAsMTAgMTAsMTAgLTEwLDEwIHpcIn0sTVtcIlNVLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT04sIFNVUkZBQ0VEXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMTAgLTEwLC0xMCAxMCwtMTAgMCwtMTAgNTAsMCAwLDEwIDEwLDEwIC0xMCwxMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsMTIwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMFwifV0sTVtcIlNVLklDLlNVQk1BUklORSBBVFRBQ0sgKFNTTilcIl09e3R5cGU6XCJ0ZXh0XCIsZmlsbDpHLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQVwifSxNW1wiU1UuSUMuU1VCTUFSSU5FIE1JU1NJTEUgKFRZUEUgVU5LTk9XTilcIl09e3R5cGU6XCJ0ZXh0XCIsZmlsbDpHLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiTVwifSxNW1wiU1UuSUMuU1VCTUFSSU5FIEdVSURFRCBNSVNTSUxFIChTU0dOKVwiXT17dHlwZTpcInRleHRcIixmaWxsOkcsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJHXCJ9LE1bXCJTVS5JQy5TVUJNQVJJTkUgQkFMTElTVElDIE1JU1NJTEUgKFNTQk4pXCJdPXt0eXBlOlwidGV4dFwiLGZpbGw6RyxzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkJcIn0sTVtcIlNVLklDLlNVQk1BUklORSwgU1VSRkFDRURcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDgwIDUwLDAgMTUsMTUgLTE1LDE1IC01MCwwIC0xNSwtMTUgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEyMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn1dLE1bXCJTVS5JQy5TVUJNQVJJTkUsIEJPVFRPTUVEXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA3NSw4MCA1MCwwIDE1LDE1IC0xNSwxNSAtNTAsMCAtMTUsLTE1IHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTIwIDAsLTUgNjAsMCAwLDUgelwifV0sTVtcIlNVLklDLlNVQk1BUklORSwgU05PUktFTElOR1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTIwIC0xMCwtMTAgMTAsLTEwIDIwLDAgMCwtMjAgMTAsMCAwLDIwIDIwLDAgMTAsMTAgLTEwLDEwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSw5NSAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn1dLE1bXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSw5MCAwLC0xMCAzMCwwIDAsMTAgbSAyMCwxMCBjIDAsNS41IC0xNS43LDEwIC0zNSwxMCAtMTkuMywwIC0zNSwtNC41IC0zNSwtMTAgMCwtNS41IDE1LjcsLTEwIDM1LC0xMCAxOS4zLDAgMzUsNC41IDM1LDEwIHpcIn0sTVtcIlNVLklDLk9USEVSIFNVQk1FUlNJQkxFLCBTVVJGQUNFRFwiXT1bTVtcIlNVLklDLk9USEVSIFNVQk1FUlNJQkxFXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsMTIwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMFwifV0sTVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwiLHN0cm9rZTohMX0sTVtcIlNVLklDLk5PTi1TVUJNQVJJTkVcIl09UiYmIVM/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCJOT05cIn06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMCxmb250c2l6ZToyNSx0ZXh0OlwiTk9OXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyMCxmb250c2l6ZToyNSx0ZXh0OlwiU1VCXCJ9XSxNW1wiU1UuSUMuRElWRVIsIE1JTElUQVJZXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMDAgODAgQyA5My43IDgwIDg4LjMgODIuNyA4NS44IDg4LjMgTCA4NS44IDg4LjMgTCA3Ny44IDg4LjMgTCA3Ny44IDEwNSBMIDg1LjggMTA1IEwgODUuOCAxMDQuOCBDIDg3LjMgMTA4LjIgODguOCAxMTAgOTIgMTExLjcgTCA5Mi4xIDExMS43IEwgODQuMiAxMjAgTCAxMTUuOCAxMjAgTCAxMDcuOSAxMTEuNyBMIDEwOCAxMTEuNyBDIDExMS4xIDExMCAxMTIuOCAxMDguMyAxMTQuMyAxMDUgTCAxMjIuMiAxMDUgTCAxMjIuMiA4OC4zIEwgMTE0LjMgODguMyBMIDExNC4zIDg4LjMgQyAxMTEuNyA4Mi44IDEwNi4zIDgwIDEwMCA4MCB6IE0gMTAwIDg2LjYgQyAxMDUuNCA4Ni42IDEwOS44IDkxLjEgMTA5LjggOTYuNiBDIDEwOS44IDEwMi4xIDEwNS40IDEwNi42IDEwMCAxMDYuNiBDIDk0LjYgMTA2LjYgOTAuMSAxMDIuMSA5MC4xIDk2LjYgQyA5MC4xIDkxLjEgOTQuNiA4Ni42IDEwMCA4Ni42IHogTSAxMDAgODkuNiBDIDk2LjIgODkuNiA5My4xIDkyLjcgOTMuMSA5Ni42IEMgOTMuMSAxMDAuNSA5Ni4yIDEwMy42IDEwMCAxMDMuNiBDIDEwMy44IDEwMy42IDEwNi44IDEwMC41IDEwNi44IDk2LjYgQyAxMDYuOCA5Mi43IDEwMy44IDg5LjYgMTAwIDg5LjYgelwifSxNW1wiU1UuSUMuU1VCTUVSU0lCTEUsIENJVklMSUFOXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDg1LDkwIDAsLTEwIDMwLDAgMCwxMCBtIDIwLDEwIGMgMCw1LjUgLTE1LjcsMTAgLTM1LDEwIC0xOS4zLDAgLTM1LC00LjUgLTM1LC0xMCAwLC01LjUgMTUuNywtMTAgMzUsLTEwIDE5LjMsMCAzNSw0LjUgMzUsMTAgelwifSxNW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVViksIENJVklMSUFOXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwifSxNW1wiU1UuTTEuQ1lCRVJTUEFDRVwiXT1sKFwiQ1lCXCIpLE1bXCJTVS5NMS5ISUpBQ0tFUlwiXT1sKFwiSEpcIiksTVtcIlNVLk0yLkNZQkVSU1BBQ0VcIl09cihcIkNZQlwiKSxNW1wiU1UuSUMuRElWRVIsIENJVklMSUFOXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6TyxkOlwiTSAxMTQuMyw5NCBDIDExNC4zLDEwMi4zIDEwNy45LDEwOSAxMDAsMTA5IGMgLTcuOSwwIC0xNC4yLC02LjcgLTE0LjIsLTE1IDAsLTguMyA2LjQsLTE1IDE0LjIsLTE1IDcuOSwwIDE0LjMsNi43IDE0LjMsMTUgeiBtIDAsMjcgMTQuMywxNSAtNTcsMCAxNC4zLC0xNSBNIDEyNS43LDc5IGwgMTQuMywwIDAsMzAgLTE0LjMsMCBtIC01MS4zLDAgLTE0LjMsMCAwLC0zMCAxNC4zLDAgbSA1NC4yLDE1IGMgMCwxNi42IC0xMi44LDMwIC0yOC41LDMwIC0xNS43LDAgLTI4LjUsLTEzLjQgLTI4LjUsLTMwIEMgNzEuNSw3Ny40IDg0LjMsNjQgMTAwLDY0IDExNS43LDY0IDEyOC41LDc3LjQgMTI4LjUsOTQgelwifSxNW1wiU1UuSUMuVU5ERVJXQVRFUiBXRUFQT05cIl09YShcIldQTlwiKSxNW1wiU1UuSUMuVE9SUEVET1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA2NSwxMDUgLTUsLTUgNSwtNSA2MCwwIGMgMCwwIDUsNSA1LDUgbCA1LC01IDAsMTAgLTUsLTUgLTUsNSB6XCJ9LE1bXCJTVS5JQy5JTVBST1ZJU0VEIEVYUExPU0lWRSBERVZJQ0UgKElFRClcIl09YShcIklFRFwiKSxNW1wiU1UuSUMuVU5ERVJXQVRFUiBERUNPWVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6byxkOlI/XCJNIDEwNSwxMTAgOTAsOTUgMTA1LDgwIHogTSA4NSwxMTAgNzAsOTUgODUsODAgeiBtIDQwLC0zMCAtMTUsMTUgMTUsMTUgeiBtIC01NSw0MCAwLC01IDU1LDAgMCw1IHpcIjpcIk0gMTA1LDEyMCA5MCwxMDUgMTA1LDkwIHogTSA4NSwxMjAgNzAsMTA1IDg1LDkwIHogbSA0MCwtMzAgLTE1LDE1IDE1LDE1IHogbSAtNTUsLTUgMCwtNSA1NSwwIDAsNSB6XCIsZmlsbDpSP046T30sTVtcIlNVLklDLlVOREVSV0FURVIgREVDT1kgRFN5bWJvbFwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA4NSA4MSBMIDY1IDk4IEwgODUgMTE5IEwgODUgODEgeiBNIDExMCA4MSBMIDkwIDk4IEwgMTEwIDExOSBMIDExMCA4MSB6IE0gMTM1IDgxIEwgMTE1IDk4IEwgMTM1IDExOSBMIDEzNSA4MSB6XCJ9LE1bXCJTVS5JQy5FQ0hPIFRSQUNLRVIgQ0xBU1NJRklFUiAoRVRDKS9QT1NTSUJMRSBDT05UQUNUIChQT1NDT04pXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEzMCxmb250c2l6ZTo2MCx0ZXh0OlwiP1wifSxNW1wiU1UuSUMuRlVTRUQgVFJBQ0tcIl09W2EoXCI/XCIpLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsNjUgMTAsMzUgLTEwLDM1IDYwLDAgLTEwLC0zNSAxMCwtMzVcIn1dLE1bXCJTVS5JQy5TRUEgTUlORVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkUuaWNvbkNvbG9yLkhvc3RpbGUsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIk0gMTE1LjksNzMgMTI2LjUsNjIuNCAxMzcuMSw3MyAxMjYuNSw4My42IG0gLTUzLDAgTCA2Mi45LDczIDczLjUsNjIuNCA4NC4xLDczIG0gOC40LC0zIDAsLTE1IDE1LDAgMCwxNSBtIDIyLjUsMzAgYyAwLDE2LjYgLTEzLjQsMzAgLTMwLDMwIC0xNi42LDAgLTMwLC0xMy40IC0zMCwtMzAgMCwtMTYuNiAxMy40LC0zMCAzMCwtMzAgQyAxMTYuNiw3MCAxMzAsODMuNCAxMzAsMTAwIHpcIn0sTVtcIlNVLklDLlNFQSBNSU5FIC0gQk9UVE9NXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5Ib3N0aWxlLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuSG9zdGlsZSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgLSBSSVNJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOlMmJkE/XCJcIjohUiYmIVN8fGU/TzpFLmljb25Db2xvci5Ib3N0aWxlLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDEwMCwxMjggLTEwLDE1IDIwLDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIChJTiBPVEhFUiBQT1NJVElPTilcIl09W01bXCJTVS5JQy5TRUEgTUlORVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDEzMCwxMDAgMTUsMCBNIDcwLDEwMCBsIC0xNSwwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgLSBLSU5HRklTSEVSXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCJLXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgLSBTTUFMTCBPQkpFQ1RcIl09W01bXCJTVS5JQy5TRUEgTUlORVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIlNPXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwiTSAxMTUuOSw3MyAxMjYuNSw2Mi40IDEzNy4xLDczIDEyNi41LDgzLjYgbSAtNTMsMCBMIDYyLjksNzMgNzMuNSw2Mi40IDg0LjEsNzMgbSA4LjQsLTMgMCwtMTUgMTUsMCAwLDE1IG0gMjIuNSwzMCBjIDAsMTYuNiAtMTMuNCwzMCAtMzAsMzAgLTE2LjYsMCAtMzAsLTEzLjQgLTMwLC0zMCAwLC0xNi42IDEzLjQsLTMwIDMwLC0zMCBDIDExNi42LDcwIDEzMCw4My40IDEzMCwxMDAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIkVYXCJ9LFM/W106e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6IVImJiFTfHxlP046byx4OjE1MCx5OjQ2LGZvbnRzaXplOjQwLHRleHQ6XCJYXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NC44LDEyNS4yIDUwLjQsMCAwLDEyLjYgLTUwLjQsMCB6XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FIC0gRkxPQVRJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBSSVNJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTAwLDEyOCAtMTAsMTUgMjAsMCB6XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgREVDT1lcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMDYuNiwxMDEuNiAwLDI2LjMgLTEzLjEsLTEzLjEgeiBtIC0xOS43LDAgMCwyNi4zIC0xMy4xLC0xMy4xIHogbSAzOS40LDAgMCwyNi4zIC0xMy4xLC0xMy4xIDEzLjEsLTEzLjEgTSAxMDAsNzUuMyBjIC0xNC41LDAgLTI2LjMsMTEuOCAtMjYuMywyNi4zIGwgNTIuNSwwIEMgMTI2LjMsODcuMSAxMTQuNSw3NS4zIDEwMCw3NS4zIHogbSAtNi42LDAgMCwtMTMuMSAxMy4xLDAgMCwxMy4xIG0gLTI5LjgsMTIuMyAtOS4zLC05LjMgOS4zLC05LjMgOS4zLDkuMyBtIDI3LjksMCA5LjMsLTkuMyA5LjMsOS4zIC05LjMsOS4zXCJ9LE1bXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgQk9UVE9NL0dST1VORFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZLCBNT09SRURcIl09W01bXCJTVS5JQy5TRUEgTUlORSBERUNPWVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigwLCAxMzAsIDI0KVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc1LDE0MCA1MCwwIE0gMTAwLDEwMCBsIDAsNDBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5OZXV0cmFsLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJNIDExNS45LDczIDEyNi41LDYyLjQgMTM3LjEsNzMgMTI2LjUsODMuNiBtIC01MywwIEwgNjIuOSw3MyA3My41LDYyLjQgODQuMSw3MyBtIDguNCwtMyAwLC0xNSAxNSwwIDAsMTUgbSAyMi41LDMwIGMgMCwxNi42IC0xMy40LDMwIC0zMCwzMCAtMTYuNiwwIC0zMCwtMTMuNCAtMzAsLTMwIDAsLTE2LjYgMTMuNCwtMzAgMzAsLTMwIEMgMTE2LjYsNzAgMTMwLDgzLjQgMTMwLDEwMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZXdpZHRoOjUsc3Ryb2tlOkE/RzpvLGQ6XCJtIDEzNSw2NSAtNzAsNzAgbSAwLC03MCA3MCw3MFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gQk9UVE9NXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5OZXV0cmFsLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuTmV1dHJhbCxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBSSVNJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkUuaWNvbkNvbG9yLk5ldXRyYWwsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTAwLDEyOCAtMTAsMTUgMjAsMCB6XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgKElOIE9USEVSIFBPU0lUSU9OKSBORVVUUkFMSVpFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTMwLDEwMCAxNSwwIE0gNzAsMTAwIGwgLTE1LDBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxFQ1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMjU1LDI1NSwwKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCJFXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUMgLSBCT1RUT01cIl09W01bXCJTVS5JQy5TRUEgTUlORSBNSUxFQ1wiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMjU1LDApXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gTU9PUkVEXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMjU1LDI1NSwwKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc1LjUsMTM2LjggNDksMCBNIDEwMCwxMjQuNSBsIDAsMTIuM1wifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gRkxPQVRJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORSBNSUxFQ1wiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc1LDE0MCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSU5FIEFOQ0hPUlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6ISghUiYmIVN8fGUpJiZvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTA1LGZvbnRzaXplOjE4LHRleHQ6XCJBTkNSXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwxNDEsNDIpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTEzLjgsMTI3LjYgLTI3LjYsMCAtMTMuOCwtMTMuOCAwLC0yNy42IDEzLjgsLTEzLjggMjcuNiwwIDEzLjgsMTMuOCAwLDI3LjYgelwifSxTP1tdOnt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZT9OOm8seDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIiNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwxNDEsNDIpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCIxXCJ9LE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIjJcIn0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAzXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiM1wifSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDRcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCI0XCJ9LE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIjVcIn0sTVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZWRhc2hhcnJheTpcIjgsNFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwyNTUsMClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMTMuOCwxMjcuNiAtMjcuNiwwIC0xMy44LC0xMy44IDAsLTI3LjYgMTMuOCwtMTMuOCAyNy42LDAgMTMuOCwxMy44IDAsMjcuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMixmb250c2l6ZTozMCx0ZXh0OlwiTlJcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gQk9UVE9NXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTlwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMjU1LDApXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT04gLSBNT09SRURcIl09W01bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwyNTUsMClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gRkxPQVRJTkdcIl09W01bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIEdFTkVSQUwgT0JTVFJVQ1RPUlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMjU1LDI1NSwwKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCJPQlwifV0sTVtcIlNVLklDLlNFQSBNSU5FIEdFTkVSQUwgT0JTVFJVQ1RPUiBORVVUUkFMSVpFRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5OZXV0cmFsLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6IVImJiFTfHxlfHxBP0c6byx4OjEwMCx5OjExMixmb250c2l6ZTozMCx0ZXh0OlwiT0JcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tld2lkdGg6NSxzdHJva2U6QT9HOm8sZDpcIm0gMTM1LDY1IC03MCw3MCBtIDAsLTcwIDcwLDcwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1RcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTEzLjgsMTI3LjYgLTI3LjYsMCAtMTMuOCwtMTMuOCAwLC0yNy42IDEzLjgsLTEzLjggMjcuNiwwIDEzLjgsMTMuOCAwLDI3LjYgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIk5cIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUIC0gTU9PUkVEXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1RcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1RcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwXCJ9XSxNW1wiU1UuSUMuVU5FWFBMT0RFRCBFWFBMT1NJVkUgT1JETkFOQ0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZWRhc2hhcnJheTpcIjgsNFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOkUuaWNvbkNvbG9yLkhvc3RpbGUsZDpcIm0gODUsNjUgMzAsMCAyMCwyMCAwLDMwIC0yMCwyMCAtMzAsMCAtMjAsLTIwIDAsLTMwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6IVImJiFTfHxlP046RS5pY29uQ29sb3IuSG9zdGlsZSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiVVhPXCJ9XSxNW1wiU1UuSUMuRU5WSVJPTk1FTlRBTCBSRVBPUlQgTE9DQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOkUuaWNvbkNvbG9yLk5ldXRyYWwsZDpcIm0gNzAsNzAgMCw2MCA2MCwwIDAsLTYwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6IVImJiFTfHxlP046RS5pY29uQ29sb3IuTmV1dHJhbCx4OjEwMCx5OjEyMixmb250c2l6ZTo2MCx0ZXh0OlwiRVwifV0sTVtcIlNVLklDLkRJVkUgUkVQT1JUIExPQ0FUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpFLmljb25Db2xvci5OZXV0cmFsLGQ6XCJtIDcwLDcwIDAsNjAgNjAsMCAwLC02MCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZT9OOkUuaWNvbkNvbG9yLk5ldXRyYWwseDoxMDAseToxMjIsZm9udHNpemU6NjAsdGV4dDpcIkRcIn1dLE1bXCJTVS5JQy5TRUFCRUQgSU5TVEFMTEFUSU9OL01BTk1BREVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpPLHN0cm9rZTpvLGQ6XCJtIDE0MCwxMjUgLTgwLDAgMTAsLTMwIDEwLDIwIDIwLC01MCAyMCw1MCAxMCwtMjUgelwifSxNW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTiwgTUFOLU1BREUsIE1JTElUQVJZXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDgwIDAsNDAgNTAsMCAwLC0xNSAtMTUsMCAwLC0xMCAtMjAsMCAwLC0xNSB6XCJ9LE1bXCJTVS5JQy5TRUFCRUQgSU5TVEFMTEFUSU9OLCBNQU4tTUFERSwgTk9OLU1JTElUQVJZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6TyxkOlwibSA3NSw4MCAwLDQwIDUwLDAgMCwtMTUgLTE1LDAgMCwtMTAgLTIwLDAgMCwtMTUgelwifSxNW1wiU1UuSUMuU0VBQkVEIFJPQ0svU1RPTkUsIE9CU1RBQ0xFLCBPVEhFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxNDAsMTI1IC04MCwwIDEwLC0zMCAxMCwyMCAyMCwtNTAgMjAsNTAgMTAsLTI1IHpcIn0sTVtcIlNVLklDLldSRUNLXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyNSw4NSAwLDMwIG0gLTUwLC0zMCAwLDMwIG0gMjUsLTQwIDAsNDUgbSAtNDAsLTIwIDgwLDBcIn0sTVtcIlNVLklDLk1BUklORSBMSUZFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDEwMCAyMCwtMjAgNDUsMjAgMTUsLTEwIDAsMjAgLTE1LC0xMCAtNDUsMjAgelwifSxNW1wiU1UuSUMuU0VBIEFOT01BTFlcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSwxMDAgMTUsLTIwIDIwLDMwIDIwLC0zMCAxNSwyMCBtIC03MCwxMCAxNSwtMjAgMjAsMzAgMjAsLTMwIDE1LDIwXCJ9LE1bXCJTVS5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl09bChcIkFTV1wiKSxNW1wiU1UuTTEuQVVYSUxJQVJZXCJdPWwoXCJBVVhcIiksTVtcIlNVLk0xLkNPTU1BTkQgQU5EIENPTlRST0xcIl09bChcIkMyXCIpLE1bXCJTVS5NMS5JTlRFTExJR0VOQ0UsIFNVUlZFSUxMQU5DRSwgUkVDT05OQUlTU0FOQ0VcIl09bChcIklTUlwiKSxNW1wiU1UuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl09bChcIk1DTVwiKSxNW1wiU1UuTTEuTUlORSBXQVJGQVJFXCJdPWwoXCJNSVdcIiksTVtcIlNVLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXT1sKFwiU1VXXCIpLE1bXCJTVS5NMS5BVFRBQ0tcIl09bChcIkFcIiksTVtcIlNVLk0xLkJBTExJU1RJQyBNSVNTSUxFXCJdPWwoXCJCXCIpLE1bXCJTVS5NMS5HVUlERUQgTUlTU0lMRVwiXT1sKFwiR1wiKSxNW1wiU1UuTTEuT1RIRVIgR1VJREVEIE1JU1NJTEVTIChQT0lOVCBERUZFTkNFKVwiXT1sKFwiTVwiKSxNW1wiU1UuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFXCJdPWwoXCJTT0ZcIiksTVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAxXCJdPWwoXCJQMVwiKSxNW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDJcIl09bChcIlAyXCIpLE1bXCJTVS5NMS5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDNcIl09bChcIlAzXCIpLE1bXCJTVS5NMS5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDRcIl09bChcIlA0XCIpLE1bXCJTVS5NMS5QUk9CQUJMRSBTVUJNQVJJTkVcIl09bChcIlBCXCIpLE1bXCJTVS5NMS5DRVJUQUlOIFNVQk1BUklORVwiXT1sKFwiQ1RcIiksTVtcIlNVLk0xLkFOVEktVE9SUEVETyBUT1JQRURPXCJdPWwoXCJBVFRcIiksTVtcIlNVLk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXT1sKFwiSFwiKSxNW1wiU1UuTTIuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDFcIl09cihcIlAxXCIpLE1bXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBMT1cgMlwiXT1yKFwiUDJcIiksTVtcIlNVLk0yLlBPU1NJQkxFIFNVQk1BUklORSAtIEhJR0ggM1wiXT1yKFwiUDNcIiksTVtcIlNVLk0yLlBPU1NJQkxFIFNVQk1BUklORSAtIEhJR0ggNFwiXT1yKFwiUDRcIiksTVtcIlNVLk0yLlBST0JBQkxFIFNVQk1BUklORVwiXT1yKFwiUEJcIiksTVtcIlNVLk0yLkFJUiBJTkRFUEVOREVOVCBQUk9QVUxTSU9OXCJdPXIoXCJBSVwiKSxNW1wiU1UuTTIuQ0VSVFNVQlwiXT1yKFwiQ1RcIiksTVtcIlNVLk0yLkRJRVNFTCBQUk9QVUxTSU9OXCJdPXIoXCJEXCIpLE1bXCJTVS5NMi5ESUVTRUwgLSBUWVBFIDFcIl09cihcIkQxXCIpLE1bXCJTVS5NMi5ESUVTRUwgLSBUWVBFIDJcIl09cihcIkQyXCIpLE1bXCJTVS5NMi5ESUVTRUwgLSBUWVBFIDNcIl09cihcIkQzXCIpLE1bXCJTVS5NMi5OVUNMRUFSIFBPV0VSRURcIl09cihcIk5cIiksTVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDFcIl09cihcIk4xXCIpLE1bXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSAyXCJdPXIoXCJOMlwiKSxNW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgM1wiXT1yKFwiTjNcIiksTVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDRcIl09cihcIk40XCIpLE1bXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA1XCJdPXIoXCJONVwiKSxNW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgNlwiXT1yKFwiTjZcIiksTVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDdcIl09cihcIk43XCIpLE1bXCJTVS5NMi5BVVRPTk9NT1VTIENPTlRST0xcIl09cihcIkFVVFwiKSxNW1wiU1UuTTIuUkVNT1RFTFkgUElMT1RFRFwiXT1yKFwiUlBcIiksTVtcIlNVLk0yLkVYUEVOREFCTEVcIl09cihcIkVYUFwiKSxNKU0uaGFzT3duUHJvcGVydHkoaSkmJihJLmhhc093blByb3BlcnR5KGkpJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIraSksbi5jYWxsKHRoaXMsTVtpXSxOKSxJW2ldPU1baV0pfXZhciBtPXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbRF0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtVS0tLS0tLS1cIl09W10sSVtcIlMtVS1TLS0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkVcIl1dLElbXCJTLVUtU0YtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FLCBTVVJGQUNFRFwiXV0sSVtcIlMtVS1TQi0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUsIEJPVFRPTUVEXCJdXSxJW1wiUy1VLVNSLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORVwiXSxFW1wiU1UuTTIuQ0VSVFNVQlwiXV0sSVtcIlMtVS1TWC0tLS1cIl09W0VbXCJTVS5JQy5OT04tU1VCTUFSSU5FXCJdXSxJW1wiUy1VLVNOLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl1dLElbXCJTLVUtU05GLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTiwgU1VSRkFDRURcIl1dLElbXCJTLVUtU05BLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIEFUVEFDSyAoU1NOKVwiXV0sSVtcIlMtVS1TTk0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdLEVbXCJTVS5JQy5TVUJNQVJJTkUgTUlTU0lMRSAoVFlQRSBVTktOT1dOKVwiXV0sSVtcIlMtVS1TTkctLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdLEVbXCJTVS5JQy5TVUJNQVJJTkUgR1VJREVEIE1JU1NJTEUgKFNTR04pXCJdXSxJW1wiUy1VLVNOQi0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl0sRVtcIlNVLklDLlNVQk1BUklORSBCQUxMSVNUSUMgTUlTU0lMRSAoU1NCTilcIl1dLElbXCJTLVUtU0MtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIENPTlZFTlRJT05BTCBQUk9QVUxTSU9OXCJdXSxJW1wiUy1VLVNDRi0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTiwgU1VSRkFDRURcIl1dLElbXCJTLVUtU0NBLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIENPTlZFTlRJT05BTCBQUk9QVUxTSU9OXCJdLEVbXCJTVS5JQy5TVUJNQVJJTkUgQVRUQUNLIChTU04pXCJdXSxJW1wiUy1VLVNDTS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIE1JU1NJTEUgKFRZUEUgVU5LTk9XTilcIl1dLElbXCJTLVUtU0NHLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIENPTlZFTlRJT05BTCBQUk9QVUxTSU9OXCJdLEVbXCJTVS5JQy5TVUJNQVJJTkUgR1VJREVEIE1JU1NJTEUgKFNTR04pXCJdXSxJW1wiUy1VLVNDQi0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIEJBTExJU1RJQyBNSVNTSUxFIChTU0JOKVwiXV0sSVtcIlMtVS1TTy0tLS1cIl09W0VbXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRVwiXV0sSVtcIlMtVS1TT0YtLS1cIl09W0VbXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRSwgU1VSRkFDRURcIl1dLElbXCJTLVUtU1UtLS0tXCJdPVtFW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVVilcIl1dLElbXCJTLVUtU1VNLS0tXCJdPVtFW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVVilcIl0sRVtcIlNVLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJW1wiUy1VLVNVUy0tLVwiXT1bRVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdLEVbXCJTVS5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbXCJTLVUtU1VOLS0tXCJdPVtFW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVVilcIl0sRVtcIlNVLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXV0sSVtcIlMtVS1TMS0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkVcIl0sRVtcIlNVLk0yLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAxXCJdXSxJW1wiUy1VLVMyLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORVwiXSxFW1wiU1UuTTIuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDJcIl1dLElbXCJTLVUtUzMtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FXCJdLEVbXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDNcIl1dLElbXCJTLVUtUzQtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FXCJdLEVbXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDRcIl1dLElbXCJTLVUtU0wtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FXCJdLEVbXCJTVS5NMi5QUk9CQUJMRSBTVUJNQVJJTkVcIl1dLElbXCJTLVUtU0stLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FLCBTTk9SS0VMSU5HXCJdXSxJW1wiUy1VLVctLS0tLVwiXT1bRVtcIlNVLklDLlVOREVSV0FURVIgV0VBUE9OXCJdXSxJW1wiUy1VLVdULS0tLVwiXT1bRVtcIlNVLklDLlRPUlBFRE9cIl1dLElbXCJTLVUtV00tLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkVcIl1dLElbXCJTLVUtV01ELS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl1dLElbXCJTLVUtV01HLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgLSBCT1RUT01cIl1dLElbXCJTLVUtV01HRC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBCT1RUT01cIl1dLElbXCJTLVUtV01HWC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEJPVFRPTVwiXV0sSVtcIlMtVS1XTUdFLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIEJPVFRPTVwiXV0sSVtcIlMtVS1XTUdDLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXV0sSVtcIlMtVS1XTUdSLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gQk9UVE9NXCJdXSxJW1wiUy1VLVdNR08tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUIC0gQk9UVE9NXCJdXSxJW1wiUy1VLVdNTS0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIC0gTU9PUkVEXCJdXSxJW1wiUy1VLVdNTUQtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gTU9PUkVEXCJdXSxJW1wiUy1VLVdNTVgtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBNT09SRURcIl1dLElbXCJTLVUtV01NRS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUMgLSBNT09SRURcIl1dLElbXCJTLVUtV01NQy0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBNT09SRURcIl1dLElbXCJTLVUtV01NUi0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTiAtIE1PT1JFRFwiXV0sSVtcIlMtVS1XTU1PLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIE1PT1JFRFwiXV0sSVtcIlMtVS1XTUYtLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSAtIEZMT0FUSU5HXCJdXSxJW1wiUy1VLVdNRkQtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gRkxPQVRJTkdcIl1dLElbXCJTLVUtV01GWC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEZMT0FUSU5HXCJdXSxJW1wiUy1VLVdNRkUtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gRkxPQVRJTkdcIl1dLElbXCJTLVUtV01GQy0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXV0sSVtcIlMtVS1XTUZSLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gRkxPQVRJTkdcIl1dLElbXCJTLVUtV01GTy0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBGTE9BVElOR1wiXV0sSVtcIlMtVS1XTU8tLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSAoSU4gT1RIRVIgUE9TSVRJT04pXCJdXSxJW1wiUy1VLVdNT0QtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIChJTiBPVEhFUiBQT1NJVElPTikgTkVVVFJBTElaRURcIl1dLElbXCJTLVUtV01YLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORVwiXV0sSVtcIlMtVS1XTUUtLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSUxFQ1wiXV0sSVtcIlMtVS1XTUEtLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSU5FIEFOQ0hPUlwiXV0sSVtcIlMtVS1XTUMtLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSUxDT1wiXV0sSVtcIlMtVS1XTVItLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OXCJdXSxJW1wiUy1VLVdNQi0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEdFTkVSQUwgT0JTVFJVQ1RPUlwiXV0sSVtcIlMtVS1XTUJELS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1IgTkVVVFJBTElaRURcIl1dLElbXCJTLVUtV01OLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1RcIl1dLElbXCJTLVUtV01TLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgLSBSSVNJTkdcIl1dLElbXCJTLVUtV01TWC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIFJJU0lOR1wiXV0sSVtcIlMtVS1XTVNELS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIFJJU0lOR1wiXV0sSVtcIlMtVS1XVi0tLS1cIl09W0VbXCJTVS5JQy5BVVRPTk9NT1VTIFVOREVSV0FURVIgVkVISUNMRS8gVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIChBVVYvVVVWKVwiXV0sSVtcIlMtVS1XRC0tLS1cIl09W0VbXCJTVS5JQy5VTkRFUldBVEVSIERFQ09ZXCJdXSxJW1wiUy1VLVdETS0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZXCJdXSxJW1wiUy1VLVdETUctLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZLCBCT1RUT00vR1JPVU5EXCJdXSxJW1wiUy1VLVdETU0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZLCBNT09SRURcIl1dLElbXCJTLVUtTi0tLS0tXCJdPVtFW1wiU1UuSUMuTk9OLVNVQk1BUklORVwiXV0sSVtcIlMtVS1ORC0tLS1cIl09W0VbXCJTVS5JQy5ESVZFUiwgQ0lWSUxJQU5cIl1dLElbXCJTLVUtTkItLS0tXCJdPVtdLElbXCJTLVUtRS0tLS0tXCJdPVtFW1wiU1UuSUMuRU5WSVJPTk1FTlRBTCBSRVBPUlQgTE9DQVRJT05cIl1dLElbXCJTLVUtVi0tLS0tXCJdPVtFW1wiU1UuSUMuRElWRSBSRVBPUlQgTE9DQVRJT05cIl1dLElbXCJTLVUtWC0tLS0tXCJdPVtFW1wiU1UuSUMuVU5FWFBMT0RFRCBFWFBMT1NJVkUgT1JETkFOQ0VcIl1dLElbXCJTLVUtTkJTLS0tXCJdPVtFW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTi9NQU5NQURFXCJdXSxJW1wiUy1VLU5CUi0tLVwiXT1bRVtcIlNVLklDLlNFQUJFRCBST0NLL1NUT05FLCBPQlNUQUNMRSwgT1RIRVJcIl1dLElbXCJTLVUtTkJXLS0tXCJdPVtFW1wiU1UuSUMuV1JFQ0tcIl1dLElbXCJTLVUtTk0tLS0tXCJdPVtFW1wiU1UuSUMuTUFSSU5FIExJRkVcIl1dLElbXCJTLVUtTkEtLS0tXCJdPVtFW1wiU1UuSUMuU0VBIEFOT01BTFlcIl1dfX0sRj17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2MsUF0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtRi0tLS0tLS1cIl09W0VbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLUEtLS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLUFGLS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtQUZBLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiU09GLk0yLkFUVEFDS1wiXV0sSVtcIlMtRi1BRkstLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJTT0YuTTIuUkVGVUVMXCJdXSxJW1wiUy1GLUFGVS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIlNPRi5NMi5VVElMSVRZXCJdXSxJW1wiUy1GLUFGVUwtLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIkFJUi5NMi5MSUdIVFwiXV0sSVtcIlMtRi1BRlVNLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJBSVIuTTIuTUVESVVNXCJdXSxJW1wiUy1GLUFGVUgtLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIkFJUi5NMi5IRUFWWVwiXV0sSVtcIlMtRi1BVi0tLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJTT0YuTTIuVlNUT0xcIl1dLElbXCJTLUYtQUgtLS0tXCJdPVI/W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HIDI1MjVDXCJdXTpbRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtRi1BSEgtLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIlNPRi5NMi5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl1dLElbXCJTLUYtQUhBLS0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJTT0YuTTIuQVRUQUNLXCJdXSxJW1wiUy1GLUFIVS0tLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiU09GLk0yLlVUSUxJVFlcIl1dLElbXCJTLUYtQUhVTC0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJBSVIuTTIuTElHSFRcIl1dLElbXCJTLUYtQUhVTS0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJBSVIuTTIuTUVESVVNXCJdXSxJW1wiUy1GLUFIVUgtLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiQUlSLk0yLkhFQVZZXCJdXSxJW1wiUy1GLVNOLS0tLVwiXT1JW1wiUy1GLU4tLS0tLVwiXT1bRVtcIkdSLklDLk5BVkFMXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtRi1TTlMtLS1cIl09SVtcIlMtRi1OUy0tLS1cIl09W0VbXCJHUi5JQy5TRUEtQUlSLUxBTkRcIl1dLElbXCJTLUYtU05VLS0tXCJdPUlbXCJTLUYtTlUtLS0tXCJdPVtFW1wiU09GLklDLlVOREVSV0FURVIgREVNT0xJVElPTiBURUFNXCJdXSxJW1wiUy1GLVNOQi0tLVwiXT1JW1wiUy1GLU5CLS0tLVwiXT1bRVtcIkdSLklDLkNPTUJBVEFOVFwiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtU05OLS0tXCJdPUlbXCJTLUYtTk4tLS0tXCJdPVtFW1wiR1IuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTlwiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtRy0tLS0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLklDLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtR1MtLS0tXCJdPVtFW1wiR1IuSUMuU1BFQ0lBTCBGT1JDRVNcIl1dLElbXCJTLUYtR1ItLS0tXCJdPUlbXCJTLUYtR1NSLS0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkFJUi5NMS5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUYtR1AtLS0tXCJdPUlbXCJTLUYtR1NQLS0tXCJdPVtFW1wiR1IuRVEuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TIEVRVUlQTUVOVFwiXV0sSVtcIlMtRi1HUEEtLS1cIl09SVtcIlMtRi1HU1BBLS1cIl09W0VbXCJHUi5FUS5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlMgRVFVSVBNRU5UXCJdLHMuX3RyYW5zbGF0ZSgwLC0zMCxzLl9zY2FsZSguNyxFW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdKSldLElbXCJTLUYtR0MtLS0tXCJdPUlbXCJTLUYtR0NBLS0tXCJdPVtFW1wiR1IuSUMuQ0lWSUwgQUZGQUlSU1wiXV0sSVtcIlMtRi1HQi0tLS1cIl09SVtcIlMtRi1CLS0tLS1cIl09W0VbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJHUi5NMi5TVVBQT1JUXCJdXX19O2Z1bmN0aW9uIGYoSSx0LEUsUixlLEEpe3ZhciBDPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsVD1FLmljb25Db2xvcltDXSxTPXtcIlNJLklDLkNPTU1VTklDQVRJT05TXCI6e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTMsMTIwIDE0LDAgMCwwIG0gLTcsLTI3IDAsMjcgbSAyLC0yNSA4LDIgLTUsNSAxMywzIG0gLTIwLC0xMCAtOCwyIDUsNSAtMTQsMyBtIDIxLC0xMyA4LC0yIC01LC01IDEzLC0zIG0gLTM3LDAgMTQsMyAtNSw1IDgsMlwiLGZpbGw6ITF9LFwiU0kuSUMuUkFEQVJcIjp7dHlwZTpcInBhdGhcIixkOlwibSAxMTUsOTAgLTE1LDE1IDAsLTE1IC0xNSwxNSBNIDgwLDg1IGMgMCwyNSAxNSwzNSAzNSwzNVwiLGZpbGw6ITF9fTtmb3IodmFyIE4gaW4gU1tcIlNJLkkuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdPWEoXCJKXCIpLFNbXCJTSS5NMS5BTlRJLUFJUkNSQUZUIEZJUkUgQ09OVFJPTFwiXT1sKFwiQUFcIiksU1tcIlNJLk0xLkFJUkJPUk5FIFNFQVJDSCBBTkQgQk9NQklOR1wiXT1sKFwiQUJcIiksU1tcIlNJLk0xLkFJUkJPUk5FIElOVEVSQ0VQVFwiXT1sKFwiQUlcIiksU1tcIlNJLk0xLkFMVElNRVRFUlwiXT1sKFwiQUxcIiksU1tcIlNJLk0xLkFJUkJPUk5FIFJFQ09OTkFJU1NBTkNFIEFORCBNQVBQSU5HXCJdPWwoXCJBTVwiKSxTW1wiU0kuTTEuQUlSIFRSQUZGSUMgQ09OVFJPTFwiXT1sKFwiQVRcIiksU1tcIlNJLk0xLkJFQUNPTiBUUkFOU1BPTkRFUiAoTk9UIElGRilcIl09bChcIkJOXCIpLFNbXCJTSS5NMS5CQVRUTEVGSUVMRCBTVVJWRUlMTEFOQ0VcIl09bChcIkJTXCIpLFNbXCJTSS5NMS5DT05UUk9MTEVEIEFQUFJPQUNIXCJdPWwoXCJDQVwiKSxTW1wiU0kuTTEuQ09OVFJPTExFRCBJTlRFUkNFUFRcIl09bChcIkNJXCIpLFNbXCJTSS5NMS5DRUxMVUxBUi9NT0JJTEVcIl09bChcIkNNXCIpLFNbXCJTSS5NMS5DT0FTVEFMIFNVUlZFSUxMQU5DRVwiXT1sKFwiQ1NcIiksU1tcIlNJLk0xLkNZQkVSXCJdPWwoXCJDWUJcIiksU1tcIlNJLk0xLkRFQ09ZL01JTUlDXCJdPWwoXCJEQ1wiKSxTW1wiU0kuTTEuREFUQSBUUkFOU01JU1NJT05cIl09bChcIkRUXCIpLFNbXCJTSS5NMS5FQVJUSCBTVVJWRUlMTEFOQ0VcIl09bChcIkVTXCIpLFNbXCJTSS5NMS5FQVJMWSBXQVJOSU5HXCJdPWwoXCJFV1wiKSxTW1wiU0kuTTEuRklSRSBDT05UUk9MXCJdPWwoXCJGQ1wiKSxTW1wiU0kuTTEuR1JPVU5EIE1BUFBJTkdcIl09bChcIkdNXCIpLFNbXCJTSS5NMS5IRUlHSFQgRklORElOR1wiXT1sKFwiSEZcIiksU1tcIlNJLk0xLkhBUkJPUiBTVVJWRUlMTEFOQ0VcIl09bChcIkhTXCIpLFNbXCJTSS5NMS5JREVOVElGSUNBVElPTiwgRlJJRU5EIE9SIEZPRSAoSU5URVJST0dBVE9SKVwiXT1sKFwiSUZcIiksU1tcIlNJLk0xLklOU1RSVU1FTlQgTEFORElORyBTWVNURU1cIl09bChcIklMXCIpLFNbXCJTSS5NMS5JT05PU1BIRVJJQyBTT1VORElOR1wiXT1sKFwiSVNcIiksU1tcIlNJLk0xLklERU5USUZJQ0FUSU9OLCBGUklFTkQgT1IgRk9FIChUUkFOU1BPTkRFUilcIl09bChcIklUXCIpLFNbXCJTSS5NMS5CQVJSQUdFIEpBTU1FUlwiXT1sKFwiSkJcIiksU1tcIlNJLk0xLkNMSUNLIEpBTU1FUlwiXT1sKFwiSkNcIiksU1tcIlNJLk0xLkRFQ0VQVElWRSBKQU1NRVJcIl09bChcIkpEXCIpLFNbXCJTSS5NMS5GUkVRVUVOQ1kgU1dFUFQgSkFNTUVSXCJdPWwoXCJKRlwiKSxTW1wiU0kuTTEuSkFNTUVSIChHRU5FUkFMKVwiXT1sKFwiSkdcIiksU1tcIlNJLk0xLk5PSVNFIEpBTU1FUlwiXT1sKFwiSk5cIiksU1tcIlNJLk0xLlBVTFNFRCBKQU1NRVJcIl09bChcIkpQXCIpLFNbXCJTSS5NMS5SRVBFQVRFUiBKQU1NRVJcIl09bChcIkpSXCIpLFNbXCJTSS5NMS5TUE9UIE5PSVNFIEpBTU1FUlwiXT1sKFwiSlNcIiksU1tcIlNJLk0xLlRSQU5TUE9OREVSIEpBTU1FUlwiXT1sKFwiSlRcIiksU1tcIlNJLk0xLk1JU1NJTEUgQUNRVUlTSVRJT05cIl09bChcIk1BXCIpLFNbXCJTSS5NMS5NSVNTSUxFIENPTlRST0xcIl09bChcIk1DXCIpLFNbXCJTSS5NMS5NSVNTSUxFIERPV05MSU5LXCJdPWwoXCJNRFwiKSxTW1wiU0kuTTEuTUVURU9ST0xPR0lDQUxcIl09bChcIk1FXCIpLFNbXCJTSS5NMS5NVUxUSS1GVU5DVElPTlwiXT1sKFwiTUZcIiksU1tcIlNJLk0xLk1JU1NJTEUgR1VJREFOQ0VcIl09bChcIk1HXCIpLFNbXCJTSS5NMS5NSVNTSUxFIEhPTUlOR1wiXT1sKFwiTUhcIiksU1tcIlNJLk0xLk1JU1NJTEUgVFJBQ0tJTkdcIl09bChcIk1UXCIpLFNbXCJTSS5NMS5OQVZJR0FUSU9OQUwvR0VORVJBTFwiXT1sKFwiTkFcIiksU1tcIlNJLk0xLk5BVklHQVRJT05BTC9ESVNUQU5DRSBNRUFTVVJJTkcgRVFVSVBNRU5UXCJdPWwoXCJORFwiKSxTW1wiU0kuTTEuTkFWSUdBVElPTi9URVJSQUlOIEZPTExPV0lOR1wiXT1sKFwiTlRcIiksU1tcIlNJLk0xLk5BVklHQVRJT05BTC9XRUFUSEVSIEFWT0lEQU5DRVwiXT1sKFwiTldcIiksU1tcIlNJLk0xLk9NTkktTElORSBPRiBTSUdIVCAoTE9TKVwiXT1sKFwiT0xcIiksU1tcIlNJLk0xLlBST1hJTUlUWSBVU0VcIl09bChcIlBGXCIpLFNbXCJTSS5NMS5QT0lOVC1UTy1QT0lOVCBMSU5FIE9GIFNJR0hUIChMT1MpXCJdPWwoXCJQUFwiKSxTW1wiU0kuTTEuSU5TVFJVTUVOVEFUSU9OXCJdPWwoXCJSSVwiKSxTW1wiU0kuTTEuUkFOR0UgT05MWVwiXT1sKFwiUk9cIiksU1tcIlNJLk0xLlNPTk9CVU9ZXCJdPWwoXCJTQlwiKSxTW1wiU0kuTTEuU0FURUxMSVRFIERPV05MSU5LXCJdPWwoXCJTRFwiKSxTW1wiU0kuTTEuU1BBQ0VcIl09bChcIlNQXCIpLFNbXCJTSS5NMS5TVVJGQUNFIFNFQVJDSFwiXT1sKFwiU1NcIiksU1tcIlNJLk0xLlNIRUxMIFRSQUNLSU5HXCJdPWwoXCJTVFwiKSxTW1wiU0kuTTEuU0FURUxMSVRFIFVQTElOS1wiXT1sKFwiU1VcIiksU1tcIlNJLk0xLlRBUkdFVCBBQ1FVSVNJVElPTlwiXT1sKFwiVEFcIiksU1tcIlNJLk0xLlRBUkdFVCBJTExVTUlOQVRJT05cIl09bChcIlRJXCIpLFNbXCJTSS5NMS5UUk9QT1NQSEVSSUMgU0NBVFRFUlwiXT1sKFwiVFNcIiksU1tcIlNJLk0xLlRBUkdFVCBUUkFDS0lOR1wiXT1sKFwiVFRcIiksU1tcIlNJLk0xLlVOS05PV05cIl09bChcIlVOXCIpLFNbXCJTSS5NMS5WSURFTyBSRU1PVElOR1wiXT1sKFwiVlJcIiksU1tcIlNJLk0xLkVYUEVSSU1FTlRBTFwiXT1sKFwiWFBcIiksU1tcIlNJLk0xLkFMUEhBXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJBXCJ9LFNbXCJTSS5NMS5CUkFWT1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQlwifSxTW1wiU0kuTTEuQ0hBUkxJRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQ1wifSxTW1wiU0kuTTEuREVMVEFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkRcIn0sU1tcIlNJLk0xLkVDSE9cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkVcIn0sU1tcIlNJLk0xLkZPWFRST1RcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkZcIn0sU1tcIlNJLk0xLkhPVEVMXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJIXCJ9LFNbXCJTSS5NMS5JTkRZXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJJXCJ9LFNbXCJTSS5NMS5NSUtFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJNXCJ9LFNbXCJTSS5NMS5PU0NBUlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiT1wifSxTW1wiU0kuTTEuUEFQQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiUFwifSxTW1wiU0kuTTEuU0lFUlJBXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJTXCJ9LFNbXCJTSS5NMS5UQU5HT1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiVFwifSxTW1wiU0kuTTEuVU5JRk9STVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiVVwifSxTW1wiU0kuTTIuQUxQSEFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJBXCJ9LFNbXCJTSS5NMi5CUkFWT1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkJcIn0sU1tcIlNJLk0yLkNIQVJMSUVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJDXCJ9LFNbXCJTSS5NMi5DWUJFUlwiXT1yKFwiQ1lCXCIpLFNbXCJTSS5NMi5ERUxUQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkRcIn0sU1tcIlNJLk0yLkVDSE9cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJFXCJ9LFNbXCJTSS5NMi5GT1hUUk9UXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiRlwifSxTW1wiU0kuTTIuR09MRlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkdcIn0sU1tcIlNJLk0yLklORFlcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJJXCJ9LFNbXCJTSS5NMi5MSU1BXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiTFwifSxTW1wiU0kuTTIuTUlLRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIk1cIn0sU1tcIlNJLk0yLk5PVkVNQkVSXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiTlwifSxTW1wiU0kuTTIuUEFQQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlBcIn0sU1tcIlNJLk0yLlNJRVJSQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlNcIn0sU1tcIlNJLk0yLlRBTkdPXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiVFwifSxTW1wiU0kuTTIuVU5JRk9STVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlVcIn0sU1tcIlNJLk0yLldISVNLRVlcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJXXCJ9LFNbXCJTSS5NMy5TUEFDRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo3NSxmb250c2l6ZToyNSx0ZXh0OlwiU1wifSxTW1wiU0kuTTMuR1JPVU5EXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5Ojc1LGZvbnRzaXplOjI1LHRleHQ6XCJHXCJ9LFMpUy5oYXNPd25Qcm9wZXJ0eShOKSYmKEkuaGFzT3duUHJvcGVydHkoTikmJmNvbnNvbGUud2FybihcIk92ZXJyaWRlIG9mOiBcIitOKSxuLmNhbGwodGhpcyxTW05dLFQpLElbTl09U1tOXSl9dmFyIHo9e3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltmXSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiSS1QLVMtLS0tLVwiXT1bXSxJW1wiSS1QLVNDLS0tLVwiXT1bXSxJW1wiSS1QLVNDRC0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLkRFTFRBXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUi0tLS1cIl09W10sSVtcIkktUC1TUkQtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuREVMVEFcIl0sRVtcIlNJLk0yLlRBTkdPXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUkUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRUNIT1wiXSxFW1wiU0kuTTIuU0lFUlJBXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUkktLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuSU5EWVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXSxFW1wiU0kuTTMuU1BBQ0VcIl1dLElbXCJJLVAtU1JNLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl0sRVtcIlNJLk0zLlNQQUNFXCJdXSxJW1wiSS1QLVNSVC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuQUxQSEFcIl0sRVtcIlNJLk0zLlNQQUNFXCJdXSxJW1wiSS1QLVNSUy0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLlBBUEFcIl0sRVtcIlNJLk0zLlNQQUNFXCJdXSxJW1wiSS1QLVNSVS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5VTklGT1JNXCJdLEVbXCJTSS5NMi5OT1ZFTUJFUlwiXSxFW1wiU0kuTTMuU1BBQ0VcIl1dLElbXCJJLUEtUy0tLS0tXCJdPVtdLElbXCJJLUEtU0MtLS0tXCJdPVtdLElbXCJJLUEtU0NDLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLk1JS0VcIl1dLElbXCJJLUEtU0NPLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLk9TQ0FSXCJdLEVbXCJTSS5NMi5MSU1BXCJdXSxJW1wiSS1BLVNDUC0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5QQVBBXCJdLEVbXCJTSS5NMi5QQVBBXCJdXSxJW1wiSS1BLVNDUy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLlVOSUZPUk1cIl1dLElbXCJJLUEtU1ItLS0tXCJdPVtdLElbXCJJLUEtU1JBSS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkFMUEhBXCJdLEVbXCJTSS5NMi5JTkRZXCJdXSxJW1wiSS1BLVNSQVMtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuQlJBVk9cIl1dLElbXCJJLUEtU1JDLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLklORFlcIl1dLElbXCJJLUEtU1JELS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkRFTFRBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktQS1TUkUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRUNIT1wiXSxFW1wiU0kuTTIuV0hJU0tFWVwiXV0sSVtcIkktQS1TUkYtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRk9YVFJPVFwiXSxFW1wiU0kuTTIuQ0hBUkxJRVwiXV0sSVtcIkktQS1TUkktLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuSU5EWVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXV0sSVtcIkktQS1TUk1BLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLUEtU1JNRC0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkRFTFRBXCJdXSxJW1wiSS1BLVNSTUctLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5HT0xGXCJdXSxJW1wiSS1BLVNSTVQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktQS1TUk1GLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXV0sSVtcIkktQS1TUlRJLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLklORFlcIl1dLElbXCJJLUEtU1JUQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5BTFBIQVwiXV0sSVtcIkktQS1TUlRULS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLlRBTkdPXCJdXSxJW1wiSS1BLVNSVS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5VTklGT1JNXCJdLEVbXCJTSS5NMi5OT1ZFTUJFUlwiXV0sSVtcIkktRy1TLS0tLS1cIl09W10sSVtcIkktRy1TQy0tLS1cIl09W10sSVtcIkktRy1TQ0MtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuQ0hBUkxJRVwiXSxFW1wiU0kuTTIuTUlLRVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNDTy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5PU0NBUlwiXSxFW1wiU0kuTTIuTElNQVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNDUC0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5QQVBBXCJdLEVbXCJTSS5NMi5QQVBBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU0NTLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLlNJRVJSQVwiXSxFW1wiU0kuTTIuVU5JRk9STVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNDVC0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuU0lFUlJBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1ItLS0tXCJdPVtdLElbXCJJLUctU1JBVC0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkFMUEhBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSQUEtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuQUxQSEFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkItLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQlJBVk9cIl0sRVtcIlNJLk0yLlNJRVJSQVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSQ1MtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5DSEFSTElFXCJdLEVbXCJTSS5NMi5TSUVSUkFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkNBLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQ0hBUkxJRVwiXSxFW1wiU0kuTTIuQUxQSEFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkQtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuREVMVEFcIl0sRVtcIlNJLk0yLlRBTkdPXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JFLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkVDSE9cIl0sRVtcIlNJLk0yLldISVNLRVlcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkYtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRk9YVFJPVFwiXSxFW1wiU0kuTTIuQ0hBUkxJRVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSSC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5IT1RFTFwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSSS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5JTkRZXCJdLEVbXCJTSS5NMi5GT1hUUk9UXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JNTS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkVDSE9cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUk1BLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuQUxQSEFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUk1HLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuR09MRlwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSTVQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5UQU5HT1wiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSTUYtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5GT1hUUk9UXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JTLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlNJRVJSQVwiXSxFW1wiU0kuTTIuVEFOR09cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUlRBLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLkFMUEhBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JUSS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5JTkRZXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JUVC0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5UQU5HT1wiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSVS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5VTklGT1JNXCJdLEVbXCJTSS5NMi5OT1ZFTUJFUlwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1TLVMtLS0tLVwiXT1bXSxJW1wiSS1TLVNDLS0tLVwiXT1bXSxJW1wiSS1TLVNDQy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5DSEFSTElFXCJdLEVbXCJTSS5NMi5NSUtFXCJdXSxJW1wiSS1TLVNDTy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5PU0NBUlwiXSxFW1wiU0kuTTIuTElNQVwiXV0sSVtcIkktUy1TQ1AtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuUEFQQVwiXSxFW1wiU0kuTTIuUEFQQVwiXV0sSVtcIkktUy1TQ1MtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5VTklGT1JNXCJdXSxJW1wiSS1TLVNSLS0tLVwiXT1bXSxJW1wiSS1TLVNSQVQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLVMtU1JBQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkFMUEhBXCJdLEVbXCJTSS5NMi5BTFBIQVwiXV0sSVtcIkktUy1TUkNBLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQ0hBUkxJRVwiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLVMtU1JDSS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLklORFlcIl1dLElbXCJJLVMtU1JELS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkRFTFRBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktUy1TUkUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRUNIT1wiXSxFW1wiU0kuTTIuV0hJU0tFWVwiXV0sSVtcIkktUy1TUkYtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRk9YVFJPVFwiXSxFW1wiU0kuTTIuQ0hBUkxJRVwiXV0sSVtcIkktUy1TUkgtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuSE9URUxcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLVMtU1JJLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLklORFlcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLVMtU1JNTS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkVDSE9cIl1dLElbXCJJLVMtU1JNQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkFMUEhBXCJdXSxJW1wiSS1TLVNSTUctLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5HT0xGXCJdXSxJW1wiSS1TLVNSTVQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktUy1TUk1GLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXV0sSVtcIkktUy1TUlMtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5TSUVSUkFcIl1dLElbXCJJLVMtU1JUQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5BTFBIQVwiXV0sSVtcIkktUy1TUlRJLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLklORFlcIl1dLElbXCJJLVMtU1JUVC0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktUy1TUlUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVU5JRk9STVwiXSxFW1wiU0kuTTIuTk9WRU1CRVJcIl1dLElbXCJJLVUtUy0tLS0tXCJdPVtdLElbXCJJLVUtU0MtLS0tXCJdPVtdLElbXCJJLVUtU0NPLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLk9TQ0FSXCJdLEVbXCJTSS5NMi5MSU1BXCJdXSxJW1wiSS1VLVNDUC0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5QQVBBXCJdLEVbXCJTSS5NMi5QQVBBXCJdXSxJW1wiSS1VLVNDUy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLlVOSUZPUk1cIl1dLElbXCJJLVUtU1ItLS0tXCJdPVtdLElbXCJJLVUtU1JELS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkRFTFRBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktVS1TUkUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuRUNIT1wiXSxFW1wiU0kuTTIuV0hJU0tFWVwiXV0sSVtcIkktVS1TUk0tLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXV0sSVtcIkktVS1TUlMtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5TSUVSUkFcIl1dLElbXCJJLVUtU1JULS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5BTFBIQVwiXV0sSVtcIkktVS1TUlUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVU5JRk9STVwiXSxFW1wiU0kuTTIuTk9WRU1CRVJcIl1dfX0sSD17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2NdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJPLVYtQS0tLS0tXCJdPVtFW1wiU1QuSUMuQVJTT04vRklSRVwiXV0sSVtcIk8tVi1NLS0tLS1cIl09W0VbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVwiXV0sSVtcIk8tVi1NQS0tLS1cIl09W0VbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVwiXSxFW1wiU1QuTTEuTVVSREVSXCJdXSxJW1wiTy1WLU1CLS0tLVwiXT1bRVtcIlNULklDLktJTExJTkcgVklDVElNXCJdLEVbXCJTVC5NMS5FWEVDVVRJT04gKFdST05HRlVMIEtJTExJTkcpXCJdXSxJW1wiTy1WLU1DLS0tLVwiXT1bRVtcIlNULklDLktJTExJTkcgVklDVElNXCJdLEVbXCJTVC5NMS5BU1NBU1NJTkFUSU9OXCJdXSxJW1wiTy1WLUItLS0tLVwiXT1bRVtcIlNULklDLkJPTUJcIl1dLElbXCJPLVYtWS0tLS0tXCJdPVtFW1wiU1QuSUMuQk9PQlkgVFJBUFwiXV0sSVtcIk8tVi1ELS0tLS1cIl09W0VbXCJTVC5JQy5EUklWRS1CWSBTSE9PVElOR1wiXV0sSVtcIk8tVi1TLS0tLS1cIl09W0VbXCJTVC5JQy5TTklQSU5HXCJdXSxJW1wiTy1WLVAtLS0tLVwiXT1bRVtcIlNULklDLlBPSVNPTklOR1wiXV0sSVtcIk8tVi1FLS0tLS1cIl09W0VbXCJTVC5JQy5FWFBMT1NJT05cIl1dLElbXCJPLVYtRUktLS0tXCJdPVtFW1wiU1QuSUMuRVhQTE9TSU9OXCJdLEVbXCJTVC5JQy5JRURcIl1dLElbXCJPLUwtQi0tLS0tXCJdPVtFW1wiU1QuSUMuQkxBQ0sgTElTVCBMT0NBVElPTlwiXV0sSVtcIk8tTC1HLS0tLS1cIl09W0VbXCJTVC5JQy5HUkFZIExJU1QgTE9DQVRJT05cIl1dLElbXCJPLUwtVy0tLS0tXCJdPVtFW1wiU1QuSUMuV0hJVEUgTElTVCBMT0NBVElPTlwiXV0sSVtcIk8tTC1NLS0tLS1cIl09W0VbXCJTVC5JQy5NQVNTIEdSQVZFIExPQ0FUSU9OXCJdXSxJW1wiTy1PLVAtLS0tLVwiXT1bRVtcIlNULklDLlBBVFJPTExJTkdcIl1dLElbXCJPLU8tUi0tLS0tXCJdPVtdLElbXCJPLU8tUlctLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuV0lMTElOR1wiXV0sSVtcIk8tTy1SQy0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5DT0VSQ0VEL0lNUFJFU1NFRFwiXV0sSVtcIk8tTy1ELS0tLS1cIl09W0VbXCJTVC5JQy5ERU1PTlNUUkFUSU9OXCJdXSxJW1wiTy1PLU0tLS0tLVwiXT1bRVtcIlNULklDLk1JTkUgTEFZSU5HXCJdXSxJW1wiTy1PLVktLS0tLVwiXT1bRVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXV0sSVtcIk8tTy1ZVC0tLS1cIl09W0VbXCJTVC5JQy5SQURJTyBBTkQgVEVMRVZJU0lPTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbXCJPLU8tWVctLS0tXCJdPVtFW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLEVbXCJTVC5NMS5XUklUVEVOIFBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXV0sSVtcIk8tTy1ZSC0tLS1cIl09W0VbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl0sRVtcIlNULk0xLkhPVVNFLVRPLUhPVVNFXCJdXSxJW1wiTy1PLUYtLS0tLVwiXT1bRVtcIlNULklDLlNFQVJDSElOR1wiXV0sSVtcIk8tTy1TLS0tLS1cIl09W0VbXCJTVC5JQy5TUFlcIl1dLElbXCJPLU8tTy0tLS0tXCJdPVtFW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl1dLElbXCJPLU8tRS0tLS0tXCJdPVtFW1wiU1QuSUMuRVhUT1JUSU9OXCJdXSxJW1wiTy1PLUgtLS0tLVwiXT1bXSxJW1wiTy1PLUhULS0tLVwiXT1bRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJPLU8tSEEtLS0tXCJdPVtFW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl0sRVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sSVtcIk8tTy1IVi0tLS1cIl09W0VbXCJTVC5JQy5ISUpBQ0tJTkcgKEJPQVQpXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJPLU8tSy0tLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuS0lETkFQUElOR1wiXV0sSVtcIk8tTy1LQS0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5LSUROQVBQSU5HXCJdLEVbXCJTVC5JQy5BVFRFTVBURUQgQ1JJTUlOQUwgQUNUSVZJVFlcIl1dLElbXCJPLU8tQS0tLS0tXCJdPVtFW1wiU1QuSUMuQVJSRVNUXCJdXSxJW1wiTy1PLVUtLS0tLVwiXT1bRVtcIlNULklDLkRSVUcgUkVMQVRFRCBBQ1RJVklUSUVTXCJdXSxJW1wiTy1PLUMtLS0tLVwiXT1bRVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdXSxJW1wiTy1PLUNBLS0tLVwiXT1bRVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdLEVbXCJTVC5NMS5DT01CQVRcIl1dLElbXCJPLU8tQ0ItLS0tXCJdPVtFW1wiU1QuSUMuQ09NUE9TSVRFIExPU1NcIl0sRVtcIlNULk0xLkFDQ0lERU5UXCJdXSxJW1wiTy1PLUNDLS0tLVwiXT1bRVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdLEVbXCJTVC5NMS5PVEhFUlwiXV0sSVtcIk8tSS1SLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXV0sSVtcIk8tSS1TLS0tLS1cIl09W0VbXCJTVC5JQy5TQUZFIEhPVVNFXCJdXSxJW1wiTy1JLUctLS0tLVwiXT1bRVtcIlNULklDLkdSQUZGSVRJXCJdXSxJW1wiTy1JLVYtLS0tLVwiXT1bRVtcIlNULklDLlZBTkRBTElTTS9MT09UL1JBTlNBQ0svUExVTkRFUi9TQUNLXCJdXSxJW1wiTy1JLUktLS0tLVwiXT1bRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdXSxJW1wiTy1JLUQtLS0tLVwiXT1bRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdLEVbXCJTVC5NMS5EUlVHXCJdXSxJW1wiTy1JLUYtLS0tLVwiXT1bRVtcIlNULklDLklOVEVSTkFMIFNFQ1VSSVRZIEZPUkNFXCJdXSxJW1wiTy1QLS0tLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl1dLElbXCJPLVAtQS0tLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuTEVBREVSXCJdXSxJW1wiTy1QLUItLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLlRBUkdFVEVEXCJdXSxJW1wiTy1QLUMtLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLlRFUlJPUklTVFwiXV0sSVtcIk8tRy0tLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXV0sSVtcIk8tRy1BLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiU1QuTTEuRElTUExBQ0VEIFBFUlNPTlMsIFJFRlVHRUVTLCBBTkQgRVZBQ1VFRVNcIl1dLElbXCJPLUctQi0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIlNULk0xLk5PTkdPVkVSTk1FTlRBTCBPUkdBTklaQVRJT04gKE5HTylcIl1dLElbXCJPLUctQy0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIlNULk0xLlRFUlJPUklTVFwiXV0sSVtcIk8tRy1ELS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiU1QuTTEuUkVMSUdJT1VTXCJdXSxJW1wiTy1HLUUtLS0tLVwiXT1bRVtcIlNULklDLkdST1VQXCJdLEVbXCJTVC5NMS5GT1JFSUdOIEZJR0hURVJTXCJdXSxJW1wiTy1HLUYtLS0tLVwiXT1bRVtcIlNULklDLkdST1VQXCJdLEVbXCJTVC5NMS5HQU5HXCJdXSxJW1wiTy1SLS0tLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLlJBUEVcIl1dLElbXCJPLVItQS0tLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuUkFQRVwiXSxFW1wiU1QuSUMuQVRURU1QVEVEIENSSU1JTkFMIEFDVElWSVRZXCJdXX19O2Z1bmN0aW9uIFYoSSx0LEUsUixlLEEpe3ZhciBDPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsVD1cIkhvc3RpbGVcIiE9Q3x8ZT9FLmljb25Db2xvcltDXTpcInJnYigyNTUsIDAsIDApXCIsUz1cIkhvc3RpbGVcIiE9Q3x8ZT9FLmZpbGxDb2xvcltDXTpcInJnYigyNTUsIDAsIDApXCIsTj10Lm51bWJlclNJREMsTz1FLndoaXRlW0NdLEc9e307Zm9yKHZhciBvIGluIEdbXCJUUC5ERVNUUk9ZXCJdPVJ8fE4/W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMCw0NSA4NSw0Ni43NSBtIDMwLDE2LjUgODUsNDYuNzUgTSAwLDE1NSA4NSwxMDguMjUgTSAxMTUsOTEuNzUgMjAwLDQ1XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkRcIn1dOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNVwiLGQ6XCJNIDAsMTU1IDIwMCw0NSBNIDAsNDUgMjAwLDE1NVwifSxHW1wiVFAuSU5URVJESUNUXCJdPVJ8fE4/W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTk0LjIwMyw2NS42Njc0IDUuNDksLTIwLjQ5MDQgLTIwLjQ5LC01LjQ5MDQgTSAxMTUsOTEuNzUgMjAwLDQ1IE0gMCwxNTUgODUsMTA4LjI1IE0gMTg1LDg1IGwgMTUsMTUgLTE1LDE1IG0gLTcwLC0xNSA4NSwwIG0gLTIwMCwwIDg1LDBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiSVwifV06e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAwLDEwMCAyMDAsMCBNIDAsMTU1IDIwMCw0NS4yIE0gMTg1LDg1IGwgMTUsMTUgLTE1LDE1IG0gOS4yLC00OS4zIDUuNSwtMjAuNSAtMjAuNSwtNS41XCJ9LEdbXCJUUC5ORVVUUkFMSVpFXCJdPVJ8fE4/W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTE1LDEwOC4yNSAyMDAsMTU1IE0gMCw0NSA4NSw5MS43NVwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAxMTUsOTEuNzUgMjAwLDQ1IE0gMCwxNTUgODUsMTA4LjI1XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk5cIn1dOlt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDAsNDUgMjAwLDE1NVwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAwLDE1NSAyMDAsNDVcIn1dLEdbXCJUUC5TVVBQUkVTU1wiXT1SfHxOP1t7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAxMTUsMTA4LjI1IDIwMCwxNTUgTSAwLDQ1IDg1LDkxLjc1XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNVwiLGQ6XCJNIDExNSw5MS43NSAyMDAsNDUgTSAwLDE1NSA4NSwxMDguMjVcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiU1wifV06W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMCw0NSAyMDAsMTU1XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNVwiLGQ6XCJNIDAsMTU1IDIwMCw0NVwifV0sR1tcIlRQLkRBVFVNXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDUwIDAsNTAgNTAsMCBDIDE1MCw3Mi4zODU4IDEyNy42MTQsNTAgMTAwLDUwIFogbSAwLDUwIC01MCwwIGMgMCwyNy42MTQgMjIuMzg1OCw1MCA1MCw1MCB6XCJ9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9XSxHW1wiVFAuQlJJRUYgQ09OVEFDVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsMCA3MCwwIG0gLTM1LDgwIDAsLTgwIG0gMCwxMDAgLTQ1LC0yMCA5MCwwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4Ojc1LHk6NTUsZm9udHNpemU6NDUsdGV4dDpcIkJcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEyNSx5OjU1LGZvbnRzaXplOjQ1LHRleHQ6XCJDXCJ9XSxHW1wiVFAuTE9TVCBDT05UQUNUXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA2NSwwIDcwLDAgbSAtMzUsODAgMCwtODAgbSAwLDEwMCAtNDUsLTIwIDkwLDAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6NzUseTo1NSxmb250c2l6ZTo0NSx0ZXh0OlwiTFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTI1LHk6NTUsZm9udHNpemU6NDUsdGV4dDpcIkNcIn1dLEdbXCJUUC5TSU5LRVJcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDE1IDAsNjUgTSA2MCwxNSA4MCwwIDEwMCwxNSAxMjAsMCAxNDAsMTVcIn0se3R5cGU6XCJwYXRoXCIsZDpcIk0gMTAwLDEwMCA1NSw4MCAxNDUsODAgWlwifV0sR1tcIlRQLlRSSUFMIFRSQUNLXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA2NSwwIDcwLDAgbSAtMzUsODAgMCwtODAgbSAwLDEwMCAtNDUsLTIwIDkwLDAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6NzUseTo1NSxmb250c2l6ZTo0NSx0ZXh0OlwiVFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTI1LHk6NTUsZm9udHNpemU6NDUsdGV4dDpcIlRcIn1dLEdbXCJUUC5TT05PQlVPWVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMDAsNjAgbCAwLC0zNSAxMCwxMCAwLC00NVwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjQwfV0sR1tcIlRQLlNPTk9CVU9ZIFBBVFRFUk4gQ0VOVEVSXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUFwifV0sR1tcIlRQLlNPTk9CVU9ZIERJRkFSXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiRFwifV0sR1tcIlRQLlNPTk9CVU9ZIExPRkFSXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTFwifV0sR1tcIlRQLlNPTk9CVU9ZIENBU1NcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJDXCJ9XSxHW1wiVFAuU09OT0JVT1kgRElDQVNTXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiU1wifV0sR1tcIlRQLlNPTk9CVU9ZIEJUXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQlwifV0sR1tcIlRQLlNPTk9CVU9ZIEFOTVwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkFcIn1dLEdbXCJUUC5TT05PQlVPWSBWTEFEXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiVlwifV0sR1tcIlRQLlNPTk9CVU9ZIEFUQUNcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJUXCJ9XSxHW1wiVFAuU09OT0JVT1kgQkFSUkFcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJCUlwifV0sR1tcIlRQLlNPTk9CVU9ZIEJBVEhZVEhFUk1PR1JBUEggVFJBTlNNSVRUSU5HIFNPTk9CVU9ZIChCVClcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJCXCJ9XSxHW1wiVFAuU09OT0JVT1kgQ09NTUFORCBBQ1RJVkUgTVVMVElCRUFNIFNPTk9CVU9ZIChDQU1CUylcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJDTVwifV0sR1tcIlRQLlNPTk9CVU9ZIEVYUEVOREFCTEUgUkVMSUFCTEUgQUNPVVNUSUMgUEFUSCBTT05PQlVPWSAoRVJBUFMpXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiRVwifV0sR1tcIlRQLlNPTk9CVU9ZIFJPXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUlwifV0sR1tcIlRQLlNPTk9CVU9ZIEtJTkdQSU5cIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJLXCJ9XSxHW1wiVFAuU09OT0JVT1kgRVhQSVJFRFwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNDAsNjAgbCAxMjAsODAgTSA0MCwxNDAgbCAxMjAsLTgwXCJ9XSxHW1wiVFAuU0VBUkNIXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDgwIDIwLDIwIC0yMCwyMCA0MCwwIC0yMCwtMjAgMjAsLTIwIHogTSA1MCwxNTAgMTUwLDUwIE0gNTAsNTAgMTUwLDE1MFwifSxHW1wiVFAuU0VBUkNIIEFSRUFcIl09W0dbXCJUUC5TRUFSQ0hcIl0sUnx8Tj9be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjYwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxNDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkFcIn1dOnt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiU0FcIn1dLEdbXCJUUC5ESVAgUE9TSVRJT05cIl09W0dbXCJUUC5TRUFSQ0hcIl0sUnx8Tj9be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjYwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJEXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxNDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlBcIn1dOnt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiRElQXCJ9XSxHW1wiVFAuU0VBUkNIIENFTlRFUlwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDEwMCAtNTAsMTAgMCwtMjAgeiBtIDAsMCAxMCw1MCAtMjAsMCB6IG0gMCwwIDUwLC0xMCAwLDIwIHogbSAwLDAgLTEwLC01MCAyMCwwIHpcIn0sR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxNjAsMTYwIDQwLDE2MCA0MCw0MCAxNjAsNDAgWlwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5OQVZJR0FUSU9OQUwgUkVGRVJFTkNFXCJdPSFOJiZSP3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTYwLDE2MCA0MCwxNjAgNDAsNDAgMTYwLDQwIFogTSAxNjAsMTYwIDQwLDQwIE0gNDAsMTYwIDE2MCw0MFwifTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDE2MCwxNjAgNDAsNDAgTSA0MCwxNjAgMTYwLDQwXCJ9LEdbXCJUUC5TUEVDSUFMIFBPSU5UXCJdPVtHW1wiVFAuTkFWSUdBVElPTkFMIFJFRkVSRU5DRVwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5BSVJGSUVMRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAzNSwxMjUgMTY1LDYwIG0gLTEzNSw0MCAxNDAsMFwifV0sR1tcIlRQLkRMUlBcIl09W0dbXCJUUC5TUEVDSUFMIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTAsZm9udHNpemU6NDAsdGV4dDpcIkRcIn1dLEdbXCJUUC5QT0lOVCBPRiBJTlRFTkRFRCBNT1ZFTUVOVFwiXT1bR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJQXCJ9XSxHW1wiVFAuUFJFLUxBTkRGQUxMIFdBWVBPSU5UXCJdPVtHW1wiVFAuUkVGRVJFTkNFIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTAsZm9udHNpemU6NDAsdGV4dDpcIlBMXCJ9XSxHW1wiVFAuTUFSU0hBTEwgUE9JTlRcIl09W0dbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiTVwifV0sR1tcIlRQLlJFRkVSRU5DRSBQT0lOVCBXQVlQT0lOVFwiXT1bR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJXXCJ9XSxHW1wiVFAuQ09SUklET1IgVEFCXCJdPVtHW1wiVFAuUkVGRVJFTkNFIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTAsZm9udHNpemU6NDAsdGV4dDpcIkNcIn1dLEdbXCJUUC5FTkVNWSBQT0lOVFwiXT1bR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJFTllcIn1dLEdbXCJUUC5QT0lOVCBPRiBJTlRFUkVTVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk0gMTI5LjAyMSw0MS45NTcgQyAxMjEuNDgsNDkuOTQ1OCAxMTAuOTg2LDU0LjQ4MTYgMTAwLDU0LjUgODkuMDQzMiw1NC40OTI4IDc4LjU2OSw0OS45OTE0IDcxLjAyMzQsNDIuMDQ2OSBMIDEwMCwxMDAgWlwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjE1LHI6NDB9XSxHW1wiUE9JTlQgT0YgSU5URVJFU1Qg4oCTIExBVU5DSCBFVkVOVFwiXT1bR1tcIlRQLlBPSU5UIE9GIElOVEVSRVNUXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTozMCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwiLHRleHQ6XCJMRVwifV0sR1tcIlRQLlNISVAgQVJFQSBPRiBJTlRFUkVTVCAoQUVHSVMgT05MWSlcIl09e3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH0sR1tcIlRQLkFDVElWRSBNQU5PRVVWUkUgQVJFQSAoQUVHSVMgT05MWSlcIl09e3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLHN0cm9rZTpcInJnYigyNTQsMjAzLDQ3KVwiLGN4OjEwMCxjeToxMDAscjo2MH0sR1tcIlRQLlBMQU4gU0hJUFwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOlMsc3Ryb2tlOlMsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTpTLGN4OjEwMCxjeToxMDAscjo0NSxmaWxsOiExfV0sR1tcIlRQLkFJTSBQT0lOVFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjM1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjQ1LGZpbGw6ITF9XSxHW1wiVFAuREVGRU5ERUQgQVNTRVRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCwxMzUgMCwtMzAgMjAsMCAwLDMwIG0gLTUwLDAgMCwtNTAgLTEwLDAgMCwtMjAgMjAsMCAwLDEwIDIwLDAgMCwtMTAgMjAsMCAwLDEwIDIwLDAgMCwtMTAgMjAsMCAwLDIwIC0xMCwwIDAsNTAgelwifSxHW1wiVFAuQ0hFTUlDQUwgRVZFTlRcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTEwLDYwIEMgMTEwLDQwIDExNSwyNSA4MCwyMCBNIDkwLDYwIEMgOTAsNDAgODUsMjUgMTIwLDIwIG0gLTIwLDgwIC02MCwtMTEwIDEyMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDIwIGMgMTAsMCAxMCwxNSAwLDE1IC0xMCwwIC0xMCwtMTUgMCwtMTUgeiBNIDgwLDM1IGMgMTAsMCAxMCwtMTUgMCwtMTUgLTEwLDAgLTEwLDE1IDAsMTUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzAsdGV4dDpcIkNcIn1dLEdbXCJUUC5DSEVNSUNBTCDigJMgVE9YSUMgSU5EVVNUUklBTCBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiQ1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODUsZm9udHNpemU6MzAsdGV4dDpcIlRcIn1dLEdbXCJUUC5CSU9MT0dJQ0FMIEVWRU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExMCw2MCBDIDExMCw0MCAxMTUsMjUgODAsMjAgTSA5MCw2MCBDIDkwLDQwIDg1LDI1IDEyMCwyMCBtIC0yMCw4MCAtNjAsLTExMCAxMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCwyMCBjIDEwLDAgMTAsMTUgMCwxNSAtMTAsMCAtMTAsLTE1IDAsLTE1IHogTSA4MCwzNSBjIDEwLDAgMTAsLTE1IDAsLTE1IC0xMCwwIC0xMCwxNSAwLDE1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9XSxHW1wiVFAuQklPTE9HSUNBTCDigJMgVE9YSUMgSU5EVVNUUklBTCBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiQlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODUsZm9udHNpemU6MzAsdGV4dDpcIlRcIn1dLEdbXCJUUC5OVUNMRUFSIEVWRU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExMCw2MCBDIDExMCw0MCAxMTUsMjUgODAsMjAgTSA5MCw2MCBDIDkwLDQwIDg1LDI1IDEyMCwyMCBtIC0yMCw4MCAtNjAsLTExMCAxMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCwyMCBjIDEwLDAgMTAsMTUgMCwxNSAtMTAsMCAtMTAsLTE1IDAsLTE1IHogTSA4MCwzNSBjIDEwLDAgMTAsLTE1IDAsLTE1IC0xMCwwIC0xMCwxNSAwLDE1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwLHRleHQ6XCJOXCJ9XSxHW1wiVFAuUkFESU9MT0dJQ0FMIEVWRU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExMCw2MCBDIDExMCw0MCAxMTUsMjUgODAsMjAgTSA5MCw2MCBDIDkwLDQwIDg1LDI1IDEyMCwyMCBtIC0yMCw4MCAtNjAsLTExMCAxMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCwyMCBjIDEwLDAgMTAsMTUgMCwxNSAtMTAsMCAtMTAsLTE1IDAsLTE1IHogTSA4MCwzNSBjIDEwLDAgMTAsLTE1IDAsLTE1IC0xMCwwIC0xMCwxNSAwLDE1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxHW1wiVFAuUkFESU9MT0dJQ0FMIOKAkyBUT1hJQyBJTkRVU1RSSUFMIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExMCw2MCBDIDExMCw0MCAxMTUsMjUgODAsMjAgTSA5MCw2MCBDIDkwLDQwIDg1LDI1IDEyMCwyMCBtIC0yMCw4MCAtNjAsLTExMCAxMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCwyMCBjIDEwLDAgMTAsMTUgMCwxNSAtMTAsMCAtMTAsLTE1IDAsLTE1IHogTSA4MCwzNSBjIDEwLDAgMTAsLTE1IDAsLTE1IC0xMCwwIC0xMCwxNSAwLDE1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo4NSxmb250c2l6ZTozMCx0ZXh0OlwiVFwifV0sR1tcIlRQLkRST1AgUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMzAsMTAwIDAsLTQwIG0gLTYwLDQwIDAsLTQwIG0gNjAsNDAgMCwwIGMgMCw4LjI4NCAtNi43MTYsMTUgLTE1LDE1IC04LjI4NCwwIC0xNSwtNi43MTYgLTE1LC0xNSBtIDAsMCAwLDAgYyAwLDguMjg0IC02LjcxNTcsMTUgLTE1LDE1IC04LjI4NDMsMCAtMTUsLTYuNzE2IC0xNSwtMTUgbSAzMCwtNDAgMCw0MFwifSxHW1wiVFAuRU5UUlkgUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsMTAwIDAsLTUwIG0gLTM1LDE1IDM1LDM1IDM1LC0zNSBtIC04NSwzNSAxMDAsMFwifSxHW1wiVFAuQUlSIERFVE9OQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNTUsMTUwIDkwLDAgbSAtMzUsLTk1IDUsMjAgMTUsLTEwIDAsMTUgMTUsNSAtMTUsMTAgMTUsMTAgLTE1LDUgNSwxNSAtMjAsLTUgLTUsMjAgLTEwLC0xNSAtMTAsMjAgLTUsLTI1IC0yMCwxMCA1LC0xNSBMIDU1LDEwNSA3MCw5NSA2MCw4NSA3MCw4MCA3MCw2NSA4NSw3NSA5MCw1NSAxMDAsNzAgWlwiLGZpbGw6ITF9LEdbXCJUUC5HUk9VTkQgWkVST1wiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTAwIDI4IEMgMTAwIDI4IDY1LjQzOTggMjkuODI2MSA2MS42NTQzIDU1IEMgNjAuMjgyNiA2NC4xMjEzIDc1LjAxMTUgNzAuNDg4NCA4Mi4yMzYzIDcxLjY1NDMgQyA4OS40NjExIDcyLjgyMDEgOTEuNzI3NyA1NS4zNDYyIDk4LjUwOTggNTYuMDM3MSBMIDkzIDkwIEMgOTMgOTAgNzAgOTAgNjcgOTcgQyA2NS4wMzA0IDEwMS41OTYgMTAwIDEwMCAxMDAgMTAwIEMgMTAwIDEwMCAxMzQuOTcgMTAxLjU5NiAxMzMgOTcgQyAxMzAgOTAgMTA3IDkwIDEwNyA5MCBMIDEwMS40OSA1Ni4wMzcxIEMgMTA4LjI3MiA1NS4zNDYyIDExMC41MzkgNzIuODIwMSAxMTcuNzY0IDcxLjY1NDMgQyAxMjQuOTg4IDcwLjQ4ODQgMTM5LjcxOCA2NC4xMjEzIDEzOC4zNDYgNTUgQyAxMzQuNTYgMjkuODI2MSAxMDAgMjggMTAwIDI4IHpcIn0sR1tcIlRQLkxBVU5DSEVEIFRPUlBFRE8gKEFFR0lTIE9OTFkpXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDE1MCw5MCAwLDIwIG0gLTEwLC0xMCAxMCwwIG0gLTk3LC0xMCA4NCwwIGMgMS42NjIsMCAzLDEuMzM4IDMsMyBsIDAsMTQgYyAwLDEuNjYyIC0xLjMzOCwzIC0zLDMgbCAtODQsMCBjIC0xLjY2MiwwIC0zLC0xLjMzOCAtMywtMyBsIDAsLTE0IGMgMCwtMS42NjIgMS4zMzgsLTMgMywtMyB6XCJ9LEdbXCJUUC5NU0wgREVURUNUIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk1LDEwMCAwLC01NSAtMTAsMCAxNSwtMTUgMTUsMTUgLTEwLDAgMCw1NSBtIC01NSwwIDEwMCwwXCJ9LEdbXCJUUC5BQ09VU1RJQyBDT1VOVEVSIE1FQVNVUkUgKERFQ09ZKVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMDcuNSw1NSA5Mi41NTE4LDcwIDEwNy41LDg1IFogTSA1MCwzMCAxNTAsMzAgbSAtOTAsNzAgMCwtNSA4MCwwIDAsNSB6IG0gNzAsLTQ1IC0xNSwxNSAxNSwxNSB6IE0gODUsNTUgNzAsNzAgODUsODUgWiBtIDE1LC0yNSAwLDMzXCJ9LEdbXCJUUC5FTEVDVFJPTklDIENPVU5URVIgTUVBU1VSRVMgKEVDTSkgREVDT1lcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyMCAtMjAsMTAgMjAsMTAgeiBtIDMwLDAgLTIwLDEwIDIwLDEwIDAsLTIwIHogbSAzMCwwIC0yMCwxMCAyMCwxMCB6IG0gLTI1LC0yMCBjIDAsMTAgLTEwLDE4IC0xOS40LDE0IC05LjQsLTIgLTEzLjgsLTE0LjcgLTgsLTIyLjUgNS4yLC04LjIgMTguNCwtOC43IDI0LjQsLTAuOCAyLDIuNiAzLDUuOSAzLDkuMyB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsNTAgMCwxMDAgMTAwLDAgMCwtMTAwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjgwLGZvbnRzaXplOjMwLHRleHQ6XCJFQ01cIn1dLEdbXCJUUC5JTVBBQ1QgUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNTAsMTAwIDQwLC0xMCAxMCwtNDAgMTAsNDAgNDAsMTAgLTQwLDEwIC0xMCw0MCAtMTAsLTQwIC00MCwtMTBcIn0sR1tcIlRQLlBSRURJQ1RFRCBJTVBBQ1QgUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCIxMiw1XCIsZDpcIm0gNTAsMTAwIDQwLC0xMCAxMCwtNDAgMTAsNDAgNDAsMTAgLTQwLDEwIC0xMCw0MCAtMTAsLTQwIC00MCwtMTBcIn0sR1tcIlRQLkZPUk1BVElPTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw1MCAwLDEwMCBtIC01MCwtNTAgMTAwLDBcIn0sR1tcIlRQLkhBUkJPUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDgwLDE0MCA1MCw2MCAxNTAsNjAgMTIwLDE0MFwifSxHW1wiVFAuSEFSQk9SIFBPSU5UIFFcIl09W0dbXCJUUC5IQVJCT1JcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUVwifV0sR1tcIlRQLkhBUkJPUiBQT0lOVCBBXCJdPVtHW1wiVFAuSEFSQk9SXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkFcIn1dLEdbXCJUUC5IQVJCT1IgUE9JTlQgWVwiXT1bR1tcIlRQLkhBUkJPUlwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJZXCJ9XSxHW1wiVFAuSEFSQk9SIFBPSU5UIFhcIl09W0dbXCJUUC5IQVJCT1JcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiWFwifV0sR1tcIlRQLlJPVVRFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTM4LjQ4NCw3Ni44MiBjIDAsLTcuNDgyMyA2LjA2NiwtMTMuNTQ3OCAxMy41NDgsLTEzLjU0OCA3LjQ4MywtM2UtNCAxMy41NDksNi4wNjUzIDEzLjU0OSwxMy41NDggbSAtMjcuMDk3LDAgMCwwIGMgMCw2Ljk0ODQgLTUuNjM0LDEyLjU4MDcgLTEyLjU4MiwxMi41OCAtNi45NDgsLTRlLTQgLTEyLjU4LC01LjYzMjQgLTEyLjU4LC0xMi41OCBtIC0yNy4wOTcsMCBjIDJlLTQsLTcuNDgyMyA2LjA2NTcsLTEzLjU0NzggMTMuNTQ4LC0xMy41NDggNy40ODMsLTNlLTQgMTMuNTQ5LDYuMDY1MyAxMy41NDksMTMuNTQ4IG0gLTc5LjM1NTQsMCBjIDJlLTQsLTcuNDgyNCA2LjA2NiwtMTMuNTQ4IDEzLjU0ODQsLTEzLjU0OCA3LjQ4MjQsMCAxMy41NDgyLDYuMDY1NiAxMy41NDg0LDEzLjU0OCBtIDI1LjE2MTYsMCAwLDAgQyA4Ni4yMjQ2LDgzLjc2ODEgODAuNTkxOCw4OS40MDAzIDczLjY0MzcsODkuNCA2Ni42OTYsODkuMzk5OCA2MS4wNjM4LDgzLjc2NzcgNjEuMDYzNCw3Ni44MiBtIDc3LjQyMDYsNDcuMzI4IGMgMCwtNy40ODIgNi4wNjYsLTEzLjU0OCAxMy41NDgsLTEzLjU0OCA3LjQ4MywwIDEzLjU0OSw2LjA2NSAxMy41NDksMTMuNTQ4IG0gLTI3LjA5NywwIDAsMCBjIDAsNi45NDggLTUuNjM0LDEyLjU4MSAtMTIuNTgyLDEyLjU4IC02Ljk0OCwwIC0xMi41OCwtNS42MzIgLTEyLjU4LC0xMi41OCBtIC0yNy4wOTcsMCBjIDJlLTQsLTcuNDgyIDYuMDY1NywtMTMuNTQ4IDEzLjU0OCwtMTMuNTQ4IDcuNDgzLDAgMTMuNTQ5LDYuMDY1IDEzLjU0OSwxMy41NDggbSAtNzkuMzU1NCwwIGMgMmUtNCwtNy40ODIgNi4wNjYsLTEzLjU0OCAxMy41NDg0LC0xMy41NDggNy40ODI0LDAgMTMuNTQ4Miw2LjA2NiAxMy41NDg0LDEzLjU0OCBtIDI1LjE2MTYsMCAwLDAgYyAtNGUtNCw2Ljk0OCAtNS42MzMyLDEyLjU4IC0xMi41ODEzLDEyLjU4IC02Ljk0NzcsMCAtMTIuNTc5OSwtNS42MzIgLTEyLjU4MDMsLTEyLjU4IG0gLTI3LjA5NjgsLTIzLjY2NCAxMzIuNTE4NCwwXCJ9LEdbXCJUUC5ST1VURSBSRU5ERVpWT1VTXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiUlwifV0sR1tcIlRQLlJPVVRFIERJVkVSU0lPTlNcIl09W0dbXCJUUC5ST1VURVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTcwLGZvbnRzaXplOjQ1LHRleHQ6XCJEXCJ9XSxHW1wiVFAuUk9VVEUgV0FZUE9JTlRcIl09W0dbXCJUUC5ST1VURVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTcwLGZvbnRzaXplOjQ1LHRleHQ6XCJXXCJ9XSxHW1wiVFAuUk9VVEUgUElNXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiTVwifV0sR1tcIlRQLlJPVVRFIFBPSU5UIFJcIl09W0dbXCJUUC5ST1VURVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTcwLGZvbnRzaXplOjQ1LHRleHQ6XCJQXCJ9XSxHW1wiVFAuUElDS0VUIFJPVVRFXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiUEtcIn1dLEdbXCJUUC5QT0lOVCBSIFJPVVRFXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiUlwifV0sR1tcIlRQLlJFTkRFWlZPVVMgUk9VVEVcIl09W0dbXCJUUC5ST1VURVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTcwLGZvbnRzaXplOjQ1LHRleHQ6XCJSWlwifV0sR1tcIlRQLkFJUiBDT05UUk9MXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQwLDE2NSAwLC0xMzAgbSAtODAsMCAwLDEzMFwifSxHW1wiVFAuQUlSIENPTlRST0wgUE9JTlRcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5DT01CQVQgQUlSIFBBVFJPTCAoQ0FQKVwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkNcIn1dLEdbXCJUUC5BSVJCT1JORSBFQVJMWSBXQVJOSU5HIChBRVcpXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiV1wifV0sR1tcIlRQLlRBTktJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJLXCJ9LE58fFI/W106e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuRklYRUQgV0lOR1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE58fFI/W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozMix0ZXh0OlI/XCJBU1dcIjpcIkFTXCJ9LHt0eXBlOlwicGF0aFwiLGQ6Uj9cIm0gMTAwLDgxLjMyMDMgYyAtMS41MTM1LC0wIC0yLjUzNjUsMi42NDI2IC0yLjUzNjUsMi42NDI2IGwgLTAuMTM2NSwxNC4xNDY1IC0yOC4zNjQxLDI5Ljk5OTYgMC4xNDg0LDQuNjA0IDI4LjUxNjIsLTE4Ljc0OCAtMC4yOTI5LDI0LjQzIC02LjMwNzMsNi4wMTcgLTAuMDk2LDMuNzY2IDguMDMxMywtMy41MjQgMS4wMzEyLDMuMzI2IDAsMC4wMiAwLC0wLjAxIDAsMC4wMSAwLC0wLjAyIDEuMDMxMiwtMy4zMjYgOC4wMzEsMy41MjQgLTAuMDksLTMuNzY2IC02LjMwOSwtNi4wMTcgLTAuMjkzLC0yNC40MyAyOC41MTgsMTguNzQ4IDAuMTQ2LC00LjYwNCAtMjguMzY0LC0yOS45OTk2IC0wLjEzNiwtMTQuMTQ2NSBjIDAsMCAtMS4wMTQsLTIuNjQxNiAtMi41MjgsLTIuNjQyNiB6XCI6XCJNIDgwLDg4LjMgQyA2MCw4MCA2MCwxMjAgODAsMTExLjQgTCAxMDAuMiw5OS45IDEyMCwxMTEuMyBDIDE0MCwxMjAgMTQwLDgwIDEyMCw4OC42IGwgLTE5LjgsMTEuMyB6XCIsc3Ryb2tlOiExfV06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIkZcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XV0sR1tcIlRQLlJPVEFSWSBXSU5HXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0sTnx8Uj9be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjMyLHRleHQ6XCJBU1dcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsODAgMCw0MCA3MCwtNDAgMCw0MCAtNzAsLTQwXCIsc3Ryb2tlOiExfV06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIkhcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XV0sR1tcIlRQLlNVQ0FQIC0gRklYRUQgV0lOR1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozMix0ZXh0OlwiU1VXXCJ9LHt0eXBlOlwicGF0aFwiLGQ6Uj9cIm0gMTAwLDgxLjMyMDMgYyAtMS41MTM1LC0wIC0yLjUzNjUsMi42NDI2IC0yLjUzNjUsMi42NDI2IGwgLTAuMTM2NSwxNC4xNDY1IC0yOC4zNjQxLDI5Ljk5OTYgMC4xNDg0LDQuNjA0IDI4LjUxNjIsLTE4Ljc0OCAtMC4yOTI5LDI0LjQzIC02LjMwNzMsNi4wMTcgLTAuMDk2LDMuNzY2IDguMDMxMywtMy41MjQgMS4wMzEyLDMuMzI2IDAsMC4wMiAwLC0wLjAxIDAsMC4wMSAwLC0wLjAyIDEuMDMxMiwtMy4zMjYgOC4wMzEsMy41MjQgLTAuMDksLTMuNzY2IC02LjMwOSwtNi4wMTcgLTAuMjkzLC0yNC40MyAyOC41MTgsMTguNzQ4IDAuMTQ2LC00LjYwNCAtMjguMzY0LC0yOS45OTk2IC0wLjEzNiwtMTQuMTQ2NSBjIDAsMCAtMS4wMTQsLTIuNjQxNiAtMi41MjgsLTIuNjQyNiB6XCI6XCJNIDgwLDg4LjMgQyA2MCw4MCA2MCwxMjAgODAsMTExLjQgTCAxMDAuMiw5OS45IDEyMCwxMTEuMyBDIDE0MCwxMjAgMTQwLDgwIDEyMCw4OC42IGwgLTE5LjgsMTEuMyB6XCIsc3Ryb2tlOiExfV0sR1tcIlRQLlNVQ0FQIC0gUk9UQVJZIFdJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzIsdGV4dDpcIkFTV1wifSx7dHlwZTpcInBhdGhcIixkOlwibSA2NSw4MCAwLDQwIDcwLC00MCAwLDQwIC03MCwtNDBcIixzdHJva2U6ITF9XSxHW1wiVFAuTUlXIC0gRklYRUQgV0lOR1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozMix0ZXh0OlI/XCJNSVdcIjpcIk1XXCJ9LHt0eXBlOlwicGF0aFwiLGQ6Uj9cIm0gMTAwLDgxLjMyMDMgYyAtMS41MTM1LC0wIC0yLjUzNjUsMi42NDI2IC0yLjUzNjUsMi42NDI2IGwgLTAuMTM2NSwxNC4xNDY1IC0yOC4zNjQxLDI5Ljk5OTYgMC4xNDg0LDQuNjA0IDI4LjUxNjIsLTE4Ljc0OCAtMC4yOTI5LDI0LjQzIC02LjMwNzMsNi4wMTcgLTAuMDk2LDMuNzY2IDguMDMxMywtMy41MjQgMS4wMzEyLDMuMzI2IDAsMC4wMiAwLC0wLjAxIDAsMC4wMSAwLC0wLjAyIDEuMDMxMiwtMy4zMjYgOC4wMzEsMy41MjQgLTAuMDksLTMuNzY2IC02LjMwOSwtNi4wMTcgLTAuMjkzLC0yNC40MyAyOC41MTgsMTguNzQ4IDAuMTQ2LC00LjYwNCAtMjguMzY0LC0yOS45OTk2IC0wLjEzNiwtMTQuMTQ2NSBjIDAsMCAtMS4wMTQsLTIuNjQxNiAtMi41MjgsLTIuNjQyNiB6XCI6XCJNIDgwLDg4LjMgQyA2MCw4MCA2MCwxMjAgODAsMTExLjQgTCAxMDAuMiw5OS45IDEyMCwxMTEuMyBDIDE0MCwxMjAgMTQwLDgwIDEyMCw4OC42IGwgLTE5LjgsMTEuMyB6XCIsc3Ryb2tlOiExfV0sR1tcIlRQLk1JVyAtIFJPVEFSWSBXSU5HXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjMyLHRleHQ6Uj9cIk1JV1wiOlwiTVdcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsODAgMCw0MCA3MCwtNDAgMCw0MCAtNzAsLTQwXCIsc3Ryb2tlOiExfV0sR1tcIlRQLlNUUklLRSBJUFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE58fFI/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiU1wifTpbe3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiU1wifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dXSxHW1wiVFAuQ09SUklET1IgVEFCIFBPSU5UXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiQ1wifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5BSVIgQ09OVFJPTCBSRU5ERVpWT1VTXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ok58fFI/MTE1OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiUlpcIn1dLEdbXCJUUC5DQVAgU1RBVElPTlwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpOfHxSPzExNToxNTUsZm9udHNpemU6NDUsdGV4dDpcIkNcIn1dLEdbXCJUUC5BRVcgU1RBVElPTlwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpOfHxSPzExNToxNTUsZm9udHNpemU6NDUsdGV4dDpcIldcIn1dLEdbXCJUUC5UQUNBTlwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpOfHxSPzExNToxNTUsZm9udHNpemU6NDUsdGV4dDpcIlRcIn0sTnx8Uj9bXTp7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5SRVBMRU5JU0hNRU5UIFNUQVRJT05cIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJSUFwifV0sR1tcIlRQLlRBTktJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJLXCJ9XSxHW1wiVFAuVE9NQ0FUXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0sTnx8Uj97dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJUQ1wifTpbe3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiT1wifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dXSxHW1wiVFAuUkVTQ1VFXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0sTj97dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJSU1wifTpSP3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJDXCJ9Olt7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJSXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV1dLEdbXCJUUC5SRVBMRU5JU0hcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSxOfHxSP3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJQXCJ9Olt7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJGXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV1dLEdbXCJUUC5NQVJTSEFMTFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE58fFI/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTVwifTpbe3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiTVwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dXSxHW1wiVFAuVU5NQU5ORUQgQUVSSUFMIFNZU1RFTVwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3MCw4NSAzMCwxNSAzMCwtMTUgMCwxNSAtMzAsMTUgLTMwLC0xNSB6XCJ9XSxHW1wiVFAuVlRVQVwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3MCw5NSAzMCwxNSAzMCwtMTUgMCwzMCAtMzAsLTE1IC0zMCwxNSB6IG0gMCwtMjUgMzAsMTUgMzAsLTE1IDAsMTUgLTMwLDE1IC0zMCwtMTUgelwifV0sR1tcIlRQLk9SQklUXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiT1wifV0sR1tcIlRQLk9SQklUIC0gRklHVVJFIEVJR0hUXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiT1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJGOFwifV0sR1tcIlRQLk9SQklUIC0gUkFDRSBUUkFDS1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk9cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiUlRcIn1dLEdbXCJUUC5PUkJJVCAtIFJBTkRPTSwgQ0xPU0VEXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiT1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJSQ1wifV0sR1tcIlRQLkFDVElPTiBQT0lOVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDYwLDQ1IDgwLDAgbSAtNDAsNTUgLTQwLC01NSAwLC0xMDUgODAsMCAwLDEwNSB6XCJ9LEdbXCJUUC5BQ1RJT04gQ0hFQ0sgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQ0tQXCJ9XSxHW1wiVFAuQ09OVEFDVCBQT0lOVFwiXT1OP3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNTAsNTAgMTUwLDUwIDE1MCwxNTAgNTAsMTUwelwifTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxMDAgMCwtMzUgLTQ1LDAgMCwtNzUgOTAsMCAwLDc1IC00NSwwXCJ9LEdbXCJUUC5DRU5UUkUgT0YgTUFJTiBFRkZPUlRcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTU1LDEwMCAwLC0zNSBNIDQ1LDEwMCA0NSw2NSBtIDg4LDAgMCwzNSBtIC0yMiwtMzUgMCwzNSBtIC0yMiwtMzUgMCwzNSBtIC0yMiwwIDAsLTM1IG0gLTM3LDcwIDAsLTM1IDE0MCwwIDAsNDBcIn1dLEdbXCJUUC5DT09SRElOQVRJT04gUE9JTlRcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsMTM1IDcwLC03MCBtIC03MCwwIDcwLDcwXCJ9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9XSxHW1wiVFAuREVDSVNJT04gUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA5OS45OTk4LDI1LjU4ODYgMTE3LjA2MSw3Ni41MTkyIDE3MC43Nyw3Ny4wMDU0IDEyNy42MDQsMTA4Ljk2OCAxNDMuNzM4LDE2MC4yIDEwMCwxMjkuMDI0IDU2LjI2MjQsMTYwLjIgNzIuMzk2NywxMDguOTY4IDI5LjIzMDYsNzcuMDA1OSA4Mi45NDAzLDc2LjUxOTIgWlwifSxHW1wiVFAuRElTVFJFU1MgQ0FMTFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJTT1NcIn1dLEdbXCJUUC5FTlRSWSBDT05UUk9MIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkVDXCJ9XSxHW1wiVFAuRkxZLVRPLVBPSU5UIChTT05PQlVPWSlcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiRlRQXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozNSx0ZXh0OlwiU0JZXCJ9XSxHW1wiVFAuRkxZLVRPLVBPSU5UIChXRUFQT04pXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkZUUFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzUsdGV4dDpcIldQTlwifV0sR1tcIlRQLkZMWS1UTy1QT0lOVCAoTk9STUFMKVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJGVFBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjM1LHRleHQ6XCJOUk1cIn1dLEdbXCJUUC5BQ1RJT04gTElOS1VQIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkxVXCJ9XSxHW1wiVFAuQUNUSU9OIFBBU1NBR0UgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiUFBcIn1dLEdbXCJUUC5BQ1RJT04gUkFMTFkgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiUkxZXCJ9XSxHW1wiVFAuQUNUSU9OIFJFTEVBU0UgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiUlBcIn1dLEdbXCJUUC5BQ1RJT04gU1RBUlQgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiU1BcIn1dLEdbXCJUUC5BQ1RJT04gQU1ORVNUWSBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJBTU5cIn1dLEdbXCJUUC5XQVlQT0lOVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjgsZDpcIm0gNjUsMTM1IDcwLC03MCBtIC03MCwwIDcwLDcwXCJ9LEdbXCJUUC5DT01CQVRBTlQgU1RBVElPTlwiXT1bR1tcIlRQLldBWVBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiQ0JUXCJ9XSxHW1wiVFAuUElDS0VUIFNUQVRJT05cIl09W0dbXCJUUC5XQVlQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIlBLVFwifV0sR1tcIlRQLkFTVyBTSElQIFNUQVRJT05cIl09W0dbXCJUUC5XQVlQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIkFTV1wifV0sR1tcIlRQLlJFUExFTklTSE1FTlQgQVQgU0VBIChSQVMpIFNUQVRJT05cIl09W0dbXCJUUC5XQVlQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIlJBU1wifV0sR1tcIlRQLlJFU0NVRSBTVEFUSU9OXCJdPVtHW1wiVFAuV0FZUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4Ojc1LHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJSU0NcIn1dLEdbXCJUUC5TVUJNQVJJTkUgU1RBVElPTlwiXT1bR1tcIlRQLldBWVBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiU1VCXCJ9XSxHW1wiVFAuQVNXIFNVQk1BUklORSBTVEFUSU9OXCJdPVtHW1wiVFAuV0FZUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4Ojc1LHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJBU1cvU1VCXCJ9XSxHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDMwLDYwIDE0MCwwIG0gLTE0MCw4MCAxNDAsMFwifSxHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC4oVVNWKSBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAsMTE1IDQ1LC0yMCAwLC0xNSAtNDUsMjAgLTQ1LC0yMCAwLDE1IHpcIn1dLEdbXCJUUC4oVVNWKVwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDU1LDEwMCA0NSwyMCA0NSwtMjAgMCwxNSAtNDUsMjAgLTQ1LC0yMCB6XCJ9XSxHW1wiVFAuKFJNVikgVVNWIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVU1YpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiUk1WXCJ9XSxHW1wiVFAuVVNWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVU1YpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiQVNXXCJ9XSxHW1wiVFAuTUlORSBXQVJGQVJFIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSBTVVJGQUNFIFNUQVRJT05cIl09W0dbXCJUUC4oVVNWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIk1XXCJ9XSxHW1wiVFAuVVNWIC0gU1VXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVU1YpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiU1VXXCJ9XSxHW1wiVFAuVVNWIC0gTUlXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVU1YpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiTUlXXCJ9XSxHW1wiVFAuQVNXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQVNXXCJ9XSxHW1wiVFAuTUlORSBXQVJGQVJFIFNVUkZBQ0UgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTVdcIn1dLEdbXCJUUC5OT04tQ09NQkFUQU5UIFNVUkZBQ0UgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTkNcIn1dLEdbXCJUUC5TVVcgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJTVVdcIn1dLEdbXCJUUC5NSVcgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJNSVdcIn1dLEdbXCJUUC5QSUNLRVQgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJQS1wifV0sR1tcIlRQLlJFTkRFWlZPVVMgQ09OVFJPTCBQT0lOVFwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUlpcIn1dLEdbXCJUUC5SRVBMRU5JU0hNRU5UIEFUIFNFQSBTVVJGQUNFIFNUQVRJT05cIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJBU1wifV0sR1tcIlRQLlJFU0NVRSBDT05UUk9MIFBPSU5UXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJSU1wifV0sR1tcIlRQLlJFUExFTklTSE1FTlQgQ09OVFJPTCBQT0lOVFwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUlBcIn1dLEdbXCJUUC5OT05DT01CQVRBTlQgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJOQ1wifV0sR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0xcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMzAsMTQwIDE0MCwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNFwiLGQ6XCJtIDMwLDYwIDE0MCwwXCJ9XSxHW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC4oVVVWKSBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC5TVUIgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAsMTE1IDQ1LC0yMCAwLC0xNSAtNDUsMjAgLTQ1LC0yMCAwLDE1IHpcIn1dLEdbXCJUUC4oVVVWKVwiXT1bR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDU1LDEwMCA0NSwyMCA0NSwtMjAgMCwxNSAtNDUsMjAgLTQ1LC0yMCB6XCJ9XSxHW1wiVFAuVVVWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVVVYpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiQVNXXCJ9XSxHW1wiVFAuTUlORSBXQVJGQVJFIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSBTVUJTVVJGQUNFIFNUQVRJT05cIl09W0dbXCJUUC4oVVVWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIk1XXCJ9XSxHW1wiVFAuVVVWIC0gU1VXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVVVYpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiU1VXXCJ9XSxHW1wiVFAuVVVWIC0gTUlXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLihVVVYpXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZTo0MCx0ZXh0OlwiTUlXXCJ9XSxHW1wiVFAuU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzMCxmb250c2l6ZTozNSx0ZXh0OlwiU1NcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsOTUgMCwtMjAgNTAsMCAwLDIwIHogbSAyNSwtMzAgMCw0MFwifV0sR1tcIlRQLkFTVyBTVUJNQVJJTkUgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInBhdGhcIixkOlwibSA2OC43NSwxMDUgLTEyLjUsMTIuNSAxMi41LDEyLjUgNjIuNSwwIDEyLjUsLTEyLjUgLTEyLjUsLTEyLjUgeiBNIDc1LDk1IGwgMCwtMjAgNTAsMCAwLDIwIHogbSAyNSwtMzAgMCw0MFwifV0sR1tcIlRQLkFJUiBDT05UUk9MIFBPSU5UIChBQ1ApXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTAsZm9udHNpemU6MzAsdGV4dDpcIkFDUFwifV0sR1tcIlRQLkNPTU1VTklDQVRJT05TIENIRUNLUE9JTlRcIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5MCxmb250c2l6ZTozMCx0ZXh0OlwiQ0NQXCJ9XSxHW1wiVFAuUFVMTC1VUCBQT0lOVFwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJQVVBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSw4MCAwLDQwIDcwLC00MCAwLDQwIHpcIn1dLEdbXCJUUC5ET1dORUQgQUlSQ1JFVyBQSUNLVVAgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6LTM1LHI6MTJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzUsMzUgNTAsMCBtIC0yNSwtNDUgMCw0NSBtIC0zMCwtNzUgMzAsMzAgMzAsLTMwXCJ9XSxHW1wiVFAuRFVNTVkgTUlORUZJRUxEXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDEwMCBjIDAsNS41MjMgLTQuNDc3MiwxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjI4LDAgMTAsNC40NzcyIDEwLDEwIHogbSA3MCwwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMywwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6IG0gLTM1LDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIC03MCwtNDAgMCw4MCAxMjAsMCAwLC04MCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTUsMTBcIixkOlwiTSAxNjAsNjAgMTAwLC01IE0gNDAsNjAgMTAwLC01XCJ9XSxHW1wiVFAuVEFSR0VUIFJFRkVSRU5DRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDEwMCAxMDAsMCBtIC01MCwtNTAgMCwxMDBcIn0sR1tcIlRQLk9CU0VSVkFUSU9OIFBPU1QvT1VUUE9TVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw0NSA0Ny42LDgyLjUgLTk1LjIsMCB6XCJ9LEdbXCJUUC5DT01CQVQgT1VUUE9TVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE0MCwxNDAgMCwtMTIuNSBtIC0xNiwxMi41IDAsLTEyLjUgbSAtMTYsMTIuNSAwLC0xMi41IG0gLTQ4LjAwMDEsMTIuNSAzZS00LC0xMi41IG0gMTUuOTk5MywxMi41IDRlLTQsLTEyLjUwMSBtIDE2LDEyLjUwMSAzZS00LC0xMi41IG0gLTQ2LjQzLC0xMi40OTMgMTAuODI1Niw2LjI1IG0gLTIuODI1NiwtMjAuMTA3IDEwLjgyNTYsNi4yNTEgbSAtMi44MjU3LC0yMC4xMDcxIDEwLjgyNTcsNi4yNTA2IG0gMTMuMTc0MywtNDcuODE5OCAxMC44MjU3LDYuMjUwNiBtIC0xOC44MjUzLDcuNjA1NiAxMC44MjU2LDYuMjUwNiBtIC0xOC44MjYsNy42MDYgMTAuODI1Nyw2LjI1MDYgTSAxMTQuNDMsNDUuNzI1IGwgLTEwLjgyNiw2LjI1IG0gMTguODI2LDcuNjA2NCAtMTAuODI2LDYuMjUgbSAxOC44MjYsNy42MDY0IC0xMC44MjYsNi4yNSBtIDM0LjgyNiwzNS4zMTkyIC0xMC44MjYsNi4yNSBtIDIuODI2LC0yMC4xMDYgLTEwLjgyNiw2LjI1IG0gMi44MjYsLTIwLjEwNjggLTEwLjgyNiw2LjI1IE0gOTkuOTk5OCw0NSBsIDQ3LjYzMTIsODIuNSAtOTUuMjYyMywwIHpcIn0sR1tcIlRQLk9CU0VSVkFUSU9OIFBPU1QvUkVDT05OQUlTU0FOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA1Mi4zNjg3LDEyNy41IDEyMy44MTYsODYuMjQ5OSBNIDk5Ljk5OTgsNDUgbCA0Ny42MzEyLDgyLjUgLTk1LjI2MjMsMCB6XCJ9LEdbXCJUUC5GT1JXQVJEIE9CU0VSVkVSIFBPU0lUSU9OXCJdPVtHW1wiVFAuT0JTRVJWQVRJT04gUE9TVC9SRUNPTk5BSVNTQU5DRVwiXSx7dHlwZTpcInBhdGhcIixkOlwibSAxMTUsMTAwIGMgMCw4LjI4NCAtNi43MTYsMTUgLTE1LDE1IC04LjI4NDMsMCAtMTUsLTYuNzE2IC0xNSwtMTUgMCwtOC4yODQzIDYuNzE1NywtMTUgMTUsLTE1IDguMjg0LDAgMTUsNi43MTU3IDE1LDE1IHpcIn1dLEdbXCJUUC5TRU5TT1IgT1VUUE9TVFwiXT1OP1t7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDk5Ljk5OTgsNDUgbCA0Ny42MzEyLDgyLjUgLTk1LjI2MjMsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAsODAgYyAwLDcuNSAxMi41LDIwIDIwLDIwIC03LjUsMCAtMjAsMTIuNSAtMjAsMjAgMCwtNy41IC0xMi41LC0yMCAtMjAsLTIwIDcuNSwwIDIwLC0xMi41IDIwLC0yMCB6XCJ9XTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDYxLjE3MzgsMTEyLjI1IDIzLjY2MDEsMCBtIDMwLjMzMjEsMCAyMy42NiwwIE0gODAsMTA1IGwgMTAsMTUgMjAsMCAxMCwtMTUgeiBtIDE5Ljk5OTgsLTYwIDQ3LjYzMTIsODIuNSAtOTUuMjYyMywwIHpcIn0sR1tcIlRQLkNCUk4gT0JTRVJWQVRJT04gUE9TVFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5OS45OTk4LDQ1IDQ3LjYzMTIsODIuNSAtOTUuMjYyMywwIHogTSA4OCwxMTkgYyAyLjE4MjQsLTEzLjI4OCA3LjcxNTcsLTI0LjIyIDIyLC0yOSBtIDEuODI5LDI5IEMgMTA5LjY2NCwxMDUuNzEyIDEwNC4xNzMsOTQuNzggOTAsOTAgTSA1Mi4zNjg3LDEyNy41IDEyMy44MTYsODYuMjQ5OVwifSx7dHlwZTpcInBhdGhcIixkOlwibSA5MSw5MiBjIDAsMi43NjE0IC0yLjIzODYsNSAtNSw1IC0yLjc2MTQsMCAtNSwtMi4yMzg2IC01LC01IDAsLTIuNzYxNCAyLjIzODYsLTUgNSwtNSAyLjc2MTQsMCA1LDIuMjM4NiA1LDUgeiBtIDI4LjAxMSwwIGMgMCwyLjc2NzggLTIuMjQzLDUuMDExNyAtNS4wMTEsNS4wMTIgLTIuNzY4LC0zZS00IC01LjAxMSwtMi4yNDQyIC01LjAxMSwtNS4wMTIgMCwtMi43Njc2IDIuMjQzLC01LjAxMTIgNS4wMTEsLTUuMDExNSAyLjc2OCwzZS00IDUuMDExLDIuMjQzOSA1LjAxMSw1LjAxMTUgelwifV0sR1tcIlRQLlBPSU5UIE9GIERFUEFSVFVSRVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJQRFwifV0sR1tcIlRQLkZJWEVEIEFORCBQUkVGQUJSSUNBVEVEXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDEwMCA0MCwtNjUgNDAsNjUgelwifSxHW1wiVFAuVEVUUkFIRURST05TXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjAsMTAwIDQwLC02NSA0MCw2NVwifSxHW1wiVFAuVEVUUkFIRURST05TIE1PVkFCTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2MCwxMDAgNDAsLTY1IDQwLDY1IHpcIn0sR1tcIlRQLkJPT0JZIFRSQVBcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA3Ny4yNDEzLDg3LjkzMTEgMTAwLDUwIDEyMi43ODEsODcuOTY4NyBNIDEzMCwxMDAgYyAwLDEwLjI0IC0xMy40MzEsMTguNTQxIC0zMCwxOC41NDEgLTE2LjU2ODUsMCAtMzAsLTguMzAxIC0zMCwtMTguNTQxIDAsLTEwLjIzOTkgMTMuNDMxNSwtMTguNTQxIDMwLC0xOC41NDEgMTYuNTY5LDAgMzAsOC4zMDExIDMwLDE4LjU0MSB6XCJ9LEdbXCJUUC5VTlNQRUNJRklFRCBNSU5FXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTI5LDEwMCBjIDAsMTYuMDE2IC0xMi45ODQsMjkgLTI5LDI5IC0xNi4wMTYzLDAgLTI5LC0xMi45ODQgLTI5LC0yOSAwLC0xNi4wMTYzIDEyLjk4MzcsLTI5IDI5LC0yOSAxNi4wMTYsMCAyOSwxMi45ODM3IDI5LDI5IHpcIn0sR1tcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjksMTAwIGMgMCwxNi4wMTYgLTEyLjk4NCwyOSAtMjksMjkgLTE2LjAxNjMsMCAtMjksLTEyLjk4NCAtMjksLTI5IDAsLTE2LjAxNjMgMTIuOTgzNywtMjkgMjksLTI5IDE2LjAxNiwwIDI5LDEyLjk4MzcgMjksMjkgelwifSxHW1wiVFAuKEFUKSBBTlRJSEFORExJTkcgREVWSUNFXCJdPVtHW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDEzMCAwLDY1IDE1LC0xNVwifV0sR1tcIlRQLihBVCkgRElSRUNUSU9OQUxcIl09W0dbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCI1LDVcIixkOlwibSAxMDAsNzAgMCwtNjBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCwyMCAxMCwtMTAgMTAsMTBcIn1dLEdbXCJUUC5BTlRJUEVSU09OTkVMIChBUCkgTUlORVNcIl09W0dbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1MCw1MCAyOS41LDI5LjUgbSA0MSwwIEwgMTUwLDUwXCJ9XSxHW1wiVFAuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUU1wiXT1bR1tcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEzMSwxMDAgMTAsMCBNIDUwLDUwIDc5LjUsNzkuNSBtIDQxLDAgTCAxNTAsNTAgbSAtNCw1MCAxMCwwIG0gNSwwIDEwLDAgbSAtMTAsLTEwIDEwLDEwIC0xMCwxMFwifV0sR1tcIlRQLldJREUgQVJFQSBNSU5FU1wiXT1bR1tcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDExMCAyNSw0MCAxMiwtMjQgTSAxMTMsMTI2IDEyNSwxNTAgMTUwLDExMFwifV0sR1tcIlRQLlBMQU5ORUQgTUlORUZJRUxEXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjE1LDE1XCIsZDpcIm0gNDAsNjUgMCw3MCAxMjAsMCAwLC03MCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzUsMTAwIGMgMCw1LjUyMyAtNC40NzcyLDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMjgsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIDcwLDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIzLDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NywtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAtMzUsMCBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6XCJ9XSxHW1wiVFAuTUlORUZJRUxEUyBTVEFUSUNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA0MCw2NSAwLDcwIDEyMCwwIDAsLTcwIHogbSA3MCwzNSBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6IG0gMzUsMCBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjMsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3LC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIC03MCwwIGMgMCw1LjUyMyAtNC40NzcyLDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMjgsMCAxMCw0LjQ3NzIgMTAsMTAgelwifSxHW1wiVFAuTUlORUZJRUxELCBTVEFUSUNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAyNSw2NSAwLDcwIDE1MCwwIDAsLTcwIHpcIn0sdC5ub3RwcmVzZW50JiYoR1tcIlRQLk1JTkVGSUVMRFMgU1RBVElDXCJdPUdbXCJUUC5QTEFOTkVEIE1JTkVGSUVMRFwiXSksR1tcIlRQLkFOVElUQU5LIChBVCkgTUlORUZJRUxEXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDQwLDY1IDAsNzAgMTIwLDAgMCwtNzAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMDAgYyAwLDUuNTIzIC00LjQ3NzIsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIyOCwwIDEwLDQuNDc3MiAxMCwxMCB6IG0gNzAsMCBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjMsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3LC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIC0zNSwwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHpcIn1dLEdbXCJUUC5TQ0FUVEVSQUJMRSBNSU5FU1wiXT1bR1tcIlRQLk1JTkVGSUVMRFMgU1RBVElDXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo2MCxmb250c2l6ZTozNSx0ZXh0OlwiU1wifV0sR1tcIlRQLkFOVElQRVJTT05ORUwgKEFQKSBNSU5FRklFTERcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo2MCxmb250c2l6ZTozNSx0ZXh0OlwiK1NcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA0MCw2NSAwLDcwIDEyMCwwIDAsLTcwIHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIk0gNzIuMDcwMyw5Mi45Mjk3IDgwLDgyLjM2MjIgbSAtMzAsMCA3LjkyOTcsMTAuNTY3NSBtIDQ5LjE0MDMsMCA3LjkzLC0xMC41Njc1IG0gLTMwLDAgNy45Mjk3LDEwLjU2NzUgbSA0OS4xNDAzLDAgNy45MywtMTAuNTY3NSBtIC0zMCwwIDcuOTMsMTAuNTY3NSBNIDExMCwxMDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIDM1LDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIzLDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NywtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAtNzAsMCBjIDAsNS41MjMgLTQuNDc3MiwxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjI4LDAgMTAsNC40NzcyIDEwLDEwIHpcIn1dLEdbXCJUUC5TQ0FUVEVSQUJMRSBNSU5FRklFTEQgV0lUSCBTRUxGLURFU1RSVUNUXCJdPVtHW1wiVFAuQU5USVRBTksgKEFUKSBNSU5FRklFTERcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjYwLGZvbnRzaXplOjM1LHRleHQ6XCJTXCJ9XSxHW1wiVFAuVk9MQ0FOTyBNSU5FRklFTERcIl09W0dbXCJUUC5BTlRJVEFOSyAoQVQpIE1JTkVGSUVMRFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NjAsZm9udHNpemU6MzUsdGV4dDpcIlZcIn1dLEdbXCJUUC5UT1dFUiBMT1dcIl09W3t0eXBlOlwiY2lyY2xlXCIsc3Ryb2tlOiExLGN4OjEwMCxjeToxMDAscjo3fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjgsZDpcIm0gNzUsMTA1IDI1LC02NSAyNSw2NVwifV0sR1tcIlRQLlRPV0VSIEhJR0hcIl09W3t0eXBlOlwiY2lyY2xlXCIsc3Ryb2tlOiExLGN4OjEwMCxjeToxMDAscjo3fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjgsZDpcIm0gMTAwLDQwIGMgMi4zNTgsMzEuNjc1NCA3LjE2Miw1OS4yNTMxIDI1LDY0Ljk5OSBNIDEwMCw0MCBjIC0yLjM1OCwzMS42NzU0IC03LjE2MjQsNTkuMjUzMSAtMjUsNjVcIn1dLEdbXCJUUC5FTkdJTkVFUiBSRUdVTEFUSU5HIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkVSUFwifV0sR1tcIlRQLkVBUlRIV09SSy9GT1JUSUZJQ0FUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDY1IDAsNzAgNzAsMCAwLC03MCAtNzAsMHpcIn0sR1tcIlRQLkZPUlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMzUsNjUgMTUsLTE1IG0gLTE1LDg1IDE1LDE1IE0gNjUsMTM1IDUwLDE1MCBtIDE1LC04NSAwLDcwIDcwLDAgMCwtNzAgLTcwLDAgLTE1LC0xNVwifSxHW1wiVFAuU1VSRkFDRSBTSEVMVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzNSwxMzUgMTUsMCBtIC0xMDAsMCAxNSwwIG0gMCwtNzAgMCw3MCA3MCwwIDAsLTcwIC03MCwwXCJ9LEdbXCJUUC5VTkRFUkdST1VORCBTSEVMVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzNSw2NSAxNSwwIG0gLTEwMCwwIDE1LDAgbSAwLDcwIDAsLTcwIDcwLDAgMCw3MCAtNzAsMFwifSxHW1wiVFAuTlVDTEVBUiBERVRPTkFUSU9OUyBHUk9VTkQgWkVST1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohZSYmXCJyZ2IoMjU1LDI1NSwwKVwiLGQ6XCJtIDg1LDI1IDAsNzUgMzAsMCAwLC03NSBtIC01MCwwIGMgMCwtNTAgNzAsLTUwIDcwLDAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzUsdGV4dDpcIk5cIn1dLEdbXCJUUC5OVUNMRUFSIERFVE9OQVRJT05TIEdST1VORCBaRVJPIFBMQU5ORURcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZWRhc2hhcnJheTpcIjUsNVwiLGZpbGw6IWUmJlwicmdiKDI1NSwyNTUsMClcIixkOlwibSA4NSwyNSAwLDc1IDMwLDAgMCwtNzUgbSAtNTAsMCBjIDAsLTUwIDcwLC01MCA3MCwwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjM1LHRleHQ6XCJOXCJ9XSxHW1wiVFAuTlVDTEVBUiBGQUxMT1VUIFBST0RVQ0lOR1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjAsODUgLTE1LDE1IG0gLTI1LDAgNDAsLTM1IE0gODAsODAgMTIwLDQwIE0gODAsNTUgMTE1LDI1IE0gODAsNDAgOTUsMjUgbSAtNDAsMCBjIDAsLTYwIDkwLC02MCA5MCwwIHogbSAyNSwwIDAsNzUgNDAsMCAwLC03NVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzUsdGV4dDpcIk5cIn1dLEdbXCJUUC5SRUxFQVNFIEVWRU5UUyBCSU9MT0dJQ0FMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiFlJiZcInJnYigyNTUsMjU1LDApXCIsZDpcIm0gODUsLTE1IDAsNjAgLTI1LDU1IDgwLDAgLTI1LC01NSAwLC02MCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo4NSxmb250c2l6ZTozNSx0ZXh0OlwiQlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTo2MCxmb250c2l6ZTozNSx0ZXh0OlwiQklPXCJ9XSxHW1wiVFAuUkVMRUFTRSBFVkVOVFMgQ0hFTUlDQUxcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IWUmJlwicmdiKDI1NSwyNTUsMClcIixkOlwibSA4NSwtMTUgMCw1OS4wNjI1IEMgNzUuNzMxMyw0OS40MTM3IDcwLjAxNTQsNTkuMjk3NSA3MCw3MCBjIDAsMTYuNTY4NSAxMy40MzE1LDMwIDMwLDMwIDE2LjU2OSwwIDMwLC0xMy40MzE1IDMwLC0zMCAtMC4wMSwtMTAuNzA2NyAtNS43MjgsLTIwLjU5NTkgLTE1LC0yNS45NDkyIEwgMTE1LC0xNSBaXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo4MCxmb250c2l6ZTozNSx0ZXh0OlwiQ1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTo2MCxmb250c2l6ZTozNSx0ZXh0OlwiQ01MXCJ9XSxHW1wiVFAuREVDT04gU0lURS9QT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn1dLEdbXCJUUC5BTFRFUk5BVEUgREVDT04gU0lURS9QT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjAsZm9udHNpemU6MzUsdGV4dDpcIkFMVFwifV0sR1tcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKFRST09QUylcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTowLGZvbnRzaXplOjM1LHRleHQ6XCJUXCJ9XSxHW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UKVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjAsZm9udHNpemU6MzUsdGV4dDpcIkVcIn1dLEdbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQgQU5EIFRST09QUylcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTowLGZvbnRzaXplOjM1LHRleHQ6XCJFL1RcIn1dLEdbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChPUEVSQVRJT05BTCBERUNPTlRBTUlOQVRJT04pXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MCxmb250c2l6ZTozNSx0ZXh0OlwiT1wifV0sR1tcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKFRIT1JPVUdIIERFQ09OVEFNSU5BVElPTilcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTowLGZvbnRzaXplOjM1LHRleHQ6XCJUSFwifV0sR1tcIlRQLk1BSU4gRVFVSVBNRU5UIERFQ09OVEFNSU5BVElPTiBQT0lOVC9TSVRFXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzAsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTEwLGZvbnRzaXplOjI1LHRleHQ6XCIoTSlcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzLGZvbnRzaXplOjI1LHRleHQ6XCJFXCJ9XSxHW1wiVFAuRk9SV0FSRCBUUk9PUCBERUNPTlRBTUlOQVRJT04gUE9JTlQvU0lURVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjMwLHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0xMCxmb250c2l6ZToyNSx0ZXh0OlwiKEYpXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMyxmb250c2l6ZToyNSx0ZXh0OlwiVFwifV0sR1tcIlRQLldPVU5ERUQgUEVSU09OTkVMIERFQ09OVEFNSU5BVElPTiBTSVRFXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MCxmb250c2l6ZTozNSx0ZXh0OlwiV1wifV0sR1tcIlRQLkFNQlVMQU5DRSBDT05UUk9MIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkFDUFwifV0sR1tcIlRQLkFNQlVMQU5DRSBMT0FEIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkFMUFwifV0sR1tcIlRQLkFNQlVMQU5DRSBSRUxBWSBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJBUlBcIn1dLEdbXCJUUC5ERUNPTiBQT0lOVCAoTUFJTikgRVFVSVBNRU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsdGV4dDpcIihNKUVcIn1dLEdbXCJUUC5ERUNPTiBQT0lOVCAoRk9SV0FSRCkgVFJPT1BTXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsdGV4dDpcIihGKVRcIn1dLEdbXCJUUC5QT0lOVC9TSU5HTEUgVEFSR0VUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsMTAwIDEwMCwwIG0gLTUwLC01MCAwLDEwMFwifSxHW1wiVFAuS05PV04gUE9JTlRcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsMTAwIDEwMCwwIG0gLTUwLC01MCAwLDEwMFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTAseTo4MCxmb250c2l6ZTozMCx0ZXh0OlwiS05QXCJ9XSxHW1wiVFAuTlVDTEVBUiBUQVJHRVRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCwxMDAgLTQwLDAgbSA1MCwxMCAwLDQwIG0gMTAsLTUwIDQwLDAgbSAtNTAsLTEwIDAsLTQwIG0gMi41LDUwIGMgMCwxLjM4MSAtMS4xMTksMi41IC0yLjUsMi41IC0xLjM4MDcsMCAtMi41LC0xLjExOSAtMi41LC0yLjUgMCwtMS4zODA3IDEuMTE5MywtMi41IDIuNSwtMi41IDEuMzgxLDAgMi41LDEuMTE5MyAyLjUsMi41IHpcIn0sR1tcIlRQLlRBUkdFVFJFQ09SREVEIChBRUdJUyBPTkxZKVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAwLDUwIDAsMTAwIDIwMCwwIDAsLTEwMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAsOTAgLTEwLDEwIDEwLDEwIDEwLC0xMCB6XCJ9XSxHW1wiVFAuRklSRSBTVVBQT1JUIFNUQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNTAsNTAgMTUwLDE1MCBNIDUwLDE1MCAxNTAsNTBcIn0sTj97dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImxlZnRcIix4OjEyMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiRlNTXCJ9OltdXSxHW1wiVFAuU1VSVkVZIENPTlRST0wgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiU0NQXCJ9XSxHW1wiVFAuRklSSU5HIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkZQXCJ9XSxHW1wiVFAuUkVMT0FEIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlJMUFwifV0sR1tcIlRQLkhJREUgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiSFBcIn1dLEdbXCJUUC5MQVVOQ0ggUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiTFBcIn1dLEdbXCJUUC5BTUJVTEFOQ0UgRVhDSEFOR0UgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQVhQXCJ9XSxHW1wiVFAuQ0FOTklCQUxJWkFUSU9OIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkNBTlwifV0sR1tcIlRQLkNBU1VBTFRZIENPTExFQ1RJT04gUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQ0NQXCJ9XSxHW1wiVFAuQ0lWSUxJQU4gQ09MTEVDVElPTiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJDSVZcIn1dLEdbXCJUUC5ERVRBSU5FRSBDT0xMRUNUSU9OIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkRFVFwifV0sR1tcIlRQLkVQVyBDT0xMRUNUSU9OIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkVQV1wifV0sR1tcIlRQLkxPR0lTVElDUyBSRUxFQVNFIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkxSUFwifV0sR1tcIlRQLk1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiTUNQXCJ9XSxHW1wiVFAuTUVESUNBTCBFVkFDVUFUSU9OIChNRURFVkFDKSBQSUNLVVAgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozMCx0ZXh0OlwiTUVQXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5NSwtMjUgMCwxMCAtMTAsMCAwLDEwIDEwLDAgMCwxMCAxMCwwIDAsLTEwIDEwLDAgMCwtMTAgLTEwLDAgMCwtMTAgelwifV0sR1tcIlRQLlJFQVJNLCBSRUZVRUwgQU5EIFJFU1VQUExZIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlIzUFwifV0sR1tcIlRQLlJFRlVFTCBPTiBUSEUgTU9WRSBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJST01cIn1dLEdbXCJUUC5UUkFGRklDIENPTlRST0wgUE9TVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJUQ1BcIn1dLEdbXCJUUC5UUkFJTEVSIFRSQU5TRkVSIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlRUUFwifV0sR1tcIlRQLlVOSVQgTUFJTlRFTkFOQ0UgQ09MTEVDVElPTiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjI1LHRleHQ6XCJVTUNQXCJ9XSxHW1wiVFAuU1VQUExZIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjAsMzAgODAsMCBtIC04MCwxNSA4MCwwIG0gLTQwLDU1IC00MCwtNTUgMCwtMTA1IDgwLDAgMCwxMDUgelwifSxHW1wiVFAuTkFUTyBDTEFTUyBJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6NDUsdGV4dDpcIklcIn1dLEdbXCJUUC5OQVRPIENMQVNTIElJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6NDUsdGV4dDpcIklJXCJ9XSxHW1wiVFAuTkFUTyBDTEFTUyBJSUlcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTo0NSx0ZXh0OlwiSUlJXCJ9XSxHW1wiVFAuTkFUTyBDTEFTUyBJVlwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjQ1LHRleHQ6XCJJVlwifV0sR1tcIlRQLk5BVE8gQ0xBU1MgVlwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLC0xMCA0MCwwIG0gLTMyLDAgMCwtMjYuNyBjIDAsLTE3LjggMjQsLTE3LjggMjQsMCBMIDExMiwtMTBcIn1dLEdbXCJUUC5TUCBDTEFTUyBJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTE1LC01MCBjIC00NSw1IC00NSw2NSAwLDcwIC0yMCwtMjUgLTIwLC01MCAwLC03MCB6XCJ9XSxHW1wiVFAuU1AgQ0xBU1MgSUlcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMS4xNDMsMy45MTYwMiBxIDMuNjYyLC0wLjI2MzY4IDQuNzQ2LC0xLjA4Mzk5IDEuMDg0LC0wLjg0OTYxIDEuMDg0LC00LjMzNTk0IGwgMCwtMjYuNjg5NDkgcSAwLC0zLjMxMDUgLTEuMDg0LC00LjI0OCAtMS4wODQsLTAuOTY2OCAtNC43NDYsLTEuMTQyNiBsIDAsLTEuMTEzMyAxNy43NTMsMCAwLDEuMTEzMyBxIC0zLjY2MiwwLjE3NTggLTQuNzQ2LDEuMTQyNiAtMS4wODQsMC45Mzc1IC0xLjA4NCw0LjI0OCBsIDAsMjYuNjg5NDkgcSAwLDMuNDg2MzMgMS4wODQsNC4zMzU5NCAxLjA4NCwwLjgyMDMxIDQuNzQ2LDEuMDgzOTkgbCAwLDEuMDgzOTggLTE3Ljc1MywwIDAsLTEuMDgzOTggeiBtIDguODc3LC0zOC42MTMzMiAwLDAgeiBNIDgxLjEwMzUsMy45MTYwMiBxIDMuNjYyMSwtMC4yNjM2OCA0Ljc0NjEsLTEuMDgzOTkgMS4wODQsLTAuODQ5NjEgMS4wODQsLTQuMzM1OTQgbCAwLC0yNi42ODk0OSBxIDAsLTMuMzEwNSAtMS4wODQsLTQuMjQ4IC0xLjA4NCwtMC45NjY4IC00Ljc0NjEsLTEuMTQyNiBsIDAsLTEuMTEzMyAxNy43NTM5LDAgMCwxLjExMzMgcSAtMy42NjIxLDAuMTc1OCAtNC43NDYxLDEuMTQyNiAtMS4wODQsMC45Mzc1IC0xLjA4NCw0LjI0OCBsIDAsMjYuNjg5NDkgcSAwLDMuNDg2MzMgMS4wODQsNC4zMzU5NCAxLjA4NCwwLjgyMDMxIDQuNzQ2MSwxLjA4Mzk5IGwgMCwxLjA4Mzk4IC0xNy43NTM5LDAgMCwtMS4wODM5OCB6IG0gOC44NzcsLTM4LjYxMzMyIDAsMCB6XCJ9XSxHW1wiVFAuU1AgQ0xBU1MgSUlJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDIwIDAsLTMwIC0yMCwtNDAgNDAsMCAtMjAsNDBcIn1dLEdbXCJUUC5TUCBDTEFTUyBJVlwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwtNDAgMCwyMCBtIC0yNSwxMCAwLC0zMCA1MCwwIDAsMzBcIn1dLEdbXCJUUC5TUCBDTEFTUyBWXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODAsMTUgMCwtNTAgYyAwLC0yMCA0MCwtMjAgNDAsMCBsIDAsNTAgbSAtNTAsMCA2MCwwXCJ9XSxHW1wiVFAuU1AgQ0xBU1MgVklcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSwtMjAgNTAsMCBtIC0yNSwxNSAxNSwyNSBtIC0xNSwtNTAgMCwyNSAtMjAsMjUgbSAzMCwtNjAgYyAwLDUuNTIyOCAtNC40NzcsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3MiAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6XCJ9XSxHW1wiVFAuU1AgQ0xBU1MgVklJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsLTI1IGMgMTAsLTEwIDIwLC0xMCAzMCwwXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyOS42LC0yMCBjIDAsNS4zMDE5IC00LjI5OCw5LjU5OTkgLTkuNiw5LjU5OTggLTUuMzAyLDEwZS01IC05LjYsLTQuMjk3OSAtOS42LC05LjU5OTggMCwtNS4zMDE5IDQuMjk4LC05LjU5OTkgOS42LC05LjU5OTggNS4zMDIsLTFlLTQgOS42LDQuMjk3OSA5LjYsOS41OTk4IHogbSAtNDAuNDg4NiwwIGMgMCw1LjAzMjEgLTQuMDc5Myw5LjExMTQgLTkuMTExNCw5LjExMTQgLTUuMDMyMSwwIC05LjExMTQsLTQuMDc5MyAtOS4xMTE0LC05LjExMTQgMCwtNS4wMzIxIDQuMDc5MywtOS4xMTE0IDkuMTExNCwtOS4xMTE0IDUuMDMyMSwwIDkuMTExNCw0LjA3OTMgOS4xMTE0LDkuMTExNCB6XCJ9XSxHW1wiVFAuU1AgQ0xBU1MgVklJSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDYwLC0xNSA4MCwwIG0gLTQwLC00NSAwLDkwXCJ9XSxHW1wiVFAuU1AgQ0xBU1MgSVhcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjEuMjEzLC0zNi4yMTMyIC03LjA4LDcuMDgwMiBNIDg1Ljg2NjksLTAuODY2OTgyIDc4Ljc4NjgsNi4yMTMyIG0gMCwtNDIuNDI2NCA3LjA4MDEsNy4wODAyIG0gMjguMjY2MSwyOC4yNjYwMTggNy4wOCw3LjA4MDE4MiBNIDEwMCwtNDUgbCAwLDEwIG0gMCw0MCAwLDEwIG0gLTMwLC0zMCAxMCwwIG0gNDAsMCAxMCwwIG0gLTEwLDAgYyAwLDExLjA0NTY5IC04Ljk1NCwyMCAtMjAsMjAgLTExLjA0NTcsMCAtMjAsLTguOTU0MzEgLTIwLC0yMCAwLC0xMS4wNDU3IDguOTU0MywtMjAgMjAsLTIwIDExLjA0NiwwIDIwLDguOTU0MyAyMCwyMCB6XCJ9XSxHW1wiVFAuU1AgQ0xBU1MgWFwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTEwLGZvbnRzaXplOjQwLHRleHQ6XCJDQVwifV0sR1tcIlRQLk1FRElDQUwgU1VQUExZIFBPSU5UXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLC0yMCAwLC00MCBtIC00MCwyNSA4MCwwXCJ9XSxHW1wiVFAuQU1NVU5JVElPTiBTVVBQTFkgUE9JTlQgKEFTUClcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQVNQXCJ9XSxHW1wiVFAuQU1NVU5JVElPTiBUUkFOU0ZFUiBQT0lOVCAoQVRQKVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJBVFBcIn1dLEdbXCJUUC5UQVJHRVQgSEFORE9WRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZWRhc2hhcnJheTpcIjEwLDVcIixmaWxsOiExLGQ6XCJtIDEwMCw0NSAtMTUsNDAgLTQwLDE1IDQwLDE1IDE1LDQwIDE1LC00MCA0MCwtMTUgLTQwLC0xNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlRIXCJ9XSxHW1wiVFAuS0VZIFRFUlJBSU5cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDE0NSwxMDAgYSA0NSw0NSAwIDAgMSAtNDUsNDUgNDUsNDUgMCAwIDEgLTQ1LC00NSA0NSw0NSAwIDAgMSA0NSwtNDUgNDUsNDUgMCAwIDEgNDUsNDUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6ODAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIktcIixmaWxsOk99XSxHW1wiVFAuQlQgQk9VWSBEUk9QXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDQ1IDAsMTEwIDcwLDAgMCwtMTEwIG0gLTM1LDk1IDAsLTk1IG0gLTM1LDAgNzAsMFwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMDQsMTAwIGMgMCwyIC0zLDIgLTQuOCwyIC0xLjQsMCAtNC4xLC0xIC0yLjcsLTIuOSAxLjksLTEuNCA0LjUsLTEuNCA2LjUsLTAuNCAxLDAuMyAxLDAuNyAxLDEuMyB6IG0gMCw0MCBjIDAsMiAtMywyIC00LjgsMiAtMS40LDAgLTQuMSwtMSAtMi43LC0zIDEuOSwtMSA0LjUsLTEgNi41LDAgMSwwIDEsMCAxLDEgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6ODAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIkJcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEyMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiVFwifV0sR1tcIlRQLlJFUE9SVEVEIEJPVFRPTUVEIFNVQlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDEyOSwxMjIuNCA3MC45LDc4LjggbSAwLDQzLjYgNTguMSwtNDMuNiBtIC04MCwtMTQuNSAwLDQzLjYgMjksMCAwLDI5IDQzLjYsMCAwLC0yOSAyOSwwIDAsLTQzLjZcIn0sR1tcIlRQLk1PVklORyBIQVZFTlwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMDguMTQyLDEwMCBBIDguMTQxNjcsOC4xNDE2NyAwIDAgMSAxMDAsMTA4LjE0MiA4LjE0MTY3LDguMTQxNjcgMCAwIDEgOTEuODU4MywxMDAgOC4xNDE2Nyw4LjE0MTY3IDAgMCAxIDEwMCw5MS44NTgzIDguMTQxNjcsOC4xNDE2NyAwIDAgMSAxMDguMTQyLDEwMCBaIE0gNDUsNTUgbCAwLDkwIG0gMTEwLC05MCAwLDkwIG0gLTExMCwtNDUgMTEwLDBcIn0sR1tcIlRQLlNDUkVFTiBDRU5UUkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDU1IDAsOTAgbSA4LjE0MiwtNDUgQSA4LjE0MTY3LDguMTQxNjcgMCAwIDEgMTAwLDEwOC4xNDIgOC4xNDE2Nyw4LjE0MTY3IDAgMCAxIDkxLjg1ODMsMTAwIDguMTQxNjcsOC4xNDE2NyAwIDAgMSAxMDAsOTEuODU4MyA4LjE0MTY3LDguMTQxNjcgMCAwIDEgMTA4LjE0MiwxMDAgWlwifSxHW1wiVFAuU0hPUkUgQ09OVFJPTCBTVEFUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMzAsMTU1IDE0MCwwIG0gLTI3LC0yMCAyLC0xMCAtMTAsNSBtIC03OCw1IC0yLC0xMCAxMCw1IG0gMzUsLTU1IDAsNjggbSA3LjUsLTc2IEEgNy41LDcuNSAwIDAgMSAxMDAsNzQuNSA3LjUsNy41IDAgMCAxIDkyLjUsNjcgNy41LDcuNSAwIDAgMSAxMDAsNTkuNSA3LjUsNy41IDAgMCAxIDEwNy41LDY3IFogbSAtNTIuNSw4IDkwLDAgbSAtOTAsNTAgYyAxNSwyNSA3NSwyNSA5MCwwIE0gNDAsNDUgNTAsNTUgNjAsNDUgNzAsNTUgODAsNDUgbCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn0sR1tcIlRQLkRJVENIRUQgQUlSQ1JBRlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTQ1LDEyMCAtMTUsLTE1IG0gLTE1LDE1IDE1LC0xNSBtIC03NSwxNSAxNSwtMTUgbSAxNSwxNSAtMTUsLTE1IG0gMTAsMTAgMjUsLTMwIC0xMCwtMTAgMTAsLTEwIDIwLDIwIC0xMCwzNSAtMTUsLTE1IC0xNSwxNSB6XCJ9LEdbXCJUUC5QRVJTT04gSU4gV0FURVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA1LDExMCAxMCwtMTAgMCwtMTUgNSwwIDAsMjAgLTEwLDEwIHogbSAtMTAsMCAtMTAsLTEwIDAsLTE1IC01LDAgMCwyMCAxMCwxMCB6IG0gNSwtNSAwLC0xMCAtNSwwIC01LC01IDAsLTEwIDUsLTUgMTAsMCA1LDUgMCwxMCAtNSw1IC01LDAgbSAtMTUsMjUgMTUsLTE1IG0gNDUsMTUgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSAtNzUsMTUgMTUsLTE1IG0gMTUsMTUgLTE1LC0xNSBtIDQ1LDE1IC0xNSwtMTVcIn0sR1tcIlRQLkNMVVRURVIsIFNUQVRJT05BUlkgT1IgQ0VBU0UgUkVQT1JUSU5HXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsMTM1IGMgMjMuMywtMjMgNDcsLTQ2LjcgNzAsLTcwIG0gLTcwLDAgYyAyMy4zLDIzLjMgNDcsNDcgNzAsNzAgbSAtMzUsLTQgYyAtMTkuNywwIC00Ny44LC04IC01MCwtMzEgMywtMjQuOSAzMy45LC0zMiA1NSwtMzAuNyAxOSwwLjggNDYsMTAuOSA0NSwzMy43IC01LDIxIC0zMSwyOCAtNTAsMjggeiBtIDMxLC0zMSBjIDAsMjAgLTgsNDggLTMxLDUwIEMgNzUuMSwxNDcgNjgsMTE2IDY5LjMsOTUgNzAuMSw3Ni4yIDgwLjIsNDguNiAxMDMsNTAuMiBjIDIxLDQuOSAyOCwzMS4xIDI4LDQ5LjggelwifSxHW1wiVFAuVEVOVEFUSVZFIE9SIFBST1ZJU0lPTkFMIFRSQUNLXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTMwLjkwMiwxMDAgQSAzMC45MDE3LDUwIDAgMCAxIDEwMCwxNTAgMzAuOTAxNyw1MCAwIDAgMSA2OS4wOTgzLDEwMCAzMC45MDE3LDUwIDAgMCAxIDEwMCw1MCAzMC45MDE3LDUwIDAgMCAxIDEzMC45MDIsMTAwIFogTSAxMDAsMTMwLjkwMiBBIDUwLDMwLjkwMTcgMCAwIDEgNTAsMTAwIDUwLDMwLjkwMTcgMCAwIDEgMTAwLDY5LjA5ODMgNTAsMzAuOTAxNyAwIDAgMSAxNTAsMTAwIDUwLDMwLjkwMTcgMCAwIDEgMTAwLDEzMC45MDIgWlwifSxHW1wiVFAuRElTVFJFU1NFRCBWRVNTRUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDY1IC0yMCwyMCAyMCwtMjAgbSAtNSw1NSAtMzUsLTM1IDAsLTIwIDQ1LDQ1IHogbSAtMzAsMCAtMTUsLTE1IG0gLTE1LDE1IDE1LC0xNSBtIDQ1LDE1IDE1LC0xNSBtIDE1LDE1IC0xNSwtMTUgbSAtNDUsMTUgMTUsLTE1XCJ9LEdbXCJUUC5TRUEgTUlORUxJS0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gNzUsNzUgNTUsNTUgbSA0NSwtMTUgMCwyNSBtIDI1LDEwIDIwLC0yMCBtIC04MCw2MCAwLC0zMCAyMCwtMjAgMzAsMCAyMCwyMCAwLDMwIC0yMCwyMCAtMzAsMCB6XCJ9LEdbXCJUUC5JQ0VCRVJHXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDEwMCAyNSwtMzAgMjUsMzAgLTUsMTUgLTUsLTUgLTE1LDIwIC0xNSwtMjAgLTUsNSB6IG0gLTE1LDAgODAsMFwifSxHW1wiVFAuT0lMIFJJRy9QTEFURk9STVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNTUsMTAwIDAsLTUwIG0gNzUsNTAgMCw0MCBtIDIwLC00MCAwLDQwIG0gLTExNSwwIDAsLTQwIDEzMCwwXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNTUsMTAwIDAsLTE1IDI1LDAgMCwxNSB6XCJ9XSxHW1wiVFAuQk9UVE9NIFJFVFVSTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA1MCwxMDAgMTUsLTM1IDE1LDMwIDIwLC01NSAyMCw1NSAxNSwtMzUgMTUsNDAgelwifSxHW1wiVFAuSU5TVEFMTEFUSU9OL01BTk1BREVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1MCwxMDAgMTUsLTM1IDE1LDMwIDIwLC01NSAyMCw1NSAxNSwtMzUgMTUsNDAgelwifSxHW1wiVFAuV1JFQ0ssIE5PTiBEQU5HRVJPVVNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMzUsODUgMCwzMCBtIC04NSwtMTUgMTAwLDAgbSAtODUsLTE1IDAsMzAgbSAzNSwtNDAgMCw1MFwifSxHW1wiVFAuV1JFQ0ssIERBTkdFUk9VU1wiXT1bR1tcIlRQLldSRUNLLCBOT04gREFOR0VST1VTXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZWRhc2hhcnJheTpcIjUsNVwiLGZpbGw6ITEsZDpcIm0gMTU2LjU0NywxMDAgYyAwLDE2LjM4MiAtMjUuMTYyLDI5LjY2MiAtNTYuMjAyLDI5LjY2MiAtMzEuMDM5NSwwIC01Ni4yMDE5LC0xMy4yOCAtNTYuMjAxNywtMjkuNjYyIDAsLTE2LjM4MTggMjUuMTYyNCwtMjkuNjYxOCA1Ni4yMDE3LC0yOS42NjE4IDMxLjAzOSwtMWUtNCA1Ni4yMDIsMTMuMjggNTYuMjAyLDI5LjY2MTggelwifV0sR1tcIlRQLk1BUklORSBMSUZFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzIsNzUgMCw1MCA4MywtMzcuNSAwLDI1IEwgMTMyLDc1IG0gLTMyLDI1IDI1LjUsLTI1IDAsNTAgelwifSxHW1wiVFAuU0VBIEFOT01BTFlcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxNTAsODAgMTMwLDM1IDEwMCwxMDAgNzAsMzUgNTAsODAgbSAwLDIwIDIwLC00NSAzMCw2NSAzMCwtNjUgMjAsNDVcIn0sR1tcIlRQLkZJWCBBQ09VU1RJQ1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDUwLDE1MCAxNTAsNTAgTSA1MCw1MCAxNTAsMTUwIG0gLTUwLC0xMDAgMCwxMDBcIn0sR1tcIlRQLkZJWCBFTEVDVFJPLU1BR05FVElDXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsOTAgMTUsMjAgNSwtMjAgMTUsMjAgNSwtMjAgMjAsMjAgNSwtMjAgMTUsMjAgNSwtMjAgMTUsMjAgTSA1MCwxNTAgMTUwLDUwIE0gNTAsNTAgMTUwLDE1MCBtIC01MCwtMTAwIDAsMTAwXCJ9LEdbXCJUUC5FTEVDVFJPIE1BR05FVElDIC0gTUFHTkVUSUMgQU5PTUFMWSBERVRFQ1RJT04gKE1BRClcIl09W0dbXCJUUC5GSVggRUxFQ1RSTy1NQUdORVRJQ1wiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTgwLGZvbnRzaXplOjM1LHRleHQ6XCJNQURcIn1dLEdbXCJUUC5GSVggRUxFQ1RSTy1PUFRJQ0FMXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTUwLDEwMCBjIDAsNi45MDQgLTIyLjM4NiwxMi41IC01MCwxMi41IC0yNy42MTQyLDAgLTUwLC01LjU5NiAtNTAsLTEyLjUgMCwtNi45MDM2IDIyLjM4NTgsLTEyLjUgNTAsLTEyLjUgMjcuNjE0LDAgNTAsNS41OTY0IDUwLDEyLjUgeiBNIDUwLDE1MCAxNTAsNTAgTSA1MCw1MCAxNTAsMTUwIG0gLTUwLC0xMDAgMCwxMDBcIn0sR1tcIlRQLkZJUkVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6RS5pY29uQ29sb3JbQ10sdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjM1LHRleHQ6XCJGSVJFXCJ9LEdbXCJUUC5JTkRJUkVDVCBGSVJFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTpFLmljb25Db2xvcltDXSxmaWxsOiExLGQ6XCJtIDEwMCw2MCAwLDgwIG0gLTQwLC00MCA4MCwwXCJ9LEdbXCJUUC5BTUJVU0hcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOkUuaWNvbkNvbG9yW0NdLGZpbGw6ITEsZDpcIm0gNzcuNSwxMDYgMjAsMCBtIC0yMCwtMTIgMjAsMCBNIDc1LDgyIDk1LDgyIG0gLTIwLDM2IDIwLDAgbSAtMjUsMTIgMjAsMCBNIDcwLDcwIDkwLDcwIE0gODAsNjAgYyAyNSwxNSAyNSw2NSAwLDgwIG0gNDUsLTUwIDEwLDEwIC0xMCwxMCBtIC0yNSwtMTAgMzUsMFwifSxHW1wiVFAuUk9BRCBCTE9DS1wiXT17dHlwZTpcInBhdGhcIixzdHJva2U6RS5pY29uQ29sb3JbQ10sZmlsbDohMSxkOlwibSA3MywxMzMgNjAsLTYwIG0gLTY2LDU0IDYwLC02MCBtIC01NCwwIDYwLDYwIG0gLTY2LC01NCA2MCw2MFwifSxHW1wiVFAuUk9BRCBCTE9DSyAoVU5ERVIgQ09OU1RSVUNUSU9OKVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOkUuaWNvbkNvbG9yW0NdLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiNSw1XCIsZDpcIm0gNzMsNjcgNjAsNjAgbSAtNjYsLTU0IDYwLDYwXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTpFLmljb25Db2xvcltDXSxmaWxsOiExLGQ6XCJNIDczLDEzMyAxMzMsNzMgTSA2NywxMjcgMTI3LDY3XCJ9XSxHW1wiVFAuVklUQUwgQVJFQSBDRU5UUkVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNDUsMTAwIDExMCwwIG0gMCwtNDAgMCw4NSBNIDQ1LDYwIGwgMCw4MCBtIDU1LC04MCAwLDgwXCJ9XSxHW1wiVFAuRVNUSU1BVEVEIFBPU0lUSU9OIChFUClcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNVwiLGQ6XCJNIDE2MCwxNjAgNDAsMTYwIDQwLDQwIDE2MCw0MCBaXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQwLDEwMCBjIDEsMjYgLTI3LDQ3IC01MS44LDM4IEMgNjMuMSwxMzEgNTEuNSw5OC4zIDY3LDc3LjQgYyAxMy44LC0yMS45IDQ5LC0yMy4yIDY0LC0yLjMgNiw3IDksMTUuOSA5LDI0LjkgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjM1LHRleHQ6XCJFUFwifV0sR1tcIkZPUldBUkQgT0JTRVJWRVIgLyBTUE9UVEVSIFBPU0lUSU9OXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjozfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDQwLDEzNSA2MCwtNzUgNjAsNzUgelwifV0sR1tcIk1BTiBNQURFIFNQQUNFIERFQlJJUyBTTUFMTFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTd9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNjAsMTEwIDc1LDEwMCA2MCw5MCBtIDUwLDUwIC0xMCwtMTUgLTEwLDE1IG0gNTAsLTUwIC0xNSwxMCAxNSwxMCBNIDkwLDYwIDEwMCw3NSAxMTAsNjBcIn1dLEdbXCJNQU4gTUFERSBTUEFDRSBERUJSSVMgTUVESVVNXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxN30se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH1dLEdbXCJNQU4gTUFERSBTUEFDRSBERUJSSVMgQklHXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxN30se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCw3NSAxMCwtMTUgMTAsMTUgTSA3NSwxMTAgNjAsMTAwIDc1LDkwIG0gMzUsMzUgLTEwLDE1IC0xMCwtMTUgbSAzNSwtMzUgMTUsMTAgLTE1LDEwXCJ9XSxHW1wiTkFUVVJBTCBTUEFDRSBERUJSSVMgU01BTExcIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6MTd9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNjAsMTEwIDc1LDEwMCA2MCw5MCBtIDUwLDUwIC0xMCwtMTUgLTEwLDE1IG0gNTAsLTUwIC0xNSwxMCAxNSwxMCBNIDkwLDYwIDEwMCw3NSAxMTAsNjBcIn1dLEdbXCJOQVRVUkFMIFNQQUNFIERFQlJJUyBNRURJVU1cIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6MTd9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9XSxHW1wiTkFUVVJBTCBTUEFDRSBERUJSSVMgQklHXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjE3fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDkwLDc1IDEwLC0xNSAxMCwxNSBNIDc1LDExMCA2MCwxMDAgNzUsOTAgbSAzNSwzNSAtMTAsMTUgLTEwLC0xNSBtIDM1LC0zNSAxNSwxMCAtMTUsMTBcIn1dLEdbXCJUUC5NMS5VTlNQRUNJRklFRFwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjU1LGN5OjEwMCxyOjE1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTQ1LGN5OjEwMCxyOjE1fV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjU1LGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDM1LDc1IDEwLjYsMTMuMyBtIDE4LjgsMCAxMC42LC0xMy4zXCJ9XSxHW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLDc1IDEwLjYsMTMuMyBtIDE4LjgsMCAxMC42LC0xMy4zXCJ9XSxHW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTQ1LGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyNSw3NSAxMC42LDEzLjMgbSAxOC44LDAgMTAuNiwtMTMuM1wifV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo1NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA2NC40LDg4LjMgNzUsNzUgbSAtNDAsMCAxMC42LDEzLjMgbSAzMi40LDEwIDIsMS43IC0yLDIgeiBtIC04LDEuNyAzLjMsMFwifV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTA5LDg4LjMgMTIwLDc1IG0gLTQwLDAgMTAuNiwxMy4zIG0gMzIuNCwxMCAyLDEuNyAtMiwyIHogbSAtOCwxLjcgMywwXCJ9XSxHW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAzXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjE0NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxNTQsODguMyAxNjUsNzUgbSAtNDAsMCAxMSwxMy4zIG0gMzIsMTAgMiwxLjcgLTIsMiB6IG0gLTgsMS43IDMsMFwifV0sR1tcIlRQLk0xLkFOVElUQU5LIE1JTkUgMVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo1NSxjeToxMDAscjoxNX1dLEdbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV0sR1tcIlRQLk0xLkFOVElUQU5LIE1JTkUgM1wiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxNDUsY3k6MTAwLHI6MTV9XSxHW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo1NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1NSwxMTUgMCwxMyA2LC02XCJ9XSxHW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDExNSAwLDEzIDYsLTZcIn1dLEdbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAzXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjE0NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxNDUsMTE1IDAsMTMgNiwtNlwifV0sR1tcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDFcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6NTUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMzUsMTE1IDgsMTAgNS41LC0xMSBtIDEzLDAgNS41LDExIDgsLTEwXCJ9XSxHW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODAsMTE1IDgsMTAgNS41LC0xMSBtIDEzLDAgNS41LDExIDgsLTEwXCJ9XSxHW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxNDUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTI1LDExNSA4LDEwIDUuNSwtMTEgbSAxMywwIDUuNSwxMSA4LC0xMFwifV0sR1tcIlRQLk0xLk1JTkUgQ0xVU1RFUiAxXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjcuNSw1XCIsZDpcIm0gNzMsMTEwIC0zNiwwIGMgMCwtMTAgMywtMjAgMTgsLTIwIDE1LDAgMTgsMTAgMTgsMjAgelwifV0sR1tcIlRQLk0xLk1JTkUgQ0xVU1RFUiAyXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjcuNSw1XCIsZDpcIm0gMTE4LDExMCAtMzYsMCBjIDAsLTEwIDMsLTIwIDE4LC0yMCAxNSwwIDE4LDEwIDE4LDIwIHpcIn1dLEdbXCJUUC5NMS5NSU5FIENMVVNURVIgM1wiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCI3LjUsNVwiLGQ6XCJtIDE2MywxMTAgLTM2LDAgYyAwLC0xMCAzLC0yMCAxOCwtMjAgMTUsMCAxOCwxMCAxOCwyMCB6XCJ9XSxHKUcuaGFzT3duUHJvcGVydHkobykmJihJLmhhc093blByb3BlcnR5KG8pJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIrbyksbi5jYWxsKHRoaXMsR1tvXSxUKSxJW29dPUdbb10pfXZhciBrPXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbVl0sbGFiZWxzOmZ1bmN0aW9uKEkpe0lbXCJHLVQtRC0tLS0tXCJdPXt9LElbXCJHLVQtSS0tLS0tXCJdPXt9LElbXCJHLVQtTi0tLS0tXCJdPXt9LElbXCJHLUctR1BVVUQtXCJdPXt9LElbXCJHLUctR1BVVUItXCJdPXt9LElbXCJHLUctR1BVVUwtXCJdPXt9LElbXCJHLUctR1BVVVMtXCJdPXt9LElbXCJHLUctR1BVWS0tXCJdPXt9LElbXCJHLUctR1BVWVAtXCJdPXt9LElbXCJHLUctR1BVWUQtXCJdPXt9LElbXCJHLUctR1BVWUwtXCJdPXt9LElbXCJHLUctR1BVWUMtXCJdPXt9LElbXCJHLUctR1BVWVMtXCJdPXt9LElbXCJHLUctR1BVWUItXCJdPXt9LElbXCJHLUctR1BVWUEtXCJdPXt9LElbXCJHLUctR1BVWVYtXCJdPXt9LElbXCJHLUctR1BVWVQtXCJdPXt9LElbXCJHLUctR1BVWVItXCJdPXt9LElbXCJHLUctR1BVWUstXCJdPXt9LElbXCJHLUctR1BVWVgtXCJdPXt9LElbXCJHLUctR1BVUy0tXCJdPXt9LElbXCJHLUctR1BVU0EtXCJdPXt9LElbXCJHLUctR1BVU0QtXCJdPXt9LElbXCJHLUctR1BVU0MtXCJdPXt9LElbXCJHLUctR1BSLS0tXCJdPXt9LElbXCJHLUctR1BSTi0tXCJdPXt9LElbXCJHLUctR1BSUy0tXCJdPXt9LElbXCJHLUctR1BSRC0tXCJdPXt9LElbXCJHLUctR1BSUC0tXCJdPXt9LElbXCJHLUctR1BSTS0tXCJdPXt9LElbXCJHLUctR1BSVy0tXCJdPXt9LElbXCJHLUctR1BSQy0tXCJdPXt9LElbXCJHLUctR1BSSS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjMwLGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1HLUdQV0EtLVwiXT17fSxJW1wiRy1HLUdQV0QtLVwiXT17fSxJW1wiRy1HLUdQV0UtLVwiXT17fSxJW1wiRy1HLUdQV0ctLVwiXT17fSxJW1wiRy1HLUdQV00tLVwiXT17fSxJW1wiRy1HLUdQV0ktLVwiXT17fSxJW1wiRy1HLUdQV1AtLVwiXT17fSxJW1wiRy1HLUdQRi0tLVwiXT17fSxJW1wiRy1HLUdQSC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1HLUdQSFEtLVwiXT17fSxJW1wiRy1HLUdQSEEtLVwiXT17fSxJW1wiRy1HLUdQSFktLVwiXT17fSxJW1wiRy1HLUdQSFgtLVwiXT17fSxJW1wiRy1HLUdQTy0tLVwiXT17fSxJW1wiRy1HLUdQT1otLVwiXT17fSxJW1wiRy1HLUdQT0QtLVwiXT17fSxJW1wiRy1HLUdQT1ctLVwiXT17fSxJW1wiRy1HLUdQT1AtLVwiXT17fSxJW1wiRy1HLUdQT1ItLVwiXT17fSxJW1wiRy1HLUdQQS0tLVwiXT17fSxJW1wiRy1HLUdQQVAtLVwiXT17fSxJW1wiRy1HLUdQQVctLVwiXT17fSxJW1wiRy1HLUdQQUstLVwiXT17fSxJW1wiRy1HLUdQQUEtLVwiXT17fSxJW1wiRy1HLUdQQUgtLVwiXT17fSxJW1wiRy1HLUdQQUItLVwiXT17fSxJW1wiRy1HLUdQQUMtLVwiXT17fSxJW1wiRy1HLUdQQUQtLVwiXT17fSxJW1wiRy1HLUdQQUUtLVwiXT17fSxJW1wiRy1HLUdQQVMtLVwiXT17fSxJW1wiRy1HLUdQQVQtLVwiXT17fSxJW1wiRy1HLUdQQU8tLVwiXT17fSxJW1wiRy1HLUdQQVItLVwiXT17fSxJW1wiRy1HLUdQQUwtLVwiXT17fSxJW1wiRy1HLUdQQUYtLVwiXT17fSxJW1wiRy1HLUdQQUctLVwiXT17fSxJW1wiRy1HLUdQQUktLVwiXT17fSxJW1wiRy1HLUdQQUotLVwiXT17fSxJW1wiRy1HLUdQQU0tLVwiXT17fSxJW1wiRy1HLUdQQU4tLVwiXT17fSxJW1wiRy1HLUdQUC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxhZGRpdGlvbmFsSW5mb3JtYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBLLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1HLUdQUEMtLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo0MCxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1HUFBPLS1cIl09e30sSVtcIkctRy1HUFBELS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1HLUdQUEwtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUctR1BQUC0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBSLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1HLUdQUEUtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUctR1BQUy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBBLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1HLUdQUFctLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyNSxmb250c2l6ZTo3MH19LElbXCJHLUctR1BDLS0tXCJdPXt9LElbXCJHLUctR1BDVS0tXCJdPXt9LElbXCJHLUctR1BDVVItXCJdPXt9LElbXCJHLUctR1BDVUEtXCJdPXt9LElbXCJHLUctR1BDVVMtXCJdPXt9LElbXCJHLUctR1BDVU0tXCJdPXt9LElbXCJHLUctR1BDQS0tXCJdPXt9LElbXCJHLUctR1BDUy0tXCJdPXt9LElbXCJHLUctR1BDTS0tXCJdPXt9LElbXCJHLUctR1BDUC0tXCJdPXt9LElbXCJHLUctR1BDUi0tXCJdPXt9LElbXCJHLUctR1BDQy0tXCJdPXt9LElbXCJHLUctR1BDRS0tXCJdPXt9LElbXCJHLUctR1BDTi0tXCJdPXt9LElbXCJHLUctR1BCLS0tXCJdPXt9LElbXCJHLUctR1BCVS0tXCJdPXt9LElbXCJHLUctR1BCVUEtXCJdPXt9LElbXCJHLUctR1BCVVMtXCJdPXt9LElbXCJHLUctR1BCVU0tXCJdPXt9LElbXCJHLUctR1BCUy0tXCJdPXt9LElbXCJHLUctR1BCU0EtXCJdPXt9LElbXCJHLUctQVBQLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1BUEMtLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1HLUFQVS0tLVwiXT17fSxJW1wiRy1HLUFQRC0tLVwiXT17fSxJW1wiRy1HLVBOLS0tLVwiXT17fSxJW1wiRy1HLURQVC0tLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjExNSx5Ojg1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1HLURQTy0tLVwiXT17fSxJW1wiRy1HLURQT0MtLVwiXT17fSxJW1wiRy1HLURQT1ItLVwiXT17fSxJW1wiRy1HLURQT0YtLVwiXT17fSxJW1wiRy1HLURQT1MtLVwiXT17fSxJW1wiRy1HLURQT04tLVwiXT17fSxJW1wiRy1HLU9QUC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU0tT0FPRi0tXCJdPXt9LElbXCJHLU0tT0FPTS0tXCJdPXt9LElbXCJHLU0tT0FPUC0tXCJdPXt9LElbXCJHLU0tT0ItLS0tXCJdPXt9LElbXCJHLU0tT01VLS0tXCJdPXt9LElbXCJHLU0tT01ULS0tXCJdPXt9LElbXCJHLU0tT01ELS0tXCJdPXt9LElbXCJHLU0tT01FLS0tXCJdPXt9LElbXCJHLU0tT01QLS0tXCJdPXt9LElbXCJHLU0tT01XLS0tXCJdPXt9LElbXCJHLU0tT0ZTLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo1NSxmb250c2l6ZTo0MH0saG9zdGlsZTpbe3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDozNSx5OjExMCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifSx7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTY1LHk6MTEwLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9XSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNzUsZm9udHNpemU6NDB9fSxJW1wiRy1NLU9IVEwtLVwiXT17YWx0aXR1ZGVEZXB0aDp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6NjAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLU0tT0hUSC0tXCJdPXthbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTUseTo2MCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctTS1CQ1AtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLVNFLS0tLVwiXT17fSxJW1wiRy1NLVNGLS0tLVwiXT17fSxJW1wiRy1NLVNTLS0tLVwiXT17fSxJW1wiRy1NLVNVLS0tLVwiXT17fSxJW1wiRy1NLU5aLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToyMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToyMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTAwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE0MCxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjUsZm9udHNpemU6MzV9LHR5cGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjYwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctTS1ORi0tLS1cIl09e30sSVtcIkctTS1ORUItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MjAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MjAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwMCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNDAsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctTS1ORUMtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MjAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MjAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwMCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNDAsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctTS1ORFAtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLU5EQS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU0tTkRULS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctTS1OREUtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLU5EQi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU0tTkRPLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctTS1OREQtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1GLVBUUy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseToxNDUsZm9udHNpemU6NDB9LGFsdGl0dWRlRGVwdGg6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo4MCx5OjE0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjEyMCx5OjgwLGZvbnRzaXplOjQwfX0sSVtcIkctRi1QVE4tLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRi1QQ0YtLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjUseToxMTUsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUYtUENTLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRi1QQ0ItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1GLVBDUi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUYtUENILS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRi1QQ0wtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBYLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUEMtLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QWS0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBULS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUEQtLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QRS0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBMLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUE0tLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QUi0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBVLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUE8tLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QSS0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBOLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFMtLS0tXCJdPXt9LElbXCJHLVMtUFNaLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTQS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0ItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNDLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTRC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0UtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNGLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTRy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0gtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNJLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTSi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QQS0tLS1cIl09e30sSVtcIkctUy1QQVMtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBBVC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU8tRUQtLS0tXCJdPXt9LElbXCJHLU8tRVAtLS0tXCJdPXt9LElbXCJHLU8tRVYtLS0tXCJdPXt9LElbXCJHLU8tSE0tLS0tXCJdPXt9LElbXCJHLU8tSEktLS0tXCJdPXt9LElbXCJHLU8tSE8tLS0tXCJdPXt9LElbXCJHLU8tU0ItLS0tXCJdPXt9LElbXCJHLU8tU0JNLS0tXCJdPXt9LElbXCJHLU8tU0JOLS0tXCJdPXt9LElbXCJHLU8tU0JXLS0tXCJdPXt9LElbXCJHLU8tU0JYLS0tXCJdPXt9LElbXCJHLU8tU00tLS0tXCJdPXt9LElbXCJHLU8tU1MtLS0tXCJdPXt9LElbXCJHLU8tRkEtLS0tXCJdPXt9LElbXCJHLU8tRkUtLS0tXCJdPXt9LElbXCJHLU8tRk8tLS0tXCJdPXt9fSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiRy1ULUQtLS0tLVwiXT1FW1wiVFAuREVTVFJPWVwiXSx0W1wiRy1ULUQtLS0tLVwiXT17eDE6MCx4MjoyMDAseTE6NDAseTI6MTYwfSxJW1wiRy1ULUktLS0tLVwiXT1FW1wiVFAuSU5URVJESUNUXCJdLHRbXCJHLVQtSS0tLS0tXCJdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbXCJHLVQtTi0tLS0tXCJdPUVbXCJUUC5ORVVUUkFMSVpFXCJdLHRbXCJHLVQtTi0tLS0tXCJdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BVVUQtXCJdPUVbXCJUUC5EQVRVTVwiXSx0W1wiRy1HLUdQVVVELVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUFVVQi1cIl09RVtcIlRQLkJSSUVGIENPTlRBQ1RcIl0sdFtcIkctRy1HUFVVQi1cIl09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVtcIkctRy1HUFVVTC1cIl09RVtcIlRQLkxPU1QgQ09OVEFDVFwiXSx0W1wiRy1HLUdQVVVMLVwiXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJW1wiRy1HLUdQVVVTLVwiXT1FW1wiVFAuU0lOS0VSXCJdLHRbXCJHLUctR1BVVVMtXCJdPXt4MTo1MCx4MjoxNTAseTE6MCx5MjoxMDB9LElbXCJHLUctR1BVWS0tXCJdPUVbXCJUUC5TT05PQlVPWVwiXSx0W1wiRy1HLUdQVVktLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWVAtXCJdPUVbXCJUUC5TT05PQlVPWSBQQVRURVJOIENFTlRFUlwiXSx0W1wiRy1HLUdQVVlQLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUQtXCJdPUVbXCJUUC5TT05PQlVPWSBESUZBUlwiXSx0W1wiRy1HLUdQVVlELVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUwtXCJdPUVbXCJUUC5TT05PQlVPWSBMT0ZBUlwiXSx0W1wiRy1HLUdQVVlMLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUMtXCJdPUVbXCJUUC5TT05PQlVPWSBDQVNTXCJdLHRbXCJHLUctR1BVWUMtXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctRy1HUFVZUy1cIl09RVtcIlRQLlNPTk9CVU9ZIERJQ0FTU1wiXSx0W1wiRy1HLUdQVVlTLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUItXCJdPUVbXCJUUC5TT05PQlVPWSBCVFwiXSx0W1wiRy1HLUdQVVlCLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUEtXCJdPUVbXCJUUC5TT05PQlVPWSBBTk1cIl0sdFtcIkctRy1HUFVZQS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlWLVwiXT1FW1wiVFAuU09OT0JVT1kgVkxBRFwiXSx0W1wiRy1HLUdQVVlWLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWVQtXCJdPUVbXCJUUC5TT05PQlVPWSBBVEFDXCJdLHRbXCJHLUctR1BVWVQtXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctRy1HUFVZUi1cIl09RVtcIlRQLlNPTk9CVU9ZIFJPXCJdLHRbXCJHLUctR1BVWVItXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctRy1HUFVZSy1cIl09RVtcIlRQLlNPTk9CVU9ZIEtJTkdQSU5cIl0sdFtcIkctRy1HUFVZSy1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlYLVwiXT1FW1wiVFAuU09OT0JVT1kgRVhQSVJFRFwiXSx0W1wiRy1HLUdQVVlYLVwiXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVUy0tXCJdPUVbXCJUUC5TRUFSQ0hcIl0sdFtcIkctRy1HUFVTLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BVU0EtXCJdPUVbXCJUUC5TRUFSQ0ggQVJFQVwiXSx0W1wiRy1HLUdQVVNBLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUFVTRC1cIl09RVtcIlRQLkRJUCBQT1NJVElPTlwiXSx0W1wiRy1HLUdQVVNELVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUFVTQy1cIl09RVtcIlRQLlNFQVJDSCBDRU5URVJcIl0sdFtcIkctRy1HUFVTQy1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BSLS0tXCJdPUVbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0sdFtcIkctRy1HUFItLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BSTi0tXCJdPUVbXCJUUC5OQVZJR0FUSU9OQUwgUkVGRVJFTkNFXCJdLHRbXCJHLUctR1BSTi0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUlMtLVwiXT1FW1wiVFAuU1BFQ0lBTCBQT0lOVFwiXSx0W1wiRy1HLUdQUlMtLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJELS1cIl09RVtcIlRQLkRMUlBcIl0sdFtcIkctRy1HUFJELS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BSUC0tXCJdPUVbXCJUUC5QT0lOVCBPRiBJTlRFTkRFRCBNT1ZFTUVOVFwiXSx0W1wiRy1HLUdQUlAtLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJNLS1cIl09RVtcIlRQLk1BUlNIQUxMIFBPSU5UXCJdLHRbXCJHLUctR1BSTS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUlctLVwiXT1FW1wiVFAuUkVGRVJFTkNFIFBPSU5UIFdBWVBPSU5UXCJdLHRbXCJHLUctR1BSVy0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUkMtLVwiXT1FW1wiVFAuQ09SUklET1IgVEFCXCJdLHRbXCJHLUctR1BSQy0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUkktLVwiXT1FW1wiVFAuUE9JTlQgT0YgSU5URVJFU1RcIl0sdFtcIkctRy1HUFJJLS1cIl09e3gxOjUwLHgyOjE1MCx5MTotMjV9LElbXCJHLUctR1BXQS0tXCJdPUVbXCJUUC5BSU0gUE9JTlRcIl0sdFtcIkctRy1HUFdBLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BXRC0tXCJdPUVbXCJUUC5EUk9QIFBPSU5UXCJdLHRbXCJHLUctR1BXRC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTIwfSxJW1wiRy1HLUdQV0UtLVwiXT1FW1wiVFAuRU5UUlkgUE9JTlRcIl0sdFtcIkctRy1HUFdFLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MH0sSVtcIkctRy1HUFdHLS1cIl09RVtcIlRQLkdST1VORCBaRVJPXCJdLHRbXCJHLUctR1BXRy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbXCJHLUctR1BXTS0tXCJdPUVbXCJUUC5NU0wgREVURUNUIFBPSU5UXCJdLHRbXCJHLUctR1BXTS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbXCJHLUctR1BXSS0tXCJdPUVbXCJUUC5JTVBBQ1QgUE9JTlRcIl0sdFtcIkctRy1HUFdJLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BXUC0tXCJdPUVbXCJUUC5QUkVESUNURUQgSU1QQUNUIFBPSU5UXCJdLHRbXCJHLUctR1BXUC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQRi0tLVwiXT1FW1wiVFAuRk9STUFUSU9OXCJdLHRbXCJHLUctR1BGLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQSC0tLVwiXT1FW1wiVFAuSEFSQk9SXCJdLHRbXCJHLUctR1BILS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQSFEtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIFFcIl0sdFtcIkctRy1HUEhRLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BIQS0tXCJdPUVbXCJUUC5IQVJCT1IgUE9JTlQgQVwiXSx0W1wiRy1HLUdQSEEtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUEhZLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBZXCJdLHRbXCJHLUctR1BIWS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQSFgtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIFhcIl0sdFtcIkctRy1HUEhYLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BPLS0tXCJdPUVbXCJUUC5ST1VURVwiXSx0W1wiRy1HLUdQTy0tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUE9aLS1cIl09RVtcIlRQLlJPVVRFIFJFTkRFWlZPVVNcIl0sdFtcIkctRy1HUE9aLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUctR1BPRC0tXCJdPUVbXCJUUC5ST1VURSBESVZFUlNJT05TXCJdLHRbXCJHLUctR1BPRC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1HLUdQT1ctLVwiXT1FW1wiVFAuUk9VVEUgV0FZUE9JTlRcIl0sdFtcIkctRy1HUE9XLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUctR1BPUC0tXCJdPUVbXCJUUC5ST1VURSBQSU1cIl0sdFtcIkctRy1HUE9QLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUctR1BPUi0tXCJdPUVbXCJUUC5ST1VURSBQT0lOVCBSXCJdLHRbXCJHLUctR1BPUi0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1HLUdQQS0tLVwiXT1FW1wiVFAuQUlSIENPTlRST0wgUE9JTlRcIl0sdFtcIkctRy1HUEEtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBUC0tXCJdPUVbXCJUUC5DT01CQVQgQUlSIFBBVFJPTCAoQ0FQKVwiXSx0W1wiRy1HLUdQQVAtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFXLS1cIl09RVtcIlRQLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkcgKEFFVylcIl0sdFtcIkctRy1HUEFXLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBSy0tXCJdPUVbXCJUUC5UQU5LSU5HXCJdLHRbXCJHLUctR1BBSy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQUEtLVwiXT1FW1wiVFAuRklYRUQgV0lOR1wiXSx0W1wiRy1HLUdQQUEtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFILS1cIl09RVtcIlRQLlJPVEFSWSBXSU5HXCJdLHRbXCJHLUctR1BBSC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQUItLVwiXT1FW1wiVFAuU1VDQVAgLSBGSVhFRCBXSU5HXCJdLHRbXCJHLUctR1BBQi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQUMtLVwiXT1FW1wiVFAuU1VDQVAgLSBST1RBUlkgV0lOR1wiXSx0W1wiRy1HLUdQQUMtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFELS1cIl09RVtcIlRQLk1JVyAtIEZJWEVEIFdJTkdcIl0sdFtcIkctRy1HUEFELS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBRS0tXCJdPUVbXCJUUC5NSVcgLSBST1RBUlkgV0lOR1wiXSx0W1wiRy1HLUdQQUUtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFTLS1cIl09RVtcIlRQLlNUUklLRSBJUFwiXSx0W1wiRy1HLUdQQVMtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFULS1cIl09RVtcIlRQLlRBQ0FOXCJdLHRbXCJHLUctR1BBVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQU8tLVwiXT1FW1wiVFAuVE9NQ0FUXCJdLHRbXCJHLUctR1BBTy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQVItLVwiXT1FW1wiVFAuUkVTQ1VFXCJdLHRbXCJHLUctR1BBUi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQUwtLVwiXT1FW1wiVFAuUkVQTEVOSVNIXCJdLHRbXCJHLUctR1BBTC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQUYtLVwiXT1FW1wiVFAuVU5NQU5ORUQgQUVSSUFMIFNZU1RFTVwiXSx0W1wiRy1HLUdQQUYtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFHLS1cIl09RVtcIlRQLlZUVUFcIl0sdFtcIkctRy1HUEFHLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbXCJHLUctR1BBSS0tXCJdPUVbXCJUUC5PUkJJVFwiXSx0W1wiRy1HLUdQQUktLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFKLS1cIl09RVtcIlRQLk9SQklUIC0gRklHVVJFIEVJR0hUXCJdLHRbXCJHLUctR1BBSi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQU0tLVwiXT1FW1wiVFAuT1JCSVQgLSBSQUNFIFRSQUNLXCJdLHRbXCJHLUctR1BBTS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQU4tLVwiXT1FW1wiVFAuT1JCSVQgLSBSQU5ET00sIENMT1NFRFwiXSx0W1wiRy1HLUdQQU4tLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUFAtLS1cIl09RVtcIlRQLkFDVElPTiBQT0lOVFwiXSx0W1wiRy1HLUdQUC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBLLS1cIl09RVtcIlRQLkFDVElPTiBDSEVDSyBQT0lOVFwiXSx0W1wiRy1HLUdQUEstLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBDLS1cIl09RVtcIlRQLkNPTlRBQ1QgUE9JTlRcIl0sdFtcIkctRy1HUFBDLS1cIl09e3gxOjU1LHgyOjE0NSx5MTotMTB9LElbXCJHLUctR1BQTy0tXCJdPUVbXCJUUC5DT09SRElOQVRJT04gUE9JTlRcIl0sdFtcIkctRy1HUFBPLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BQRC0tXCJdPUVbXCJUUC5ERUNJU0lPTiBQT0lOVFwiXSx0W1wiRy1HLUdQUEQtLVwiXT17eDE6MzAseDI6MTcwLHkxOjI1LHkyOjE2MH0sSVtcIkctRy1HUFBMLS1cIl09RVtcIlRQLkFDVElPTiBMSU5LVVAgUE9JTlRcIl0sdFtcIkctRy1HUFBMLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQUC0tXCJdPUVbXCJUUC5BQ1RJT04gUEFTU0FHRSBQT0lOVFwiXSx0W1wiRy1HLUdQUFAtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBSLS1cIl09RVtcIlRQLkFDVElPTiBSQUxMWSBQT0lOVFwiXSx0W1wiRy1HLUdQUFItLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBFLS1cIl09RVtcIlRQLkFDVElPTiBSRUxFQVNFIFBPSU5UXCJdLHRbXCJHLUctR1BQRS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1HLUdQUFMtLVwiXT1FW1wiVFAuQUNUSU9OIFNUQVJUIFBPSU5UXCJdLHRbXCJHLUctR1BQUy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1HLUdQUEEtLVwiXT1FW1wiVFAuQUNUSU9OIEFNTkVTVFkgUE9JTlRcIl0sdFtcIkctRy1HUFBBLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQVy0tXCJdPUVbXCJUUC5XQVlQT0lOVFwiXSx0W1wiRy1HLUdQUFctLVwiXT17eDE6NjAseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEMtLS1cIl09RVtcIlRQLlNFQSBTVVJGQUNFIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQy0tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENVLS1cIl09RVtcIlRQLihVU1YpIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ1UtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENVUi1cIl09RVtcIlRQLihSTVYpIFVTViBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENVUi1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDVUEtXCJdPUVbXCJUUC5VU1YgLSBBU1cgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDVUEtXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ1VTLVwiXT1FW1wiVFAuVVNWIC0gU1VXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ1VTLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENVTS1cIl09RVtcIlRQLlVTViAtIE1JVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENVTS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDQS0tXCJdPUVbXCJUUC5BU1cgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDQS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ1MtLVwiXT1FW1wiVFAuU1VXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ1MtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENNLS1cIl09RVtcIlRQLk1JVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENNLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDUC0tXCJdPUVbXCJUUC5QSUNLRVQgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDUC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ1ItLVwiXT1FW1wiVFAuUkVOREVaVk9VUyBDT05UUk9MIFBPSU5UXCJdLHRbXCJHLUctR1BDUi0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ0MtLVwiXT1FW1wiVFAuUkVTQ1VFIENPTlRST0wgUE9JTlRcIl0sdFtcIkctRy1HUENDLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDRS0tXCJdPUVbXCJUUC5SRVBMRU5JU0hNRU5UIENPTlRST0wgUE9JTlRcIl0sdFtcIkctRy1HUENFLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDTi0tXCJdPUVbXCJUUC5OT05DT01CQVRBTlQgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDTi0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQi0tLVwiXT1FW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BCLS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQlUtLVwiXT1FW1wiVFAuKFVVVikgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BCVS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQlVBLVwiXT1FW1wiVFAuVVVWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQlVBLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEJVUy1cIl09RVtcIlRQLlVVViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUEJVUy1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BCVU0tXCJdPUVbXCJUUC5VVVYgLSBNSVcgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BCVU0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQlMtLVwiXT1FW1wiVFAuU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQlMtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEJTQS1cIl09RVtcIlRQLkFTVyBTVUJNQVJJTkUgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BCU0EtXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUFQUC0tLVwiXT1FW1wiVFAuQUlSIENPTlRST0wgUE9JTlQgKEFDUClcIl0sdFtcIkctRy1BUFAtLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctQVBDLS0tXCJdPUVbXCJUUC5DT01NVU5JQ0FUSU9OUyBDSEVDS1BPSU5UXCJdLHRbXCJHLUctQVBDLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUFQVS0tLVwiXT1FW1wiVFAuUFVMTC1VUCBQT0lOVFwiXSx0W1wiRy1HLUFQVS0tLVwiXT17eDE6NTAseDI6MjQwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1BUEQtLS1cIl09RVtcIlRQLkRPV05FRCBBSVJDUkVXIFBJQ0tVUCBQT0lOVFwiXSx0W1wiRy1HLUFQRC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1QTi0tLS1cIl09RVtcIlRQLkRVTU1ZIE1JTkVGSUVMRFwiXSx0W1wiRy1HLVBOLS0tLVwiXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNDB9LElbXCJHLUctRFBULS0tXCJdPUVbXCJUUC5UQVJHRVQgUkVGRVJFTkNFXCJdLElbXCJHLUctRFBPLS0tXCJdPUVbXCJUUC5PQlNFUlZBVElPTiBQT1NUL09VVFBPU1RcIl0sdFtcIkctRy1EUE8tLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUctRFBPQy0tXCJdPUVbXCJUUC5DT01CQVQgT1VUUE9TVFwiXSx0W1wiRy1HLURQT0MtLVwiXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVtcIkctRy1EUE9SLS1cIl09RVtcIlRQLk9CU0VSVkFUSU9OIFBPU1QvUkVDT05OQUlTU0FOQ0VcIl0sdFtcIkctRy1EUE9SLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUctRFBPRi0tXCJdPUVbXCJUUC5GT1JXQVJEIE9CU0VSVkVSIFBPU0lUSU9OXCJdLHRbXCJHLUctRFBPRi0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1HLURQT1MtLVwiXT1FW1wiVFAuU0VOU09SIE9VVFBPU1RcIl0sdFtcIkctRy1EUE9TLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUctRFBPTi0tXCJdPUVbXCJUUC5DQlJOIE9CU0VSVkFUSU9OIFBPU1RcIl0sdFtcIkctRy1EUE9OLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUctT1BQLS0tXCJdPUVbXCJUUC5QT0lOVCBPRiBERVBBUlRVUkVcIl0sdFtcIkctRy1PUFAtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tT0FPRi0tXCJdPUVbXCJUUC5GSVhFRCBBTkQgUFJFRkFCUklDQVRFRFwiXSx0W1wiRy1NLU9BT0YtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJW1wiRy1NLU9BT00tLVwiXT1FW1wiVFAuVEVUUkFIRURST05TXCJdLHRbXCJHLU0tT0FPTS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzB9LElbXCJHLU0tT0FPUC0tXCJdPUVbXCJUUC5URVRSQUhFRFJPTlMgTU9WQUJMRVwiXSx0W1wiRy1NLU9BT1AtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJW1wiRy1NLU9CLS0tLVwiXT1FW1wiVFAuQk9PQlkgVFJBUFwiXSxJW1wiRy1NLU9NVS0tLVwiXT1FW1wiVFAuVU5TUEVDSUZJRUQgTUlORVwiXSxJW1wiRy1NLU9NVC0tLVwiXT1FW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLElbXCJHLU0tT01ELS0tXCJdPUVbXCJUUC4oQVQpIEFOVElIQU5ETElORyBERVZJQ0VcIl0sdFtcIkctTS1PTUQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxOTV9LElbXCJHLU0tT01FLS0tXCJdPUVbXCJUUC4oQVQpIERJUkVDVElPTkFMXCJdLHRbXCJHLU0tT01FLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MTAseTI6MTQwfSxJW1wiRy1NLU9NUC0tLVwiXT1FW1wiVFAuQU5USVBFUlNPTk5FTCAoQVApIE1JTkVTXCJdLElbXCJHLU0tT01XLS0tXCJdPUVbXCJUUC5XSURFIEFSRUEgTUlORVNcIl0sSVtcIkctTS1PRlMtLS1cIl09RVtcIlRQLk1JTkVGSUVMRFMgU1RBVElDXCJdLHRbXCJHLU0tT0ZTLS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NjAseTI6MTQwfSxJW1wiRy1NLU9IVEwtLVwiXT1FW1wiVFAuVE9XRVIgTE9XXCJdLHRbXCJHLU0tT0hUTC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzAseTI6MTIwfSxJW1wiRy1NLU9IVEgtLVwiXT1FW1wiVFAuVE9XRVIgSElHSFwiXSx0W1wiRy1NLU9IVEgtLVwiXT17eDE6NTAseDI6MTUwLHkxOjMwLHkyOjEyMH0sSVtcIkctTS1CQ1AtLS1cIl09RVtcIlRQLkVOR0lORUVSIFJFR1VMQVRJTkcgUE9JTlRcIl0sdFtcIkctTS1CQ1AtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tU0UtLS0tXCJdPUVbXCJUUC5FQVJUSFdPUksvRk9SVElGSUNBVElPTlwiXSxJW1wiRy1NLVNGLS0tLVwiXT1FW1wiVFAuRk9SVFwiXSxJW1wiRy1NLVNTLS0tLVwiXT1FW1wiVFAuU1VSRkFDRSBTSEVMVEVSXCJdLElbXCJHLU0tU1UtLS0tXCJdPUVbXCJUUC5VTkRFUkdST1VORCBTSEVMVEVSXCJdLElbXCJHLU0tTlotLS0tXCJdPUVbXCJUUC5OVUNMRUFSIERFVE9OQVRJT05TIEdST1VORCBaRVJPXCJdLHRbXCJHLU0tTlotLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTIwfSxJW1wiRy1NLU5GLS0tLVwiXT1FW1wiVFAuTlVDTEVBUiBGQUxMT1VUIFBST0RVQ0lOR1wiXSx0W1wiRy1NLU5GLS0tLVwiXT17eDE6NTAseDI6MTUwLHkxOi0yMH0sSVtcIkctTS1ORUItLS1cIl09RVtcIlRQLlJFTEVBU0UgRVZFTlRTIEJJT0xPR0lDQUxcIl0sdFtcIkctTS1ORUItLS1cIl09e3gxOi0xMCx4MjoxNDAseTE6LTIwfSxJW1wiRy1NLU5FQy0tLVwiXT1FW1wiVFAuUkVMRUFTRSBFVkVOVFMgQ0hFTUlDQUxcIl0sdFtcIkctTS1ORUMtLS1cIl09e3gxOi0yMCx4MjoxNDAseTE6LTIwfSxJW1wiRy1NLU5EUC0tLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVFwiXSx0W1wiRy1NLU5EUC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctTS1OREEtLS1cIl09RVtcIlRQLkFMVEVSTkFURSBERUNPTiBTSVRFL1BPSU5UXCJdLHRbXCJHLU0tTkRBLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLU5EVC0tLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoVFJPT1BTKVwiXSx0W1wiRy1NLU5EVC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctTS1OREUtLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKEVRVUlQTUVOVClcIl0sdFtcIkctTS1OREUtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tTkRCLS0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQgQU5EIFRST09QUylcIl0sdFtcIkctTS1OREItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tTkRPLS0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChPUEVSQVRJT05BTCBERUNPTlRBTUlOQVRJT04pXCJdLHRbXCJHLU0tTkRPLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLU5ERC0tLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoVEhPUk9VR0ggREVDT05UQU1JTkFUSU9OKVwiXSx0W1wiRy1NLU5ERC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRi1QVFMtLS1cIl09RVtcIlRQLlBPSU5UL1NJTkdMRSBUQVJHRVRcIl0sSVtcIkctRi1QVE4tLS1cIl09RVtcIlRQLk5VQ0xFQVIgVEFSR0VUXCJdLElbXCJHLUYtUENGLS0tXCJdPUVbXCJUUC5GSVJFIFNVUFBPUlQgU1RBVElPTlwiXSxJW1wiRy1GLVBDUy0tLVwiXT1FW1wiVFAuU1VSVkVZIENPTlRST0wgUE9JTlRcIl0sdFtcIkctRi1QQ1MtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUYtUENCLS0tXCJdPUVbXCJUUC5GSVJJTkcgUE9JTlRcIl0sdFtcIkctRi1QQ0ItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUYtUENSLS0tXCJdPUVbXCJUUC5SRUxPQUQgUE9JTlRcIl0sdFtcIkctRi1QQ1ItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUYtUENILS0tXCJdPUVbXCJUUC5ISURFIFBPSU5UXCJdLHRbXCJHLUYtUENILS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1GLVBDTC0tLVwiXT1FW1wiVFAuTEFVTkNIIFBPSU5UXCJdLHRbXCJHLUYtUENMLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBYLS0tLVwiXT1FW1wiVFAuQU1CVUxBTkNFIEVYQ0hBTkdFIFBPSU5UXCJdLHRbXCJHLVMtUFgtLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBDLS0tLVwiXT1FW1wiVFAuQ0FOTklCQUxJWkFUSU9OIFBPSU5UXCJdLHRbXCJHLVMtUEMtLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBZLS0tLVwiXT1FW1wiVFAuQ0FTVUFMVFkgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1TLVBZLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QVC0tLS1cIl09RVtcIlRQLkNJVklMSUFOIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctUy1QVC0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUEQtLS0tXCJdPUVbXCJUUC5ERVRBSU5FRSBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLVMtUEQtLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBFLS0tLVwiXT1FW1wiVFAuRVBXIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctUy1QRS0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUEwtLS0tXCJdPUVbXCJUUC5MT0dJU1RJQ1MgUkVMRUFTRSBQT0lOVFwiXSx0W1wiRy1TLVBMLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QTS0tLS1cIl09RVtcIlRQLk1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctUy1QTS0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFItLS0tXCJdPUVbXCJUUC5SRUFSTSwgUkVGVUVMIEFORCBSRVNVUFBMWSBQT0lOVFwiXSx0W1wiRy1TLVBSLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QVS0tLS1cIl09RVtcIlRQLlJFRlVFTCBPTiBUSEUgTU9WRSBQT0lOVFwiXSx0W1wiRy1TLVBVLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QTy0tLS1cIl09RVtcIlRQLlRSQUZGSUMgQ09OVFJPTCBQT1NUXCJdLHRbXCJHLVMtUE8tLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBJLS0tLVwiXT1FW1wiVFAuVFJBSUxFUiBUUkFOU0ZFUiBQT0lOVFwiXSx0W1wiRy1TLVBJLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QTi0tLS1cIl09RVtcIlRQLlVOSVQgTUFJTlRFTkFOQ0UgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1TLVBOLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU1otLS1cIl09RVtcIlRQLlNVUFBMWSBQT0lOVFwiXSx0W1wiRy1TLVBTWi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0EtLS1cIl09RVtcIlRQLlNQIENMQVNTIElcIl0sdFtcIkctUy1QU0EtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNCLS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJSVwiXSx0W1wiRy1TLVBTQi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0MtLS1cIl09RVtcIlRQLlNQIENMQVNTIElJSVwiXSx0W1wiRy1TLVBTQy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0QtLS1cIl09RVtcIlRQLlNQIENMQVNTIElWXCJdLHRbXCJHLVMtUFNELS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBTRS0tLVwiXT1FW1wiVFAuU1AgQ0xBU1MgVlwiXSx0W1wiRy1TLVBTRS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0YtLS1cIl09RVtcIlRQLlNQIENMQVNTIFZJXCJdLHRbXCJHLVMtUFNGLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBTRy0tLVwiXT1FW1wiVFAuU1AgQ0xBU1MgVklJXCJdLHRbXCJHLVMtUFNHLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBTSC0tLVwiXT1FW1wiVFAuU1AgQ0xBU1MgVklJSVwiXSx0W1wiRy1TLVBTSC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0ktLS1cIl09RVtcIlRQLlNQIENMQVNTIElYXCJdLHRbXCJHLVMtUFNJLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBTSi0tLVwiXT1FW1wiVFAuU1AgQ0xBU1MgWFwiXSx0W1wiRy1TLVBTSi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QQVMtLS1cIl09RVtcIlRQLkFNTVVOSVRJT04gU1VQUExZIFBPSU5UIChBU1ApXCJdLHRbXCJHLVMtUEFTLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBBVC0tLVwiXT1FW1wiVFAuQU1NVU5JVElPTiBUUkFOU0ZFUiBQT0lOVCAoQVRQKVwiXSx0W1wiRy1TLVBBVC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctTy1FRC0tLS1cIl09RVtcIlRQLkRJVENIRUQgQUlSQ1JBRlRcIl0sSVtcIkctTy1FUC0tLS1cIl09RVtcIlRQLlBFUlNPTiBJTiBXQVRFUlwiXSxJW1wiRy1PLUVWLS0tLVwiXT1FW1wiVFAuRElTVFJFU1NFRCBWRVNTRUxcIl0sSVtcIkctTy1ITS0tLS1cIl09RVtcIlRQLlNFQSBNSU5FTElLRVwiXSx0W1wiRy1PLUhNLS0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE1MH0sSVtcIkctTy1ISS0tLS1cIl09RVtcIlRQLklDRUJFUkdcIl0sdFtcIkctTy1ISS0tLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLU8tSE8tLS0tXCJdPUVbXCJUUC5PSUwgUklHL1BMQVRGT1JNXCJdLHRbXCJHLU8tSE8tLS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1PLVNCLS0tLVwiXT1FW1wiVFAuQk9UVE9NIFJFVFVSTlwiXSx0W1wiRy1PLVNCLS0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjEwMH0sSVtcIkctTy1TQk0tLS1cIl09RVtcIlRQLklOU1RBTExBVElPTi9NQU5NQURFXCJdLHRbXCJHLU8tU0JNLS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTAwfSxJW1wiRy1PLVNCTi0tLVwiXT1FW1wiVFAuQk9UVE9NIFJFVFVSTlwiXSx0W1wiRy1PLVNCTi0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjEwMH0sSVtcIkctTy1TQlctLS1cIl09RVtcIlRQLldSRUNLLCBOT04gREFOR0VST1VTXCJdLHRbXCJHLU8tU0JXLS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NzAseTI6MTMwfSxJW1wiRy1PLVNCWC0tLVwiXT1FW1wiVFAuV1JFQ0ssIERBTkdFUk9VU1wiXSx0W1wiRy1PLVNCWC0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjcwLHkyOjEzMH0sSVtcIkctTy1TTS0tLS1cIl09RVtcIlRQLk1BUklORSBMSUZFXCJdLHRbXCJHLU8tU00tLS0tXCJdPXt4MToxMDAseDI6MjIwLHkxOjcwLHkyOjEzMH0sSVtcIkctTy1TUy0tLS1cIl09RVtcIlRQLlNFQSBBTk9NQUxZXCJdLHRbXCJHLU8tU1MtLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzAseTI6MTIwfSxJW1wiRy1PLUZBLS0tLVwiXT1FW1wiVFAuRklYIEFDT1VTVElDXCJdLElbXCJHLU8tRkUtLS0tXCJdPUVbXCJUUC5GSVggRUxFQ1RSTy1NQUdORVRJQ1wiXSxJW1wiRy1PLUZPLS0tLVwiXT1FW1wiVFAuRklYIEVMRUNUUk8tT1BUSUNBTFwiXX19O3ZhciBCPVtMLHksaCx4LFUscCxtLEYse3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltWXSxsYWJlbHM6ZnVuY3Rpb24oSSl7SVtcIkctVC1HRC0tLS1cIl09e30sSVtcIkctVC1HSS0tLS1cIl09e30sSVtcIkctVC1HTi0tLS1cIl09e30sSVtcIkctQy1NR1BGRS1cIl09e30sSVtcIkctQy1NR1BGQS1cIl09e30sSVtcIkctQy1NR1BGTy1cIl09e30sSVtcIkctQy1NR1BJLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MzAsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtTUFBUC0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1NQUFDLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU1BQVUtLVwiXT17fSxJW1wiRy1DLU1BQUQtLVwiXT17fSxJW1wiRy1DLU1ETi0tLVwiXT17fSxJW1wiRy1DLU1NUFQtLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjExNSx5Ojg1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU1NUE8tLVwiXT17fSxJW1wiRy1DLU1NUE9DLVwiXT17fSxJW1wiRy1DLU1NUE9SLVwiXT17fSxJW1wiRy1DLU1NUE9GLVwiXT17fSxJW1wiRy1DLU1NUE9TLVwiXT17fSxJW1wiRy1DLU1NUE9OLVwiXT17fSxJW1wiRy1DLU1NUE9OLVwiXT17fSxJW1wiRy1DLU1NUE9OLVwiXT17fSxJW1wiRy1DLU1PUEQtLVwiXT17fSxJW1wiRy1DLUJPQVRELVwiXT17fSxJW1wiRy1DLUJPQUItLVwiXT17fSxJW1wiRy1DLUJPQU1BLVwiXT17fSxJW1wiRy1DLUJPQU1ULVwiXT17fSxJW1wiRy1DLUJPQU1ELVwiXT17fSxJW1wiRy1DLUJPQU1DLVwiXT17fSxJW1wiRy1DLUJPQU1VLVwiXT17fSxJW1wiRy1DLUJPQU1OLVwiXT17fSxJW1wiRy1DLUJPQUlQLVwiXT17fSxJW1wiRy1DLUJPQUlDLVwiXT17fSxJW1wiRy1DLUJPQUlOLVwiXT17fSxJW1wiRy1DLUJPQUlTLVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTY1LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLUJPQUlILVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTY1LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLUJPQUlELVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTY1LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLUJPQVYtLVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTY1LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLUJZQ0ctLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQlNFLS0tXCJdPXt9LElbXCJHLUMtQlNGLS0tXCJdPXt9LElbXCJHLUMtQlNILS0tXCJdPXt9LElbXCJHLUMtQlNVLS0tXCJdPXt9LElbXCJHLUMtQldOLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjIwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjIwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTQwLGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozNX0sdHlwZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6NjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMDAsZm9udHNpemU6MzV9fSxJW1wiRy1DLUJXRS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToyMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToyMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTAwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE0MCxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjUsZm9udHNpemU6MzV9LHR5cGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjYwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctQy1CV0ktLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MjAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MjAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwMCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNDAsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjM1fSx0eXBlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTo2MCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwMCxmb250c2l6ZTozNX19LElbXCJHLUMtQldGLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjIwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjIwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTQwLGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozNX0sdHlwZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6NjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMDAsZm9udHNpemU6MzV9fSxJW1wiRy1DLUJXUC0tLVwiXT17fSxJW1wiRy1DLUJXRFAtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldEQS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1CV0RULS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJXREUtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldEUy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1CV0RPLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJXREctLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldERU0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1CV0RURi1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUZTVFAtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseToxNDUsZm9udHNpemU6NDB9LGFsdGl0dWRlRGVwdGg6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo4MCx5OjE0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjEyMCx5OjgwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1GU1MtLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjUseToxMTUsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtRkFVLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtU1BBLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUEMtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQWS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BULS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUEQtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQRS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BMLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUE0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BVLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUE8tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQSS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BOLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFULS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRQS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUItLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFDLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRRC0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUUtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFGLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRRy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUgtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFJLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRSi0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQTUEtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BNVC0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1PWC0tLS1cIl09e30sSVtcIkctQy1PWFJOLS1cIl09e30sSVtcIkctQy1PWFJELS1cIl09e30sSVtcIkctQy1PWFVELS1cIl09e30sSVtcIkctQy1PWFVCLS1cIl09e30sSVtcIkctQy1PWFVMLS1cIl09e30sSVtcIkctQy1PWFVTLS1cIl09e30sSVtcIkctQy1PWFdBLS1cIl09e30sSVtcIkctQy1PWFdELS1cIl09e30sSVtcIkctQy1PWFdFLS1cIl09e30sSVtcIkctQy1PWFdHLS1cIl09e30sSVtcIkctQy1PWFdNLS1cIl09e30sSVtcIkctQy1PWFdJLS1cIl09e30sSVtcIkctQy1PWFdQLS1cIl09e30sSVtcIkctQy1PWFktLS1cIl09e30sSVtcIkctQy1PWFlQLS1cIl09e30sSVtcIkctQy1PWFlELS1cIl09e30sSVtcIkctQy1PWFlMLS1cIl09e30sSVtcIkctQy1PWFlDLS1cIl09e30sSVtcIkctQy1PWFlTLS1cIl09e30sSVtcIkctQy1PWFlCLS1cIl09e30sSVtcIkctQy1PWFlBLS1cIl09e30sSVtcIkctQy1PWFlWLS1cIl09e30sSVtcIkctQy1PWFlULS1cIl09e30sSVtcIkctQy1PWFlSLS1cIl09e30sSVtcIkctQy1PWFlLLS1cIl09e30sSVtcIkctQy1PWE4tLS1cIl09e30sSVtcIkctQy1PWEgtLS1cIl09e30sSVtcIkctQy1PWEhRLS1cIl09e30sSVtcIkctQy1PWEhBLS1cIl09e30sSVtcIkctQy1PWEhZLS1cIl09e30sSVtcIkctQy1PWEhYLS1cIl09e30sSVtcIkctQy1PWFItLS1cIl09e30sSVtcIkctQy1PWFJSLS1cIl09e30sSVtcIkctQy1PWFJELS1cIl09e30sSVtcIkctQy1PWFJXLS1cIl09e30sSVtcIkctQy1PWFJQLS1cIl09e30sSVtcIkctQy1PWFJULS1cIl09e30sSVtcIkctQy1PWFNUQy1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6OTIsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI4LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9YU1RDUFwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo5Mixmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjgsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT1hTVENBXCJdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjkyLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyOCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PWFNUUi1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6OTIsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI4LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9YU1RILVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo5Mixmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjgsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT1hTVFMtXCJdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjkyLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyOCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PWFNUU0FcIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6OTIsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI4LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9YUy0tLVwiXT17fSxJW1wiRy1DLU9YU0EtLVwiXT17fSxJW1wiRy1DLU9YU0QtLVwiXT17fSxJW1wiRy1DLU9YU0MtLVwiXT17fSxJW1wiRy1DLU9YQUMtLVwiXT17fSxJW1wiRy1DLU9YQUEtLVwiXT17fSxJW1wiRy1DLU9YQVQtLVwiXT17fSxJW1wiRy1DLU9YQUstLVwiXT17fSxJW1wiRy1DLU9YQUYtLVwiXT17fSxJW1wiRy1DLU9YQUgtLVwiXT17fSxJW1wiRy1DLU9YQU8tLVwiXT17fSxJW1wiRy1DLU9YQVItLVwiXT17fSxJW1wiRy1DLU9YQVAtLVwiXT17fSxJW1wiRy1DLU9YQU0tLVwiXT17fSxJW1wiRy1DLU9YQVMtLVwiXT17fSxJW1wiRy1DLU9YQUQtLVwiXT17fSxJW1wiRy1DLU9HLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT0dDLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1PR1AtLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NDAsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT0dULS0tXCJdPXt9LElbXCJHLUMtT0dELS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PR0wtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLU9HTi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT0dSLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1PR1MtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLU9HSS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT0dXLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI1LGZvbnRzaXplOjcwfX0sSVtcIkctTy1WQS0tLS1cIl09e30sSVtcIkctTy1WUi0tLS1cIl09e30sSVtcIkctTy1WRS0tLS1cIl09e30sSVtcIkctTy1WQi0tLS1cIl09e30sSVtcIkctTy1WWS0tLS1cIl09e30sSVtcIkctTy1WRC0tLS1cIl09e30sSVtcIkctTy1WSS0tLS1cIl09e30sSVtcIkctTy1WTS0tLS1cIl09e30sSVtcIkctTy1WSy0tLS1cIl09e30sSVtcIkctTy1WUy0tLS1cIl09e30sSVtcIkctTy1WUC0tLS1cIl09e30sSVtcIkctTy1WVS0tLS1cIl09e30sSVtcIkctTy1WQy0tLS1cIl09e30sSVtcIkctTy1WSC0tLS1cIl09e30sSVtcIkctTy1WRi0tLS1cIl09e30sSVtcIkctTy1WTy0tLS1cIl09e30sSVtcIkctTy1WTC0tLS1cIl09e30sSVtcIkctTy1WWC0tLS1cIl09e30sSVtcIkctTy1WWi0tLS1cIl09e30sSVtcIkctTy1MQi0tLS1cIl09e30sSVtcIkctTy1MRy0tLS1cIl09e30sSVtcIkctTy1MVy0tLS1cIl09e30sSVtcIkctTy1QUi0tLS1cIl09e30sSVtcIkctTy1QUkItLS1cIl09e30sSVtcIkctTy1QVC0tLS1cIl09e30sSVtcIkctTy1QQy0tLS1cIl09e30sSVtcIkctTy1QQ1UtLS1cIl09e30sSVtcIkctTy1QRC0tLS1cIl09e30sSVtcIkctTy1QTS0tLS1cIl09e30sSVtcIkctTy1QSC0tLS1cIl09e30sSVtcIkctTy1QSFktLS1cIl09e30sSVtcIkctTy1QSFctLS1cIl09e30sSVtcIkctTy1QSEctLS1cIl09e30sSVtcIkctTy1QSFQtLS1cIl09e30sSVtcIkctTy1QRy0tLS1cIl09e30sSVtcIkctTy1QUy0tLS1cIl09e30sSVtcIkctTy1QRi0tLS1cIl09e30sSVtcIkctTy1QSS0tLS1cIl09e30sSVtcIkctTy1QRS0tLS1cIl09e30sSVtcIkctTy1QWC0tLS1cIl09e30sSVtcIkctTy1QSlYtLS1cIl09e30sSVtcIkctTy1QSkEtLS1cIl09e30sSVtcIkctTy1QSkItLS1cIl09e30sSVtcIkctTy1QSy0tLS1cIl09e30sSVtcIkctTy1QQS0tLS1cIl09e30sSVtcIkctTy1QTy0tLS1cIl09e30sSVtcIkctTy1JUi0tLS1cIl09e30sSVtcIkctTy1JUy0tLS1cIl09e30sSVtcIkctTy1JRy0tLS1cIl09e30sSVtcIkctTy1JVi0tLS1cIl09e30sSVtcIkctTy1JSy0tLS1cIl09e30sSVtcIkctTy1JRC0tLS1cIl09e30sSVtcIkctTy1JRi0tLS1cIl09e319LGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJHLVQtR0QtLS0tXCJdPUVbXCJUUC5ERVNUUk9ZXCJdLHRbXCJHLVQtR0QtLS0tXCJdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbXCJHLVQtR0ktLS0tXCJdPUVbXCJUUC5JTlRFUkRJQ1RcIl0sdFtcIkctVC1HSS0tLS1cIl09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVtcIkctVC1HTi0tLS1cIl09RVtcIlRQLk5FVVRSQUxJWkVcIl0sdFtcIkctVC1HTi0tLS1cIl09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1NR1BGRS1cIl09RVtcIlRQLkZJWCBFTEVDVFJPLU1BR05FVElDXCJdLElbXCJHLUMtTUdQRkEtXCJdPUVbXCJUUC5GSVggQUNPVVNUSUNcIl0sSVtcIkctQy1NR1BGTy1cIl09RVtcIlRQLkZJWCBFTEVDVFJPLU9QVElDQUxcIl0sSVtcIkctQy1NR1BJLS1cIl09RVtcIlRQLlBPSU5UIE9GIElOVEVSRVNUXCJdLHRbXCJHLUMtTUdQSS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6LTI1fSxJW1wiRy1DLU1BQVAtLVwiXT1FW1wiVFAuQUlSIENPTlRST0wgUE9JTlQgKEFDUClcIl0sdFtcIkctQy1NQUFQLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtTUFBQy0tXCJdPUVbXCJUUC5DT01NVU5JQ0FUSU9OUyBDSEVDS1BPSU5UXCJdLHRbXCJHLUMtTUFBQy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU1BQVUtLVwiXT1FW1wiVFAuUFVMTC1VUCBQT0lOVFwiXSx0W1wiRy1DLU1BQVUtLVwiXT17eDE6NTAseDI6MjQwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1NQUFELS1cIl09RVtcIlRQLkRPV05FRCBBSVJDUkVXIFBJQ0tVUCBQT0lOVFwiXSx0W1wiRy1DLU1BQUQtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1NRE4tLS1cIl09RVtcIlRQLkRVTU1ZIE1JTkVGSUVMRFwiXSx0W1wiRy1DLU1ETi0tLVwiXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNDB9LElbXCJHLUMtTU1QVC0tXCJdPUVbXCJUUC5UQVJHRVQgUkVGRVJFTkNFXCJdLElbXCJHLUMtTU1QTy0tXCJdPUVbXCJUUC5PQlNFUlZBVElPTiBQT1NUL09VVFBPU1RcIl0sdFtcIkctQy1NTVBPLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUMtTU1QT0MtXCJdPUVbXCJUUC5DT01CQVQgT1VUUE9TVFwiXSx0W1wiRy1DLU1NUE9DLVwiXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVtcIkctQy1NTVBPUi1cIl09RVtcIlRQLk9CU0VSVkFUSU9OIFBPU1QvUkVDT05OQUlTU0FOQ0VcIl0sdFtcIkctQy1NTVBPUi1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUMtTU1QT0YtXCJdPUVbXCJUUC5GT1JXQVJEIE9CU0VSVkVSIFBPU0lUSU9OXCJdLHRbXCJHLUMtTU1QT0YtXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1DLU1NUE9TLVwiXT1FW1wiVFAuU0VOU09SIE9VVFBPU1RcIl0sdFtcIkctQy1NTVBPUy1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUMtTU1QT04tXCJdPUVbXCJUUC5DQlJOIE9CU0VSVkFUSU9OIFBPU1RcIl0sdFtcIkctQy1NTVBPTi1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUMtTU9QRC0tXCJdPUVbXCJUUC5QT0lOVCBPRiBERVBBUlRVUkVcIl0sdFtcIkctQy1NT1BELS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQk9BVEQtXCJdPUVbXCJUUC5GSVhFRCBBTkQgUFJFRkFCUklDQVRFRFwiXSx0W1wiRy1DLUJPQVRELVwiXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJW1wiRy1DLUJPQUItLVwiXT1FW1wiVFAuQk9PQlkgVFJBUFwiXSxJW1wiRy1DLUJPQU1BLVwiXT1FW1wiVFAuQU5USVBFUlNPTk5FTCAoQVApIE1JTkVTXCJdLElbXCJHLUMtQk9BTVQtXCJdPUVbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl0sSVtcIkctQy1CT0FNRC1cIl09RVtcIlRQLihBVCkgQU5USUhBTkRMSU5HIERFVklDRVwiXSx0W1wiRy1DLUJPQU1ELVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE5NX0sSVtcIkctQy1CT0FNQy1cIl09RVtcIlRQLihBVCkgRElSRUNUSU9OQUxcIl0sdFtcIkctQy1CT0FNQy1cIl09e3gxOjYwLHgyOjE0MCx5MToxMCx5MjoxNDB9LElbXCJHLUMtQk9BTVUtXCJdPUVbXCJUUC5VTlNQRUNJRklFRCBNSU5FXCJdLElbXCJHLUMtQk9BTVctXCJdPUVbXCJUUC5XSURFIEFSRUEgTUlORVNcIl0sSVtcIkctQy1CT0FJUC1cIl09RVtcIlRQLlBMQU5ORUQgTUlORUZJRUxEXCJdLHRbXCJHLUMtQk9BSVAtXCJdPXt4MTo0MCx4MjoxNjAseTE6NjAseTI6MTQwfSxJW1wiRy1DLUJPQUlDLVwiXT1FW1wiVFAuTUlORUZJRUxEUyBTVEFUSUNcIl0sdFtcIkctQy1CT0FJQy1cIl09e3gxOjQwLHgyOjE2MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtQk9BSU4tXCJdPUVbXCJUUC5BTlRJVEFOSyAoQVQpIE1JTkVGSUVMRFwiXSx0W1wiRy1DLUJPQUlOLVwiXT17eDE6NDAseDI6MTYwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1CT0FJUy1cIl09RVtcIlRQLlNDQVRURVJBQkxFIE1JTkVTXCJdLHRbXCJHLUMtQk9BSVMtXCJdPXt4MTo0MCx4MjoxNjAseTE6MjAseTI6MTQwfSxJW1wiRy1DLUJPQUlILVwiXT1FW1wiVFAuQU5USVBFUlNPTk5FTCAoQVApIE1JTkVGSUVMRFwiXSx0W1wiRy1DLUJPQUlILVwiXT17eDE6NDAseDI6MTYwLHkxOjIwLHkyOjE0MH0sSVtcIkctQy1CT0FJRC1cIl09RVtcIlRQLlNDQVRURVJBQkxFIE1JTkVGSUVMRCBXSVRIIFNFTEYtREVTVFJVQ1RcIl0sdFtcIkctQy1CT0FJRC1cIl09e3gxOjQwLHgyOjE2MCx5MToyMCx5MjoxNDB9LElbXCJHLUMtQk9BVi0tXCJdPUVbXCJUUC5WT0xDQU5PIE1JTkVGSUVMRFwiXSx0W1wiRy1DLUJPQVYtLVwiXT17eDE6NDAseDI6MTYwLHkxOjIwLHkyOjE0MH0sSVtcIkctQy1CWUNHLS1cIl09RVtcIlRQLkVOR0lORUVSIFJFR1VMQVRJTkcgUE9JTlRcIl0sdFtcIkctQy1CWUNHLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQlNFLS0tXCJdPUVbXCJUUC5FQVJUSFdPUksvRk9SVElGSUNBVElPTlwiXSxJW1wiRy1DLUJTRi0tLVwiXT1FW1wiVFAuRk9SVFwiXSxJW1wiRy1DLUJTSC0tLVwiXT1FW1wiVFAuU1VSRkFDRSBTSEVMVEVSXCJdLElbXCJHLUMtQlNVLS0tXCJdPUVbXCJUUC5VTkRFUkdST1VORCBTSEVMVEVSXCJdLElbXCJHLUMtQldOLS0tXCJdPUVbXCJUUC5OVUNMRUFSIERFVE9OQVRJT05TIEdST1VORCBaRVJPXCJdLHRbXCJHLUMtQldOLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTIwfSxJW1wiRy1DLUJXRS0tLVwiXT1FW1wiVFAuTlVDTEVBUiBERVRPTkFUSU9OUyBHUk9VTkQgWkVST1wiXSx0W1wiRy1DLUJXRS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0yMH0sSVtcIkctQy1CV0ktLS1cIl09RVtcIlRQLk5VQ0xFQVIgREVUT05BVElPTlMgR1JPVU5EIFpFUk8gUExBTk5FRFwiXSx0W1wiRy1DLUJXSS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0yMH0sSVtcIkctQy1CV0YtLS1cIl09RVtcIlRQLk5VQ0xFQVIgREVUT05BVElPTlMgR1JPVU5EIFpFUk8gUExBTk5FRFwiXSx0W1wiRy1DLUJXRi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0yMH0sSVtcIkctQy1CV1AtLS1cIl09RVtcIlRQLk5VQ0xFQVIgRkFMTE9VVCBQUk9EVUNJTkdcIl0sdFtcIkctQy1CV1AtLS1cIl09e3gxOjUwLHgyOjE1MCx5MTotMjB9LElbXCJHLUMtQldEUC0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UXCJdLHRbXCJHLUMtQldEUC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJXREEtLVwiXT1FW1wiVFAuQUxURVJOQVRFIERFQ09OIFNJVEUvUE9JTlRcIl0sdFtcIkctQy1CV0RBLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQldEVC0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUUk9PUFMpXCJdLHRbXCJHLUMtQldEVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJXREUtLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UKVwiXSx0W1wiRy1DLUJXREUtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RTLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKEVRVUlQTUVOVCBBTkQgVFJPT1BTKVwiXSx0W1wiRy1DLUJXRFMtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RPLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKE9QRVJBVElPTkFMIERFQ09OVEFNSU5BVElPTilcIl0sdFtcIkctQy1CV0RPLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQldERy0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUSE9ST1VHSCBERUNPTlRBTUlOQVRJT04pXCJdLHRbXCJHLUMtQldERy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJXREVNLVwiXT1FW1wiVFAuREVDT04gUE9JTlQgKE1BSU4pIEVRVUlQTUVOVFwiXSx0W1wiRy1DLUJXREVNLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RURi1cIl09RVtcIlRQLkRFQ09OIFBPSU5UIChGT1JXQVJEKSBUUk9PUFNcIl0sdFtcIkctQy1CV0RURi1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtRlNUUC0tXCJdPUVbXCJUUC5QT0lOVC9TSU5HTEUgVEFSR0VUXCJdLElbXCJHLUMtRlNTLS0tXCJdPUVbXCJUUC5GSVJFIFNVUFBPUlQgU1RBVElPTlwiXSxJW1wiRy1DLUZBVS0tLVwiXT1FW1wiVFAuTlVDTEVBUiBUQVJHRVRcIl0sSVtcIkctQy1TUEEtLS1cIl09RVtcIlRQLkFNQlVMQU5DRSBFWENIQU5HRSBQT0lOVFwiXSx0W1wiRy1DLVNQQS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUEMtLS1cIl09RVtcIlRQLkNBTk5JQkFMSVpBVElPTiBQT0lOVFwiXSx0W1wiRy1DLVNQQy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFktLS1cIl09RVtcIlRQLkNBU1VBTFRZIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctQy1TUFktLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BULS0tXCJdPUVbXCJUUC5DSVZJTElBTiBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtU1BULS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQRC0tLVwiXT1FW1wiVFAuREVUQUlORUUgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1DLVNQRC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUEUtLS1cIl09RVtcIlRQLkVQVyBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtU1BFLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQTC0tLVwiXT1FW1wiVFAuTE9HSVNUSUNTIFJFTEVBU0UgUE9JTlRcIl0sdFtcIkctQy1TUEwtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BNLS0tXCJdPUVbXCJUUC5NQUlOVEVOQU5DRSBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtU1BNLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUi0tLVwiXT1FW1wiVFAuUkVBUk0sIFJFRlVFTCBBTkQgUkVTVVBQTFkgUE9JTlRcIl0sdFtcIkctQy1TUFItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BVLS0tXCJdPUVbXCJUUC5SRUZVRUwgT04gVEhFIE1PVkUgUE9JTlRcIl0sdFtcIkctQy1TUFUtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BPLS0tXCJdPUVbXCJUUC5UUkFGRklDIENPTlRST0wgUE9TVFwiXSx0W1wiRy1DLVNQTy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUEktLS1cIl09RVtcIlRQLlRSQUlMRVIgVFJBTlNGRVIgUE9JTlRcIl0sdFtcIkctQy1TUEktLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BOLS0tXCJdPUVbXCJUUC5VTklUIE1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctQy1TUE4tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRVC0tXCJdPUVbXCJUUC5TVVBQTFkgUE9JTlRcIl0sdFtcIkctQy1TUFFULS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRQS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJXCJdLHRbXCJHLUMtU1BRQS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUItLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSUlcIl0sdFtcIkctQy1TUFFCLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRQy0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJSUlcIl0sdFtcIkctQy1TUFFDLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRRC0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJVlwiXSx0W1wiRy1DLVNQUUQtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFFFLS1cIl09RVtcIlRQLlNQIENMQVNTIFZcIl0sdFtcIkctQy1TUFFFLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRRi0tXCJdPUVbXCJUUC5TUCBDTEFTUyBWSVwiXSx0W1wiRy1DLVNQUUYtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFFHLS1cIl09RVtcIlRQLlNQIENMQVNTIFZJSVwiXSx0W1wiRy1DLVNQUUctLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFFILS1cIl09RVtcIlRQLlNQIENMQVNTIFZJSUlcIl0sdFtcIkctQy1TUFFILS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRSS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJWFwiXSx0W1wiRy1DLVNQUUktLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFFKLS1cIl09RVtcIlRQLlNQIENMQVNTIFhcIl0sdFtcIkctQy1TUFFKLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BNQS0tXCJdPUVbXCJUUC5BTU1VTklUSU9OIFNVUFBMWSBQT0lOVCAoQVNQKVwiXSx0W1wiRy1DLVNQTUEtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUE1ULS1cIl09RVtcIlRQLkFNTVVOSVRJT04gVFJBTlNGRVIgUE9JTlQgKEFUUClcIl0sdFtcIkctQy1TUE1ULS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT1gtLS0tXCJdPUVbXCJUUC5TUEVDSUFMIFBPSU5UXCJdLHRbXCJHLUMtT1gtLS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YUk4tLVwiXT1FW1wiVFAuTkFWSUdBVElPTkFMIFJFRkVSRU5DRVwiXSx0W1wiRy1DLU9YUk4tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWFVELS1cIl09RVtcIlRQLkRBVFVNXCJdLHRbXCJHLUMtT1hVRC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YVUItLVwiXT1FW1wiVFAuQlJJRUYgQ09OVEFDVFwiXSx0W1wiRy1DLU9YVUItLVwiXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJW1wiRy1DLU9YVUwtLVwiXT1FW1wiVFAuTE9TVCBDT05UQUNUXCJdLHRbXCJHLUMtT1hVTC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MCx5MjoxMDB9LElbXCJHLUMtT1hVUy0tXCJdPUVbXCJUUC5TSU5LRVJcIl0sdFtcIkctQy1PWFVTLS1cIl09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVtcIkctQy1PWFdBLS1cIl09RVtcIlRQLkFJTSBQT0lOVFwiXSx0W1wiRy1DLU9YV0EtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWFdELS1cIl09RVtcIlRQLkRST1AgUE9JTlRcIl0sdFtcIkctQy1PWFdELS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxMjB9LElbXCJHLUMtT1hXRS0tXCJdPUVbXCJUUC5FTlRSWSBQT0lOVFwiXSx0W1wiRy1DLU9YV0UtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwfSxJW1wiRy1DLU9YV0ctLVwiXT1FW1wiVFAuR1JPVU5EIFpFUk9cIl0sdFtcIkctQy1PWFdHLS1cIl09e3gxOjUwLHgyOjE1MCx5MTozMH0sSVtcIkctQy1PWFdNLS1cIl09RVtcIlRQLk1TTCBERVRFQ1QgUE9JTlRcIl0sdFtcIkctQy1PWFdNLS1cIl09e3gxOjUwLHgyOjE1MCx5MTozMH0sSVtcIkctQy1PWFdJLS1cIl09RVtcIlRQLklNUEFDVCBQT0lOVFwiXSx0W1wiRy1DLU9YV0ktLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWFdQLS1cIl09RVtcIlRQLlBSRURJQ1RFRCBJTVBBQ1QgUE9JTlRcIl0sdFtcIkctQy1PWFdQLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hZLS0tXCJdPUVbXCJUUC5TT05PQlVPWVwiXSx0W1wiRy1DLU9YWS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZUC0tXCJdPUVbXCJUUC5TT05PQlVPWSBQQVRURVJOIENFTlRFUlwiXSx0W1wiRy1DLU9YWVAtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZRC0tXCJdPUVbXCJUUC5TT05PQlVPWSBESUZBUlwiXSx0W1wiRy1DLU9YWUQtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZTC0tXCJdPUVbXCJUUC5TT05PQlVPWSBMT0ZBUlwiXSx0W1wiRy1DLU9YWUwtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZQy0tXCJdPUVbXCJUUC5TT05PQlVPWSBDQVNTXCJdLHRbXCJHLUMtT1hZQy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctQy1PWFlTLS1cIl09RVtcIlRQLlNPTk9CVU9ZIERJQ0FTU1wiXSx0W1wiRy1DLU9YWVMtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZQi0tXCJdPUVbXCJUUC5TT05PQlVPWSBCVFwiXSx0W1wiRy1DLU9YWUItLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZQS0tXCJdPUVbXCJUUC5TT05PQlVPWSBBTk1cIl0sdFtcIkctQy1PWFlBLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWVYtLVwiXT1FW1wiVFAuU09OT0JVT1kgVkxBRFwiXSx0W1wiRy1DLU9YWVYtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZVC0tXCJdPUVbXCJUUC5TT05PQlVPWSBBVEFDXCJdLHRbXCJHLUMtT1hZVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctQy1PWFlSLS1cIl09RVtcIlRQLlNPTk9CVU9ZIFJPXCJdLHRbXCJHLUMtT1hZUi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctQy1PWFlLLS1cIl09RVtcIlRQLlNPTk9CVU9ZIEtJTkdQSU5cIl0sdFtcIkctQy1PWFlLLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YTi0tLVwiXT1FW1wiVFAuRk9STUFUSU9OXCJdLHRbXCJHLUMtT1hOLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YSC0tLVwiXT1FW1wiVFAuSEFSQk9SXCJdLHRbXCJHLUMtT1hILS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YSFEtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIFFcIl0sdFtcIkctQy1PWEhRLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hIQS0tXCJdPUVbXCJUUC5IQVJCT1IgUE9JTlQgQVwiXSx0W1wiRy1DLU9YSEEtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWEhZLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBZXCJdLHRbXCJHLUMtT1hIWS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YSFgtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIFhcIl0sdFtcIkctQy1PWEhYLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hSLS0tXCJdPUVbXCJUUC5ST1VURVwiXSx0W1wiRy1DLU9YUi0tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFJSLS1cIl09RVtcIlRQLlJPVVRFIFJFTkRFWlZPVVNcIl0sdFtcIkctQy1PWFJSLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUMtT1hSRC0tXCJdPUVbXCJUUC5ST1VURSBESVZFUlNJT05TXCJdLHRbXCJHLUMtT1hSRC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1DLU9YUlctLVwiXT1FW1wiVFAuUk9VVEUgV0FZUE9JTlRcIl0sdFtcIkctQy1PWFJXLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUMtT1hSUC0tXCJdPUVbXCJUUC5ST1VURSBQSU1cIl0sdFtcIkctQy1PWFJQLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbXCJHLUMtT1hSVC0tXCJdPUVbXCJUUC5ST1VURSBQT0lOVCBSXCJdLHRbXCJHLUMtT1hSVC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1DLU9YU1RDLVwiXT1FW1wiVFAuQ09NQkFUQU5UIFNUQVRJT05cIl0sdFtcIkctQy1PWFNUQy1cIl09e3gxOi0xNSx4MjoxNDAseTE6NjAseTI6MTQwfSxJW1wiRy1DLU9YU1RDUFwiXT1FW1wiVFAuUElDS0VUIFNUQVRJT05cIl0sdFtcIkctQy1PWFNUQ1BcIl09e3gxOi0xNSx4MjoxNDAseTE6NjAseTI6MTQwfSxJW1wiRy1DLU9YU1RDQVwiXT1FW1wiVFAuQVNXIFNISVAgU1RBVElPTlwiXSx0W1wiRy1DLU9YU1RDQVwiXT17eDE6LTE1LHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtT1hTVFItXCJdPUVbXCJUUC5SRVBMRU5JU0hNRU5UIEFUIFNFQSAoUkFTKSBTVEFUSU9OXCJdLHRbXCJHLUMtT1hTVFItXCJdPXt4MTotMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFNUSC1cIl09RVtcIlRQLlJFU0NVRSBTVEFUSU9OXCJdLHRbXCJHLUMtT1hTVEgtXCJdPXt4MTotMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFNUUy1cIl09RVtcIlRQLlNVQk1BUklORSBTVEFUSU9OXCJdLHRbXCJHLUMtT1hTVFMtXCJdPXt4MTotMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFNUU0FcIl09RVtcIlRQLkFTVyBTVUJNQVJJTkUgU1RBVElPTlwiXSx0W1wiRy1DLU9YU1RTQVwiXT17eDE6LTExNSx4MjoxNDAseTE6NjAseTI6MTQwfSxJW1wiRy1DLU9YUy0tLVwiXT1FW1wiVFAuU0VBUkNIXCJdLHRbXCJHLUMtT1hTLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YU0EtLVwiXT1FW1wiVFAuU0VBUkNIIEFSRUFcIl0sdFtcIkctQy1PWFNBLS1cIl09e3gxOjIwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hTRC0tXCJdPUVbXCJUUC5ESVAgUE9TSVRJT05cIl0sdFtcIkctQy1PWFNELS1cIl09e3gxOjEwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hTQy0tXCJdPUVbXCJUUC5TRUFSQ0ggQ0VOVEVSXCJdLHRbXCJHLUMtT1hTQy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YQUMtLVwiXT1FW1wiVFAuQ09NQkFUIEFJUiBQQVRST0wgKENBUClcIl0sdFtcIkctQy1PWEFDLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hBQS0tXCJdPUVbXCJUUC5BSVJCT1JORSBFQVJMWSBXQVJOSU5HIChBRVcpXCJdLHRbXCJHLUMtT1hBQS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQVQtLVwiXT1FW1wiVFAuVEFDQU5cIl0sdFtcIkctQy1PWEFULS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hBSy0tXCJdPUVbXCJUUC5UQU5LSU5HXCJdLHRbXCJHLUMtT1hBSy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQUYtLVwiXT1FW1wiVFAuRklYRUQgV0lOR1wiXSx0W1wiRy1DLU9YQUYtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFILS1cIl09RVtcIlRQLlJPVEFSWSBXSU5HXCJdLHRbXCJHLUMtT1hBSC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQU8tLVwiXT1FW1wiVFAuVE9NQ0FUXCJdLHRbXCJHLUMtT1hBTy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQVItLVwiXT1FW1wiVFAuUkVTQ1VFXCJdLHRbXCJHLUMtT1hBUi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQVAtLVwiXT1FW1wiVFAuUkVQTEVOSVNIXCJdLHRbXCJHLUMtT1hBUC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQU0tLVwiXT1FW1wiVFAuTUFSU0hBTExcIl0sdFtcIkctQy1PWEFNLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hBUy0tXCJdPUVbXCJUUC5TVFJJS0UgSVBcIl0sdFtcIkctQy1PWEFTLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hBRC0tXCJdPUVbXCJUUC5DT1JSSURPUiBUQUIgUE9JTlRcIl0sdFtcIkctQy1PWEFELS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT0ctLS0tXCJdPUVbXCJUUC5BQ1RJT04gUE9JTlRcIl0sdFtcIkctQy1PRy0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dDLS0tXCJdPUVbXCJUUC5BQ1RJT04gUE9JTlRcIl0sdFtcIkctQy1PR0MtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dQLS0tXCJdPUVbXCJUUC5DT05UQUNUIFBPSU5UXCJdLHRbXCJHLUMtT0dQLS0tXCJdPXt4MTo1NSx4MjoxNDUseTE6LTEwfSxJW1wiRy1DLU9HVC0tLVwiXT1FW1wiVFAuQ09PUkRJTkFUSU9OIFBPSU5UXCJdLHRbXCJHLUMtT0dULS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9HRC0tLVwiXT1FW1wiVFAuREVDSVNJT04gUE9JTlRcIl0sdFtcIkctQy1PR0QtLS1cIl09e3gxOjMwLHgyOjE3MCx5MToyNSx5MjoxNjB9LElbXCJHLUMtT0dMLS0tXCJdPUVbXCJUUC5BQ1RJT04gTElOS1VQIFBPSU5UXCJdLHRbXCJHLUMtT0dMLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9HTi0tLVwiXT1FW1wiVFAuQUNUSU9OIFBBU1NBR0UgUE9JTlRcIl0sdFtcIkctQy1PR04tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dSLS0tXCJdPUVbXCJUUC5BQ1RJT04gUkFMTFkgUE9JTlRcIl0sdFtcIkctQy1PR1ItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dTLS0tXCJdPUVbXCJUUC5BQ1RJT04gUkVMRUFTRSBQT0lOVFwiXSx0W1wiRy1DLU9HUy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1PR0ktLS1cIl09RVtcIlRQLkFDVElPTiBTVEFSVCBQT0lOVFwiXSx0W1wiRy1DLU9HSS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1PR1ctLS1cIl09RVtcIlRQLldBWVBPSU5UXCJdLHRbXCJHLUMtT0dXLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NjAseTI6MTQwfSxJW1wiRy1PLVZBLS0tLVwiXT1FW1wiVFAuRklSRVwiXSxJW1wiRy1PLVZSLS0tLVwiXT1FW1wiR1IuRVEuSE9XSVRaRVJcIl0sSVtcIkctTy1WRS0tLS1cIl09RVtcIlNULklDLktJTExJTkcgVklDVElNXCJdLElbXCJHLU8tVkItLS0tXCJdPUVbXCJBSVIuTUlTU0lMRS5JQy5CT01CXCJdLElbXCJHLU8tVlktLS0tXCJdPUVbXCJTVC5JQy5CT09CWSBUUkFQXCJdLElbXCJHLU8tVkQtLS0tXCJdPUVbXCJTVC5JQy5EUklWRS1CWSBTSE9PVElOR1wiXSxJW1wiRy1PLVZJLS0tLVwiXT1FW1wiVFAuSU5ESVJFQ1QgRklSRVwiXSxJW1wiRy1PLVZNLS0tLVwiXT1FW1wiR1IuRVEuTU9SVEFSXCJdLElbXCJHLU8tVkstLS0tXCJdPUVbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0sSVtcIkctTy1WUy0tLS1cIl09RVtcIlNULklDLlNOSVBJTkdcIl0sSVtcIkctTy1WUC0tLS1cIl09RVtcIlNULklDLlBPSVNPTklOR1wiXSxJW1wiRy1PLVZVLS0tLVwiXT1FW1wiVFAuQU1CVVNIXCJdLElbXCJHLU8tVkMtLS0tXCJdPUVbXCJHUi5JQy5GRi5DTEFTUyBWXCJdLElbXCJHLU8tVkgtLS0tXCJdPUVbXCJBUi5JLkZGLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdLElbXCJHLU8tVkYtLS0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVtcIkctTy1WTy0tLS1cIl09RVtcIkdSLklDLkZGLklORkFOVFJZXCJdLElbXCJHLU8tVkwtLS0tXCJdPUVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxJW1wiRy1PLVZYLS0tLVwiXT1FW1wiR1IuSUMuRkYuU0lHTkFMXCJdLElbXCJHLU8tVlotLS0tXCJdPUVbXCJHUi5JQy5GRi5TVVBQTFlcIl0sSVtcIkctTy1MQi0tLS1cIl09RVtcIlNULklDLkJMQUNLIExJU1QgTE9DQVRJT05cIl0sSVtcIkctTy1MRy0tLS1cIl09RVtcIlNULklDLkdSQVkgTElTVCBMT0NBVElPTlwiXSxJW1wiRy1PLUxXLS0tLVwiXT1FW1wiU1QuSUMuV0hJVEUgTElTVCBMT0NBVElPTlwiXSxJW1wiRy1PLVBSLS0tLVwiXT1FW1wiVFAuUk9BRCBCTE9DS1wiXSxJW1wiRy1PLVBSQi0tLVwiXT1FW1wiVFAuUk9BRCBCTE9DSyAoVU5ERVIgQ09OU1RSVUNUSU9OKVwiXSxJW1wiRy1PLVBULS0tLVwiXT1FW1wiU1QuSUMuUEFUUk9MTElOR1wiXSxJW1wiRy1PLVBDLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLldJTExJTkdcIl1dLElbXCJHLU8tUENVLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuQ09FUkNFRC9JTVBSRVNTRURcIl1dLElbXCJHLU8tUEQtLS0tXCJdPUVbXCJTVC5JQy5ERU1PTlNUUkFUSU9OXCJdLElbXCJHLU8tUE0tLS0tXCJdPUVbXCJTVC5JQy5NSU5FIExBWUlOR1wiXSxJW1wiRy1PLVBILS0tLVwiXT1FW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLElbXCJHLU8tUEhZLS0tXCJdPUVbXCJTVC5JQy5SQURJTyBBTkQgVEVMRVZJU0lPTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl0sSVtcIkctTy1QSFctLS1cIl09W0VbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl0sRVtcIlNULk0xLldSSVRURU4gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdXSxJW1wiRy1PLVBIRy0tLVwiXT1bRVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXSxFW1wiU1QuTTEuV1JJVFRFTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbXCJHLU8tUEhULS0tXCJdPVtFW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLEVbXCJTVC5NMS5IT1VTRS1UTy1IT1VTRVwiXV0sSVtcIkctTy1QRy0tLS1cIl09RVtcIlNULklDLlNFQVJDSElOR1wiXSxJW1wiRy1PLVBTLS0tLVwiXT1FW1wiU1QuSUMuU1BZXCJdLElbXCJHLU8tUEYtLS0tXCJdPUVbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxJW1wiRy1PLVBJLS0tLVwiXT1FW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl0sSVtcIkctTy1QRS0tLS1cIl09W0VbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sRVtcIkdSLklDLkZGLklOVEVSQ0VQVFwiXV0sSVtcIkctTy1QWC0tLS1cIl09RVtcIlNULklDLkVYVE9SVElPTlwiXSxJW1wiRy1PLVBKVi0tLVwiXT1bRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJHLU8tUEpBLS0tXCJdPVtFW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl0sRVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sSVtcIkctTy1QSkItLS1cIl09W0VbXCJTVC5JQy5ISUpBQ0tJTkcgKEJPQVQpXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJHLU8tUEstLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuS0lETkFQUElOR1wiXV0sSVtcIkctTy1QQS0tLS1cIl09RVtcIlNULklDLkFSUkVTVFwiXSxJW1wiRy1PLVBPLS0tLVwiXT1FW1wiU1QuSUMuRFJVRyBSRUxBVEVEIEFDVElWSVRJRVNcIl0sSVtcIkctTy1JUi0tLS1cIl09RVtcIlNULklDLkdST1VQXCJdLElbXCJHLU8tSVMtLS0tXCJdPUVbXCJTVC5JQy5TQUZFIEhPVVNFXCJdLElbXCJHLU8tSUctLS0tXCJdPUVbXCJTVC5JQy5HUkFGRklUSVwiXSxJW1wiRy1PLUlWLS0tLVwiXT1FW1wiU1QuSUMuVkFOREFMSVNNL0xPT1QvUkFOU0FDSy9QTFVOREVSL1NBQ0tcIl0sSVtcIkctTy1JSy0tLS1cIl09RVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdLElbXCJHLU8tSUQtLS0tXCJdPVtFW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl0sRVtcIlNULk0xLkRSVUdcIl1dLElbXCJHLU8tSUYtLS0tXCJdPUVbXCJTVC5JQy5JTlRFUk5BTCBTRUNVUklUWSBGT1JDRVwiXX19XSxZPVtMLHksaCx4LFUscCxtLEYseixILHt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbZnVuY3Rpb24oSSx0LEUsUixlLEEpe3ZhciBDPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsVD1FLmljb25Db2xvcltDXSxTPXtcIjI1MjVCLkFTV1NVQlwiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDg1IDQwLDAgMCwtMjAgLTQwLDAgeiBtIDIwLC0zMCAwLDQwIG0gLTQwLDE1IDE1LDE1IDUwLDAgMTUsLTE1IC0xNSwtMTUgLTUwLDAgelwifSxcIjI1MjVCLk5DQlRULlNUTlwiOlt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDg1IDYwLDAgMCwzMCAtNjAsMCB6IG0gMzAsLTE1IDAsNjBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTQ1LGZvbnRzaXplOjMwLHRleHQ6XCJOQ1wifV0sXCIyNTI1Qi5TVE4uQVNXU0hQXCI6W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsODUgNjAsMCAwLDMwIC02MCwwIHogbSAzMCwtMTUgMCw2MFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxNDUsZm9udHNpemU6MzAsdGV4dDpcIkFTXCJ9XSxcIjI1MjVCLlNUTi5QS1RcIjpbe3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4NSA2MCwwIDAsMzAgLTYwLDAgeiBtIDMwLC0xNSAwLDYwXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0NSxmb250c2l6ZTozMCx0ZXh0OlwiUEtcIn1dLFwiMjUyNUIuU1ROLlJTQ1wiOlt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDg1IDYwLDAgMCwzMCAtNjAsMCB6IG0gMzAsLTE1IDAsNjBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTQ1LGZvbnRzaXplOjMwLHRleHQ6XCJSU1wifV0sXCIyNTI1Qi5TVE5cIjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDg1IGMgMjAsMCA0MCwwIDYwLDAgMCwxMCAwLDIwIDAsMzAgLTIwLDAgLTQwLDAgLTYwLDAgMCwtMTAgMCwtMjAgMCwtMzAgeiBtIDMwLC0xNSBjIDAsMjAgMCw0MCAwLDYwIG0gMzUsLTUgQyAxMjAsMTQ4IDgyLjcsMTQ5IDY2LjgsMTI2IDQ5LjIsMTA1IDU5LjEsNjkuMiA4NS4yLDYwLjEgMTAzLDUzLjEgMTI0LDU5LjQgMTM1LDc0LjhcIn0sXCIyNTI1Qi5TVUIuU1ROXCI6W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDg1IDYwLDAgMCwzMCAtNjAsMCB6IG0gMzAsLTE1IDAsNjBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTQ1LGZvbnRzaXplOjMwLHRleHQ6XCJTU1wifV19O2Zvcih2YXIgTiBpbiBTKVMuaGFzT3duUHJvcGVydHkoTikmJihJLmhhc093blByb3BlcnR5KE4pJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIrTiksbi5jYWxsKHRoaXMsU1tOXSxUKSxJW05dPVNbTl0pfV0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtUy1TLS0tLS1cIl09RVtcIjI1MjVCLlNUTlwiXSxJW1wiUy1TLVNQLS0tLVwiXT1FW1wiMjUyNUIuU1ROLlBLVFwiXSxJW1wiUy1TLVNBLS0tLVwiXT1FW1wiMjUyNUIuU1ROLkFTV1NIUFwiXSxJW1wiUy1TLU5OLS0tLVwiXT1FW1wiMjUyNUIuTkNCVFQuU1ROXCJdLElbXCJTLVMtTk5SLS0tXCJdPUVbXCIyNTI1Qi5TVE4uUlNDXCJdLElbXCJTLVUtU1MtLS0tXCJdPUVbXCIyNTI1Qi5TVUIuU1ROXCJdLElbXCJTLVUtU1NBLS0tXCJdPUVbXCIyNTI1Qi5BU1dTVUJcIl0sSVtcIkctTy1TQldELS1cIl09RVtcIlRQLldSRUNLLCBEQU5HRVJPVVNcIl0sdFtcIkctTy1TQlhELS1cIl09e3gxOjM1LHgyOjE2NSx5MTo3MCx5MjoxMzB9fX0sa10sVz1bTCx5LGgseCxVLHAsbSxGLHosSCx7dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2MsVl0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIkUtSS1BLS0tLS1cIl09W0VbXCJBQy5JQy5DUklNSU5BTC5DSVZJTCBESVNUVVJCQU5DRVwiXV0sSVtcIkUtSS1BQy0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiQUMuTTEuUklPVFwiXV0sSVtcIkUtSS1CLS0tLS1cIl09W0VbXCJBQy5JQy5DUklNSU5BTC5BQ1RJVklUWS5JTkNJREVOVFwiXV0sSVtcIkUtSS1CQS0tLS1cIl09W0VbXCJTVC5JQy5CT01CXCJdLEVbXCJBQy5NMS5USFJFQVRcIl1dLElbXCJFLUktQkMtLS0tXCJdPVtFW1wiU1QuSUMuRVhQTE9TSU9OXCJdLHMuX3NjYWxlKC42LEVbXCJTVC5JQy5CT01CXCJdKV0sSVtcIkUtSS1CRC0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiU1QuTTEuTE9PVFwiXV0sSVtcIkUtSS1CRi0tLS1cIl09W0VbXCJBQy5JQy5TSE9PVElOR1wiXV0sSVtcIkUtSS1DLS0tLS1cIl09W0VbXCJBQy5JQy5GSVJFIEVWRU5UXCJdXSxJW1wiRS1JLUNBLS0tLVwiXT1bRVtcIkFDLklDLkhPVCBTUE9UXCJdXSxJW1wiRS1JLUNCLS0tLVwiXT1bRVtcIkFDLklDLk5PTi1SRXNJZEVOVElBTCBGSVJFXCJdXSxJW1wiRS1JLUNDLS0tLVwiXT1bRVtcIkFDLklDLkZJUkUgT1JJR0lOXCJdXSxJW1wiRS1JLUNELS0tLVwiXT1bRVtcIkFDLklDLlJFc0lkRU5USUFMIEZJUkVcIl1dLElbXCJFLUktQ0UtLS0tXCJdPVtFW1wiQUMuSUMuU0NIT09MIEZJUkVcIl1dLElbXCJFLUktQ0YtLS0tXCJdPVtFW1wiQUMuSUMuU01PS0VcIl1dLElbXCJFLUktQ0ctLS0tXCJdPVtFW1wiQUMuSUMuU1BFQ0lBTCBORUVEUyBGSVJFXCJdXSxJW1wiRS1JLUNILS0tLVwiXT1bRVtcIkFDLklDLldJTEQgRklSRVwiXV0sSVtcIkUtSS1ELS0tLS1cIl09W0VbXCJBQy5JQy5IQVpBUkRPVVMgTUFURVJJQUxTIElOQ0lERU5UXCJdXSxJW1wiRS1JLURBLS0tLVwiXT1bRVtcIkFDLklDLkNIRU1JQ0FMIEFHRU5UXCJdXSxJW1wiRS1JLURCLS0tLVwiXT1bRVtcIkFDLklDLkNPUlJPU0lWRSBNQVRFUklBTFwiXV0sSVtcIkUtSS1EQy0tLS1cIl09W0VbXCJBQy5JQy5IQVpBUkRPVVMgV0hFTiBXRVRcIl1dLElbXCJFLUktREQtLS0tXCJdPVtFW1wiQUMuSUMuRVhQTE9TSVZFIE1BVEVSSUFMXCJdXSxJW1wiRS1JLURFLS0tLVwiXT1bRVtcIkFDLklDLkZMQU1NQUJMRSBHQVNcIl1dLElbXCJFLUktREYtLS0tXCJdPVtFW1wiQUMuSUMuRkxBTU1BQkxFIExJUVVJRFwiXV0sSVtcIkUtSS1ERy0tLS1cIl09W0VbXCJBQy5JQy5GTEFNTUFCTEUgU09MSURcIl1dLElbXCJFLUktREgtLS0tXCJdPVtFW1wiQUMuSUMuTk9OLUZMQU1NQUJMRSBHQVNcIl1dLElbXCJFLUktREktLS0tXCJdPVtFW1wiQUMuSUMuT1JHQU5JQyBQRVJPWElERVwiXV0sSVtcIkUtSS1ESi0tLS1cIl09W0VbXCJBQy5JQy5PWElESVpFUlwiXV0sSVtcIkUtSS1ESy0tLS1cIl09W0VbXCJBQy5JQy5SQURJT0FDVElWRSBNQVRFUklBTFwiXV0sSVtcIkUtSS1ETC0tLS1cIl09W0VbXCJBQy5JQy5TUE9OVEFORU9VU0xZIENPTUJVU1RJQkxFIE1BVEVSSUFMXCJdXSxJW1wiRS1JLURNLS0tLVwiXT1bRVtcIkFDLklDLlRPWElDIEdBU1wiXV0sSVtcIkUtSS1ETi0tLS1cIl09W0VbXCJBQy5JQy5UT1hJQyBJTkZFQ1RJT1VTIE1BVEVSSUFMXCJdXSxJW1wiRS1JLURPLS0tLVwiXT1bRVtcIkFDLklDLlVORVhQTE9ERUQgT1JETkFOQ0VcIl1dLElbXCJFLUktRS0tLS0tXCJdPVtFW1wiU1QuTTEuSU5DSURFTlRcIl0sRVtcIlNULklDLkhJSkFDS0lORyAoQUlSUExBTkUpXCJdXSxJW1wiRS1JLUVBLS0tLVwiXT1bRVtcIlNULk0xLkFDQ0lERU5UXCJdLEVbXCJTVC5JQy5ISUpBQ0tJTkcgKEFJUlBMQU5FKVwiXV0sSVtcIkUtSS1GLS0tLS1cIl09W0VbXCJTVC5NMS5JTkNJREVOVFwiXSxFW1wiU1QuSUMuSElKQUNLSU5HIChCT0FUKVwiXV0sSVtcIkUtSS1GQS0tLS1cIl09W0VbXCJTVC5NMS5BQ0NJREVOVFwiXSxFW1wiU1QuSUMuSElKQUNLSU5HIChCT0FUKVwiXV0sSVtcIkUtSS1HLS0tLS1cIl09W0VbXCJTVC5NMS5JTkNJREVOVFwiXSxFW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXV0sSVtcIkUtSS1HQS0tLS1cIl09W0VbXCJTVC5NMS5BQ0NJREVOVFwiXSxFW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXV0sSVtcIkUtSS1HQi0tLS1cIl09W0VbXCJHUi5FUS5UUkFJTiBMT0NPTU9USVZFXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJFLUktSC0tLS0tXCJdPVtFW1wiU1QuTTEuSU5DSURFTlRcIl0sRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdXSxJW1wiRS1JLUhBLS0tLVwiXT1bRVtcIlNULk0xLkFDQ0lERU5UXCJdLEVbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXV0sSVtcIkUtTi1BLS0tLS1cIl09W10sSVtcIkUtTi1BQS0tLS1cIl09W0VbXCJBQy5JQy5BRlRFUlNIT0NLXCJdXSxJW1wiRS1OLUFCLS0tLVwiXT1bRVtcIkFDLklDLkFWQUxBTkNIRVwiXV0sSVtcIkUtTi1BQy0tLS1cIl09W0VbXCJBQy5JQy5FQVJUSFFVQUtFIEVQSUNFTlRFUlwiXV0sSVtcIkUtTi1BRC0tLS1cIl09W0VbXCJBQy5JQy5MQU5EU0xJREVcIl1dLElbXCJFLU4tQUUtLS0tXCJdPVtFW1wiQUMuSUMuU1VCU0lERU5DRVwiXV0sSVtcIlctUy1XU1ZFLS1cIl09W0VbXCJBQy5JQy5WT0xDQU5JQyBFUlVQVElPTlwiXV0sSVtcIkUtTi1BRy0tLS1cIl09W0VbXCJBQy5JQy5WT0xDQU5JQyBUSFJFQVRcIl1dLElbXCJXLVMtV1NELUxJXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuRFJJWlpMRS5JTlRFUk1JVFRFTlQgTElHSFRcIl1dLElbXCJFLU4tQi0tLS0tXCJdPVtdLElbXCJFLU4tQkItLS0tXCJdPVtFW1wiQUMuSUMuRFJPVUdIVFwiXV0sSVtcIkUtTi1CQy0tLS1cIl09W0VbXCJBQy5JQy5GTE9PRFwiXV0sSVtcIlctUy1XU0ZHU09cIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5GT0cuU0tZIE9CU0NVUkVEXCJdXSxJW1wiVy1TLVdTR1JMLVwiXT1bRVtcIkFUTU9TUEhFUklDLklDLkhBSUwuTElHSFQgTk9UIEFTU09DSUFURUQgV0lUSCBUSFVOREVSXCJdXSxJW1wiRS1OLUJGLS0tLVwiXT1bRVtcIkFDLklDLklOVkVSU0lPTlwiXV0sSVtcIlctUy1XU1ItTElcIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5SQUlOLklOVEVSTUlUVEVOVCBMSUdIVFwiXV0sSVtcIlctUy1XU0RTTE1cIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5EVVNUIE9SIFNBTkQuTElHSFQgVE8gTU9ERVJBVEVcIl1dLElbXCJXLVMtV1NTLUxJXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuU05PVy5JTlRFUk1JVFRFTlQgTElHSFRcIl1dLElbXCJXLVMtV1NUTUgtXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuU1RPUk1TLlRIVU5ERVJTVE9STSBMSUdIVCBUTyBNT0RFUkFURSAtIFdJVEggSEFJTFwiXV0sSVtcIlctUy1XU1QtRkNcIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5TVE9STVMuRlVOTkVMIENMT1VEIChUT1JOQURPL1dBVEVSU1BPVVQpXCJdXSxJW1wiVy1TLVdTVFNTLVwiXT1bRVtcIkFUTU9TUEhFUklDLklDLlRST1BJQ0FMIFNUT1JNIFNZU1RFTVMuVFJPUElDQUwgU1RPUk1cIl1dLElbXCJFLU4tQk0tLS0tXCJdPVtFW1wiQUMuSUMuVFNVTkFNSVwiXV0sSVtcIkUtTi1DLS0tLS1cIl09W10sSVtcIkUtTi1DQS0tLS1cIl09W0VbXCJBQy5JQy5CSVJEXCJdXSxJW1wiRS1OLUNCLS0tLVwiXT1bRVtcIkFDLklDLklOU0VDVFwiXV0sSVtcIkUtTi1DQy0tLS1cIl09W0VbXCJBQy5JQy5NSUNST0JJQUxcIl1dLElbXCJFLU4tQ0QtLS0tXCJdPVtFW1wiQUMuSUMuUkVQVElMRVwiXV0sSVtcIkUtTi1DRS0tLS1cIl09W0VbXCJBQy5JQy5ST0RFTlRcIl1dLElbXCJFLU8tQS0tLS0tXCJdPUlbXCJFLU8tQUEtLS0tXCJdPUlbXCJFLU8tQUItLS0tXCJdPUlbXCJFLU8tQUMtLS0tXCJdPUlbXCJFLU8tQUQtLS0tXCJdPVtFW1wiR1IuSUMuRU1FUkdFTkNZIE1FRElDQUwgT1BFUkFUSU9OXCJdXSxJW1wiRS1PLUFFLS0tLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5NMS5NRURFVkFDXCJdXSxJW1wiRS1PLUFGLS0tLVwiXT1bcy5fdHJhbnNsYXRlKDAsMTAscy5fc2NhbGUoLjgsRVtcIkdSLkkuRkYuQ0lWSUxJQU4gUk9UQVJZIFdJTkdcIl0pKSxFW1wiR1IuTTEuTUVERVZBQ1wiXV0sSVtcIkUtTy1BRy0tLS1cIl09W0VbXCJBQy5JQy5IRUFMVEggREVQQVJUTUVOVCBGQUNJTElUWVwiXV0sSVtcIkUtTy1BSi0tLS1cIl09W0VbXCJBQy5JQy5NRURJQ0FMIEZBQ0lMSVRJRVMgT1VUUEFUSUVOVFwiXV0sSVtcIkUtTy1BSy0tLS1cIl09W0VbXCJBQy5JQy5PUEVSQVRJT04vRU1FUkdFTkNZIE1FRElDQUwgT1BFUkFUSU9OXCJdXSxJW1wiRS1PLUFMLS0tLVwiXT1bRVtcIkFDLklDLlBIQVJNQUNZXCJdXSxJW1wiRS1PLUFNLS0tLVwiXT1bRVtcIkFDLklDLlRSSUFHRVwiXV0sSVtcIkUtTy1CLS0tLS1cIl09SVtcIkUtTy1CQS0tLS1cIl09SVtcIkUtTy1CQi0tLS1cIl09SVtcIkUtTy1CQy0tLS1cIl09W0VbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdXSxJW1wiRS1PLUJELS0tLVwiXT1bcy5fc2NhbGUoLjcsRVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEVbXCJBQy5NMS5FTUVSR0VOQ1kgQ09MTEVDVElPTiBFVkFDVUFUSU9OIFBPSU5UXCJdXSxJW1wiRS1PLUJFLS0tLVwiXT1bcy5fc2NhbGUoLjcsRVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEVbXCJBQy5NMS5FTUVSR0VOQ1kgSU5DSURFTlQgQ09NTUFORCBDRU5URVJcIl1dLElbXCJFLU8tQkYtLS0tXCJdPVtzLl9zY2FsZSguNyxFW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksRVtcIkFDLk0xLkVNRVJHRU5DWSBPUEVSQVRJT05TIENFTlRFUlwiXV0sSVtcIkUtTy1CRy0tLS1cIl09W0VbXCJBQy5JQy5FTUVSR0VOQ1kgUFVCTElDIElORk9STUFUSU9OIENFTlRFUlwiXV0sSVtcIkUtTy1CSC0tLS1cIl09W3MuX3NjYWxlKC43LEVbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdKSxFW1wiQUMuTTEuRU1FUkdFTkNZIFNIRUxURVJcIl1dLElbXCJFLU8tQkktLS0tXCJdPVtzLl9zY2FsZSguNyxFW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksRVtcIkFDLk0xLkVNRVJHRU5DWSBTVEFHSU5HIEFSRUFcIl1dLElbXCJFLU8tQkotLS0tXCJdPVtFW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXV0sSVtcIkUtTy1CSy0tLS1cIl09SVtcIlMtRy1VU1NXLS1cIl0sSVtcIkUtTy1CTC0tLS1cIl09W0VbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxFW1wiQUMuTTEuRU1FUkdFTkNZXCJdXSxJW1wiRS1PLUMtLS0tLVwiXT1JW1wiRS1PLUNBLS0tLVwiXT1JW1wiRS1PLUNCLS0tLVwiXT1JW1wiRS1PLUNFLS0tLVwiXT1bRVtcIkdSLklDLkZJUkUgUFJPVEVDVElPTlwiXV0sSVtcIkUtTy1DQy0tLS1cIl09W0VbXCJBQy5JQy5GSVJFIEhZRFJBTlRcIl1dLElbXCJFLU8tQ0QtLS0tXCJdPVtFW1wiQUMuSUMuT1RIRVIgV0FURVIgU1VQUExZIExPQ0FUSU9OXCJdXSxJW1wiRS1PLUQtLS0tLVwiXT1JW1wiRS1PLURBLS0tLVwiXT1JW1wiRS1PLURCLS0tLVwiXT1JW1wiRS1PLURDLS0tLVwiXT1bRVtcIkdSLklDLkZGLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVtcIkUtTy1ERC0tLS1cIl09SVtcIkUtTy1EREEtLS1cIl09SVtcIkUtTy1EREItLS1cIl09SVtcIkUtTy1EREMtLS1cIl09W0VbXCJHUi5JQy5CVVJFQVUgT0YgQUxDT0hPTCwgVE9CQUNDTywgRklSRUFSTVMgQU5EIEVYUExPU0lWRVMgKEFURikgKERFUEFSVE1FTlQgT0YgSlVTVElDRSlcIl1dLElbXCJFLU8tREUtLS0tXCJdPUlbXCJFLU8tREVBLS0tXCJdPUlbXCJFLU8tREVCLS0tXCJdPUlbXCJFLU8tREVDLS0tXCJdPVtFW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXV0sSVtcIkUtTy1ERi0tLS1cIl09SVtcIkUtTy1ERkEtLS1cIl09SVtcIkUtTy1ERkItLS1cIl09SVtcIkUtTy1ERkMtLS1cIl09W0VbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl1dLElbXCJFLU8tREctLS0tXCJdPUlbXCJFLU8tREdBLS0tXCJdPUlbXCJFLU8tREdCLS0tXCJdPUlbXCJFLU8tREdDLS0tXCJdPVtFW1wiR1IuSUMuRFJVRyBFTkZPUkNFTUVOVCBBR0VOQ1kgKERFQSlcIl1dLElbXCJFLU8tREgtLS0tXCJdPUlbXCJFLU8tREhBLS0tXCJdPUlbXCJFLU8tREhCLS0tXCJdPUlbXCJFLU8tREhDLS0tXCJdPVtFW1wiR1IuSUMuRkYuREVQQVJUTUVOVCBPRiBKVVNUSUNFIChET0opXCJdXSxJW1wiRS1PLURJLS0tLVwiXT1JW1wiRS1PLURJQS0tLVwiXT1JW1wiRS1PLURJQi0tLVwiXT1JW1wiRS1PLURJQy0tLVwiXT1bRVtcIkdSLklDLkZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04gKEZCSSlcIl1dLElbXCJFLU8tREotLS0tXCJdPUlbXCJFLU8tREpCLS0tXCJdPUlbXCJFLU8tREpDLS0tXCJdPVtFW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UXCJdXSxJW1wiRS1PLURLLS0tLVwiXT1bRVtcIkdSLklDLkZGLlBSSVNPTlwiXV0sSVtcIkUtTy1ETC0tLS1cIl09SVtcIkUtTy1ETEEtLS1cIl09SVtcIkUtTy1ETEItLS1cIl09SVtcIkUtTy1ETEMtLS1cIl09W0VbXCJHUi5JQy5VTklURUQgU1RBVEVTIFNFQ1JFVCBTRVJWSUNFKFRSRUFTKSAoVVNTUylcIl1dLElbXCJFLU8tRE0tLS0tXCJdPUlbXCJFLU8tRE1BLS0tXCJdPUlbXCJFLU8tRE1CLS0tXCJdPUlbXCJFLU8tRE1DLS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT04gU0VDVVJJVFkgQUdFTkNZIChUU0EpXCJdXSxJW1wiRS1PLUROLS0tLVwiXT1JW1wiRS1PLUROQS0tLVwiXT1JW1wiRS1PLUROQy0tLVwiXT1bRVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbXCJFLU8tRE8tLS0tXCJdPUlbXCJFLU8tRE9BLS0tXCJdPUlbXCJFLU8tRE9CLS0tXCJdPUlbXCJFLU8tRE9DLS0tXCJdPVtFW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXV0sSVtcIkUtTy1FQS0tLS1cIl09W3MuX3NjYWxlKC42LEVbXCJHUi5FUS5TRU5TT1JcIl0pLEVbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdXSxJW1wiRS1PLUVCLS0tLVwiXT1bcy5fc2NhbGUoLjYsRVtcIkdSLkVRLlNFTlNPUlwiXSksRVtcIkdSLk0xLkNIRU1JQ0FMXCJdXSxJW1wiRS1PLUVDLS0tLVwiXT1bcy5fc2NhbGUoLjYsRVtcIkdSLkVRLlNFTlNPUlwiXSksRVtcIkdSLk0xLklOVFJVU0lPTlwiXV0sSVtcIkUtTy1FRC0tLS1cIl09W3MuX3NjYWxlKC42LEVbXCJHUi5FUS5TRU5TT1JcIl0pLEVbXCJHUi5NMS5OVUNMRUFSXCJdXSxJW1wiRS1PLUVFLS0tLVwiXT1bcy5fc2NhbGUoLjYsRVtcIkdSLkVRLlNFTlNPUlwiXSksRVtcIkdSLk0xLlJBRElPTE9HSUNBTFwiXV0sSVtcIkUtRi1BLS0tLS1cIl09W0VbXCJHUi5JTi5JQy5BR1JJQ1VMVFVSRSBBTkQgRk9PRCBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1BQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5BR1JJQ1VMVFVSQUwgTEFCT1JBVE9SWVwiXV0sSVtcIkUtRi1BQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5BTklNQUwgRkVFRExPVFwiXV0sSVtcIkUtRi1BQy0tLS1cIl09W0VbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxFW1wiQUMuTTEuQ09NTUVSQ0lBTFwiXV0sSVtcIkUtRi1BRC0tLS1cIl09W0VbXCJHUi5JTi5JQy5GQVJNL1JBTkNIXCJdXSxJW1wiRS1GLUFFLS0tLVwiXT1bRVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdLEVbXCJBQy5NMS5QUk9EVUNUSU9OXCJdXSxJW1wiRS1GLUFGLS0tLVwiXT1bRVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdLEVbXCJBQy5NMS5SRVRBSUxcIl1dLElbXCJFLUYtQUctLS0tXCJdPVtFW1wiR1IuSU4uSUMuR1JBSU4gU1RPUkFHRVwiXV0sSVtcIkUtRi1CLS0tLS1cIl09W0VbXCJBQy5JQy5CQU5LSU5HIEZJTkFOQ0UgQU5EIElOU1VSQU5DRSBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1CQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5BVE1cIl1dLElbXCJFLUYtQkItLS0tXCJdPVtFW1wiR1IuSU4uSUMuQkFOS1wiXV0sSVtcIkUtRi1CQy0tLS1cIl09W0VbXCJHUi5JTi5JQy5CVUxMSU9OIFNUT1JBR0VcIl1dLElbXCJFLUYtQkQtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRkVERVJBTCBSRVNFUlZFIEJBTktcIl1dLElbXCJFLUYtQkUtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRklOQU5DSUFMIEVYQ0hBTkdFXCJdXSxJW1wiRS1GLUJGLS0tLVwiXT1bRVtcIkdSLklOLklDLkZJTkFOQ0lBTCBTRVJWSUNFUywgT1RIRVJcIl1dLElbXCJFLUYtQy0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuQ09NTUVSQ0lBTCBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1DQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5DSEVNSUNBTCBQTEFOVFwiXV0sSVtcIkUtRi1DQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5GSVJFQVJNUyBNQU5VRkFDVFVSRVJcIl1dLElbXCJFLUYtQ0MtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRklSRUFSTVMgUkVUQUlMRVJcIl1dLElbXCJFLUYtQ0QtLS0tXCJdPVtFW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFBST0RVQ1RJT05cIl1dLElbXCJFLUYtQ0UtLS0tXCJdPVtFW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFNUT1JBR0VcIl1dLElbXCJFLUYtQ0YtLS0tXCJdPVtFW1wiR1IuSU4uSUMuSU5EVVNUUklBTCBTSVRFXCJdXSxJW1wiRS1GLUNHLS0tLVwiXT1bRVtcIkdSLklOLklDLkxBTkRGSUxMXCJdXSxJW1wiRS1GLUNILS0tLVwiXT1bRVtcIkdSLklOLklDLlBIQVJNQUNFVVRJQ0FMIE1BTlVGQUNUVVJFUlwiXV0sSVtcIkUtRi1DSS0tLS1cIl09W0VbXCJHUi5JTi5JQy5DT05UQU1JTkFURUQgSEFaQVJET1VTIFdBU1RFIFNJVEVcIl1dLElbXCJFLUYtQ0otLS0tXCJdPVtFW1wiR1IuSU4uSUMuVE9YSUMgUkVMRUFTRSBJTlZFTlRPUllcIl1dLElbXCJFLUYtRC0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuRURVQ0FUSU9OQUwgRkFDSUxJVElFUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1EQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5DT0xMRUdFL1VOSVZFUlNJVFlcIl1dLElbXCJFLUYtREItLS0tXCJdPVtFW1wiR1IuSU4uSUMuU0NIT09MXCJdXSxJW1wiRS1GLUVBLS0tLVwiXT1bcy5fdHJhbnNsYXRlKDAsMTUscy5fc2NhbGUoLjc1LEVbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUlwiXSkpLEVbXCJBQy5NMS5HRU5FUkFUSU9OIFNUQVRJT05cIl1dLElbXCJFLUYtRUItLS0tXCJdPVtFW1wiR1IuSU4uSUMuTkFUVVJBTCBHQVMgRkFDSUxJVFlcIl1dLElbXCJFLUYtRUUtLS0tXCJdPVtFW1wiR1IuSU4uSUMuUFJPUEFORSBGQUNJTElUWVwiXV0sSVtcIkUtRi1GLS0tLS1cIl09W0VbXCJHUi5JTi5JQy5HT1ZFUk5NRU5UIFNJVEUgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtRy0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuTUlMSVRBUlkgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtR0EtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQkFTRVwiXSxFW1wiQUMuTTEuTUlMSVRBUlkgQVJNT1JZXCJdXSxJW1wiRS1GLUgtLS0tLVwiXT1bRVtcIkdSLklOLklDLlBPU1RBTCBTRVJWSUNFIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUhBLS0tLVwiXT1bRVtcIkdSLklOLklDLlBPU1RBTCBESVNUUklCVVRJT04gQ0VOVEVSXCJdXSxJW1wiRS1GLUhCLS0tLVwiXT1bRVtcIkdSLklOLklDLlBPU1QgT0ZGSUNFXCJdXSxJW1wiRS1GLUktLS0tLVwiXT1bRVtcIkdSLklOLklDLlBVQkxJQyBWRU5VRVMgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtSUEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRU5DTE9TRUQgRkFDSVRMSVRZIChQVUJMSUMgVkVOVUUpXCJdXSxJW1wiRS1GLUlCLS0tLVwiXT1bRVtcIkdSLklOLklDLk9QRU4gRkFDSUxJVFkgKE9QRU4gVkVOVUUpXCJdXSxJW1wiRS1GLUlDLS0tLVwiXT1bRVtcIkdSLklOLklDLlJFQ1JFQVRJT05BTCBBUkVBXCJdXSxJW1wiRS1GLUlELS0tLVwiXT1bRVtcIkdSLklOLklDLlJFTElHSU9VUyBJTlNUSVRVVElPTlwiXV0sSVtcIkUtRi1KLS0tLS1cIl09W0VbXCJHUi5JTi5JQy5TUEVDSUFMIE5FRURTIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUpBLS0tLVwiXT1bRVtcIkdSLklOLklDLkFEVUxUIERBWSBDQVJFXCJdXSxJW1wiRS1GLUpCLS0tLVwiXT1bRVtcIkdSLklOLklDLkNISUxEIERBWSBDQVJFXCJdXSxJW1wiRS1GLUpDLS0tLVwiXT1bRVtcIkdSLklOLklDLkVMREVSIENBUkVcIl1dLElbXCJFLUYtSy0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUtCLS0tLVwiXT1bRVtcIkdSLklOLklDLlRFTEVDT01NVU5JQ0FUSU9OUyBUT1dFUlwiXV0sSVtcIkUtRi1MQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5BSVIgVFJBRkZJQyBDT05UUk9MIEZBQ0lMSVRZXCJdXSxJW1wiRy1NLUJDQi0tLVwiXT1bRVtcIkdSLklOLklDLkJSSURHRVwiXV0sdFtcIkctTS1CQ0ItLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJFLUYtTEQtLS0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXV0sSVtcIkUtRi1MRS0tLS1cIl09W0VbXCJHUi5JQy5GRVJSWVwiXV0sSVtcIkUtRi1MRi0tLS1cIl09W0VbXCJHUi5JTi5JQy5IRUxJQ09QVEVSIExBTkRJTkcgU0lURVwiXV0sSVtcIlctUy1NTC0tLS1cIl09W0VbXCJHUi5JTi5JQy5UUkFOU1BPUlRBVElPTiBJTkZSQVNUUlVDVFVSRSBMT0NLXCJdXSxJW1wiRS1GLUxILS0tLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdXSxJW1wiRS1GLUxKLS0tLVwiXT1bRVtcIkdSLklDLlJBSUxIRUFEXCJdXSxJW1wiRS1GLUxLLS0tLVwiXT1bRVtcIkdSLklOLklDLlJFU1QgU1RPUFwiXV0sSVtcIlctUy1IUEJBLS1cIl09W0VbXCJHUi5JTi5JQy5UUkFOU1BPUlRBVElPTiBJTkZSQVNUUlVDVFVSRSBTSElQIEFOQ0hPUkFHRVwiXV0sSVtcIkUtRi1MTS0tLS1cIl09W0VbXCJHUi5JTi5JQy5UT0xMIEZBQ0lMSVRZXCJdXSxJW1wiRy1TLVBPLS0tLVwiXT1FW1wiVFAuVFJBRkZJQyBDT05UUk9MIFBPU1RcIl0sdFtcIkctUy1QTy0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJFLUYtTE8tLS0tXCJdPVtFW1wiR1IuSU4uSUMuVFJBRkZJQyBJTlNQRUNUSU9OIEZBQ0lMSVRZXCJdXSxJW1wiRS1GLUxQLS0tLVwiXT1bRVtcIkdSLklOLklDLlRVTk5FTFwiXV0sSVtcIkUtRi1NQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5DT05UUk9MIFZBTFZFXCJdXSxJW1wiRS1GLU1CLS0tLVwiXT1bRVtcIkdSLklOLklDLkRBTVwiXV0sSVtcIkUtRi1NQy0tLS1cIl09W0VbXCJHUi5JTi5JQy5ESVNDSEFSR0UgT1VURkFMTFwiXV0sSVtcIkUtRi1NRC0tLS1cIl09W0VbXCJHUi5JTi5JQy5HUk9VTkQgV0FURVIgV0VMTFwiXV0sSVtcIkUtRi1NRS0tLS1cIl09W0VbXCJHUi5JTi5JQy5QVU1QSU5HIFNUQVRJT05cIl1dLElbXCJFLUYtTUYtLS0tXCJdPVtFW1wiR1IuSU4uSUMuUkVTRVJWT0lSXCJdXSxJW1wiRS1GLU1HLS0tLVwiXT1bRVtcIkdSLklOLklDLlNUT1JBR0UgVE9XRVJcIl1dLElbXCJFLUYtTUgtLS0tXCJdPVtFW1wiR1IuSU4uSUMuU1VSRkFDRSBXQVRFUiBJTlRBS0VcIl1dLElbXCJFLUYtTUktLS0tXCJdPVtFW1wiR1IuSU4uSUMuV0FTVEVXQVRFUiBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbXCJPLU8tRC0tLS0tXCJdPVtFW1wiU1QuSUMuREVNT05TVFJBVElPTlwiXV0sSVtcIk8tSS1SLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXV0sSVtcIk8tVi1CLS0tLS1cIl09W0VbXCJTVC5JQy5CT01CXCJdXSxJW1wiTy1WLVAtLS0tLVwiXT1bRVtcIlNULklDLlBPSVNPTklOR1wiXV0sSVtcIk8tTy1IQS0tLS1cIl09W0VbXCJTVC5JQy5ISUpBQ0tJTkcgKEFJUlBMQU5FKVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiTy1PLUhWLS0tLVwiXT1bRVtcIlNULklDLkhJSkFDS0lORyAoQk9BVClcIl0sRVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sSVtcIk8tTy1IVC0tLS1cIl09W0VbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiUy1HLUlYSC0tLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJW1wiUy1TLU5NLS0tLVwiXT1bRVtcIkdSLklDLkhPU1BJVEFMIFNISVBcIl1dLElbXCJFLU8tQkstLS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5XQVRFUlwiXV0sSVtcIlMtRy1VVUxDLS1cIl09W0VbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl1dLElbXCJTLVMtWEwtLS0tXCJdPVtFW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVtcIlMtRy1FUy0tLS1cIl09W0VbXCJHUi5FUS5TRU5TT1JcIl1dLElbXCJTLUctSVVFLS0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl1dLElbXCJTLUctSVVFTi0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0sRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSIE5VQ0xFQVJcIl1dLElbXCJTLUctSVJQLS0tXCJdPVtFW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdXSxJW1wiUy1HLUlCLS0tLVwiXT1bRVtcIkdSLklOLklDLkJBU0VcIl1dLElbXCJTLUctSVVULS0tXCJdPVtFW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TXCJdXSxJW1wiUy1HLUlULS0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdXSxJW1wiUy1HLUlCQS0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJW1wiUy1HLUlCTi0tLVwiXT1bRVtcIkdSLklDLk5BVkFMXCJdXSxJW1wiUy1HLUlVUC0tLVwiXT1bRVtcIkdSLklDLldBVEVSXCJdXX19LGtdO2Z1bmN0aW9uIHUoSSx0LEUpe3ZhciBSPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigyLDEpLGU9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDMsMSksQT10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCwyKSxDPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cig2LDEpLFQ9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDcsMSksUz10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoOCwyKSxOPXQuZnVuY3Rpb25pZD10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMTAsMTApO3JldHVybiB0LmNvbnRleHQ9RS5jb250ZXh0W3BhcnNlSW50KHRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigyLDEpKV0sdC5hZmZpbGlhdGlvbj17MDpcIlVua25vd25cIiwxOlwiVW5rbm93blwiLDI6XCJGcmllbmRcIiwzOlwiRnJpZW5kXCIsNDpcIk5ldXRyYWxcIiw1OlwiSG9zdGlsZVwiLDY6XCJIb3N0aWxlXCJ9W2VdLHQuZGltZW5zaW9uPXtcIjAwXCI6XCJTZWFcIixcIjAxXCI6XCJBaXJcIixcIjAyXCI6XCJBaXJcIixcIjA1XCI6XCJBaXJcIixcIjA2XCI6XCJBaXJcIiwxMDpcIkdyb3VuZFwiLDExOlwiR3JvdW5kXCIsMTI6XCJHcm91bmRcIiwxNTpcIkdyb3VuZFwiLDIwOlwiR3JvdW5kXCIsMzA6XCJTZWFcIiwzNTpcIlN1YnN1cmZhY2VcIiwzNjpcIlN1YnN1cmZhY2VcIiwzOTpcIlN1YnN1cmZhY2VcIiw0MDpcIkdyb3VuZFwiLDUwOlwiQWlyXCIsNTE6XCJBaXJcIiw1MjpcIkdyb3VuZFwiLDUzOlwiU2VhXCIsNTQ6XCJTdWJzdXJmYWNlXCIsNjA6XCJHcm91bmRcIn1bQV18fFwiXCIsXCIxMFwiIT1BJiZcIjExXCIhPUEmJlwiMjVcIiE9QSYmXCIyN1wiIT1BJiZcIjQwXCIhPUF8fCh0LnVuaXQ9ITApLFwiMDVcIiE9QSYmXCIwNlwiIT1BJiZcIjUwXCIhPUF8fCh0LnNwYWNlPSEwKSxcIjQwXCI9PUEmJih0LmFjdGl2aXR5PSEwKSxcIjIwXCI9PUEmJih0Lmluc3RhbGxhdGlvbj0hMCksXCIyNVwiPT1BJiYodC5jb250cm9sTWVhc3VyZT0hMCksXCI2MFwiPT1BJiYodC5jeWJlcnNwYWNlPSEwKSxcIjM2XCI9PUEmJiExPT09dGhpcy5zdHlsZS5hbHRlcm5hdGVNZWRhbCYmKHQuZmlsbD0hMSksXCIzMFwiPT1BJiYxNWU0PT1OLnN1YnN0cigwLDYpJiYodC5mcmFtZT0hMSksXCIxXCI9PUMmJih0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5hbnRpY2lwYXRlZCksXCIwXCIhPWUmJlwiMlwiIT1lJiZcIjVcIiE9ZXx8KHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLnBlbmRpbmcpLFwiMzBcIj09QSYmMTZlND09Ti5zdWJzdHIoMCw2KSYmKHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLnBlbmRpbmcpLFwiMzVcIj09QSYmMTRlND09Ti5zdWJzdHIoMCw2KSYmKHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLnBlbmRpbmcpLFwiMzVcIj09QSYmMTVlND09Ti5zdWJzdHIoMCw2KSYmKHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLnBlbmRpbmcpLFwiMlwiIT1DJiZcIjNcIiE9QyYmXCI0XCIhPUMmJlwiNVwiIT1DfHwodC5jb25kaXRpb249RS5zdGF0dXNbcGFyc2VJbnQoQyldKSx0LmJhc2VEaW1lbnNpb249dC5kaW1lbnNpb24sdC5iYXNlQWZmaWxhdGlvbj10LmFmZmlsaWF0aW9uLFwiNVwiPT1lJiZcIjFcIj09UiYmKHQuam9rZXI9ITApLFwiNlwiPT1lJiZcIjFcIj09UiYmKHQuZmFrZXI9ITApLCh0Lmpva2VyfHx0LmZha2VyKSYmKHQuYWZmaWxpYXRpb249RS5hZmZpbGlhdGlvblsxXSksXCIwMFwiPT1BJiYodC5kaW1lbnNpb25Vbmtub3duPSEwKSxcIjAwXCI9PUEmJlwiMVwiPT1SJiZcIlVua25vd25cIiE9dC5hZmZpbGlhdGlvbiYmKHQuYWZmaWxpYXRpb249XCJcIiksXCIyN1wiPT1BJiYodC5kaW1lbnNpb249XCJMYW5kRGlzbW91bnRlZEluZGl2aWR1YWxcIix0LmRpc21vdW50ZWQ9ITApLFwiMTVcIiE9QSYmXCI1MlwiIT1BfHwodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMl0pLC0xPFtcIjFcIixcIjNcIixcIjVcIixcIjdcIl0uaW5kZXhPZihUKSYmKHQuZmVpbnREdW1teT0hMCksLTE8W1wiMlwiLFwiM1wiLFwiNlwiLFwiN1wiXS5pbmRleE9mKFQpJiYodC5oZWFkcXVhcnRlcnM9ITApLC0xPFtcIjRcIixcIjVcIixcIjZcIixcIjdcIl0uaW5kZXhPZihUKSYmKHQudGFza0ZvcmNlPSEwKSxTPD0zMCYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVtTXSksMzA8PVMmJlM8NzAmJih0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5W1NdKSw3MDw9UyYmUzw4MCYmKHQubGVhZGVyc2hpcD1FLmVjaGVsb25Nb2JpbGl0eVtTXSksKFwiMDFcIj09QSYmXCIxMlwiPT1OLnN1YnN0cmluZygwLDIpfHxcIjA1XCI9PUEmJlwiMTJcIj09Ti5zdWJzdHJpbmcoMCwyKXx8XCIxMVwiPT1BfHxcIjEyXCI9PUEmJlwiMTJcIj09Ti5zdWJzdHJpbmcoMCwyKXx8XCIxNVwiPT1BJiZcIjE2XCI9PU4uc3Vic3RyaW5nKDAsMil8fFwiMzBcIj09QSYmXCIxNFwiPT1OLnN1YnN0cmluZygwLDIpfHxcIjM1XCI9PUEmJlwiMTJcIj09Ti5zdWJzdHJpbmcoMCwyKSkmJih0LmNpdmlsaWFuPSEwKSx0fWZ1bmN0aW9uIHYoSSx0LEUsUil7dmFyIGU9e30sQT17fSxDPXt9LFQ9e307Zm9yKHZhciBTIGluIEkuX2ljb25TSURDLm51bWJlcilJLl9pY29uU0lEQy5udW1iZXIuaGFzT3duUHJvcGVydHkoUykmJkkuX2ljb25TSURDLm51bWJlcltTXS5jYWxsKHRoaXMsZSxBLEMsVCx0LEUsUik7cmV0dXJue2ljb25zOmUsbTE6QSxtMjpDLGJib3g6VH19dmFyIFE9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOlAsaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIwMVwiPT1lJiYoSVsxMWU0XT1bQVtcIkFSLkkuTUlMSVRBUllcIl1dLElbMTEwMTAwXT1bQVtcIkFSLkkuRklYRUQtV0lORyBEU3ltYm9sXCJdXSxJWzExMDEwMV09W0FbXCJBUi5JLk1FRElDQUwgRVZBQ1VBVElPTlwiXV0sSVsxMTAxMDJdPVtBW1wiQVIuSS5BVFRBQ0svU1RSSUtFXCJdXSxJWzExMDEwM109W0FbXCJBUi5JLkJPTUJFUlwiXV0sSVsxMTAxMDRdPVtBW1wiQVIuSS5GSUdIVEVSXCJdXSxJWzExMDEwNV09W0FbXCJBUi5JLkZJR0hURVIvQk9NQkVSXCJdXSxJWzExMDEwNl09W10sSVsxMTAxMDddPVtBW1wiQVIuSS5DQVJHT1wiXV0sSVsxMTAxMDhdPVtBW1wiQVIuSS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLElbMTEwMTA5XT1bQVtcIkFSLkkuVEFOS0VSXCJdXSxJWzExMDExMF09W0FbXCJBUi5JLlBBVFJPTFwiXV0sSVsxMTAxMTFdPVtBW1wiQVIuSS5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMTAxMTJdPVtBW1wiQVIuSS5UUkFJTkVSXCJdXSxJWzExMDExM109W0FbXCJBUi5JLlVUSUxJVFlcIl1dLElbMTEwMTE0XT1bQVtcIkFSLkkuVlNUT0xcIl1dLElbMTEwMTE1XT1bQVtcIkFSLkkuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdXSxJWzExMDExNl09W0FbXCJBUi5JLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkdcIl1dLElbMTEwMTE3XT1bQVtcIkFSLkkuQU5USVNVUkZBQ0UgV0FSRkFSRVwiXV0sSVsxMTAxMThdPVtBW1wiQVIuSS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbMTEwMTE5XT1bQVtcIkFSLkkuQ09NTVVOSUNBVElPTlNcIl1dLElbMTEwMTIwXT1bQVtcIkFSLkkuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxJWzExMDEyMV09W0FbXCJBUi5JLkVMRUNUUk9OSUMgU1VQUE9SVFwiXV0sSVsxMTAxMjJdPVtBW1wiQVIuSS5HT1ZFUk5NRU5UXCJdXSxJWzExMDEyM109W0FbXCJBUi5JLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJWzExMDEyNF09W0FbXCJBUi5JLlBFUlNPTk5FTCBSRUNPVkVSWSBEU3ltYm9sXCJdXSxJWzExMDEyNV09W0FbXCJBUi5JLlNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxJWzExMDEyNl09W0FbXCJBUi5JLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbMTEwMTI3XT1bQVtcIkFSLkkuVUxUUkEgTElHSFRcIl1dLElbMTEwMTI4XT1bQVtcIkFSLkkuUEhPVE9HUkFQSElDIFJFQ09OTkFJU1NBTkNFXCJdXSxJWzExMDEyOV09W0FbXCJBUi5JLlZJUFwiXV0sSVsxMTAxMzBdPVtBW1wiQVIuSS5TVVBSRVNTSU9OIE9GIEVORU1ZIEFJUiBERUZFTkNFXCJdXSxJWzExMDEzMV09W0FbXCJBUi5JLlBBU1NFTkdFUlwiXV0sSVsxMTAxMzJdPVtBW1wiQVIuSS5FU0NPUlRcIl1dLElbMTEwMTMzXT1bQVtcIkFSLkkuRUxFQ1RST05JQyBBVFRBQ0sgKEVBKVwiXV0sSVsxMTAyMDBdPVtBW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXV0sSVsxMTAzMDBdPVtBW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXV0sSVsxMTA0MDBdPVtBW1wiQVIuSS5WRVJUSUNBTC1UQUtFT0ZGIFVBViAoVlQtVUFWKVwiXV0sSVsxMTA1MDBdPVtBW1wiQVIuSS5NSUxJVEFSWSBCQUxMT09OXCJdXSxJWzExMDYwMF09W0FbXCJBUi5JLk1JTElUQVJZIEFJUlNISVBcIl1dLElbMTEwNzAwXT1bQVtcIkFSLkkuVEVUSEVSRUQgTElHSFRFUiBUSEFOIEFJUlwiXV0sSVsxMmU0XT1bQVtcIkFSLkkuQ0lWSUxJQU5cIl1dLElbMTIwMTAwXT1bQVtcIkFSLkkuQ0lWSUxJQU4gRklYRUQtV0lORyBEU3ltYm9sXCJdXSxJWzEyMDIwMF09W0FbXCJBUi5JLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdXSxJWzEyMDMwMF09W0FbXCJBUi5JLkNJVklMSUFOIFVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdXSxJWzEyMDQwMF09W0FbXCJBUi5JLkNJVklMSUFOIEJBTExPT05cIl1dLElbMTIwNTAwXT1bQVtcIkFSLkkuQ0lWSUxJQU4gQUlSU0hJUFwiXV0sSVsxMjA2MDBdPVtBW1wiQVIuSS5DSVZJTElBTiBURVRIRVJFRCBMSUdIVEVSIFRIQU4gQUlSXCJdXSxJWzEzZTRdPVtBW1wiQVIuSS5XRUFQT05cIl1dLElbMTMwMTAwXT1bQVtcIkFSLkkuQk9NQlwiXV0sSVsxMzAyMDBdPVtBW1wiQVIuSS5VTkRFUldBVEVSIERFQ09ZIERTeW1ib2xcIl1dLElbMTRlNF09W0FbXCJBUi5JLk1BTlVBTCBUUkFDS1wiXV0sdFtcIjAxXCJdPVtBW1wiQUlSLk0xLkFUVEFDS1wiXV0sdFtcIjAyXCJdPVtBW1wiQUlSLk0xLkJPTUJFUlwiXV0sdFtcIjAzXCJdPVtBW1wiQUlSLk0xLkNBUkdPXCJdXSx0W1wiMDRcIl09W0FbXCJBSVIuTTEuRklHSFRFUlwiXV0sdFtcIjA1XCJdPVtBW1wiQUlSLk0xLklOVEVSQ0VQVE9SXCJdXSx0W1wiMDZcIl09W0FbXCJBSVIuTTEuVEFOS0VSXCJdXSx0W1wiMDdcIl09W0FbXCJBSVIuTTEuVVRJTElUWVwiXV0sdFtcIjA4XCJdPVtBW1wiQUlSLk0xLlZTVE9MXCJdXSx0W1wiMDlcIl09W0FbXCJBSVIuTTEuUEFTU0VOR0VSXCJdXSx0WzEwXT1bQVtcIkFJUi5NMS5VTFRSQSBMSUdIVFwiXV0sdFsxMV09W0FbXCJBSVIuTTEuQUlSQk9STkUgQ09NTUFORCBQT1NUXCJdXSx0WzEyXT1bQVtcIkFJUi5NMS5BSVJCT1JORSBFQVJMWSBXQVJOSU5HXCJdXSx0WzEzXT1bQVtcIkFJUi5NMS5HT1ZFUk5NRU5UXCJdXSx0WzE0XT1bQVtcIkFJUi5NMS5NRURFVkFDXCJdXSx0WzE1XT1bQVtcIkFJUi5NMS5FU0NPUlRcIl1dLHRbMTZdPVtBW1wiQUlSLk0xLkpBTU1FUiAvIEVMRUNUUk9OSUMgQ09VTlRFUi1NRUFTVVJFU1wiXV0sdFsxN109W0FbXCJBSVIuTTEuUEFUUk9MXCJdXSx0WzE4XT1bQVtcIkFJUi5NMS5SRUNPTk5BSVNTQU5DRVwiXV0sdFsxOV09W0FbXCJBSVIuTTEuVFJBSU5FUlwiXV0sdFsyMF09W0FbXCJBSVIuTTEuUEhPVE9HUkFQSElDXCJdXSx0WzIxXT1bQVtcIkFJUi5NMS5QRVJTT05ORUwgUkVDT1ZFUllcIl1dLHRbMjJdPVtBW1wiQUlSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sdFsyM109W0FbXCJBSVIuTTEuQ09NTVVOSUNBVElPTlNcIl1dLHRbMjRdPVtBW1wiQUlSLk0xLkVMRUNUUk9OSUMgU1VQUE9SVCAoRVMpXCJdXSx0WzI1XT1bQVtcIkFJUi5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sdFsyNl09W0FbXCJBSVIuTTEuU0VBUkNIIEFORCBSRVNDVUVcIl1dLHRbMjddPVtBW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLHRbMjhdPVtBW1wiQUlSLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXV0sdFsyOV09W0FbXCJBSVIuTTEuVklQXCJdXSx0WzMwXT1bQVtcIkFJUi5NMS5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl1dLHRbMzFdPVtBW1wiQUlSLk0xLlNVUFJFU1NJT04gT0YgRU5FTVkgQUlSIERFRkVOQ0VcIl1dLHRbMzJdPVtBW1wiQUlSLk0xLkFOVElTVVJGQUNFIFdBUkZBUkVcIl1dLHRbMzNdPVtBW1wiQUlSLk0xLkZJR0hURVIvQk9NQkVSXCJdXSx0WzM0XT1bQVtcIkFJUi5NMS5JTlRFTlNJVkUgQ0FSRVwiXV0sdFszNV09W0FbXCJBSVIuTTEuRUxFQ1RST05JQyBBVFRBQ0sgKEVBKVwiXV0sdFszNl09W0FbXCJBSVIuTTEuTVVMVElNSVNTSU9OXCJdXSx0WzM3XT1bQVtcIkFJUi5NMS5ISUpBQ0tJTkdcIl1dLHRbMzhdPVtBW1wiQUlSLk0xLkFTVyBIRUxPLUxBTVBTXCJdXSx0WzM5XT1bQVtcIkFJUi5NMS5BU1cgSEVMTyAtIFNILTYwUlwiXV0sdFs0MF09W0FbXCJBSVIuTTEuSElKQUNLRVJcIl1dLHRbNDFdPVtBW1wiQUlSLk0xLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMVwiXT1bQVtcIkFJUi5NMi5IRUFWWVwiXV0sRVtcIjAyXCJdPVtBW1wiQUlSLk0yLk1FRElVTVwiXV0sRVtcIjAzXCJdPVtBW1wiQUlSLk0yLkxJR0hUXCJdXSxFW1wiMDRcIl09W0FbXCJBSVIuTTIuQk9PTS1PTkxZXCJdXSxFW1wiMDVcIl09W0FbXCJBSVIuTTIuRFJPVUdFLU9OTFlcIl1dLEVbXCIwNlwiXT1bQVtcIkFJUi5NMi5CT09NIEFORCBEUk9VR0VcIl1dLEVbXCIwN1wiXT1bQVtcIkFJUi5NMi5DTE9TRSBSQU5HRVwiXV0sRVtcIjA4XCJdPVtBW1wiQUlSLk0yLlNIT1JUIFJBTkdFXCJdXSxFW1wiMDlcIl09W0FbXCJBSVIuTTIuTUVESVVNIFJBTkdFXCJdXSxFWzEwXT1bQVtcIkFJUi5NMi5MT05HIFJBTkdFXCJdXSxFWzExXT1bQVtcIkFJUi5NMi5ET1dOTElOS0VEXCJdXSxFWzEyXT1bQVtcIkFJUi5NMi5DWUJFUlNQQUNFXCJdXSl9fSxnPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpQLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMDJcIj09ZSYmKElbMTFlNF09W0FbXCJBSVIuTUlTU0lMRS5JQ09OXCJdXSx0W1wiMDFcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl1dLHRbXCIwMlwiXT1bQVtcIkFJUi5NSVNTSUxFLk0xLlNVUkZBQ0VcIl1dLHRbXCIwM1wiXT1bQVtcIkFJUi5NSVNTSUxFLk0xLlNVQlNVUkZBQ0VcIl1dLHRbXCIwNFwiXT1bQVtcIkFJUi5NSVNTSUxFLk0xLlNQQUNFXCJdXSx0W1wiMDVcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5BTlRJLUJBTExJU1RJQ1wiXV0sdFtcIjA2XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTEuQkFMTElTVElDXCJdXSx0W1wiMDdcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5DUlVJU0VcIl1dLHRbXCIwOFwiXT1bQVtcIkFJUi5NSVNTSUxFLk0xLklOVEVSQ0VQVE9SXCJdXSxFW1wiMDFcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5BSVJcIl1dLEVbXCIwMlwiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlNVUkZBQ0VcIl1dLEVbXCIwM1wiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlNVQlNVUkZBQ0VcIl1dLEVbXCIwNFwiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlNQQUNFXCJdXSxFW1wiMDVcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5MQVVOQ0hFRFwiXV0sRVtcIjA2XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuTUlTU0lMRVwiXV0sRVtcIjA3XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuUEFUUklPVFwiXV0sRVtcIjA4XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuU1RBTkRBUkQgTUlTU0lMRSAtIDIgKFNNLTIpXCJdXSxFW1wiMDlcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gNiAoU00tNilcIl1dLEVbMTBdPVtBW1wiQUlSLk1JU1NJTEUuTTIuRVZPTFZFRCBTRUEgU1BBUlJPVyBNSVNTSUxFIChFU1NNKVwiXV0sRVsxMV09W0FbXCJBSVIuTUlTU0lMRS5NMi5ST0xMSU5HIEFJUkZSQU1FIE1JU1NJTEUgKFJBTSlcIl1dLEVbMTJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuU0hPUlQgUkFOR0VcIl1dLEVbMTNdPVtBW1wiQUlSLk1JU1NJTEUuTTIuTUVESVVNIFJBTkdFXCJdXSxFWzE0XT1bQVtcIkFJUi5NSVNTSUxFLk0yLklOVEVSTUVESUFURSBSQU5HRVwiXV0sRVsxNV09W0FbXCJBSVIuTUlTU0lMRS5NMi5MT05HIFJBTkdFXCJdXSxFWzE2XT1bQVtcIkFJUi5NSVNTSUxFLk0yLklOVEVSQ09OVElORU5UQUxcIl1dKX19LGI9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOmksaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIwNVwiPT1lJiYoSVsxMWU0XT1bQVtcIlNQLkkuTUlMSVRBUllcIl1dLElbMTEwMTAwXT1bQVtcIlNQLkkuU1BBQ0UgVkVISUNMRVwiXV0sSVsxMTAyMDBdPVtBW1wiU1AuSS5SRS1FTlRSWSBWRUhJQ0xFXCJdXSxJWzExMDMwMF09W0FbXCJTUEFDRS5QTEFORVQgTEFOREVSXCJdXSxJWzExMDQwMF09W0FbXCJTUC5JLk9SQklURVIgU0hVVFRMRVwiXV0sSVsxMTA1MDBdPVtBW1wiU1AuSS5DQVBTVUxFXCJdXSxJWzExMDYwMF09W0FbXCJTUC5JLlNBVEVMTElURSwgR0VORVJBTFwiXV0sSVsxMTA3MDBdPVtBW1wiU1AuSS5TQVRFTExJVEVcIl1dLElbMTEwODAwXT1bQVtcIlNQLkkuQU5USVNBVEVMTElURSBXRUFQT05cIl1dLElbMTEwOTAwXT1bQVtcIlNQLkkuQVNUUk9OT01JQ0FMIFNBVEVMTElURVwiXV0sSVsxMTFlM109W0FbXCJTUC5JLkJJT1NBVEVMTElURVwiXV0sSVsxMTExMDBdPVtBW1wiU1AuSS5DT01NVU5JQ0FUSU9OUyBTQVRFTExJVEVcIl1dLElbMTExMjAwXT1bQVtcIlNQLkkuRUFSVEggT0JTRVJWQVRJT04gU0FURUxMSVRFXCJdXSxJWzExMTMwMF09W0FbXCJTUC5JLk1JTklBVFVSSVpFRCBTQVRFTExJVEVcIl1dLElbMTExNDAwXT1bQVtcIlNQLkkuTkFWSUdBVElPTkFMIFNBVEVMTElURVwiXV0sSVsxMTE1MDBdPVtBW1wiU1AuSS5SRUNPTk5BSVNTQU5DRSBTQVRFTExJVEVcIl1dLElbMTExNjAwXT1bQVtcIlNQLkkuU1BBQ0UgU1RBVElPTlwiXV0sSVsxMTE3MDBdPVtBW1wiU1AuSS5URVRIRVJFRCBTQVRFTExJVEVcIl1dLElbMTExODAwXT1bQVtcIlNQLkkuV0VBVEhFUiBTQVRFTExJVEVcIl1dLElbMTExOTAwXT1bQVtcIlNQLkkuU1BBQ0UgTEFVTkNIIFZFSElDTEVcIl1dLElbMTJlNF09W0FbXCJTUC5JLkNJVklMSUFOXCJdXSxJWzEyMDEwMF09W0FbXCJTUC5JLkNJVklMSUFOIE9SQklURVIgU0hVVFRMRVwiXV0sSVsxMjAyMDBdPVtBW1wiU1AuSS5DSVZJTElBTiBDQVBTVUxFXCJdXSxJWzEyMDMwMF09W0FbXCJTUC5JLkNJVklMSUFOIFNBVEVMTElURVwiXV0sSVsxMjA0MDBdPVtBW1wiU1AuSS5DSVZJTElBTiBBU1RST05PTUlDQUwgU0FURUxMSVRFXCJdXSxJWzEyMDUwMF09W0FbXCJTUC5JLkNJVklMSUFOIEJJT1NBVEVMTElURVwiXV0sSVsxMjA2MDBdPVtBW1wiU1AuSS5DSVZJTElBTiBDT01NVU5JQ0FUSU9OUyBTQVRFTExJVEVcIl1dLElbMTIwNzAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gRUFSVEggT0JTRVJWQVRJT04gU0FURUxMSVRFXCJdXSxJWzEyMDgwMF09W0FbXCJTUC5JLkNJVklMSUFOIE1JTklBVFVSSVpFRCBTQVRFTExJVEVcIl1dLElbMTIwOTAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gTkFWSUdBVElPTkFMIFNBVEVMTElURVwiXV0sSVsxMjFlM109W0FbXCJTUC5JLkNJVklMSUFOIFNQQUNFIFNUQVRJT05cIl1dLElbMTIxMTAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gVEVUSEVSRUQgU0FURUxMSVRFXCJdXSxJWzEyMTIwMF09W0FbXCJTUC5JLkNJVklMSUFOIFdFQVRIRVIgU0FURUxMSVRFXCJdXSxJWzEzZTRdPVtBW1wiU1AuSS5NQU5VQUwgVFJBQ0tcIl1dLHRbXCIwMVwiXT1bQVtcIlNQLk0xLkxPVyBFQVJUSCBPUkJJVCAoTEVPKVwiXV0sdFtcIjAyXCJdPVtBW1wiU1AuTTEuTUVESVVNIEVBUlRIIE9SQklUIChNRU8pXCJdXSx0W1wiMDNcIl09W0FbXCJTUC5NMS5ISUdIIEVBUlRIIE9SQklUIChIRU8pXCJdXSx0W1wiMDRcIl09W0FbXCJTUC5NMS5HRU9TWU5DSFJPTk9VUyBPUkJJVCAoR1NPKVwiXV0sdFtcIjA1XCJdPVtBW1wiU1AuTTEuR0VPU1RBVElPTkFSWSBPUkJJVCAoR08pXCJdXSx0W1wiMDZcIl09W0FbXCJTUC5NMS5NT0xOSVlBIE9SQklUIChNTylcIl1dLHRbXCIwN1wiXT1bQVtcIlNQLk0xLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMVwiXT1bQVtcIlNQLk0yLk9QVElDQUxcIl1dLEVbXCIwMlwiXT1bQVtcIlNQLk0yLklORlJBUkVEXCJdXSxFW1wiMDNcIl09W0FbXCJTUC5NMi5SQURBUlwiXV0sRVtcIjA0XCJdPVtBW1wiU1AuTTIuU0lHTkFMUyBJTlRFTExJR0VOQ0UgKFNJR0lOVClcIl1dLEVbXCIwNVwiXT1bQVtcIlNQLk0yLkNZQkVSU1BBQ0VcIl1dKX19LEs9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOmksaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIwNlwiPT1lJiYoSVsxMWU0XT1bQVtcIlNQQUNFLk1JU1NJTEUuSUNPTlwiXV0sdFtcIjAxXCJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMS5CQUxMSVNUSUNcIl1dLHRbXCIwMlwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTEuU1BBQ0VcIl1dLHRbXCIwM1wiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTEuSU5URVJDRVBUT1JcIl1dLEVbXCIwMVwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuU0hPUlQgUkFOR0VcIl1dLEVbXCIwMlwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuTUVESVVNIFJBTkdFXCJdXSxFW1wiMDNcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLklOVEVSTUVESUFURSBSQU5HRVwiXV0sRVtcIjA0XCJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5MT05HIFJBTkdFXCJdXSxFW1wiMDVcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLklOVEVSQ09OVElORU5UQUxcIl1dLEVbXCIwNlwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuQVJST1dcIl1dLEVbXCIwN1wiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuR1JPVU5ELUJBU0VEIElOVEVSQ0VQVE9SIChHQkkpXCJdXSxFW1wiMDhcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlBBVFJJT1RcIl1dLEVbXCIwOVwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuU1RBTkRBUkQgTUlTU0lMRSAtIFRFUk1JTkFMIFBIQVNFIChTTS1UKVwiXV0sRVsxMF09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlNUQU5EQVJEIE1JU1NJTEUgLSAzIChTTS0zKVwiXV0sRVsxMV09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlRFUk1JTkFMIEhJR0gtQUxUSVRVREUgQVJFQSBERUZFTlNFIChUSEFBRClcIl1dLEVbMTJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5TUEFDRVwiXV0sRVsxM109W0FbXCJTUEFDRS5NSVNTSUxFLk0yLkNMT1NFIFJBTkdFXCJdXSxFWzE0XT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuREVCUklTXCJdXSxFWzE1XT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuVU5LTk9XTlwiXV0pfX0sWD17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjEwXCI9PWUmJihJWzExZTRdPVtBW1wiR1IuSUMuQ09NTUFORCBBTkQgQ09OVFJPTFwiXV0sSVsxMTAxMDBdPVtBW1wiR1IuSUMuRkYuQlJPQURDQVNUIFRSQU5TTUlUVEVSIEFOVEVOTkFcIl1dLElbMTEwMjAwXT1bQVtcIkdSLklDLkNJVklMIEFGRkFJUlNcIl1dLElbMTEwMzAwXT1bQVtcIkdSLklDLkNJVklMLU1JTElUQVJZLUNPT1BFUkFUSU9OXCJdXSxJWzExMDQwMF09W0FbXCJHUi5JQy5JTkZPUk1BVElPTiBPUEVSQVRJT05TXCJdXSxJWzExMDUwMF09W0FbXCJHUi5JQy5MSUFJU09OXCJdXSxJWzExMDUwMV09W0FbXCJHUi5JQy5MSUFJU09OXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMTA2MDBdPVtBW1wiR1IuSUMuTUlMSVRBUlkgSU5GT1JNQVRJT04gU1VQUE9SVCBPUEVSQVRJT05TIChNSVNPKVwiXV0sSVsxMTA2MDFdPVtBW1wiR1IuSUMuTUlMSVRBUlkgSU5GT1JNQVRJT04gU1VQUE9SVCBPUEVSQVRJT05TIChNSVNPKVwiXSxBW1wiR1IuSUMuRkYuQlJPQURDQVNUIFRSQU5TTUlUVEVSIEFOVEVOTkFcIl1dLElbMTEwNzAwXT1bQVtcIkdSLklDLlJBRElPXCJdXSxJWzExMDgwMF09W0FbXCJHUi5JQy5SQURJTyBSRUxBWVwiXV0sSVsxMTA5MDBdPVtBW1wiR1IuSUMuUkFESU8gVEVMRVRZUEUgQ0VOVFJFXCJdXSxJWzExMWUzXT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXV0sSVsxMTEwMDFdPVtBW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEFbXCJHUi5JQy5SQURJT1wiXV0sSVsxMTEwMDJdPVtBW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEFbXCJHUi5JQy5SQURJTyBSRUxBWVwiXV0sSVsxMTEwMDNdPVtBW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEFbXCJHUi5JQy5SQURJTyBURUxFVFlQRSBDRU5UUkVcIl1dLElbMTExMDA0XT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXSxBW1wiR1IuSS5GRi5TQVRFTExJVEVcIl1dLElbMTExMDA1XT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXSxBW1wiR1IuSUMuVklERU8gSU1BR0VSWVwiXV0sSVsxMTExMDBdPVtBW1wiR1IuSS5GRi5TQVRFTExJVEVcIl1dLElbMTExMjAwXT1bQVtcIkdSLklDLlZJREVPIElNQUdFUllcIl1dLElbMTExMzAwXT1bQVtcIkdSLklDLlNQQUNFXCJdXSxJWzExMTQwMF09W0FbXCJHUi5JQy5TUEVDSUFMIFRST09QU1wiXV0sSVsxMmU0XT1bXSxJWzEyMDEwMF09W0FbXCJHUi5JQy5GRi5BSVIgQVNTQVVMVCBXSVRIIE9SR0FOSUMgTElGVFwiXV0sSVsxMjAyMDBdPVtBW1wiR1IuSUMuQUlSIFRSQUZGSUMgU0VSVklDRVNcIl1dLElbMTIwMzAwXT1bQVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbMTIwNDAwXT1bQVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl1dLElbMTIwNDAxXT1bQVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sQVtcIkdSLklDLkFSTU9VUlwiXV0sSVsxMjA0MDJdPVtBW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxBW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJWzEyMDUwMF09W0FbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTIwNTAxXT1bQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTIwNTAyXT1bQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVsxMjA2MDBdPVtBW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl1dLElbMTIwNjAxXT1bQVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMjA3MDBdPVtBW1wiR1IuSUMuQVZJQVRJT04gQ09NUE9TSVRFXCJdXSxJWzEyMDgwMF09W0FbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdXSxJWzEyMDgwMV09W0FbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMjA5MDBdPVtBW1wiR1IuSUMuQ09NQkFUXCJdXSxJWzEyMWUzXT1bQVtcIkdSLklDLkNPTUJJTkVEIEFSTVNcIl1dLElbMTIxMTAwXT1bQVtcIkdSLklDLkZGLklORkFOVFJZXCJdXSxJWzEyMTEwMV09W0FbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxBW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVsxMjExMDJdPVtBW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sQVtcIkdSLklDLkFSTU9VUlwiXV0sSVsxMjExMDNdPVtBW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sQVtcIkdSLklDLkZGLk1BSU4gR1VOIFNZU1RFTVwiXV0sSVsxMjExMDRdPVtBW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sQVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVsxMjExMDVdPVtBW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuSUMuRkYuTUFJTiBHVU4gU1lTVEVNXCJdXSxJWzEyMTEwNl09W0FbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl1dLElbMTIxMjAwXT1bQVtcIkdSLklDLk9CU0VSVkVSL09CU0VSVkFUSU9OXCJdXSxJWzEyMTMwMF09W0FbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMjEzMDFdPVtBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sQVtcIkdSLklDLlNVUlZFSUxMQU5DRVwiXV0sSVsxMjEzMDJdPVtBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sQVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbMTIxMzAzXT1bQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEFbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbMTIxNDAwXT1bQVtcIkdSLklDLlNFQS1BSVItTEFORFwiXV0sSVsxMjE1MDBdPVtBW1wiR1IuSUMuU05JUEVSXCJdXSxJWzEyMTYwMF09W0FbXCJHUi5JQy5TVVJWRUlMTEFOQ0VcIl1dLElbMTIxNzAwXT1bQVtcIkdSLklDLlNQRUNJQUwgRk9SQ0VTXCJdXSxJWzEyMTgwMF09W0FbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJWzEyMTgwMV09W0FbXCJHUi5JQy5GSVhFRCBXSU5HIE1JU09cIl1dLElbMTIxODAyXT1bQVtcIkdSLklDLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sQVtcIkdSLklDLkZGLklORkFOVFJZXCJdXSxJWzEyMTgwM109W0FbXCJHUi5JQy5DT01CQVRBTlRcIl0sQVtcIkdSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVMgKFNPRilcIl1dLElbMTIxODA0XT1bQVtcIkdSLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl0sQVtcIkdSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVMgKFNPRilcIl1dLElbMTIxODA1XT1bQVtcIlNPRi5JQy5VTkRFUldBVEVSIERFTU9MSVRJT04gVEVBTVwiXV0sSVsxMjE5MDBdPVtBW1wiR1IuSUMuVU5NQU5ORUQgU1lTVEVNU1wiXV0sSVsxMjJlM109W0FbXCJHUi5JQy5SQU5HRVJcIl1dLElbMTNlNF09W10sSVsxMzAxMDBdPVtBW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl1dLElbMTMwMTAxXT1bQVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEFbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl1dLElbMTMwMTAyXT1bQVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEFbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdXSxJWzEzMDEwM109W0FbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxBW1wiR1IuSUMuQUlSIEFORCBNSVNTSUxFIERFRkVOU0VcIl1dLElbMTMwMjAwXT1bQVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sQVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEFbXCJHUi5NMS5OQVZBTFwiXV0sSVsxMzAzMDBdPVtBW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdXSxJWzEzMDMwMV09W3MuX3NjYWxlKC44LEFbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pLEFbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTMwMzAyXT1bcy5fc2NhbGUoLjgsQVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTMwMzAzXT1bcy5fc2NhbGUoLjgsQVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJWzEzMDQwMF09W0FbXCJHUi5JQy5GSUVMRCBBUlRJTExFUlkgT0JTRVJWRVJcIl1dLElbMTMwNTAwXT1bQVtcIkdSLklDLkpPSU5UIEZJUkUgU1VQUE9SVFwiXV0sSVsxMzA2MDBdPVtBW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl1dLElbMTMwNzAwXT1bQVtcIkdSLklDLk1JU1NJTEVcIl1dLElbMTMwODAwXT1bQVtcIkdSLklDLk1PUlRBUlwiXV0sSVsxMzA4MDFdPVtBW1wiR1IuSUMuTU9SVEFSXCJdLEFbXCJHUi5NMi5UUkFDS0VEXCJdXSxJWzEzMDgwMl09W0FbXCJHUi5JQy5NT1JUQVJcIl0sQVtcIkdSLk0yLlRSVUNLXCJdXSxJWzEzMDgwM109W0FbXCJHUi5JQy5NT1JUQVJcIl0sQVtcIkdSLk0yLlRPV0VEXCJdXSxJWzEzMDkwMF09W0FbXCJHUi5JQy5TVVJWRVlcIl1dLElbMTRlNF09W10sSVsxNDAxMDBdPVtBW1wiR1IuSUMuQ0JSTlwiXV0sSVsxNDAxMDFdPVtBW1wiR1IuSUMuQ0JSTlwiXSxBW1wiR1IuSUMuQVJNT1VSXCJdXSxJWzE0MDEwMl09W0FbXCJHUi5JQy5DQlJOXCJdLEFbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbMTQwMTAzXT1bQVtcIkdSLklDLkNCUk5cIl0sQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJWzE0MDEwNF09W0FbXCJHUi5JQy5DQlJOXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxBW1wiR1IuSUMuQVJNT1VSXCJdXSxJWzE0MDEwNV09W0FbXCJHUi5JQy5DQlJOXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxBW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJWzE0MDEwNl09W0FbXCJHUi5JQy5DQlJOXCJdLEFbXCJHUi5DSEVNSUNBTCwgQklPTE9HSUNBTCwgUkFESU9MT0dJQ0FMLCBOVUNMRUFSLCBBTkQgSElHSC1ZSUVMRCBFWFBMT1NJVkVTXCJdXSxJWzE0MDIwMF09W0FbXCJHUi5JQy5DT01CQVQgU1VQUE9SVCAoTUFOT0VVVlJFIEVOSEFOQ0VNRU5UKVwiXV0sSVsxNDAzMDBdPVtBW1wiR1IuSUMuQ1JJTUlOQUwgSU5WRVNUSUdBVElPTiBESVZJU0lPTlwiXV0sSVsxNDA0MDBdPVtBW1wiR1IuSUMuRElWRVIsIENJVklMSUFOXCJdXSxJWzE0MDUwMF09W0FbXCJHUi5JQy5ET0dcIl1dLElbMTQwNjAwXT1bQVtcIkdSLklDLkRSSUxMSU5HXCJdXSxJWzE0MDcwMF09W0FbXCJHUi5JQy5FTkdJTkVFUlwiXV0sSVsxNDA3MDFdPVtBW1wiR1IuSUMuRU5HSU5FRVIgTUVDSEFOSVpFRFwiXV0sSVsxNDA3MDJdPVtBW1wiR1IuSUMuRU5HSU5FRVJcIl0sQVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVsxNDA3MDNdPVtBW1wiR1IuSUMuRU5HSU5FRVJcIl0sQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJWzE0MDgwMF09W0FbXCJHUi5JQy5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl1dLElbMTQwOTAwXT1bQVtcIkdSLklDLkZJRUxEIENBTVAgQ09OU1RSVUNUSU9OXCJdXSxJWzE0MWUzXT1bQVtcIkdSLklDLkZJUkUgUFJPVEVDVElPTlwiXV0sSVsxNDExMDBdPVtBW1wiR1IuSUMuR0VPU1BBVElBTCBTVVBQT1JUXCJdXSxJWzE0MTIwMF09W0FbXCJHUi5JQy5NSUxJVEFSWSBQT0xJQ0VcIl1dLElbMTQxMzAwXT1bQVtcIkdSLklDLk1JTkVcIl1dLElbMTQxNDAwXT1bQVtcIkdSLklDLk1JTkUgQ0xFQVJJTkdcIl1dLElbMTQxNTAwXT1bQVtcIkdSLklDLk1JTkUgTEFVTkNISU5HXCJdXSxJWzE0MTYwMF09W0FbXCJHUi5JQy5NSU5FIExBWUlOR1wiXV0sSVsxNDE3MDBdPVtBW1wiR1IuSUMuU0VDVVJJVFlcIl1dLElbMTQxNzAxXT1bQVtcIkdSLklDLlNFQ1VSSVRZXCJdLEFbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTQxNzAyXT1bQVtcIkdSLklDLlNFQ1VSSVRZXCJdLEFbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbMTQxODAwXT1bQVtcIkdSLklDLlNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxJWzE0MTkwMF09W0FbXCJHUi5JQy5TRUNVUklUWSBQT0xJQ0UgKEFJUilcIl1dLElbMTQyZTNdPVtBW1wiR1IuSUMuU0hPUkUgUEFUUk9MXCJdXSxJWzE0MjEwMF09W0FbXCJHUi5JQy5UT1BPR1JBUEhJQ1wiXV0sSVsxNDIyMDBdPVtBW1wiR1IuSUMuQUlSIEFORCBNSVNTSUxFIERFRkVOU0VcIl1dLElbMTVlNF09W10sSVsxNTAxMDBdPVtBW1wiR1IuSUMuRkYuQU5BTFlTSVNcIl1dLElbMTUwMjAwXT1bQVtcIkdSLklDLkNPVU5URVItSU5URUxMSUdFTkNFXCJdXSxJWzE1MDMwMF09W0FbXCJHUi5JQy5GRi5ESVJFQ1RJT04gRklORElOR1wiXV0sSVsxNTA0MDBdPVtBW1wiR1IuSUMuRUxFQ1RST05JQyBSQU5HSU5HXCJdXSxJWzE1MDUwMF09W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl1dLElbMTUwNTAxXT1bQVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxBW1wiR1IuSUMuRkYuQU5BTFlTSVNcIl1dLElbMTUwNTAyXT1bQVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxBW1wiR1IuSUMuRkYuRElSRUNUSU9OIEZJTkRJTkdcIl1dLElbMTUwNTAzXT1bQVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxBW1wiR1IuSUMuRkYuSU5URVJDRVBUXCJdXSxJWzE1MDUwNF09W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sQVtcIkdSLklDLkZGLkpBTU1JTkdcIl1dLElbMTUwNTA1XT1bQVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxBW1wiR1IuSUMuRkYuU0VBUkNIXCJdXSxJWzE1MDYwMF09W0FbXCJHUi5JQy5GRi5JTlRFUkNFUFRcIl1dLElbMTUwNzAwXT1bQVtcIkdSLklDLklOVEVSUk9HQVRJT05cIl1dLElbMTUwODAwXT1bQVtcIkdSLklDLkZGLkpBTU1JTkdcIl1dLElbMTUwOTAwXT1bQVtcIkdSLklDLkpPSU5UIElOVEVMTElHRU5DRSBDRU5UUkVcIl1dLElbMTUxZTNdPVtBW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdXSxJWzE1MTEwMF09W0FbXCJHUi5JQy5GRi5TRUFSQ0hcIl1dLElbMTUxMjAwXT1bQVtcIkdSLklDLlNFTlNPUlwiXV0sSVsxNTEzMDBdPVtBW1wiR1IuSUMuTUlMSVRBUlkgSElTVE9SWVwiXV0sSVsxNmU0XT1bQVtcIkdSLklDLlNVU1RBSU5NRU5UXCJdXSxJWzE2MDEwMF09W0FbXCJHUi5JQy5BRE1JTklTVFJBVElWRVwiXV0sSVsxNjAyMDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBBTExcIl1dLElbMTYwMzAwXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEFbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJWzE2MDQwMF09W0FbXCJHUi5JQy5BTU1VTklUSU9OXCJdXSxJWzE2MDUwMF09W0FbXCJHUi5JQy5CQU5EXCJdXSxJWzE2MDUwMV09W0FbXCJHUi5JQy5BUk1ZIE1VU0lDXCJdXSxJWzE2MDYwMF09W0FbXCJHUi5JQy5DT01CQVQgU0VSVklDRSBTVVBQT1JUXCJdXSxJWzE2MDcwMF09W0FbXCJHUi5JQy5GSU5BTkNFXCJdXSxJWzE2MDgwMF09W0FbXCJHUi5JQy5KVURHRSBBRFZPQ0FURSBHRU5FUkFMXCJdXSxJWzE2MDkwMF09W0FbXCJHUi5JQy5MQUJPVVJcIl1dLElbMTYxZTNdPVtBW1wiR1IuSUMuTEFVTkRSWS9CQVRIXCJdXSxJWzE2MTEwMF09W0FbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXV0sSVsxNjEyMDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5NQVRFUklFTFwiXV0sSVsxNjEzMDBdPVtBW1wiR1IuSUMuRkYuTUVESUNBTFwiXV0sSVsxNjE0MDBdPVtBW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbMTYxNTAwXT1bQVtcIkdSLklDLk1PUkFMRSwgV0VMRkFSRSwgQU5EIFJFQ1JFQVRJT05cIl1dLElbMTYxNjAwXT1bQVtcIkdSLklDLk1PUlRVQVJZIEFGRkFJUlNcIl1dLElbMTYxNzAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgTVVMVElQTEVcIl1dLElbMTYxODAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgSVwiXV0sSVsxNjE5MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5OQVRPIFNVUFBMWSBDTEFTUyBJSVwiXV0sSVsxNjJlM109W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVsxNjIxMDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5OQVRPIFNVUFBMWSBDTEFTUyBJVlwiXV0sSVsxNjIyMDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBWXCJdXSxJWzE2MjMwMF09W0FbXCJHUi5JQy5PUkROQU5DRVwiXV0sSVsxNjI0MDBdPVtBW1wiR1IuSUMuUEVSU09OTkVMIFNFUlZJQ0VTXCJdXSxJWzE2MjUwMF09W0FbXCJHUi5JQy5QRVRST0xFVU0gT0lMIExVQlJJQ0FOVFNcIl1dLElbMTYyNjAwXT1bQVtcIkdSLklDLlBJUEVMSU5FXCJdXSxJWzE2MjcwMF09W0FbXCJHUi5JQy5QT1NUQUxcIl1dLElbMTYyODAwXT1bQVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTXCJdXSxJWzE2MjkwMF09W0FbXCJHUi5JQy5RVUFSVEVSTUFTVEVSXCJdXSxJWzE2M2UzXT1bQVtcIkdSLklDLlJBSUxIRUFEXCJdXSxJWzE2MzEwMF09W0FbXCJHUi5JQy5SRUxJR0lPVVMgU1VQUE9SVFwiXV0sSVsxNjMyMDBdPVtBW1wiR1IuSUMuUkVQTEFDRU1FTlQgSE9MRElORyBVTklUXCJdXSxJWzE2MzMwMF09W0FbXCJHUi5JQy5TRUFQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJWzE2MzQwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl1dLElbMTYzNTAwXT1bQVtcIkdSLklDLkpPSU5UIElORk9STUFUSU9OIEJVUkVBVVwiXV0sSVsxNjM2MDBdPVtBW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl1dLElbMTYzNjAxXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEFbXCJHUi5JQy5GTE9BVElORyBDUkFGVFwiXV0sSVsxNjM3MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBJXCJdXSxJWzE2MzgwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIElJXCJdXSxJWzE2MzkwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVsxNjRlM109W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIElWXCJdXSxJWzE2NDEwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIFZcIl1dLElbMTY0MjAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgVklcIl1dLElbMTY0MzAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgVklJXCJdXSxJWzE2NDQwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIFZJSUlcIl1dLElbMTY0NTAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgSVhcIl1dLElbMTY0NjAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgWFwiXV0sSVsxNjQ3MDBdPVtBW1wiR1IuSUMuV0FURVJcIl1dLElbMTY0ODAwXT1bQVtcIkdSLklDLldBVEVSIFBVUklGSUNBVElPTlwiXV0sSVsxNjQ5MDBdPVtBW1wiR1IuSUMuUFVCTElDIEFGRkFJUlMgQlJPQURDQVNUXCJdXSxJWzE2NWUzXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgQUxMXCJdXSxJWzE2NTEwMF09W0FbXCJHUi5JQy5JTlRFUlBSRVRFUi9UUkFOU0xBVE9SXCJdXSxJWzE2NTIwMF09W0FbXCJHUi5JQy5TVVBQT1JUXCJdXSxJWzE2NTMwMF09W0FbXCJHUi5JQy5BUk1ZIEZJRUxEIFNVUFBPUlRcIl1dLElbMTY1NDAwXT1bQVtcIkdSLklDLkNPTlRSQUNUSU5HIFNFUlZJQ0VTXCJdXSxJWzE2NTUwMF09W0FbXCJHUi5JQy5QQVJBQ0hVVEUgUklHR0VSXCJdXSxJWzE3ZTRdPVtdLElbMTcwMTAwXT1bQVtcIkdSLklDLk5BVkFMXCJdXSxJWzE4ZTRdPVtdLElbMTgwMTAwXT1bQVtcIkdSLklDLkFMTElFRCBDT01NQU5EIEVVUk9QRSBSQVBJRCBSRUFDVElPTiBDT1JQUyAoQVJSQylcIl1dLElbMTgwMjAwXT1bQVtcIkdSLklDLkFMTElFRCBDT01NQU5EIE9QRVJBVElPTlNcIl1dLElbMTgwMzAwXT1bQVtcIkdSLklDLklOVEVSTkFUSU9OQUwgU0VDVVJJVFkgQVNTSVNUQU5DRSBGT1JDRSAoSVNBRilcIl1dLElbMTgwNDAwXT1bQVtcIkdSLklDLk1VTFRJTkFUSU9OQUwgKE1OKVwiXV0sSVsxOWU0XT1bQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl1dLElbMmU1XT1bQVtcIkdSLklDLkZGLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsyMDAxMDBdPVtBW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdXSxJWzIwMDIwMF09W0FbXCJHUi5JQy5GRi5CT1JERVIgUEFUUk9MXCJdXSxJWzIwMDMwMF09W0FbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl1dLElbMjAwNDAwXT1bQVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdXSxJWzIwMDUwMF09W0FbXCJHUi5JQy5GRi5ERVBBUlRNRU5UIE9GIEpVU1RJQ0UgKERPSilcIl1dLElbMjAwNjAwXT1bQVtcIkdSLklDLkZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04gKEZCSSlcIl1dLElbMjAwNzAwXT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsyMDA4MDBdPVtBW1wiR1IuSUMuRkYuUFJJU09OXCJdXSxJWzIwMDkwMF09W0FbXCJHUi5JQy5VTklURUQgU1RBVEVTIFNFQ1JFVCBTRVJWSUNFKFRSRUFTKSAoVVNTUylcIl1dLElbMjAxZTNdPVtBW1wiR1IuSUMuVFJBTlNQT1JUQVRJT04gU0VDVVJJVFkgQUdFTkNZIChUU0EpXCJdXSxJWzIwMTEwMF09W0FbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdXSxJWzIwMTIwMF09W0FbXCJHUi5JQy5GRi5VUyBNQVJTSEFMUyBTRVJWSUNFXCJdXSxJWzIwMTMwMF09W0FbXCJTVC5JQy5JTlRFUk5BTCBTRUNVUklUWSBGT1JDRVwiXV0sdFtcIjAxXCJdPVtDP0FbXCJHUi5NMS5UQUNUSUNBTCBTQVRFTExJVEUgQ09NTVVOSUNBVElPTlNcIl06QVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sdFtcIjAyXCJdPVtBW1wiR1IuTTEuQVJFQVwiXV0sdFtcIjAzXCJdPVtBW1wiR1IuTTEuQVRUQUNLXCJdXSx0W1wiMDRcIl09W0FbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdXSx0W1wiMDVcIl09W0FbXCJHUi5NMS5CT1JERVJcIl1dLHRbXCIwNlwiXT1bQVtcIkdSLk0xLkJSSURHSU5HXCJdXSx0W1wiMDdcIl09W0FbXCJHUi5NMS5DSEVNSUNBTFwiXV0sdFtcIjA4XCJdPVtBW1wiR1IuTTEuQ0xPU0UgUFJPVEVDVElPTlwiXV0sdFtcIjA5XCJdPVtBW1wiR1IuTTEuQ09NQkFUXCJdXSx0WzEwXT1bQVtcIkdSLk0xLkNPTU1BTkQgQU5EIENPTlRST0xcIl1dLHRbMTFdPVtBW1wiR1IuTTEuQ09NTVVOSUNBVElPTlMgQ09OVElOR0VOQ1kgUEFDS0FHRVwiXV0sdFsxMl09W0FbXCJHUi5NMS5DT05TVFJVQ1RJT05cIl1dLHRbMTNdPVtBW1wiR1IuTTEuQ1JPU1MgQ1VMVFVSQUwgQ09NTVVOSUNBVElPTlwiXV0sdFsxNF09W0FbXCJHUi5NMS5DUk9XRCBBTkQgUklPVCBDT05UUk9MXCJdXSx0WzE1XT1bQVtcIkdSLk0xLkRFQ09OVEFNSU5BVElPTlwiXV0sdFsxNl09W0FbXCJHUi5NMS5ERVRFTlRJT05cIl1dLHRbMTddPVtBW1wiR1IuTTEuRElSRUNUIENPTU1VTklDQVRJT05TXCJdXSx0WzE4XT1bQVtcIkdSLk0xLkRJVklOR1wiXV0sdFsxOV09W0FbXCJHUi5NMS5ESVZJU0lPTlwiXV0sdFsyMF09W0FbXCJHUi5NMS5ET0dcIl1dLHRbMjFdPVtBW1wiR1IuTTEuRFJJTExJTkdcIl1dLHRbMjJdPVtBW1wiR1IuTTEuRUxFQ1RSTy1PUFRJQ0FMXCJdXSx0WzIzXT1bQVtcIkdSLk0xLkVOSEFOQ0VEXCJdXSx0WzI0XT1bQVtcIkdSLk0xLkVYUExPU0lWRSBPUkROQU5DRSBESVNQT1NBTFwiXV0sdFsyNV09W0FbXCJHUi5NMS5GSVJFIERJUkVDVElPTiBDRU5UUkVcIl1dLHRbMjZdPVtBW1wiR1IuTTEuRk9SQ0VcIl1dLHRbMjddPVtBW1wiR1IuTTEuRk9SV0FSRFwiXV0sdFsyOF09W0FbXCJHUi5NMS5HUk9VTkQgU1RBVElPTiBNT0RVTEVcIl1dLHRbMjldPVtBW1wiR1IuTTEuTEFORElORyBTVVBQT1JUXCJdXSx0WzMwXT1bQVtcIkdSLk0xLkxBUkdFIEVYVEVOU0lPTiBOT0RFXCJdXSx0WzMxXT1bQVtcIkdSLk0xLk1BSU5URU5BTkNFXCJdXSx0WzMyXT1bQVtcIkdSLk0xLk1FVEVPUk9MT0dJQ0FMXCJdXSx0WzMzXT1bQVtcIkdSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVcIl1dLHRbMzRdPVtBW1wiR1IuTTEuTUlTU0lMRVwiXV0sdFszNV09W0FbXCJHUi5NMS4oTU9CSUxFKSBBRFZJU09SIEFORCBTVVBQT1JUXCJdXSx0WzM2XT1bQVtcIkdSLk0xLk1PQklMRSBTVUJTQ1JJQkVSIEVRVUlQTUVOVFwiXV0sdFszN109W0FbXCJHUi5NMS5NT0JJTElUWSBTVVBQT1JUXCJdXSx0WzM4XT1bQVtcIkdSLk0xLk1PVkVNRU5UIENPTlRST0wgQ0VOVFJFXCJdXSx0WzM5XT1bQVtcIkdSLk0xLk1VTFRJTkFUSU9OQUxcIl1dLHRbNDBdPVtBW1wiR1IuTTEuTVVMVElOQVRJT05BTCBTUEVDSUFMSVpFRCBVTklUXCJdXSx0WzQxXT1bQVtcIkdSLk0xLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sdFs0Ml09W0FbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSAxXCJdXSx0WzQzXT1bQVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDJcIl1dLHRbNDRdPVtBW1wiR1IuTTEuTkFUTyBNRURJQ0FMIFJPTEUgM1wiXV0sdFs0NV09W0FbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSA0XCJdXSx0WzQ2XT1bQVtcIkdSLk0xLk5BVkFMXCJdXSx0WzQ3XT1bQz9BW1wiR1IuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl06QVtcIkdSLk0xLk5PREUgQ0VOVFJFXCJdXSx0WzQ4XT1bQVtcIkdSLk0xLk5VQ0xFQVJcIl1dLHRbNDldPVtBW1wiR1IuTTEuT1BFUkFUSU9OU1wiXV0sdFs1MF09W0FbXCJHUi5NMS5SQURBUlwiXV0sdFs1MV09W0FbXCJHUi5NMS5SQURJTyBGUkVRVUVOQ1kgSURFTlRJRklDQVRJT04gKFJGSUQpIElOVEVSUk9HQVRPUi8gU0VOU09SXCJdXSx0WzUyXT1bQVtcIkdSLk0xLlJBRElPTE9HSUNBTFwiXV0sdFs1M109W0FbXCJHUi5NMS5TRUFSQ0ggQU5EIFJFU0NVRVwiXV0sdFs1NF09W0FbXCJHUi5NMS5TRUNVUklUWVwiXV0sdFs1NV09W0FbXCJHUi5NMS5TRU5TT1JcIl1dLHRbNTZdPVtDP0FbXCJHUi5NMS5XRUFQT05cIl06QVtcIkdSLk0xLlNFTlNPUiBDT05UUk9MIE1PRFVMRVwiXV0sdFs1N109W0FbXCJHUi5NMS5TSUdOQUxTIElOVEVMTElHRU5DRVwiXV0sdFs1OF09W0M/QVtcIkdSLk0xLkFSTU9SRURcIl06QVtcIkdSLk0xLlNJTkdMRSBTSEVMVEVSIFNXSVRDSFwiXV0sdFs1OV09W0FbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdXSx0WzYwXT1bQVtcIkdSLk0xLlNNT0tFXCJdXSx0WzYxXT1bQVtcIkdSLk0xLlNOSVBFUlwiXV0sdFs2Ml09W0FbXCJHUi5NMS5TT1VORCBSQU5HSU5HXCJdXSx0WzYzXT1bQVtcIkdSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVMgKFNPRilcIl1dLHRbNjRdPVtBW1wiR1IuTTEuU1BFQ0lBTCBXRUFQT05TIEFORCBUQUNUSUNTXCJdXSx0WzY1XT1bQVtcIkdSLk0xLlNVUlZFWVwiXV0sdFs2Nl09W0FbXCJHUi5NMS5UQUNUSUNBTCBFWFBMT0lUQVRJT05cIl1dLHRbNjddPVtBW1wiR1IuTTEuVEFSR0VUIEFDUVVJU0lUSU9OXCJdXSx0WzY4XT1bQVtcIkdSLk0xLlRPUE9HUkFQSElDXCJdXSx0WzY5XT1bQVtcIkdSLk0xLlVUSUxJVFlcIl1dLHRbNzBdPVtBW1wiR1IuTTEuVklERU8gSU1BR0VSWVwiXV0sdFs3MV09W0M/QVtcIkdSLk0xLk1PQklMSVRZIEFTU0FVTFRcIl06QVtcIkdSLk0xLkFDQ0lERU5UXCJdXSx0WzcyXT1bQz9BW1wiR1IuTTEuQU1QSElCSU9VUyBXQVJGQVJFIFNISVAgXCJdOkFbXCJHUi5NMS5PVEhFUlwiXV0sdFs3M109W0M/QVtcIkdSLk0xLkxPQUQgSEFORExJTkcgU1lTVEVNXCJdOkFbXCJHUi5NMS5DSVZJTElBTlwiXV0sdFs3NF09W0M/QVtcIkdSLk0xLlBBTExFVElaRUQgTE9BRCBTWVNURU1cIl06QVtcIkdSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sdFs3NV09W0FbXCJHUi5NMS5NRURFVkFDXCJdXSx0Wzc2XT1bQVtcIkdSLk0xLkNZQkVSU1BBQ0VcIl1dLHRbNzddPVtBW1wiR1IuTTEuU1VQUE9SVFwiXV0sdFs3OF09W0FbXCJHUi5NMS5BVklBVElPTlwiXV0sdFs3OV09W0FbXCJHUi5NMS5ST1VURSwgUkVDT05OQUlTU0FOQ0UsIEFORCBDTEVBUkFOQ0VcIl1dLHRbODBdPVtBW1wiR1IuTTEuVElMVC1ST1RPUlwiXV0sdFs4MV09W0FbXCJHUi5NMS5DT01NQU5EIFBPU1QgTk9ERVwiXV0sdFs4Ml09W0FbXCJHUi5NMS5KT0lOVCBORVRXT1JLIE5PREVcIl1dLHRbODNdPVtBW1wiR1IuTTEuUkVUUkFOU01JU1NJT04gU0lURVwiXV0sdFs4NF09W0FbXCJHUi5NMS5BU1NBVUxUXCJdXSx0Wzg1XT1bQVtcIkdSLk0xLldFQVBPTlNcIl1dLHRbODZdPVtBW1wiR1IuTTEuQ1JJTUlOQUwgSU5WRVNUSUdBVElPTiBESVZJU0lPTlwiXV0sdFs4N109W0FbXCJHUi5NMS5ESUdJVEFMXCJdXSx0Wzg4XT1bQVtcIkdSLk0xLk5FVFdPUksgT1IgTkVUV09SSyBPUEVSQVRJT05TXCJdXSx0Wzg5XT1bQVtcIkdSLk0xLkFJUkZJRUxELCBBRVJJQUwgUE9SVCBPRiBERUJBUktBVElPTiwgT1IgQUVSSUFMIFBPUlQgT0YgRU1CQVJLQVRJT05cIl1dLHRbOTBdPVtBW1wiR1IuTTEuUElQRUxJTkVcIl1dLHRbOTFdPVtBW1wiR1IuTTEuUE9TVEFMXCJdXSx0WzkyXT1bQVtcIkdSLk0xLldBVEVSXCJdXSx0WzkzXT1bQVtcIkdSLk0xLklOREVQRU5ERU5UIENPTU1BTkRcIl1dLHRbOTRdPVtBW1wiR1IuTTEuVEhFQVRSRVwiXV0sdFs5NV09W0FbXCJHUi5NMS5BUk1ZXCJdXSx0Wzk2XT1bQVtcIkdSLk0xLkNPUlBTXCJdXSx0Wzk3XT1bQVtcIkdSLk0xLkJSSUdBREVcIl1dLHRbOThdPVtBW1wiR1IuSUMuRkYuSEVBRFFVQVJURVJTIE9SIEhFQURRVUFSVEVSUyBFTEVNRU5UXCJdXSxFW1wiMDFcIl09W0FbXCJHUi5NMi5BSVJCT1JORVwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuTTIuQVJDVElDXCJdXSxFW1wiMDNcIl09W0FbXCJHUi5NMi5CQVRUTEUgREFNQUdFIFJFUEFJUlwiXV0sRVtcIjA0XCJdPVtBW1wiR1IuTTIuQklDWUNMRSBFUVVJUFBFRFwiXV0sRVtcIjA1XCJdPVtBW1wiR1IuTTIuQ0FTVUFMVFkgU1RBR0lOR1wiXV0sRVtcIjA2XCJdPVtBW1wiR1IuTTIuQ0xFQVJJTkdcIl1dLEVbXCIwN1wiXT1bQVtcIkdSLk0yLkNMT1NFIFJBTkdFXCJdXSxFW1wiMDhcIl09W0FbXCJHUi5NMi5DT05UUk9MXCJdXSxFW1wiMDlcIl09W0FbXCJHUi5NMi5ERUNPTlRBTUlOQVRJT05cIl1dLEVbMTBdPVtBW1wiR1IuTTIuREVNT0xJVElPTlwiXV0sRVsxMV09W0FbXCJHUi5NMi5ERU5UQUxcIl1dLEVbMTJdPVtBW1wiR1IuTTIuRElHSVRBTFwiXV0sRVsxM109W0FbXCJHUi5NMi5FTkhBTkNFRCBQT1NJVElPTiBMT0NBVElPTiBSRVBPUlRJTkcgU1lTVEVNXCJdXSxFWzE0XT1bQVtcIkdSLk0yLkVRVUlQTUVOVFwiXV0sRVsxNV09W0FbXCJHUi5NMi5IRUFWWVwiXV0sRVsxNl09W0FbXCJHUi5NMi5ISUdIIEFMVElUVURFXCJdXSxFWzE3XT1bQVtcIkdSLk0yLklOVEVSTU9EQUxcIl1dLEVbMThdPVtBW1wiR1IuTTIuSU5URU5TSVZFIENBUkVcIl1dLEVbMTldPVtBW1wiR1IuTTIuTElHSFRcIl1dLEVbMjBdPVtBW1wiR1IuTTIuTEFCT1JBVE9SWVwiXV0sRVsyMV09W0FbXCJHUi5NMi5MQVVOQ0hFUlwiXV0sRVsyMl09W0FbXCJHUi5NMi5MT05HIFJBTkdFXCJdXSxFWzIzXT1bQVtcIkdSLk0yLkxPVyBBTFRJVFVERVwiXV0sRVsyNF09W0FbXCJHUi5NMi5NRURJVU1cIl1dLEVbMjVdPVtBW1wiR1IuTTIuTUVESVVNIEFMVElUVURFXCJdXSxFWzI2XT1bQVtcIkdSLk0yLk1FRElVTSBSQU5HRVwiXV0sRVsyN109W0FbXCJHUi5NMi5NT1VOVEFJTlwiXV0sRVsyOF09W0FbXCJHUi5NMi5ISUdIIFRPIE1FRElVTSBBTFRJVFVERVwiXV0sRVsyOV09W0FbXCJHUi5NMi5NVUxUSS1DSEFOTkVMXCJdXSxFWzMwXT1bQVtcIkdSLk0yLk9QVElDQUxcIl1dLEVbMzFdPVtBW1wiR1IuTTIuUEFDSyBBTklNQUxcIl1dLEVbMzJdPVtBW1wiR1IuTTIuUEFUSUVOVCBFVkFDVUFUSU9OIENPT1JESU5BVElPTlwiXV0sRVszM109W0FbXCJHUi5NMi5QUkVWRU5USVZFIE1BSU5URU5BTkNFXCJdXSxFWzM0XT1bQVtcIkdSLk0yLlBTWUNIT0xPR0lDQUxcIl1dLEVbMzVdPVtBW1wiR1IuTTIuUkFESU8gUkVMQVkgTElORSBPRiBTSUdIVFwiXV0sRVszNl09W0FbXCJHUi5NMi5SQUlMUk9BRFwiXV0sRVszN109W0FbXCJHUi5NMi5SRUNPVkVSWSAoVU5NQU5ORUQgU1lTVEVNUylcIl1dLEVbMzhdPVtBW1wiR1IuTTIuUkVDT1ZFUlkgKE1BSU5URU5BTkNFKVwiXV0sRVszOV09W0FbXCJHUi5NMi5SRVNDVUUgQ09PUkRJTkFUSU9OIENFTlRSRVwiXV0sRVs0MF09W0FbXCJHUi5NMi5SSVZFUklORVwiXV0sRVs0MV09W0FbXCJHUi5NMi5TSU5HTEUgQ0hBTk5FTFwiXV0sRVs0Ml09W0FbXCJHUi5NMi5TS0lcIl1dLEVbNDNdPVtBW1wiR1IuTTIuU0hPUlQgUkFOR0VcIl1dLEVbNDRdPVtBW1wiR1IuTTIuU1RSQVRFR0lDXCJdXSxFWzQ1XT1bQVtcIkdSLk0yLlNVUFBPUlRcIl1dLEVbNDZdPVtBW1wiR1IuTTIuVEFDVElDQUxcIl1dLEVbNDddPVtBW1wiR1IuTTIuVE9XRURcIl1dLEVbNDhdPVtBW1wiR1IuTTIuVFJPT1BcIl1dLEVbNDldPVtBW1wiR1IuTTIuVkVSVElDQUwgT1IgU0hPUlQgVEFLRS1PRkYgQU5EIExBTkRJTkcgXCJdXSxFWzUwXT1bQVtcIkdSLk0yLlZFVEVSSU5BUllcIl1dLEVbNTFdPVtBW1wiR1IuTTIuV0hFRUxFRFwiXV0sRVs1Ml09W0FbXCJHUi5NMi5ISUdIIFRPIExPVyBBTFRJVFVERVwiXV0sRVs1M109W0FbXCJHUi5NMi5NRURJVU0gVE8gTE9XIEFMVElUVURFXCJdXSxFWzU0XT1bQVtcIkdSLk0yLkFUVEFDS1wiXV0sRVs1NV09W0FbXCJHUi5NMi5SRUZVRUxcIl1dLEVbNTZdPVtBW1wiR1IuTTIuVVRJTElUWVwiXV0sRVs1N109W0FbXCJHUi5NMi5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl1dLEVbNThdPVtBW1wiR1IuTTIuR1VFUklMTEFcIl1dLEVbNTldPVtBW1wiR1IuTTIuQUlSIEFTU0FVTFRcIl1dLEVbNjBdPVtBW1wiR1IuTTIuQU1QSElCSU9VU1wiXV0sRVs2MV09W0FbXCJHUi5NMi5WRVJZIEhFQVZZXCJdXSxFWzYyXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXV0sRVs2M109W0FbXCJHUi5NMi5DWUJFUlNQQUNFXCJdXSxFWzY0XT1bQVtcIkdSLk0yLk5BVlkgQkFSR0UsIFNFTEYtUFJPUEVMTEVEXCJdXSxFWzY1XT1bQVtcIkdSLk0yLk5BVlkgQkFSR0UsIE5PVCBTRUxGLVBST1BFTExFRFwiXV0sRVs2Nl09W0FbXCJHUi5NMi5MQVVOQ0hcIl1dLEVbNjddPVtBW1wiR1IuTTIuTEFORElORyBDUkFGVFwiXV0sRVs2OF09W0FbXCJHUi5NMi5MQU5ESU5HIFNISVBcIl1dLEVbNjldPVtBW1wiR1IuTTIuU0VSVklDRSBDUkFGVC9ZQVJEXCJdXSxFWzcwXT1bQVtcIkdSLk0yLlRVRyBIQVJCT1JcIl1dLEVbNzFdPVtBW1wiR1IuTTIuT0NFQU4gR09JTkcgVFVHIEJPQVRcIl1dLEVbNzJdPVtBW1wiR1IuTTIuU1VSRkFDRSBERVBMT1lNRU5UIEFORCBESVNUUklCVVRJT04gQ09NTUFORFwiXV0sRVs3M109W0FbXCJHUi5NMi5OT05DT01CQVRBTlQgR0VORVJJQyBWRVNTRUxcIl1dLEVbNzRdPVtBW1wiR1IuTTIuQ09NUE9TSVRFXCJdXSxFWzc1XT1bQVtcIkdSLk0yLlNIRUxURVJcIl1dLEVbNzZdPVtBW1wiR1IuTTIuTElHSFQgQU5EIE1FRElVTVwiXV0sRVs3N109W0FbXCJHUi5NMi5TRUxGLVBST1BFTExFRFwiXV0sRVs3OF09W0FbXCJHUi5NMi5TRUNVUklUWSBGT1JDRSBBU1NJU1RBTkNFXCJdXSl9fSx3PXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMTFcIj09ZSYmKElbMTFlNF09W0FbXCJHUi5JLkNJVklMSUFOXCJdXSxJWzExMDEwMF09W0FbXCJHUi5JQy5FTlZJUk9OTUVOVEFMIFBST1RFQ1RJT05cIl1dLElbMTEwMjAwXT1bQVtcIkdSLklDLkdPVkVSTk1FTlQgT1JHQU5JWkFUSU9OXCJdXSxJWzExMDMwMF09W0FbXCJTVC5JQy5JTkRJVklEVUFMXCJdXSxJWzExMDQwMF09W0FbXCJTVC5JQy5HUk9VUFwiXV0sSVsxMTA1MDBdPVtBW1wiU1QuSUMuS0lMTElORyBWSUNUSU1cIl1dLElbMTEwNjAwXT1bQVtcIlNULklDLktJTExJTkcgVklDVElNU1wiXV0sSVsxMTA3MDBdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuSUMuQVRURU1QVEVEIENSSU1JTkFMIEFDVElWSVRZXCJdXSxJWzExMDgwMF09W0FbXCJTVC5JQy5TUFlcIl1dLElbMTEwOTAwXT1bQVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdXSxJWzExMWUzXT1bQVtcIkdSLklDLkVNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sdFtcIjAxXCJdPVtBW1wiU1QuTTEuQVNTQVNTSU5BVElPTlwiXV0sdFtcIjAyXCJdPVtBW1wiU1QuTTEuRVhFQ1VUSU9OIChXUk9OR0ZVTCBLSUxMSU5HKVwiXV0sdFtcIjAzXCJdPVtBW1wiU1QuTTEuTVVSREVSXCJdXSx0W1wiMDRcIl09W0FbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLHRbXCIwNVwiXT1bQVtcIlNULk0xLktJRE5BUFBJTkdcIl1dLHRbXCIwNlwiXT1bQVtcIlNULk0xLlBJUkFDWVwiXV0sdFtcIjA3XCJdPVtBW1wiU1QuTTEuUkFQRVwiXV0sdFtcIjA4XCJdPVtBW1wiU1QuTTEuQ0lWSUxJQU5cIl1dLHRbXCIwOVwiXT1bQVtcIlNULk0xLkRJU1BMQUNFRCBQRVJTT05TLCBSRUZVR0VFUywgQU5EIEVWQUNVRUVTXCJdXSx0WzEwXT1bQVtcIlNULk0xLkZPUkVJR04gRklHSFRFUlNcIl1dLHRbMTFdPVtBW1wiU1QuTTEuR0FOR1wiXV0sdFsxMl09W0FbXCJTVC5NMS5HT1ZFUk5NRU5UIE9SR0FOSVpBVElPTlwiXV0sdFsxM109W0FbXCJTVC5NMS5MRUFERVJcIl1dLHRbMTRdPVtBW1wiU1QuTTEuTk9OR09WRVJOTUVOVEFMIE9SR0FOSVpBVElPTiAoTkdPKVwiXV0sdFsxNV09W0FbXCJTVC5NMS5DT0VSQ0VEL0lNUFJFU1NFRFwiXV0sdFsxNl09W0FbXCJTVC5NMS5XSUxMSU5HIFJFQ1JVSVRcIl1dLHRbMTddPVtBW1wiU1QuTTEuUkVMSUdJT1VTXCJdXSx0WzE4XT1bQVtcIlNULk0xLlRBUkdFVEVEXCJdXSx0WzE5XT1bQVtcIlNULk0xLlRFUlJPUklTVFwiXV0sdFsyMF09W0FbXCJTVC5NMS5TUEVBS0VSXCJdXSx0WzIxXT1bQVtcIlNULk0xLkFDQ0lERU5UXCJdXSx0WzIyXT1bQVtcIlNULk0xLkNPTUJBVFwiXV0sdFsyM109W0FbXCJTVC5NMS5PVEhFUlwiXV0sdFsyNF09W0FbXCJTVC5NMS5MT09UXCJdXSx0WzI1XT1bQVtcIkdSLk0xLkhJSkFDS0VSXCJdXSx0WzI2XT1bQVtcIkdSLk0xLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMVwiXT1bQVtcIlNULk0yLkxFQURFUiBPUiBMRUFERVJTSElQXCJdXSxFW1wiMDJcIl09W0FbXCJHUi5NMi5DWUJFUlNQQUNFXCJdXSl9fSxfPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe2lmKFwiMTVcIj09ZSl7SVsxMWU0XT1bQVtcIkdSLkVRLldFQVBPTlwiXV0sSVsxMTAxMDBdPVtBW1wiR1IuRVEuUklGTEVcIl1dLElbMTEwMTAxXT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTAxMDJdPVtBW1wiR1IuRVEuUklGTEVcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTAxMDNdPVtBW1wiR1IuRVEuUklGTEVcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTEwMjAwXT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdXSxJWzExMDIwMV09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwMjAyXT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwMjAzXT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDMwMF09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdXSxJWzExMDMwMV09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSldLElbMTEwMzAyXT1bQVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSldLElbMTEwMzAzXT1bQVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0pXSxJWzExMDQwMF09W0FbXCJHUi5FUS5GTEFNRSBUSFJPV0VSXCJdXSxJWzExMDUwMF09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl1dLElbMTEwNTAxXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwNTAyXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIEdVTlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMDUwM109W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTEwNjAwXT1bQVtcIkdSLkVRLkFOVElUQU5LIEdVTlwiXV0sSVsxMTA2MDFdPVtBW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTA2MDJdPVtBW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwNjAzXT1bQVtcIkdSLkVRLkFOVElUQU5LIEdVTlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTA3MDBdPVtBW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdXSxJWzExMDcwMV09W0FbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMDcwMl09W0FbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTA3MDNdPVtBW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDgwMF09W0FbXCJHUi5FUS5SRUNPSUxMRVNTIEdVTlwiXV0sSVsxMTA4MDFdPVtBW1wiR1IuRVEuUkVDT0lMTEVTUyBHVU5cIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMDgwMl09W0FbXCJHUi5FUS5SRUNPSUxMRVNTIEdVTlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMDgwM109W0FbXCJHUi5FUS5SRUNPSUxMRVNTIEdVTlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTA5MDBdPVtBW1wiR1IuRVEuSE9XSVRaRVJcIl1dLElbMTEwOTAxXT1bQVtcIkdSLkVRLkhPV0lUWkVSXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTA5MDJdPVtBW1wiR1IuRVEuSE9XSVRaRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTA5MDNdPVtBW1wiR1IuRVEuSE9XSVRaRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExZTNdPVtBW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVsxMTEwMDFdPVtBW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExMDAyXT1bQVtcIkdSLkVRLk1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTEwMDNdPVtBW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTExMDBdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXV0sSVsxMTExMDFdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExMTAyXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdLEFbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRMQVJcIl1dLElbMTExMTAzXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdLEFbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRFTEFSXCJdXSxJWzExMTEwNF09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExMTA1XT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSxBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdXSxJWzExMTEwNl09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0sQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEVMQVJcIl1dLElbMTExMTA3XT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExMTA4XT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0sQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVExBUlwiXV0sSVsxMTExMDldPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXSxBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXV0sSVsxMTEyMDBdPVtBW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVsxMTEyMDFdPVtBW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExMjAyXT1bQVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTEyMDNdPVtBW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTEzMDBdPVtBW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl1dLElbMTExMzAxXT1bQVtcIkdSLkVRLlNVUkZBQ0UtVE8tU1VSRkFDRSBNSVNTSUxFIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTEzMDJdPVtBW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTEzMDNdPVtBW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExNDAwXT1bQVtcIkdSLkVRLk1PUlRBUlwiXV0sSVsxMTE0MDFdPVtBW1wiR1IuRVEuTU9SVEFSXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTE0MDJdPVtBW1wiR1IuRVEuTU9SVEFSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExNDAzXT1bQVtcIkdSLkVRLk1PUlRBUlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTE1MDBdPVtBW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVsxMTE1MDFdPVtBW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExNTAyXT1bQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTE1MDNdPVtBW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTE2MDBdPVtBW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdXSxJWzExMTYwMV09W0FbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMTAsQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdKV0sSVsxMTE2MDJdPVtBW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDEwLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0pXSxJWzExMTYwM109W0FbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMTAsQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0pXSxJWzExMTcwMF09W0FbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl1dLElbMTExNzAxXT1bQVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExNzAyXT1bQVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMTcwM109W0FbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExODAwXT1bQVtcIkdSLkVRLk5PTi1MRVRIQUwgV0VBUE9OXCJdXSxJWzExMTkwMF09W0FbXCJHUi5FUS5UQVNFUlwiXV0sSVsxMTJlM109W0FbXCJHUi5FUS5XQVRFUiBDQU5OT05cIl1dLElbMTJlNF09W0FbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXV0sSVsxMjAxMDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLkFSTU9VUkVEIFZFSElDTEVcIl1dLElbMTIwMTAxXT1bQVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEVcIl1dLElbMTIwMTAyXT1bQVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEUgKEFGVikgQ09NTUFORCBBTkQgQ09OVFJPTFwiXV0sSVsxMjAxMDNdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl1dLElbMTIwMTA0XT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEFbXCJHUi5FUS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbMTIwMTA1XT1bQVtcIkdSLklDLkFSTU9VUlwiXV0sSVsxMjAxMDZdPVtBW1wiR1IuSUMuQVJNT1VSXCJdLEFbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbMTIwMTA3XT1bQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuRVEuTUVESUNBTCBFVkFDVUFUSU9OXCJdXSxJWzEyMDEwOF09W0FbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxBW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJWzEyMDEwOV09W0FbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxBW1wiR1IuRVEuQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVCBWRUhJQ0xFXCJdXSxJWzEyMDExMF09W0FbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DUk9TUy1DT1VOVFJZXCJdXSxJWzEyMDExMV09W0FbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DUk9TUy1DT1VOVFJZXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRSBFUVVQSU1FTlRcIl1dLElbMTIwMjAwXT1bQVtcIkdSLkVRLlRBTktcIl1dLElbMTIwMjAxXT1bQVtcIkdSLkVRLlRBTktcIl0sQVtcIkdSLkVRLkxJR0hUIFRBTktcIl1dLElbMTIwMjAyXT1bQVtcIkdSLkVRLlRBTktcIl0sQVtcIkdSLkVRLk1FRElVTSBUQU5LXCJdXSxJWzEyMDIwM109W0FbXCJHUi5FUS5UQU5LXCJdLEFbXCJHUi5FUS5IRUFWWSBUQU5LXCJdXSxJWzEyMDMwMF09W0FbXCJHUi5FUS5UQU5LXCJdLEFbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbMTIwMzAxXT1bQVtcIkdSLkVRLlRBTktcIl0sQVtcIkdSLkVRLkxJR0hUIFRBTktcIl0sQVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVsxMjAzMDJdPVtBW1wiR1IuRVEuVEFOS1wiXSxBW1wiR1IuRVEuTUVESVVNIFRBTktcIl0sQVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVsxMjAzMDNdPVtBW1wiR1IuRVEuVEFOS1wiXSxBW1wiR1IuRVEuSEVBVlkgVEFOS1wiXSxBW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJWzEzZTRdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0scy5fc2NhbGUoLjcsQVtcIkdSLklDLkVOR0lORUVSXCJdKV0sSVsxMzAxMDBdPVtBW1wiR1IuSU4uSUMuQlJJREdFXCJdXSxJWzEzMDIwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0scy5fc2NhbGUoLjgsQVtcIkdSLklOLklDLkJSSURHRVwiXSldLElbMTMwMzAwXT1bQVtcIkdSLklOLklDLkJSSURHRVwiXSxBW1wiR1IuRVEuRklYRUQgQlJJREdFXCJdXSxJWzEzMDQwMF09W0FbXCJHUi5JTi5JQy5CUklER0VcIl0sQVtcIkdSLk0yLlJJVkVSSU5FXCJdXSxJWzEzMDUwMF09W0FbXCJHUi5JTi5JQy5CUklER0VcIl0sQVtcIkdSLkVRLkZPTERJTkcgR0lSREVSIEJSSURHRVwiXV0sSVsxMzA2MDBdPVtBW1wiR1IuSU4uSUMuQlJJREdFXCJdLEFbXCJHUi5FUS5IT0xMT1cgREVDSyBCUklER0VcIl1dLElbMTMwNzAwXT1bQVtcIkdSLklDLkRSSUxMSU5HXCJdXSxJWzEzMDcwMV09W3MuX3NjYWxlKC43LEFbXCJHUi5JQy5EUklMTElOR1wiXSksQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXV0sSVsxMzA4MDBdPVtBW1wiR1IuRVEuRUFSVEhNT1ZFUlwiXV0sSVsxMzA4MDFdPVtBW1wiR1IuRVEuTVVMVElGVU5DVElPTkFMIEVBUlRITU9WRVIvRElHR0VSXCJdXSxJWzEzMDkwMF09W0FbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXV0sSVsxMzA5MDFdPVtBW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl0scy5fdHJhbnNsYXRlKDAsLTEwLEFbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0pXSxJWzEzMDkwMl09W0FbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXSxBW1wiR1IuRVEuVEFOS1wiXV0sSVsxMzA5MDNdPVtBW1wiR1IuRVEuQVNTQVVMVCBCUkVBQ0hFUiBWRUhJQ0xFIChBQlYpIFdJVEggQ09NQkFUIERPWkVSIEJMQURFXCJdXSxJWzEzMDkwNF09W0FbXCJHUi5NMS5ST1VURSwgUkVDT05OQUlTU0FOQ0UsIEFORCBDTEVBUkFOQ0VcIl0sQVtcIkdSLklDLkVOR0lORUVSIFVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuTTIuTUVESVVNXCJdXSxJWzEzMDkwNV09W0FbXCJHUi5NMS5ST1VURSwgUkVDT05OQUlTU0FOQ0UsIEFORCBDTEVBUkFOQ0VcIl0sQVtcIkdSLklDLkVOR0lORUVSIFVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuTTIuSEVBVllcIl1dLElbMTMxZTNdPVtBW1wiR1IuSUMuTUlORSBMQVlJTkdcIl1dLElbMTMxMDAxXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxzLl90cmFuc2xhdGUoMCwxMCxzLl9zY2FsZSguNyxBW1wiR1IuSUMuTUlORSBMQVlJTkdcIl0pKV0sSVsxMzEwMDJdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sQVtcIkdSLkVRLkFSTU9SRUQgQ0FSUklFUiBXSVRIIFZPTENBTk9cIl1dLElbMTMxMDAzXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdLEFbXCJHUi5FUS5BUk1PUkVEIENBUlJJRVIgV0lUSCBWT0xDQU5PXCJdXSxJWzEzMTEwMF09W0FbXCJHUi5FUS5ET1pFUlwiXV0sSVsxMzExMDFdPVtBW1wiR1IuRVEuRE9aRVIgQVJNT1JFRFwiXV0sSVsxMzEyMDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0scy5fc2NhbGUoLjYsQVtcIkdSLklDLkVOR0lORUVSXCJdKV0sSVsxMzEzMDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0scy5fc2NhbGUoLjYsQVtcIkdSLklDLkVOR0lORUVSXCJdKSxBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVIgRU5HSU5FRVIgUkVDT04gVkVISUNMRVwiXV0sSVsxMzE0MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBCQUNLSE9FXCJdXSxJWzEzMTUwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSxzLl9zY2FsZSguNixBW1wiR1IuSUMuRU5HSU5FRVJcIl0pXSxJWzEzMTYwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNST1NTLUNPVU5UUllcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBGRVJSWSBUUkFOU1BPUlRFUlwiXV0sSVsxNGU0XT1bXSxJWzE0MDEwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl1dLElbMTQwMjAwXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuTUVESUNBTCBWRUhJQ0xFXCJdXSxJWzE0MDMwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLk1FRElDQUwgRVZBQ1VBVElPTlwiXV0sSVsxNDA0MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5NT0JJTEUgRU1FUkdFTkNZIFBIWVNJQ0lBTlwiXV0sSVsxNDA1MDBdPVtBW1wiR1IuRVEuQlVTXCJdXSxJWzE0MDYwMF09W0FbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl1dLElbMTQwNjAxXT1bQVtcIkdSLkVRLlNFTUktVFJBSUxFUiBUUlVDS1wiXSxBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIExJR0hUXCJdXSxJWzE0MDYwMl09W0FbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBNRURJVU1cIl1dLElbMTQwNjAzXT1bQVtcIkdSLkVRLlNFTUktVFJBSUxFUiBUUlVDS1wiXSxBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIEhFQVZZXCJdXSxJWzE0MDcwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXV0sSVsxNDA4MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DUk9TUy1DT1VOVFJZXCJdXSxJWzE0MDkwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0scy5fc2NhbGUoLjgsQVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXSldLElbMTQxZTNdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLHMuX3NjYWxlKC43LEFbXCJHUi5JQy5XQVRFUlwiXSldLElbMTQxMTAwXT1bQVtcIkdSLkVRLldBVEVSIFZFSElDTEVcIl0sQVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXV0sSVsxNDEyMDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLXCJdXSxJWzE0MTIwMV09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0tcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0suTElHSFRcIl1dLElbMTQxMjAyXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDS1wiXSxBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDSy5IRUFWWVwiXV0sSVsxNWU0XT1bXSxJWzE1MDEwMF09W0FbXCJHUi5FUS5UUkFJTiBMT0NPTU9USVZFXCJdXSxJWzE1MDIwMF09W0FbXCJHUi5FUS5SQUlMQ0FSXCJdXSxJWzE2ZTRdPVtdLElbMTYwMTAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXV0sSVsxNjAxMDFdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJWzE2MDEwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdXSxJWzE2MDEwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl1dLElbMTYwMjAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl1dLElbMTYwMjAxXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl1dLElbMTYwMjAyXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdXSxJWzE2MDIwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJWzE2MDMwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdXSxJWzE2MDMwMV09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJWzE2MDMwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVsxNjAzMDNdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVsxNjA0MDBdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl1dLElbMTYwNDAxXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJWzE2MDQwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbMTYwNDAzXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJWzE2MDUwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdXSxJWzE2MDUwMV09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJWzE2MDUwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVsxNjA1MDNdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVsxNjA2MDBdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVsxNjA2MDFdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVsxNjA2MDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwNjAzXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwNzAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVsxNjA3MDFdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJWzE2MDcwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJWzE2MDcwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwODAwXT1bQVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdXSxJWzE2MDkwMF09W0FbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxBW1wiU1QuTTEuRFJVR1wiXV0sSVsxN2U0XT1bQVtcIkdSLklDLkZGLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsxNzAxMDBdPVtBW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdXSxJWzE3MDIwMF09W0FbXCJHUi5JQy5GRi5CT1JERVIgUEFUUk9MXCJdXSxJWzE3MDMwMF09W0FbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl1dLElbMTcwNDAwXT1bQVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdXSxJWzE3MDUwMF09W0FbXCJHUi5JQy5GRi5ERVBBUlRNRU5UIE9GIEpVU1RJQ0UgKERPSilcIl1dLElbMTcwNjAwXT1bQVtcIkdSLklDLkZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04gKEZCSSlcIl1dLElbMTcwNzAwXT1bQVtcIkdSLklDLk1JTElUQVJZIFBPTElDRVwiXV0sSVsxNzA4MDBdPVtBW1wiR1IuSUMuVU5JVEVEIFNUQVRFUyBTRUNSRVQgU0VSVklDRShUUkVBUykgKFVTU1MpXCJdXSxJWzE3MDkwMF09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTiBTRUNVUklUWSBBR0VOQ1kgKFRTQSlcIl1dLElbMTcxZTNdPVtBW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVsxNzExMDBdPVtBW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXV0sSVsxOGU0XT1bQVtcIkdSLkVRLlBBQ0sgQU5JTUFMXCJdXSxJWzE5ZTRdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLk1JU1NJTEUgU1VQUE9SVFwiXV0sSVsxOTAxMDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLk1JU1NJTEUgVFJBTlNMT0FERVJcIl1dLElbMTkwMjAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5NSVNTSUxFIFRSQU5TUE9SVEVSXCJdXSxJWzE5MDMwMF09W0FbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxBW1wiR1IuRVEuTUlTU0lMRSBDUkFORS9MT0FESU5HIERFVklDRVwiXV0sSVsxOTA0MDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLk1JU1NJTEUgUFJPUEVMTEFOVCBUUkFOU1BPUlRFUlwiXV0sSVsxOTA1MDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLk1JU1NJTEUgV0FSSEVBRCBUUkFOU1BPUlRFUlwiXV0sSVsyZTVdPVtdLElbMjAwMTAwXT1bQVtcIkdSLklDLkZGLkJST0FEQ0FTVCBUUkFOU01JVFRFUiBBTlRFTk5BXCJdXSxJWzIwMDIwMF09W0FbXCJTVC5JQy5CT01CXCJdXSxJWzIwMDMwMF09W0FbXCJTVC5JQy5CT09CWSBUUkFQXCJdXSxJWzIwMDQwMF09W0FbXCJHUi5FUS5DQlJOIEVRVUlQTUVOVFwiXV0sSVsyMDA1MDBdPVtBW1wiR1IuRVEuQ09NUFVURVIgU1lTVEVNXCJdXSxJWzIwMDYwMF09W0FbXCJHUi5FUS5DT01NQU5EIExBVU5DSCBFUVVJUE1FTlQgKENMRSlcIl1dLElbMjAwNzAwXT1bQVtcIkdSLkVRLkdFTkVSQVRPUiBTRVRcIl1dLElbMjAwODAwXT1bQVtcIkdSLkVRLkdST1VORC1CQVNFRCBNSURDT1VSU0UgREVGRU5TRSAoR01EKSBGSVJFIENPTlRST0wgKEdGQykgQ0VOVEVSXCJdXSxJWzIwMDkwMF09W0FbXCJHUi5FUS5JTi1GTElHSFQgSU5URVJDRVBUT1IgQ09NTVVOSUNBVElPTlMgU1lTVEVNIChJRklDUykgREFUQSBURVJNSU5BTCAoSURUKVwiXV0sSVsyMDFlM109W0FbXCJHUi5FUS5MQVNFUlwiXV0sSVsyMDExMDBdPVtBW1wiR1IuRVEuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TIEVRVUlQTUVOVFwiXV0sSVsyMDEyMDBdPVtBW1wiR1IuSUMuU1VTVEFJTk1FTlRcIl1dLElbMjAxMzAwXT1bQVtcIkdSLkVRLlRFTlRcIl1dLElbMjAxMzAxXT1bQVtcIkdSLkVRLlRFTlQgQ0lWSUxJQU5cIl1dLElbMjAxMzAyXT1bQVtcIkdSLkVRLlRFTlQgTUlMSVRBUllcIl1dLElbMjAxNDAwXT1bQVtcIkdSLkVRLlVOSVQgREVQTE9ZTUVOVCBTSElQTUVOVFNcIl1dLElbMjAxNTAwXT1bQVtcIkdSLklDLkVNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sSVsyMDE1MDFdPVtBW1wiR1IuSUMuTUVESUNBTCBFVkFDVUFUSU9OIEhFTElDT1BURVJcIl1dLElbMjFlNF09W10sSVsyMTAxMDBdPVtBW1wiR1IuRVEuTEFORCBNSU5FXCJdXSxJWzIxMDIwMF09W0FbXCJHUi5FUS5BTlRJUEVSU09OTkVMIExBTkQgTUlORVwiXV0sSVsyMTAzMDBdPVtBW1wiR1IuRVEuQU5USVRBTksgTUlORVwiXV0sSVsyMTA0MDBdPVtBW1wiR1IuRVEuSU1QUk9WSVNFRCBFWFBMT1NJVkUgREVWSUNFXCJdXSxJWzIxMDUwMF09W0FbXCJHUi5FUS5BTlRJUEVSU09OTkVMIExBTkQgTUlORSBMRVNTIFRIQU4gTEVUSEFMXCJdXSxJWzIyZTRdPVtdLElbMjIwMTAwXT1bQVtcIkdSLkVRLlNFTlNPUlwiXV0sSVsyMjAyMDBdPVtBW1wiR1IuRVEuU0VOU09SIEVNUExBQ0VEXCJdXSxJWzIyMDMwMF09W0FbXCJHUi5FUS5SQURBUlwiXV0sSVsyM2U0XT1bQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl1dLElbMjMwMTAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5NMS5NRURFVkFDXCJdXSxJWzIzMDIwMF09W0FbXCJHUi5JQy5GSVJFIFBST1RFQ1RJT05cIl1dLElbMjRlNF09W0FbXCJHUi5JQy5NQU5VQUwgVFJBQ0tcIl1dLElbMjVlNF09W0FbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXV0sdFtcIjAxXCJdPVtBW1wiR1IuTTEuQklPTE9HSUNBTFwiXV0sdFtcIjAyXCJdPVtBW1wiR1IuTTEuQ0hFTUlDQUxcIl1dLHRbXCIwM1wiXT1bQVtcIkdSLk0xLkVBUkxZIFdBUk5JTkcgUkFEQVJcIl1dLHRbXCIwNFwiXT1bQVtcIkdSLk0xLklOVFJVU0lPTlwiXV0sdFtcIjA1XCJdPVtBW1wiR1IuTTEuTlVDTEVBUlwiXV0sdFtcIjA2XCJdPVtBW1wiR1IuTTEuUkFESU9MT0dJQ0FMXCJdXSx0W1wiMDdcIl09W0FbXCJHUi5NMS5VUEdSQURFRCBFQVJMWSBXQVJOSU5HIFJBREFSXCJdXSx0W1wiMDhcIl09W0FbXCJHUi5NMS5ISUpBQ0tJTkdcIl1dLHRbXCIwOVwiXT1bQVtcIkdSLk0xLkNJVklMSUFOXCJdXSx0WzEwXT1bQVtcIkdSLk0xLlRJTFQtUk9UT1JcIl1dLHRbMTFdPVtdLHRbMTJdPVtBW1wiR1IuTTEuTVVMVEktUFVSUE9TRSBCTEFERVwiXV0sdFsxM109W0FbXCJHUi5NMS5UQU5LLVdJRFRIIE1JTkUgUExPV1wiXV0sdFsxNF09W0FbXCJHUi5NMS5CUklER0lOR1wiXV0sdFsxNV09W0FbXCJHUi5NMS5DWUJFUlNQQUNFXCJdXSx0WzE2XT1bQVtcIkdSLk0xLkFSTU9SRURcIl1dLHRbMTddPVtBW1wiR1IuTTEuQVRUQUNLXCJdXSx0WzE4XT1bQVtcIkdSLk0xLkNBUkdPXCJdXSx0WzE5XT1bQVtcIkdSLk0xLk1BSU5URU5BTkNFXCJdXSx0WzIwXT1bQVtcIkdSLk0xLk1FREVWQUNcIl1dLHRbMjFdPVtBW1wiR1IuSU4uTTEuUEVUUk9MRVVNXCJdXSx0WzIyXT1bQVtcIkdSLk0xLlVUSUxJVFlcIl1dLHRbMjNdPVtBW1wiR1IuTTEuV0FURVJcIl1dLHRbMjRdPVtBW1wiR1IuTTEuUk9CT1RJQ1wiXV0sRVtcIjAxXCJdPVtBW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuTTIuTElHSFRcIl1dLEVbXCIwM1wiXT1bQVtcIkdSLk0yLk1FRElVTVwiXV0sRVtcIjA0XCJdPVtBW1wiR1IuTTIuUkFJTFJPQURcIl1dLEVbXCIwNVwiXT1bQVtcIkdSLk0yLlRSQUNLRURcIl1dLEVbXCIwNlwiXT1bQVtcIkdSLk0yLlRSQUNUT1IgVFJBSUxFUlwiXV0sRVtcIjA3XCJdPVtBW1wiR1IuTTIuV0hFRUxFRCBMSU1JVEVEXCJdXSxFW1wiMDhcIl09W0FbXCJHUi5NMi5XSEVFTEVEXCJdXSxFW1wiMDlcIl09W0FbXCJHUi5NMi5ST0JPVElDXCJdXTt2YXIgVD17MTFlNDoxNDAsMTEwMTAwOjE0MCwxMTAxMDE6MTQwLDExMDEwMjoxNDAsMTEwMTAzOjE0MCwxMTAyMDA6MTQwLDExMDIwMToxNDAsMTEwMjAyOjE0MCwxMTAyMDM6MTQwLDExMDMwMDoxNDAsMTEwMzAxOjE0MCwxMTAzMDI6MTQwLDExMDMwMzoxNDAsMTEwNDAwOjEzNSwxMTA1MDA6MTQwLDExMDUwMToxNDAsMTEwNTAyOjE0MCwxMTA1MDM6MTQwLDExMDYwMDoxNDAsMTEwNjAxOjE0MCwxMTA2MDI6MTQwLDExMDYwMzoxNDAsMTEwNzAwOjE0MCwxMTA3MDE6MTQwLDExMDcwMjoxNDAsMTEwNzAzOjE0MCwxMTA4MDA6MTQwLDExMDgwMToxNDAsMTEwODAyOjE0MCwxMTA4MDM6MTQwLDExMDkwMDoxNDAsMTEwOTAxOjE0MCwxMTA5MDI6MTQwLDExMDkwMzoxNDAsMTExZTM6MTQwLDExMTAwMToxNDAsMTExMDAyOjE0MCwxMTEwMDM6MTQwLDExMTEwMDoxNDAsMTExMTAxOjE0MCwxMTExMDI6MTQwLDExMTEwMzoxNDAsMTExMTA0OjE0MCwxMTExMDU6MTQwLDExMTEwNjoxNDAsMTExMTA3OjE0MCwxMTExMDg6MTQwLDExMTEwOToxNDAsMTExMjAwOjE0MCwxMTEyMDE6MTQwLDExMTIwMjoxNDAsMTExMjAzOjE0MCwxMTEzMDA6MTQwLDExMTMwMToxNDAsMTExMzAyOjE0MCwxMTEzMDM6MTQwLDExMTQwMDoxNDAsMTExNDAxOjE0MCwxMTE0MDI6MTQwLDExMTQwMzoxNDAsMTExNTAwOjE0MCwxMTE1MDE6MTQwLDExMTUwMjoxNDAsMTExNTAzOjE0MCwxMTE2MDA6MTQwLDExMTYwMToxNDAsMTExNjAyOjE0MCwxMTE2MDM6MTQwLDExMTcwMToxNDAsMTExNzAyOjE0MCwxMTE3MDM6MTQwLDExMTgwMDoxNDAsMTExOTAwOjE0MCwxMTJlMzoxNDAsMTJlNDoxMjksMTIwMTAwOjEyOSwxMjAxMDE6MTMwLDEyMDEwMjoxMzAsMTIwMTAzOjEzMCwxMjAxMDQ6MTMwLDEyMDEwNToxMjAsMTIwMTA2OjEyMCwxMjAxMDc6MTIwLDEyMDEwODoxMzAsMTIwMTA5OjEzMCwxMjAxMTA6MTQwLDEyMDIwMDoxMzAsMTIwMjAxOjEzMCwxMjAyMDI6MTMwLDEyMDIwMzoxMzAsMTIwMzAwOjEzMCwxMjAzMDE6MTMwLDEyMDMwMjoxMzAsMTIwMzAzOjEzMCwxM2U0OjEyOSwxMzAxMDA6MTE1LDEzMDIwMDoxMzAsMTMwMzAwOjEzMCwxMzA0MDA6MTM1LDEzMDUwMDoxMjAsMTMwNjAwOjEyMCwxMzA3MDA6MTIwLDEzMDcwMToxMzAsMTMwODAwOjEzMCwxMzA4MDE6MTMwLDEzMDkwMDoxMjAsMTMwOTAxOjEzMCwxMzA5MDI6MTMwLDEzMWUzOjExNSwxMzEwMDE6MTMwLDEzMTAwMjoxMzAsMTMxMDAzOjE0MCwxMzExMDA6MTMwLDEzMTEwMToxMzAsMTMxMjAwOjEzMCwxMzEzMDA6MTMwLDEzMTQwMDoxNDAsMTMxNTAwOjE0MCwxMzE2MDA6MTQwLDE0MDEwMDoxMzAsMTQwMjAwOjEzMCwxNDAzMDA6MTMwLDE0MDQwMDoxMzAsMTQwNTAwOjEzMCwxNDA2MDA6MTQwLDE0MDYwMToxNDAsMTQwNjAyOjE0MCwxNDA2MDM6MTQwLDE0MDcwMDoxNDAsMTQwODAwOjE0MCwxNDA5MDA6MTMwLDE0MWUzOjEzMCwxNDExMDA6MTQwLDE0MTIwMDoxMzAsMTQxMjAxOjEzMCwxNDEyMDI6MTMwLDE1MDEwMDoxMzAsMTUwMjAwOjE0MCwxNjAxMDA6MTMyLjUsMTYwMTAxOjEzMi41LDE2MDEwMjoxMzIuNSwxNjAxMDM6MTMyLjUsMTYwMjAwOjEzMi41LDE2MDIwMToxMzIuNSwxNjAyMDI6MTMyLjUsMTYwMjAzOjEzMi41LDE2MDMwMDoxMzIuNSwxNjAzMDE6MTMyLjUsMTYwMzAyOjEzMi41LDE2MDMwMzoxMzIuNSwxNjA0MDA6MTMyLjUsMTYwNDAxOjEzMi41LDE2MDQwMjoxMzIuNSwxNjA0MDM6MTMyLjUsMTYwNTAwOjEzMi41LDE2MDUwMToxMzIuNSwxNjA1MDI6MTMyLjUsMTYwNTAzOjEzMi41LDE2MDYwMDoxMzIuNSwxNjA2MDE6MTMyLjUsMTYwNjAyOjEzMi41LDE2MDYwMzoxMzIuNSwxNjA3MDA6MTMyLjUsMTYwNzAxOjEzMi41LDE2MDcwMjoxMzIuNSwxNjA3MDM6MTMyLjUsMTYwODAwOjExNSwxNjA5MDA6MTE1LDE3ZTQ6MTQ5LjAzMTI1LDE3MDEwMDoxMTguNzUsMTcwMjAwOjEzMy4yMTg3NSwxNzAzMDA6MTM1LjIxODc1LDE3MDQwMDoxMTguNzUsMTcwNTAwOjEzOC4xODc1LDE3MDYwMDoxMTguNzUsMTcwNzAwOjExOC43NSwxNzA4MDA6MTE4LDE3MDkwMDoxMTgsMTcxZTM6MTM1LDE3MTEwMDoxMzUsMThlNDoxMjUsMTllNDoxMjksMTkwMTAwOjEyOSwxOTAyMDA6MTI5LDE5MDMwMDoxMjksMTkwNDAwOjEyOSwxOTA1MDA6MTI5LDIwMDEwMDoxNDAsMjAwMjAwOjExOC43NSwyMDAzMDA6MTIwLDIwMDQwMDoxNDAsMjAwNTAwOjEzMiwyMDA2MDA6MTE4Ljc1LDIwMDcwMDoxMTguNzUsMjAwODAwOjExOC43NSwyMDA5MDA6MTE5LjM2MjIyODM5MzU1NDY5LDIwMWUzOjE0NSwyMDExMDA6MTIwLDIwMTIwMDoxMTgsMjAxMzAwOjEyNC4zNjIyMjA3NjQxNjAxNiwyMDEzMDE6MTIwLDIwMTMwMjoxMjAsMjAxNDAwOjExOC43NSwyMDE1MDA6MTQwLDIwMTUwMToxMTUsMjEwMTAwOjEyMiwyMTAyMDA6MTIyLDIxMDMwMDoxMjIsMjEwNDAwOjExOC43NSwyMTA1MDA6MTIyLDIyMDEwMDoxNDAsMjIwMjAwOjEzNiwyMjAzMDA6MTIwLDIzZTQ6MTM1LDIzMDEwMDoxMzIuNSwyMzAyMDA6MTIwLDI0ZTQ6MTE4Ljc1fTtmb3IodmFyIFMgaW4gVClULmhhc093blByb3BlcnR5KFMpJiYoUltTXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOlRbU119KX19fSxKPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMjBcIj09ZSYmKElbMTFlNF09W0FbXCJHUi5JQy5NSUxJVEFSWVwiXV0sSVsxMTAxMDBdPVtBW1wiR1IuSU4uSUMuQUlSQ1JBRlQgUFJPRFVDVElPTiAmIEFTU0VNQkxZXCJdXSxJWzExMDIwMF09W3MuX3NjYWxlKDEuNCxBW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXSldLElbMTEwMzAwXT1bQVtcIkdSLklDLkZGLkNMQVNTIFZcIl0sQVtcIkdSLklDLkZGLlNVUFBMWVwiXV0sSVsxMTA0MDBdPVtBW1wiR1IuRVEuVEFOS1wiXV0sSVsxMTA1MDBdPVtBW1wiU1QuSUMuQkxBQ0sgTElTVCBMT0NBVElPTlwiXV0sSVsxMTA2MDBdPVtBW1wiR1IuSUMuQ0JSTlwiXV0sSVsxMTA3MDBdPVtBW1wiR1IuRVEuRE9aRVJcIl1dLElbMTEwNzAxXT1bQVtcIkdSLklOLklDLkJSSURHRVwiXV0sSVsxMTA4MDBdPVtBW1wiR1IuSUMuRVFVSVBNRU5UIE1BTlVGQUNUVVJFXCJdXSxJWzExMDkwMF09W0FbXCJHUi5JLkdPVkVSTk1FTlRcIl1dLElbMTExZTNdPVtBW1wiU1QuSUMuR1JBWSBMSVNUIExPQ0FUSU9OXCJdXSxJWzExMTEwMF09W0FbXCJTVC5JQy5NQVNTIEdSQVZFIExPQ0FUSU9OXCJdXSxJWzExMTIwMF09W0FbXCJHUi5JTi5JQy5NSUxJVEFSWS9DSVZJTElBTi5NQVRFUklFTFwiXSxBW1wiR1IuSUMuRkYuU1VQUExZXCJdXSxJWzExMTMwMF09W0FbXCJHUi5JTi5JQy5NSU5FXCJdXSxJWzExMTQwMF09W0FbXCJHUi5FUS5NSVNTSUxFIExBVU5DSEVSXCJdXSxJWzExMTUwMF09W3MuX3NjYWxlKC44LEFbXCJBQy5JQy5SQURJT0FDVElWRSBNQVRFUklBTFwiXSldLElbMTExNjAwXT1bQVtcIkdSLklOLklDLk1JTElUQVJZL0NJVklMSUFOLlBSSU5URUQgTUVESUFcIl1dLElbMTExNzAwXT1bQVtcIlNULklDLlNBRkUgSE9VU0VcIl1dLElbMTExODAwXT1bQVtcIlNULklDLldISVRFIExJU1QgTE9DQVRJT05cIl1dLElbMTExOTAwXT1bQVtcIkdSLkVRLlRFTlRcIl1dLElbMTExOTAxXT1bQVtcIkdSLkVRLlRFTlRcIl0sQVtcIlNULk0xLkRJU1BMQUNFRCBQRVJTT05TLCBSRUZVR0VFUywgQU5EIEVWQUNVRUVTXCJdXSxJWzExMTkwMl09W0FbXCJHUi5FUS5URU5UXCJdLEFbXCJHUi5NMS5UUkFJTklORyBDQU1QXCJdXSxJWzExMmUzXT1bQVtcIkdSLklOLklDLklORFVTVFJJQUwgU0lURVwiXSxBW1wiR1IuSU4uSUMuV0FSRUhPVVNFL1NUT1JBR0UgRkFDSUxJVFlcIl1dLElbMTEyMTAwXT1bQVtcIkdSLklDLkZGLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsxMTIxMDFdPVtBW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdXSxJWzExMjEwMl09W0FbXCJHUi5JQy5GRi5CT1JERVIgUEFUUk9MXCJdXSxJWzExMjEwM109W0FbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl1dLElbMTEyMTA0XT1bQVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdXSxJWzExMjEwNV09W0FbXCJHUi5JQy5GRi5ERVBBUlRNRU5UIE9GIEpVU1RJQ0UgKERPSilcIl1dLElbMTEyMTA2XT1bQVtcIkdSLklDLkZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04gKEZCSSlcIl1dLElbMTEyMTA3XT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsxMTIxMDhdPVtBW1wiR1IuSUMuRkYuUFJJU09OXCJdXSxJWzExMjEwOV09W0FbXCJHUi5JQy5VTklURUQgU1RBVEVTIFNFQ1JFVCBTRVJWSUNFKFRSRUFTKSAoVVNTUylcIl1dLElbMTEyMTEwXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OIFNFQ1VSSVRZIEFHRU5DWSAoVFNBKVwiXV0sSVsxMTIxMTFdPVtBW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVsxMTIxMTJdPVtBW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXV0sSVsxMTIyMDBdPVtBW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXV0sSVsxMTIyMDFdPVtBW1wiR1IuSUMuRklSRSBQUk9URUNUSU9OXCJdXSxJWzExMjIwMl09W0FbXCJHUi5JQy5FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl1dLElbMTJlNF09W10sSVsxMjAxMDBdPVtBW1wiR1IuSU4uSUMuQUdSSUNVTFRVUkUgQU5EIEZPT0QgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwMTAxXT1bQVtcIkdSLklOLklDLkFHUklDVUxUVVJBTCBMQUJPUkFUT1JZXCJdXSxJWzEyMDEwMl09W0FbXCJHUi5JTi5JQy5BTklNQUwgRkVFRExPVFwiXV0sSVsxMjAxMDNdPVtBW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sQVtcIkFDLk0xLkNPTU1FUkNJQUxcIl1dLElbMTIwMTA0XT1bQVtcIkdSLklOLklDLkZBUk0vUkFOQ0hcIl1dLElbMTIwMTA1XT1bQVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdXSxJWzEyMDEwNl09W0FbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxBW1wiQUMuTTEuUFJPRFVDVElPTlwiXV0sSVsxMjAxMDddPVtBW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sQVtcIkFDLk0xLlJFVEFJTFwiXV0sSVsxMjAxMDhdPVtBW1wiR1IuSU4uSUMuR1JBSU4gU1RPUkFHRVwiXV0sSVsxMjAyMDBdPVtBW1wiQUMuSUMuQkFOS0lORyBGSU5BTkNFIEFORCBJTlNVUkFOQ0UgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwMjAxXT1bQVtcIkdSLklOLklDLkFUTVwiXV0sSVsxMjAyMDJdPVtBW1wiR1IuSU4uSUMuQkFOS1wiXV0sSVsxMjAyMDNdPVtBW1wiR1IuSU4uSUMuQlVMTElPTiBTVE9SQUdFXCJdXSxJWzEyMDIwNF09W0FbXCJHUi5JTi5JQy5JTkZSQVNUUlVDVFVSRS5CQU5LSU5HIEZJTkFOQ0UgQU5EIElOU1VSQU5DRSAgSU5GUkFTVFJVQ1RVUkUuRUNPTk9NSUMgSU5GUkFTVFJVQ1RVUkUgQVNTRVRcIl1dLElbMTIwMjA1XT1bQVtcIkdSLklOLklDLkZFREVSQUwgUkVTRVJWRSBCQU5LXCJdXSxJWzEyMDIwNl09W0FbXCJHUi5JTi5JQy5GSU5BTkNJQUwgRVhDSEFOR0VcIl1dLElbMTIwMjA3XT1bQVtcIkdSLklOLklDLkZJTkFOQ0lBTCBTRVJWSUNFUywgT1RIRVJcIl1dLElbMTIwMzAwXT1bQVtcIkdSLklOLklDLkNPTU1FUkNJQUwgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwMzAxXT1bQVtcIkdSLklOLklDLkNIRU1JQ0FMIFBMQU5UXCJdXSxJWzEyMDMwMl09W0FbXCJHUi5JTi5JQy5GSVJFQVJNUyBNQU5VRkFDVFVSRVJcIl1dLElbMTIwMzAzXT1bQVtcIkdSLklOLklDLkZJUkVBUk1TIFJFVEFJTEVSXCJdXSxJWzEyMDMwNF09W0FbXCJHUi5JTi5JQy5IQVpBUkRPVVMgTUFURVJJQUwgUFJPRFVDVElPTlwiXV0sSVsxMjAzMDVdPVtBW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFNUT1JBR0VcIl1dLElbMTIwMzA2XT1bQVtcIkdSLklOLklDLklORFVTVFJJQUwgU0lURVwiXV0sSVsxMjAzMDddPVtBW1wiR1IuSU4uSUMuTEFOREZJTExcIl1dLElbMTIwMzA4XT1bQVtcIkdSLklOLklDLlBIQVJNQUNFVVRJQ0FMIE1BTlVGQUNUVVJFUlwiXV0sSVsxMjAzMDldPVtBW1wiR1IuSU4uSUMuQ09OVEFNSU5BVEVEIEhBWkFSRE9VUyBXQVNURSBTSVRFXCJdXSxJWzEyMDMxMF09W0FbXCJHUi5JTi5JQy5UT1hJQyBSRUxFQVNFIElOVkVOVE9SWVwiXV0sSVsxMjA0MDBdPVtBW1wiR1IuSU4uSUMuRURVQ0FUSU9OQUwgRkFDSUxJVElFUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVsxMjA0MDFdPVtBW1wiR1IuSU4uSUMuQ09MTEVHRS9VTklWRVJTSVRZXCJdXSxJWzEyMDQwMl09W0FbXCJHUi5JTi5JQy5TQ0hPT0xcIl1dLElbMTIwNTAwXT1bQVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdXSxJWzEyMDUwMV09W3MuX3NjYWxlKC42LEFbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUlwiXSldLElbMTIwNTAyXT1bcy5fdHJhbnNsYXRlKDAsMTUscy5fc2NhbGUoLjc1LEFbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUlwiXSkpLEFbXCJBQy5NMS5HRU5FUkFUSU9OIFNUQVRJT05cIl1dLElbMTIwNTAzXT1bQVtcIkdSLklOLklDLk5BVFVSQUwgR0FTIEZBQ0lMSVRZXCJdXSxJWzEyMDUwNF09W3MuX3NjYWxlKDEuNSxBW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdKV0sSVsxMjA1MDVdPVtBW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdXSxJWzEyMDUwNl09W0FbXCJHUi5JTi5JQy5QUk9QQU5FIEZBQ0lMSVRZXCJdXSxJWzEyMDYwMF09W0FbXCJHUi5JTi5JQy5HT1ZFUk5NRU5UIFNJVEUgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwNzAwXT1bXSxJWzEyMDcwMV09W0FbXCJHUi5JQy5GRi5NRURJQ0FMXCJdXSxJWzEyMDcwMl09W0FbXCJHUi5JQy5GRi5NRURJQ0FMXCJdLEFbXCJHUi5JQy5GRi5NRURJQ0FMIFRSRUFUTUVOVCBGQUNJTElUWVwiXV0sSVsxMjA4MDBdPVtBW1wiR1IuSU4uSUMuTUlMSVRBUlkgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwODAxXT1bQVtcIkdSLklOLklDLkJBU0VcIl0sQVtcIkFDLk0xLk1JTElUQVJZIEFSTU9SWVwiXV0sSVsxMjA4MDJdPVtBW1wiR1IuSU4uSUMuQkFTRVwiXV0sSVsxMjA5MDBdPVtBW1wiR1IuSU4uSUMuUE9TVEFMIFNFUlZJQ0UgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwOTAxXT1bQVtcIkdSLklOLklDLlBPU1RBTCBESVNUUklCVVRJT04gQ0VOVEVSXCJdXSxJWzEyMDkwMl09W0FbXCJHUi5JTi5JQy5QT1NUIE9GRklDRVwiXV0sSVsxMjFlM109W0FbXCJHUi5JTi5JQy5QVUJMSUMgVkVOVUVTIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMTAwMV09W0FbXCJHUi5JTi5JQy5FTkNMT1NFRCBGQUNJVExJVFkgKFBVQkxJQyBWRU5VRSlcIl1dLElbMTIxMDAyXT1bQVtcIkdSLklOLklDLk9QRU4gRkFDSUxJVFkgKE9QRU4gVkVOVUUpXCJdXSxJWzEyMTAwM109W0FbXCJHUi5JTi5JQy5SRUNSRUFUSU9OQUwgQVJFQVwiXV0sSVsxMjEwMDRdPVtBW1wiR1IuSU4uSUMuUkVMSUdJT1VTIElOU1RJVFVUSU9OXCJdXSxJWzEyMTEwMF09W0FbXCJHUi5JTi5JQy5TUEVDSUFMIE5FRURTIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMTEwMV09W0FbXCJHUi5JTi5JQy5BRFVMVCBEQVkgQ0FSRVwiXV0sSVsxMjExMDJdPVtBW1wiR1IuSU4uSUMuQ0hJTEQgREFZIENBUkVcIl1dLElbMTIxMTAzXT1bQVtcIkdSLklOLklDLkVMREVSIENBUkVcIl1dLElbMTIxMjAwXT1bQVtcIkdSLklOLklDLlRFTEVDT01NVU5JQ0FUSU9OUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVsxMjEyMDFdPVtBW1wiR1IuSUMuRkYuQlJPQURDQVNUIFRSQU5TTUlUVEVSIEFOVEVOTkFcIl1dLElbMTIxMjAyXT1bQVtcIkdSLklOLklDLklORlJBU1RSVUNUVVJFLlRFTEVDT01NVU5JQ0FUSU9OUyBJTkZSQVNUUlVDVFVSRS5URUxFQ09NTVVOSUNBVElPTlNcIl1dLElbMTIxMjAzXT1bQVtcIkdSLklOLklDLlRFTEVDT01NVU5JQ0FUSU9OUyBUT1dFUlwiXV0sSVsxMjEzMDBdPVtzLl9zY2FsZSgxLjUsQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdKV0sSVsxMjEzMDFdPVtBW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sQVtcIkdSLklDLkFJUlBPUlQgT0YgREVCQVJLQVRJT05cIl1dLElbMTIxMzAyXT1bQVtcIkdSLklOLklDLkFJUiBUUkFGRklDIENPTlRST0wgRkFDSUxJVFlcIl1dLElbMTIxMzAzXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl1dLElbMTIxMzA0XT1bQVtcIkdSLklDLkZFUlJZXCJdXSxJWzEyMTMwNV09W0FbXCJHUi5JTi5JQy5IRUxJQ09QVEVSIExBTkRJTkcgU0lURVwiXV0sSVsxMjEzMDZdPVtBW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl1dLElbMTIxMzA3XT1bQVtcIkdSLklDLlJBSUxIRUFEXCJdXSxJWzEyMTMwOF09W0FbXCJHUi5JTi5JQy5SRVNUIFNUT1BcIl1dLElbMTIxMzA5XT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEFbXCJHUi5NMS5OQVZBTFwiXV0sSVsxMjEzMTBdPVtBW1wiR1IuSUMuTkFWQUxcIl0sQVtcIkdSLk0xLllBUkRcIl1dLElbMTIxMzExXT1bQVtcIkdSLklOLklDLlRPTEwgRkFDSUxJVFlcIl1dLElbMTIxMzEyXT1bQVtcIkdSLklOLklDLlRSQUZGSUMgSU5TUEVDVElPTiBGQUNJTElUWVwiXV0sSVsxMjEzMTNdPVtBW1wiR1IuSU4uSUMuVFVOTkVMXCJdXSxJWzEyMTQwMF09W0FbXCJHUi5JQy5XQVRFUlwiXV0sSVsxMjE0MDFdPVtBW1wiR1IuSU4uSUMuQ09OVFJPTCBWQUxWRVwiXV0sSVsxMjE0MDJdPVtBW1wiR1IuSU4uSUMuREFNXCJdXSxJWzEyMTQwM109W0FbXCJHUi5JTi5JQy5ESVNDSEFSR0UgT1VURkFMTFwiXV0sSVsxMjE0MDRdPVtBW1wiR1IuSU4uSUMuR1JPVU5EIFdBVEVSIFdFTExcIl1dLElbMTIxNDA1XT1bQVtcIkdSLklOLklDLlBVTVBJTkcgU1RBVElPTlwiXV0sSVsxMjE0MDZdPVtBW1wiR1IuSU4uSUMuUkVTRVJWT0lSXCJdXSxJWzEyMTQwN109W0FbXCJHUi5JTi5JQy5TVE9SQUdFIFRPV0VSXCJdXSxJWzEyMTQwOF09W0FbXCJHUi5JTi5JQy5TVVJGQUNFIFdBVEVSIElOVEFLRVwiXV0sSVsxMjE0MDldPVtBW1wiR1IuSU4uSUMuV0FTVEVXQVRFUiBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbMTIxNDEwXT1bQVtcIkdSLklDLldBVEVSXCJdXSxJWzEyMTQxMV09W0FbXCJHUi5JQy5XQVRFUiBQVVJJRklDQVRJT05cIl1dLHRbXCIwMVwiXT1bQVtcIkdSLk0xLkJJT0xPR0lDQUxcIl1dLHRbXCIwMlwiXT1bQVtcIkdSLk0xLkNIRU1JQ0FMXCJdXSx0W1wiMDNcIl09W0FbXCJHUi5NMS5OVUNMRUFSXCJdXSx0W1wiMDRcIl09W0FbXCJHUi5JTi5NMS5SQURJT0xPR0lDQUxcIl1dLHRbXCIwNVwiXT1bQVtcIkdSLk0xLkRFQ09OVEFNSU5BVElPTlwiXV0sdFtcIjA2XCJdPVtBW1wiR1IuSU4uTTEuQ09BTFwiXV0sdFtcIjA3XCJdPVtBW1wiR1IuSU4uTTEuR0VPVEhFUk1BTFwiXV0sdFtcIjA4XCJdPVtBW1wiR1IuSU4uTTEuSFlEUk9FTEVDVFJJQ1wiXV0sdFtcIjA5XCJdPVtBW1wiR1IuSU4uTTEuTkFUVVJBTCBHQVNcIl1dLHRbMTBdPVtBW1wiR1IuSU4uTTEuUEVUUk9MRVVNXCJdXSx0WzExXT1bQVtcIkdSLklOLk0xLkNJVklMSUFOXCJdXSx0WzEyXT1bQVtcIkdSLklOLk0xLkNJVklMSUFOIFRFTEVQSE9ORVwiXV0sdFsxM109W0FbXCJHUi5JTi5NMS5DSVZJTElBTiBURUxFVklTSU9OXCJdXSx0WzE0XT1bQVtcIkdSLk0xLkNZQkVSU1BBQ0VcIl1dLHRbMTVdPVtBW1wiR1IuTTEuSk9JTlQgTkVUV09SSyBOT0RFXCJdXSx0WzE2XT1bQVtcIkdSLk0xLkNPTU1BTkQgUE9TVCBOT0RFXCJdXSxFW1wiMDFcIl09W0FbXCJHUi5JTi5NMi5DSEVNSUNBTCAmIEJJT0xPR0lDQUwgV0FSRkFSRVwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuSU4uTTIuQ0hFTUlDQUwgV0FSRkFSRSBQUk9EVUNUSU9OXCJdXSxFW1wiMDNcIl09W0FbXCJHUi5JTi5NMi5OVUNMRUFSIFdBUkZBUkUgUFJPRFVDVElPTlwiXV0sRVtcIjA0XCJdPVtBW1wiR1IuSU4uTTIuUkFESU9MT0dJQ0FMIFdBUkZBUkUgUFJPRFVDVElPTlwiXV0sRVtcIjA1XCJdPVtBW1wiR1IuSU4uTTIuQVRPTUlDIEVORVJHWSBSRUFDVE9SXCJdXSxFW1wiMDZcIl09W0FbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFBST0RVQ1RJT05cIl1dLEVbXCIwN1wiXT1bQVtcIkdSLklOLk0yLk5VQ0xFQVIgTUFURVJJQUwgU1RPUkFHRVwiXV0sRVtcIjA4XCJdPVtBW1wiR1IuSU4uTTIuV0VBUE9OUyBHUkFERSBQUk9EVUNUSU9OXCJdXSxFW1wiMDlcIl09W0FbXCJHUi5NMi5DWUJFUlNQQUNFXCJdXSl9fSxaPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpkLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMzBcIj09ZSYmKElbMTFlNF09W0FbXCJTRS5JQy5NSUxJVEFSWVwiXV0sSVsxMmU0XT1bQVtcIlNFLklDLkNPTUJBVEFOVFwiXV0sSVsxMjAxMDBdPVtBW1wiU0UuSUMuQ0FSUklFUlwiXV0sSVsxMjAyMDBdPVtBW1wiU0UuSUMuU1VSRkFDRSBDT01CQVRBTlQsIExJTkVcIl1dLElbMTIwMjAxXT1bQVtcIlNFLklDLkJBVFRMRVNISVBcIl1dLElbMTIwMjAyXT1bQVtcIlNFLklDLkNSVUlTRVIsIEdVSURFRCBNSVNTSUxFXCJdXSxJWzEyMDIwM109W0FbXCJTRS5JQy5ERVNUUk9ZRVJcIl1dLElbMTIwMjA0XT1bQVtcIlNFLklDLkZSSUdBVEVcIl1dLElbMTIwMjA1XT1bQVtcIlNFLklDLkNPUlZFVFRFXCJdXSxJWzEyMDIwNl09W0FbXCJTRS5JQy5MSVRUT1JBTCBDT01CQVRBTlQgU0hJUFwiXV0sSVsxMjAzMDBdPVtBW1wiU0UuSUMuQU1QSElCSU9VUyBXQVJGQVJFIFNISVBcIl1dLElbMTIwMzAxXT1bQVtcIlNFLklDLkFNUEhJQklPVVMgRk9SQ0UgRkxBR1NISVBcIl1dLElbMTIwMzAyXT1bQVtcIlNFLklDLkFNUEhJQklPVVMgQVNTQVVMVFwiXV0sSVsxMjAzMDNdPVtBW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUIFNISVAsIEdFTkVSQUxcIl1dLElbMTIwMzA0XT1bQVtcIlNFLklDLkFNUEhJQklPVVMgQVNTQVVMVCBTSElQLCBNVUxUSS1QVVJQT1NFXCJdXSxJWzEyMDMwNV09W0FbXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgSEVMSUNPUFRFUlwiXV0sSVsxMjAzMDZdPVtBW1wiU0UuSUMuQU1QSElCSU9VUyBUUkFOU1BPUlQsIERPQ0tcIl1dLElbMTIwMzA3XT1bQVtcIlNFLklDLkxBTkRJTkcgU0hJUFwiXV0sSVsxMjAzMDhdPVtBW1wiU0UuSUMuTEFORElORyBDUkFGVFwiXV0sSVsxMjA0MDBdPVtBW1wiU0UuSUMuTUlORSBXQVJGQVJFIFZFU1NFTFwiXV0sSVsxMjA0MDFdPVtBW1wiU0UuSUMuTUlORUxBWUVSXCJdXSxJWzEyMDQwMl09W0FbXCJTRS5JQy5NSU5FU1dFRVBFUlwiXV0sSVsxMjA0MDNdPVtBW1wiU0UuSUMuTUlORVNXRUVQRVIsIERST05FXCJdXSxJWzEyMDQwNF09W0FbXCJTRS5JQy5NSU5FSFVOVEVSXCJdXSxJWzEyMDQwNV09W0FbXCJTRS5JQy5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sSVsxMjA0MDZdPVtBW1wiU0UuSUMuTUlORSBDT1VOVEVSIE1FQVNVUkUgU1VQUE9SVCBTSElQXCJdXSxJWzEyMDUwMF09W0FbXCJTRS5JQy5QQVRST0xcIl1dLElbMTIwNTAxXT1bQVtcIlNFLklDLlBBVFJPTCBDUkFGVFwiXV0sSVsxMjA1MDJdPVtBW1wiU0UuSUMuUEFUUk9MIEdVTlwiXV0sSVsxMjA2MDBdPVtBW1wiU0UuSUMuU0VBIFNVUkZBQ0UgREVDT1lcIl1dLElbMTIwNzAwXT1bQVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXV0sSVsxMjA4MDBdPVtBW1wiU0UuSUMuTUlMSVRBUlkgU1BFRURCT0FUXCJdXSxJWzEyMDgwMV09W0FbXCJTRS5JQy5NSUxJVEFSWSBTUEVFREJPQVQsIFJJR0lELUhVTEwgSU5GTEFUQUJMRSBCT0FUXCJdXSxJWzEyMDkwMF09W0FbXCJTRS5JQy5NSUxJVEFSWSBKRVRTS0lcIl1dLElbMTIxZTNdPVtBW1wiU0UuSUMuTkFWWSBUQVNLIE9SR0FOSVpBVElPTiBVTklUXCJdXSxJWzEyMTAwMV09W0FbXCJTRS5JQy5OQVZZIFRBU0sgRUxFTUVOVFwiXV0sSVsxMjEwMDJdPVtBW1wiU0UuSUMuTkFWWSBUQVNLIEZPUkNFXCJdXSxJWzEyMTAwM109W0FbXCJTRS5JQy5OQVZZIFRBU0sgR1JPVVBcIl1dLElbMTIxMDA0XT1bQVtcIlNFLklDLk5BVlkgVEFTSyBVTklUXCJdXSxJWzEyMTAwNV09W0FbXCJTRS5JQy5DT05WT1lcIl1dLElbMTIxMTAwXT1bQVtcIlNFLklDLlJBREFSXCJdXSxJWzEzZTRdPVtBW1wiU0UuSUMuTk9OQ09NQkFUQU5UXCJdXSxJWzEzMDEwMF09W0FbXCJTRS5JQy5BVVhJTElBUlkgU0hJUFwiXV0sSVsxMzAxMDFdPVtBW1wiU0UuSUMuQU1NVU5JVElPTiBTSElQXCJdXSxJWzEzMDEwMl09W0FbXCJTRS5JQy5TVE9SRVMgU0hJUFwiXV0sSVsxMzAxMDNdPVtBW1wiU0UuSUMuQVVYSUxJQVJZIEZMQUcgT1IgQ09NTUFORCBTSElQXCJdXSxJWzEzMDEwNF09W0FbXCJTRS5JQy5JTlRFTExJR0VOQ0UgQ09MTEVDVE9SXCJdXSxJWzEzMDEwNV09W0FbXCJTRS5JQy5PQ0VBTiBSRVNFQVJDSCBTSElQXCJdXSxJWzEzMDEwNl09W0FbXCJTRS5JQy5TVVJWRVkgU0hJUFwiXV0sSVsxMzAxMDddPVtBW1wiU0UuSUMuSE9TUElUQUwgU0hJUDJcIl1dLElbMTMwMTA4XT1bQVtcIlNFLklDLkNBUkdPIFNISVBcIl1dLElbMTMwMTA5XT1bQVtcIlNFLklDLkNPTUJBVCBTVVBQT1JUIFNISVAsIEZBU1RcIl1dLElbMTMwMTEwXT1bQVtcIlNFLklDLk9JTEVSLCBSRVBMRU5JU0hNRU5UXCJdXSxJWzEzMDExMV09W0FbXCJTRS5JQy5SRVBBSVIgU0hJUFwiXV0sSVsxMzAxMTJdPVtBW1wiU0UuSUMuU1VCTUFSSU5FIFRFTkRFUlwiXV0sSVsxMzAxMTNdPVtBW1wiU0UuSUMuVFVHLCBPQ0VBTiBHT0lOR1wiXV0sSVsxMzAyMDBdPVtBW1wiU0UuSUMuU0VSVklDRSBDUkFGVCwgWUFSRCwgR0VORVJBTFwiXV0sSVsxMzAyMDFdPVtBW1wiU0UuSUMuQkFSR0UsIE5PVCBTRUxGLVBST1BFTExFRFwiXV0sSVsxMzAyMDJdPVtBW1wiU0UuSUMuQkFSR0UsIFNFTEYtUFJPUEVMTEVEXCJdXSxJWzEzMDIwM109W0FbXCJTRS5JQy5UVUcsIEhBUkJPVVJcIl1dLElbMTMwMjA0XT1bQVtcIlNFLklDLkxBVU5DSFwiXV0sSVsxNGU0XT1bQVtcIlNFLklDLkNJVklMSUFOXCJdXSxJWzE0MDEwMF09W0FbXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdXSxJWzE0MDEwMV09W0FbXCJTRS5JQy5DQVJHTywgR0VORVJBTFwiXV0sSVsxNDAxMDJdPVtBW1wiU0UuSUMuQ09OVEFJTkVSIFNISVBcIl1dLElbMTQwMTAzXT1bQVtcIlNFLklDLkRSRURHRVwiXV0sSVsxNDAxMDRdPVtBW1wiU0UuSUMuUk9MTCBPTi1ST0xMIE9GRlwiXV0sSVsxNDAxMDVdPVtBW1wiU0UuSUMuRkVSUllcIl1dLElbMTQwMTA2XT1bQVtcIlNFLklDLkhFQVZZIExJRlRcIl1dLElbMTQwMTA3XT1bQVtcIlNFLklDLkhPVkVSQ1JBRlQgMjUyNURcIl1dLElbMTQwMTA4XT1bQVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIExBU0ggQ0FSUklFUiAoV0lUSCBCQVJHRVMpXCJdXSxJWzE0MDEwOV09W0FbXCJTRS5JQy5PSUxFUi9UQU5LRVJcIl1dLElbMTQwMTEwXT1bQVtcIlNFLklDLlBBU1NFTkdFUiBTSElQXCJdXSxJWzE0MDExMV09W0FbXCJTRS5JQy5UVUcsIE9DRUFOIEdPSU5HIENJVklMSUFOXCJdXSxJWzE0MDExMl09W0FbXCJTRS5JQy5UT1dcIl1dLElbMTQwMTEzXT1bQVtcIlNFLklDLlRSQU5TUE9SVCBTSElQLCBIQVpBUkRPVVMgTUFURVJJQUxcIl1dLElbMTQwMTE0XT1bQVtcIlNFLklDLkpVTksvREhPV1wiXV0sSVsxNDAxMTVdPVtBW1wiU0UuSUMuQkFSR0UsIE5PVCBTRUxGLVBST1BFTExFRFwiXV0sSVsxNDAxMTZdPVtBW1wiU0UuSUMuSE9TUElUQUwgU0hJUFwiXV0sSVsxNDAyMDBdPVtBW1wiU0UuSUMuRklTSElORyBWRVNTRUxcIl1dLElbMTQwMjAxXT1bQVtcIlNFLklDLkRSSUZURVJcIl1dLElbMTQwMjAyXT1bQVtcIlNFLklDLlRSQVdMRVJcIl1dLElbMTQwMjAzXT1bQVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMIERSRURHRVwiXV0sSVsxNDAzMDBdPVtBW1wiU0UuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVsxNDA0MDBdPVtBW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgU0FJTElORyBCT0FUXCJdXSxJWzE0MDUwMF09W0FbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRURcIl1dLElbMTQwNTAxXT1bQVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRCwgUklHSUQtSFVMTCBJTkZMQVRBQkxFIEJPQVRcIl1dLElbMTQwNTAyXT1bQVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRCwgU1BFRURCT0FUXCJdXSxJWzE0MDYwMF09W0FbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBKRVRTS0lcIl1dLElbMTQwNzAwXT1bQVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRSAoVVNWKVwiXV0sSVsxNWU0XT1bQVtcIlNFLklDLk9XTiBTSElQXCJdXSxJWzE2ZTRdPVtBW1wiU0UuSUMuRlVTRUQgVFJBQ0tcIl1dLElbMTdlNF09W0FbXCJTRS5JQy5NQU5VQUwgVFJBQ0tcIl1dLHRbXCIwMVwiXT1bQVtcIlNFLk0xLk9XTiBTSElQXCJdXSx0W1wiMDJcIl09W0FbXCJTRS5NMS5BTlRJQUlSIFdBUkZBUkVcIl1dLHRbXCIwM1wiXT1bQVtcIlNFLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sdFtcIjA0XCJdPVtBW1wiU0UuTTEuRVNDT1JUXCJdXSx0W1wiMDVcIl09W0FbXCJTRS5NMS5FTEVDVFJPTklDIFdBUkZBUkVcIl1dLHRbXCIwNlwiXT1bQVtcIlNFLk0xLklOVEVMTElHRU5DRSwgU1VSVkVJTExBTkNFLCBSRUNPTk5BSVNTQU5DRVwiXV0sdFtcIjA3XCJdPVtBW1wiU0UuTTEuTUlORSBDT1VOVEVSIE1FQVNVUkVTXCJdXSx0W1wiMDhcIl09W0FbXCJTRS5NMS5NSVNTSUxFIERFRkVOU0VcIl1dLHRbXCIwOVwiXT1bQVtcIlNFLk0xLk1FRElDQUxcIl1dLHRbMTBdPVtBW1wiU0UuTTEuTUlORSBXQVJGQVJFXCJdXSx0WzExXT1bQVtcIlNFLk0xLlJFTU9URSBNVUxUSS1NSVNTSU9OIFZFSElITEVcIl1dLHRbMTJdPVtBW1wiU0UuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFXCJdXSx0WzEzXT1bQVtcIlNFLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXV0sdFsxNF09W0FbXCJTRS5NMS5CQUxMSVNUSUMgTUlTU0lMRVwiXV0sdFsxNV09W0FbXCJTRS5NMS5HVUlERUQgTUlTU0lMRVwiXV0sdFsxNl09W0FbXCJTRS5NMS5PVEhFUiBHVUlERUQgTUlTU0lMRVwiXV0sdFsxN109W0FbXCJTRS5NMS5UT1JQRURPXCJdXSx0WzE4XT1bQVtcIlNFLk0xLkRST05FLUVRVUlQUEVEXCJdXSx0WzE5XT1bQVtcIlNFLk0xLkhFTElDT1BURVItRVFVSVBQRURcIl1dLHRbMjBdPVtBW1wiU0UuTTEuQkFMTElTVElDIE1JU1NJTEUgREVGRU5TRSwgU0hPT1RFUlwiXV0sdFsyMV09W0FbXCJTRS5NMS5CQUxMSVNUSUMgTUlTU0lMRSBERUZFTlNFLCBMT05HLSBSQU5HRSBTVVJWRUlMTEFOQ0UgQU5EIFRSQUNLIChMUlMmVClcIl1dLHRbMjJdPVtBW1wiU0UuTTEuU0VBLUJBU0UgWC1CQU5EXCJdXSx0WzIzXT1bQVtcIlNFLk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sdFsyNF09W0FbXCJTRS5NMS5ISUpBQ0tFUlwiXV0sdFsyNV09W0FbXCJTRS5NMS5DWUJFUlNQQUNFXCJdXSxFW1wiMDFcIl09W0FbXCJTRS5NMi5OVUNMRUFSIFBPV0VSRURcIl1dLEVbXCIwMlwiXT1bQVtcIlNFLk0yLkhFQVZZXCJdXSxFW1wiMDNcIl09W0FbXCJTRS5NMi5MSUdIVFwiXV0sRVtcIjA0XCJdPVtBW1wiU0UuTTIuTUVESVVNXCJdXSxFW1wiMDVcIl09W0FbXCJTRS5NMi5ET0NLXCJdXSxFW1wiMDZcIl09W0FbXCJTRS5NMi5MT0dJU1RJQ1NcIl1dLEVbXCIwN1wiXT1bQVtcIlNFLk0yLlRBTktcIl1dLEVbXCIwOFwiXT1bQVtcIlNFLk0yLlZFSElDTEVcIl1dLEVbXCIwOVwiXT1bQVtcIlNFLk0yLkZBU1RcIl1dLEVbMTBdPVtBW1wiU0UuTTIuQUlSLUNVU0hJT05FRCAoVVNBIE9OTFkpXCJdXSxFWzExXT1bQVtcIlNFLk0yLkFJUi1DVVNISU9ORURcIl1dLEVbMTJdPVtBW1wiU0UuTTIuSFlEUk9GT0lMXCJdXSxFWzEzXT1bQVtcIlNFLk0yLkFVVE9OT01PVVMgQ09OVFJPTFwiXV0sRVsxNF09W0FbXCJTRS5NMi5SRU1PVEVMWSBQSUxPVEVEXCJdXSxFWzE1XT1bQVtcIlNFLk0yLkVYUEVOREFCTEVcIl1dLEVbMTZdPVtBW1wiU0UuTTIuQ1lCRVJTUEFDRVwiXV0pfX0scT17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6RCxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjM1XCI9PWUmJihJWzExZTRdPVtBW1wiU1UuSUMuTUlMSVRBUllcIl1dLElbMTEwMTAwXT1bQVtcIlNVLklDLlNVQk1BUklORVwiXV0sSVsxMTAxMDFdPVtBW1wiU1UuSUMuU1VCTUFSSU5FLCBTVVJGQUNFRFwiXV0sSVsxMTAxMDJdPVtBW1wiU1UuSUMuU1VCTUFSSU5FLCBTTk9SS0VMSU5HXCJdXSxJWzExMDEwM109W0FbXCJTVS5JQy5TVUJNQVJJTkUsIEJPVFRPTUVEXCJdXSxJWzExMDIwMF09W0FbXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRVwiXV0sSVsxMTAzMDBdPVtBW1wiU1UuSUMuTk9OLVNVQk1BUklORVwiXV0sSVsxMTA0MDBdPVtBW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVVilcIl1dLElbMTEwNTAwXT1bQVtcIlNVLklDLkRJVkVSLCBNSUxJVEFSWVwiXV0sSVsxMmU0XT1bQVtcIlNVLklDLkNJVklMSUFOXCJdXSxJWzEyMDEwMF09W0FbXCJTVS5JQy5TVUJNRVJTSUJMRSwgQ0lWSUxJQU5cIl1dLElbMTIwMjAwXT1bQVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpLCBDSVZJTElBTlwiXV0sSVsxMjAzMDBdPVtBW1wiU1UuSUMuRElWRVIsIENJVklMSUFOXCJdXSxJWzEzZTRdPVtBW1wiU1UuSUMuVU5ERVJXQVRFUiBXRUFQT05cIl1dLElbMTMwMTAwXT1bQVtcIlNVLklDLlRPUlBFRE9cIl1dLElbMTMwMjAwXT1bQVtcIlNVLklDLklNUFJPVklTRUQgRVhQTE9TSVZFIERFVklDRSAoSUVEKVwiXV0sSVsxMzAzMDBdPVtBW1wiU1UuSUMuVU5ERVJXQVRFUiBERUNPWSBEU3ltYm9sXCJdXSxJWzE0ZTRdPVtBW1wiU1UuSUMuRUNITyBUUkFDS0VSIENMQVNTSUZJRVIgKEVUQykvUE9TU0lCTEUgQ09OVEFDVCAoUE9TQ09OKVwiXV0sSVsxNWU0XT1bQVtcIlNVLklDLkZVU0VEIFRSQUNLXCJdXSxJWzE2ZTRdPVtBW1wiU1UuSUMuTUFOVUFMIFRSQUNLXCJdXSxJWzJlNV09W0FbXCJTVS5JQy5TRUFCRUQgSU5TVEFMTEFUSU9OLCBNQU4tTUFERSwgTUlMSVRBUllcIl1dLElbMjFlNF09W0FbXCJTVS5JQy5TRUFCRUQgSU5TVEFMTEFUSU9OLCBNQU4tTUFERSwgTk9OLU1JTElUQVJZXCJdXSx0W1wiMDFcIl09W0FbXCJTVS5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLHRbXCIwMlwiXT1bQVtcIlNVLk0xLkFVWElMSUFSWVwiXV0sdFtcIjAzXCJdPVtBW1wiU1UuTTEuQ09NTUFORCBBTkQgQ09OVFJPTFwiXV0sdFtcIjA0XCJdPVtBW1wiU1UuTTEuSU5URUxMSUdFTkNFLCBTVVJWRUlMTEFOQ0UsIFJFQ09OTkFJU1NBTkNFXCJdXSx0W1wiMDVcIl09W0FbXCJTVS5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sdFtcIjA2XCJdPVtBW1wiU1UuTTEuTUlORSBXQVJGQVJFXCJdXSx0W1wiMDdcIl09W0FbXCJTVS5NMS5TVVJGQUNFIFdBUkZBUkVcIl1dLHRbXCIwOFwiXT1bQVtcIlNVLk0xLkFUVEFDS1wiXV0sdFtcIjA5XCJdPVtBW1wiU1UuTTEuQkFMTElTVElDIE1JU1NJTEVcIl1dLHRbMTBdPVtBW1wiU1UuTTEuR1VJREVEIE1JU1NJTEVcIl1dLHRbMTFdPVtBW1wiU1UuTTEuT1RIRVIgR1VJREVEIE1JU1NJTEVTIChQT0lOVCBERUZFTkNFKVwiXV0sdFsxMl09W0FbXCJTVS5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VcIl1dLHRbMTNdPVtBW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDFcIl1dLHRbMTRdPVtBW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDJcIl1dLHRbMTVdPVtBW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gSElHSCAzXCJdXSx0WzE2XT1bQVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIEhJR0ggNFwiXV0sdFsxN109W0FbXCJTVS5NMS5QUk9CQUJMRSBTVUJNQVJJTkVcIl1dLHRbMThdPVtBW1wiU1UuTTEuQ0VSVEFJTiBTVUJNQVJJTkVcIl1dLHRbMTldPVtBW1wiU1UuTTEuQU5USS1UT1JQRURPIFRPUlBFRE9cIl1dLHRbMjBdPVtBW1wiU1UuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSx0WzIxXT1bQVtcIlNVLk0xLkhJSkFDS0VSXCJdXSx0WzIyXT1bQVtcIlNVLk0xLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMVwiXT1bQVtcIlNVLk0yLkFJUiBJTkRFUEVOREVOVCBQUk9QVUxTSU9OXCJdXSxFW1wiMDJcIl09W0FbXCJTVS5NMi5ESUVTRUwgUFJPUFVMU0lPTlwiXV0sRVtcIjAzXCJdPVtBW1wiU1UuTTIuRElFU0VMIC0gVFlQRSAxXCJdXSxFW1wiMDRcIl09W0FbXCJTVS5NMi5ESUVTRUwgLSBUWVBFIDJcIl1dLEVbXCIwNVwiXT1bQVtcIlNVLk0yLkRJRVNFTCAtIFRZUEUgM1wiXV0sRVtcIjA2XCJdPVtBW1wiU1UuTTIuTlVDTEVBUiBQT1dFUkVEXCJdXSxFW1wiMDdcIl09W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSAxXCJdXSxFW1wiMDhcIl09W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSAyXCJdXSxFW1wiMDlcIl09W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSAzXCJdXSxFWzEwXT1bQVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDRcIl1dLEVbMTFdPVtBW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgNVwiXV0sRVsxMl09W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA2XCJdXSxFWzEzXT1bQVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDdcIl1dLEVbMTRdPVtBW1wiU1UuTTIuQVVUT05PTU9VUyBDT05UUk9MXCJdXSxFWzE1XT1bQVtcIlNVLk0yLlJFTU9URUxZIFBJTE9URURcIl1dLEVbMTZdPVtBW1wiU1UuTTIuRVhQRU5EQUJMRVwiXV0sRVsxN109W0FbXCJTVS5NMi5DWUJFUlNQQUNFXCJdXSl9fSxqPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpELGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMzZcIj09ZSYmKElbMTFlNF09W0FbXCJTVS5JQy5TRUEgTUlORVwiXV0sSVsxMTAxMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgLSBCT1RUT01cIl1dLElbMTEwMjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIC0gTU9PUkVEXCJdXSxJWzExMDMwMF09W0FbXCJTVS5JQy5TRUEgTUlORSAtIEZMT0FUSU5HXCJdXSxJWzExMDQwMF09W0FbXCJTVS5JQy5TRUEgTUlORSAtIFJJU0lOR1wiXV0sSVsxMTA1MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgKElOIE9USEVSIFBPU0lUSU9OKVwiXV0sSVsxMTA2MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgLSBLSU5HRklTSEVSXCJdXSxJWzExMDcwMF09W0FbXCJTVS5JQy5TRUEgTUlORSAtIFNNQUxMIE9CSkVDVFwiXV0sSVsxMTA4MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORVwiXV0sSVsxMTA4MDFdPVtBW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEJPVFRPTVwiXV0sSVsxMTA4MDJdPVtBW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIE1PT1JFRFwiXV0sSVsxMTA4MDNdPVtBW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEZMT0FUSU5HXCJdXSxJWzExMDgwNF09W0FbXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FIC0gUklTSU5HXCJdXSxJWzExMDkwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRFwiXV0sSVsxMTA5MDFdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBCT1RUT01cIl1dLElbMTEwOTAyXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gTU9PUkVEXCJdXSxJWzExMDkwM109W0FbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIEZMT0FUSU5HXCJdXSxJWzExMDkwNF09W0FbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIFJJU0lOR1wiXV0sSVsxMTA5MDVdPVtBW1wiU1UuSUMuU0VBIE1JTkUgKElOIE9USEVSIFBPU0lUSU9OKSBORVVUUkFMSVpFRFwiXV0sSVsxMmU0XT1bQVtcIlNVLklDLlVORVhQTE9ERUQgRVhQTE9TSVZFIE9SRE5BTkNFXCJdXSxJWzEzZTRdPVtBW1wiU1UuSUMuU0VBIE1JTkUgREVDT1lcIl1dLElbMTMwMTAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZLCBCT1RUT00vR1JPVU5EXCJdXSxJWzEzMDIwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgTU9PUkVEXCJdXSxJWzE0ZTRdPVtdLElbMTQwMTAwXT1bcy5fc2NhbGUoMS4zLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDT1wiXSldLElbMTQwMTAxXT1bcy5fc2NhbGUoMS4zLFtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAxXCJdXSldLElbMTQwMTAyXT1bcy5fc2NhbGUoMS4zLFtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAyXCJdXSldLElbMTQwMTAzXT1bcy5fc2NhbGUoMS4zLFtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAzXCJdXSldLElbMTQwMTA0XT1bcy5fc2NhbGUoMS4zLFtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA0XCJdXSldLElbMTQwMTA1XT1bcy5fc2NhbGUoMS4zLFtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA1XCJdXSldLElbMTQwMjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gQk9UVE9NXCJdXSxJWzE0MDIwMV09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDFcIl1dLElbMTQwMjAyXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gQk9UVE9NXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMlwiXV0sSVsxNDAyMDNdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBCT1RUT01cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAzXCJdXSxJWzE0MDIwNF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDRcIl1dLElbMTQwMjA1XT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gQk9UVE9NXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNVwiXV0sSVsxNDAzMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBNT09SRURcIl1dLElbMTQwMzAxXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMVwiXV0sSVsxNDAzMDJdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBNT09SRURcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAyXCJdXSxJWzE0MDMwM109W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIE1PT1JFRFwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDNcIl1dLElbMTQwMzA0XT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNFwiXV0sSVsxNDAzMDVdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBNT09SRURcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA1XCJdXSxJWzE0MDQwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEZMT0FUSU5HXCJdXSxJWzE0MDQwMV09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEZMT0FUSU5HXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMVwiXV0sSVsxNDA0MDJdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDJcIl1dLElbMTQwNDAzXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gRkxPQVRJTkdcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAzXCJdXSxJWzE0MDQwNF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEZMT0FUSU5HXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNFwiXV0sSVsxNDA0MDVdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDVcIl1dLElbMTVlNF09W3MuX3NjYWxlKDEuMyxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl0pXSxJWzE1MDEwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIEJPVFRPTVwiXV0sSVsxNTAyMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUMgLSBNT09SRURcIl1dLElbMTUwMzAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gRkxPQVRJTkdcIl1dLElbMTZlNF09W3MuX3NjYWxlKDEuMyxBW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTlwiXSldLElbMTYwMTAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT04gLSBCT1RUT01cIl1dLElbMTYwMjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT04gLSBNT09SRURcIl1dLElbMTYwMzAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT04gLSBGTE9BVElOR1wiXV0sSVsxN2U0XT1bcy5fc2NhbGUoMS4zLEFbXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1JcIl0pXSxJWzE3MDEwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1IgTkVVVFJBTElaRURcIl1dLElbMThlNF09W3MuX3NjYWxlKDEuMyxBW1wiU1UuSUMuU0VBIE1JTkUgTUlORSBBTkNIT1JcIl0pXSxJWzE5ZTRdPVtzLl9zY2FsZSgxLjMsQVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdKV0sSVsxOTAxMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBCT1RUT01cIl1dLElbMTkwMjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUIC0gTU9PUkVEXCJdXSxJWzE5MDMwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIEZMT0FUSU5HXCJdXSxJWzJlNV09W0FbXCJTVS5JQy5FTlZJUk9OTUVOVEFMIFJFUE9SVCBMT0NBVElPTlwiXV0sSVsyMWU0XT1bQVtcIlNVLklDLkRJVkUgUkVQT1JUIExPQ0FUSU9OXCJdXSl9fSwkPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiNDBcIj09ZSYmKElbMTFlNF09W10sSVsxMTAxMDBdPVtBW1wiQUMuSUMuQ1JJTUlOQUwuQUNUSVZJVFkuSU5DSURFTlRcIl1dLElbMTEwMTAxXT1bcy5fc2NhbGUoMS41LEFbXCJTVC5JQy5BUlJFU1RcIl0pXSxJWzExMDEwMl09W0FbXCJTVC5JQy5BUlNPTi9GSVJFXCJdXSxJWzExMDEwM109W0FbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEFbXCJTVC5JQy5BVFRFTVBURUQgQ1JJTUlOQUwgQUNUSVZJVFlcIl1dLElbMTEwMTA0XT1bQVtcIlNULklDLkRSSVZFLUJZIFNIT09USU5HXCJdXSxJWzExMDEwNV09W0FbXCJTVC5JQy5EUlVHIFJFTEFURUQgQUNUSVZJVElFU1wiXV0sSVsxMTAxMDZdPVtBW1wiU1QuSUMuRVhUT1JUSU9OXCJdXSxJWzExMDEwN109W0FbXCJTVC5JQy5HUkFGRklUSVwiXV0sSVsxMTAxMDhdPVtBW1wiU1QuSUMuS0lMTElORyBWSUNUSU1cIl1dLElbMTEwMTA5XT1bQVtcIlNULklDLlBPSVNPTklOR1wiXV0sSVsxMTAxMTBdPVtBW1wiU1QuSUMuUklPVFwiXV0sSVsxMTAxMTFdPVtzLl9zY2FsZSgxLjUsQVtcIlNULklDLkJPT0JZIFRSQVBcIl0pXSxJWzExMDExMl09W0FbXCJTVC5JQy5IT1VTRVwiXSxBW1wiU1QuTTEuRVZJQ1RJT05cIl1dLElbMTEwMTEzXT1bQVtcIlNULklDLkJMQUNLIE1BUktFVElOR1wiXV0sSVsxMTAxMTRdPVtBW1wiU1QuSUMuVkFOREFMSVNNL0xPT1QvUkFOU0FDSy9QTFVOREVSL1NBQ0tcIl1dLElbMTEwMTE1XT1bQVtcIkdSLklDLkZGLkpBSUwgQlJFQUtcIl1dLElbMTEwMTE2XT1bQVtcIlNULklDLlJPQkJFUllcIl1dLElbMTEwMTE3XT1bQVtcIlNULklDLlRIRUZUXCJdXSxJWzExMDExOF09W0FbXCJTVC5JQy5CVVJHTEFSWVwiXV0sSVsxMTAxMTldPVtBW1wiU1QuSUMuU01VR0dMSU5HXCJdXSxJWzExMDEyMF09W0FbXCJTVC5JQy5ST0NLIFRIUk9XSU5HXCJdXSxJWzExMDEyMV09W0FbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXSxBW1wiU1QuTTEuREVBRCBCT0RZXCJdXSxJWzExMDEyMl09W0FbXCJTVC5JQy5TQUJPVEFHRVwiXV0sSVsxMTAxMjNdPVtzLl90cmFuc2xhdGUoMCwxMCxzLl9zY2FsZSguOCxBW1wiQUMuSUMuQ1JJTUlOQUwuQUNUSVZJVFkuSU5DSURFTlRcIl0pKSxBW1wiQUMuTTEuVEhSRUFUXCJdXSxJWzExMDIwMF09W0FbXCJTVC5JQy5CT01CXCJdXSxJWzExMDIwMV09W0FbXCJTVC5JQy5CT01CXCJdLEFbXCJBQy5NMS5USFJFQVRcIl1dLElbMTEwMzAwXT1bQVtcIlNULklDLklFRFwiXV0sSVsxMTAzMDFdPVtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdLEFbXCJTVC5JQy5JRURcIl1dLElbMTEwMzAyXT1bcy5fdHJhbnNsYXRlKDAsMTUscy5fc2NhbGUoLjcsW0FbXCJTVC5JQy5FWFBMT1NJT05cIl0sQVtcIlNULklDLklFRFwiXV0pKSxBW1wiU1QuTTEuUFJFTUFUVVJFXCJdXSxJWzExMDMwM109W0FbXCJTVC5JQy5JRURcIl0sQVtcIkdSLklDLkZGLlNVUFBMWVwiXV0sSVsxMTAzMDRdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuSUVEXCJdXSxJWzExMDQwMF09W0FbXCJBQy5JQy5TSE9PVElOR1wiXV0sSVsxMTA0MDFdPVtBW1wiU1QuSUMuU05JUElOR1wiXV0sSVsxMTA1MDBdPVtBW1wiU1QuSUMuSUxMRUdBTCBEUlVHIE9QRVJBVElPTlwiXV0sSVsxMTA1MDFdPVtBW1wiU1QuSUMuSUxMRUdBTCBEUlVHIE9QRVJBVElPTlwiXSxBW1wiU1QuTTEuVFJBRkZJQ0tJTkdcIl1dLElbMTEwNTAyXT1bQVtcIlNULklDLklMTEVHQUwgRFJVRyBPUEVSQVRJT05cIl0sQVtcIlNULk0xLkxBQlJBVE9SWVwiXV0sSVsxMTA2MDBdPVtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdXSxJWzExMDYwMV09W0FbXCJTVC5JQy5FWFBMT1NJT05cIl0sQVtcIlNULklDLkdSRU5BREVcIl1dLElbMTEwNjAyXT1bQVtcIlNULklDLkVYUExPU0lPTlwiXSxBW1wiU1QuSUMuSU5DRU5ESUFSWVwiXV0sSVsxMTA2MDNdPVtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdLEFbXCJTVC5JQy5NSU5FXCJdXSxJWzExMDYwNF09W0FbXCJTVC5JQy5FWFBMT1NJT05cIl0scy5fc2NhbGUoLjYsQVtcIkdSLkVRLk1PUlRBUlwiXSldLElbMTEwNjA1XT1bQVtcIlNULklDLkVYUExPU0lPTlwiXSxzLl9zY2FsZSguNixBW1wiR1IuRVEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXSldLElbMTEwNjA2XT1bcy5fc2NhbGUoLjcsQVtcIlNULklDLkJPTUJcIl0pLEFbXCJTVC5JQy5FWFBMT1NJT05cIl1dLElbMTJlNF09W0FbXCJBQy5JQy5DUklNSU5BTC5DSVZJTCBESVNUVVJCQU5DRVwiXV0sSVsxMjAxMDBdPVtBW1wiU1QuSUMuREVNT05TVFJBVElPTlwiXV0sSVsxM2U0XT1bXSxJWzEzMDEwMF09W0FbXCJTVC5JQy5QQVRST0xMSU5HXCJdXSxJWzEzMDIwMF09W0FbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbMTMwMjAxXT1bQVtcIlNULklDLlJBRElPIEFORCBURUxFVklTSU9OIFBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXV0sSVsxMzAzMDBdPVtBW1wiU1QuSUMuU0VBUkNISU5HXCJdXSxJWzEzMDQwMF09W10sSVsxMzA0MDFdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuV0lMTElOR1wiXV0sSVsxMzA0MDJdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuQ09FUkNFRC9JTVBSRVNTRURcIl1dLElbMTMwNTAwXT1bQVtcIlNULklDLk1JTkUgTEFZSU5HXCJdXSxJWzEzMDYwMF09W0FbXCJTVC5JQy5TUFlcIl1dLElbMTMwNzAwXT1bQVtcIlNULklDLldBUlJBTlQgU0VSVkVEXCJdXSxJWzEzMDgwMF09W0FbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEFbXCJTVC5NMS5FWEZJTFRSQVRJT05cIl1dLElbMTMwOTAwXT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULk0xLklORklMVFJBVElPTlwiXV0sSVsxMzFlM109W0FbXCJTVC5JQy5HUk9VUFwiXSxBW1wiU1QuTTEuTUVFVElOR1wiXV0sSVsxMzEwMDFdPVtBW1wiU1QuSUMuUE9MTElORyBQTEFDRS9FTEVDVElPTlwiXV0sSVsxMzExMDBdPVtBW1wiU1QuSUMuSE9VU0VcIl0sQVtcIlNULk0xLlJBSURcIl1dLElbMTMxMjAwXT1bQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl1dLElbMTMxMjAxXT1bcy5fc2NhbGUoLjcsQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEFbXCJBQy5NMS5FTUVSR0VOQ1kgQ09MTEVDVElPTiBFVkFDVUFUSU9OIFBPSU5UXCJdXSxJWzEzMTIwMl09W0FbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXV0sSVsxMzEyMDNdPVtzLl9zY2FsZSguNyxBW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksQVtcIkFDLk0xLkVNRVJHRU5DWSBJTkNJREVOVCBDT01NQU5EIENFTlRFUlwiXV0sSVsxMzEyMDRdPVtzLl9zY2FsZSguNyxBW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksQVtcIkFDLk0xLkVNRVJHRU5DWSBPUEVSQVRJT05TIENFTlRFUlwiXV0sSVsxMzEyMDVdPVtBW1wiQUMuSUMuRU1FUkdFTkNZIFBVQkxJQyBJTkZPUk1BVElPTiBDRU5URVJcIl1dLElbMTMxMjA2XT1bcy5fc2NhbGUoLjcsQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEFbXCJBQy5NMS5FTUVSR0VOQ1kgU0hFTFRFUlwiXV0sSVsxMzEyMDddPVtzLl9zY2FsZSguNyxBW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksQVtcIkFDLk0xLkVNRVJHRU5DWSBTVEFHSU5HIEFSRUFcIl1dLElbMTMxMjA4XT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuV0FURVJcIl1dLElbMTMxMzAwXT1bQVtcIkdSLklDLkVNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sSVsxMzEzMDFdPVtBW1wiQUMuSUMuRU1UIFNUQVRJT04gTE9DQVRJT05cIl1dLElbMTMxMzAyXT1bQVtcIkFDLklDLkhFQUxUSCBERVBBUlRNRU5UIEZBQ0lMSVRZXCJdXSxJWzEzMTMwM109W0FbXCJBQy5JQy5NRURJQ0FMIEZBQ0lMSVRJRVMgT1VUUEFUSUVOVFwiXV0sSVsxMzEzMDRdPVtBW1wiQUMuSUMuT1BFUkFUSU9OL0VNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sSVsxMzEzMDVdPVtBW1wiQUMuSUMuUEhBUk1BQ1lcIl1dLElbMTMxMzA2XT1bQVtcIkFDLklDLlRSSUFHRVwiXV0sSVsxMzE0MDBdPVtBW1wiR1IuSUMuRklSRSBQUk9URUNUSU9OXCJdXSxJWzEzMTQwMV09W0FbXCJBQy5JQy5GSVJFIEhZRFJBTlRcIl1dLElbMTMxNDAyXT1bcy5fc2NhbGUoMS41LEFbXCJHUi5JQy5GSVJFIFBST1RFQ1RJT05cIl0pXSxJWzEzMTQwM109W0FbXCJBQy5JQy5PVEhFUiBXQVRFUiBTVVBQTFkgTE9DQVRJT05cIl1dLElbMTMxNTAwXT1bQVtcIkdSLklDLkZGLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsxMzE1MDFdPVtBW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdXSxJWzEzMTUwMl09W0FbXCJHUi5JQy5GRi5CT1JERVIgUEFUUk9MXCJdXSxJWzEzMTUwM109W0FbXCJHUi5JQy5GRi5DVVNUT01TIFNFUlZJQ0VcIl1dLElbMTMxNTA0XT1bQVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdXSxJWzEzMTUwNV09W0FbXCJHUi5JQy5GRi5ERVBBUlRNRU5UIE9GIEpVU1RJQ0UgKERPSilcIl1dLElbMTMxNTA2XT1bQVtcIkdSLklDLkZFREVSQUwgQlVSRUFVIE9GIElOVkVTVElHQVRJT04gKEZCSSlcIl1dLElbMTMxNTA3XT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVsxMzE1MDhdPVtBW1wiR1IuSUMuRkYuUFJJU09OXCJdXSxJWzEzMTUwOV09W0FbXCJHUi5JQy5VTklURUQgU1RBVEVTIFNFQ1JFVCBTRVJWSUNFKFRSRUFTKSAoVVNTUylcIl1dLElbMTMxNTEwXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OIFNFQ1VSSVRZIEFHRU5DWSAoVFNBKVwiXV0sSVsxMzE1MTFdPVtBW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVsxMzE1MTJdPVtBW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXV0sSVsxMzE1MTNdPVtBW1wiU1QuSUMuSU5URVJOQUwgU0VDVVJJVFkgRk9SQ0VcIl1dLElbMTRlNF09W0FbXCJBQy5JQy5GSVJFIEVWRU5UXCJdXSxJWzE0MDEwMF09W0FbXCJBQy5JQy5GSVJFIE9SSUdJTlwiXV0sSVsxNDAyMDBdPVtBW1wiQUMuSUMuU01PS0VcIl1dLElbMTQwMzAwXT1bQVtcIkFDLklDLkhPVCBTUE9UXCJdXSxJWzE0MDQwMF09W0FbXCJBQy5JQy5OT04tUkVzSWRFTlRJQUwgRklSRVwiXV0sSVsxNDA1MDBdPVtBW1wiQUMuSUMuUkVzSWRFTlRJQUwgRklSRVwiXV0sSVsxNDA2MDBdPVtBW1wiQUMuSUMuU0NIT09MIEZJUkVcIl1dLElbMTQwNzAwXT1bQVtcIkFDLklDLlNQRUNJQUwgTkVFRFMgRklSRVwiXV0sSVsxNDA4MDBdPVtBW1wiQUMuSUMuV0lMRCBGSVJFXCJdXSxJWzE1ZTRdPVtdLElbMTUwMTAwXT1bQVtcIkFDLklDLkhBWkFSRE9VUyBNQVRFUklBTFMgSU5DSURFTlRcIl1dLElbMTUwMTAxXT1bQVtcIkFDLklDLkNIRU1JQ0FMIEFHRU5UXCJdXSxJWzE1MDEwMl09W0FbXCJBQy5JQy5DT1JST1NJVkUgTUFURVJJQUxcIl1dLElbMTUwMTAzXT1bQVtcIkFDLklDLkhBWkFSRE9VUyBXSEVOIFdFVFwiXV0sSVsxNTAxMDRdPVtBW1wiQUMuSUMuRVhQTE9TSVZFIE1BVEVSSUFMXCJdXSxJWzE1MDEwNV09W0FbXCJBQy5JQy5GTEFNTUFCTEUgR0FTXCJdXSxJWzE1MDEwNl09W0FbXCJBQy5JQy5GTEFNTUFCTEUgTElRVUlEXCJdXSxJWzE1MDEwN109W0FbXCJBQy5JQy5GTEFNTUFCTEUgU09MSURcIl1dLElbMTUwMTA4XT1bQVtcIkFDLklDLk5PTi1GTEFNTUFCTEUgR0FTXCJdXSxJWzE1MDEwOV09W0FbXCJBQy5JQy5PUkdBTklDIFBFUk9YSURFXCJdXSxJWzE1MDExMF09W0FbXCJBQy5JQy5PWElESVpFUlwiXV0sSVsxNTAxMTFdPVtBW1wiQUMuSUMuUkFESU9BQ1RJVkUgTUFURVJJQUxcIl1dLElbMTUwMTEyXT1bQVtcIkFDLklDLlNQT05UQU5FT1VTTFkgQ09NQlVTVElCTEUgTUFURVJJQUxcIl1dLElbMTUwMTEzXT1bQVtcIkFDLklDLlRPWElDIEdBU1wiXV0sSVsxNTAxMTRdPVtBW1wiQUMuSUMuVE9YSUMgSU5GRUNUSU9VUyBNQVRFUklBTFwiXV0sSVsxNTAxMTVdPVtBW1wiQUMuSUMuVU5FWFBMT0RFRCBPUkROQU5DRVwiXV0sSVsxNmU0XT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdXSxJWzE2MDEwMF09W0FbXCJTVC5JQy5ISUpBQ0tJTkcgKEFJUlBMQU5FKVwiXV0sSVsxNjAyMDBdPVtBW1wiU1QuSUMuSElKQUNLSU5HIChCT0FUKVwiXV0sSVsxNjAzMDBdPVtBW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXV0sSVsxNjA0MDBdPVtBW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl1dLElbMTYwNTAwXT1bQVtcIlNULklDLkVYUExPU0lPTlwiXSxzLl9zY2FsZSguNyxBW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl0pXSxJWzE3ZTRdPVtBW1wiU1QuSUMuTkFUVVJBTCBFVkVOVFwiXV0sSVsxNzAxMDBdPVtBW1wiU1QuSUMuR0VPTE9HSUNcIl1dLElbMTcwMTAxXT1bQVtcIkFDLklDLkFGVEVSU0hPQ0tcIl1dLElbMTcwMTAyXT1bQVtcIkFDLklDLkFWQUxBTkNIRVwiXV0sSVsxNzAxMDNdPVtBW1wiQUMuSUMuRUFSVEhRVUFLRSBFUElDRU5URVJcIl1dLElbMTcwMTA0XT1bQVtcIkFDLklDLkxBTkRTTElERVwiXV0sSVsxNzAxMDVdPVtBW1wiQUMuSUMuU1VCU0lERU5DRVwiXV0sSVsxNzAxMDZdPVtBW1wiQUMuSUMuVk9MQ0FOSUMgRVJVUFRJT05cIl1dLElbMTcwMTA3XT1bQVtcIkFDLklDLlZPTENBTklDIFRIUkVBVFwiXV0sSVsxNzAxMDhdPVtBW1wiQUMuSUMuQ0FWRSBFTlRSQU5DRVwiXV0sSVsxNzAyMDBdPVtBW1wiU1QuSUMuSFlEUk8tTUVURU9ST0xPR0lDQUxcIl1dLElbMTcwMjAxXT1bQVtcIkFDLklDLkRST1VHSFRcIl1dLElbMTcwMjAyXT1bQVtcIkFDLklDLkZMT09EXCJdXSxJWzE3MDIwM109W0FbXCJBQy5JQy5UU1VOQU1JXCJdXSxJWzE3MDMwMF09W0FbXCJTVC5JQy5JTkZFU1RBVElPTlwiXV0sSVsxNzAzMDFdPVtBW1wiQUMuSUMuQklSRFwiXV0sSVsxNzAzMDJdPVtBW1wiQUMuSUMuSU5TRUNUXCJdXSxJWzE3MDMwM109W0FbXCJBQy5JQy5NSUNST0JJQUxcIl1dLElbMTcwMzA0XT1bQVtcIkFDLklDLlJFUFRJTEVcIl1dLElbMTcwMzA1XT1bQVtcIkFDLklDLlJPREVOVFwiXV0sSVsxOGU0XT1bXSxJWzE4MDEwMF09W0FbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEFbXCJTVC5NMS5MRUFERVJcIl0sQVtcIlNULk0yLlJFTElHSU9VU1wiXV0sSVsxODAyMDBdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuU1BFQUtFUlwiXV0sdFtcIjAxXCJdPVtBW1wiU1QuTTEuQVNTQVNTSU5BVElPTlwiXV0sdFtcIjAyXCJdPVtBW1wiU1QuTTEuRVhFQ1VUSU9OIChXUk9OR0ZVTCBLSUxMSU5HKVwiXV0sdFtcIjAzXCJdPVtBW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSx0W1wiMDRcIl09W0FbXCJTVC5NMS5IT1VTRS1UTy1IT1VTRVwiXV0sdFtcIjA1XCJdPVtBW1wiU1QuTTEuS0lETkFQUElOR1wiXV0sdFtcIjA2XCJdPVtBW1wiU1QuTTEuTVVSREVSXCJdXSx0W1wiMDdcIl09W0FbXCJTVC5NMS5QSVJBQ1lcIl1dLHRbXCIwOFwiXT1bQVtcIlNULk0xLlJBUEVcIl1dLHRbXCIwOVwiXT1bQVtcIlNULk0xLldSSVRURU4gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdXSx0WzEwXT1bQVtcIlNULk0xLlBJUkFURVwiXV0sdFsxMV09W0FbXCJTVC5NMS5GQUxTRVwiXV0sdFsxMl09W0FbXCJTVC5NMS5GSU5EXCJdXSx0WzEzXT1bQVtcIlNULk0xLkZPVU5EIEFORCBDTEVBUkVEXCJdXSx0WzE0XT1bQVtcIlNULk0xLkhPQVggKERFQ09ZKVwiXV0sdFsxNV09W0FbXCJTVC5NMS5BVFRFTVBURURcIl1dLHRbMTZdPVtBW1wiU1QuTTEuQUNDSURFTlRcIl1dLHRbMTddPVtBW1wiU1QuTTEuSU5DSURFTlRcIl1dLHRbMThdPVtBW1wiU1QuTTEuVEhFRlRcIl1dLHRbMTldPVtBW1wiR1IuTTEuSElKQUNLRVJcIl1dLHRbMjBdPVtBW1wiR1IuTTEuQ1lCRVJTUEFDRVwiXV0sRVtcIjAxXCJdPVtBW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuTTIuU0VDVVJJVFkgRk9SQ0UgQVNTSVNUQU5DRVwiXV0pfX0sSUk9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOmYsaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCI1MFwiIT1lJiZcIjUxXCIhPWUmJlwiNTJcIiE9ZSYmXCI1M1wiIT1lJiZcIjU0XCIhPWV8fChJWzExZTRdPVtdLElbMTEwMTAwXT1bQVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdXSxJWzExMDIwMF09W0FbXCJTSS5JLkpBTU1FUiAvIEVMRUNUUk9OSUMgQ09VTlRFUi1NRUFTVVJFU1wiXV0sSVsxMTAzMDBdPVtBW1wiU0kuSUMuUkFEQVJcIl1dLHRbXCIwMVwiXT1bQVtcIlNJLk0xLkFOVEktQUlSQ1JBRlQgRklSRSBDT05UUk9MXCJdXSx0W1wiMDJcIl09W0FbXCJTSS5NMS5BSVJCT1JORSBTRUFSQ0ggQU5EIEJPTUJJTkdcIl1dLHRbXCIwM1wiXT1bQVtcIlNJLk0xLkFJUkJPUk5FIElOVEVSQ0VQVFwiXV0sdFtcIjA0XCJdPVtBW1wiU0kuTTEuQUxUSU1FVEVSXCJdXSx0W1wiMDVcIl09W0FbXCJTSS5NMS5BSVJCT1JORSBSRUNPTk5BSVNTQU5DRSBBTkQgTUFQUElOR1wiXV0sdFtcIjA2XCJdPVtBW1wiU0kuTTEuQUlSIFRSQUZGSUMgQ09OVFJPTFwiXV0sdFtcIjA3XCJdPVtBW1wiU0kuTTEuQkVBQ09OIFRSQU5TUE9OREVSIChOT1QgSUZGKVwiXV0sdFtcIjA4XCJdPVtBW1wiU0kuTTEuQkFUVExFRklFTEQgU1VSVkVJTExBTkNFXCJdXSx0W1wiMDlcIl09W0FbXCJTSS5NMS5DT05UUk9MTEVEIEFQUFJPQUNIXCJdXSx0WzEwXT1bQVtcIlNJLk0xLkNPTlRST0xMRUQgSU5URVJDRVBUXCJdXSx0WzExXT1bQVtcIlNJLk0xLkNFTExVTEFSL01PQklMRVwiXV0sdFsxMl09W0FbXCJTSS5NMS5DT0FTVEFMIFNVUlZFSUxMQU5DRVwiXV0sdFsxM109W0FbXCJTSS5NMS5ERUNPWS9NSU1JQ1wiXV0sdFsxNF09W0FbXCJTSS5NMS5EQVRBIFRSQU5TTUlTU0lPTlwiXV0sdFsxNV09W0FbXCJTSS5NMS5FQVJUSCBTVVJWRUlMTEFOQ0VcIl1dLHRbMTZdPVtBW1wiU0kuTTEuRUFSTFkgV0FSTklOR1wiXV0sdFsxN109W0FbXCJTSS5NMS5GSVJFIENPTlRST0xcIl1dLHRbMThdPVtBW1wiU0kuTTEuR1JPVU5EIE1BUFBJTkdcIl1dLHRbMTldPVtBW1wiU0kuTTEuSEVJR0hUIEZJTkRJTkdcIl1dLHRbMjBdPVtBW1wiU0kuTTEuSEFSQk9SIFNVUlZFSUxMQU5DRVwiXV0sdFsyMV09W0FbXCJTSS5NMS5JREVOVElGSUNBVElPTiwgRlJJRU5EIE9SIEZPRSAoSU5URVJST0dBVE9SKVwiXV0sdFsyMl09W0FbXCJTSS5NMS5JTlNUUlVNRU5UIExBTkRJTkcgU1lTVEVNXCJdXSx0WzIzXT1bQVtcIlNJLk0xLklPTk9TUEhFUklDIFNPVU5ESU5HXCJdXSx0WzI0XT1bQVtcIlNJLk0xLklERU5USUZJQ0FUSU9OLCBGUklFTkQgT1IgRk9FIChUUkFOU1BPTkRFUilcIl1dLHRbMjVdPVtBW1wiU0kuTTEuQkFSUkFHRSBKQU1NRVJcIl1dLHRbMjZdPVtBW1wiU0kuTTEuQ0xJQ0sgSkFNTUVSXCJdXSx0WzI3XT1bQVtcIlNJLk0xLkRFQ0VQVElWRSBKQU1NRVJcIl1dLHRbMjhdPVtBW1wiU0kuTTEuRlJFUVVFTkNZIFNXRVBUIEpBTU1FUlwiXV0sdFsyOV09W0FbXCJTSS5NMS5KQU1NRVIgKEdFTkVSQUwpXCJdXSx0WzMwXT1bQVtcIlNJLk0xLk5PSVNFIEpBTU1FUlwiXV0sdFszMV09W0FbXCJTSS5NMS5QVUxTRUQgSkFNTUVSXCJdXSx0WzMyXT1bQVtcIlNJLk0xLlJFUEVBVEVSIEpBTU1FUlwiXV0sdFszM109W0FbXCJTSS5NMS5TUE9UIE5PSVNFIEpBTU1FUlwiXV0sdFszNF09W0FbXCJTSS5NMS5UUkFOU1BPTkRFUiBKQU1NRVJcIl1dLHRbMzVdPVtBW1wiU0kuTTEuTUlTU0lMRSBBQ1FVSVNJVElPTlwiXV0sdFszNl09W0FbXCJTSS5NMS5NSVNTSUxFIENPTlRST0xcIl1dLHRbMzddPVtBW1wiU0kuTTEuTUlTU0lMRSBET1dOTElOS1wiXV0sdFszOF09W0FbXCJTSS5NMS5NRVRFT1JPTE9HSUNBTFwiXV0sdFszOV09W0FbXCJTSS5NMS5NVUxUSS1GVU5DVElPTlwiXV0sdFs0MF09W0FbXCJTSS5NMS5NSVNTSUxFIEdVSURBTkNFXCJdXSx0WzQxXT1bQVtcIlNJLk0xLk1JU1NJTEUgSE9NSU5HXCJdXSx0WzQyXT1bQVtcIlNJLk0xLk1JU1NJTEUgVFJBQ0tJTkdcIl1dLHRbNDNdPVtBW1wiU0kuTTEuTkFWSUdBVElPTkFML0dFTkVSQUxcIl1dLHRbNDRdPVtBW1wiU0kuTTEuTkFWSUdBVElPTkFML0RJU1RBTkNFIE1FQVNVUklORyBFUVVJUE1FTlRcIl1dLHRbNDVdPVtBW1wiU0kuTTEuTkFWSUdBVElPTi9URVJSQUlOIEZPTExPV0lOR1wiXV0sdFs0Nl09W0FbXCJTSS5NMS5OQVZJR0FUSU9OQUwvV0VBVEhFUiBBVk9JREFOQ0VcIl1dLHRbNDddPVtBW1wiU0kuTTEuT01OSS1MSU5FIE9GIFNJR0hUIChMT1MpXCJdXSx0WzQ4XT1bQVtcIlNJLk0xLlBST1hJTUlUWSBVU0VcIl1dLHRbNDldPVtBW1wiU0kuTTEuUE9JTlQtVE8tUE9JTlQgTElORSBPRiBTSUdIVCAoTE9TKVwiXV0sdFs1MF09W0FbXCJTSS5NMS5JTlNUUlVNRU5UQVRJT05cIl1dLHRbNTFdPVtBW1wiU0kuTTEuUkFOR0UgT05MWVwiXV0sdFs1Ml09W0FbXCJTSS5NMS5TT05PQlVPWVwiXV0sdFs1M109W0FbXCJTSS5NMS5TQVRFTExJVEUgRE9XTkxJTktcIl1dLHRbNTRdPVtBW1wiU0kuTTEuU1BBQ0VcIl1dLHRbNTVdPVtBW1wiU0kuTTEuU1VSRkFDRSBTRUFSQ0hcIl1dLHRbNTZdPVtBW1wiU0kuTTEuU0hFTEwgVFJBQ0tJTkdcIl1dLHRbNTddPVtBW1wiU0kuTTEuU0FURUxMSVRFIFVQTElOS1wiXV0sdFs1OF09W0FbXCJTSS5NMS5UQVJHRVQgQUNRVUlTSVRJT05cIl1dLHRbNTldPVtBW1wiU0kuTTEuVEFSR0VUIElMTFVNSU5BVElPTlwiXV0sdFs2MF09W0FbXCJTSS5NMS5UUk9QT1NQSEVSSUMgU0NBVFRFUlwiXV0sdFs2MV09W0FbXCJTSS5NMS5UQVJHRVQgVFJBQ0tJTkdcIl1dLHRbNjJdPVtBW1wiU0kuTTEuVU5LTk9XTlwiXV0sdFs2M109W0FbXCJTSS5NMS5WSURFTyBSRU1PVElOR1wiXV0sdFs2NF09W0FbXCJTSS5NMS5FWFBFUklNRU5UQUxcIl1dLHRbNjVdPVtBW1wiU0kuTTEuQ1lCRVJcIl1dLEVbXCIwMVwiXT1bQVtcIlNJLk0yLkNZQkVSXCJdXSl9fTt2YXIgdEk9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOlYsbGFiZWxzOmZ1bmN0aW9uKEkpe3ZhciB0PXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MzAsZm9udHNpemU6MzB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LEU9e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxSPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19O0lbMTMwMTAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxhZGRpdGlvbmFsSW5mb3JtYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjMwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbMTMwMjAwXT10LElbMTMwMzAwXT10LElbMTMwNDAwXT17fSxJWzEzMDUwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJWzEzMDYwMF09e30sSVsxMzA3MDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVsxMzA4MDBdPXQsSVsxMzA5MDBdPXQsSVsxMzEwMDFdPUUsSVsxMzEwMDJdPUUsSVsxMzEwMDNdPUUsSVsxMzExMDBdPXQsSVsxMzEyMDBdPXQsSVsxMzEzMDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjMwLGZvbnRzaXplOjQwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJWzEzMTMwMV09e30sSVsxMzE0MDBdPXQsSVsxMzE1MDBdPXQsSVsxMzE2MDBdPXQsSVsxMzE3MDBdPXt9LElbMTMxODAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyNSxmb250c2l6ZTo3MH19LElbMTMxOTAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE4MCx5OjExNSxmb250c2l6ZTo0MH19LElbMTMyZTNdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6NDB9fSxJWzEzMjEwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMDAseToxMTAsZm9udHNpemU6MzUsZmlsbDpcInJnYigyNTUsMjU1LDI1NSlcIixmb250d2VpZ2h0OlwiYm9sZFwifX0sSVsxNjAxMDBdPXt9LElbMTYwMjAwXT17fSxJWzE2MDIwMV09e30sSVsxNjAyMDJdPXt9LElbMTYwMjAzXT17fSxJWzE2MDIwNF09e30sSVsxNjAyMDVdPXt9LElbMTYwMzAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjExMCx5OjkwLGZvbnRzaXplOjQwfX0sSVsxNjA0MDBdPUUsSVsxOGU0XT17fSxJWzE4MDEwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTMwLGZvbnRzaXplOjM1fX0sSVsxODAyMDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzMCxmb250c2l6ZTozNX19LElbMTgwMzAwXT17fSxJWzE4MDQwMF09e30sSVsxODA1MDBdPXt9LElbMTgwNjAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjcwLGZvbnRzaXplOjM1fX0sSVsxODA3MDBdPXt9LElbMTgwODAwXT17fSxJWzE4MDkwMF09e30sSVsxODFlM109e30sSVsxODExMDBdPXt9LElbMTgxMjAwXT17fSxJWzE4MTMwMF09e30sSVsxODE0MDBdPXt9LElbMTgxNTAwXT17fSxJWzE4MTYwMF09e30sSVsxODE3MDBdPXt9LElbMTgxODAwXT17fSxJWzE4MTkwMF09e30sSVsxODJlM109e30sSVsxODIxMDBdPXt9LElbMTgyMjAwXT17fSxJWzE4MjMwMF09e30sSVsxODI0MDBdPXt9LElbMTgyNTAwXT17fSxJWzIwMDQwMF09e30sSVsyMDA1MDBdPXt9LElbMjAwNjAwXT17fSxJWzIwMDcwMF09e30sSVsyMTAxMDBdPXt9LElbMjEwMjAwXT17fSxJWzIxMDMwMF09e30sSVsyMTA0MDBdPXt9LElbMjEwNTAwXT17fSxJWzIxMDYwMF09e2FsdGl0dWRlRGVwdGg6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjcwLGZvbnRzaXplOjM1fX0sSVsyMTA3MDBdPXt9LElbMjEwODAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTozNX19LElbMjEwOTAwXT17fSxJWzIxMWUzXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODAsZm9udHNpemU6MzV9fSxJWzIxMTEwMF09e30sSVsyMTEyMDBdPXt9LElbMjExMzAwXT17fSxJWzIxMTQwMF09e30sSVsyMTE1MDBdPXt9LElbMjExNjAwXT17fSxJWzIxMTcwMF09e30sSVsyMTE4MDBdPXt9LElbMjExOTAwXT17fSxJWzIxMmUzXT17fSxJWzIxMjEwMF09e30sSVsyMTIyMDBdPXt9LElbMjEyMzAwXT17fSxJWzIxMjQwMF09e30sSVsyMTI1MDBdPXt9LElbMjEyNjAwXT17fSxJWzIxMjcwMF09e30sSVsyMTI4MDBdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDV9fSxJWzIxMjkwMF09e30sSVsyMTI5MDFdPXt9LElbMjEyOTAyXT17fSxJWzIxMjkwM109e30sSVsyMTI5MDRdPXt9LElbMjEzZTNdPXt9LElbMjEzMTAwXT17fSxJWzIxMzIwMF09e30sSVsyMTMzMDBdPXt9LElbMjEzNDAwXT17fSxJWzIxMzUwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo3MCxmb250c2l6ZTozNX0sYWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUwMV09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo3MCxmb250c2l6ZTozNX0sYWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUwMl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDNdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTA0XT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjcwLGZvbnRzaXplOjM1fSxhZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTA1XT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUwNl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDddPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6NzAsZm9udHNpemU6MzV9LGFkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDhdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6NzAsZm9udHNpemU6MzV9LGFkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDldPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTEwXT17fSxJWzIxMzUxMV09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MTJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTEzXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUxNF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MTVdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6NzAsZm9udHNpemU6MzV9LGFkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM2MDBdPXt9LElbMjEzNzAwXT17fSxJWzIxMzgwMF09e30sSVsyMTM5MDBdPXt9LElbMjE0ZTNdPXt9LElbMjE0MTAwXT17fSxJWzIxNDIwMF09e30sSVsyMTQzMDBdPXt9LElbMjE0NDAwXT17fSxJWzIxNDUwMF09e30sSVsyMTQ2MDBdPXt9LElbMjE0NzAwXT17fSxJWzIxNDgwMF09e30sSVsyMTQ5MDBdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE4MCx5Ojc1LGZvbnRzaXplOjMwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseToxMDAsZm9udHNpemU6MzB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseToxMjUsZm9udHNpemU6MzB9fSxJWzIxNWUzXT17fSxJWzIxNTEwMF09e30sSVsyMTUyMDBdPXt9LElbMjE1MzAwXT17fSxJWzIxNTQwMF09e30sSVsyMTU1MDBdPXt9LElbMjE1NjAwXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseTo3NSxmb250c2l6ZTozMH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTgwLHk6MTAwLGZvbnRzaXplOjMwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTgwLHk6MTI1LGZvbnRzaXplOjMwfX0sSVsyMTU3MDBdPXt9LElbMjE1ODAwXT17fSxJWzIxNTkwMF09e30sSVsyMTZlM109e30sSVsyMTYxMDBdPXt9LElbMjE2MjAwXT17fSxJWzIxNjMwMF09e30sSVsyMTY0MDBdPXt9LElbMjE2NTAwXT17fSxJWzIxNjYwMF09e30sSVsyMTY3MDBdPXt9LElbMjE2ODAwXT17fSxJWzIxNjkwMF09e30sSVsyMTdlM109e30sSVsyMTcxMDBdPXt9LElbMjE3MjAwXT17fSxJWzIxNzMwMF09e30sSVsyMTc0MDBdPXt9LElbMjE3NTAwXT17fSxJWzIxNzYwMF09e30sSVsyMTc3MDBdPXt9LElbMjE3ODAwXT17fSxJWzIxNzkwMF09e30sSVsyMThlM109e30sSVsyMTgxMDBdPXt9LElbMjE4MjAwXT17fSxJWzIxODMwMF09e30sSVsyMTg1MDBdPXt9LElbMjE4NjAwXT17fSxJWzIxODcwMF09e30sSVsyMTg4MDBdPXt9LElbMjE4OTAwXT17fSxJWzIxOWUzXT17fSxJWzIxOTEwMF09e30sSVsyMTkyMDBdPXt9LElbMjQwNjAxXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseToxNDUsZm9udHNpemU6NDB9LGFsdGl0dWRlRGVwdGg6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo4MCx5OjE0NSxmb250c2l6ZTo0MH0sdGFyZ2V0TnVtYmVyOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTo0MH19LElbMjQwNjAyXT17dGFyZ2V0TnVtYmVyOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTo0MH19LElbMjQwNjAzXT17fSxJWzI0MDkwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxOTUseToxMTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn19LElbMjUwMTAwXT1FLElbMjUwMjAwXT1FLElbMjUwMzAwXT1FLElbMjUwNDAwXT1FLElbMjUwNTAwXT1FLElbMjUwNjAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE4MCx5OjgwLGZvbnRzaXplOjM1fX0sSVsyNzA2MDFdPXt9LElbMjcwNjAyXT17fSxJWzI3MDYwM109e30sSVsyNzA3MDFdPXt9LElbMjgwMTAwXT17fSxJWzI4MDIwMF09e30sSVsyODAyMDFdPXt9LElbMjgwMzAwXT17fSxJWzI4MDQwMF09e30sSVsyODA1MDBdPXt9LElbMjgwNjAwXT17fSxJWzI4MDcwMF09e30sSVsyODA4MDBdPXQsSVsyODA5MDBdPXt9LElbMjgxZTNdPXt9LElbMjgxMTAwXT17fSxJWzI4MTIwMF09e30sSVsyODEzMDBdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjMwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjMwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTo5MCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6OTAsZm9udHNpemU6MzV9fSxJWzI4MTMwMV09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6MzAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6MzAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjkwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTo5MCxmb250c2l6ZTozNX19LElbMjgxNDAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTozMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTozMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6OTAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjkwLGZvbnRzaXplOjM1fX0sSVsyODE1MDBdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjMwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjMwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTo5MCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6OTAsZm9udHNpemU6MzV9fSxJWzI4MTYwMF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6MzAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6MzAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjkwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTo5MCxmb250c2l6ZTozNX19LElbMjgxNzAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTozMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTozMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6OTAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjkwLGZvbnRzaXplOjM1fX0sSVsyODE4MDBdPXQsSVsyODE4MDFdPXQsSVsyODE4MDJdPXQsSVsyODE4MDNdPXQsSVsyODE4MDRdPXQsSVsyODE4MDVdPXQsSVsyODE4MDZdPXQsSVsyODE4MDddPXQsSVsyODE4MDhdPXQsSVsyODE4MDldPXQsSVsyODE5MDFdPXt9LElbMjgxOTAyXT17fSxJWzI4MTkwM109e30sSVsyODIwMDFdPXthbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo2MCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVsyODIwMDJdPXthbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTUseTo2MCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVszMjAxMDBdPXt9LElbMzIwMTAxXT10LElbMzIwMTAyXT10LElbMzIwMTAzXT10LElbMzIwMTA0XT10LElbMzIwMjAwXT10LElbMzIwMzAwXT10LElbMzIwNDAwXT10LElbMzIwNTAwXT10LElbMzIwNjAwXT10LElbMzIwNzAwXT10LElbMzIwODAwXT10LElbMzIwOTAwXT10LElbMzIxZTNdPXQsSVszMjExMDBdPXQsSVszMjEyMDBdPXQsSVszMjEzMDBdPXQsSVszMjE0MDBdPXQsSVszMjE1MDBdPXQsSVszMjE2MDBdPXQsSVszMjE3MDBdPVIsSVszMjE3MDFdPVIsSVszMjE3MDJdPVIsSVszMjE3MDNdPVIsSVszMjE3MDRdPVIsSVszMjE3MDVdPVIsSVszMjE3MDZdPXt9LElbMzIxNzA3XT1FLElbMzIxNzA4XT1FLElbMzIxNzA5XT1FLElbMzIxNzEwXT1FLElbMzIxNzExXT1FLElbMzIxNzEyXT1FLElbMzIxNzEzXT1FLElbMzIxNzE0XT1FLElbMzIxNzE1XT1FLElbMzIxNzE2XT1FLElbMzIxODAwXT1SLElbMzQwMzAwXT17fSxJWzM0MDQwMF09e30sSVszNDA5MDBdPXt9LElbMzQxNDAwXT17fSxJWzM0MTYwMF09e30sSVszNDI4MDBdPXt9LElbMzUwMTAxXT17fSxJWzM1MDEwMl09e30sSVszNTAxMDNdPXt9LElbMzUwMjAxXT17fSxJWzM1MDIwMl09e30sSVszNTAyMDNdPXt9fSxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjI1XCI9PWUmJihJWzEzMDEwMF09QVtcIlRQLkFDVElPTiBQT0lOVFwiXSxSWzEzMDEwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMwMjAwXT1BW1wiVFAuQUNUSU9OIEFNTkVTVFkgUE9JTlRcIl0sUlsxMzAyMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMDMwMF09QVtcIlRQLkFDVElPTiBDSEVDSyBQT0lOVFwiXSxSWzEzMDMwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMwNDAwXT1BW1wiVFAuQ0VOVFJFIE9GIE1BSU4gRUZGT1JUXCJdLFJbMTMwNDAwXT17eDE6MjUseDI6MTc1LHkxOjY1LHkyOjEzNX0sSVsxMzA1MDBdPUFbXCJUUC5DT05UQUNUIFBPSU5UXCJdLFJbMTMwNTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsxMzA2MDBdPUFbXCJUUC5DT09SRElOQVRJT04gUE9JTlRcIl0sUlsxMzA2MDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzEzMDcwMF09QVtcIlRQLkRFQ0lTSU9OIFBPSU5UXCJdLFJbMTMwNzAwXT17eDE6MzAseDI6MTcwLHkxOjI1LHkyOjE2MH0sSVsxMzA4MDBdPUFbXCJUUC5ESVNUUkVTUyBDQUxMXCJdLFJbMTMwODAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzA5MDBdPUFbXCJUUC5FTlRSWSBDT05UUk9MIFBPSU5UXCJdLFJbMTMwOTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzEwMDFdPUFbXCJUUC5GTFktVE8tUE9JTlQgKFNPTk9CVU9ZKVwiXSxSWzEzMTAwMV09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxMDAyXT1BW1wiVFAuRkxZLVRPLVBPSU5UIChXRUFQT04pXCJdLFJbMTMxMDAyXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzEwMDNdPUFbXCJUUC5GTFktVE8tUE9JTlQgKE5PUk1BTClcIl0sUlsxMzEwMDNdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMTEwMF09QVtcIlRQLkFDVElPTiBMSU5LVVAgUE9JTlRcIl0sUlsxMzExMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMTIwMF09QVtcIlRQLkFDVElPTiBQQVNTQUdFIFBPSU5UXCJdLFJbMTMxMjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzEzMDBdPUFbXCJUUC5QT0lOVCBPRiBJTlRFUkVTVFwiXSxSWzEzMTMwMF09e3gxOjUwLHgyOjE1MCx5MTotMjV9LElbMTMxMzAxXT1BW1wiUE9JTlQgT0YgSU5URVJFU1Qg4oCTIExBVU5DSCBFVkVOVFwiXSxSWzEzMTMwMV09e3gxOjUwLHgyOjE1MCx5MTotMjV9LElbMTMxNDAwXT1BW1wiVFAuQUNUSU9OIFJBTExZIFBPSU5UXCJdLFJbMTMxNDAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzE1MDBdPUFbXCJUUC5BQ1RJT04gUkVMRUFTRSBQT0lOVFwiXSxSWzEzMTUwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxNjAwXT1BW1wiVFAuQUNUSU9OIFNUQVJUIFBPSU5UXCJdLFJbMTMxNjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzE3MDBdPUFbXCJUUC5TUEVDSUFMIFBPSU5UXCJdLFJbMTMxNzAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsxMzE4MDBdPUFbXCJUUC5XQVlQT0lOVFwiXSxSWzEzMTgwMF09e3gxOjYwLHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbMTMxOTAwXT1BW1wiVFAuQUlSRklFTERcIl0sUlsxMzE5MDBdPXt4MTozNSx4MjoxNjUseTE6NjAseTI6MTI1fSxJWzEzMmUzXT1BW1wiVFAuVEFSR0VUIEhBTkRPVkVSXCJdLFJbMTMyZTNdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzEzMjEwMF09QVtcIlRQLktFWSBURVJSQUlOXCJdLElbMTYwMTAwXT1BW1wiVFAuT0JTRVJWQVRJT04gUE9TVC9PVVRQT1NUXCJdLFJbMTYwMTAwXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAyMDBdPUFbXCJUUC5PQlNFUlZBVElPTiBQT1NUL09VVFBPU1RcIl0sUlsxNjAyMDBdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJWzE2MDIwMV09QVtcIlRQLk9CU0VSVkFUSU9OIFBPU1QvUkVDT05OQUlTU0FOQ0VcIl0sUlsxNjAyMDFdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJWzE2MDIwMl09QVtcIlRQLkZPUldBUkQgT0JTRVJWRVIgUE9TSVRJT05cIl0sUlsxNjAyMDJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJWzE2MDIwM109QVtcIlRQLkNCUk4gT0JTRVJWQVRJT04gUE9TVFwiXSxSWzE2MDIwM109e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbMTYwMjA0XT1BW1wiVFAuU0VOU09SIE9VVFBPU1RcIl0sUlsxNjAyMDRdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJWzE2MDIwNV09QVtcIlRQLkNPTUJBVCBPVVRQT1NUXCJdLFJbMTYwMjA1XT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAzMDBdPUFbXCJUUC5UQVJHRVQgUkVGRVJFTkNFXCJdLElbMTYwNDAwXT1BW1wiVFAuUE9JTlQgT0YgREVQQVJUVVJFXCJdLFJbMTYwNDAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxOGU0XT1BW1wiVFAuQUlSIENPTlRST0wgUE9JTlRcIl0sUlsxOGU0XT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODAxMDBdPUFbXCJUUC5BSVIgQ09OVFJPTCBQT0lOVCAoQUNQKVwiXSxSWzE4MDEwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMTgwMjAwXT1BW1wiVFAuQ09NTVVOSUNBVElPTlMgQ0hFQ0tQT0lOVFwiXSxSWzE4MDIwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMTgwMzAwXT1BW1wiVFAuRE9XTkVEIEFJUkNSRVcgUElDS1VQIFBPSU5UXCJdLFJbMTgwMzAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxODA0MDBdPUFbXCJUUC5QVUxMLVVQIFBPSU5UXCJdLFJbMTgwNDAwXT17eDE6NTAseDI6MjQwLHkxOjUwLHkyOjE1MH0sSVsxODA1MDBdPUFbXCJUUC5BSVIgQ09OVFJPTCBSRU5ERVpWT1VTXCJdLFJbMTgwNTAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODA2MDBdPUFbXCJUUC5UQUNBTlwiXSxSWzE4MDYwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgwNzAwXT1BW1wiVFAuQ0FQIFNUQVRJT05cIl0sUlsxODA3MDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MDgwMF09QVtcIlRQLkFFVyBTVEFUSU9OXCJdLFJbMTgwODAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODA5MDBdPUFbXCJUUC5GSVhFRCBXSU5HXCJdLElbMTgxZTNdPUFbXCJUUC5TVFJJS0UgSVBcIl0sUlsxODFlM109e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgxMTAwXT1BW1wiVFAuUkVQTEVOSVNITUVOVCBTVEFUSU9OXCJdLFJbMTgxMTAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODEyMDBdPUFbXCJUUC5UQU5LSU5HXCJdLFJbMTgxMjAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODEzMDBdPUFbXCJUUC5TVUNBUCAtIFJPVEFSWSBXSU5HXCJdLFJbMTgxMzAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODE0MDBdPUFbXCJUUC5TVUNBUCAtIEZJWEVEIFdJTkdcIl0sUlsxODE0MDBdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJWzE4MTUwMF09QVtcIlRQLlNVQ0FQIC0gUk9UQVJZIFdJTkdcIl0sUlsxODE1MDBdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJWzE4MTYwMF09QVtcIlRQLk1JVyAtIEZJWEVEIFdJTkdcIl0sUlsxODE2MDBdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJWzE4MTcwMF09QVtcIlRQLk1JVyAtIFJPVEFSWSBXSU5HXCJdLFJbMTgxNzAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODE4MDBdPUFbXCJUUC5UT01DQVRcIl0sUlsxODE4MDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MTkwMF09QVtcIlRQLlJFU0NVRVwiXSxSWzE4MTkwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgyZTNdPUFbXCJUUC5VTk1BTk5FRCBBRVJJQUwgU1lTVEVNXCJdLFJbMTgyZTNdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MjEwMF09QVtcIlRQLlZUVUFcIl0sUlsxODIxMDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MjIwMF09QVtcIlRQLk9SQklUXCJdLFJbMTgyMjAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODIzMDBdPUFbXCJUUC5PUkJJVCAtIEZJR1VSRSBFSUdIVFwiXSxSWzE4MjMwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgyNDAwXT1BW1wiVFAuT1JCSVQgLSBSQUNFIFRSQUNLXCJdLFJbMTgyNDAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODI1MDBdPUFbXCJUUC5PUkJJVCAtIFJBTkRPTSwgQ0xPU0VEXCJdLFJbMTgyNTAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsyMDA0MDBdPUFbXCJUUC5TSElQIEFSRUEgT0YgSU5URVJFU1QgKEFFR0lTIE9OTFkpXCJdLElbMjAwNTAwXT1BW1wiVFAuQUNUSVZFIE1BTk9FVVZSRSBBUkVBIChBRUdJUyBPTkxZKVwiXSxSWzIwMDUwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjAwNjAwXT1BLlRPRE8sSVsyMDA3MDBdPUEuVE9ETyxJWzIxMDEwMF09QVtcIlRQLlBMQU4gU0hJUFwiXSxSWzIxMDEwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEwMjAwXT1BW1wiVFAuQUlNIFBPSU5UXCJdLFJbMjEwMjAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTAzMDBdPUFbXCJUUC5ERUZFTkRFRCBBU1NFVFwiXSxJWzIxMDQwMF09QVtcIlRQLkRST1AgUE9JTlRcIl0sUlsyMTA0MDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTIwfSxJWzIxMDUwMF09QVtcIlRQLkVOVFJZIFBPSU5UXCJdLFJbMjEwNTAwXT17eDE6NTAseDI6MTUwLHkxOjUwfSxJWzIxMDYwMF09QVtcIlRQLkFJUiBERVRPTkFUSU9OXCJdLElbMjEwNzAwXT1BW1wiVFAuR1JPVU5EIFpFUk9cIl0sUlsyMTA3MDBdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbMjEwODAwXT1BW1wiVFAuSU1QQUNUIFBPSU5UXCJdLFJbMjEwODAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTA5MDBdPUFbXCJUUC5QUkVESUNURUQgSU1QQUNUIFBPSU5UXCJdLFJbMjEwOTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTFlM109QVtcIlRQLkxBVU5DSEVEIFRPUlBFRE8gKEFFR0lTIE9OTFkpXCJdLFJbMjExZTNdPXt4MTo1MCx4MjoxNTAseTE6OTAseTI6MTEwfSxJWzIxMTEwMF09QVtcIlRQLk1TTCBERVRFQ1QgUE9JTlRcIl0sUlsyMTExMDBdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbMjExMjAwXT1BW1wiVFAuQUNPVVNUSUMgQ09VTlRFUiBNRUFTVVJFIChERUNPWSlcIl0sUlsyMTEyMDBdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbMjExMzAwXT1BW1wiVFAuRUxFQ1RST05JQyBDT1VOVEVSIE1FQVNVUkVTIChFQ00pIERFQ09ZXCJdLFJbMjExMzAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTE0MDBdPUFbXCJUUC5CUklFRiBDT05UQUNUXCJdLFJbMjExNDAwXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJWzIxMTUwMF09QVtcIlRQLkRBVFVNXCJdLFJbMjExNTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTE2MDBdPUFbXCJUUC5CVCBCT1VZIERST1BcIl0sUlsyMTE2MDBdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTYwfSxJWzIxMTcwMF09QVtcIlRQLlJFUE9SVEVEIEJPVFRPTUVEIFNVQlwiXSxJWzIxMTgwMF09QVtcIlRQLk1PVklORyBIQVZFTlwiXSxSWzIxMTgwMF09e3gxOjQwLHgyOjE2MCx5MTo1MCx5MjoxNTB9LElbMjExOTAwXT1BW1wiVFAuU0NSRUVOIENFTlRSRVwiXSxJWzIxMmUzXT1BW1wiVFAuTE9TVCBDT05UQUNUXCJdLFJbMjEyZTNdPXt4MTo1MCx4MjoxNTAseTE6MCx5MjoxMDB9LElbMjEyMTAwXT1BW1wiVFAuU0lOS0VSXCJdLFJbMjEyMTAwXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJWzIxMjIwMF09QVtcIlRQLlRSSUFMIFRSQUNLXCJdLFJbMjEyMjAwXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJWzIxMjMwMF09QVtcIlRQLkZJWCBBQ09VU1RJQ1wiXSxJWzIxMjQwMF09QVtcIlRQLkZJWCBFTEVDVFJPLU1BR05FVElDXCJdLElbMjEyNTAwXT1BW1wiVFAuRUxFQ1RSTyBNQUdORVRJQyAtIE1BR05FVElDIEFOT01BTFkgREVURUNUSU9OIChNQUQpXCJdLFJbMjEyNTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE4MH0sSVsyMTI2MDBdPUFbXCJUUC5GSVggRUxFQ1RSTy1PUFRJQ0FMXCJdLElbMjEyNzAwXT1BW1wiVFAuVEFSR0VUIFJFRkVSRU5DRVwiXSxJWzIxMjgwMF09QVtcIlRQLkhBUkJPUlwiXSxSWzIxMjgwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEyOTAwXT1BW1wiVFAuSEFSQk9SXCJdLFJbMjEyOTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTI5MDFdPUFbXCJUUC5IQVJCT1IgUE9JTlQgQVwiXSxSWzIxMjkwMV09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEyOTAyXT1BW1wiVFAuSEFSQk9SIFBPSU5UIFFcIl0sUlsyMTI5MDJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMjkwM109QVtcIlRQLkhBUkJPUiBQT0lOVCBYXCJdLFJbMjEyOTAzXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTI5MDRdPUFbXCJUUC5IQVJCT1IgUE9JTlQgWVwiXSxSWzIxMjkwNF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEzZTNdPUFbXCJUUC5ESVAgUE9TSVRJT05cIl0sUlsyMTNlM109e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEzMTAwXT1BW1wiVFAuU0VBUkNIXCJdLFJbMjEzMTAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTMyMDBdPUFbXCJUUC5TRUFSQ0ggQVJFQVwiXSxSWzIxMzIwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEzMzAwXT1BW1wiVFAuU0VBUkNIIENFTlRFUlwiXSxSWzIxMzMwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEzNDAwXT1BW1wiVFAuTkFWSUdBVElPTkFMIFJFRkVSRU5DRVwiXSxJWzIxMzUwMF09QVtcIlRQLlNPTk9CVU9ZXCJdLFJbMjEzNTAwXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTAxXT1BW1wiVFAuU09OT0JVT1kgQU5NXCJdLFJbMjEzNTAxXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTAyXT1BW1wiVFAuU09OT0JVT1kgQVRBQ1wiXSxSWzIxMzUwMl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwM109QVtcIlRQLlNPTk9CVU9ZIEJBUlJBXCJdLFJbMjEzNTAzXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTA0XT1BW1wiVFAuU09OT0JVT1kgQkFUSFlUSEVSTU9HUkFQSCBUUkFOU01JVFRJTkcgU09OT0JVT1kgKEJUKVwiXSxSWzIxMzUwNF09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwNV09QVtcIlRQLlNPTk9CVU9ZIENPTU1BTkQgQUNUSVZFIE1VTFRJQkVBTSBTT05PQlVPWSAoQ0FNQlMpXCJdLFJbMjEzNTA1XT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTA2XT1BW1wiVFAuU09OT0JVT1kgQ0FTU1wiXSxSWzIxMzUwNl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwN109QVtcIlRQLlNPTk9CVU9ZIERJRkFSXCJdLFJbMjEzNTA3XT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTA4XT1BW1wiVFAuU09OT0JVT1kgRElDQVNTXCJdLFJbMjEzNTA4XT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTA5XT1BW1wiVFAuU09OT0JVT1kgRVhQRU5EQUJMRSBSRUxJQUJMRSBBQ09VU1RJQyBQQVRIIFNPTk9CVU9ZIChFUkFQUylcIl0sUlsyMTM1MDldPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MTBdPUFbXCJUUC5TT05PQlVPWSBFWFBJUkVEXCJdLFJbMjEzNTEwXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTExXT1BW1wiVFAuU09OT0JVT1kgS0lOR1BJTlwiXSxSWzIxMzUxMV09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTYwfSxJWzIxMzUxMl09QVtcIlRQLlNPTk9CVU9ZIExPRkFSXCJdLFJbMjEzNTEyXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTEzXT1BW1wiVFAuU09OT0JVT1kgUEFUVEVSTiBDRU5URVJcIl0sUlsyMTM1MTNdPXt4MTo0MCx4MjoxNjAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MTRdPUFbXCJUUC5TT05PQlVPWSBST1wiXSxSWzIxMzUxNF09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTYwfSxJWzIxMzUxNV09QVtcIlRQLlNPTk9CVU9ZIFZMQURcIl0sUlsyMTM1MTVdPXt4MTo0MCx4MjoxNjAseTE6LTEwLHkyOjE2MH0sSVsyMTM2MDBdPUFbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0sUlsyMTM2MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxMzcwMF09QVtcIlRQLlNQRUNJQUwgUE9JTlRcIl0sUlsyMTM3MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxMzgwMF09QVtcIlRQLk5BVklHQVRJT05BTCBSRUZFUkVOQ0VcIl0sUlsyMTM4MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxMzkwMF09QVtcIlRQLkRMUlBcIl0sUlsyMTM5MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNGUzXT1BW1wiRk9SV0FSRCBPQlNFUlZFUiAvIFNQT1RURVIgUE9TSVRJT05cIl0sUlsyMTRlM109e3gxOjQwLHgyOjE2MCx5MTo2MCx5MjoxNDB9LElbMjE0MTAwXT1BW1wiVFAuVklUQUwgQVJFQSBDRU5UUkVcIl0sUlsyMTQxMDBdPXt4MTo0MCx4MjoxNjAseTE6NjAseTI6MTQwfSxJWzIxNDIwMF09QVtcIlRQLkNPUlJJRE9SIFRBQlwiXSxSWzIxNDIwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0MzAwXT1BW1wiVFAuRU5FTVkgUE9JTlRcIl0sUlsyMTQzMDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNDQwMF09QVtcIlRQLk1BUlNIQUxMIFBPSU5UXCJdLFJbMjE0NDAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTQ1MDBdPUFbXCJUUC5QT0lOVCBPRiBJTlRFTkRFRCBNT1ZFTUVOVFwiXSxSWzIxNDUwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0NjAwXT1BW1wiVFAuUFJFLUxBTkRGQUxMIFdBWVBPSU5UXCJdLFJbMjE0NjAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTQ3MDBdPUFbXCJUUC5FU1RJTUFURUQgUE9TSVRJT04gKEVQKVwiXSxSWzIxNDcwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0ODAwXT1BW1wiVFAuUkVGRVJFTkNFIFBPSU5UIFdBWVBPSU5UXCJdLFJbMjE0ODAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTQ5MDBdPUFbXCJUUC5TVUIgU1VSRkFDRSBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTQ5MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNWUzXT1BW1wiVFAuU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNWUzXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTUxMDBdPUFbXCJUUC5BU1cgU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTEwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1MjAwXT1BW1wiVFAuKFVVVikgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE1MjAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTUzMDBdPUFbXCJUUC5VVVYgLSBBU1cgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE1MzAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTU0MDBdPUFbXCJUUC5NSU5FIFdBUkZBUkUgVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIFNVQlNVUkZBQ0UgU1RBVElPTlwiXSxSWzIxNTQwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1NTAwXT1BW1wiVFAuVVVWIC0gU1VXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTUwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1NjAwXT1BW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE1NjAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTU3MDBdPUFbXCJUUC5BU1cgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE1NzAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTU4MDBdPUFbXCJUUC5NSU5FIFdBUkZBUkUgU1VSRkFDRSBTVEFUSU9OXCJdLFJbMjE1ODAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTU5MDBdPUFbXCJUUC5OT04tQ09NQkFUQU5UIFNVUkZBQ0UgU1RBVElPTlwiXSxSWzIxNTkwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2ZTNdPUFbXCJUUC5QSUNLRVQgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE2ZTNdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjEwMF09QVtcIlRQLlJFTkRFWlZPVVMgQ09OVFJPTCBQT0lOVFwiXSxSWzIxNjEwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2MjAwXT1BW1wiVFAuUkVQTEVOSVNITUVOVCBBVCBTRUEgU1VSRkFDRSBTVEFUSU9OXCJdLFJbMjE2MjAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTYzMDBdPUFbXCJUUC5SRVNDVUUgQ09OVFJPTCBQT0lOVFwiXSxSWzIxNjMwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2NDAwXT1BW1wiVFAuU1VXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNjQwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2NTAwXT1BW1wiVFAuKFVTVikgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE2NTAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTY2MDBdPUFbXCJUUC5VU1YgLSBBU1cgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE2NjAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTY3MDBdPUFbXCJUUC5NSU5FIFdBUkZBUkUgVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIFNVUkZBQ0UgU1RBVElPTlwiXSxSWzIxNjcwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2ODAwXT1BW1wiVFAuKFJNVikgVVNWIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNjgwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2OTAwXT1BW1wiVFAuVVNWIC0gU1VXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNjkwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE3ZTNdPUFbXCJUUC5TSE9SRSBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTdlM109e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE3MTAwXT1BW1wiVFAuUk9VVEVcIl0sUlsyMTcxMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNzIwMF09QVtcIlRQLlJPVVRFIERJVkVSU0lPTlNcIl0sUlsyMTcyMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzMwMF09QVtcIlRQLlJPVVRFIFBPSU5UIFJcIl0sUlsyMTczMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzQwMF09QVtcIlRQLlBJQ0tFVCBST1VURVwiXSxSWzIxNzQwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbMjE3NTAwXT1BW1wiVFAuUE9JTlQgUiBST1VURVwiXSxSWzIxNzUwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbMjE3NjAwXT1BW1wiVFAuUkVOREVaVk9VUyBST1VURVwiXSxSWzIxNzYwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNzB9LElbMjE3NzAwXT1BW1wiVFAuUk9VVEUgV0FZUE9JTlRcIl0sUlsyMTc3MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzgwMF09QVtcIlRQLkNMVVRURVIsIFNUQVRJT05BUlkgT1IgQ0VBU0UgUkVQT1JUSU5HXCJdLElbMjE3OTAwXT1BW1wiVFAuVEVOVEFUSVZFIE9SIFBST1ZJU0lPTkFMIFRSQUNLXCJdLElbMjE4ZTNdPUFbXCJUUC5ESVNUUkVTU0VEIFZFU1NFTFwiXSxJWzIxODEwMF09QVtcIlRQLkRJVENIRUQgQUlSQ1JBRlRcIl0sSVsyMTgyMDBdPUFbXCJUUC5QRVJTT04gSU4gV0FURVJcIl0sSVsyMTgzMDBdPUFbXCJUUC5JQ0VCRVJHXCJdLFJbMjE4MzAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTg1MDBdPUFbXCJUUC5PSUwgUklHL1BMQVRGT1JNXCJdLFJbMjE4NTAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTg2MDBdPUFbXCJUUC5TRUEgTUlORUxJS0VcIl0sUlsyMTg2MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTUwfSxJWzIxODcwMF09QVtcIlRQLkJPVFRPTSBSRVRVUk5cIl0sUlsyMTg3MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTAwfSxJWzIxODgwMF09QVtcIlRQLklOU1RBTExBVElPTi9NQU5NQURFXCJdLFJbMjE4ODAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjEwMH0sSVsyMTg5MDBdPUFbXCJUUC5NQVJJTkUgTElGRVwiXSxSWzIxODkwMF09e3gxOjEwMCx4MjoyMjAseTE6NzAseTI6MTMwfSxJWzIxOWUzXT1BW1wiVFAuU0VBIEFOT01BTFlcIl0sUlsyMTllM109e3gxOjUwLHgyOjE1MCx5MTozMCx5MjoxMjB9LElbMjE5MTAwXT1BW1wiVFAuV1JFQ0ssIERBTkdFUk9VU1wiXSxSWzIxOTEwMF09e3gxOjQwLHgyOjE2MCx5MTo3MCx5MjoxMzB9LElbMjE5MjAwXT1BW1wiVFAuV1JFQ0ssIE5PTiBEQU5HRVJPVVNcIl0sUlsyMTkyMDBdPXt4MTo0MCx4MjoxNjAseTE6NzAseTI6MTMwfSxJWzI0MDYwMV09QVtcIlRQLlBPSU5UL1NJTkdMRSBUQVJHRVRcIl0sSVsyNDA2MDJdPUFbXCJUUC5OVUNMRUFSIFRBUkdFVFwiXSxJWzI0MDYwM109QVtcIlRQLlRBUkdFVFJFQ09SREVEIChBRUdJUyBPTkxZKVwiXSxSWzI0MDYwM109e3gxOjAseDI6MjAwLHkxOjUwLHkyOjE1MH0sSVsyNDA5MDBdPUFbXCJUUC5GSVJFIFNVUFBPUlQgU1RBVElPTlwiXSxSWzI0MDkwMF09e3gxOjUwLHgyOjIwMCx5MTo1MCx5MjoxNTB9LElbMjUwMTAwXT1BW1wiVFAuRklSSU5HIFBPSU5UXCJdLFJbMjUwMTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyNTAyMDBdPUFbXCJUUC5ISURFIFBPSU5UXCJdLFJbMjUwMjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyNTAzMDBdPUFbXCJUUC5MQVVOQ0ggUE9JTlRcIl0sUlsyNTAzMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI1MDQwMF09QVtcIlRQLlJFTE9BRCBQT0lOVFwiXSxSWzI1MDQwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjUwNTAwXT1BW1wiVFAuU1VSVkVZIENPTlRST0wgUE9JTlRcIl0sUlsyNTA1MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI1MDYwMF09QVtcIlRQLktOT1dOIFBPSU5UXCJdLElbMjcwNzAxXT1BW1wiVFAuTUlORUZJRUxELCBTVEFUSUNcIl0sUlsyNzA3MDFdPXt4MToyNSx4MjoxNzUseTE6NjUseTI6MTQ1fSxJWzI4MDEwMF09QS5UT0RPLElbMjgwMjAwXT1BW1wiVFAuQU5USVBFUlNPTk5FTCAoQVApIE1JTkVTXCJdLElbMjgwMjAxXT1BW1wiVFAuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUU1wiXSxSWzI4MDIwMV09e3gxOjQwLHgyOjE4MCx5MTo0MCx5MjoxNTB9LElbMjgwMzAwXT1BW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLElbMjgwNDAwXT1BW1wiVFAuKEFUKSBBTlRJSEFORExJTkcgREVWSUNFXCJdLFJbMjgwNDAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE5NX0sSVsyODA1MDBdPUFbXCJUUC5XSURFIEFSRUEgTUlORVNcIl0sSVsyODA2MDBdPUFbXCJUUC5VTlNQRUNJRklFRCBNSU5FXCJdLElbMjgwNzAwXT1BW1wiVFAuQk9PQlkgVFJBUFwiXSxJWzI4MDgwMF09QVtcIlRQLkVOR0lORUVSIFJFR1VMQVRJTkcgUE9JTlRcIl0sUlsyODA4MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MDkwMF09QVtcIlRQLkVBUlRIV09SSy9GT1JUSUZJQ0FUSU9OXCJdLElbMjgxZTNdPUFbXCJUUC5TVVJGQUNFIFNIRUxURVJcIl0sSVsyODExMDBdPUFbXCJUUC5VTkRFUkdST1VORCBTSEVMVEVSXCJdLElbMjgxMjAwXT1BW1wiVFAuRk9SVFwiXSxJWzI4MTMwMF09QVtcIlRQLkNIRU1JQ0FMIEVWRU5UXCJdLFJbMjgxMzAwXT17eDE6MjUseDI6MTc1LHkxOi0xMH0sSVsyODEzMDFdPUFbXCJUUC5DSEVNSUNBTCDigJMgVE9YSUMgSU5EVVNUUklBTCBNQVRFUklBTFwiXSxSWzI4MTMwMV09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNDAwXT1BW1wiVFAuQklPTE9HSUNBTCBFVkVOVFwiXSxSWzI4MTQwMF09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNDAxXT1BW1wiVFAuQklPTE9HSUNBTCDigJMgVE9YSUMgSU5EVVNUUklBTCBNQVRFUklBTFwiXSxSWzI4MTQwMV09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNTAwXT1BW1wiVFAuTlVDTEVBUiBFVkVOVFwiXSxSWzI4MTUwMF09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNjAwXT1BW1wiVFAuTlVDTEVBUiBFVkVOVFwiXSxSWzI4MTYwMF09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNzAwXT1BW1wiVFAuUkFESU9MT0dJQ0FMIEVWRU5UXCJdLFJbMjgxNzAwXT17eDE6MjUseDI6MTc1LHkxOi0xMH0sSVsyODE3MDFdPUFbXCJUUC5SQURJT0xPR0lDQUwg4oCTIFRPWElDIElORFVTVFJJQUwgTUFURVJJQUxcIl0sUlsyODE3MDFdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTgwMF09QVtcIlRQLkRFQ09OIFNJVEUvUE9JTlRcIl0sUlsyODE4MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MTgwMV09QVtcIlRQLkFMVEVSTkFURSBERUNPTiBTSVRFL1BPSU5UXCJdLFJbMjgxODAxXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDJdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQpXCJdLFJbMjgxODAyXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDNdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUUk9PUFMpXCJdLFJbMjgxODAzXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDRdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQgQU5EIFRST09QUylcIl0sUlsyODE4MDRdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MTgwNV09QVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKE9QRVJBVElPTkFMIERFQ09OVEFNSU5BVElPTilcIl0sUlsyODE4MDVdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MTgwNl09QVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKFRIT1JPVUdIIERFQ09OVEFNSU5BVElPTilcIl0sUlsyODE4MDZdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MTgwN109QVtcIlRQLk1BSU4gRVFVSVBNRU5UIERFQ09OVEFNSU5BVElPTiBQT0lOVC9TSVRFXCJdLFJbMjgxODA3XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDhdPUFbXCJUUC5GT1JXQVJEIFRST09QIERFQ09OVEFNSU5BVElPTiBQT0lOVC9TSVRFXCJdLFJbMjgxODA4XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDldPUFbXCJUUC5XT1VOREVEIFBFUlNPTk5FTCBERUNPTlRBTUlOQVRJT04gU0lURVwiXSxSWzI4MTgwOV09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxOTAxXT1BW1wiVFAuRklYRUQgQU5EIFBSRUZBQlJJQ0FURURcIl0sUlsyODE5MDFdPXt4MTo2MCx4MjoxNDAseTE6MzB9LElbMjgxOTAyXT1BW1wiVFAuVEVUUkFIRURST05TXCJdLFJbMjgxOTAyXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJWzI4MTkwM109QVtcIlRQLlRFVFJBSEVEUk9OUyBNT1ZBQkxFXCJdLFJbMjgxOTAzXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJWzI4MjAwMV09QVtcIlRQLlRPV0VSIExPV1wiXSxSWzI4MjAwMV09e3gxOjUwLHgyOjE1MCx5MTozMCx5MjoxMjB9LElbMjgyMDAyXT1BW1wiVFAuVE9XRVIgSElHSFwiXSxSWzI4MjAwMl09e3gxOjUwLHgyOjE1MCx5MTozMCx5MjoxMjB9LElbMzIwMTAwXT1BW1wiVFAuQU1CVUxBTkNFIEVYQ0hBTkdFIFBPSU5UXCJdLFJbMzIwMTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjAxMDFdPUFbXCJUUC5BTUJVTEFOQ0UgRVhDSEFOR0UgUE9JTlRcIl0sUlszMjAxMDFdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMDEwMl09QVtcIlRQLkFNQlVMQU5DRSBDT05UUk9MIFBPSU5UXCJdLFJbMzIwMTAyXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjAxMDNdPUFbXCJUUC5BTUJVTEFOQ0UgTE9BRCBQT0lOVFwiXSxSWzMyMDEwM109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwMTA0XT1BW1wiVFAuQU1CVUxBTkNFIFJFTEFZIFBPSU5UXCJdLFJbMzIwMTA0XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjAyMDBdPUFbXCJUUC5BTU1VTklUSU9OIFNVUFBMWSBQT0lOVCAoQVNQKVwiXSxSWzMyMDIwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwMzAwXT1BW1wiVFAuQU1NVU5JVElPTiBUUkFOU0ZFUiBQT0lOVCAoQVRQKVwiXSxSWzMyMDMwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwNDAwXT1BW1wiVFAuQ0FOTklCQUxJWkFUSU9OIFBPSU5UXCJdLFJbMzIwNDAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjA1MDBdPUFbXCJUUC5DQVNVQUxUWSBDT0xMRUNUSU9OIFBPSU5UXCJdLFJbMzIwNTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjA2MDBdPUFbXCJUUC5DSVZJTElBTiBDT0xMRUNUSU9OIFBPSU5UXCJdLFJbMzIwNjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjA3MDBdPUFbXCJUUC5ERVRBSU5FRSBDT0xMRUNUSU9OIFBPSU5UXCJdLFJbMzIwNzAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjA4MDBdPUFbXCJUUC5FUFcgQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMDgwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwOTAwXT1BW1wiVFAuTE9HSVNUSUNTIFJFTEVBU0UgUE9JTlRcIl0sUlszMjA5MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMWUzXT1BW1wiVFAuTUFJTlRFTkFOQ0UgQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMWUzXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjExMDBdPUFbXCJUUC5NRURJQ0FMIEVWQUNVQVRJT04gKE1FREVWQUMpIFBJQ0tVUCBQT0lOVFwiXSxSWzMyMTEwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxMjAwXT1BW1wiVFAuUkVBUk0sIFJFRlVFTCBBTkQgUkVTVVBQTFkgUE9JTlRcIl0sUlszMjEyMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTMwMF09QVtcIlRQLlJFRlVFTCBPTiBUSEUgTU9WRSBQT0lOVFwiXSxSWzMyMTMwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNDAwXT1BW1wiVFAuVFJBRkZJQyBDT05UUk9MIFBPU1RcIl0sUlszMjE0MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTUwMF09QVtcIlRQLlRSQUlMRVIgVFJBTlNGRVIgUE9JTlRcIl0sUlszMjE1MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTYwMF09QVtcIlRQLlVOSVQgTUFJTlRFTkFOQ0UgQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMTYwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzAwXT1BW1wiVFAuU1VQUExZIFBPSU5UXCJdLFJbMzIxNzAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDFdPUFbXCJUUC5OQVRPIENMQVNTIElcIl0sUlszMjE3MDFdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwMl09QVtcIlRQLk5BVE8gQ0xBU1MgSUlcIl0sUlszMjE3MDJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwM109QVtcIlRQLk5BVE8gQ0xBU1MgSUlJXCJdLFJbMzIxNzAzXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDRdPUFbXCJUUC5OQVRPIENMQVNTIElWXCJdLFJbMzIxNzA0XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDVdPUFbXCJUUC5OQVRPIENMQVNTIFZcIl0sUlszMjE3MDVdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwNl09QVtcIlRQLlNVUFBMWSBQT0lOVFwiXSxSWzMyMTcwNl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzA3XT1BW1wiVFAuU1AgQ0xBU1MgSVwiXSxSWzMyMTcwN109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzA4XT1BW1wiVFAuU1AgQ0xBU1MgSUlcIl0sUlszMjE3MDhdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwOV09QVtcIlRQLlNQIENMQVNTIElJSVwiXSxSWzMyMTcwOV09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzEwXT1BW1wiVFAuU1AgQ0xBU1MgSVZcIl0sUlszMjE3MTBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcxMV09QVtcIlRQLlNQIENMQVNTIFZcIl0sUlszMjE3MTFdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcxMl09QVtcIlRQLlNQIENMQVNTIFZJXCJdLFJbMzIxNzEyXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTNdPUFbXCJUUC5TUCBDTEFTUyBWSUlcIl0sUlszMjE3MTNdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcxNF09QVtcIlRQLlNQIENMQVNTIFZJSUlcIl0sUlszMjE3MTRdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcxNV09QVtcIlRQLlNQIENMQVNTIElYXCJdLFJbMzIxNzE1XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTZdPUFbXCJUUC5TUCBDTEFTUyBYXCJdLFJbMzIxNzE2XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE4MDBdPUFbXCJUUC5NRURJQ0FMIFNVUFBMWSBQT0lOVFwiXSxSWzMyMTgwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzQwOTAwXT1BW1wiVFAuREVTVFJPWVwiXSxSWzM0MDkwMF09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVszNDE0MDBdPUFbXCJUUC5JTlRFUkRJQ1RcIl0sUlszNDE0MDBdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbMzQxNjAwXT1BW1wiVFAuTkVVVFJBTElaRVwiXSxSWzM0MTYwMF09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVszNDI4MDBdPUFbXCJUUC5TVVBQUkVTU1wiXSxSWzM0MjgwMF09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVszNTAxMDFdPUFbXCJNQU4gTUFERSBTUEFDRSBERUJSSVMgU01BTExcIl0sSVszNTAxMDJdPUFbXCJNQU4gTUFERSBTUEFDRSBERUJSSVMgTUVESVVNXCJdLElbMzUwMTAzXT1BW1wiTUFOIE1BREUgU1BBQ0UgREVCUklTIEJJR1wiXSxJWzM1MDIwMV09QVtcIk5BVFVSQUwgU1BBQ0UgREVCUklTIFNNQUxMXCJdLElbMzUwMjAyXT1BW1wiTkFUVVJBTCBTUEFDRSBERUJSSVMgTUVESVVNXCJdLElbMzUwMjAzXT1BW1wiTkFUVVJBTCBTUEFDRSBERUJSSVMgQklHXCJdLHRbMTNdPVtBW1wiVFAuTTEuVU5TUEVDSUZJRURcIl1dLHRbMTRdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAyXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgM1wiXV0sdFsxNV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAzXCJdXSx0WzE2XT1bQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl1dLHRbMTddPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXV0sdFsxOF09W0FbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAzXCJdXSx0WzE5XT1bQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAxXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbMjBdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl1dLHRbMjFdPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAzXCJdXSx0WzIyXT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAyXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgM1wiXV0sdFsyM109W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl1dLHRbMjRdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAyXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgM1wiXV0sdFsyNV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAzXCJdXSx0WzI2XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAzXCJdXSx0WzI3XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAzXCJdXSx0WzI4XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXV0sdFsyOV09W0FbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgM1wiXV0sdFszMF09W0FbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDFcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgM1wiXV0sdFszMV09W0FbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDFcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl1dLHRbMzJdPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXV0sdFszM109W0FbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAxXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXV0sdFszNF09W0FbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFszNV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl1dLHRbMzZdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXV0sdFszN109W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAyXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAzXCJdXSx0WzM4XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDJcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAzXCJdXSx0WzM5XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbNDBdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFs0MV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgM1wiXV0sdFs0Ml09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFs0M109W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbNDRdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgM1wiXV0sdFs0NV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXV0sdFs0Nl09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFs0N109W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbNDhdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAyXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAzXCJdXSx0WzQ5XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbNTBdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgM1wiXV0pfX0sRUk9W1EsZyxiLEssWCx3LF8sSixaLHEsaiwkLElJLHt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMjdcIj09ZSYmKElbMTFlNF09W10sSVsxMTAxMDBdPVtdLElbMTEwMTAxXT1bQVtcIkdSLklDLkZGLklORkFOVFJZIERJU01PVU5URURcIl1dLElbMTEwMTAyXT1bQVtcIkdSLklDLkZGLk1FRElDQUxcIl1dLElbMTEwMTAzXT1bQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFIERJU01PVU5URURcIl1dLElbMTEwMTA0XT1bQVtcIkdSLklDLkZGLlNJR05BTCBESVNNT1VOVEVEXCJdXSxJWzExMDIwMF09W10sSVsxMTAyMDFdPVtBW1wiR1IuSUMuRVhQTE9TSVZFIE9SRE5BTkNFIERJU1BPU0FMXCJdXSxJWzExMDIwMl09W0FbXCJHUi5JQy5GSUVMRCBBUlRJTExFUlkgT0JTRVJWRVJcIl1dLElbMTEwMjAzXT1bQVtcIkdSLklDLkpPSU5UIEZJUkUgU1VQUE9SVFwiXV0sSVsxMTAyMDRdPVtBW1wiR1IuSUMuTElBSVNPTlwiXV0sSVsxMTAyMDVdPVtBW1wiR1IuSUMuTUVTU0VOR0VSXCJdXSxJWzExMDIwNl09W0FbXCJHUi5JQy5NSUxJVEFSWSBQT0xJQ0VcIl1dLElbMTEwMjA3XT1bQVtcIkdSLklDLk9CU0VSVkVSL09CU0VSVkFUSU9OXCJdXSxJWzExMDIwOF09W0FbXCJHUi5JQy5TRUNVUklUWVwiXV0sSVsxMTAyMDldPVtBW1wiR1IuSUMuU05JUEVSXCJdXSxJWzExMDIxMF09W0FbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJWzExMDMwMF09W10sSVsxMTAzMDFdPVtBW1wiR1IuRVEuUklGTEVcIl1dLElbMTEwMzAyXT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTAzMDNdPVtBW1wiR1IuRVEuUklGTEVcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTAzMDRdPVtBW1wiR1IuRVEuUklGTEVcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTEwMzA1XT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdXSxJWzExMDMwNl09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwMzA3XT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwMzA4XT1bQVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDMwOV09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdXSxJWzExMDMxMF09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSldLElbMTEwMzExXT1bQVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSldLElbMTEwMzEyXT1bQVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMjAsQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0pXSxJWzExMDMxM109W0FbXCJHUi5FUS5GTEFNRSBUSFJPV0VSXCJdXSxJWzExMDMxNF09W0FbXCJHUi5FUS5NT1JUQVJcIl1dLElbMTEwMzE1XT1bQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl1dLElbMTEwMzE2XT1bQVtcIkdSLkVRLkFOVElUQU5LIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVsxMTA0MDBdPVtdLElbMTEwNDAxXT1bQVtcIkdSLkVRLk5PTi1MRVRIQUwgV0VBUE9OXCJdXSxJWzExMDQwMl09QVtcIkdSLkVRLk5PTi1MRVRIQUwgR1JFTkFERSBMQVVOQ0hFUlwiXSxJWzExMDQwM109W0FbXCJHUi5FUS5UQVNFUlwiXV0sSVsxMmU0XT1bXSxJWzEyMDEwMF09W10sSVsxMjAxMDFdPVtBW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UXCJdXSx0W1wiMDFcIl09W0FbXCJHUi5NMS5DTE9TRSBQUk9URUNUSU9OXCJdXSx0W1wiMDJcIl09W0FbXCJHUi5NMS5DUk9XRCBBTkQgUklPVCBDT05UUk9MXCJdXSx0W1wiMDNcIl09W0FbXCJHUi5NMS5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl1dLHRbXCIwNFwiXT1bQVtcIkdSLk0xLlNFQ1VSSVRZXCJdXSx0W1wiMDVcIl09W0FbXCJHUi5NMS5TTklQRVJcIl1dLHRbXCIwNlwiXT1bQVtcIkdSLk0xLlNQRUNJQUwgV0VBUE9OUyBBTkQgVEFDVElDU1wiXV0sdFtcIjA3XCJdPVtBW1wiU1QuTTEuTk9OR09WRVJOTUVOVEFMIE9SR0FOSVpBVElPTiAoTkdPKVwiXV0sdFtcIjA4XCJdPVtBW1wiR1IuTTEuTVVMVElOQVRJT05BTFwiXV0sdFtcIjA5XCJdPVtBW1wiR1IuTTEuTVVMVElOQVRJT05BTCBTUEVDSUFMSVpFRCBVTklUXCJdXSx0WzEwXT1bQVtcIlNULk0xLkdPVkVSTk1FTlQgT1JHQU5JWkFUSU9OXCJdXSx0WzExXT1bQVtcIkdSLk0xLlZJREVPIElNQUdFUllcIl1dLHRbMTJdPVtBW1wiR1IuTTEuSjFcIl1dLHRbMTNdPVtBW1wiR1IuTTEuSjJcIl1dLHRbMTRdPVtBW1wiR1IuTTEuSjNcIl1dLHRbMTVdPVtBW1wiR1IuTTEuSjRcIl1dLHRbMTZdPVtBW1wiR1IuTTEuSjVcIl1dLHRbMTddPVtBW1wiR1IuTTEuSjZcIl1dLHRbMThdPVtBW1wiR1IuTTEuSjdcIl1dLHRbMTldPVtBW1wiR1IuTTEuSjhcIl1dLHRbMjBdPVtBW1wiR1IuTTEuSjlcIl1dLHRbMjFdPVtBW1wiR1IuTTEuT0YtMVwiXV0sdFsyMl09W0FbXCJHUi5NMS5PRi0yXCJdXSx0WzIzXT1bQVtcIkdSLk0xLk9GLTNcIl1dLHRbMjRdPVtBW1wiR1IuTTEuT0YtNFwiXV0sdFsyNV09W0FbXCJHUi5NMS5PRi01XCJdXSx0WzI2XT1bQVtcIkdSLk0xLk9GLTZcIl1dLHRbMjddPVtBW1wiR1IuTTEuT0YtN1wiXV0sdFsyOF09W0FbXCJHUi5NMS5PRi04XCJdXSx0WzI5XT1bQVtcIkdSLk0xLk9GLTlcIl1dLHRbMzBdPVtBW1wiR1IuTTEuT0YtMTBcIl1dLHRbMzFdPVtBW1wiR1IuTTEuT0YtRFwiXV0sdFszMl09W0FbXCJHUi5NMS5PUi0xXCJdXSx0WzMzXT1bQVtcIkdSLk0xLk9SLTJcIl1dLHRbMzRdPVtBW1wiR1IuTTEuT1ItM1wiXV0sdFszNV09W0FbXCJHUi5NMS5PUi00XCJdXSx0WzM2XT1bQVtcIkdSLk0xLk9SLTVcIl1dLHRbMzddPVtBW1wiR1IuTTEuT1ItNlwiXV0sdFszOF09W0FbXCJHUi5NMS5PUi03XCJdXSx0WzM5XT1bQVtcIkdSLk0xLk9SLThcIl1dLHRbNDBdPVtBW1wiR1IuTTEuT1ItOVwiXV0sdFs0MV09W0FbXCJHUi5NMS5XTy0xXCJdXSx0WzQyXT1bQVtcIkdSLk0xLldPLTJcIl1dLHRbNDNdPVtBW1wiR1IuTTEuV08tM1wiXV0sdFs0NF09W0FbXCJHUi5NMS5XTy00XCJdXSx0WzQ1XT1bQVtcIkdSLk0xLldPLTVcIl1dLHRbNDZdPVtBW1wiR1IuTTEuSU5ESVZJRFVBTFwiXV0sdFs0N109W0FbXCJHUi5NMS5URUFNXCJdXSx0WzQ4XT1bQVtcIkdSLk0xLlNRVUFEXCJdXSx0WzQ5XT1bQVtcIkdSLk0xLlNFQ1RJT05cIl1dLHRbNTBdPVtBW1wiR1IuTTEuUExBVE9PTlwiXV0sdFs1MV09W0FbXCJHUi5NMS5DT01QQU5ZXCJdXSx0WzUyXT1bQVtcIkdSLk0xLkJBVFRBTElPTlwiXV0sdFs1M109W0FbXCJHUi5NMS5SRUdJTUVOVFwiXV0sdFs1NF09W0FbXCJHUi5NMS5CUklHQURFXCJdXSx0WzU1XT1bQVtcIkdSLk0xLkRJVklTSU9OXCJdXSxFW1wiMDFcIl09W0FbXCJHUi5NMi5BSVJCT1JORVwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuTTIuQklDWUNMRSBFUVVJUFBFRFwiXV0sRVtcIjAzXCJdPVtBW1wiR1IuTTIuREVNT0xJVElPTlwiXV0sRVtcIjA0XCJdPVtBW1wiR1IuTTIuSjFcIl1dLEVbXCIwNVwiXT1bQVtcIkdSLk0yLkoyXCJdXSxFW1wiMDZcIl09W0FbXCJHUi5NMi5KM1wiXV0sRVtcIjA3XCJdPVtBW1wiR1IuTTIuSjRcIl1dLEVbXCIwOFwiXT1bQVtcIkdSLk0yLko1XCJdXSxFW1wiMDlcIl09W0FbXCJHUi5NMi5KNlwiXV0sRVsxMF09W0FbXCJHUi5NMi5KN1wiXV0sRVsxMV09W0FbXCJHUi5NMi5KOFwiXV0sRVsxMl09W0FbXCJHUi5NMi5KOVwiXV0sRVsxM109W0FbXCJHUi5NMi5NT1VOVEFJTlwiXV0sRVsxNF09W0FbXCJHUi5NMi5PRi0xXCJdXSxFWzE1XT1bQVtcIkdSLk0yLk9GLTJcIl1dLEVbMTZdPVtBW1wiR1IuTTIuT0YtM1wiXV0sRVsxN109W0FbXCJHUi5NMi5PRi00XCJdXSxFWzE4XT1bQVtcIkdSLk0yLk9GLTVcIl1dLEVbMTldPVtBW1wiR1IuTTIuT0YtNlwiXV0sRVsyMF09W0FbXCJHUi5NMi5PRi03XCJdXSxFWzIxXT1bQVtcIkdSLk0yLk9GLThcIl1dLEVbMjJdPVtBW1wiR1IuTTIuT0YtOVwiXV0sRVsyM109W0FbXCJHUi5NMi5PRi0xMFwiXV0sRVsyNF09W0FbXCJHUi5NMi5PRi1EXCJdXSxFWzI1XT1bQVtcIkdSLk0yLk9SLTFcIl1dLEVbMjZdPVtBW1wiR1IuTTIuT1ItMlwiXV0sRVsyN109W0FbXCJHUi5NMi5PUi0zXCJdXSxFWzI4XT1bQVtcIkdSLk0yLk9SLTRcIl1dLEVbMjldPVtBW1wiR1IuTTIuT1ItNVwiXV0sRVszMF09W0FbXCJHUi5NMi5PUi02XCJdXSxFWzMxXT1bQVtcIkdSLk0yLk9SLTdcIl1dLEVbMzJdPVtBW1wiR1IuTTIuT1ItOFwiXV0sRVszM109W0FbXCJHUi5NMi5PUi05XCJdXSxFWzM0XT1bQVtcIkdSLk0yLldPLTFcIl1dLEVbMzVdPVtBW1wiR1IuTTIuV08tMlwiXV0sRVszNl09W0FbXCJHUi5NMi5XTy0zXCJdXSxFWzM3XT1bQVtcIkdSLk0yLldPLTRcIl1dLEVbMzhdPVtBW1wiR1IuTTIuV08tNVwiXV0sRVszOV09W0FbXCJHUi5NMi5TS0lcIl1dKX19LHRJXSxSST1bUSxnLGIsSyxYLHcsXyxKLFoscSxqLCQsSUkse3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOmMsaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCI2MFwiPT1lJiYoSVsxMWU0XT1bXSxJWzExMDEwMF09W0FbXCJDWS5JQy5DT01CQVQgTUlTU0lPTiBURUFNXCJdXSxJWzExMDIwMF09W0FbXCJDWS5JQy5OQVRJT05BTCBNSVNTSU9OIFRFQU1cIl1dLElbMTEwMzAwXT1bQVtcIkNZLklDLkNZQkVSIFBST1RFQ1RJT04gVEVBTVwiXV0sSVsxMTA0MDBdPVtBW1wiQ1kuSUMuTkFUSU9OIFNUQVRFIENZQkVSIFRIUkVBVCBBQ1RPUlwiXV0sSVsxMTA1MDBdPVtBW1wiQ1kuSUMuTk9OIE5BVElPTiBTVEFURSBDWUJFUiBUSFJFQVQgQUNUT1JcIl1dKX19LHRJXTtyZXR1cm4gcy5hZGRJY29ucyhCKSxzLmFkZEljb25zKFkpLHMuYWRkSWNvbnMoVykscy5hZGRJY29ucyhFSSkscy5hZGRJY29ucyhSSSkscy5QYXRoMkQ9ZnVuY3Rpb24oSSx0KXt2YXIgRSxSLGUsQSxDLFQsUyxOLE8sRyxvO0kuYmVnaW5QYXRoKCk7dmFyIE09dC5tYXRjaCgvKFtNQ0xIVl1bXk1DTEhWXSopL2dpKTtmb3IoUz0wO1M8TS5sZW5ndGg7UysrKXtpZihcIk1cIj09TVtTXS5jaGFyQXQoMCkpe2ZvcihvPU1bU10ubWF0Y2goL1stXFxkXS4qW1xcZF0vKVswXS5zcGxpdCgvW1xccyxdL2cpLE89RT1wYXJzZUZsb2F0KG9bMF0pLEc9Uj1wYXJzZUZsb2F0KG9bMV0pLEkubW92ZVRvKEUsUiksTj0yO048by5sZW5ndGg7Tis9MilFPXBhcnNlRmxvYXQob1tOXSksUj1wYXJzZUZsb2F0KG9bTisxXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmKEkuY2xvc2VQYXRoKCksRT1PLFI9Ryl9aWYoXCJtXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxPPUU9RT9FK3BhcnNlRmxvYXQob1swXSk6cGFyc2VGbG9hdChvWzBdKSxHPVI9Uj9SK3BhcnNlRmxvYXQob1sxXSk6cGFyc2VGbG9hdChvWzFdKSxJLm1vdmVUbyhFLFIpLE49MjtOPG8ubGVuZ3RoO04rPTIpRSs9cGFyc2VGbG9hdChvW05dKSxSKz1wYXJzZUZsb2F0KG9bTisxXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmKEkuY2xvc2VQYXRoKCksRT1PLFI9Ryl9aWYoXCJMXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKz0yKUU9cGFyc2VGbG9hdChvW05dKSxSPXBhcnNlRmxvYXQob1tOKzFdKSxJLmxpbmVUbyhFLFIpO1wiWlwiPT1NW1NdLnJlcGxhY2UoL1xccy9nLFwiXCIpLnN1YnN0cigtMSwxKS50b1VwcGVyQ2FzZSgpJiYoSS5jbG9zZVBhdGgoKSxFPU8sUj1HKX1pZihcImxcIj09TVtTXS5jaGFyQXQoMCkpe2ZvcihvPU1bU10ubWF0Y2goL1stXFxkXS4qW1xcZF0vKVswXS5zcGxpdCgvW1xccyxdL2cpLE49MDtOPG8ubGVuZ3RoO04rPTIpRSs9cGFyc2VGbG9hdChvW05dKSxSKz1wYXJzZUZsb2F0KG9bTisxXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmSS5jbG9zZVBhdGgoKX1pZihcIkNcIj09TVtTXS5jaGFyQXQoMCkpe2ZvcihvPU1bU10ubWF0Y2goL1stXFxkXS4qW1xcZF0vKVswXS5zcGxpdCgvW1xccyxdL2cpLE49MDtOPG8ubGVuZ3RoO04rPTYpZT1wYXJzZUZsb2F0KG9bTl0pLEE9cGFyc2VGbG9hdChvW04rMV0pLEM9cGFyc2VGbG9hdChvW04rMl0pLFQ9cGFyc2VGbG9hdChvW04rM10pLEU9cGFyc2VGbG9hdChvW04rNF0pLFI9cGFyc2VGbG9hdChvW04rNV0pLEkuYmV6aWVyQ3VydmVUbyhlLEEsQyxULEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJjXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKz02KWU9RStwYXJzZUZsb2F0KG9bTl0pLEE9UitwYXJzZUZsb2F0KG9bTisxXSksQz1FK3BhcnNlRmxvYXQob1tOKzJdKSxUPVIrcGFyc2VGbG9hdChvW04rM10pLEUrPXBhcnNlRmxvYXQob1tOKzRdKSxSKz1wYXJzZUZsb2F0KG9bTis1XSksSS5iZXppZXJDdXJ2ZVRvKGUsQSxDLFQsRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmSS5jbG9zZVBhdGgoKX1pZihcIkhcIj09TVtTXS5jaGFyQXQoMCkpe2ZvcihvPU1bU10ubWF0Y2goL1stXFxkXSguKltcXGRdKT8vKVswXS5zcGxpdCgvW1xccyxdL2cpLE49MDtOPG8ubGVuZ3RoO04rKylFPXBhcnNlRmxvYXQob1tOXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmSS5jbG9zZVBhdGgoKX1pZihcImhcIj09TVtTXS5jaGFyQXQoMCkpe2ZvcihvPU1bU10ubWF0Y2goL1stXFxkXSguKltcXGRdKT8vKVswXS5zcGxpdCgvW1xccyxdL2cpLE49MDtOPG8ubGVuZ3RoO04rKylFKz1wYXJzZUZsb2F0KG9bTl0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJWXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0oLipbXFxkXSk/LylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKyspUj1wYXJzZUZsb2F0KG9bTl0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJ2XCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0oLipbXFxkXSk/LylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKyspUis9cGFyc2VGbG9hdChvW05dKSxJLmxpbmVUbyhFLFIpO1wiWlwiPT1NW1NdLnJlcGxhY2UoL1xccy9nLFwiXCIpLnN1YnN0cigtMSwxKS50b1VwcGVyQ2FzZSgpJiZJLmNsb3NlUGF0aCgpfX19LHN9KTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiZXhwb3J0IGNsYXNzIEJ1dHRvbiB7XHJcbiAgICAjY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICAjc3Jjczogc3RyaW5nW107XHJcbiAgICAjY2FsbGJhY2s6IENhbGxhYmxlRnVuY3Rpb247XHJcbiAgICAjaW1nOiBhbnk7XHJcbiAgICAjc3RhdGU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IHN0cmluZywgc3Jjczogc3RyaW5nW10sIGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy4jY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSUQpO1xyXG4gICAgICAgIHRoaXMuI3NyY3MgPSBzcmNzO1xyXG4gICAgICAgIHRoaXMuI2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKHRoaXMuI2NvbnRhaW5lciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2ltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2ltZy5zcmMgPSB0aGlzLiNzcmNzW3RoaXMuI3N0YXRlXTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuI2ltZyk7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gdGhpcy4jb25DbGljaygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U3RhdGUoc3RhdGU6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA8IHRoaXMuI3NyY3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI3N0YXRlID0gc3RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuI2ltZy5zcmMgPSB0aGlzLiNzcmNzW3RoaXMuI3N0YXRlXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgICNvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiNpbWcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHRoaXMuI3N0YXRlIDwgdGhpcy4jc3Jjcy5sZW5ndGggLSAxID8gdGhpcy4jc3RhdGUgKyAxIDogMCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiNjYWxsYmFjaylcclxuICAgICAgICAgICAgICAgIHRoaXMuI2NhbGxiYWNrKHRoaXMuI3N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgY2xhc3MgRHJvcGRvd24ge1xyXG4gICAgI2NvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgI29wdGlvbnM6IHN0cmluZ1tdO1xyXG4gICAgI29wZW4/OiBib29sZWFuO1xyXG4gICAgI2NvbnRlbnQ/OiBIVE1MRWxlbWVudDtcclxuICAgICNjYWxsYmFjaz86IENhbGxhYmxlRnVuY3Rpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IHN0cmluZywgb3B0aW9uczogc3RyaW5nW10sIGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy4jY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSUQpO1xyXG4gICAgICAgIHRoaXMuI29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuI2NhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpXHJcbiAgICAgICAgdGhpcy4jY29udGFpbmVyPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiNvcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwgJiYgdGhpcy4jb3B0aW9ucy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy4jb3B0aW9uc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLiNvcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLW9wZW5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwib2x5bXB1cy1kcm9wZG93bi1jbG9zZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLiNjb250ZW50LmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRlbnQuc3R5bGUud2lkdGggPSAodGhpcy4jY29udGFpbmVyLm9mZnNldFdpZHRoIC0gdGhpcy4jY29udGFpbmVyLm9mZnNldEhlaWdodCkgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLiNjb250ZW50LnN0eWxlLmxlZnQgPSB0aGlzLiNjb250YWluZXIub2Zmc2V0TGVmdCArIFwicHhcIjtcclxuICAgICAgICAgICAgdGhpcy4jY29udGVudC5zdHlsZS50b3AgPSB0aGlzLiNjb250YWluZXIub2Zmc2V0VG9wICsgdGhpcy4jY29udGFpbmVyLm9mZnNldEhlaWdodCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy4jY29udGFpbmVyKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiNjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSAyO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBvcHRpb25JRCBpbiB0aGlzLiNvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLWVsZW1lbnRcIik7XHJcbiAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuI29wdGlvbnNbb3B0aW9uSURdKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb250ZW50LmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG5vZGUub2Zmc2V0SGVpZ2h0ICsgMjtcclxuICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMuI29wdGlvbnNbb3B0aW9uSURdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjYWxsYmFjayAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNjYWxsYmFjayh0aGlzLiNvcHRpb25zW29wdGlvbklEXSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4jY29udGVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLiNvcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lcj8uY2xhc3NMaXN0LnJlbW92ZShcIm9seW1wdXMtZHJvcGRvd24tb3BlblwiKTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKFwib2x5bXB1cy1kcm9wZG93bi1jbG9zZWRcIik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiNjb250ZW50ICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuI2NvbnRlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7IExhdExuZyB9IGZyb20gXCJsZWFmbGV0XCI7XHJcbmltcG9ydCB7IHNldEFjdGl2ZUNvYWxpdGlvbiB9IGZyb20gXCIuLlwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvblNjcm9sbCB7XHJcbiAgICAjY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICAjZGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsKSB7XHJcbiAgICAgICAgdGhpcy4jY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgICAgIHRoaXMuI2Rpc3BsYXkgPSAnJztcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjY29hbGl0aW9uLXN3aXRjaFwiKT8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHRoaXMuI29uU3dpdGNoKGUpKVxyXG4gICAgICAgICAgICB0aGlzLiNkaXNwbGF5ID0gdGhpcy4jY29udGFpbmVyLnN0eWxlLmRpc3BsYXk7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93KHg6IG51bWJlciwgeTogbnVtYmVyLCBvcHRpb25zOiBhbnksIGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uLCBzaG93Q29hbGl0aW9uOiBib29sZWFuKSB7XHJcbiAgICAgICAgLyogSGlkZSB0byByZW1vdmUgYnV0dG9ucywgaWYgcHJlc2VudCAqL1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHRoaXMuI2Rpc3BsYXk7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5zdHlsZS5sZWZ0ID0geCAtIDExMCArIFwicHhcIjtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnN0eWxlLnRvcCA9IHkgLSAxMTAgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIHZhciBzY3JvbGwgPSB0aGlzLiNjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5vbHltcHVzLXNlbGVjdGlvbi1zY3JvbGxcIik7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGwgIT0gbnVsbClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgb3B0aW9uSUQgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLXNlbGVjdGlvbi1zY3JvbGwtZWxlbWVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbb3B0aW9uSURdID09PSAnc3RyaW5nJyB8fCBvcHRpb25zW29wdGlvbklEXSBpbnN0YW5jZW9mIFN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob3B0aW9uc1tvcHRpb25JRF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGNhbGxiYWNrKG9wdGlvbnNbb3B0aW9uSURdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdGlvbnNbb3B0aW9uSURdLnRvb2x0aXApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG9wdGlvbnNbb3B0aW9uSURdLmNhbGxiYWNrKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGwuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZSgpIHtcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSB0aGlzLiNjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5vbHltcHVzLXNlbGVjdGlvbi1zY3JvbGwtZWxlbWVudFwiKTtcclxuICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLm9seW1wdXMtc2VsZWN0aW9uLXNjcm9sbFwiKTtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbCAhPSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBidXR0b25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsLnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAjb25Td2l0Y2goZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2NvbnRhaW5lciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjdGl2ZS1jb2FsaXRpb24tY29sb3InLCBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2NvbnRhaW5lcikuZ2V0UHJvcGVydHlWYWx1ZShcIi0tcmVkLWNvYWxpdGlvbi1jb2xvclwiKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVDb2FsaXRpb24oXCJyZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWN0aXZlLWNvYWxpdGlvbi1jb2xvcicsIGdldENvbXB1dGVkU3R5bGUodGhpcy4jY29udGFpbmVyKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1ibHVlLWNvYWxpdGlvbi1jb2xvclwiKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVDb2FsaXRpb24oXCJibHVlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgZ2V0QWN0aXZlQ29hbGl0aW9uLCBzZXRBY3RpdmVDb2FsaXRpb24gfSBmcm9tIFwiLi5cIjtcclxuaW1wb3J0IHsgZGVnMnJhZCB9IGZyb20gXCIuLi9vdGhlci91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbldoZWVsIHtcclxuICAgICNjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICNkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuI2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgICAgICB0aGlzLiNkaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuI2NvbnRhaW5lciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2NvYWxpdGlvbi1zd2l0Y2hcIik/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB0aGlzLiNvblN3aXRjaChlKSlcclxuICAgICAgICAgICAgdGhpcy4jZGlzcGxheSA9IHRoaXMuI2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5O1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdyh4OiBudW1iZXIsIHk6IG51bWJlciwgb3B0aW9uczogYW55LCBzaG93Q29hbGl0aW9uOiBib29sZWFuKSB7XHJcbiAgICAgICAgLyogSGlkZSB0byByZW1vdmUgYnV0dG9ucywgaWYgcHJlc2VudCAqL1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSB0aGlzLiNkaXNwbGF5O1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUubGVmdCA9IHggLSAxMTAgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5zdHlsZS50b3AgPSB5IC0gMTEwICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFuZ3VsYXJTaXplID0gMzYwIC8gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciByID0gODA7XHJcblxyXG4gICAgICAgICAgICAvKiBDcmVhdGUgdGhlIGJ1dHRvbnMgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQgaWQgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChcInNlbGVjdGlvbi13aGVlbC1idXR0b25cIik7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IHggLSAyNSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSB5IC0gMjUgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gb3B0aW9uc1tpZF0uY2FsbGJhY2soZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBwYXJzZUludChpZCkgKiBhbmd1bGFyU2l6ZTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IHggKyByICogTWF0aC5zaW4oZGVnMnJhZChhbmdsZSkpIC0gMjUgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0geSAtIHIgKiBNYXRoLmNvcyhkZWcycmFkKGFuZ2xlKSkgLSAyNSArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG4gICAgICAgICAgICAgICAgaW1hZ2UuY2xhc3NMaXN0LmFkZChcInNlbGVjdGlvbi13aGVlbC1pbWFnZVwiKTtcclxuICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IGBpbWFnZXMvYnV0dG9ucy8ke29wdGlvbnNbaWRdLnNyY31gXHJcbiAgICAgICAgICAgICAgICBpbWFnZS50aXRsZSA9IG9wdGlvbnNbaWRdLnRvb2x0aXA7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ3RpbnQnIGluIG9wdGlvbnNbaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgb3B0aW9uc1tpZF0udGludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnV0dG9uLmFwcGVuZENoaWxkKGltYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogSGlkZSB0aGUgY29hbGl0aW9uIHN3aXRjaCBpZiByZXF1aXJlZCAqL1xyXG4gICAgICAgICAgICB2YXIgc3dpdGNoQ29udGFpbmVyID0gPEhUTUxFbGVtZW50PnRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2NvYWxpdGlvbi1zd2l0Y2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICBpZiAoc2hvd0NvYWxpdGlvbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3RpdmUtY29hbGl0aW9uLWNvbG9yJywgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNjb250YWluZXIpLmdldFByb3BlcnR5VmFsdWUoXCItLW5ldXRyYWwtY29hbGl0aW9uLWNvbG9yXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdldEFjdGl2ZUNvYWxpdGlvbigpID09IFwiYmx1ZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3RpdmUtY29hbGl0aW9uLWNvbG9yJywgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNjb250YWluZXIpLmdldFByb3BlcnR5VmFsdWUoXCItLWJsdWUtY29hbGl0aW9uLWNvbG9yXCIpKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWN0aXZlLWNvYWxpdGlvbi1jb2xvcicsIGdldENvbXB1dGVkU3R5bGUodGhpcy4jY29udGFpbmVyKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1yZWQtY29hbGl0aW9uLWNvbG9yXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoaWRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICB2YXIgYnV0dG9ucyA9IHRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLnNlbGVjdGlvbi13aGVlbC1idXR0b25cIik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgI29uU3dpdGNoKGU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3RpdmUtY29hbGl0aW9uLWNvbG9yJywgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNjb250YWluZXIpLmdldFByb3BlcnR5VmFsdWUoXCItLXJlZC1jb2FsaXRpb24tY29sb3JcIikpO1xyXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlQ29hbGl0aW9uKFwicmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjdGl2ZS1jb2FsaXRpb24tY29sb3InLCBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2NvbnRhaW5lcikuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmx1ZS1jb2FsaXRpb24tY29sb3JcIikpO1xyXG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlQ29hbGl0aW9uKFwiYmx1ZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCdcclxuaW1wb3J0IHsgZ2V0VW5pdHNNYW5hZ2VyLCBzZXRDb25uZWN0ZWQgfSBmcm9tICcuLic7XHJcbmltcG9ydCB7IENvbnZlcnRERFRvRE1TIH0gZnJvbSAnLi4vb3RoZXIvdXRpbHMnO1xyXG5cclxuLyogRWRpdCBoZXJlIHRvIGNoYW5nZSBzZXJ2ZXIgYWRkcmVzcyAqL1xyXG52YXIgUkVTVGFkZHJlc3MgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMDAvcmVzdGRlbW9cIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhRnJvbURDUyhjYWxsYmFjazogQ2FsbGFibGVGdW5jdGlvbikge1xyXG4gICAgLyogUmVxdWVzdCB0aGUgdXBkYXRlZCB1bml0IGRhdGEgZnJvbSB0aGUgc2VydmVyICovXHJcbiAgICB2YXIgeG1sSHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeG1sSHR0cC5vcGVuKFwiR0VUXCIsIFJFU1RhZGRyZXNzLCB0cnVlKTtcclxuXHJcbiAgICB4bWxIdHRwLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHhtbEh0dHAucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICBjYWxsYmFjayhkYXRhKTtcclxuICAgICAgICBzZXRDb25uZWN0ZWQodHJ1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHhtbEh0dHAub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBYTUxIdHRwUmVxdWVzdFwiKTtcclxuICAgICAgICBzZXRDb25uZWN0ZWQoZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIHhtbEh0dHAuc2VuZChudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZERlc3RpbmF0aW9uKElEOiBudW1iZXIsIHBhdGg6IGFueSkge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICB2YXIgY29tbWFuZCA9IHsgXCJJRFwiOiBJRCwgXCJwYXRoXCI6IHBhdGggfVxyXG4gICAgdmFyIGRhdGEgPSB7IFwic2V0UGF0aFwiOiBjb21tYW5kIH1cclxuXHJcbiAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGF3blNtb2tlKGNvbG9yOiBzdHJpbmcsIGxhdGxuZzogTC5MYXRMbmcpIHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWRkZWQgXCIgKyBjb2xvciArIFwiIHNtb2tlIGF0IFwiICsgQ29udmVydEREVG9ETVMobGF0bG5nLmxhdCwgZmFsc2UpICsgXCIgXCIgKyBDb252ZXJ0RERUb0RNUyhsYXRsbmcubG5nLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY29tbWFuZCA9IHsgXCJjb2xvclwiOiBjb2xvciwgXCJsb2NhdGlvblwiOiBsYXRsbmcgfTtcclxuICAgIHZhciBkYXRhID0geyBcInNtb2tlXCI6IGNvbW1hbmQgfVxyXG5cclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNwYXduR3JvdW5kVW5pdCh0eXBlOiBzdHJpbmcsIGxhdGxuZzogTC5MYXRMbmcsIGNvYWxpdGlvbjogc3RyaW5nKSB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbihcIlBVVFwiLCBSRVNUYWRkcmVzcyk7XHJcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFkZGVkIFwiICsgY29hbGl0aW9uICsgXCIgXCIgKyB0eXBlICsgXCIgYXQgXCIgKyBDb252ZXJ0RERUb0RNUyhsYXRsbmcubGF0LCBmYWxzZSkgKyBcIiBcIiArIENvbnZlcnRERFRvRE1TKGxhdGxuZy5sbmcsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb21tYW5kID0geyBcInR5cGVcIjogdHlwZSwgXCJsb2NhdGlvblwiOiBsYXRsbmcsIFwiY29hbGl0aW9uXCI6IGNvYWxpdGlvbiB9O1xyXG4gICAgdmFyIGRhdGEgPSB7IFwic3Bhd25Hcm91bmRcIjogY29tbWFuZCB9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25BaXJjcmFmdCh0eXBlOiBzdHJpbmcsIGxhdGxuZzogTC5MYXRMbmcsIGNvYWxpdGlvbjogc3RyaW5nLCBwYXlsb2FkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsIGFpcmJhc2VOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZGRlZCBcIiArIGNvYWxpdGlvbiArIFwiIFwiICsgdHlwZSArIFwiIGF0IFwiICsgQ29udmVydEREVG9ETVMobGF0bG5nLmxhdCwgZmFsc2UpICsgXCIgXCIgKyBDb252ZXJ0RERUb0RNUyhsYXRsbmcubG5nLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY29tbWFuZCA9IHsgXCJ0eXBlXCI6IHR5cGUsIFwibG9jYXRpb25cIjogbGF0bG5nLCBcImNvYWxpdGlvblwiOiBjb2FsaXRpb24sIFwicGF5bG9hZE5hbWVcIjogcGF5bG9hZE5hbWUgIT0gbnVsbD8gcGF5bG9hZE5hbWU6IFwiXCIsIFwiYWlyYmFzZU5hbWVcIjogYWlyYmFzZU5hbWUgIT0gbnVsbD8gYWlyYmFzZU5hbWU6IFwiXCJ9O1xyXG4gICAgdmFyIGRhdGEgPSB7IFwic3Bhd25BaXJcIjogY29tbWFuZCB9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNrVW5pdChJRDogbnVtYmVyLCB0YXJnZXRJRDogbnVtYmVyKSB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbihcIlBVVFwiLCBSRVNUYWRkcmVzcyk7XHJcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuaXQgXCIgKyBnZXRVbml0c01hbmFnZXIoKS5nZXRVbml0QnlJRChJRCkudW5pdE5hbWUgKyBcIiBhdHRhY2sgXCIgKyBnZXRVbml0c01hbmFnZXIoKS5nZXRVbml0QnlJRCh0YXJnZXRJRCkudW5pdE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSB7IFwiSURcIjogSUQsIFwidGFyZ2V0SURcIjogdGFyZ2V0SUQgfTtcclxuICAgIHZhciBkYXRhID0geyBcImF0dGFja1VuaXRcIjogY29tbWFuZCB9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVVbml0KElEOiBudW1iZXIpIHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVW5pdCBcIiArIGdldFVuaXRzTWFuYWdlcigpLmdldFVuaXRCeUlEKElEKS51bml0TmFtZSArIFwiIGNsb25lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb21tYW5kID0geyBcIklEXCI6IElEIH07XHJcbiAgICB2YXIgZGF0YSA9IHsgXCJjbG9uZVVuaXRcIjogY29tbWFuZCB9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU3BlZWQoSUQ6IG51bWJlciwgc3BlZWRDaGFuZ2U6IHN0cmluZykge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZ2V0VW5pdHNNYW5hZ2VyKCkuZ2V0VW5pdEJ5SUQoSUQpLnVuaXROYW1lICsgXCIgc3BlZWQgY2hhbmdlIHJlcXVlc3Q6IFwiICsgc3BlZWRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgIFxyXG4gICAgdmFyIGNvbW1hbmQgPSB7XCJJRFwiOiBJRCwgXCJjaGFuZ2VcIjogc3BlZWRDaGFuZ2V9XHJcbiAgICB2YXIgZGF0YSA9IHtcImNoYW5nZVNwZWVkXCI6IGNvbW1hbmR9XHJcbiAgIFxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQWx0aXR1ZGUoSUQ6IG51bWJlciwgYWx0aXR1ZGVDaGFuZ2U6IHN0cmluZykge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZ2V0VW5pdHNNYW5hZ2VyKCkuZ2V0VW5pdEJ5SUQoSUQpLnVuaXROYW1lICsgXCIgYWx0aXR1ZGUgY2hhbmdlIHJlcXVlc3Q6IFwiICsgYWx0aXR1ZGVDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSB7XCJJRFwiOiBJRCwgXCJjaGFuZ2VcIjogYWx0aXR1ZGVDaGFuZ2V9XHJcbiAgICB2YXIgZGF0YSA9IHtcImNoYW5nZUFsdGl0dWRlXCI6IGNvbW1hbmR9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59IiwiaW1wb3J0IHsgTWFwIH0gZnJvbSBcIi4vbWFwL21hcFwiXHJcbmltcG9ydCB7IGdldERhdGFGcm9tRENTIH0gZnJvbSBcIi4vZGNzL2Rjc1wiXHJcbmltcG9ydCB7IFNlbGVjdGlvbldoZWVsIH0gZnJvbSBcIi4vY29udHJvbHMvc2VsZWN0aW9ud2hlZWxcIjtcclxuaW1wb3J0IHsgVW5pdHNNYW5hZ2VyIH0gZnJvbSBcIi4vdW5pdHMvdW5pdHNtYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFVuaXRJbmZvUGFuZWwgfSBmcm9tIFwiLi9wYW5lbHMvdW5pdGluZm9wYW5lbFwiO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25TY3JvbGwgfSBmcm9tIFwiLi9jb250cm9scy9zZWxlY3Rpb25zY3JvbGxcIjtcclxuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi9jb250cm9scy9kcm9wZG93blwiO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdHVzUGFuZWwgfSBmcm9tIFwiLi9wYW5lbHMvY29ubmVjdGlvbnN0YXR1c3BhbmVsXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2NvbnRyb2xzL2J1dHRvblwiO1xyXG5pbXBvcnQgeyBNaXNzaW9uRGF0YSB9IGZyb20gXCIuL21pc3Npb25kYXRhL21pc3Npb25kYXRhXCI7XHJcblxyXG4vKiBUT0RPOiBzaG91bGQgdGhpcyBiZSBhIGNsYXNzPyAqL1xyXG52YXIgbWFwOiBNYXA7XHJcbnZhciBzZWxlY3Rpb25XaGVlbDogU2VsZWN0aW9uV2hlZWw7XHJcbnZhciBzZWxlY3Rpb25TY3JvbGw6IFNlbGVjdGlvblNjcm9sbDtcclxudmFyIHVuaXRzTWFuYWdlcjogVW5pdHNNYW5hZ2VyO1xyXG52YXIgdW5pdEluZm9QYW5lbDogVW5pdEluZm9QYW5lbDtcclxudmFyIGFjdGl2ZUNvYWxpdGlvbjogc3RyaW5nO1xyXG52YXIgc2NlbmFyaW9Ecm9wZG93bjogRHJvcGRvd247XHJcbnZhciBtYXBTb3VyY2VEcm9wZG93bjogRHJvcGRvd247XHJcbnZhciBjb25uZWN0ZWQ6IGJvb2xlYW47XHJcbnZhciBjb25uZWN0aW9uU3RhdHVzUGFuZWw6IENvbm5lY3Rpb25TdGF0dXNQYW5lbDtcclxudmFyIG1pc3Npb25EYXRhOiBNaXNzaW9uRGF0YTtcclxuXHJcbnZhciBzbG93QnV0dG9uOiBCdXR0b247XHJcbnZhciBmYXN0QnV0dG9uOiBCdXR0b247XHJcbnZhciBjbGltYkJ1dHRvbjogQnV0dG9uO1xyXG52YXIgZGVzY2VuZEJ1dHRvbjogQnV0dG9uO1xyXG52YXIgdXNlclZpc2liaWxpdHlCdXR0b246IEJ1dHRvbjtcclxudmFyIGFpVmlzaWJpbGl0eUJ1dHRvbjogQnV0dG9uO1xyXG52YXIgd2VhcG9uVmlzaWJpbGl0eUJ1dHRvbjogQnV0dG9uO1xyXG52YXIgZGVhZFZpc2liaWxpdHlCdXR0b246IEJ1dHRvbjtcclxuXHJcbmZ1bmN0aW9uIHNldHVwKCkge1xyXG4gICAgLyogSW5pdGlhbGl6ZSAqL1xyXG4gICAgbWFwID0gbmV3IE1hcCgnbWFwLWNvbnRhaW5lcicpO1xyXG4gICAgc2VsZWN0aW9uV2hlZWwgPSBuZXcgU2VsZWN0aW9uV2hlZWwoXCJzZWxlY3Rpb24td2hlZWxcIik7XHJcbiAgICBzZWxlY3Rpb25TY3JvbGwgPSBuZXcgU2VsZWN0aW9uU2Nyb2xsKFwic2VsZWN0aW9uLXNjcm9sbFwiKTtcclxuICAgIHVuaXRzTWFuYWdlciA9IG5ldyBVbml0c01hbmFnZXIoKTtcclxuICAgIHVuaXRJbmZvUGFuZWwgPSBuZXcgVW5pdEluZm9QYW5lbChcInVuaXQtaW5mby1wYW5lbFwiKTtcclxuICAgIHNjZW5hcmlvRHJvcGRvd24gPSBuZXcgRHJvcGRvd24oXCJzY2VuYXJpby1kcm9wZG93blwiLCBbXCJDYXVjYXN1c1wiLCBcIlN5cmlhXCIsIFwiTWFyaWFuYXNcIiwgXCJOZXZhZGFcIiwgXCJTb3V0aCBBdGxhbnRpY1wiLCBcIlRoZSBjaGFubmVsXCJdLCAoKSA9PiB7IH0pO1xyXG4gICAgbWFwU291cmNlRHJvcGRvd24gPSBuZXcgRHJvcGRvd24oXCJtYXAtc291cmNlLWRyb3Bkb3duXCIsIG1hcC5nZXRMYXllcnMoKSwgKG9wdGlvbjogc3RyaW5nKSA9PiBtYXAuc2V0TGF5ZXIob3B0aW9uKSk7XHJcbiAgICBjb25uZWN0aW9uU3RhdHVzUGFuZWwgPSBuZXcgQ29ubmVjdGlvblN0YXR1c1BhbmVsKFwiY29ubmVjdGlvbi1zdGF0dXMtcGFuZWxcIik7XHJcbiAgICBtaXNzaW9uRGF0YSA9IG5ldyBNaXNzaW9uRGF0YSgpO1xyXG5cclxuICAgIC8qIFVuaXQgY29udHJvbCBidXR0b25zICovXHJcbiAgICBzbG93QnV0dG9uID0gbmV3IEJ1dHRvbihcInNsb3ctYnV0dG9uXCIsIFtcImltYWdlcy9idXR0b25zL3Nsb3cuc3ZnXCJdLCAoKSA9PiB7IGdldFVuaXRzTWFuYWdlcigpLnNlbGVjdGVkVW5pdHNDaGFuZ2VTcGVlZChcInNsb3dcIik7IH0pO1xyXG4gICAgZmFzdEJ1dHRvbiA9IG5ldyBCdXR0b24oXCJmYXN0LWJ1dHRvblwiLCBbXCJpbWFnZXMvYnV0dG9ucy9mYXN0LnN2Z1wiXSwgKCkgPT4geyBnZXRVbml0c01hbmFnZXIoKS5zZWxlY3RlZFVuaXRzQ2hhbmdlU3BlZWQoXCJmYXN0XCIpOyB9KTtcclxuICAgIGNsaW1iQnV0dG9uID0gbmV3IEJ1dHRvbihcImNsaW1iLWJ1dHRvblwiLCBbXCJpbWFnZXMvYnV0dG9ucy9jbGltYi5zdmdcIl0sICgpID0+IHsgZ2V0VW5pdHNNYW5hZ2VyKCkuc2VsZWN0ZWRVbml0c0NoYW5nZUFsdGl0dWRlKFwiY2xpbWJcIik7IH0pO1xyXG4gICAgZGVzY2VuZEJ1dHRvbiA9IG5ldyBCdXR0b24oXCJkZXNjZW5kLWJ1dHRvblwiLCBbXCJpbWFnZXMvYnV0dG9ucy9kZXNjZW5kLnN2Z1wiXSwgKCkgPT4geyBnZXRVbml0c01hbmFnZXIoKS5zZWxlY3RlZFVuaXRzQ2hhbmdlQWx0aXR1ZGUoXCJkZXNjZW5kXCIpOyB9KTtcclxuXHJcbiAgICAvKiBWaXNpYmlsaXR5IGJ1dHRvbnMgKi9cclxuICAgIHVzZXJWaXNpYmlsaXR5QnV0dG9uID0gbmV3IEJ1dHRvbihcInVzZXItdmlzaWJpbGl0eS1idXR0b25cIiwgW1wiaW1hZ2VzL2J1dHRvbnMvdXNlci1mdWxsLnN2Z1wiLCBcImltYWdlcy9idXR0b25zL3VzZXItcGFydGlhbC5zdmdcIiwgXCJpbWFnZXMvYnV0dG9ucy91c2VyLW5vbmUuc3ZnXCIsIFwiaW1hZ2VzL2J1dHRvbnMvdXNlci1oaWRkZW4uc3ZnXCJdLCAoKSA9PiB7IH0pO1xyXG4gICAgYWlWaXNpYmlsaXR5QnV0dG9uID0gbmV3IEJ1dHRvbihcImFpLXZpc2liaWxpdHktYnV0dG9uXCIsIFtcImltYWdlcy9idXR0b25zL2FpLWZ1bGwuc3ZnXCIsIFwiaW1hZ2VzL2J1dHRvbnMvYWktcGFydGlhbC5zdmdcIiwgXCJpbWFnZXMvYnV0dG9ucy9haS1ub25lLnN2Z1wiLCBcImltYWdlcy9idXR0b25zL2FpLWhpZGRlbi5zdmdcIl0sICgpID0+IHsgfSk7XHJcbiAgICB3ZWFwb25WaXNpYmlsaXR5QnV0dG9uID0gbmV3IEJ1dHRvbihcIndlYXBvbi12aXNpYmlsaXR5LWJ1dHRvblwiLCBbXCJpbWFnZXMvYnV0dG9ucy93ZWFwb24tcGFydGlhbC5zdmdcIiwgXCJpbWFnZXMvYnV0dG9ucy93ZWFwb24tbm9uZS5zdmdcIiwgXCJpbWFnZXMvYnV0dG9ucy93ZWFwb24taGlkZGVuLnN2Z1wiXSwgKCkgPT4geyB9KTtcclxuICAgIGRlYWRWaXNpYmlsaXR5QnV0dG9uID0gbmV3IEJ1dHRvbihcImRlYWQtdmlzaWJpbGl0eS1idXR0b25cIiwgW1wiaW1hZ2VzL2J1dHRvbnMvZGVhZC5zdmdcIiwgXCJpbWFnZXMvYnV0dG9ucy9kZWFkLWhpZGRlbi5zdmdcIl0sICgpID0+IHsgfSk7XHJcblxyXG4gICAgYWlWaXNpYmlsaXR5QnV0dG9uLnNldFN0YXRlKDEpO1xyXG4gICAgd2VhcG9uVmlzaWJpbGl0eUJ1dHRvbi5zZXRTdGF0ZSgxKTtcclxuICAgIGRlYWRWaXNpYmlsaXR5QnV0dG9uLnNldFN0YXRlKDEpO1xyXG5cclxuICAgIC8qIERlZmF1bHQgdmFsdWVzICovXHJcbiAgICBhY3RpdmVDb2FsaXRpb24gPSBcImJsdWVcIjtcclxuICAgIGNvbm5lY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgIHJlcXVlc3RVcGRhdGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZSgpIHtcclxuICAgIGdldERhdGFGcm9tRENTKHVwZGF0ZSk7XHJcbiAgICAvKiBNYWluIHVwZGF0ZSByYXRlID0gMjUwbXMgaXMgbWluaW11bSB0aW1lLCBlcXVhbCB0byBzZXJ2ZXIgdXBkYXRlIHRpbWUuICovXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlcXVlc3RVcGRhdGUoKSwgZ2V0Q29ubmVjdGVkKCkgPyAyNTAgOiAxMDAwKTtcclxuICAgIGNvbm5lY3Rpb25TdGF0dXNQYW5lbC51cGRhdGUoZ2V0Q29ubmVjdGVkKCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlKGRhdGE6IEpTT04pIHtcclxuICAgIHVuaXRzTWFuYWdlci51cGRhdGUoZGF0YSk7XHJcbiAgICBtaXNzaW9uRGF0YS51cGRhdGUoZGF0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXAoKSB7XHJcbiAgICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uV2hlZWwoKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uV2hlZWw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25TY3JvbGwoKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uU2Nyb2xsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdHNNYW5hZ2VyKCkge1xyXG4gICAgcmV0dXJuIHVuaXRzTWFuYWdlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRJbmZvUGFuZWwoKSB7XHJcbiAgICByZXR1cm4gdW5pdEluZm9QYW5lbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjdGl2ZUNvYWxpdGlvbihuZXdBY3RpdmVDb2FsaXRpb246IHN0cmluZykge1xyXG4gICAgYWN0aXZlQ29hbGl0aW9uID0gbmV3QWN0aXZlQ29hbGl0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlQ29hbGl0aW9uKCkge1xyXG4gICAgcmV0dXJuIGFjdGl2ZUNvYWxpdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbm5lY3RlZChuZXdDb25uZWN0ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGNvbm5lY3RlZCA9IG5ld0Nvbm5lY3RlZFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkKCkge1xyXG4gICAgcmV0dXJuIGNvbm5lY3RlZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2liaWxpdHlTZXR0aW5ncygpIHtcclxuICAgIHZhciB2aXNpYmlsaXR5ID0ge1xyXG4gICAgICAgIHVzZXI6IFwiXCIsXHJcbiAgICAgICAgYWk6IFwiXCIsXHJcbiAgICAgICAgd2VhcG9uOiBcIlwiLFxyXG4gICAgICAgIGRlYWQ6IFwiXCJcclxuICAgIH07XHJcblxyXG4gICAgc3dpdGNoICh1c2VyVmlzaWJpbGl0eUJ1dHRvbi5nZXRTdGF0ZSgpKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LnVzZXIgPSBcImZ1bGxcIjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LnVzZXIgPSBcInBhcnRpYWxcIjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LnVzZXIgPSBcIm5vbmVcIjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LnVzZXIgPSBcImhpZGRlblwiOyBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGFpVmlzaWJpbGl0eUJ1dHRvbi5nZXRTdGF0ZSgpKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LmFpID0gXCJmdWxsXCI7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdmlzaWJpbGl0eS5haSA9IFwicGFydGlhbFwiOyBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHkuYWkgPSBcIm5vbmVcIjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LmFpID0gXCJoaWRkZW5cIjsgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh3ZWFwb25WaXNpYmlsaXR5QnV0dG9uLmdldFN0YXRlKCkpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHkud2VhcG9uID0gXCJwYXJ0aWFsXCI7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdmlzaWJpbGl0eS53ZWFwb24gPSBcIm5vbmVcIjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5LndlYXBvbiA9IFwiaGlkZGVuXCI7IGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZGVhZFZpc2liaWxpdHlCdXR0b24uZ2V0U3RhdGUoKSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgdmlzaWJpbGl0eS5kZWFkID0gXCJub25lXCI7IGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdmlzaWJpbGl0eS5kZWFkID0gXCJoaWRkZW5cIjsgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlzaWJpbGl0eTtcclxufVxyXG5cclxud2luZG93Lm9ubG9hZCA9IHNldHVwOyIsImltcG9ydCB7IE1hcCB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgSGFuZGxlcn0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBEb21VdGlsIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBEb21FdmVudCB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgTGF0TG5nQm91bmRzIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBCb3VuZHMgfSAgZnJvbSAnbGVhZmxldCc7XG5cbmV4cG9ydCB2YXIgQm94U2VsZWN0ID0gSGFuZGxlci5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobWFwOiBNYXApIHtcblx0XHR0aGlzLl9tYXAgPSBtYXA7XG5cdFx0dGhpcy5fY29udGFpbmVyID0gbWFwLmdldENvbnRhaW5lcigpO1xuXHRcdHRoaXMuX3BhbmUgPSBtYXAuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZTtcblx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG5cdFx0bWFwLm9uKCd1bmxvYWQnLCB0aGlzLl9kZXN0cm95LCB0aGlzKTtcblx0fSxcblxuXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuXHRcdERvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwgJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duLCB0aGlzKTtcblx0fSxcblxuXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuXHRcdERvbUV2ZW50Lm9mZih0aGlzLl9jb250YWluZXIsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdGhpcyk7XG5cdH0sXG5cblx0bW92ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdGhpcy5fbW92ZWQ7XG5cdH0sXG5cblx0X2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcblx0XHREb21VdGlsLnJlbW92ZSh0aGlzLl9wYW5lKTtcblx0XHRkZWxldGUgdGhpcy5fcGFuZTtcblx0fSxcblxuXHRfcmVzZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gMDtcblx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xuXHR9LFxuXG5cdF9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0aGlzLl9yZXNldFN0YXRlVGltZW91dCAhPT0gMCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KTtcblx0XHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gMDtcblx0XHR9XG5cdH0sXG5cblx0X29uTW91c2VEb3duOiBmdW5jdGlvbiAoZTogYW55KSB7XG5cdFx0aWYgKCgoZS53aGljaCAhPT0gMykgJiYgKGUuYnV0dG9uICE9PSAyKSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0XHQvLyBDbGVhciB0aGUgZGVmZXJyZWQgcmVzZXRTdGF0ZSBpZiBpdCBoYXNuJ3QgZXhlY3V0ZWQgeWV0LCBvdGhlcndpc2UgaXRcblx0XHQvLyB3aWxsIGludGVycnVwdCB0aGUgaW50ZXJhY3Rpb24gYW5kIG9ycGhhbiBhIGJveCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuXG5cdFx0dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKTtcblx0XHR0aGlzLl9yZXNldFN0YXRlKCk7XG5cblx0XHREb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCk7XG5cdFx0RG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCk7XG5cblx0XHR0aGlzLl9zdGFydFBvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG5cdFx0Ly9AdHMtaWdub3JlXG5cdFx0RG9tRXZlbnQub24oZG9jdW1lbnQsIHtcblx0XHRcdGNvbnRleHRtZW51OiBEb21FdmVudC5zdG9wLFxuXHRcdFx0bW91c2Vtb3ZlOiB0aGlzLl9vbk1vdXNlTW92ZSxcblx0XHRcdG1vdXNldXA6IHRoaXMuX29uTW91c2VVcCxcblx0XHRcdGtleWRvd246IHRoaXMuX29uS2V5RG93blxuXHRcdH0sIHRoaXMpO1xuXHR9LFxuXG5cdF9vbk1vdXNlTW92ZTogZnVuY3Rpb24gKGU6IGFueSkge1xuXHRcdGlmICghdGhpcy5fbW92ZWQpIHtcblx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcblxuXHRcdFx0dGhpcy5fYm94ID0gRG9tVXRpbC5jcmVhdGUoJ2RpdicsICdsZWFmbGV0LXpvb20tYm94JywgdGhpcy5fY29udGFpbmVyKTtcblx0XHRcdERvbVV0aWwuYWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1jcm9zc2hhaXInKTtcblxuXHRcdFx0dGhpcy5fbWFwLmZpcmUoJ2JveHpvb21zdGFydCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3BvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG5cdFx0dmFyIGJvdW5kcyA9IG5ldyBCb3VuZHModGhpcy5fcG9pbnQsIHRoaXMuX3N0YXJ0UG9pbnQpLFxuXHRcdCAgICBzaXplID0gYm91bmRzLmdldFNpemUoKTtcblxuXHRcdGlmIChib3VuZHMubWluICE9IHVuZGVmaW5lZClcblx0XHRcdERvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fYm94LCBib3VuZHMubWluKTtcblxuXHRcdHRoaXMuX2JveC5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xuXHRcdHRoaXMuX2JveC5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xuXHR9LFxuXG5cdF9maW5pc2g6IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodGhpcy5fbW92ZWQpIHtcblx0XHRcdERvbVV0aWwucmVtb3ZlKHRoaXMuX2JveCk7XG5cdFx0XHREb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY3Jvc3NoYWlyJyk7XG5cdFx0fVxuXG5cdFx0RG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCk7XG5cdFx0RG9tVXRpbC5lbmFibGVJbWFnZURyYWcoKTtcblxuXHRcdC8vQHRzLWlnbm9yZVxuXHRcdERvbUV2ZW50Lm9mZihkb2N1bWVudCwge1xuXHRcdFx0Y29udGV4dG1lbnU6IERvbUV2ZW50LnN0b3AsXG5cdFx0XHRtb3VzZW1vdmU6IHRoaXMuX29uTW91c2VNb3ZlLFxuXHRcdFx0bW91c2V1cDogdGhpcy5fb25Nb3VzZVVwLFxuXHRcdFx0a2V5ZG93bjogdGhpcy5fb25LZXlEb3duXG5cdFx0fSwgdGhpcyk7XG5cdH0sXG5cblx0X29uTW91c2VVcDogZnVuY3Rpb24gKGU6IGFueSkge1xuXHRcdGlmICgoZS53aGljaCAhPT0gMykgJiYgKGUuYnV0dG9uICE9PSAyKSkgeyByZXR1cm47IH1cblxuXHRcdHRoaXMuX2ZpbmlzaCgpO1xuICAgICAgICBcblx0XHRpZiAoIXRoaXMuX21vdmVkKSB7IHJldHVybjsgfVxuXHRcdC8vIFBvc3Rwb25lIHRvIG5leHQgSlMgdGljayBzbyBpbnRlcm5hbCBjbGljayBldmVudCBoYW5kbGluZ1xuXHRcdC8vIHN0aWxsIHNlZSBpdCBhcyBcIm1vdmVkXCIuXG5cdFx0c2V0VGltZW91dChVdGlsLmJpbmQodGhpcy5fcmVzZXRTdGF0ZSwgdGhpcyksIDApO1xuXHRcdHZhciBib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKFxuXHRcdFx0dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRQb2ludCksXG5cdFx0XHR0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludCkpO1xuXHRcblx0XHR0aGlzLl9tYXAuZmlyZSgnc2VsZWN0aW9uZW5kJywge3NlbGVjdGlvbkJvdW5kczogYm91bmRzfSk7XG5cdH0sXG5cblx0X29uS2V5RG93bjogZnVuY3Rpb24gKGU6IGFueSkge1xuXHRcdGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG5cdFx0XHR0aGlzLl9maW5pc2goKTtcblx0XHRcdHRoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCk7XG5cdFx0XHR0aGlzLl9yZXNldFN0YXRlKCk7XG5cdFx0fVxuXHR9XG59KTtcblxuIiwiaW1wb3J0ICogYXMgTCBmcm9tIFwibGVhZmxldFwiXHJcbmltcG9ydCB7IGdldFNlbGVjdGlvbldoZWVsLCBnZXRTZWxlY3Rpb25TY3JvbGwsIGdldFVuaXRzTWFuYWdlciwgZ2V0QWN0aXZlQ29hbGl0aW9uIH0gZnJvbSBcIi4uXCI7XHJcbmltcG9ydCB7IHNwYXduQWlyY3JhZnQsIHNwYXduR3JvdW5kVW5pdCwgc3Bhd25TbW9rZSB9IGZyb20gXCIuLi9kY3MvZGNzXCI7XHJcbmltcG9ydCB7IHBheWxvYWROYW1lcyB9IGZyb20gXCIuLi91bml0cy9wYXlsb2FkTmFtZXNcIjtcclxuaW1wb3J0IHsgdW5pdFR5cGVzIH0gZnJvbSBcIi4uL3VuaXRzL3VuaXRUeXBlc1wiO1xyXG5pbXBvcnQgeyBCb3hTZWxlY3QgfSBmcm9tIFwiLi9ib3hzZWxlY3RcIjtcclxuXHJcbkwuTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ2JveFNlbGVjdCcsIEJveFNlbGVjdCk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrRXZlbnQge1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgeTogbnVtYmVyO1xyXG4gICAgbGF0bG5nOiBMLkxhdExuZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTcGF3bkV2ZW50IGV4dGVuZHMgQ2xpY2tFdmVudHtcclxuICAgIGFpcmJhc2VOYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgY29hbGl0aW9uSUQ6IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXAgZXh0ZW5kcyBMLk1hcCB7XHJcbiAgICAjc3RhdGU6IHN0cmluZztcclxuICAgICNsYXllcj86IEwuVGlsZUxheWVyO1xyXG4gICAgI3ByZXZlbnRSaWdodENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAjcmlnaHRDbGlja1RpbWVyOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKElEOiBzdHJpbmcpIHtcclxuICAgICAgICAvKiBJbml0IHRoZSBsZWFmbGV0IG1hcCAqL1xyXG4gICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgIHN1cGVyKElELCB7IGRvdWJsZUNsaWNrWm9vbTogZmFsc2UsIHpvb21Db250cm9sOiBmYWxzZSwgYm94Wm9vbTogZmFsc2UsIGJveFNlbGVjdDogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLnNldFZpZXcoWzM3LjIzLCAtMTE1LjhdLCAxMik7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXIoXCJBcmNHSVMgU2F0ZWxsaXRlXCIpO1xyXG5cclxuICAgICAgICAvKiBJbml0IHRoZSBzdGF0ZSBtYWNoaW5lICovXHJcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBcIklETEVcIjtcclxuXHJcbiAgICAgICAgLyogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlcyAqL1xyXG4gICAgICAgIHRoaXMub24oXCJjbGlja1wiLCAoZTogYW55KSA9PiB0aGlzLiNvbkNsaWNrKGUpKTtcclxuICAgICAgICB0aGlzLm9uKFwiZGJsY2xpY2tcIiwgKGU6IGFueSkgPT4gdGhpcy4jb25Eb3VibGVDbGljayhlKSk7ICAgICAgXHJcbiAgICAgICAgdGhpcy5vbihcImNvbnRleHRtZW51XCIsIChlOiBhbnkpID0+IHRoaXMuI29uQ29udGV4dE1lbnUoZSkpO1xyXG4gICAgICAgIHRoaXMub24oJ3NlbGVjdGlvbmVuZCcsIChlOiBhbnkpID0+IHRoaXMuI29uU2VsZWN0aW9uRW5kKGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMYXllcihsYXllck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLiNsYXllciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTGF5ZXIodGhpcy4jbGF5ZXIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobGF5ZXJOYW1lID09IFwiQXJjR0lTIFNhdGVsbGl0ZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoXCJodHRwczovL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL1dvcmxkX0ltYWdlcnkvTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH1cIiwge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246IFwiVGlsZXMgJmNvcHk7IEVzcmkgJm1kYXNoOyBTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5XCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIlVTR1MgVG9wb1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8vYmFzZW1hcC5uYXRpb25hbG1hcC5nb3YvYXJjZ2lzL3Jlc3Qvc2VydmljZXMvVVNHU1RvcG8vTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH0nLCB7XHJcbiAgICAgICAgICAgICAgICBtYXhab29tOiAyMCxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAnVGlsZXMgY291cnRlc3kgb2YgdGhlIDxhIGhyZWY9XCJodHRwczovL3VzZ3MuZ292L1wiPlUuUy4gR2VvbG9naWNhbCBTdXJ2ZXk8L2E+J1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobGF5ZXJOYW1lID09IFwiT3BlblN0cmVldE1hcCBNYXBuaWtcIikge1xyXG4gICAgICAgICAgICB0aGlzLiNsYXllciA9IEwudGlsZUxheWVyKCdodHRwczovL3RpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywge1xyXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogMTksXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobGF5ZXJOYW1lID09IFwiT1BFTlZLYXJ0ZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8vdGlsZXNlcnZlci5tZW1vbWFwcy5kZS90aWxlZ2VuL3t6fS97eH0ve3l9LnBuZycsIHtcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDE4LFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICdNYXAgPGEgaHJlZj1cImh0dHBzOi8vbWVtb21hcHMuZGUvXCI+bWVtb21hcHMuZGU8L2E+IDxhIGhyZWY9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvXCI+Q0MtQlktU0E8L2E+LCBtYXAgZGF0YSAmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIkVzcmkuRGVMb3JtZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8vc2VydmVyLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvU3BlY2lhbHR5L0RlTG9ybWVfV29ybGRfQmFzZV9NYXAvTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH0nLCB7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJ1RpbGVzICZjb3B5OyBFc3JpICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnLFxyXG4gICAgICAgICAgICAgICAgbWluWm9vbTogMSxcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDExXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsYXllck5hbWUgPT0gXCJDeWNsT1NNXCIpIHtcclxuICAgICAgICAgICAgdGhpcy4jbGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS1jeWNsb3NtLm9wZW5zdHJlZXRtYXAuZnIvY3ljbG9zbS97en0ve3h9L3t5fS5wbmcnLCB7XHJcbiAgICAgICAgICAgICAgICBtYXhab29tOiAyMCxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAnPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9jeWNsb3NtL2N5Y2xvc20tY2FydG9jc3Mtc3R5bGUvcmVsZWFzZXNcIiB0aXRsZT1cIkN5Y2xPU00gLSBPcGVuIEJpY3ljbGUgcmVuZGVyXCI+Q3ljbE9TTTwvYT4gfCBNYXAgZGF0YTogJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNsYXllcj8uYWRkVG8odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGF5ZXJzKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBcmNHSVMgU2F0ZWxsaXRlXCIsIFwiVVNHUyBUb3BvXCIsIFwiT3BlblN0cmVldE1hcCBNYXBuaWtcIiwgXCJPUEVOVkthcnRlXCIsIFwiRXNyaS5EZUxvcm1lXCIsIFwiQ3ljbE9TTVwiXVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFN0YXRlIG1hY2hpbmUgKi9cclxuICAgIHNldFN0YXRlKHN0YXRlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHN0YXRlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4jc3RhdGUgPT09IFwiSURMRVwiKSB7XHJcbiAgICAgICAgICAgIEwuRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLmdldENvbnRhaW5lcigpLCdjcm9zc2hhaXItY3Vyc29yLWVuYWJsZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IFwiTU9WRV9VTklUXCIpIHtcclxuICAgICAgICAgICAgTC5Eb21VdGlsLmFkZENsYXNzKHRoaXMuZ2V0Q29udGFpbmVyKCksJ2Nyb3NzaGFpci1jdXJzb3ItZW5hYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gXCJBVFRBQ0tcIikge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IFwiRk9STUFUSU9OXCIpIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBTZWxlY3Rpb24gd2hlZWwgKi9cclxuICAgIHNob3dTZWxlY3Rpb25XaGVlbChlOiBDbGlja0V2ZW50IHwgU3Bhd25FdmVudCwgb3B0aW9uczogYW55LCBzaG93Q29hbGl0aW9uOiBib29sZWFuKSB7XHJcbiAgICAgICAgdmFyIHggPSBlLng7XHJcbiAgICAgICAgdmFyIHkgPSBlLnk7XHJcbiAgICAgICAgZ2V0U2VsZWN0aW9uV2hlZWwoKS5zaG93KHgsIHksIG9wdGlvbnMsIHNob3dDb2FsaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVTZWxlY3Rpb25XaGVlbCgpIHtcclxuICAgICAgICBnZXRTZWxlY3Rpb25XaGVlbCgpLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBTZWxlY3Rpb24gc2Nyb2xsICovXHJcbiAgICBzaG93U2VsZWN0aW9uU2Nyb2xsKGU6IENsaWNrRXZlbnQgfCBTcGF3bkV2ZW50LCBvcHRpb25zOiBhbnksIGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uLCBzaG93Q29hbGl0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgeCA9IGUueDtcclxuICAgICAgICB2YXIgeSA9IGUueTtcclxuICAgICAgICBnZXRTZWxlY3Rpb25TY3JvbGwoKS5zaG93KHgsIHksIG9wdGlvbnMsIGNhbGxiYWNrLCBzaG93Q29hbGl0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlU2VsZWN0aW9uU2Nyb2xsKCkge1xyXG4gICAgICAgIGdldFNlbGVjdGlvblNjcm9sbCgpLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBFdmVudCBoYW5kbGVycyAqL1xyXG4gICAgI29uQ2xpY2soZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICBpZiAodGhpcy4jc3RhdGUgPT09IFwiSURMRVwiKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gXCJNT1ZFX1VOSVRcIikge1xyXG4gICAgICAgICAgICBpZiAoIWUub3JpZ2luYWxFdmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBnZXRVbml0c01hbmFnZXIoKS5jbGVhckRlc3RpbmF0aW9ucygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdldFVuaXRzTWFuYWdlcigpLmFkZERlc3RpbmF0aW9uKGUubGF0bG5nKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAjb25Eb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgICAgICB2YXIgc3Bhd25FdmVudDogU3Bhd25FdmVudCA9IHt4OiBlLm9yaWdpbmFsRXZlbnQueCwgeTogZS5vcmlnaW5hbEV2ZW50LnksIGxhdGxuZzogZS5sYXRsbmcsIGFpcmJhc2VOYW1lOiBudWxsLCBjb2FsaXRpb25JRDogbnVsbH07XHJcbiAgICAgICAgaWYgKHRoaXMuI3N0YXRlID09IFwiSURMRVwiKSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gW1xyXG4gICAgICAgICAgICAgICAgeyBcInRvb2x0aXBcIjogXCJTcGF3biBhaXIgdW5pdFwiLCBcInNyY1wiOiBcInNwYXduQWlyLnBuZ1wiLCBcImNhbGxiYWNrXCI6ICgpID0+IHRoaXMuI2FpcmNyYWZ0U3Bhd25NZW51KHNwYXduRXZlbnQpIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwidG9vbHRpcFwiOiBcIlNwYXduIGdyb3VuZCB1bml0XCIsIFwic3JjXCI6IFwic3Bhd25Hcm91bmQucG5nXCIsIFwiY2FsbGJhY2tcIjogKCkgPT4gdGhpcy4jZ3JvdW5kVW5pdFNwYXduTWVudShzcGF3bkV2ZW50KSB9LFxyXG4gICAgICAgICAgICAgICAgeyBcInRvb2x0aXBcIjogXCJTbW9rZVwiLCBcInNyY1wiOiBcInNwYXduU21va2UucG5nXCIsIFwiY2FsbGJhY2tcIjogKCkgPT4gdGhpcy4jc21va2VTcGF3bk1lbnUoc3Bhd25FdmVudCkgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInRvb2x0aXBcIjogXCJFeHBsb3Npb25cIiwgXCJzcmNcIjogXCJzcGF3bkV4cGxvc2lvbi5wbmdcIiwgXCJjYWxsYmFja1wiOiAoKSA9PiB0aGlzLiNleHBsb3Npb25TcGF3bk1lbnUoZSkgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvblNjcm9sbChzcGF3bkV2ZW50LCBvcHRpb25zLCAoKSA9PiB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICNvbkNvbnRleHRNZW51KGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuI3JpZ2h0Q2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuI3ByZXZlbnRSaWdodENsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFwiSURMRVwiKTtcclxuICAgICAgICAgICAgICAgIGdldFVuaXRzTWFuYWdlcigpLmRlc2VsZWN0QWxsVW5pdHMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiNwcmV2ZW50UmlnaHRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgI29uU2VsZWN0aW9uRW5kKGU6IGFueSlcclxuICAgIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jcmlnaHRDbGlja1RpbWVyKTtcclxuICAgICAgICB0aGlzLiNwcmV2ZW50UmlnaHRDbGljayA9IHRydWU7XHJcbiAgICAgICAgZ2V0VW5pdHNNYW5hZ2VyKCkuc2VsZWN0RnJvbUJvdW5kcyhlLnNlbGVjdGlvbkJvdW5kcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU3Bhd24gZnJvbSBhaXIgYmFzZSAqL1xyXG4gICAgc3Bhd25Gcm9tQWlyYmFzZShlOiBTcGF3bkV2ZW50KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuI2FpcmNyYWZ0U3Bhd25NZW51KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFNwYXduaW5nIG1lbnVzICovXHJcbiAgICAjZ3JvdW5kVW5pdFNwYXduTWVudShlOiBTcGF3bkV2ZW50KSB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnSG93aXR6ZXInLCAgICdzcmMnOiAnc3Bhd25Ib3dpdHplci5wbmcnLCAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RHcm91bmRVbml0KGUsIFwiSG93aXR6ZXJzXCIpfSxcclxuICAgICAgICAgICAgeydjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdTQU0nLCAgICAgICAgJ3NyYyc6ICdzcGF3blNBTS5wbmcnLCAgICAgICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEdyb3VuZFVuaXQoZSwgXCJTQU1cIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ0lGVicsICAgICAgICAnc3JjJzogJ3NwYXduSUZWLnBuZycsICAgICAgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0R3JvdW5kVW5pdChlLCBcIklGVlwiKX0sXHJcbiAgICAgICAgICAgIHsnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnVGFuaycsICAgICAgICdzcmMnOiAnc3Bhd25UYW5rLnBuZycsICAgICAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RHcm91bmRVbml0KGUsIFwiVGFua3NcIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ01MUlMnLCAgICAgICAnc3JjJzogJ3NwYXduTUxSUy5wbmcnLCAgICAgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0R3JvdW5kVW5pdChlLCBcIk1MUlNcIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ1JhZGFyJywgICAgICAnc3JjJzogJ3NwYXduUmFkYXIucG5nJywgICAgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0R3JvdW5kVW5pdChlLCBcIlJhZGFyXCIpfSxcclxuICAgICAgICAgICAgeydjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdVbmFybWVkJywgICAgJ3NyYyc6ICdzcGF3blVuYXJtZWQucG5nJywgICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEdyb3VuZFVuaXQoZSwgXCJVbmFybWVkXCIpfVxyXG4gICAgICAgIF1cclxuICAgICAgICB0aGlzLnNob3dTZWxlY3Rpb25TY3JvbGwoZSwgb3B0aW9ucywgKCkgPT4ge30sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgICNzbW9rZVNwYXduTWVudShlOiBTcGF3bkV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgeyd0b29sdGlwJzogJ1JlZCBzbW9rZScsICAgICAgJ3NyYyc6ICdzcGF3blNtb2tlLnBuZycsICAnY2FsbGJhY2snOiAoKSA9PiB7dGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7IHNwYXduU21va2UoJ3JlZCcsIGUubGF0bG5nKX0sICd0aW50JzogJ3JlZCd9LFxyXG4gICAgICAgICAgICB7J3Rvb2x0aXAnOiAnV2hpdGUgc21va2UnLCAgICAnc3JjJzogJ3NwYXduU21va2UucG5nJywgICdjYWxsYmFjayc6ICgpID0+IHt0aGlzLmhpZGVTZWxlY3Rpb25XaGVlbCgpOyB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTsgc3Bhd25TbW9rZSgnd2hpdGUnLCBlLmxhdGxuZyl9LCAndGludCc6ICd3aGl0ZSd9LFxyXG4gICAgICAgICAgICB7J3Rvb2x0aXAnOiAnQmx1ZSBzbW9rZScsICAgICAnc3JjJzogJ3NwYXduU21va2UucG5nJywgICdjYWxsYmFjayc6ICgpID0+IHt0aGlzLmhpZGVTZWxlY3Rpb25XaGVlbCgpOyB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTsgc3Bhd25TbW9rZSgnYmx1ZScsIGUubGF0bG5nKX0sICd0aW50JzogJ2JsdWUnfSxcclxuICAgICAgICAgICAgeyd0b29sdGlwJzogJ0dyZWVuIHNtb2tlJywgICAgJ3NyYyc6ICdzcGF3blNtb2tlLnBuZycsICAnY2FsbGJhY2snOiAoKSA9PiB7dGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7IHNwYXduU21va2UoJ2dyZWVuJywgZS5sYXRsbmcpfSwgJ3RpbnQnOiAnZ3JlZW4nfSxcclxuICAgICAgICAgICAgeyd0b29sdGlwJzogJ09yYW5nZSBzbW9rZScsICAgJ3NyYyc6ICdzcGF3blNtb2tlLnBuZycsICAnY2FsbGJhY2snOiAoKSA9PiB7dGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7IHNwYXduU21va2UoJ29yYW5nZScsIGUubGF0bG5nKX0sICd0aW50JzogJ29yYW5nZSd9LFxyXG4gICAgICAgIF1cclxuICAgICAgICB0aGlzLnNob3dTZWxlY3Rpb25TY3JvbGwoZSwgb3B0aW9ucywgKCkgPT4ge30sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgICNleHBsb3Npb25TcGF3bk1lbnUoZTogU3Bhd25FdmVudCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAjYWlyY3JhZnRTcGF3bk1lbnUoZTogU3Bhd25FdmVudCkge1xyXG4gICAgICAgIHZhciBvcHRpb25zID0gW1xyXG4gICAgICAgICAgICB7ICdjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdDQVAnLCAnc3JjJzogJ3NwYXduQ0FQLnBuZycsICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEFpcmNyYWZ0KGUsIFwiQ0FQXCIpIH0sXHJcbiAgICAgICAgICAgIHsgJ2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ0NBUycsICdzcmMnOiAnc3Bhd25DQVMucG5nJywgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0QWlyY3JhZnQoZSwgXCJDQVNcIikgfSxcclxuICAgICAgICAgICAgeyAnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnVGFua2VyJywgJ3NyYyc6ICdzcGF3blRhbmtlci5wbmcnLCAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RBaXJjcmFmdChlLCBcInRhbmtlclwiKSB9LFxyXG4gICAgICAgICAgICB7ICdjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdBV0FDUycsICdzcmMnOiAnc3Bhd25BV0FDUy5wbmcnLCAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RBaXJjcmFmdChlLCBcImF3YWNzXCIpIH0sXHJcbiAgICAgICAgICAgIHsgJ2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ1N0cmlrZScsICdzcmMnOiAnc3Bhd25TdHJpa2UucG5nJywgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0QWlyY3JhZnQoZSwgXCJzdHJpa2VcIikgfSxcclxuICAgICAgICAgICAgeyAnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnRHJvbmUnLCAnc3JjJzogJ3NwYXduRHJvbmUucG5nJywgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0QWlyY3JhZnQoZSwgXCJkcm9uZVwiKSB9LFxyXG4gICAgICAgICAgICB7ICdjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdUcmFuc3BvcnQnLCAnc3JjJzogJ3NwYXduVHJhbnNwb3J0LnBuZycsICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEFpcmNyYWZ0KGUsIFwidHJhbnNwb3J0XCIpIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvblNjcm9sbChlLCBvcHRpb25zLCAoKSA9PiB7fSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU2hvdyB1bml0IHNlbGVjdGlvbiBmb3IgYWlyIHVuaXRzICovXHJcbiAgICAjc2VsZWN0QWlyY3JhZnQoZTogU3Bhd25FdmVudCwgZ3JvdXA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB1bml0VHlwZXMuYWlyW2dyb3VwXTtcclxuICAgICAgICBpZiAob3B0aW9ucyAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgb3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvblNjcm9sbChlLCBvcHRpb25zLCAodW5pdFR5cGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25XaGVlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICAgICAgdGhpcy4jdW5pdFNlbGVjdFBheWxvYWQoZSwgdW5pdFR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFNob3cgd2VhcG9uIHNlbGVjdGlvbiBmb3IgYWlyIHVuaXRzICovXHJcbiAgICAjdW5pdFNlbGVjdFBheWxvYWQoZTogU3Bhd25FdmVudCwgdW5pdFR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXTtcclxuICAgICAgICBvcHRpb25zID0gcGF5bG9hZE5hbWVzW3VuaXRUeXBlXVxyXG4gICAgICAgIGlmIChvcHRpb25zICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvblNjcm9sbCh7eDogZS54LCB5OiBlLnksIGxhdGxuZzogZS5sYXRsbmd9LCBvcHRpb25zLCAocGF5bG9hZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvblNjcm9sbCgpO1xyXG4gICAgICAgICAgICAgICAgc3Bhd25BaXJjcmFmdCh1bml0VHlwZSwgZS5sYXRsbmcsIGdldEFjdGl2ZUNvYWxpdGlvbigpLCBwYXlsb2FkTmFtZSwgZS5haXJiYXNlTmFtZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3Bhd25BaXJjcmFmdCh1bml0VHlwZSwgZS5sYXRsbmcsIGdldEFjdGl2ZUNvYWxpdGlvbigpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyogU2hvdyB1bml0IHNlbGVjdGlvbiBmb3IgZ3JvdW5kIHVuaXRzICovXHJcbiAgICAjc2VsZWN0R3JvdW5kVW5pdChlOiBhbnksIGdyb3VwOiBzdHJpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHVuaXRUeXBlcy52ZWhpY2xlc1tncm91cF07XHJcbiAgICAgICAgb3B0aW9ucy5zb3J0KCk7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0aW9uU2Nyb2xsKGUsIG9wdGlvbnMsICh1bml0VHlwZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvblNjcm9sbCgpO1xyXG4gICAgICAgICAgICBzcGF3bkdyb3VuZFVuaXQodW5pdFR5cGUsIGUubGF0bG5nLCBnZXRBY3RpdmVDb2FsaXRpb24oKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0gXHJcbiIsImltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWlyYmFzZU9wdGlvbnNcclxue1xyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgcG9zaXRpb246IEwuTGF0TG5nLFxyXG4gICAgc3JjOiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFpcmJhc2VNYXJrZXIgZXh0ZW5kcyBMLk1hcmtlciBcclxue1xyXG4gICAgI25hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAjY29hbGl0aW9uSUQ6IG51bWJlciA9IC0xO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFpcmJhc2VPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMucG9zaXRpb24sIHsgcmlzZU9uSG92ZXI6IHRydWUgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuI25hbWUgPSBvcHRpb25zLm5hbWU7XHJcblxyXG4gICAgICAgIHZhciBpY29uID0gbmV3IEwuRGl2SWNvbih7XHJcbiAgICAgICAgICAgIGh0bWw6IGA8dGFibGUgY2xhc3M9XCJhaXJiYXNlbWFya2VyLWNvbnRhaW5lclwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYWlyYmFzZW1hcmtlci1pY29uXCIgaWQ9XCJpY29uXCIgc3JjPVwiJHtvcHRpb25zLnNyY31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaXJiYXNlbWFya2VyLW5hbWVcIiBpZD1cIm5hbWVcIj4ke29wdGlvbnMubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5gLCBcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYWlyYmFzZS1tYXJrZXInfSk7ICAgLy8gU2V0IHRoZSBtYXJrZXIsIGNsYXNzTmFtZSBtdXN0IGJlIHNldCB0byBhdm9pZCB3aGl0ZSBzcXVhcmVcclxuICAgICAgICB0aGlzLnNldEljb24oaWNvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29hbGl0aW9uSUQoY29hbGl0aW9uSUQ6IG51bWJlcilcclxuICAgIHtcclxuICAgICAgICB0aGlzLiNjb2FsaXRpb25JRCA9IGNvYWxpdGlvbklEO1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBpbWcgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKTtcclxuICAgICAgICAgICAgaWYgKGltZyAhPSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpbWcuY2xhc3NMaXN0LnJlbW92ZShcImFpcmJhc2VtYXJrZXItaWNvbi1ibHVlXCIpO1xyXG4gICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5yZW1vdmUoXCJhaXJiYXNlbWFya2VyLWljb24tcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2NvYWxpdGlvbklEID09IDIpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoXCJhaXJiYXNlbWFya2VyLWljb24tYmx1ZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuI2NvYWxpdGlvbklEID09IDEpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoXCJhaXJiYXNlbWFya2VyLWljb24tcmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvYWxpdGlvbklEKClcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jY29hbGl0aW9uSUQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTWFya2VyLCBMYXRMbmcgfSBmcm9tIFwibGVhZmxldFwiO1xyXG5pbXBvcnQgeyBnZXRNYXAgfSBmcm9tIFwiLi5cIjtcclxuaW1wb3J0IHsgU3Bhd25FdmVudCB9IGZyb20gXCIuLi9tYXAvbWFwXCI7XHJcbmltcG9ydCB7IEFpcmJhc2VNYXJrZXIgfSBmcm9tIFwiLi9haXJiYXNlbWFya2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWlzc2lvbkRhdGFcclxue1xyXG4gICAgLy8jYnVsbHNleWUgICAgICAgOiBhbnk7IC8vVE9ETyBkZWNsYXJlIGludGVyZmFjZVxyXG4gICAgLy8jYnVsbHNleWVNYXJrZXIgOiBNYXJrZXI7XHJcbiAgICAjYWlyYmFzZXMgICAgICAgOiBhbnk7IC8vVE9ETyBkZWNsYXJlIGludGVyZmFjZVxyXG4gICAgI2FpcmJhc2VzTWFya2Vyczoge1tuYW1lOiBzdHJpbmddOiBBaXJiYXNlTWFya2VyfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpXHJcbiAgICB7XHJcbiAgICAgICAgLy90aGlzLiNidWxsc2V5ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAvL3RoaXMuI2J1bGxzZXllTWFya2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuI2FpcmJhc2VzTWFya2VycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShkYXRhOiBhbnkpXHJcbiAgICB7XHJcbiAgICAgICAgLy90aGlzLiNidWxsc2V5ZSA9IGRhdGEubWlzc2lvbkRhdGEuYnVsbHNleWU7XHJcbiAgICAgICAgdGhpcy4jYWlyYmFzZXMgPSBkYXRhLmFpcmJhc2VzO1xyXG4gICAgICAgIC8vdGhpcy4jZHJhd0J1bGxzZXllKCk7XHJcbiAgICAgICAgdGhpcy4jZHJhd0FpcmJhc2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZHJhd0J1bGxzZXllKClcclxuICAgIC8ve1xyXG4gICAgLy8gICAgaWYgKHRoaXMuI2J1bGxzZXllTWFya2VyID09PSB1bmRlZmluZWQpXHJcbiAgICAvLyAgICB7XHJcbiAgICAvLyAgICAgICAgdGhpcy4jYnVsbHNleWVNYXJrZXIgPSBuZXcgTWFya2VyKFt0aGlzLiNidWxsc2V5ZS5sYXQsIHRoaXMuI2J1bGxzZXllLmxuZ10pLmFkZFRvKG1hcC5nZXRNYXAoKSk7XHJcbiAgICAvLyAgICB9XHJcbiAgICAvLyAgICBlbHNlXHJcbiAgICAvLyAgICB7XHJcbiAgICAvLyAgICAgICAgdGhpcy4jYnVsbHNleWVNYXJrZXIuc2V0TGF0TG5nKG5ldyBMYXRMbmcodGhpcy4jYnVsbHNleWUubGF0LCB0aGlzLiNidWxsc2V5ZS5sbmcpKTsgXHJcbiAgICAvLyAgICB9XHJcbiAgICAvL31cclxuXHJcbiAgICAjZHJhd0FpcmJhc2VzKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKGxldCBpZHggaW4gdGhpcy4jYWlyYmFzZXMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgYWlyYmFzZSA9IHRoaXMuI2FpcmJhc2VzW2lkeF1cclxuICAgICAgICAgICAgaWYgKHRoaXMuI2FpcmJhc2VzTWFya2Vyc1tpZHhdID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2FpcmJhc2VzTWFya2Vyc1tpZHhdID0gbmV3IEFpcmJhc2VNYXJrZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgTGF0TG5nKGFpcmJhc2UubGF0LCBhaXJiYXNlLmxuZyksIFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGFpcmJhc2UuY2FsbHNpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcImltYWdlcy9haXJiYXNlLnBuZ1wifSkuYWRkVG8oZ2V0TWFwKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jYWlyYmFzZXNNYXJrZXJzW2lkeF0ub24oJ2NsaWNrJywgKGUpID0+IHRoaXMuI29uQWlyYmFzZUNsaWNrKGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2FpcmJhc2VzTWFya2Vyc1tpZHhdLnNldENvYWxpdGlvbklEKGFpcmJhc2UuY29hbGl0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAjb25BaXJiYXNlQ2xpY2soZTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzcGF3bkV2ZW50OiBTcGF3bkV2ZW50ID0ge3g6IGUub3JpZ2luYWxFdmVudC54LCB5OiBlLm9yaWdpbmFsRXZlbnQueSwgbGF0bG5nOiBlLmxhdGxuZywgYWlyYmFzZU5hbWU6IGUuc291cmNlVGFyZ2V0LmdldE5hbWUoKSwgY29hbGl0aW9uSUQ6IGUuc291cmNlVGFyZ2V0LmdldENvYWxpdGlvbklEKCl9O1xyXG4gICAgICAgIGdldE1hcCgpLnNwYXduRnJvbUFpcmJhc2Uoc3Bhd25FdmVudCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UobGF0MTogbnVtYmVyLCBsb24xOiBudW1iZXIsIGxhdDI6IG51bWJlciwgbG9uMjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBSID0gNjM3MWUzOyAvLyBtZXRyZXNcclxuICAgIGNvbnN0IM+GMSA9IGRlZzJyYWQobGF0MSk7IC8vIM+GLCDOuyBpbiByYWRpYW5zXHJcbiAgICBjb25zdCDPhjIgPSBkZWcycmFkKGxhdDIpO1xyXG4gICAgY29uc3QgzpTPhiA9IGRlZzJyYWQobGF0MiAtIGxhdDEpO1xyXG4gICAgY29uc3QgzpTOuyA9IGRlZzJyYWQobG9uMiAtIGxvbjEpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBNYXRoLnNpbijOlM+GIC8gMikgKiBNYXRoLnNpbijOlM+GIC8gMikgKyBNYXRoLmNvcyjPhjEpICogTWF0aC5jb3Moz4YyKSAqIE1hdGguc2luKM6UzrsgLyAyKSAqIE1hdGguc2luKM6UzrsgLyAyKTtcclxuICAgIGNvbnN0IGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpO1xyXG5cclxuICAgIGNvbnN0IGQgPSBSICogYzsgLy8gaW4gbWV0cmVzXHJcblxyXG4gICAgcmV0dXJuIGQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiZWFyaW5nKGxhdDE6IG51bWJlciwgbG9uMTogbnVtYmVyLCBsYXQyOiBudW1iZXIsIGxvbjI6IG51bWJlcikge1xyXG4gICAgY29uc3Qgz4YxID0gZGVnMnJhZChsYXQxKTsgLy8gz4YsIM67IGluIHJhZGlhbnNcclxuICAgIGNvbnN0IM+GMiA9IGRlZzJyYWQobGF0Mik7XHJcbiAgICBjb25zdCDOuzEgPSBkZWcycmFkKGxvbjEpOyAvLyDPhiwgzrsgaW4gcmFkaWFuc1xyXG4gICAgY29uc3QgzrsyID0gZGVnMnJhZChsb24yKTtcclxuICAgIGNvbnN0IHkgPSBNYXRoLnNpbijOuzIgLSDOuzEpICogTWF0aC5jb3Moz4YyKTtcclxuICAgIGNvbnN0IHggPSBNYXRoLmNvcyjPhjEpICogTWF0aC5zaW4oz4YyKSAtIE1hdGguc2luKM+GMSkgKiBNYXRoLmNvcyjPhjIpICogTWF0aC5jb3MozrsyIC0gzrsxKTtcclxuICAgIGNvbnN0IM64ID0gTWF0aC5hdGFuMih5LCB4KTtcclxuICAgIGNvbnN0IGJybmcgPSAocmFkMmRlZyjOuCkgKyAzNjApICUgMzYwOyAvLyBpbiBkZWdyZWVzXHJcblxyXG4gICAgcmV0dXJuIGJybmc7XHJcbn1cclxuXHJcbmNvbnN0IHplcm9QYWQgPSBmdW5jdGlvbiAobnVtOiBudW1iZXIsIHBsYWNlczogbnVtYmVyKSB7XHJcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKG51bSk7XHJcbiAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IHBsYWNlcykge1xyXG4gICAgICAgIHN0cmluZyArPSBcIjBcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJ0RERUb0RNUyhEOiBudW1iZXIsIGxuZzogYm9vbGVhbikge1xyXG4gICAgdmFyIGRpciA9IEQgPCAwID8gKGxuZyA/IFwiV1wiIDogXCJTXCIpIDogbG5nID8gXCJFXCIgOiBcIk5cIjtcclxuICAgIHZhciBkZWcgPSAwIHwgKEQgPCAwID8gKEQgPSAtRCkgOiBEKTtcclxuICAgIHZhciBtaW4gPSAwIHwgKCgoRCArPSAxZS05KSAlIDEpICogNjApO1xyXG4gICAgdmFyIHNlYyA9ICgwIHwgKCgoRCAqIDYwKSAlIDEpICogNjAwMCkpIC8gMTAwO1xyXG4gICAgdmFyIGRlYyA9IE1hdGgucm91bmQoKHNlYyAtIE1hdGguZmxvb3Ioc2VjKSkgKiAxMDApO1xyXG4gICAgdmFyIHNlYyA9IE1hdGguZmxvb3Ioc2VjKTtcclxuICAgIGlmIChsbmcpXHJcbiAgICAgICAgcmV0dXJuIGRpciArIHplcm9QYWQoZGVnLCAzKSArIFwiwrBcIiArIHplcm9QYWQobWluLCAyKSArIFwiJ1wiICsgemVyb1BhZChzZWMsIDIpICsgXCIuXCIgKyB6ZXJvUGFkKGRlYywgMikgKyBcIlxcXCJcIjtcclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gZGlyICsgemVyb1BhZChkZWcsIDIpICsgXCLCsFwiICsgemVyb1BhZChtaW4sIDIpICsgXCInXCIgKyB6ZXJvUGFkKHNlYywgMikgKyBcIi5cIiArIHplcm9QYWQoZGVjLCAyKSArIFwiXFxcIlwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVnMnJhZChkZWc6IG51bWJlcikge1xyXG4gICAgdmFyIHBpID0gTWF0aC5QSTtcclxuICAgIHJldHVybiBkZWcgKiAocGkgLyAxODApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFkMmRlZyhyYWQ6IG51bWJlcikge1xyXG4gICAgdmFyIHBpID0gTWF0aC5QSTtcclxuICAgIHJldHVybiByYWQgLyAocGkgLyAxODApO1xyXG59IiwiZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25TdGF0dXNQYW5lbCB7XHJcbiAgICAjZWxlbWVudDogSFRNTEVsZW1lbnRcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy4jZWxlbWVudCA9IDxIVE1MRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKGNvbm5lY3RlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLiNlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGRpdiA9IHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzdGF0dXMtc3RyaW5nXCIpO1xyXG4gICAgICAgICAgICBpZiAoZGl2ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb25uZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gXCJDb25uZWN0ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZChcIm9seW1wdXMtc3RhdHVzLWNvbm5lY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NMaXN0LnJlbW92ZShcIm9seW1wdXMtc3RhdHVzLWRpc2Nvbm5lY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBcIkRpc2Nvbm5lY3RlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKFwib2x5bXB1cy1zdGF0dXMtZGlzY29ubmVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc0xpc3QucmVtb3ZlKFwib2x5bXB1cy1zdGF0dXMtY29ubmVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgQ29udmVydEREVG9ETVMsIHJhZDJkZWcgfSBmcm9tIFwiLi4vb3RoZXIvdXRpbHNcIjtcclxuaW1wb3J0IHsgVW5pdCB9IGZyb20gXCIuLi91bml0cy91bml0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pdEluZm9QYW5lbCB7XHJcbiAgICAjZWxlbWVudDogSFRNTEVsZW1lbnRcclxuICAgICNkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuI2VsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSUQpO1xyXG4gICAgICAgIHRoaXMuI2Rpc3BsYXkgPSAnJztcclxuICAgICAgICBpZiAodGhpcy4jZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2Rpc3BsYXkgPSB0aGlzLiNlbGVtZW50LnN0eWxlLmRpc3BsYXk7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93KCkge1xyXG4gICAgICAgIHRoaXMuI2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHRoaXMuI2Rpc3BsYXk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZSgpIHtcclxuICAgICAgICB0aGlzLiNlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUodW5pdDogVW5pdCkge1xyXG4gICAgICAgIGlmICh0aGlzLiNlbGVtZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGVscyA9IHRoaXMuI2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImpzLWxvYWRvdXQtZWxlbWVudFwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKGVscy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2xvYWRvdXQtZGF0YVwiKT8ucmVtb3ZlQ2hpbGQoZWxzWzBdKTtcclxuICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggaW4gdW5pdC5hbW1vKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW1tbyA9IHVuaXQuYW1tb1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBhbW1vLmRlc2MuZGlzcGxheU5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW1vdW50ID0gYW1tby5jb3VudDtcclxuICAgICAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJqcy1sb2Fkb3V0LWVsZW1lbnRcIiwgXCJyZWN0YW5ndWxhci1jb250YWluZXItZGFya1wiKVxyXG4gICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gYW1vdW50ICsgXCJ4XCIgKyBkaXNwbGF5TmFtZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNsb2Fkb3V0LWRhdGFcIik/LmFwcGVuZENoaWxkKGVsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3VuaXQtbmFtZVwiKSEuaW5uZXJIVE1MID0gdW5pdC51bml0TmFtZTtcclxuICAgICAgICAgICAgdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2dyb3VwLW5hbWVcIikhLmlubmVySFRNTCA9IHVuaXQuZ3JvdXBOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbmFtZVwiKSEuaW5uZXJIVE1MID0gdW5pdC5uYW1lO1xyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGluZ1wiKSEuaW5uZXJIVE1MID0gU3RyaW5nKE1hdGguZmxvb3IocmFkMmRlZyh1bml0LmhlYWRpbmcpKSArIFwiIMKwXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWx0aXR1ZGVcIikhLmlubmVySFRNTCA9IFN0cmluZyhNYXRoLmZsb29yKHVuaXQuYWx0aXR1ZGUgLyAwLjMwNDgpICsgXCIgZnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNncm91bmQtc3BlZWRcIikhLmlubmVySFRNTCA9IFN0cmluZyhNYXRoLmZsb29yKHVuaXQuc3BlZWQgKiAxLjk0Mzg0KSArIFwiIGt0c1wiKTtcclxuICAgICAgICAgICAgdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2Z1ZWxcIikhLmlubmVySFRNTCA9IFN0cmluZyh1bml0LmZ1ZWwgKyBcIiVcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNsYXRpdHVkZVwiKSEuaW5uZXJIVE1MID0gQ29udmVydEREVG9ETVModW5pdC5sYXRpdHVkZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbG9uZ2l0dWRlXCIpIS5pbm5lckhUTUwgPSBDb252ZXJ0RERUb0RNUyh1bml0LmxvbmdpdHVkZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiN0YXNrXCIpIS5pbm5lckhUTUwgPSB1bml0LmN1cnJlbnRUYXNrICE9PSBcIlwiPyB1bml0LmN1cnJlbnRUYXNrOiBcIk5vdCBjb250cm9sbGVkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IHZhciBwYXlsb2FkTmFtZXM6IGFueSA9IHsgXCJBLTEwQVwiOiBbXCJNSy04NCoyICwgTEFVLTY4KjIgLCBBR00tNjVLKjJcIiwgXCJMQVUtNjgtTUs1KjZcIiwgXCJBR00tNjVLKjIsTWsyMCo2LEFJTS05KjIsRUNNXCIsIFwiTWstODIqNixBSU0tOSoyLEVDTVwiLCBcIk1rMjAqNixBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqNCxBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUssIEFHTS02NURcIiwgXCJFQ01cIiwgXCJNay04Mio2LCBNay04NCoyXCIsIFwiTWsyMCo4XCIsIFwiQUdNLTY1SyoyLE1rLTg0KjIsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVLKjIsTWstODIqNixBSU0tOSoyLEVDTVwiLCBcIk1rLTg0KjIsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVLKjIsTWs4NCoyLE1rODIqNCxBSU0tOU0qMixFQ01cIiwgXCJBR00tNjVIKjYsTWs4MioxMCxBSU0tOU0qMixFQ01cIl0sIFwiQS0xMENcIjogW1wiTEFVLTY4IDQyIHJrdCBNMTU2IFdQLCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjQsIENCVS05NyoyLCBDQlUtODcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJMQVUtMTMxIDk4IHJrdCBNMTU2IFdQLCBBSU0tOSoyLEVDTVwiLCBcIlNVVS0yNSo5LEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIk1rLTgyQUlSKjgsQUlNLTkqMixFQ01cIiwgXCJNSy04NCoyLExBVS02OCoyLEFHTS02NUsqMlwiLCBcIkJEVS0zMyo2LCBUR00tNjVILCBUR00tNjVELCBUR1AsIEJEVS01MExHQioyLCBDQVAtOSoxXCIsIFwiTWstODIqNixNay04NCoyLEFJTS05KjIsRUNNXCIsIFwiTWstODQqNCxBSU0tOSoyLEVDTVwiLCBcIk1rLTgyKjgsQUlNLTkqMixFQ01cIiwgXCJCRFUtMzMqMTIsIFRHUCwgQ0FQLTkqMVwiLCBcIkFHTS02NUQqNCxNay04MkFJUioyLENCVS04NyoyLEFJTS05TSoyLEVDTSxUR1BcIiwgXCJBR00tNjVEKjQsR0JVLTEyKjIsR0JVLTM4LE1rLTgyLEFJTS05LFRHUCxFQ01cIiwgXCJBR00tNjVEKjIsIEFHTS02NUgqMiwgQ0JVLTk3KjIsIENCVS04NyoyLCBUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkJEVS01MEhEKjYsTWsxKjcsVEdQLCBDQVAtOSoxXCIsIFwiQUdNLTY1SCo0LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsTWstODJBSVIqMixDQlUtODcqMixBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1SyoyLEdCVS0zOCo0LEFJTS05KjIsVEdQLEVDTVwiLCBcIkJEVS0zMyo2LCBUR1AsIENBUC05KjFcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLEdCVS0xMioyLEdCVS0zOCoyLEFJTS05KjIsVEdQLEVDTSxNSzE1MSo3XCIsIFwiVEdQXCIsIFwiQkRVLTMzKjYsIFRHUCwgQ0FQLTkqMSwgQkRVLTUwTEQqMlwiLCBcIkdCVS0xMio2LEdCVS0xMCoyLFRHUCwgQUlNLTkqMlwiLCBcIlRHUCwgQ0JVLTg3KjMsIE0xNTEqMjgsIEFJTS05KjIsIEVDTVwiLCBcIkFHTS02NUQqNCxNay04Mio2LENCVS04NyoyLFRHUCxBSU0tOSoyLE1rMTUxKjdcIiwgXCJQR00tIEdCVS0xMCoyLEdCVS0xMio0LEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIlRHUCwgQ0FQLTkqMSwgQ0FUTS02NUsqMSwgVEdNLTY1RyoxXCIsIFwiQUdNLTY1RyoyLEdCVS0zMSoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIlRHUCwgTTE1MSoxNCwgTWstODIqMiwgTWstODJBSVIqMiwgQUlNLTkqMiwgRUNNXCIsIFwiUEdNLSBHQlUtMTAqNCwgQUdNLTY1SyoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsTWstODJBSVIqNixDQlUtODcqMixNazE1MSo3LEFJTS05KjIsVEdQLEVDTVwiLCBcIkdCVS0zMSoyLEdCVS0zOCoyLCBBR00tNjVIKjIsIEFJTS05KjIsVEdQLCBFQ01cIiwgXCJDQlUtMTAzKjQsIE0xNTEqMTQsIEFJTS05KjIsIEVDTVwiLCBcIkNCVS04Nyo0LCBNMTUxKjQyLCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjYsIENCVS05Nyo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQ0JVLTg3KjIsIE0xNTEqMTQsIE1LLTgyQUlSKjYsIEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtMTA1KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJCRFUtNTBIRCoyLEJEVS01MExHQioyLFRHUCwgQ0FQLTkqMVwiLCBcIkNCVS04Nyo0LCBNMTUxKjI4LCBBSU0tOSoyLEVDTVwiLCBcIk0xNTEqOTgsIE1rLTgyKjIsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLEdCVS0xMixHQlUtMzgsTUs4MiozLE1LODJBSVIqMyxNSzUqNyxUR1AsQU0tOSoyXCIsIFwiVEdQLCBNMTUxKjQyLCBNay04Mio2LCBNay04MkFJUio2LCBBSU0tOSoyLCBFQ01cIiwgXCJUR1AsIE0xNTEqODQsIE1rLTgyKjIsQUlNLTkqMiwgRUNNXCIsIFwiQkRVLTUwTEQqMiwgQkRVLTUwSEQqMixDQVRNLTY1SywgVEdNLTY1RywgVEdQLCBDQVAtOSoxXCIsIFwiVEdQLCBNMTUxKjQ5LCBNay04MioyLCBDQlUtODcqMiwgQUlNLTkqMiwgRUNNXCIsIFwiVEdQLCBDQVAtOSoxLCBCRFUtNTBMR0IqNFwiLCBcIkdCVS0xMioxNCxUR1AsIEFJTS05KjJcIiwgXCJBR00tNjVEKjMsIEFHTS02NUgqMywgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjIsQ0JVLTk3KjIsQUlNLTlNKjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTEwNSoyLENCVS05NyoyLCBUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkFHTS02NUQqMixNay04Mio2LEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkdCVS0zOCo0LEdCVS0zMSoyLFRHUCwgQUlNLTkqMlwiLCBcIkFHTS02NUQqNCxHQlUtMTIqMixHQlUtMzgqMixBSU0tOSoyLFRHUCxFQ00sTUs1KjdcIiwgXCJBR00tNjVHLEFHTS02NUssR0JVLTEwKjIsQUlNLTkqMixUR1AsRUNNXCIsIFwiQUdNLTY1RyxBR00tNjVELE1rLTgyKjcsQUlNLTkqMixFQ01cIiwgXCJHQlUtMzEqMixHQlUtMzgqNCxBSU0tOSoyLFRHUCxFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVLKjIsR0JVLTEyKjgsQUlNLTlNKjIuRUNNLFRHUFwiLCBcIkFHTS02NUQqNixHQlUtMTIqNCxBSU0tOU0qMixFQ00sVEdQXCJdLCBcIkEtMTBDXzJcIjogW1wiTEFVLTY4IDQyIHJrdCBNMTU2IFdQLCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjQsIENCVS05NyoyLCBDQlUtODcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJMQVUtMTMxIDk4IHJrdCBNMTU2IFdQLCBBSU0tOSoyLEVDTVwiLCBcIlNVVS0yNSo5LEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIk1rLTgyQUlSKjgsQUlNLTkqMixFQ01cIiwgXCJNSy04NCoyLExBVS02OCoyLEFHTS02NUsqMlwiLCBcIkJEVS0zMyo2LCBUR00tNjVILCBUR00tNjVELCBUR1AsIEJEVS01MExHQioyLCBDQVAtOSoxXCIsIFwiTWstODIqNixNay04NCoyLEFJTS05KjIsRUNNXCIsIFwiTWstODQqNCxBSU0tOSoyLEVDTVwiLCBcIk1rLTgyKjgsQUlNLTkqMixFQ01cIiwgXCJCRFUtMzMqMTIsIFRHUCwgQ0FQLTkqMVwiLCBcIkFHTS02NUQqNCxNay04MkFJUioyLENCVS04NyoyLEFJTS05TSoyLEVDTSxUR1BcIiwgXCJBR00tNjVEKjQsR0JVLTEyKjIsR0JVLTM4LE1rLTgyLEFJTS05LFRHUCxFQ01cIiwgXCJBR00tNjVEKjIsIEFHTS02NUgqMiwgQ0JVLTk3KjIsIENCVS04NyoyLCBUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkJEVS01MEhEKjYsTWsxKjcsVEdQLCBDQVAtOSoxXCIsIFwiQUdNLTY1SCo0LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsTWstODJBSVIqMixDQlUtODcqMixBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1SyoyLEdCVS0zOCo0LEFJTS05KjIsVEdQLEVDTVwiLCBcIkJEVS0zMyo2LCBUR1AsIENBUC05KjFcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLEdCVS0xMioyLEdCVS0zOCoyLEFJTS05KjIsVEdQLEVDTSxNSzE1MSo3XCIsIFwiVEdQXCIsIFwiQkRVLTMzKjYsIFRHUCwgQ0FQLTkqMSwgQkRVLTUwTEQqMlwiLCBcIkdCVS0xMio2LEdCVS0xMCoyLFRHUCwgQUlNLTkqMlwiLCBcIlRHUCwgQ0JVLTg3KjMsIE0xNTEqMjgsIEFJTS05KjIsIEVDTVwiLCBcIkFHTS02NUQqNCxNay04Mio2LENCVS04NyoyLFRHUCxBSU0tOSoyLE1rMTUxKjdcIiwgXCJQR00tIEdCVS0xMCoyLEdCVS0xMio0LEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIlRHUCwgQ0FQLTkqMSwgQ0FUTS02NUsqMSwgVEdNLTY1RyoxXCIsIFwiQUdNLTY1RyoyLEdCVS0zMSoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIlRHUCwgTTE1MSoxNCwgTWstODIqMiwgTWstODJBSVIqMiwgQUlNLTkqMiwgRUNNXCIsIFwiUEdNLSBHQlUtMTAqNCwgQUdNLTY1SyoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsTWstODJBSVIqNixDQlUtODcqMixNazE1MSo3LEFJTS05KjIsVEdQLEVDTVwiLCBcIkdCVS0zMSoyLEdCVS0zOCoyLCBBR00tNjVIKjIsIEFJTS05KjIsVEdQLCBFQ01cIiwgXCJDQlUtMTAzKjQsIE0xNTEqMTQsIEFJTS05KjIsIEVDTVwiLCBcIkNCVS04Nyo0LCBNMTUxKjQyLCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjYsIENCVS05Nyo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQ0JVLTg3KjIsIE0xNTEqMTQsIE1LLTgyQUlSKjYsIEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtMTA1KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJCRFUtNTBIRCoyLEJEVS01MExHQioyLFRHUCwgQ0FQLTkqMVwiLCBcIkNCVS04Nyo0LCBNMTUxKjI4LCBBSU0tOSoyLEVDTVwiLCBcIk0xNTEqOTgsIE1rLTgyKjIsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLEdCVS0xMixHQlUtMzgsTUs4MiozLE1LODJBSVIqMyxNSzUqNyxUR1AsQU0tOSoyXCIsIFwiVEdQLCBNMTUxKjQyLCBNay04Mio2LCBNay04MkFJUio2LCBBSU0tOSoyLCBFQ01cIiwgXCJUR1AsIE0xNTEqODQsIE1rLTgyKjIsQUlNLTkqMiwgRUNNXCIsIFwiQkRVLTUwTEQqMiwgQkRVLTUwSEQqMixDQVRNLTY1SywgVEdNLTY1RywgVEdQLCBDQVAtOSoxXCIsIFwiVEdQLCBNMTUxKjQ5LCBNay04MioyLCBDQlUtODcqMiwgQUlNLTkqMiwgRUNNXCIsIFwiVEdQLCBDQVAtOSoxLCBCRFUtNTBMR0IqNFwiLCBcIkdCVS0xMioxNCxUR1AsIEFJTS05KjJcIiwgXCJBR00tNjVEKjMsIEFHTS02NUgqMywgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjIsQ0JVLTk3KjIsQUlNLTlNKjIsVEdQLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTEwNSoyLENCVS05NyoyLCBUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkFHTS02NUQqMixNay04Mio2LEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkdCVS0zOCo0LEdCVS0zMSoyLFRHUCwgQUlNLTkqMlwiLCBcIkFHTS02NUQqNCxHQlUtMTIqMixHQlUtMzgqMixBSU0tOSoyLFRHUCxFQ00sTUs1KjdcIiwgXCJBR00tNjVHLEFHTS02NUssR0JVLTEwKjIsQUlNLTkqMixUR1AsRUNNXCIsIFwiQUdNLTY1RyxBR00tNjVELE1rLTgyKjcsQUlNLTkqMixFQ01cIiwgXCJHQlUtMzEqMixHQlUtMzgqNCxBSU0tOSoyLFRHUCxFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVLKjIsR0JVLTEyKjgsQUlNLTlNKjIuRUNNLFRHUFwiLCBcIkFHTS02NUQqNixHQlUtMTIqNCxBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1RSoyLE1rLTgyQUlSKjIsQ0JVLTk3KjIsQUlNLTlNKjIsRUNNLFRHUFwiLCBcIkFHTS02NUUqMixDQlUtOTcqNCxBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1RSoyLENCVS05Nyo0LEFJTS05TSoyLEVDTSxNMTUxIEFQS1dTKjcsVEdQXCIsIFwiQUdNLTY1RSoyLENCVS0xMDUqNCxBSU0tOU0qMixFQ00sTTE1MSBBUEtXUyo3LFRHUFwiLCBcIk1rLTgyKjQsTWstOEFJUio0LEFJTS05KjIsRUNNXCIsIFwiTWstODIqMjAsQUlNLTkqMixFQ01cIiwgXCJNay04Mio2LEFJTS05KjIsVEdQLEVDTVwiLCBcIk1rLTg0KjYsQUlNLTkqMixUR1AsRUNNXCIsIFwiTWstODJBSVIqNixNay04QUlSKjQsTTE1MSoxLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS0zOCo0LE0xNTEgQVBLV1MqNyxBR00tNjVEKjEsQUdNLTY1SCoxLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS0zOCo0LE0xNTEgQVBLV1MqNyxBR00tNjVFKjIsVEdQLEFJTS05KjIsRUNNXCIsIFwiR0JVLTEyKjQsTTE1MSBBUEtXUyo3LEFHTS02NUUqMixUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtMTIqMixHQlUtMzgqMixNMTUxIEFQS1dTKjcsQUdNLTY1RSoyLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS0xMCoyLE0xNTEgQVBLV1MqNyxBR00tNjVFKjIsVEdQLEFJTS05KjIsRUNNXCIsIFwiR0JVLTMxKjIsTTE1MSBBUEtXUyo3LEFHTS02NUUqMixUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtNTQqNCxNMTUxIEFQS1dTKjcsQUdNLTY1RSoyLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS01NCo0LE0xNTEgQVBLV1MqNyxBR00tNjVEKjQsVEdQLEFJTS05KjIsRUNNXCJdLCBcIkFILTY0RF9CTEtfSUlcIjogW1wiNCAqIEZ1ZWwgVGFuayAyMzAgZ2FsXCIsIFwiMiAqIE0yNjE6IE0xNTEgKDZQRCksIDIgKiBIZWxsZmlyZSBzdGF0aW9uOiA0KkFHTS0xMTRLXCIsIFwiNCAqIEhlbGxmaXJlIHN0YXRpb246IDQqQUdNLTExNEtcIiwgXCI0ICogTTI2MTogTTE1MSAoNlBEKVwiLCBcIjIgKiBNMjYxOiBNMTUxICg2UEQpLCAyICogRnVlbCBUYW5rIDIzMCBnYWxcIiwgXCIyICogRnVlbCBUYW5rIDIzMCBnYWwsIDIgKiBIZWxsZmlyZSBzdGF0aW9uOiA0KkFHTS0xMTRLXCIsIFwiMiAqIE0yNjE6IEEvQiAtIE0xNTEgKDZQRCksIEUgLSBNMjc0ICg2U0spLCAyICogSGVsbGZpcmUgc3RhdGlvbjogNCpBR00tMTE0S1wiLCBcIjIgKiBNMjYxOiBBL0IgLSBNMTUxICg2UEQpLCBFIC0gTTI1NyAoNklMKSwgMiAqIEhlbGxmaXJlIHN0YXRpb246IDQqQUdNLTExNEtcIiwgXCIyICogTTI2MTogQyAtIE0yNTcgKDZJTCksIEQvRSAtIE0xNTEgKDZQRCksIDIgKiBIZWxsZmlyZSBzdGF0aW9uOiA0KkFHTS0xMTRLXCIsIFwiMiAqIE0yNjE6IEMgLSBNMjc0ICg2U0spLCBEL0UgLSBNMTUxICg2UEQpLCAyICogSGVsbGZpcmUgc3RhdGlvbjogNCpBR00tMTE0S1wiXSwgXCJBSlMzN1wiOiBbXCJCYXR0bGVmaWVsZCBBaXIgSW50ZXJkaWN0aW9uOiBSQi03NSo0LCBSQi0yNEoqMiwgWFRcIiwgXCJBbnRpLXNoaXA6IFJCLTA0RSoyLCBSQi03NCoyLCBYVFwiLCBcIkFudGktc2hpcCAoSGVhdnkgTWF2KTogUkItNzVUKjQsIFhUXCIsIFwiSGFyZCBUYXJnZXQgKENvdW50ZXJtZWFzdXJlcyk6IFJCLTA1LCBYVCwgS0IsIFUyMlwiLCBcIkhhcmQgVGFyZ2V0IChNQVYpOiBSQi03NVQqMiwgUkItNzQqMiwgWFRcIiwgXCJGZXJyeSBGbGlnaHQ6IFhUXCIsIFwiQ0FTICg3NSBHVU4pOiBSQi03NSoyLCBBS0FOXCIsIFwiQ0FQOiBSQi03NCo0LCBYVFwiLCBcIkNvdW50ZXJtZWFzdXJlcyBFc2NvcnQ6IFUvMjJBLCBLQlwiLCBcIlN0cmlrZTogQks5MCAoTUoxKSoyLCBSQi03NCoyLCBYVFwiLCBcIkNBUzogQUtBTiwgUkItMDVBXCIsIFwiQ0FQICg2IEFBTSk6IFJCLTc0KjQsIFJCLTI0SioyLCBYVFwiLCBcIlJvY2tldCBIYWxmIExvYWQgSEU6IEFSQUsgSEUqMiwgUkItNzQqMiwgWFRcIiwgXCJDQVAgLyBJbnRlY2VwdDogUkItMDVBKjIsIFJCLTc0KjIsIFhUXCIsIFwiQm9tYnMgTG93LWRyYWc6IFNCNzFMRCoxNiwgUkItMjRKKjIsIFhUXCIsIFwiU0VBRDogUkItNzVUKjIsIFUyMi9BLCBLQiwgWFRcIiwgXCJBbnRpLVNoaXAgKE1vZGVybik6IFJCLTE1RioyLCBSQi03NCoyLCBYVFwiLCBcIk5ldyBQYXlsb2FkXCIsIFwiQ0FQIChBSjM3KTogUkItMjRKKjJcIiwgXCJFQ00gRXNjb3J0IEFudGktc2hpcDogUkItMDRFLCBLQiwgUkItNzQqMiwgWFRcIiwgXCJCb21icyBIaWdoLWRyYWc6IFNCNzFIRCoxNiwgWFQsIFJCLTI0SlwiLCBcIkFudGktc2hpcCAoTGlnaHQgTWF2KTogUkItNzUqNCwgWFRcIiwgXCJSb2NrZXQgRnVsbCBMb2FkIEhFOiAgQVJBSyBIRSo0LCBSQi0yNEosIFhUXCIsIFwiSWxsdW1pbmF0aW9uOiBMWVNCKjgsIFhUXCIsIFwiQW50aS1zaGlwIChSQjA1KTogUkItMDVBKjIsIFJCLTc0KjIsIFhUXCIsIFwiQ0FQIChHdW4pOiBBS0FOKjIsIFJCLTc0KjIsIFhUXCIsIFwiSGFyZCBUYXJnZXQ6IFJCLTA1QSoyLCBSQi03NCoyLCBYVFwiLCBcIlJCLTA1KjIsIFhUXCIsIFwiQ0FTOiBBUkFLIE03MCBIRSo0LCBYVFwiLCBcIlJ1bndheSBTdHJpa2U6IFNCNzFIRCoxNiwgUkItMjRKLCBYVFwiXSwgXCJBVjhCTkFcIjogW1wiSC1MLUggMlwiLCBcIkFGQUMgMVwiLCBcIkFTIDFcIiwgXCJILU0tSCAzXCIsIFwiSW50ZXJkaWN0aW9uIDEgKEgtSC1ILUgpXCIsIFwiSW50ZXJkaWN0aW9uIDIgKEgtSC1ILUgpXCIsIFwiQUZBQyAzXCIsIFwiSW50ZXJkaWN0aW9uIDMgKEgtTC1MLUgpXCIsIFwiSC1NLUggMVwiLCBcIkgtTC1IIDFcIiwgXCJQR00gMiAoSC1ILUgtSClcIiwgXCJMLUwtTCAxXCIsIFwiQUZBQyAyXCIsIFwiSC1NLUggMlwiLCBcIkFyZWEgU3VwcHJlc3Npb25cIiwgXCJSb2NrZXRzIDFcIiwgXCJBUyAyXCIsIFwiSGVsbyBFc2NvcnQgMVwiLCBcIlBHTSAxIChILUgtSC1IKVwiLCBcIkhlbG8gRXNjb3J0IDJcIiwgXCJQR00gMyAoSC1ILUgtSClcIiwgXCJBbnRpIEFybW9yXCIsIFwiUkEgMSAoSC1NLU0tSClcIiwgXCJTdGFuZCBPZmYgMVwiLCBcIlN0YW5kIE9mZiAyXCIsIFwiU3RhbmQgT2ZmIDNcIiwgXCJJcm9uIEhhbmQgMVwiLCBcIklyb24gSGFuZCAyXCJdLCBcIkMtMTAxQ0NcIjogW1wiMipBSU0tOVAsIERFRkEgNTUzIENBTk5PTiAoSSlcIiwgXCIyKkFJTS05TSwgREVGQSA1NTMgQ0FOTk9OIChJKVwiLCBcIjIqQUlNLTlQLCBERUZBIDUzMyBDQU5OT04gKElJKVwiLCBcIjIqQUlNLTlQLCBBTi1NMyBDQU5OT04gKElWKVwiLCBcIjIqUi41NTAgTUFHSUMsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqQUlNLTlNLCBBTi1NMyBDQU5OT04gKElJSSlcIiwgXCIyKkFJTS05UCwgREVGQSA1NTMgQ0FOTk9OXCIsIFwiMipSLjU1MCBNQUdJQywgREVGQSA1NTMgQ0FOTk9OIChJSUkpXCIsIFwiMipBSU0tOVAsIDIqQkVMT1VHQSwgREVGQSA1NTMgQ0FOTk9OXCIsIFwiMipBSU05LVAsIDIqU0VBIEVBR0xFLCBERUZBLTU1MyBDQU5OT05cIiwgXCIyKkFJTS05TSAyKlNFQSBFQUdMRSwgQU4tTTMgQ0FOTk9OXCIsIFwiMipBSU0tOU0sIEFOLU0zIENBTk5PTlwiLCBcIjIqQkVMT1VHQSwyKkJEVS0zMywgREVGQS01NTMgQ0FOTk9OXCIsIFwiMiogU0VBIEVBR0xFLCBERUZBLTU1MyBDQU5OT05cIiwgXCIyKkFJTS05UCwgMipCUi0yNTAsMipNSy04MiwgREVGQSA1NTMgQ0FOTk9OXCIsIFwiMipSLjU1MCBNQUdJQywgMipTRUEgRUFHTEUgLCBERUZBLTU1MyBDQU5OT05cIiwgXCIyKlIuNTUwIE1BR0lDLCBERUZBIDU1MyBDQU5OT04gKElWKVwiLCBcIjIqQkVMT1VHQSwgMipCUi01MDAsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqQUlNLTlNLCBERUZBIDU1MyBDQU5OT04gKElWKVwiLCBcIjIqUi41NTAgTUFHSUMsIEFOLU0zIENBTk5PTiAoSUkpXCIsIFwiMipSNTUwIE1hZ2ljLCBERUZBIDU1MyBDQU5OT04gKEkpXCIsIFwiMipBSU0tOU0gLDIqQkVMT1VHQSwyKkJJTi0yMDAsIEFOLU0zIENBTk5PTlwiLCBcIjIqQUlNLTlNLCAyKkxBVSA2OCwgMipNSy04MiwgREVGQSA1NTMgQ0FOTk9OXCIsIFwiMipBSU0tOVAsIEFOLU0zIENBTk5PTiAoSUlJKVwiLCBcIjIqQUlNLTlNLCBERUZBIDUzMyBDQU5OT04gKElJKVwiLCBcIjIqUi41NTAgTUFHSUMsIDIqQlItMjUwLCAyKkJEVS0zMywgREVGQSA1NTMgQ0FOTk9OXCJdLCBcIkMtMTAxRUJcIjogW1wiU21va2UgU3lzdGVtOiBXaGl0ZSBTbW9rZVwiLCBcIlNtb2tlIFN5c3RlbTogV2hpdGUgU21va2UrUmVkIENvbG9yYW50XCIsIFwiU21va2UgU3lzdGVtOiBXaGl0ZSBTbW9rZStZZWxsb3cgQ29sb3JhbnRcIl0sIFwiSC02SlwiOiBbXCJZSi0xMiB4IDJcIiwgXCJZSi0xMiB4IDRcIiwgXCJZSi04M0sgeCA2XCIsIFwiMjUwLTIgSEQgQm9tYiB4IDEyIGluIEJheVwiLCBcIjI1MC0yIEhEIEJvbWIgeCAyNCBpbiBCYXlcIiwgXCIyNTAtMyBMRCBCb21iIHggMzZcIiwgXCJLRC02MyB4IDRcIiwgXCJLRC0yMCB4IDZcIiwgXCJLRC0yMCB4IDRcIiwgXCJLRC02MyB4IDIsIEtELTIwIHggNFwiLCBcIktELTYzIHggMiwgS0QtMjAgeCAyXCJdLCBcIkotMTFBXCI6IFtcIkZBQi0xMDB4MzYsUi03M3gyLEVDTVwiLCBcIkZBQi0yNTB4OCxSLTczeDIsRUNNXCIsIFwiRkFCLTUwMHg4LFItNzN4MixFQ01cIiwgXCJTLThLT014ODAsRkFCLTI1MHg0LFItNzN4MixFQ01cIiwgXCJTLTEzeDIwLEZBQi0yNTB4NCxSLTczeDIsRUNNXCIsIFwiUy0yNXg0LEZBQi01MDB4NCxSLTczeDIsRUNNXCIsIFwiUi0yN0VSeDQsUi0yN0VUeDIsUi03M3gyLEVDTVwiLCBcIlItNzd4NixSLTczeDIsRUNNXCIsIFwiUi0yN0VSeDYsUi03M3gyLEVDTVwiLCBcIlItNzd4NCxSLTI3RVR4MixSLTczeDIsRUNNXCIsIFwiUi03N3g0LFItMjdFUngyLFItNzN4MixFQ01cIiwgXCJCZXRBQi01MDBTaFB4NixSLTczeDIsRUNNXCIsIFwiUi03M3g0LEVDTVwiLCBcIlItNzd4MixSLTI3RVR4MixSLTczeDIsRUNNXCIsIFwiUi03N3g2LFItNzN4NFwiLCBcIlItNzd4MixSLTI3RVR4MixSLTI3RVJ4MixSLTczeDIsRUNNXCIsIFwiUi0yN0VUeDIsUi0yN0VSeDQsUi03M3gyLEVDTVwiLCBcIlMtOFRzTXg4MCxGQUItMjUweDQsUi03M3gyLEVDTVwiLCBcIlMtOE9GUDJ4ODAsRkFCLTI1MHg0LFItNzN4MixFQ01cIiwgXCJGQUItMjUweDE4LFItNzN4MixFQ01cIiwgXCIyKlM4LUtPTXgyLCBSLTczeDIsIEVDTVwiLCBcIjIqUzgtT0ZQMngyLCBSLTczeDIsIEVDTVwiLCBcIkZBQi0yNTB4NCwgMipGQUItNTAweDIsIFItNzN4MlwiLCBcIkZBQi0yNTB4NCwgMipGQUItMjUweDIsIFItNzN4MlwiLCBcIlJCSy0yNTAgSEVBVC9BUHgyLCBSQkstMjUwIEhFL0ZyYWd4MiwgUi03M3gyXCJdLCBcIkpGLTE3XCI6IFtcIlBMLTVFeDIsIEM4MDJBS3gyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBDLTcwMSBJUngyLCAxMTAwTCBUYW5rLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBTRC0xMHgyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBMRC0xMHgyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCA4MDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCBHQlUtMTB4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqR0JVLTEyeDIsIDgwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIDIqTWstODJ4MiwgTWstODN4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgMTEwMEwgVGFua3gyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBXTUQ3LCBDTTgwMkFLR3gyLCA4MDBMIFRhbmssIERMXCIsIFwiUEwtNUV4MiwgQy03MDEgQ0NEeDIsIDExMDBMIFRhbmssIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIEdCVS0xMngyLCAxMTAwTCBUYW5rLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMipHQlUtMTJ4MiwgR0JVLTE2eDIsIFdNRDdcIiwgXCJQTC01RXgyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBXTUQ3LCA4MDBMIFRhbmt4MiwgU1BKLCAyKkxELTEwXCIsIFwiUEwtNUV4MiwgTFMtNngyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBJUngyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBHQlUtMTJ4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMipMRC0xMHgyLCAxMTAwTCBUYW5reDIsIFNQSlwiLCBcIlBMLTVFeDIsIExELTEweDIsIDExMDBMIFRhbmt4MiwgU1BKXCIsIFwiUEwtNUV4MiwgMipMRC0xMHgyLCBMUy02eDIsIFNQSlwiLCBcIlBMLTVFeDIsIDIqTEQtMTB4MiwgR0ItNi1IRXgyLCBTUEpcIiwgXCJQTC01RXgyLCBDLTcwMSBJUngyLCA4MDBMIFRhbmt4MiwgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIENDRHgyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBDQ0R4MiwgODAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKkdCVS0xMngyLCAxMTAwTCBUYW5rLCBXTUQ3XCIsIFwiUEwtNUV4MiwgQy03MDEgSVJ4MiwgMTEwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIElSeDIsIDgwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIENDRHgyLCAxMTAwTCBUYW5rLCBXTUQ3XCIsIFwiUEwtNUV4MiwgQy03MDEgQ0NEeDIsIDgwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIElSeDIsIExTLTZ4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgQy03MDEgSVIvQ0NELCBHQi02LUhFeDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIEMtNzAxIElSL0NDRCwgR0ItNi1TRld4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgV01ENywgR0ItNi1TRld4MiwgODAwTCBUYW5rLCBCUk0xXCIsIFwiUEwtNUV4MiwgV01ENywgR0ItNi1TRld4MiwgODAwTCBUYW5rLCBHQlUtMTJcIiwgXCJQTC01RXgyLCAyKk1rLTgyU0V4MiwgTWstODN4M1wiLCBcIlBMLTVFeDIsIE1rLTg0eDNcIiwgXCJQTC01RXgyLCAyKk1rNXgyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBVbmd1aWRlZCA5MG1teDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIDIqTWs1eDIsIE1rLTgzeDNcIiwgXCJQTC01RXgyLCBCUk0xeDIsIDExMDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCAyeDExMDBMIFRhbmtcIiwgXCJQTC01RXgyLCBTRC0xMHgyLCAyeDExMDBMIFRhbmtcIiwgXCJQTC01RXgyLCAyKlNELTEweDIsIDJ4MTEwMEwgVGFua1wiLCBcIlBMLTVFeDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIFNELTEweDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIDIqU0QtMTB4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgU0QtMTB4MiwgU1BKXCIsIFwiUEwtNUV4MiwgU1BKXCIsIFwiUEwtNUV4MiwgMipTRC0xMHgyLCBTUEpcIiwgXCJQTC01RXgyXCIsIFwiUEwtNUV4MiwgU0QtMTB4MlwiLCBcIlBMLTVFeDIsIDIqU0QtMTBcIiwgXCJQTC01RXgyLCBTRC0xMHgyLCBTUEosIDExMDBMIFRhbmt4MlwiLCBcIlBMLTVFeDIsIDIqU0QtMTB4MiwgMTEwMEwgVGFua3gyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBTRC0xMHgyLCAxMTAwTCBUYW5reDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIEdCVS0xNngyLCBCUk0xeDIsIFdNRDdcIiwgXCJQTC01RXgyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMipMRC0xMCwgR0ItNngyLCAyKlNELTEwLCBTUEpcIiwgXCJQTC01RXgyLCBDLTcwMSBDQ0R4MiwgU1BKXCIsIFwiUEwtNUV4MiwgMipMRC0xMCwgQ004MDJBS0d4MiwgMipTRC0xMCwgRExcIiwgXCJQTC01RXgyLCAyKk1LLTgyeDIsIE1LLTgzeDIsIE1LLTg0XCIsIFwiUEwtNUV4MiwgTFMtNngyLCBHQi02eDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIDIqR0JVLTEyeDIsIExTLTZ4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqR0JVLTEyeDIsIEdCLTZ4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqVHlwZS0yMDBBeDJcIiwgXCJQTC01RXgyLCBUeXBlLTIwMEF4MlwiLCBcIlBMLTVFeDIsIDIqTFM2LTI1MHgyLCA4MDBMIFRhbmt4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqTFM2LTI1MHgyLCA4MDBMIFRhbmssIDExMDBMIFRhbmt4MlwiLCBcIlBMLTVFeDIsIDIqTFM2LTEwMHgyLCAxMTAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKkxTNi0xMDB4MiwgODAwTCBUYW5reDIsIFdNRDdcIl0sIFwiV2luZ0xvb25nLUlcIjogW1wiQUtELTEwIHggMlwiXSwgXCJDaHJpc3RlbiBFYWdsZSBJSVwiOiBbXCJTbW9rZSAtIHdoaXRlXCJdLCBcIkYtMTZDXzUwXCI6IFtcIkFJTS0xMjBCKjIsIEFJTS05TSo0LCBGVUVMKjNcIiwgXCJBSU0tMTIwQio0LCBBSU0tOU0qMiwgRlVFTCozXCIsIFwiQUlNLTEyMEIqNiwgRlVFTCozXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjQsIEZVRUwqMlwiLCBcIkFJTS0xMjBDKjQsIEFJTS05WCoyLCBGVUVMKjNcIiwgXCJBSU0tMTIwQyo0LCBBSU0tOVgqMiwgRlVFTCozLCBUR1BcIiwgXCJBSU0tMTIwQyo0LCBBSU0tOVgqMiwgRlVFTCoyXCIsIFwiQUlNLTEyMEMqNiwgRlVFTCozXCIsIFwiQUlNLTEyMEMqNCwgQUlNLTlYKjIsIEZVRUwqMiwgRUNNXCIsIFwiQUlNLTEyMEMqNCwgQUlNLTlYKjIsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyo2LCBGVUVMKjIsIEVDTVwiLCBcIkFJTS0xMjBDKjYsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyo2LCBGVUVMKjJcIiwgXCJBSU0tMTIwQyo2LCBGVUVMKjMsIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tNjVEKjIsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTY1SCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS02NUgqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tNjVEKjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQ0JVLTk3KjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgTUstODIqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBDQlUtODcqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBNSy04MkhEKjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQ0JVLTEwMyo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIENCVS0xMDUqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBNSy04Mio2LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIE1LLTgySEQqNiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjAqMiwgQUlNLTlYKjIsIE1LLTgyU0UqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjAqMiwgQUlNLTlYKjIsIE1LLTgyU0UqNiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBNSy04NCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIE1LLTgyUCo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0xMioyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0xMio0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0xMCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0yNCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0zMS0xQioyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0zMS0zQioyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0zOCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEdCVS0zOCo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS02NUsqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tNjVHKjIsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTY1RywgQUdNLTY1SywgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tODhDKjIsIEZVRUwqMywgVEdQLCBIVFNcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTg4QyoyLCBGVUVMKjIsIEVDTSwgVEdQLCBIVFNcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTg4Qyo0LCBFQ00sIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqNCwgQUdNLTg4QyoyLCBGVUVMKjMsIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqNCwgQUdNLTg4QyoyLCBGVUVMKjIsIEVDTSwgVEdQLCBIVFNcIiwgXCJBSU0tMTIwQyo0LCBBR00tODhDKjQsIEVDTSwgVEdQLCBIVFNcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgTUstNjEqMiwgRlVFTCoyLCBFQ00sIFRHUFwiXSwgXCJGLTVFLTNcIjogW1wiTWstODJMRCo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiQUlNLTlQKjIsIEZ1ZWwgMjc1KjNcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMjc1KjNcIiwgXCJBSU0tOVAqMiwgRnVlbCAxNTAqM1wiLCBcIkFJTS05UDUqMiwgRnVlbCAxNTAqM1wiLCBcIk1rLTgyU0UqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkNCVS01MkIqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkxBVS0zIEhFKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtMyBIRUFUKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtNjggSEUqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkxBVS02OCBIRUFUKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJNLTExNyo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiR0JVLTEyKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJDQlUtNTJCKjUsQUlNLTkqMlwiLCBcIk1rLTgyTEQqNSxBSU0tOSoyXCIsIFwiTWstODJTRSo1LEFJTS05KjJcIiwgXCJNay04MkxEKjcsQUlNLTlQKjIsIEZ1ZWwgMjc1KjJcIiwgXCJNay04MlNFKjcsQUlNLTlQKjIsIEZ1ZWwgMjc1KjJcIiwgXCJMQVUtMyBIRSoyLE1rLTgyTEQsQUlNLTlQKjIsRnVlbCAyNzUqMlwiLCBcIkxBVS02OCBIRSoyLE1rLTgyTEQsQUlNLTlQKjIsRnVlbCAyNzUqMlwiLCBcIk0tMTE3KjUsQUlNLTkqMlwiLCBcIkFJTS05UCoyLCBGdWVsIDI3NVwiLCBcIkFJTS05UCoyLCBGdWVsIDE1MFwiLCBcIkFJTS05UDUqMiwgRnVlbCAyNzVcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMTUwXCIsIFwiQUlNLTlCKjIsIEZ1ZWwgMjc1XCIsIFwiQUlNLTlCKjIsIEZ1ZWwgMTUwXCIsIFwiQUlNLTlCKjIsIEZ1ZWwgMjc1KjNcIiwgXCJBSU0tOUIqMiwgRnVlbCAxNTAqM1wiLCBcIkFOL0FTUS1UNTAsIEFJTS05UCwgRnVlbCAxNTBcIiwgXCJBSU0tOUIqMlwiLCBcIkFJTS05UCoyXCIsIFwiQUlNLTlQNSoyXCIsIFwiQW50aXNoaXAgTWs4MlwiXSwgXCJGLTVFXCI6IFtcIk1rLTgyTEQqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkFJTS05UCoyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlQNSoyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlQKjIsIEZ1ZWwgMTUwKjNcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMTUwKjNcIiwgXCJNay04MlNFKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJDQlUtNTJCKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtMyBIRSo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTMgSEVBVCo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTY4IEhFKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtNjggSEVBVCo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTS0xMTcqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkdCVS0xMio0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiQ0JVLTUyQio1LEFJTS05KjJcIiwgXCJNay04MkxEKjUsQUlNLTkqMlwiLCBcIk1rLTgyU0UqNSxBSU0tOSoyXCIsIFwiTWstODJMRCo3LEFJTS05UCoyLCBGdWVsIDI3NSoyXCIsIFwiTWstODJTRSo3LEFJTS05UCoyLCBGdWVsIDI3NSoyXCIsIFwiTEFVLTMgSEUqMixNay04MkxELEFJTS05UCoyLEZ1ZWwgMjc1KjJcIiwgXCJMQVUtNjggSEUqMixNay04MkxELEFJTS05UCoyLEZ1ZWwgMjc1KjJcIiwgXCJNLTExNyo1LEFJTS05KjJcIiwgXCJBSU0tOVAqMiwgRnVlbCAyNzVcIiwgXCJBSU0tOVAqMiwgRnVlbCAxNTBcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMjc1XCIsIFwiQUlNLTlQNSoyLCBGdWVsIDE1MFwiLCBcIkFJTS05QioyLCBGdWVsIDI3NVwiLCBcIkFJTS05QioyLCBGdWVsIDE1MFwiLCBcIkFJTS05QioyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlCKjIsIEZ1ZWwgMTUwKjNcIiwgXCJBTi9BU1EtVDUwLCBBSU0tOVAsIEZ1ZWwgMTUwXCIsIFwiQUlNLTlCKjJcIiwgXCJBSU0tOVAqMlwiLCBcIkFJTS05UDUqMlwiXSwgXCJGLTg2RiBTYWJyZVwiOiBbXCIxMjBnYWwgRnVlbCoyXCIsIFwiMjAwZ2FsIEZ1ZWwqMlwiLCBcIjEyMGdhbCBGdWVsKjIsIDIwMGdhbCBGdWVsKjJcIiwgXCJHQVItOCoyXCIsIFwiMTIwZ2FsIEZ1ZWwqMiwgR0FSLTgqMlwiLCBcIkhWQVIqMTZcIiwgXCIyMDBnYWwgRnVlbCoyLCBIVkFSeDIqNFwiLCBcIkFOLU02NCoyXCIsIFwiMjAwZ2FsIEZ1ZWwqMiwgQU4tTTY0KjJcIiwgXCJNMTE3KjJcIl0sIFwiRi0xNEEtMTM1LUdSXCI6IFtcIlhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tN0YqNiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTdGKjIsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03RioxLCBBSU0tOUwqNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tOUwqNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs2MCo0LCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS03Rio0LCBBSU0tOUwqNCwgWFQqMlwiLCBcIkFJTS03Rio0LCBBSU0tOUwqNCwgWFQqMlwiLCBcIkJEVS0zMyoxNFwiLCBcIkJEVS0zMyoxMlwiLCBcIkdCVS0xMCoyXCIsIFwiR0JVLTEyKjRcIiwgXCJHQlUtMTYqNFwiLCBcIkdCVS0yNCoyXCIsIFwiTWstODQqNFwiLCBcIk1rLTgzKjRcIiwgXCJNay04Mio0XCIsIFwiTWstODIqMTRcIiwgXCJNay04MSoxNFwiLCBcIk1rLTIwKjRcIiwgXCJNay04MkFJUio0XCIsIFwiWnVuaSoxMlwiLCBcIlp1bmkqMjhcIiwgXCJMVVUtMioyNFwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN0YqMSwgQUlNLTlMKjIsIFhUKjIsIE1rLTgyKjJcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdGKjEsIEFJTS05TCoyLCBYVCoyLCBNay04MioxXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03RioxLCBBSU0tOUwqMiwgWFQqMiwgTWstMjAqMlwiLCBcIkFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgR0JVLTEyKjIsIExBTlRJUk5cIiwgXCJBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIEdCVS0yNCoxLCBMQU5USVJOXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgTWstODIqMiwgTEFOVElSTlwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIE1rLTIwKjIsIExBTlRJUk5cIl0sIFwiRi0xNEEtOTUtR1JcIjogW1wiQUlNLTU0QS1NSzQ3KjYsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjYsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzYwKjYsIEFJTS05TCoyXCIsIFwiQUlNLTdGKjYsIEFJTS05TCoyXCIsIFwiQUlNLTdGKjYsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS03RioyLCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tN0YqMiwgQUlNLTlMKjJcIiwgXCJBSU0tNTRBLU1LNjAqNCwgQUlNLTdGKjIsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03RioxLCBBSU0tOUwqNFwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN0YqMSwgQUlNLTlMKjRcIiwgXCJBSU0tNTRBLU1LNjAqMiwgQUlNLTdGKjEsIEFJTS05TCo0XCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS05TCo0XCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS05TCo0XCIsIFwiQUlNLTU0QS1NSzYwKjQsIEFJTS05TCo0XCIsIFwiQUlNLTdGKjQsIEFJTS05TCo0XCIsIFwiQUlNLTdGKjQsIEFJTS05TCo0XCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03RiozLCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN0YqMywgQUlNLTlMKjJcIiwgXCJBSU0tNTRBLU1LNjAqMiwgQUlNLTdGKjMsIEFJTS05TCoyXCIsIFwiQkRVLTMzKjE0XCIsIFwiQkRVLTMzKjEyXCIsIFwiR0JVLTEwKjJcIiwgXCJHQlUtMTIqNFwiLCBcIkdCVS0xNio0XCIsIFwiR0JVLTI0KjJcIiwgXCJNay04NCo0XCIsIFwiTWstODMqNFwiLCBcIk1rLTgyKjRcIiwgXCJNay04MioxNFwiLCBcIk1rLTgxKjE0XCIsIFwiTWstMjAqNFwiLCBcIk1rLTgyQUlSKjRcIiwgXCJadW5pKjEyXCIsIFwiWnVuaSoyOFwiLCBcIkxVVS0yKjI0XCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03RioxLCBBSU0tOUwqMiwgTWstODIqMlwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN0YqMSwgQUlNLTlMKjIsIE1rLTgyKjFcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdGKjEsIEFJTS05TCoyLCBNay0yMCoyXCJdLCBcIkYtMTRCXCI6IFtcIlhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNiwgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNjAqNiwgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tNTRDLU1LNDcqNiwgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tN00qNiwgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tN00qNiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTdNKjIsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS03TSoyLCBBSU0tOUwqMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs2MCo0LCBBSU0tN00qMiwgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tNTRDLU1LNDcqNCwgQUlNLTdNKjIsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03TSoxLCBBSU0tOU0qMiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqMiwgQUlNLTdNKjEsIEFJTS05TSo0LCBYVCoyXCIsIFwiQUlNLTU0QS1NSzYwKjIsIEFJTS03TSoxLCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS01NEMtTUs0NyoyLCBBSU0tN00qMSwgQUlNLTlNKjQsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTlNKjIsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS05TSo0LCBYVCoyXCIsIFwiQUlNLTU0QS1NSzYwKjQsIEFJTS05TSo0LCBYVCoyXCIsIFwiQUlNLTU0Qy1NSzQ3KjQsIEFJTS05TSo0LCBYVCoyXCIsIFwiQUlNLTdNKjQsIEFJTS05TSoyLCBBSU0tOUwqMiwgWFQqMlwiLCBcIkFJTS03TSo0LCBBSU0tOUwqNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN00qMywgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqMiwgQUlNLTdNKjMsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzYwKjIsIEFJTS03TSozLCBBSU0tOU0qMiwgWFQqMlwiLCBcIkFJTS01NEMtTUs0NyoyLCBBSU0tN00qMywgQUlNLTlNKjIsIFhUKjJcIiwgXCJCRFUtMzMqMTRcIiwgXCJCRFUtMzMqMTJcIiwgXCJHQlUtMTAqMlwiLCBcIkdCVS0xMio0XCIsIFwiR0JVLTE2KjRcIiwgXCJHQlUtMjQqMlwiLCBcIk1rLTg0KjRcIiwgXCJNay04Myo0XCIsIFwiTWstODIqNFwiLCBcIk1rLTgyKjE0XCIsIFwiTWstODEqMTRcIiwgXCJNay0yMCo0XCIsIFwiTWstODJBSVIqNFwiLCBcIlp1bmkqMTJcIiwgXCJadW5pKjI4XCIsIFwiTFVVLTIqMjRcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBNay04MioyXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgTWstODIqMVwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIE1rLTIwKjJcIiwgXCJBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIEdCVS0xMioyLCBMQU5USVJOXCIsIFwiQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBHQlUtMjQqMSwgTEFOVElSTlwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIE1rLTgyKjIsIExBTlRJUk5cIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBNay0yMCoyLCBMQU5USVJOXCJdLCBcIkZBLTE4Q19ob3JuZXRcIjogW1wiQUlNLTlNKjYsIEFJTS03TSoyLCBGVUVMKjNcIiwgXCJBSU0tOU0qNiwgQUlNLTdNKjIsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBNSy04NCoyLCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstODMqNCwgRlVFTCoyXCIsIFwiQ2FycmllciBMYW5kaW5nXCIsIFwiQUlNLTlNKjIsIEFJTS03TSo0LCBGVUVMKjNcIiwgXCJBSU0tOU0qMiwgQ0JVLTk5KjQsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBNSy04MlNFKjQsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBNSy0yMCo0LCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstODIqNCwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIEFJTS03TSoyLCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstODMqMiwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIFpVTkkqNCwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIExBVS02MSo0LCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTEFVLTY4KjQsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBBSU0tN00qMiwgRlVFTCoxXCIsIFwiQUlNLTlYKjIsIEFJTS0xMjBDLTUqMSwgR0JVLTMxKjQsIEFURkxJUiwgRlVFTFwiLCBcIkFJTS05WCoyLCBBSU0tMTIwQy01KjYsIEZVRUwqM1wiLCBcIkFJTS05WCoyLCBBSU0tMTIwQy01KjEsIEFHTS02NUQqNCwgQVRGTElSLCBGVUVMXCIsIFwiQUlNLTlYKjIsIEFJTS0xMjBDLTUqMiwgQUdNLTg4QyoyLCBGVUVMXCIsIFwiQUlNLTlYKjIsIEFJTS0xMjBDLTUqMSwgR0JVLTM4KjQsIEdCVS0xMio0LCBBVEZMSVIsIEZVRUxcIiwgXCJBSU0tOVgqMiwgQUlNLTEyMEMtNSoxLCBBR00tODRFKjIsIERBVEFMSU5LLCBBVEZMSVIsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBBSU0tMTIwQy01KjEsIEFHTS04NEQqNCwgQVRGTElSLCBGVUVMXCIsIFwiQUlNLTlNKjIsIEFURkxJUiwgRlVFTFwiLCBcIkFJTS05TSoyLCBBVEZMSVIsIEZVRUwqMlwiXSwgXCJJLTE2XCI6IFtcIjZ4UlMtODJcIiwgXCIyeEZBQi0xMDBcIiwgXCI2eFJTLTgyLCAyeEZBQi0xMDBcIiwgXCI2eFJTLTgyLCAyeERyb3BUYW5rLTkzTFwiLCBcIjJ4RHJvcFRhbmstOTNMXCJdLCBcIkthLTUwXCI6IFtcIjR4RkFCLTUwMFwiLCBcIjJ4RnVlbCB0YW5rLCAyeEtNR1UgQVBcIiwgXCI4MHhTLTggVHNNXCIsIFwiMnhGdWVsIHRhbmssIDQweFMtOFwiLCBcIjgweFMtOFwiLCBcIjR4S01HVSBBVFwiLCBcIjJ4S01HVSBBUFwiLCBcIjJ4RnVlbCB0YW5rLCAxMng5QTQxNzJcIiwgXCIyeEZ1ZWwgdGFuaywgMnhVUEstMjNcIiwgXCIxMng5QTQxNzIsIDQweFMtOFwiLCBcIjEyeDlBNDE3MiwgMnhLTUdVIEFUXCIsIFwiNHhLTUdVIEFQXCIsIFwiMnhGQUItMjUwLCAyeEZ1ZWwgdGFua1wiLCBcIjEyeDlBNDE3MiwgMnhGQUItNTAwXCIsIFwiMjB4Uy0xM1wiLCBcIjQweFMtOFwiLCBcIjEyeDlBNDE3MiwgMnhVUEstMjNcIiwgXCIyeEtNR1UgQVRcIiwgXCI2eDlBNDE3MlwiLCBcIjJ4RnVlbCB0YW5rLCAyeEtNR1UgQVRcIiwgXCI0eEZ1ZWwgdGFua1wiLCBcIjJ4S01HVSBBUCwgMTJ4OUE0MTcyXCIsIFwiMTJ4OUE0MTcyXCIsIFwiMnhGdWVsIHRhbmtcIiwgXCI0MHhTLTggVHNNLCAxMng5QTQxNzJcIiwgXCIyeEZBQi01MDBcIiwgXCI0MHhTLTggVHNNLCAyeEZ1ZWwgdGFua1wiLCBcIjR4VVBLLTIzXCIsIFwiMTB4Uy0xM1wiLCBcIjQweFMtOCBUc01cIiwgXCIxMng5QTQxNzIsIDEweFMtMTNcIiwgXCIyeEZ1ZWwgdGFuaywgMnhGQUItNTAwXCIsIFwiMnhGQUItMjUwXCIsIFwiNHhGQUItMjUwXCIsIFwiMnhGdWVsIHRhbmssIDEweFMtMTNcIiwgXCIyeEZBQi0yNTAsIDEyeDlBNDE3MlwiLCBcIjJ4VVBLLTIzXCJdLCBcIkthLTUwXzNcIjogW1wiNHhJZ2xhXCIsIFwiMnhLaC0yNU1MLCAxMHhTLTEzLCA0eElnbGFcIiwgXCIxMng5QTQxNzIsIDQweFMtOEtPTSwgNHhJZ2xhXCIsIFwiMTJ4OUE0MTcyLCA0MHhTLThPRlAsIDR4SWdsYVwiLCBcIjEyeDlBNDE3MiwgNDB4Uy0xMywgNHhJZ2xhXCIsIFwiODB4Uy04S09NLCA0eElnbGFcIiwgXCI4MHhTLThPRlAsIDR4SWdsYVwiLCBcIjIweFMtMjAsIDR4SWdsYVwiLCBcIjR4VVBLLTIzLCA0eElnbGFcIiwgXCIxMHhTLTEzLCAyeEZBQi01MDAsIDR4SWdsYVwiLCBcIjEweFMtMTMsIDJ4RkFCLTI1MCwgNHhJZ2xhXCIsIFwiODB4Uy04T00sIDR4SWdsYVwiLCBcIjgweFMtOFRzTSwgNHhJZ2xhXCIsIFwiNDB4Uy04T0ZQLCAyeEZ1ZWwsIDR4SWdsYVwiLCBcIjEyeDlBNDE3MiwgMnhGdWVsLCA0eElnbGFcIl0sIFwiTC0zOUNcIjogW1wiU0FCLTEwMHgyXCIsIFwiUi0zU3gyXCIsIFwiU21va2VzXCIsIFwiQ2VudHJhbCBTbW9rZVwiLCBcIkZBQi0xMDB4MlwiLCBcIlMtNUtPeDMyXCJdLCBcIkwtMzlaQVwiOiBbXCJTLTVLT3gzMlwiLCBcIlMtNUtPeDY0XCIsIFwiUy01S094MzIsIFBUQi0xNTB4MlwiLCBcIlMtNUtPeDMyLCBQVEItMzUweDJcIiwgXCJTLTVLT3gzMiwgRkFCLTEwMHgyXCIsIFwiT0ZBQi0xMDAgSnVwaXRlciB4NCwgRkFCLTEwMHgyXCIsIFwiRkFCLTEwMHgyXCIsIFwiRkFCLTEwMHg0XCIsIFwiT0ZBQi0xMDAgSnVwaXRlciB4OFwiLCBcIkZBQi0xMDB4MiwgUFRCLTE1MHgyXCIsIFwiRkFCLTEwMHgyLCBQVEItMzUweDJcIiwgXCJQSy0zeDRcIiwgXCJQSy0zeDIsIFBUQi0xNTB4MlwiLCBcIlItNjBNeDJcIiwgXCJTQUItMTAweDRcIiwgXCJSLTNTeDJcIiwgXCJSLTNTeDIsIFBLLTN4MlwiLCBcIlItNjBNeDIsIFBLLTN4MlwiXSwgXCJNLTIwMDBDXCI6IFtcIkZveFwiLCBcIkZveCAvIE1hZ2ljIChRUkEpXCIsIFwiQWxwaGEgLyBTNTMwRFwiLCBcIkZveCAvIFM1MzBEIC8gTWFnaWNcIiwgXCJGb3ggLyBTNTMwRCAvIE1hZ2ljIC8gRWNsYWlyXCIsIFwiQnJhdm9cIiwgXCJCcmF2byAvIE1hZ2ljXCIsIFwiS2lsb1wiLCBcIktpbG8gLyBNYWdpY1wiLCBcIkJyYXZvIC8gNHhNay04MiAvIE1hZ2ljXCIsIFwiQnJhdm8gLyBHQlUtMTIgLyBNYWdpY1wiLCBcIkJyYXZvIC8gMnhHQlUtMTIgLyBNYWdpY1wiLCBcIkJyYXZvIC8gR0JVLTE2IC8gTWFnaWNcIiwgXCJCcmF2byAvIEdCVS0yNCAvIE1hZ2ljXCIsIFwiQnJhdm8gLyBCQVAtMTAwIC8gTWFnaWNcIiwgXCJCcmF2byAvIDR4U25ha2VFeWUgLyBNYWdpY1wiLCBcIkZveCAvIDR4TWstODIgLyBNYWdpY1wiLCBcIktpbG8gLyA0eE1rLTgyIC8gTWFnaWNcIl0sIFwiTUItMzM5QVwiOiBbXCJBIC0gMiozMjBMIFRpcFRhbmtzICsgMipERUZBLTU1MyBHdW5Qb2RzICsgMipNay44MyArIDIqTWsuODEgXCIsIFwiQSAtIDIqMzIwTCBUaXBUYW5rcyBbQ2xlYW5dXCIsIFwiUmVjb25cIiwgXCJUcmFpbmluZ1wiLCBcIkFBIC0gMiozMjBMIFRpcFRhbmtzICsgMipERUZBLTU1MyBHdW5Qb2RzICsgMipMQVUtMTAoWnVuaSBSb2NrZXRzKSBbQVJNQURBXVwiLCBcIkFNIC0gMiozMjBMIFRpcFRhbmtzICsgMipBTi9NMyBHdW5Qb2RzICsgMiozMzBMIFRhbmtzICsgMipMQVUtMyAoSHlkcmEgcm9ja2V0cylcIiwgXCJBIC0gMio1MDBMIFRpcFRhbmtzICsgMiozMzBMIFRhbmtzICsgTHVnZ2FnZSBDb250YWluZXIgIFtGZXJyeSBMb25nIFJhbmdlXVwiLCBcIkEgLSAyKjUwMEwgVGlwVGFua3MgKyA0Kk1rLjgySEQgKyAyKkxSLTI1IChBUEkgUm9ja2V0cylcIiwgXCJBIC0gMiozMjBMIFRpcFRhbmtzICsgMiozMzBMIFRhbmtzIFtGZXJyeSBNZWRpdW0gUmFuZ2VdXCIsIFwiQSAtIDIqNTAwTCBUaXBUYW5rcyArIDIqQU4vTTMgR3VuUG9kcyArIDIqTWF0cmEgMTU1ICsgMiogQmVsb3VnYVwiLCBcIlJ1bndheSBJbnRlcmRpY3Rpb25cIiwgXCJBIC0gMio1MDBMIFRpcFRhbmtzICsgMipERUZBLTU1MyBHdW5Qb2RzICsgMipNay44MkxEICsgMipMUi0yNSAoQVBJIFJvY2tldHMpXCIsIFwiQSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqTWsuODJMRCBCb21icyArIDIqTFItMjUoQVBJIFJvY2tldHMpXCIsIFwiQSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqTWsuODJMRCArIDIqTFItMjUgKEhFSSBSb2NrZXRzKVwiLCBcIkEgLSAyKjMyMEwgVGlwVGFua3MgKyA2Kk1rLjgyTERcIiwgXCJSdW53YXkgSW50ZXJkaWN0aW9uICgzNipCQVAtMTAwKVwiLCBcIkFudGkgLSBMaWdodCBBcm1vdXJlZCBWZWhpY2xlICgzNipCQVQtMTIwIEFCTClcIiwgXCJBUCAtIDIqMzIwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqMzMwTCBUYW5rcyArIDIqTWF0cmEgMTU1IChTTkVCIHJvY2tldHMpXCJdLCBcIk1CLTMzOUFQQU5cIjogW1wiUEFOIC0gU21va2UgV2hpdGVcIiwgXCJQQU4gLSBTbW9rZSBXaGl0ZSBhbmQgQ29sb3IgUmVkXCIsIFwiUEFOIC0gRnVlbCBFeHRlcm5hbCBbUkVEIFNNT0tFXVwiLCBcIlBBTiAtIEZ1bGwgUGF5bG9hZCBbUkVEIFNNT0tFXSArIDIqMzIwTCBUaXBUYW5rc1wiLCBcIlBBTiAtIEZ1bGwgUGF5bG9hZCBbR1JFRU4gU01PS0VdICsgMiozMjBMIFRpcFRhbmtzXCIsIFwiUEFOIC0gRnVlbCBFeHRlcm5hbCBbR1JFRU4gU01PS0VdXCIsIFwiUEFOIC0gRnVsbCBQYXlsb2FkIFtSRUQgU01PS0VdICsgMio1MDBMIFRpcFRhbmtzXCIsIFwiUEFOIC0gU21va2UgV2hpdGUgYW5kIENvbG9yIEdyZWVuXCIsIFwiUEFOIC0gRnVsbCBQYXlsb2FkIFtHUkVFTiBTTU9LRV0gKyAyKjUwMEwgVGlwVGFua3NcIl0sIFwiTWktMjRQXCI6IFtcIjJ4QjhWMjAgKFMtOEtPTSkrOHhBVEdNIDlNMTE0XCIsIFwiMnhCOFYyMCAoIFMtOEtPTSkrNHhBVEdNIDlNMTE0XCIsIFwiNHhCOFYyMCAoUy04S09NKSs0eEFUR00gOU0xMTRcIiwgXCIyeEI4VjIwIChTLThLT00pKzJ4Qm9tYnMtMjUwKzR4QVRHTSA5TTExNFwiLCBcIjJ4QjhWMjAgKFMtOE9GUDIpKzR4QVRHTSA5TTExNFwiLCBcIjR4VUItMzJBIChTLTVLTykrNHhBVEdNIDlNMTE0XCIsIFwiNHhHVVYtMSBBUDMwKzR4QVRHTSA5TTExNFwiLCBcIjJ4R1VWLTEgQVAzMCs0eEFUR00gOU0xMTRcIiwgXCIyeEdVVi0xIChHVU4gMTIuNysyeDcuNjIpICs0eEFUR00gOU0xMTRcIiwgXCIyeEtNR1UgKDk2IEFPIDIuNVJUKSs4eEFUR00gOU0xMTRcIiwgXCIyeEItMTNMKzR4QVRHTSA5TTExNFwiLCBcIjJ4Uy0yNEIrNHhBVEdNIDlNMTE0XCIsIFwiNHhTLTI0Qis0eEFUR00gOU0xMTRcIiwgXCIyeEJvbWJzLTUwMCs0eEFUR00gOU0xMTRcIiwgXCI0eEJvbWJzLTI1MCs0QVRHTSA5TTExNFwiLCBcIjJ4UkJLLTUwMCAoUFRBQi0xTSkrNHhBVEdNIDlNMTE0XCIsIFwiMnhSQkstNTAwVSAoT0FCIDIuNVJUKSs0eEFUR00gOU0xMTRcIiwgXCI0eFJCSy0yNTAgKDQyIFBUQUIgMi41TSkgKzRBVEdNIDlNMTE0XCIsIFwiNHhSQkstMjUwLTI3NSAoMTUwIEFPLTFTQ2gpKzRBVEdNIDlNMTE0XCIsIFwiNHhQVEItNDUwIEZ1ZWwgdGFua1wiXSwgXCJNaUctMTlQXCI6IFtcIlBUQi03NjAgeCAyXCIsIFwiSy0xM0EgeCAyLCBQVEItNzYwIHggMlwiLCBcIkstMTNBIHggMlwiLCBcIkstMTNBIHggMiwgT1JPLTU3SyB4IDIsIFBUQi03NjAgeCAyXCIsIFwiT1JPLTU3SyB4IDIsIFBUQi03NjAgeCAyXCIsIFwiT1JPLTU3SyB4IDRcIiwgXCJPUk8tNTdLIHggMlwiLCBcIkZBQi0xMDBNIHggMiwgT1JPLTU3SyB4IDJcIiwgXCJGQUItMjUwIHggMiwgT1JPLTU3SyB4IDJcIiwgXCJGQUItMTAwTSB4IDJcIiwgXCJGQUItMjUwIHggMlwiXSwgXCJNaUctMjFCaXNcIjogW1wiUGF0cm9sLCBsb25nIHJhbmdlXCIsIFwiUGF0cm9sLCBtZWRpdW0gcmFuZ2VcIiwgXCJQYXRyb2wsIHNob3J0IHJhbmdlXCIsIFwiSGFyZCB0YXJnZXRzLCBCT01CU1wiLCBcIlVua25vd24gb3IgbWl4ZWQgdGFyZ2V0cywgQk9NQlMgKyBST0NLRVRTXCIsIFwiU29mdCB0YXJnZXRzLCBDTFVTVEVSUyArIFJPQ0tFVFNcIiwgXCJTb2Z0IHRhcmdldHMsIENMVVNURVJTXCIsIFwiU29mdCB0YXJnZXRzLCBzY2F0dGVyZWRcIiwgXCJGZXcgYmlnIHRhcmdldHMsIEdST00gKyBCT01CU1wiLCBcIlZlcnkgaGFyZCB0YXJnZXQsIFBFTkVUUkFUSU9OXCIsIFwiQWVyaWFsIGF0dGFjaywgaGFyZCB0YXJnZXRzLCBDTFVTVEVSU1wiLCBcIkhhcmQgdGFyZ2V0cywgUk9DS0VUUywgUEVORVRSQVRJT05cIiwgXCJTb2Z0IHRhcmdldHMsIFJPQ0tFVFMsIEJMQVNULUZSQUdNRU5UU1wiLCBcIkxvbmcgcmFuZ2UsIE1JWFwiLCBcIkxvbmcgcmFuZ2UsIFJBREFSIEdVSURFRCBNSVNTSUxFU1wiLCBcIkxvbmcgcmFuZ2UsIElORlJBIFJFRCBNSVNTSUxFU1wiLCBcIkVzY29ydFwiLCBcIkVzY29ydCwgSkFNTUVSXCIsIFwiTmlnaHQsIElMTFVNSU5BVE9SXCIsIFwiTG9uZyByYW5nZSwgSkFNTUVSXCIsIFwiU29mdCB0YXJnZXRzLCBVUEsgKyBST0NLRVRTXCIsIFwiU29mdCB0YXJnZXRzLCBVUEsgKyBDTFVTVEVSU1wiLCBcIlBhdHJvbCwgSkFNTUVSXCIsIFwiTlVDTEVBUiBBXCIsIFwiTlVDTEVBUiBCXCIsIFwiU2hvcnQgcmFuZ2VcIiwgXCJBRVJPQkFUSUNcIl0sIFwiTWlyYWdlLUYxQlwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUJEXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUJFXCI6IFtcIjIqQUlNOS1KVUxJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KVUxJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMEVNXCIsIFwiMipBSU05LUpVTEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKkFJTTktSiwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SlVMSSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQlFcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSVwiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQy0yMDBcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQ0VcIjogW1wiMipBSU05LUpVTEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipBSU05LUpVTEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwRU1cIiwgXCIyKkFJTTktSlVMSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCAyNTAgSERcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKVUxJLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDR1wiOiBbXCIyKkFJTS05IEpVTEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjQqQUlNLTkgSlVMSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOSBKVUxJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05IEpVTEksIFI1MzBJUlwiLCBcIjIqQUlNLTkgSlVMSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipBSU0tOSBKVUxJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipBSU0tOSBKVUxJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTkgSlVMSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05IEpVTEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTkgSlVMSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOSBKVUxJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNIXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQ0pcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDS1wiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNSXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNUXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNaXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxRERBXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUVEXCI6IFtcIjIqUjU1MCBNYWdpYyBJSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJSVwiLCBcIjIqUjU1MCBNYWdpYyBJSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSUksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIElJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSUksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUVEQVwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFFRVwiOiBbXCIyKkFJTTktSlVMSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU05LUpVTEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTTktSlVMSSwgUjUzMEVNXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqQUlNOS1KVUxJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipBSU05LUosIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05SiwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SiwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUpVTEksIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUVIXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxRVFcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSVwiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxSkFcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFNLUNFXCI6IFtcIjIqQUlNOS1KVUxJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU05LUpVTEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKkFJTTktSlVMSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCAyNTAgSERcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKVUxJLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFNLUVFXCI6IFtcIjIqQUlNOS1KVUxJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU05LUpVTEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKkFJTTktSlVMSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCAyNTAgSERcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKVUxJLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJTQTM0MkxcIjogW1wiTTYyMSwgOHhTTkVCNjggRUFQXCIsIFwiTTYyMSwgOHhTTkVCNjggRUFQLCBJUiBEZWZsZWN0b3JcIiwgXCJNNjIxLCA4eFNORUI2OCBFQVAsIElSIERlZmxlY3RvciwgU2FuZCBGaWx0ZXJcIl0sIFwiU0EzNDJNXCI6IFtcIkhPVDN4NFwiLCBcIklSIERlZmxlY3RvclwiLCBcIkhvdDN4NCwgRkFTLCBJUiBEZWZsZWN0b3JcIiwgXCJIT1QzeDJcIiwgXCJIb3QzeDQsIElSIERlZmxlY3RvclwiLCBcIkhvdDN4MiwgSVIgRGVmbGVjdG9yXCJdLCBcIlNBMzQyTWluaWd1blwiOiBbXCJJUiBEZWZsZWN0b3JcIiwgXCJJUiBEZWZsZWN0b3IsIFNhbmQgRmlsdGVyXCJdLCBcIlNBMzQyTWlzdHJhbFwiOiBbXCJNaXN0cmFsIHggNFwiLCBcIk1pc3RyYWwgeCA0LCBJUiBEZWZsZWN0b3JcIiwgXCJNaXN0cmFsIHggNCwgSVIgRGVmbGVjdG9yLCBTYW5kIEZpbHRlclwiXSwgXCJBLTIwR1wiOiBbXCI1MDAgbGIgR1AgYm9tYiBMRCo0XCJdLCBcIkJmLTEwOUstNFwiOiBbXCJGdWVsIFRhbmtcIiwgXCJTQzI1MFwiLCBcIlNDNTAwXCJdLCBcIkZXLTE5MEE4XCI6IFtcIldpdGhvdXQgcHlsb25cIiwgXCJTQyA1MCAqIDRcIiwgXCJBQiAyNTAgKHcvIFNEIDEwQSlcIiwgXCJBQiAyNTAgKHcvIFNEIDIpXCIsIFwiQUIgNTAwICh3LyBTRCAxMEEpXCIsIFwiU0MgMjUwIEwyXCIsIFwiU0MgMjUwIEpcIiwgXCJTQyA1MDAgSlwiLCBcIlNDIDUwMCBMMlwiLCBcIlNEIDI1MCBTdGdcIiwgXCJTRCA1MDAgQVwiLCBcIkZ1ZWwgVGFuayAzMDAgbGl0ZXJzXCIsIFwiQlIgMjFcIl0sIFwiRlctMTkwRDlcIjogW1wiU0M1MDBcIiwgXCJGdWVsIFRhbmtcIiwgXCJSNE1cIiwgXCJCUiAyMVwiXSwgXCJNb3NxdWl0b0ZCTWtWSVwiOiBbXCIyNTAgbGIgUy5BLlAqMjsgNTAwIGxiIFMuQS5QLioyXCIsIFwiNTAwIGxiIEdQIE1rLlYqMiwgNTAwIGxiIEdQIFNob3J0IHRhaWwqMlwiLCBcIjEwMCBnYWwgRHJvcCB0YW5rKjIsIDUwMCBsYiBNQyBTaG9ydCB0YWlsKjJcIiwgXCJSUC0zIDYwbGIgU0FQIE5vMiBNay5JKjgsIDI1MCBsYiBBLkEuUC4qMlwiLCBcIjEwMCBnYWwuIERyb3AgdGFuayoyLCAyNTAgbGIgTUMgTWsuSUksIFJQLTMgNjBsYiBGIE5vMSBNay5JKjRcIiwgXCI1MDAgbGIgR1AgU2hvcnQgdGFpbCo0XCJdLCBcIlAtNDdELTMwXCI6IFtcIkFOLU02NSoyXCIsIFwiRnVlbDE1MCoyXCIsIFwiQU4tTTY0KjIsIEZ1ZWwxMTBcIiwgXCJBTi1NNTcqM1wiXSwgXCJQLTQ3RC0zMGJsMVwiOiBbXCJBTi1NNTcqMlwiLCBcIkFOLU02NCoyLCBGdWVsMTEwXCJdLCBcIlAtNDdELTQwXCI6IFtcIkFOLU02NSoyXCIsIFwiRnVlbDE1MCoyXCIsIFwiQU4tTTU3KjNcIiwgXCJBTi1NNjQqMiwgRnVlbDExMFwiLCBcIk04KjYsIEFOLU01NyoyLCBGdWVsMTEwXCIsIFwiSFZBUioxMCwgRnVlbDExMFwiXSwgXCJQLTUxRC0zMC1OQVwiOiBbXCJGdWVsNzUqMlwiLCBcIkhWQVIqNixGdWVsNzUqMlwiLCBcIkhWQVIqNixNNjQqMlwiLCBcIkhWQVIqNlwiLCBcIk02NCoyXCIsIFwiSFZBUioxMFwiLCBcIlNtb2tlc1wiXSwgXCJQLTUxRFwiOiBbXCJGdWVsNzUqMlwiLCBcIkhWQVIqNixGdWVsNzUqMlwiLCBcIkhWQVIqNixNNjQqMlwiLCBcIkhWQVIqNlwiLCBcIk02NCoyXCIsIFwiSFZBUioxMFwiLCBcIlNtb2tlc1wiXSwgXCJBLTUwXCI6IFtdLCBcIkFILTFXXCI6IFtcIjE0eEhZRFJBLTcwIFdQXCIsIFwiMzh4SFlEUkEtNzAgV1BcIiwgXCI4eEJHTS03MSwgMTR4SFlEUkEtNzBcIiwgXCI4eEJHTS03MSwgMTR4SFlEUkEtNzAgV1BcIiwgXCI4eEJHTS03MSwgMzh4SFlEUkEtNzAgV1BcIiwgXCIxNHhIWURSQS03MFwiLCBcIjM4eEhZRFJBLTcwXCIsIFwiOHhBR00tMTE0XCIsIFwiMjh4SFlEUkEtNzBcIiwgXCI4eEJHTS03MSwgMzh4SFlEUkEtNzBcIiwgXCI4eEFHTS0xMTQsIDM4eEhZRFJBLTcwIFdQXCIsIFwiOHhCR00tNzFcIiwgXCI4eEFHTS0xMTQsIDE0eEhZRFJBLTcwIFdQXCIsIFwiNzZ4SFlEUkEtNzBcIiwgXCI4eEFHTS0xMTQsIDM4eEhZRFJBLTcwXCIsIFwiOHhBR00tMTE0LCAxNHhIWURSQS03MFwiXSwgXCJBSC02NEFcIjogW1wiOHhBR00tMTE0XCIsIFwiMzh4SFlEUkEtNzAgV1BcIiwgXCI3NnhIWURSQS03MFwiLCBcIjh4QUdNLTExNCwgMzh4SFlEUkEtNzAgV1BcIiwgXCIzOHhIWURSQS03MFwiLCBcIjh4QUdNLTExNCwgMzh4SFlEUkEtNzBcIiwgXCJBR00tMTE0SyoxNlwiXSwgXCJBSC02NERcIjogW1wiNzZ4SFlEUkEtNzBcIiwgXCIzOHhIWURSQS03MFwiLCBcIjM4eEhZRFJBLTcwIFdQXCIsIFwiOHhBR00tMTE0XCIsIFwiOHhBR00tMTE0LCAzOHhIWURSQS03MCBXUFwiLCBcIjh4QUdNLTExNCwgMzh4SFlEUkEtNzBcIiwgXCJBR00tMTE0SyoxNlwiXSwgXCJBbi0yNkJcIjogW10sIFwiQW4tMzBNXCI6IFtdLCBcIkItMUJcIjogW1wiTWstODIqODRcIiwgXCJBR00tMTU0KjEyXCIsIFwiR0JVLTM4KjQ4XCIsIFwiQ0JVLTg3KjMwXCIsIFwiQ0JVLTk3KjMwXCIsIFwiR0JVLTM4KjE2LCBDQlUtOTcqMjBcIiwgXCJNay04NCoyNFwiLCBcIkdCVS0zMSoyNFwiLCBcIkdCVS0zMShWKTMvQioyNFwiLCBcIkdCVS0zMSo4LCBHQlUtMzgqMzJcIl0sIFwiQi01MkhcIjogW1wiTWstODQqMThcIiwgXCJNayA4Mio1MVwiLCBcIk1rMjAqMThcIiwgXCJBR00tODZDKjIwXCIsIFwiQUdNLTg0QSo4XCJdLCBcIkMtMTMwXCI6IFtdLCBcIkMtMTdBXCI6IFtdLCBcIkNILTQ3RFwiOiBbXSwgXCJDSC01M0VcIjogW10sIFwiRS0yQ1wiOiBbXSwgXCJFLTNBXCI6IFtdLCBcIkYtMTE3QVwiOiBbXCJHQlUtMTIqMlwiLCBcIkdCVS0xMCoyXCIsIFwiR0JVLTI3KjJcIl0sIFwiRi0xNEFcIjogW1wiQUlNLTkqMlwiLCBcIkFJTS01NEMqNixBSU0tOSoyXCIsIFwiQUlNLTU0Qyo0LEFJTS05KjIsQUlNLTcqMlwiXSwgXCJGLTE1Q1wiOiBbXCJBSU0tMTIwQio0LCBBSU0tN00qMiwgQUlNLTlNKjIsIEZ1ZWwqM1wiLCBcIkFJTS05KjIsQUlNLTEyMCo2LEZ1ZWxcIiwgXCJBSU0tOSo0LEFJTS0xMjAqNCxGdWVsKjNcIiwgXCJBSU0tOSo0LEFJTS0xMjAqNCxGdWVsXCIsIFwiQUlNLTkqMixBSU0tMTIwKjIsQUlNLTcqNCxGdWVsKjNcIiwgXCJBSU0tOSoyLEFJTS0xMjAqNixGdWVsKjNcIiwgXCJBSU0tOSo0LEFJTS03KjQsRnVlbFwiLCBcIkFJTS0xMjAqOCxGdWVsXCIsIFwiQUlNLTkqNCxBSU0tNyo0LEZ1ZWwqM1wiLCBcIkFJTS0xMjAqOCxGdWVsKjNcIiwgXCJBSU0tOSoyLEFJTS0xMjAqMixBSU0tNyo0LEZ1ZWxcIl0sIFwiRi0xNUVcIjogW1wiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMKjMsQ0JVLTg3KjYsTWstODJBSVIqNlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCozLENCVS05NyoxMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCozLE1rLTgyKjEyXCIsIFwiQUlNLTEyMEIqNCxBSU0tMTIwQyo0LEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMzEqNCxBR00tNjVILEFHTS02NURcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsQ0JVLTEwMyoyLEdCVS0xMixHQlUtMzgsQUdNLTE1NEMqMlwiLCBcIkFJTS0xMjBCKjQsQUlNLTlNKjQsRlVFTCozXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixBSU0tMTIwQyoyLEFJTS03TSoyLEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMTIqNCxHQlUtMzgqNCxBR00tMTU0QyoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLEdCVS0zMSo0LEFHTS0xNTRDKjJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEFJTS03TSo0LEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCozLE1rLTg0KjhcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsQUdNLTE1NEMqMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMTIqNCxHQlUtMzgqNCxBR00tNjVEKjJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsR0JVLTEyKjQsR0JVLTM4KjQsQUdNLTY1SyoyXCIsIFwiQUlNLTEyMEMqMixBSU0tOU0qNCxBSU0tN00qMixGVUVMKjNcIiwgXCJBSU0tOU0qNCxBSU0tN00qNCxGVUVMKjNcIiwgXCJBSU0tMTIwQyoyLEFJTS05TSoyLEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxNay04NCo4LEFHTS0xNTRDKjJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMyxNay04MkFJUioxMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMTIqMixHQlUtMzgqMixBR00tMTU0QyoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLEdCVS0xMioyLEdCVS0zOCoyLEFHTS02NUgsQUdNLTY1RFwiLCBcIkFJTS0xMjBCKjIsQUlNLTEyMEMqNCxBSU0tOU0qMixGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMyxNay04Mio2LE1rLTgyQUlSKjZcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsQ0JVLTEwMyoyLEdCVS0xMixHQlUtMzgsQUdNLTY1SCoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLEFHTS02NUQqMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCoyLFNVVS0yNSoyLEdCVS0xMixHQlUtMzhcIiwgXCJBSU0tMTIwQio2LEFJTS05TSoyLEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxNay04MkFJUioxMixBR00tMTU0QyoyXCIsIFwiQUlNLTEyMEMqNixBSU0tOU0qMixGVUVMKjNcIiwgXCJHQlUtMzEoVikzL0IqNSwgQUlNLTEyMEMqMiwgQUlNLTlNKjJcIl0sIFwiRi0xNkEgTUxVXCI6IFtcIkZ1ZWwqM1wiLCBcIkFHTS04OCoyLCBBR00tNjVEKjIsIEFJTS0xMjBCKjIsIEVDTVwiLCBcIk1rLTgyKjYsQUlNLTEyMCoyLEVDTSxGdWVsKjJcIiwgXCJNay04MioyLEFJTS0xMjAqMixBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJBR004OCoyLEFHTS02NUQqNixBSU0tMTIwKjIsQUlNLTkqMixFQ01cIiwgXCJBSU0tMTIwKjIsR0JVLTEwKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIkFJTS05KjQsRUNNXCIsIFwiTWsyMCo0LEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqNixFQ01cIiwgXCJBSU0tMTIwKjQsQUlNLTkqMixFQ01cIiwgXCJBR004OCwgQUdNLTY1RCwgQUlNLTEyMCoyLEZ1ZWwqMixFQ01cIiwgXCJBR00tNjVEKjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBSU0tOSo0LEVDTSxGdWVsKjJcIiwgXCJBSU0tMTIwKjQsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiQUdNLTg4KjIsQUlNLTEyMCoyLEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIk1rLTg0KjIsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiQUlNLTEyMCo2LEVDTSxGdWVsKjJcIiwgXCJBR00tMTU0KjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBR00tODgqMixBR00tNjVEKjIsQUlNLTEyMEIqMixBSU0tOU0qMixFQ01cIiwgXCJNazIwKjIsQUlNLTEyMCoyLEVDTSxGdWVsKjJcIiwgXCJBSU0tMTIwKjIsQUlNLTkqMixHQlUtMTIqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUdNLTY1SyoyLEFJTS0xMjAqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUlNLTEyMEIqMl9BSU0tOU0qMl9BR00tMTE5KjRfQUxRLTEzMVwiXSwgXCJGLTE2QVwiOiBbXCJBR00tODgqMixBSU0tMTIwKjIsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiTWsyMCo0LEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFJTS05KjQsRUNNLEZ1ZWwqMlwiLCBcIkFHTS02NUQqMixBSU0tMTIwKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqNCxBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJBR004OCoyX0FHTS02NUQqNl9BSU0tMTIwKjJfQUlNLTkqMl9FQ01cIiwgXCJBR00tNjVLKjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBSU0tMTIwKjIsQUlNLTkqMixHQlUtMTIqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUlNLTEyMCoyLEdCVS0xMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBSU0tMTIwKjYsRUNNLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqNixFQ01cIiwgXCJBSU0tOSo0LEVDTVwiLCBcIkZ1ZWwqM1wiLCBcIk1rLTg0KjIsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiQUlNLTEyMCo0LEFJTS05KjIsRUNNXCIsIFwiTWstODIqNixBSU0tMTIwKjIsRUNNLEZ1ZWwqMlwiLCBcIk1rLTgyKjIsQUlNLTEyMCoyLEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFHTS0xNTQqMixBSU0tMTIwKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIk1rMjAqMixBSU0tMTIwKjIsRUNNLEZ1ZWwqMlwiLCBcIkFHTS0xMTkqMixBSU0tMTIwQioyLEFJTS05TSoyLEFMUS0xODQsRnVlbCoyXCJdLCBcIkYtMTZDIGJsLjUwXCI6IFtcIkFJTS0xMjBCKjQsIEFJTS05TSoyLCBGdWVsXCIsIFwiQUlNLTEyMEMqNCwgQUlNLTlNKjIsIEZ1ZWxcIiwgXCJBR00tNjVHKjIsIEFJTS0xMjBDKjIsIEFJTS05TSoyLCBGdWVsLCBFQ01cIiwgXCJBR00tNjVEKjYsIEFJTS0xMjBCKjIsIEFJTS05TSoyLCBFQ00sIEZ1ZWxcIiwgXCJNazg2KjYsIEFJTS05TSo0LCBFQ00sIEZ1ZWxcIiwgXCJDQlUtOTcqNCwgQUlNLTlNKjQsICBGdWVsXCIsIFwiQ0JVLTg3KjQsIEFJTS05TSo0LCAgRnVlbFwiLCBcIkFHTS02NUQqMiwgQ0JVLTg3KjIsIEFJTS05TSo0LCAgRnVlbFwiLCBcIkFHTS02NUQqMiwgQ0JVLTk3KjIsIEFJTS05TSo0LCAgRnVlbFwiLCBcIk1rODQqMiwgQUlNLTlNKjQsIEVDTSwgRnVlbFwiLCBcIkdCVS0zMXYxKjIsIEFJTS05TSo0LCBFQ00sIEZ1ZWxcIiwgXCJHQlUtMzF2MyoyLCBBSU0tOU0qNCwgRUNNLCBGdWVsXCIsIFwiR0JVLTMxdjEqMiwgTWs4Mio2LCBBSU0tOU0qNCwgRnVlbFwiLCBcIk1rODQqNCwgQUlNLTlNKjQsIEZ1ZWxcIiwgXCJNazgyKjEyLCBBSU0tOU0qNCwgRnVlbFwiLCBcIkFHTS0xNTRDKjIsIEFJTS05TSo0LCBFQ00sIEZ1ZWxcIl0sIFwiRi0xNkMgYmwuNTJkXCI6IFtcIkFHTS04OCoyLCBBR00tNjVEKjIsIEFJTS0xMjBCKjIsIEVDTSxMSUdIVE5JTkdcIiwgXCJNay04Mio2LEFJTS0xMjAqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFHTTg4KjIsQUdNLTY1RCo2LEFJTS0xMjAqMixBSU0tOSoyLEVDTSxMSUdIVE5JTkdcIiwgXCJBR00tNjVEKjQsQUlNLTEyMCoyLEVDTSxGdWVsKjIsTElHSFROSU5HXCIsIFwiQUlNLTEyMCoyLEdCVS0zMSoyLEVDTSxGdWVsKjIsTElHSFROSU5HXCIsIFwiQUlNLTEyMCoyLEdCVS0zMSh2KSoyLEVDTSxGdWVsKjIsTElHSFROSU5HXCIsIFwiQUdNLTg4KjIsQUlNLTEyMCoyLEFJTS05KjIsRUNNLEZ1ZWwqMixMSUdIVE5JTkdcIiwgXCJDb3B5IEFJTS0xMjAqMixHQlUtMzgqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFJTS0xMjAqMixHQlUtMTAqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIk1rLTg0KjIsQUlNLTEyMCoyLEVDTSxGdWVsKjIsTElHSFROSU5HXCIsIFwiQUdNLTE1NCoyLEFJTS0xMjAqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIk1rLTgyQUlSKjYsQUlNLTEyMCoyLEVDTSxGdWVsKjIsTElURU5JTkdcIiwgXCJDQlU5Nyo0LEFJTTEyMCoyLEVDTSxGdWVsKjIsTElURU5JTkdcIiwgXCJBR00tODgqMixBR00tNjVEKjIsQUlNLTEyMEIqMixBSU0tOU0qMixFQ00sTElURU5JTkdcIiwgXCJDQlU4NyoyLEFJTS0xMjAqMixFQ00sRnVlbCoyLExJVEVOSU5HXCIsIFwiQUdNODgsIEFHTS02NUQsIEFJTS0xMjAqMixGdWVsKjIsRUNNLExJVEVOSU5HXCIsIFwiQUlNLTEyMCoyLEdCVS0xMioyLEVDTSxGdWVsKjIsTElURU5JTkdcIiwgXCJBR00tNjVLKjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjIsTElURU5JTkdcIiwgXCJBR00tNjVHKjQsQUlNLTEyMEMqMixBSU0tOU0qMixFQ01cIiwgXCJBSU0tMTIwQyo0LEFJTS05TSoyLEVDTSxGdWVsKjJcIiwgXCJBSU0tMTIwQio0LEFJTS05TSoyLEVDTSxGdWVsKjJcIiwgXCJBSU0tOU0qNCxGdWVsKjJcIiwgXCJBSU0tMTIwQyoyLEFJTS0xMjBCKjIsQUlNLTlNKjIsRnVlbCozXCIsIFwiQUlNLTlQKjRcIiwgXCJBSU0tOU0qMixFQ01cIl0sIFwiRi00RVwiOiBbXCJBSU0tOSo0LEFJTS03KjRcIiwgXCJBR000NSoyX0FHTS02NUQqNF9BSU03KjJfRUNNXCIsIFwiQUdNLTQ1KjIsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiTWstODIqMTgsQUlNLTcqMixFQ01cIiwgXCJHQlUtMTIqMixBSU0tNyoyLEZ1ZWwqMixFQ01cIiwgXCJNazIwKjEyLEFJTS03KjIsRUNNXCIsIFwiTWstODIqNixBSU0tNyoyLEZ1ZWwqMixFQ01cIiwgXCJHQlUtMTAqMixBSU0tNyoyLEZ1ZWwqMixFQ01cIiwgXCJNazIwKjYsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiQUdNLTQ1KjQsQUlNLTcqMixFQ01cIiwgXCJBR00tNjVLKjQsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiRnVlbCozXCIsIFwiQUlNLTkqNCxBSU0tNyo0LEZ1ZWwqMlwiLCBcIk1rLTg0KjIsQUlNLTcqMixFQ01cIiwgXCJBR00tNjVLKjQsQUlNLTdNKjQsRnVlbCozXCJdLCBcIkYvQS0xOEFcIjogW1wiR0JVLTE2KjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBSU0tOSo2LEZ1ZWxcIiwgXCJNay04NCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUdNLTY1RCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUdNODgqNF9BSU05KjJfQUlNN19GTElSIFBvZF9GdWVsXCIsIFwiQUlNLTkqNCxGdWVsKjNcIiwgXCJMQVUtMTAqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTS04OCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiTUstODIqOCxBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWxcIiwgXCJNSy04Mio0LEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTkqNCxBSU0tNyoyLEZ1ZWwqM1wiLCBcIkFHTS02NUsqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkZ1ZWwqM1wiLCBcIkFHTTg4KjJfQUdNNjVEKjJfQUlNOSoyX0FJTTdfRkxJUiBQb2RfRnVlbFwiLCBcIkdCVS0xMioyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTkqNCxBSU0tNyo0LEZ1ZWxcIiwgXCJNazIwKjQsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJHQlUtMTAqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTS04NEEqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiXSwgXCJGL0EtMThDXCI6IFtcIkFHTS02MioyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiR0JVLTEwKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJHQlUtMTIqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkZ1ZWwqM1wiLCBcIk1rLTg0KjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJHQlUtMTYqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTS0xNTQqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFJTS0xMjAqNCxBSU0tOSoyLEZ1ZWwqM1wiLCBcIkFHTS02NUQqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTTg4KjJfQUdNNjVEKjJfQUlNOSoyX0FJTTdfRkxJUiBQb2RfRnVlbFwiLCBcIkFHTTg4KjRfQUlNOSoyX0FJTTdfRkxJUiBQb2RfRnVlbFwiLCBcIkFJTS05KjIsQUlNLTcqNixGdWVsXCIsIFwiTWsyMCo0LEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTEyMCo2LEFJTS05KjIsRnVlbFwiLCBcIkxBVS0xMCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTkqMixBSU0tNyo0LEZ1ZWwqM1wiLCBcIk1LLTgyKjgsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsXCIsIFwiQUlNLTEyMCoyLEFJTS05KjIsQUlNLTcqMixGdWVsKjNcIiwgXCJBR00tODgqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTS04NEUqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIk1LLTgyKjQsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR00tODRBKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBSU0tOU0qMixBR00tNjVEKjIsTWstODIqNCxGTElSIFBvZCxGdWVsXCIsIFwiQUlNLTEyMCo0LEFJTS05KjIsQUlNLTcqMixGdWVsXCIsIFwiQUdNLTY1SyoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCJdLCBcIklMLTc2TURcIjogW10sIFwiSUwtNzhNXCI6IFtdLCBcIkthLTI3XCI6IFtdLCBcIkthLTUyXCI6IFtcIkFQVS02IFZpa2hyLU0qMiwgS2gtMjVNTCoyXCIsIFwiQVBVLTYgVmlraHItTSoyXCIsIFwiQi04KjRcIiwgXCJLTUdVLTIgKEFPLTIuNVJUKSo0XCIsIFwiQi04KjIsIEFQVS02IFZpa2hyLU0qMlwiLCBcIkZBQi01MDAqMlwiLCBcIlVCLTEzKjJcIiwgXCJGQUItMjUwKjRcIiwgXCJLaC0yNU1MKjIsIFItNzMqMlwiXSwgXCJLQy0xMEFcIjogW10sIFwiS0MtMTM1XCI6IFtdLCBcIk1pLTI0VlwiOiBbXCIyeEZBQi01MDBcIiwgXCIxMHhTLTEzXCIsIFwiMnhGQUItMjUwXCIsIFwiNHg5TTExNCwgMnhGdWVsIHRhbmtcIiwgXCIxMjh4Uy01XCIsIFwiODB4Uy04IFRzTVwiLCBcIjR4OU0xMTQsIDQweFMtOCBUc01cIiwgXCI2NHhTLTVcIiwgXCI4eDlNMTE0XCIsIFwiNHg5TTExNCwgODB4Uy04XCIsIFwiNHg5TTExNCwgMTI4eFMtNVwiLCBcIjJ4S01HVSBBUFwiLCBcIjR4RnVlbCB0YW5rXCIsIFwiNHhVUEstMjNcIiwgXCI0eDlNMTE0LCAxMHhTLTEzXCIsIFwiNHg5TTExNCwgODB4Uy04IFRzTVwiLCBcIjR4OU0xMTRcIiwgXCI4MHhTLThcIiwgXCI0MHhTLTggVHNNXCIsIFwiOHg5TTExNCwgNDB4Uy04IFRzTVwiLCBcIjh4OU0xMTQsIDEweFMtMTNcIiwgXCIyeEZ1ZWwgdGFua1wiLCBcIjR4OU0xMTQsIDR4VVBLLTIzXCIsIFwiMnhVUEstMjNcIiwgXCI4eDlNMTE0LCA2NHhTLTVcIiwgXCI4eDlNMTE0LCA0MHhTLThcIiwgXCIyMHhTLTEzXCIsIFwiNDB4Uy04XCIsIFwiOHg5TTExNCwgMnhVUEstMjNcIl0sIFwiTWktMjZcIjogW10sIFwiTWktMjhOXCI6IFtcIjJ4RkFCLTI1MFwiLCBcIjR4RnVlbCB0YW5rXCIsIFwiODB4Uy04XCIsIFwiNHhLTUdVIEFQXCIsIFwiNHhVUEstMjNcIiwgXCIxNng5TTExNCwgMTB4Uy0xM1wiLCBcIjR4RkFCLTUwMFwiLCBcIjE2eDlNMTE0LCAyeEZBQi01MDBcIiwgXCI0MHhTLThcIiwgXCI0MHhTLTggVHNNXCIsIFwiMnhLTUdVIEFQXCIsIFwiMnhVUEstMjNcIiwgXCIxNng5TTExNCwgMnhVUEstMjNcIiwgXCIyeEZBQi01MDBcIiwgXCIxNng5TTExNCwgNDB4Uy04XCIsIFwiMTZ4OU0xMTRcIiwgXCIyMHhTLTEzXCIsIFwiMTZ4OU0xMTQsIDJ4S01HVSBBUFwiLCBcIjR4RkFCLTI1MFwiLCBcIjR4S01HVSBBVFwiLCBcIjE2eDlNMTE0LCA0MHhTLTggVHNNXCIsIFwiODB4Uy04IFRzTVwiLCBcIjJ4S01HVSBBVFwiLCBcIjl4OU0xMTRcIiwgXCIyeEZ1ZWwgdGFua1wiLCBcIjEweFMtMTNcIiwgXCIyeEZBQi0yNTAsIDE2eDlNMTE0XCIsIFwiMTZ4OU0xMTQsIDJ4S01HVSBBVFwiXSwgXCJNaS04TVRcIjogW1wiNCB4IEI4XCIsIFwiNCB4IEI4ICsgMkdVVl9BUC0zMCAoR3JMIDMwbW0pXCIsIFwiMiB4IFVQSyArMiB4IEI4XCIsIFwiMiB4QjggKyAyR1VWX1lhS0IgKE1HLTEyLjcrNy42MikrIDJHVVZfQVAtMzAgKEdyTCAzMG1tKVwiLCBcIjYgeCBGQUItMTAwXCIsIFwiMiB4IEI4ICsgMiB4IFVQSy0yMy0yNTBcIiwgXCIyIHggVVBLLS0yMy0yNTBcIl0sIFwiTWlHLTE1YmlzXCI6IFtcIjIqRkFCLTUwXCIsIFwiMipGQUItMTAwTVwiLCBcIjIqMzAwTFwiLCBcIjIqNDAwTFwiLCBcIjIqNjAwTFwiLCBcIkZ1ZWwgdGFuayAzMDBcIiwgXCJGdWVsIHRhbmsgNDAwXCJdLCBcIk1pRy0yM01MRFwiOiBbXCJSLTYwTSo0XCIsIFwiQi04KjIsUi02ME0qMixGdWVsLTgwMFwiLCBcIlVCLTMyKjIsUi02ME0qMixGdWVsLTgwMFwiLCBcIlItMjRSKjIsUi02ME0qNCxGdWVsLTgwMFwiLCBcIlItMjRSLFItMjRULFItNjBNKjQsRnVlbC04MDBcIiwgXCJSLTYwTSo0LEZ1ZWwtODAwXCIsIFwiRkFCLTUwMCoyLFItNjBNKjIsRnVlbC04MDBcIiwgXCJSLTI0UioyLFItNjBNKjRcIiwgXCJGQUItMjUwKjIsUi02ME0qMixGdWVsLTgwMFwiLCBcIlJCSy0yNTAqMixSLTYwTSoyLEZ1ZWwtODAwXCIsIFwiUkJLLTUwMCoyLFItNjBNKjIsRnVlbC04MDBcIiwgXCJSLTI0UixSLTI0VCxSLTYwTSo0XCJdLCBcIk1pRy0yNVBEXCI6IFtcIlItNDBSKjIsUi00MFQqMlwiLCBcIlItNDBSKjRcIiwgXCJSLTQwUioyLFItNjBNKjJcIl0sIFwiTWlHLTI1UkJUXCI6IFtcIkZBQi01MDB4Ml82MHgyXCIsIFwiUi02ME0qMlwiXSwgXCJNaUctMjdLXCI6IFtcIkZBQi0yNTAqNixSLTYwTSoyLEZ1ZWxcIiwgXCJCZXRBQi01MDBTaFAqMixGQUItMjUwKjIsUi02MCoyXCIsIFwiS2gtMjVNUioyLFItNjBNKjIsRnVlbFwiLCBcIktoLTI5TCoyLFItNjBNKjIsRnVlbFwiLCBcIkItOCo0XCIsIFwiQmV0QUItNTAwKjIsRkFCLTUwMCoyLFItNjAqMlwiLCBcIktoLTI1TVBVKjIsUi02ME0qMixGdWVsXCIsIFwiS2gtMjlUKjIsUi02ME0qMixGdWVsXCIsIFwiRkFCLTUwMCoyLEZBQi0yNTAqMixSLTYwTSoyLEZ1ZWxcIiwgXCJLaC0yNU1MKjIsUi02ME0qMixGdWVsXCIsIFwiS0FCLTUwMCoyLFItNjBNKjIsRnVlbFwiLCBcIlJCSy01MDBBTyoyLFJCSy0yNTAqMixSLTYwTSoyXCIsIFwiVUItMzIqNFwiLCBcIktoLTI5TCoyLFItNjAqMixGdWVsXCJdLCBcIk1pRy0yOUFcIjogW1wiRnVlbC0xMTUwKjIsRnVlbC0xNTAwXCIsIFwiUkJLLTUwMEFPKjQsUi03MyoyLEZ1ZWxcIiwgXCJGQUItMjUwKjQsUi03MyoyLEZ1ZWxcIiwgXCJCLTgqNCxSLTczKjIsRnVlbFwiLCBcIlItNjBNKjQsUi0yN1IqMlwiLCBcIlItNzMqNCxSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNzMqNixGdWVsLTE1MDBcIiwgXCJSLTYwTSo2LEZ1ZWwtMTUwMFwiLCBcIlMtMjQqNCxSLTczKjIsRnVlbFwiLCBcIkZBQi01MDAqNCxSLTczKjIsRnVlbFwiLCBcIlItNjBNKjZcIiwgXCJCZXRBQi01MDAqNCxSLTczKjIsRnVlbFwiLCBcIlItNzMqNlwiLCBcIlItNzMqMixSLTYwTSoyLFItMjdSKjIsRnVlbC0xNTAwXCIsIFwiUi02ME0qNCxSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlJCSy0yNTAqNCxSLTczKjIsRnVlbFwiLCBcIlItNzMqNCxSLTI3UioyXCIsIFwiUi03MyoyLFItNjBNKjIsUi0yN1IqMlwiLCBcIlMtMjQqMixGQUItNTAwKjIsUi03MyoyLEZ1ZWxcIl0sIFwiTWlHLTI5R1wiOiBbXCJSLTczKjYsRnVlbC0xNTAwXCIsIFwiUi03Myo0LFItMjdSKjIsRnVlbC0xNTAwXCIsIFwiUi03MyoyLFItNjBNKjIsUi0yN1IqMlwiLCBcIlItNjBNKjQsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSLTczKjZcIiwgXCJSLTYwTSo0LFItMjdSKjJcIiwgXCJSLTczKjQsUi0yN1IqMlwiLCBcIkZ1ZWwtMTE1MCoyLEZ1ZWwtMTUwMFwiLCBcIlItNjBNKjZcIiwgXCJSLTYwTSo2LEZ1ZWwtMTUwMFwiLCBcIlItNzMqMixSLTYwTSoyLFItMjdSKjIsRnVlbC0xNTAwXCJdLCBcIk1pRy0yOVNcIjogW1wiUi03MyoyLFItNjBNKjIsUi0yN1IqMlwiLCBcIlItNzMqNCxSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNzMqNixGdWVsLTE1MDBcIiwgXCJSLTYwTSo2LEZ1ZWwtMTUwMFwiLCBcIlMtMjQqNCxSLTczKjIsRnVlbFwiLCBcIkZBQi01MDAqNCxSLTczKjIsRnVlbFwiLCBcIkJldEFCLTUwMCo0LFItNzMqMixGdWVsXCIsIFwiUkJLLTUwMEFPKjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTczKjIsUi02ME0qMixSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNzcqMixSLTczKjIsRnVlbC0xNTAwLEZ1ZWwtMTE1MCoyXCIsIFwiQi04KjQsUi03MyoyLEZ1ZWxcIiwgXCJSQkstMjUwKjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTczKjZcIiwgXCJGdWVsLTExNTAqMixGdWVsLTE1MDBcIiwgXCJSLTYwTSo2XCIsIFwiUi02ME0qNCxSLTI3UioyXCIsIFwiUi03Myo0LFItMjdSKjJcIiwgXCJSLTc3KjQsUi03MyoyXCIsIFwiRkFCLTI1MCo0LFItNzMqMixGdWVsXCIsIFwiUi02ME0qNCxSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNzcqNCxSLTczKjIsRnVlbC0xNTAwXCIsIFwiUy0yNCoyLEZBQi01MDAqMixSLTczKjIsRnVlbFwiXSwgXCJNaUctMzFcIjogW1wiUi00MFQqMixSLTMzKjRcIiwgXCJSLTQwVCxSLTMzKjQsUi00MFJcIiwgXCJSLTQwUioyLFItMzMqNFwiLCBcIlItNjBNKjQsUi0zMyo0XCJdLCBcIk1pcmFnZSAyMDAwLTVcIjogW1wiUiA1NTAqMixNSUNBIElSKjRcIiwgXCJSIDU1MCoyLE1JQ0EgSVIqMixNSUNBIEFSKjIsRnVlbCozXCIsIFwiUiA1NTAqMixNSUNBIEFSKjQsRnVlbCozXCIsIFwiUiA1NTAqMixTVVBFUiA1MzBGKjIsRnVlbFwiLCBcIkZ1ZWwqM1wiLCBcIlIgNTUwKjIsTUlDQSBJUio0LEZ1ZWwqM1wiLCBcIlIgNTUwKjIsTUlDQSBBUio0XCIsIFwiUiA1NTAqMixTVVBFUiA1MzBGKjJcIl0sIFwiTVEtOSBSZWFwZXJcIjogW1wiR0JVLTEyKjRcIiwgXCJHQlUtMzgqNFwiLCBcIkFHTS0xMTRLKjgsR0JVLTM4KjJcIiwgXCJBR00tMTE0SyoxMlwiXSwgXCJPSC01OERcIjogW1wiMnhBR00tMTE0LCA3eEhZRFJBLTcwXCIsIFwiNHhBR00tMTE0XCIsIFwiTS0zLCA3eEhZRFJBLTcwXCIsIFwiMnhBR00tMTE0LCBNLTNcIiwgXCIxNHhIWURSQS03MFwiLCBcIjE0eEhZRFJBLTcwIFdQXCJdLCBcIlJRLTFBIFByZWRhdG9yXCI6IFtcIkFHTS0xMTRLKjJcIl0sIFwiUy0zQlwiOiBbXCJBR00tODRBKjIsIE1rLTgyKjJcIiwgXCJBR00tODRFKjJcIiwgXCJBR00tNjVELCBBR00tNjVLLCBNazIwKjRcIiwgXCJBR00tNjVELCBBR00tNjVLLCBNazgyKjRcIiwgXCJNazgyKjEwXCIsIFwiTWs4NCoyLCBNazgyKjRcIiwgXCJaVU5JIE1rNzEqOCwgTWsyMCo0XCJdLCBcIlNILTNXXCI6IFtdLCBcIlNILTYwQlwiOiBbXCJBR00tMTE5XCJdLCBcIlN1LTE3TTRcIjogW1wiVUItMzIqNCxSLTYwTSoyLEZBQi0yNTAqNFwiLCBcIkZBQi0xMDAqMjQsUi02ME0qMlwiLCBcIlVCLTMyKjQsUi02ME0qMixGdWVsKjJcIiwgXCJCLTgqNCxSLTYwTSoyLEZBQi0yNTAqNFwiLCBcIktoLTI5TCoyLFItNjBNKjIsRnVlbCoyXCIsIFwiQi04KjQsUi02ME0qMixGdWVsKjJcIiwgXCJLaC0yOVQqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkJldEFCLTUwMCo2LFItNjBNKjJcIiwgXCJLaC0yNU1SKjQsUi02ME0qMixGdWVsKjJcIiwgXCJTLTI0KjQsUi02ME0qMixGdWVsKjJcIiwgXCJLaDI1TVBVKjJfS2gyNU1MKjJfLFI2ME0qMl9GdWVsKjJcIiwgXCJLaDU4KjJfS2gyNU1QVSoyX1I2ME0qMl9GdWVsKjJcIiwgXCJGQUItMjUwKjE2LFItNjBNKjJcIiwgXCJLaC0yNU1MKjQsUi02ME0qMixGdWVsKjJcIiwgXCJSQkstNTAwQU8qNCxTUFBVLTIyKjIsUi02ME0qMlwiLCBcIlMtMjQqNCxSLTYwTSoyLEZBQi0yNTAqNFwiLCBcIkZ1ZWwqNFwiLCBcIkZBQi01MDAqNixSLTYwTSoyXCIsIFwiS2gtMjVNTCoyLEtoLTI5TCoyLFItNjAqMlwiXSwgXCJTdS0yNE1cIjogW1wiVUItMTMqNCxGQUItNTAwKjJcIiwgXCJLaC0zMUEqMixSLTYwTSoyLEZ1ZWxcIiwgXCJVQi0xMyo0XCIsIFwiS0FCLTUwMCo0LFItNjBNKjJcIiwgXCJTLTI1KjIsRnVlbCozXCIsIFwiS2gzMVAqMl9LaDI1TUwqMl9MLTA4MVwiLCBcIkItOCoyLEZ1ZWwqM1wiLCBcIkZBQi0xNTAwKjIsUi02ME0qMlwiLCBcIlMtMjQqNFwiLCBcIkJldEFCLTUwMCo0LFItNjBNKjJcIiwgXCJLaC0yNU1MKjRcIiwgXCJLaC0yNU1SKjRcIiwgXCJGQUItMTAwKjI0XCIsIFwiS2gtMzFBKjIsUi02ME0qMlwiLCBcIlVCLTEzKjIsRnVlbCozXCIsIFwiQi04KjIsRnVlbCoyXCIsIFwiS2g1OCoyX0toMjVNTCoyX0wtMDgxXCIsIFwiUkJLLTI1MCo4XCIsIFwiVUItMzIqNFwiLCBcIktoLTI5TCoyLFItNjBNKjJcIiwgXCJTLTI0KjIsRnVlbCozXCIsIFwiS2gyNU1QVSoyX0toMjVNTCoyX0wtMDgxXCIsIFwiRkFCLTUwMCo0LFItNjBNKjJcIiwgXCJGQUItMjUwKjhcIiwgXCJGdWVsKjNcIiwgXCJSQkstNTAwQU8qNCxSLTYwTSoyXCIsIFwiS0FCLTE1MDAqMixSLTYwTSoyLEZ1ZWxcIiwgXCJVQi0zMio0LEZBQi0yNTAqNFwiLCBcIktoLTI5VCoyLFItNjBNKjJcIiwgXCJVQi0zMioyLEZ1ZWwqM1wiLCBcIktoLTU5TSoyLFItNjBNKjIsRnVlbFwiLCBcIlMtMjUqNFwiLCBcIkItOCo2XCJdLCBcIlN1LTI0TVJcIjogW1wiU0hQSUwsRVRIRVIsUi02ME0qMlwiLCBcIkZ1ZWwqMlwiLCBcIlRBTkdBWkgsRVRIRVIsUi02ME0qMixGdWVsKjJcIiwgXCJUQU5HQVpILEVUSEVSLFItNjBNKjJcIiwgXCJTSFBJTCxFVEhFUixSLTYwTSoyLEZ1ZWwqMlwiXSwgXCJTdS0yNVwiOiBbXCJSQkstMjUwKjIsUy04S09NKjgwLFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTI1MCo0LFVCLTEzKjIsUi02ME0qMixTUFBVLTIyKjJcIiwgXCJTLTI1TCo2LFVCLTEzKjIsUi02ME0qMlwiLCBcIlMtMjUqNixTUFBVLTIyKjIsUi02ME0qMlwiLCBcIjItMjVMKjIsIEtILTI1TUwqMiwgUkJLLTUwMCoyLCBCLThNSSoyLCBSLTYwTSoyXCIsIFwiUy04S09NKjEyMCxSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNCxTLTI1KjIsUi02ME0qMixGdWVsKjJcIiwgXCJSQkstNTAwQU8qNCxTLThLT00qNDAsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMjUwKjIsU1BQVS0yMioyLFNBQi0xMDAqNCxSLTYwTSoyXCIsIFwiUkJLLTUwMEFPKjYsUi02ME0qMixGdWVsKjJcIiwgXCJSQkstMjUwKjgsUi02ME0qMlwiLCBcIktoLTI5TCoyLEtoLTI1TUwqNCxSLTYwTSoyXCIsIFwiUkJLLTI1MCo0LFMtOEtPTSo4MCxSLTYwTSoyXCIsIFwiRkFCLTI1MCo0LFVCLTEzKjIsUi02ME0qMixGdWVsKjJcIiwgXCJTLThUc00qMTYwLFItNjAqMlwiLCBcIktoLTI1TUwqNCxSLTYwTSoyLEZ1ZWwqMlwiLCBcIkJldEFCLTUwMFNoUCo4LFItNjBNKjJcIiwgXCJTQUItMTAwKjgsUi02MCoyXCIsIFwiS2gtMjlMKjIsS2gtMjVNTCo0LFMtMjVMKjIsUi02ME0qMlwiLCBcIkZBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI5TCoyLEtoLTI1TUwqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI5TCoyLFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTEwMCozMixSLTYwTSoyXCIsIFwiRkFCLTEwMCoxNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkJldEFCLTUwMCo2LFItNjBNKjIsRnVlbCoyXCIsIFwiUy0yNSo2LFItNjBNKjIsRnVlbCoyXCIsIFwiVUItMTMqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI1KjQsS2gtMjlUKjIsUi02MCoyXCIsIFwiUy0yNUwqNixSLTYwKjIsRnVlbCoyXCJdLCBcIlN1LTI1VFwiOiBbXCJGQUItMjUwKjQsU1BQVS0yMioyLFNBQi0xMDAqMixSLTYwTSoyXCIsIFwiS2gtMjlMKjIsS2gtMjVNTCo0LFItNzMqMixNZXJjdXJ5IExMVFYgUG9kLE1QUy00MTBcIiwgXCJLQUItNTAwS3IqMixLaC0yNU1MKjIsUi03MyoyLE1QUy00MTAsRnVlbCoyXCIsIFwiUkJLLTUwMEFPKjQsVUItMzIqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkJldEFCLTUwMFNoUCo4LFItNjBNKjJcIiwgXCJVQi0xMyo2LFItNjBNKjIsRnVlbCoyXCIsIFwiS2gtMjlUKjIsUi03MyoyLEZ1ZWwqMixNUFMtNDEwXCIsIFwiS2g1OCoyX0toMjVNTCo0X1I3MyoyX0wtMDgxX01QUy00MTBcIiwgXCJGQUItMjUwKjQsVUItMTMqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktILTI5VCoyLCBWSUtIUioyLCBFQ01cIiwgXCJLaC0yOVQqMixLaC0yNU1MKjQsUi03MyoyLE1QUy00MTBcIiwgXCJGQUItMjUwKjQsVUItMTMqMixSLTYwTSoyLFNQUFUtMjIqMlwiLCBcIkZBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZ1ZWwqNFwiLCBcIkFQVS04IFZpa2hyLU0qMixLaC0yNU1MLFItNzMqMixTUFBVLTIyKjIsTWVyY3VyeSBMTFRWIFBvZCxNUFMtNDEwXCIsIFwiUy04S09NKjEyMCxSLTYwTSoyLEZ1ZWwqMlwiLCBcIktNR1UtMiAoUFRBQi0yLjVLTykqOCxSLTYwTSoyXCIsIFwiRkFCLTI1MCo2LFItNjBNKjIsRnVlbCoyXCIsIFwiS2gtMjlMKjIsUi03MyoyLEZ1ZWwqMixNZXJjdXJ5IExMVFYgUG9kLE1QUy00MTBcIiwgXCJGQUItMTAwKjMyLFItNjBNKjJcIiwgXCJSQkstMjUwKjgsUi02ME0qMlwiLCBcIlMtMjVMKjYsVUItMTMqMixSLTYwTSoyXCIsIFwiRkFCLTI1MCo0LFMtMjUqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIlMtMjUqMixTUFBVLTIyKjQsUi02ME0qMixSLTczKjJcIiwgXCJLTUdVLTIgKEFPLTIuNVJUKSo4LFItNjBNKjJcIiwgXCJBUFUtOCBWaWtoci1NKjIsUy0yNUwqMixSLTczKjIsU1BQVS0yMioyLE1lcmN1cnkgTExUViBQb2QsTVBTLTQxMFwiLCBcIlMtMjUqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIlJCSy01MDBBTyo2LFItNjBNKjIsRnVlbCoyXCIsIFwiS2g1OCoyX0toMjVNUFUqMl9LaDI1TUwqMl9SNzMqMl9MLTA4MV9NUFMtNDEwXCIsIFwiUkJLLTI1MCo0LFVCLTMyKjQsUi02ME0qMlwiLCBcIktoMjVNUFUqNF9SNzMqMl9GdWVsKjJfTC0wODFfTVBTLTQxMFwiLCBcIkJldEFCLTUwMCo2LFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTI1MCoyLFVCLTMyKjQsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMTAwKjE2LFItNjBNKjIsRnVlbCoyXCIsIFwiS2gtMjlMKjIsS2gtMjVNTCo0LFItNzMqMixFQ01cIl0sIFwiU3UtMjVUTVwiOiBbXCJCZXRBQi01MDBTaFAqNixSLTczKjIsRUNNXCIsIFwiQVBVLTggVmlraHItTSoyLFItNjBNKjIsUi03MyoyLFNQUFUtMjIqMixNZXJjdXJ5IExMVFYgUG9kXCIsIFwiS2gtMjlUKjIsS2gtMjVNTCoyLFItNzMqMixGdWVsKjIsRUNNXCIsIFwiS2gtNTgqMl9LaC0yNU1QVSo0X1ItNzMqMl9MLTA4MV9NUFM0MTBcIiwgXCJTLTI1TCo2LFVCLTEzKjIsUi02ME0qMlwiLCBcIktoLTM1KjJfUi03MyoyX0Z1ZWwqMl9NUFM0MTBfS29weW8tMjVcIiwgXCJLaC0zMUEqMl9SLTczKjJfRnVlbCoyX01QUzQxMF9Lb3B5by0yNVwiLCBcIkZ1ZWwqNFwiLCBcIkJldEFCLTUwMCo2LFItNjBNKjIsRnVlbCoyXCIsIFwiS0FCLTUwMEtyKjIsS2gtMjVNTCoyLFItNzMqMixGdWVsKjIsRUNNXCIsIFwiS2gtMjlMKjIsUi03MyoyLEZ1ZWwqMixNZXJjdXJ5IExMVFYgUG9kLEVDTVwiLCBcIlVCLTEzKjYsUi02ME0qMixGdWVsKjJcIiwgXCJTLTI1KjIsU1BQVS0yMio0LFItNjBNKjIsUi03MyoyXCIsIFwiS2gtMzFQKjJfS2gtMjVNTCo0X1ItNzMqMl9MLTA4MV9NUFM0MTBcIiwgXCJVQi0zMio2LFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTEwMCoxNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI1TVBVKjRfUi03MyoyX0Z1ZWwqMl9MLTA4MV9NUFM0MTBcIiwgXCJTLTI1KjYsUi02ME0qMixGdWVsKjJcIiwgXCJSQkstNTAwQU8qNCxVQi0zMioyLFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTI1MCo0LFVCLTEzKjIsUi02ME0qMixTUFBVLTIyKjJcIiwgXCJLaC0zMVAqMl9LaC0yNU1QVSo0X1ItNzMqMl9MLTA4MV9NUFM0MTBcIiwgXCJSQkstNTAwQU8qNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0xMDAqMzIsUi02ME0qMlwiLCBcIlJCSy0yNTAqMixVQi0zMio0LFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTI1MCo4LFItNjBNKjJcIiwgXCJBUFUtOCBWaWtoci1NKjIsUi03MyoyLFNQUFUtMjIqMixNZXJjdXJ5IExMVFYgUG9kLEVDTVwiLCBcIlJCSy0yNTAqNCxVQi0zMio0LFItNjBNKjJcIiwgXCJGQUItMjUwKjQsU1BQVS0yMioyLFNBQi0xMDAqMixSLTYwTSoyXCIsIFwiRkFCLTI1MCo0LFMtMjUqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNCxVQi0xMyoyLFItNjBNKjIsRnVlbCoyXCJdLCBcIlN1LTI3XCI6IFtcIlItNzMqNCxSLTI3RVIqNCxSLTI3RVQqMlwiLCBcIktNR1UtMiAoQU8tMi41UlQpKjUsUi03MyoyLEVDTVwiLCBcIkJldEFCLTUwMFNoUCo2LFItNzMqMixFQ01cIiwgXCJLTUdVLTIgKFBUQUItMi41S08pKjUsUi03MyoyLEVDTVwiLCBcIlItNzMqMixSLTI3RVIqNixFQ01cIiwgXCJSLTczKjZcIiwgXCJTLTEzKjEwLFJCSy01MDBBTyoyLEZBQi01MDAqMixSLTczKjIsRUNNXCIsIFwiUi03Myo0LFItMjdFUio2XCIsIFwiUi03MyoyLFItMjdFUio0LFItMjdFVCoyLEVDTVwiLCBcIlItNzMqNCxFQ01cIiwgXCJFQ01cIiwgXCJGQUItNTAwKjYsUi03MyoyLEVDTVwiLCBcIlMtMjUqMixGQUItNTAwKjQsUi03Myo0XCIsIFwiUy0yNSo0LCBGQUItNTAwKjQsIFItNzMqMiwgRUNNXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgUkJLLTUwMCBQVEFCMVwiLCBcIkNBUyBTLThPRlAgUm9ja2V0cyArIEZBQi01MDAgQm9tYnNcIiwgXCJDQVMgUy04T0ZQIFJvY2tldHNcIiwgXCJDQVMgUy04T0ZQIFJvY2tldHMgKyBGQUItMTAwIEJvbWJzXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgRkFCLTEwMCBCb21ic1wiLCBcIkNBUyBTLTEzIFJvY2tldHNcIiwgXCJDQVMgUy04S09NIFJvY2tldHMgKyBGQUItMjUwIEJvbWJzXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgUkJLLTI1MCBQVEFCMi41XCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgRkFCLTUwMCBCb21ic1wiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIFJCSy01MDAgUFRBQjEwXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgS01HVSBQVEFCXCIsIFwiIENBUyBTLTI1IFJvY2tldHNcIiwgXCJDQVMgUy0yNSBSb2NrZXRzICsgRkFCLTUwMCBCb21ic1wiXSwgXCJTdS0zMFwiOiBbXCJSLTczKjIsUi03Nyo2LEVDTVwiLCBcIlItNzMqMixSLTI3VCoyLFItMjdSKjRcIiwgXCJSQkstNTAwQU8qNixSLTczKjIsRUNNXCIsIFwiS2gtMzFQKjIsS2gtMzFBKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJSLTczKjQsUi0yN1QqMixSLTI3Uio0XCIsIFwiUi03MyoyLFItNzcqMixLaC0zNSoyLEVDTVwiLCBcIktoLTM1KjIsS2gtMzFQKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJGQUItMjUwKjQsQi04KjIsUi03MyoyLEVDTVwiLCBcIkVDTVwiLCBcIktBQi0xNTAwKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJSQkstMjUwKjYsUi03MyoyLEVDTVwiLCBcIlItNzMqNCxSLTc3KjZcIiwgXCJGQUItMjUwKjQsUy0yNSoyLFItNzMqMixFQ01cIiwgXCJSLTczKjIsUi0yN1IqMixSLTI3RVIqNCxFQ01cIiwgXCJSLTczKjIsUi0yN1QqMixSLTI3RVIqMixSLTc3KjIsRUNNXCIsIFwiRkFCLTE1MDAqMixSLTczKjIsUi03NyoyLEVDTVwiLCBcIlItNzMqNCxSLTI3VCoyLFItMjdFUioyLFItNzcqMlwiLCBcIktoLTU5TSoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiRkFCLTUwMCo2LFItNzMqMixFQ01cIiwgXCJSLTczKjQsUi0yN1IqMixSLTI3RVIqNFwiLCBcIktoLTI5TCo0LFItNzMqMixSLTc3KjIsRUNNXCIsIFwiQmV0QUItNTAwKjYsUi03MyoyLEVDTVwiLCBcIlItNzMqNFwiLCBcIkZBQi0yNTAqNCxVQi0xMyoyLFItNzMqMixFQ01cIiwgXCJSLTczKjIsUi03Nyo0LFItMjdFUioyLEVDTVwiLCBcIktBQi01MDAqNCxSLTczKjIsUi03NyoyLEVDTVwiLCBcIkZBQi0yNTAqNixSLTczKjIsRUNNXCIsIFwiUi03Myo0LFItNzcqNCxSLTI3RVIqMlwiLCBcIktoLTI5VCo0LFItNzMqMixSLTc3KjIsRUNNXCIsIFwiS2gtMzFQKjIsS2gtMzFBKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJLaC0zMVAqNCxSLTczKjIsUi03NyoyLEVDTVwiXSwgXCJTdS0zM1wiOiBbXCJSQkstMjUwKjYsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiUi03Myo0XCIsIFwiUi03Myo0LFItMjdSKjIsUi0yN0VSKjZcIiwgXCJSLTczKjIsUi0yN0VUKjIsUi0yN0VSKjYsRUNNXCIsIFwiUi03Myo0LFItMjdFVCoyLFItMjdFUio2XCIsIFwiRkFCLTI1MCo2LFItNzMqMixSLTI3UioyLEVDTVwiLCBcIlItNzMqMixSLTI3UioyLFItMjdFUio2LEVDTVwiLCBcIkVDTVwiLCBcIkJldEFCLTUwMCo2LFItNzMqMixSLTI3UioyLEVDTVwiLCBcIlJCSy01MDBBTyo2LFItNzMqMixSLTI3UioyLEVDTVwiLCBcIlVCLTEzKjQsRkFCLTI1MCo0LFItNzMqMixFQ01cIiwgXCJTLTI1KjQsRkFCLTI1MCo0LFItNzMqMixFQ01cIiwgXCJGQUItNTAwKjYsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiQi04KjQsRkFCLTI1MCo0LFItNzMqMixFQ01cIiwgXCJTLTI1KjQsRkFCLTUwMCo0LFItNzMqNFwiLCBcIkNBUyBTLThLT00gcm9ja2V0cyArIEZBQjUwMFwiLCBcIkNBUyBTLThPRlAgcm9ja2V0cyArIEZBQjUwMFwiLCBcIkNBUyBTLTEzIFJvY2tldHMgKyBGQUI1MDBcIiwgXCJDQVMgUy0xMyBSb2NrZXRzICsgRkFCMTAwXCIsIFwiQ0FTIFMtOEtPTSByb2NrZXRzICsgRkFCMjUwXCIsIFwiQ0FTIFMtMjUgUm9ja2V0cyArIEZBQjUwMFwiLCBcIkNBUyBTLThLT00gcm9ja2V0cyArIFJCSzUwMCBQVEFCMTBcIiwgXCJDQVMgUy04S09NIHJvY2tldHMgKyBSQks1MDAgUFRBQjFcIl0sIFwiU3UtMzRcIjogW1wiVUItMTMqNCxGQUItMjUwKjQsUi03MyoyLEVDTVwiLCBcIkZBQi0xMDAqMjgsUi03MyoyLEVDTVwiLCBcIkJldEFCLTUwMCo4LFItNzMqMixFQ01cIiwgXCJLaC0yOUwqNCxSLTczKjIsUi03NyoyLEVDTVwiLCBcIktBQi01MDAqNCxSLTczKjIsUi03NyoyLEVDTVwiLCBcIlJCSy0yNTAgUFRBQi0yLjVNKjgsUi03MyoyLEVDTVwiLCBcIkZBQi0yNTAqOCxSLTczKjIsRUNNXCIsIFwiRUNNXCIsIFwiS2gtMjlUKjQsUi03MyoyLFItNzcqMixFQ01cIiwgXCJSQkstNTAwIFBUQUItMTAtNSo4LFItNzMqMixFQ01cIiwgXCJGQUItMTUwMCozLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiS2gtNTlNKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJCLTgqNixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJGQUItNTAwKjgsUi03MyoyLEVDTVwiLCBcIktBQi0xNTAwKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJLaC0yOVQqNCxSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJLaC0zMUEqNCxLaC0zMVAqMixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJLaC0zMUEqNixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJLaC0zMVAqNCxSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJLaC0yOUwqNCxSLTczKjIsUi0yN1IqMixFQ01cIl0sIFwiVG9ybmFkbyBHUjRcIjogW1wiQUlNLTlNKjIsIEZ1ZWwqMiwgRUNNXCIsIFwiQUxBUk0qNCwgRnVlbCoyLCBFQ01cIiwgXCJHQlUtMTYqMiwgQUlNLTlNKjIsIEZ1ZWwqMiwgRUNNXCIsIFwiQkw3NTUqNCwgQUlNLTlNKjIsIEZ1ZWwqMiwgRUNNXCIsIFwiU2VhIEVhZ2xlKjIsIEFJTS05TSoyLCBGdWVsKjIsIEVDTVwiXSwgXCJUb3JuYWRvIElEU1wiOiBbXCJLb3Jtb3JhbioyLEFJTS05KjIsRnVlbCoyXCIsIFwiR0JVLTE2KjIsQUlNLTkqMixGdWVsKjJcIiwgXCJGdWVsKjJcIiwgXCJBR00tODgqNCxBSU0tOSoyLEVDTVwiLCBcIkFHTS04OCoyLEFJTS05KjIsRnVlbCoyLEVDTVwiLCBcIktvcm1vcmFuKjQsQUlNLTkqMlwiLCBcIktvcm1vcmFuKjIsQUlNLTkqMixBR00tODgqMlwiLCBcIk1rLTgyKjQsQUlNLTkqMixGdWVsKjJcIl0sIFwiVHUtMTQyXCI6IFtcIktoLTM1KjZcIl0sIFwiVHUtMTYwXCI6IFtcIktoLTY1KjEyXCJdLCBcIlR1LTIyTTNcIjogW1wiS2gtMjJOXCIsIFwiS2gtMjJOKjJcIiwgXCJGQUItMjUwKjY5XCIsIFwiRkFCLTUwMCozM1wiLCBcIkZBQi01MDAqMzMsIEZBQi0yNTAqMzZcIiwgXCJGQUItMjUwKjMzXCJdLCBcIlR1LTk1TVNcIjogW1wiS2gtNjUqNlwiXSwgXCJVSC0xSFwiOiBbXCJNMTM0IE1pbmlndW4qMiwgWE0xNTgqMlwiXSwgXCJVSC02MEFcIjogW10gfSIsImltcG9ydCB7IE1hcmtlciwgTGF0TG5nLCBQb2x5bGluZSwgSWNvbiB9IGZyb20gJ2xlYWZsZXQnO1xyXG5pbXBvcnQgeyBDb252ZXJ0RERUb0RNUyB9IGZyb20gJy4uL290aGVyL3V0aWxzJztcclxuaW1wb3J0IHsgZ2V0TWFwLCBnZXRVbml0c01hbmFnZXIsIGdldFZpc2liaWxpdHlTZXR0aW5ncyB9IGZyb20gJy4uJztcclxuaW1wb3J0IHsgVW5pdE1hcmtlciwgTWFya2VyT3B0aW9ucywgQWlyY3JhZnRNYXJrZXIsIEhlbGljb3B0ZXJNYXJrZXIsIEdyb3VuZFVuaXRNYXJrZXIsIE5hdnlVbml0TWFya2VyLCBXZWFwb25NYXJrZXIgfSBmcm9tICcuL3VuaXRtYXJrZXInO1xyXG5pbXBvcnQgeyBhZGREZXN0aW5hdGlvbiwgYXR0YWNrVW5pdCwgY2hhbmdlQWx0aXR1ZGUsIGNoYW5nZVNwZWVkIH0gZnJvbSAnLi4vZGNzL2Rjcyc7XHJcblxyXG52YXIgcGF0aEljb24gPSBuZXcgSWNvbih7XHJcbiAgICBpY29uVXJsOiAnaW1hZ2VzL21hcmtlci1pY29uLnBuZycsXHJcbiAgICBzaGFkb3dVcmw6ICdpbWFnZXMvbWFya2VyLXNoYWRvdy5wbmcnLFxyXG4gICAgaWNvbkFuY2hvcjogWzEzLCA0MV1cclxufSk7XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pdCB7XHJcbiAgICBJRDogbnVtYmVyID0gLTE7XHJcbiAgICBsZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHdpbmdtYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHdpbmdtZW46IFVuaXRbXSA9IFtdO1xyXG4gICAgZm9ybWF0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbmFtZTogc3RyaW5nID0gXCJcIjtcclxuICAgIHVuaXROYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgZ3JvdXBOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlciA9IDA7XHJcbiAgICBsb25naXR1ZGU6IG51bWJlciA9IDA7XHJcbiAgICBhbHRpdHVkZTogbnVtYmVyID0gMDtcclxuICAgIGhlYWRpbmc6IG51bWJlciA9IDA7XHJcbiAgICBzcGVlZDogbnVtYmVyID0gMDtcclxuICAgIGNvYWxpdGlvbklEOiBudW1iZXIgPSAtMTtcclxuICAgIGFsaXZlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGN1cnJlbnRUYXNrOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgZnVlbDogbnVtYmVyID0gMDtcclxuICAgIHR5cGU6IGFueSA9IG51bGw7XHJcbiAgICBmbGFnczogYW55ID0gbnVsbDtcclxuICAgIGFjdGl2ZVBhdGg6IGFueSA9IG51bGw7XHJcbiAgICBhbW1vOiBhbnkgPSBudWxsO1xyXG4gICAgdGFyZ2V0czogYW55ID0gbnVsbDtcclxuXHJcbiAgICAjc2VsZWN0YWJsZTogYm9vbGVhbjtcclxuICAgICNzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgI3ByZXZlbnRDbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgI3BhdGhNYXJrZXJzOiBNYXJrZXJbXSA9IFtdO1xyXG4gICAgI3BhdGhQb2x5bGluZTogUG9seWxpbmU7XHJcbiAgICAjdGFyZ2V0c1BvbHlsaW5lczogUG9seWxpbmVbXTtcclxuICAgICNtYXJrZXI6IFVuaXRNYXJrZXI7XHJcbiAgICAjdGltZXI6IG51bWJlciA9IDA7XHJcblxyXG4gICAgc3RhdGljIGdldENvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChuYW1lID09PSBcIkdyb3VuZFVuaXRcIikgcmV0dXJuIEdyb3VuZFVuaXQ7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IFwiQWlyY3JhZnRcIikgcmV0dXJuIEFpcmNyYWZ0O1xyXG4gICAgICAgIGlmIChuYW1lID09PSBcIkhlbGljb3B0ZXJcIikgcmV0dXJuIEhlbGljb3B0ZXI7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IFwiTWlzc2lsZVwiKSByZXR1cm4gTWlzc2lsZTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJCb21iXCIpIHJldHVybiBCb21iO1xyXG4gICAgICAgIGlmIChuYW1lID09PSBcIk5hdnlVbml0XCIpIHJldHVybiBOYXZ5VW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihJRDogbnVtYmVyLCBtYXJrZXI6IFVuaXRNYXJrZXIpIHtcclxuICAgICAgICB0aGlzLklEID0gSUQ7XHJcblxyXG4gICAgICAgIHRoaXMuI3NlbGVjdGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvKiBUaGUgbWFya2VyIGlzIHNldCBieSB0aGUgaW5oZXJpdGVkIGNsYXNzICovXHJcbiAgICAgICAgdGhpcy4jbWFya2VyID0gbWFya2VyO1xyXG4gICAgICAgIHRoaXMuI21hcmtlci5vbignY2xpY2snLCAoZSkgPT4gdGhpcy4jb25DbGljayhlKSk7XHJcbiAgICAgICAgdGhpcy4jbWFya2VyLm9uKCdkYmxjbGljaycsIChlKSA9PiB0aGlzLiNvbkRvdWJsZUNsaWNrKGUpKTtcclxuXHJcbiAgICAgICAgdGhpcy4jcGF0aFBvbHlsaW5lID0gbmV3IFBvbHlsaW5lKFtdLCB7IGNvbG9yOiAnIzJkM2U1MCcsIHdlaWdodDogMywgb3BhY2l0eTogMC41LCBzbW9vdGhGYWN0b3I6IDEgfSk7XHJcbiAgICAgICAgdGhpcy4jcGF0aFBvbHlsaW5lLmFkZFRvKGdldE1hcCgpKTtcclxuICAgICAgICB0aGlzLiN0YXJnZXRzUG9seWxpbmVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHJlc3BvbnNlOiBKU09OKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZW50cnkgaW4gcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB0aGlzW2VudHJ5XSA9IHJlc3BvbnNlW2VudHJ5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIERlYWQgdW5pdHMgY2FuJ3QgYmUgc2VsZWN0ZWQgKi9cclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHRoaXMuZ2V0U2VsZWN0ZWQoKSAmJiB0aGlzLmFsaXZlKVxyXG5cclxuICAgICAgICB0aGlzLiN1cGRhdGVNYXJrZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy4jY2xlYXJUYXJnZXRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWQoKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2RyYXdQYXRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuI2RyYXdUYXJnZXRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy4jY2xlYXJQYXRoKCk7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgdGhpcy53aW5nbWVuID0gW107XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlW1wid2luZ21lbklEc1wiXSAhPSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgSUQgb2YgcmVzcG9uc2VbXCJ3aW5nbWVuSURzXCJdKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpbmdtZW4ucHVzaCh1bml0c01hbmFnZXIuZ2V0VW5pdEJ5SUQoSUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgLyogT25seSBhbGl2ZSB1bml0cyBjYW4gYmUgc2VsZWN0ZWQuIFNvbWUgdW5pdHMgYXJlIG5vdCBzZWxlY3RhYmxlICh3ZWFwb25zKSAqL1xyXG4gICAgICAgIGlmICgodGhpcy5hbGl2ZSB8fCAhc2VsZWN0ZWQpICYmIHRoaXMuI3NlbGVjdGFibGUgJiYgdGhpcy4jc2VsZWN0ZWQgIT0gc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy4jc2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy4jbWFya2VyLnNldFNlbGVjdGVkKHNlbGVjdGVkKTtcclxuICAgICAgICAgICAgZ2V0VW5pdHNNYW5hZ2VyKCkub25Vbml0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RhYmxlKHNlbGVjdGFibGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLiNzZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RhYmxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZERlc3RpbmF0aW9uKGxhdGxuZzogTC5MYXRMbmcpIHtcclxuICAgICAgICB2YXIgcGF0aDogYW55ID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUGF0aCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmFjdGl2ZVBhdGg7XHJcbiAgICAgICAgICAgIHBhdGhbKE9iamVjdC5rZXlzKHBhdGgpLmxlbmd0aCArIDEpLnRvU3RyaW5nKCldID0gbGF0bG5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGF0aCA9IHsgXCIxXCI6IGxhdGxuZyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGREZXN0aW5hdGlvbih0aGlzLklELCBwYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlc3RpbmF0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVBhdGggPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhpZGRlbigpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgI29uQ2xpY2soZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy4jdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLiNwcmV2ZW50Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIGlmIChnZXRNYXAoKS5nZXRTdGF0ZSgpID09PSAnSURMRScgfHwgZ2V0TWFwKCkuZ2V0U3RhdGUoKSA9PT0gJ01PVkVfVU5JVCcgfHwgZS5vcmlnaW5hbEV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWUub3JpZ2luYWxFdmVudC5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVuaXRzTWFuYWdlcigpLmRlc2VsZWN0QWxsVW5pdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiNwcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgICNvbkRvdWJsZUNsaWNrKGU6IGFueSkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLiN0aW1lcik7XHJcbiAgICAgICAgdGhpcy4jcHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICdBdHRhY2snLFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgLy9pZiAoIXRoaXMubGVhZGVyICYmICF0aGlzLndpbmdtYW4pIHtcclxuICAgICAgICAvLyAgICBvcHRpb25zLnB1c2goeyAndG9vbHRpcCc6ICdDcmVhdGUgZm9ybWF0aW9uJywgJ3NyYyc6ICdmb3JtYXRpb24ucG5nJywgJ2NhbGxiYWNrJzogKCkgPT4geyBnZXRNYXAoKS5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgLyp1bml0c01hbmFnZXIuY3JlYXRlRm9ybWF0aW9uKHRoaXMuSUQpOyovIH0gfSk7XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgICAgIGdldE1hcCgpLnNob3dTZWxlY3Rpb25TY3JvbGwoZS5vcmlnaW5hbEV2ZW50LCBvcHRpb25zLCAoYWN0aW9uOiBzdHJpbmcpID0+IHRoaXMuI2V4ZWN1dGVBY3Rpb24oYWN0aW9uKSk7XHJcbiAgICB9XHJcblxyXG4gICAgI2V4ZWN1dGVBY3Rpb24oYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBnZXRNYXAoKS5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJBdHRhY2tcIilcclxuICAgICAgICAgICAgZ2V0VW5pdHNNYW5hZ2VyKCkuYXR0YWNrVW5pdCh0aGlzLklEKTtcclxuICAgIH1cclxuXHJcbiAgICAjdXBkYXRlTWFya2VyKCkge1xyXG4gICAgICAgIC8qIEFkZCB0aGUgbWFya2VyIGlmIG5vdCBwcmVzZW50ICovXHJcbiAgICAgICAgaWYgKCFnZXRNYXAoKS5oYXNMYXllcih0aGlzLiNtYXJrZXIpICYmICF0aGlzLmdldEhpZGRlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI21hcmtlci5hZGRUbyhnZXRNYXAoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBIaWRlIHRoZSBtYXJrZXIgaWYgbmVjZXNzYXJ5Ki9cclxuICAgICAgICBpZiAoZ2V0TWFwKCkuaGFzTGF5ZXIodGhpcy4jbWFya2VyKSAmJiB0aGlzLmdldEhpZGRlbigpKSB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnJlbW92ZUxheWVyKHRoaXMuI21hcmtlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI21hcmtlci5zZXRMYXRMbmcobmV3IExhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSkpO1xyXG4gICAgICAgICAgICB0aGlzLiNtYXJrZXIuZHJhdyh7XHJcbiAgICAgICAgICAgICAgICBoZWFkaW5nOiB0aGlzLmhlYWRpbmcsXHJcbiAgICAgICAgICAgICAgICBzcGVlZDogdGhpcy5zcGVlZCxcclxuICAgICAgICAgICAgICAgIGFsdGl0dWRlOiB0aGlzLmFsdGl0dWRlLFxyXG4gICAgICAgICAgICAgICAgYWxpdmU6IHRoaXMuYWxpdmVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICNkcmF3UGF0aCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVQYXRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIF9wb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgX3BvaW50cy5wdXNoKG5ldyBMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBtYXJrZXJzIGlmIG1pc3NpbmcgKi9cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3BhdGhNYXJrZXJzLmxlbmd0aCA8IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUGF0aCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFya2VyID0gbmV3IE1hcmtlcihbMCwgMF0sIHsgaWNvbjogcGF0aEljb24gfSkuYWRkVG8oZ2V0TWFwKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0aE1hcmtlcnMucHVzaChtYXJrZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgbWFya2VycyBpZiB0b28gbWFueSAqL1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy4jcGF0aE1hcmtlcnMubGVuZ3RoID4gT2JqZWN0LmtleXModGhpcy5hY3RpdmVQYXRoKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGdldE1hcCgpLnJlbW92ZUxheWVyKHRoaXMuI3BhdGhNYXJrZXJzW3RoaXMuI3BhdGhNYXJrZXJzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3BhdGhNYXJrZXJzLnNwbGljZSh0aGlzLiNwYXRoTWFya2Vycy5sZW5ndGggLSAxLCAxKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBleGlzdGluZyBtYXJrZXJzICh0byBhdm9pZCBjcmVhdGluZyBtYXJrZXJzIHVzZWxlc3NseSkgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQgV1AgaW4gdGhpcy5hY3RpdmVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmFjdGl2ZVBhdGhbV1BdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0aE1hcmtlcnNbcGFyc2VJbnQoV1ApIC0gMV0uc2V0TGF0TG5nKFtkZXN0aW5hdGlvbi5sYXQsIGRlc3RpbmF0aW9uLmxuZ10pO1xyXG4gICAgICAgICAgICAgICAgX3BvaW50cy5wdXNoKG5ldyBMYXRMbmcoZGVzdGluYXRpb24ubGF0LCBkZXN0aW5hdGlvbi5sbmcpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3BhdGhQb2x5bGluZS5zZXRMYXRMbmdzKF9wb2ludHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICNjbGVhclBhdGgoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgV1AgaW4gdGhpcy4jcGF0aE1hcmtlcnMpIHtcclxuICAgICAgICAgICAgZ2V0TWFwKCkucmVtb3ZlTGF5ZXIodGhpcy4jcGF0aE1hcmtlcnNbV1BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jcGF0aE1hcmtlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLiNwYXRoUG9seWxpbmUuc2V0TGF0TG5ncyhbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICAjZHJhd1RhcmdldHMoKVxyXG4gICAge1xyXG4gICAgICAgIGZvciAobGV0IHR5cGVJbmRleCBpbiB0aGlzLnRhcmdldHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCBpbiB0aGlzLnRhcmdldHNbdHlwZUluZGV4XSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldERhdGEgPSB0aGlzLnRhcmdldHNbdHlwZUluZGV4XVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZ2V0VW5pdHNNYW5hZ2VyKCkuZ2V0VW5pdEJ5SUQodGFyZ2V0RGF0YS5vYmplY3RbXCJpZF9cIl0pXHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydExhdExuZyA9IG5ldyBMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZExhdExuZyA9IG5ldyBMYXRMbmcodGFyZ2V0LmxhdGl0dWRlLCB0YXJnZXQubG9uZ2l0dWRlKVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZUluZGV4ID09PSBcInJhZGFyXCIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFwiI0ZGRkYwMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlSW5kZXggPT09IFwidmlzdWFsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFwiI0ZGMDBGRlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlSW5kZXggPT09IFwicndyXCIpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFwiIzAwRkYwMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IFwiI0ZGRkZGRlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0UG9seWxpbmUgPSBuZXcgUG9seWxpbmUoW3N0YXJ0TGF0TG5nLCBlbmRMYXRMbmddLCB7Y29sb3I6IGNvbG9yLCB3ZWlnaHQ6IDMsIG9wYWNpdHk6IDEsIHNtb290aEZhY3RvcjogMX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFBvbHlsaW5lLmFkZFRvKGdldE1hcCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YXJnZXRzUG9seWxpbmVzLnB1c2godGFyZ2V0UG9seWxpbmUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgI2NsZWFyVGFyZ2V0cygpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggaW4gdGhpcy4jdGFyZ2V0c1BvbHlsaW5lcylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnJlbW92ZUxheWVyKHRoaXMuI3RhcmdldHNQb2x5bGluZXNbaW5kZXhdKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIGF0dGFja1VuaXQodGFyZ2V0SUQ6IG51bWJlcikge1xyXG4gICAgICAgIC8qIENhbGwgRENTIGF0dGFja1VuaXQgZnVuY3Rpb24gKi9cclxuICAgICAgICBpZiAodGhpcy5JRCAhPSB0YXJnZXRJRCkge1xyXG4gICAgICAgICAgICBhdHRhY2tVbml0KHRoaXMuSUQsIHRhcmdldElEKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3cgYSBtZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgY2hhbmdlU3BlZWQoc3BlZWRDaGFuZ2U6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgIGNoYW5nZVNwZWVkKHRoaXMuSUQsIHNwZWVkQ2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VBbHRpdHVkZShhbHRpdHVkZUNoYW5nZTogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIGNoYW5nZUFsdGl0dWRlKHRoaXMuSUQsIGFsdGl0dWRlQ2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgc2V0Zm9ybWF0aW9uKGZvcm1hdGlvbilcclxuICAgIHtcclxuICAgICAgICAvLyBUT0RPIG1vdmUgaW4gZGVkaWNhdGVkIGZpbGVcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudW5pdE5hbWUgKyBcIiBmb3JtYXRpb24gY2hhbmdlOiBcIiArIGZvcm1hdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgY29tbWFuZCA9IHtcIklEXCI6IHRoaXMuSUQsIFwiZm9ybWF0aW9uXCI6IGZvcm1hdGlvbn1cclxuICAgICAgICB2YXIgZGF0YSA9IHtcInNldEZvcm1hdGlvblwiOiBjb21tYW5kfVxyXG5cclxuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGVhZGVyKHdpbmdtZW5JRHMpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gVE9ETyBtb3ZlIGluIGRlZGljYXRlZCBmaWxlXHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnVuaXROYW1lICsgXCIgY3JlYXRlZCBmb3JtYXRpb24gd2l0aDogXCIgKyB3aW5nbWVuSURzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBjb21tYW5kID0ge1wiSURcIjogdGhpcy5JRCwgXCJ3aW5nbWVuSURzXCI6IHdpbmdtZW5JRHN9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XCJzZXRMZWFkZXJcIjogY29tbWFuZH1cclxuXHJcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFpclVuaXQgZXh0ZW5kcyBVbml0IHtcclxuICAgIGdldEhpZGRlbigpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYWdzLnVzZXIgJiYgZ2V0VmlzaWJpbGl0eVNldHRpbmdzKCkudXNlciA9PT0gXCJoaWRkZW5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmZsYWdzLnVzZXIgJiYgZ2V0VmlzaWJpbGl0eVNldHRpbmdzKCkuYWkgPT09IFwiaGlkZGVuXCIpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS5kZWFkID09PSBcImhpZGRlblwiXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWlyY3JhZnQgZXh0ZW5kcyBBaXJVbml0IHtcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgbWFya2VyID0gbmV3IEFpcmNyYWZ0TWFya2VyKG9wdGlvbnMpO1xyXG4gICAgICAgIHN1cGVyKElELCBtYXJrZXIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSGVsaWNvcHRlciBleHRlbmRzIEFpclVuaXQge1xyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgb3B0aW9uczogTWFya2VyT3B0aW9ucykge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBuZXcgSGVsaWNvcHRlck1hcmtlcihvcHRpb25zKTtcclxuICAgICAgICBzdXBlcihJRCwgbWFya2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VuZFVuaXQgZXh0ZW5kcyBVbml0IHtcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgbWFya2VyID0gbmV3IEdyb3VuZFVuaXRNYXJrZXIob3B0aW9ucyk7XHJcbiAgICAgICAgc3VwZXIoSUQsIG1hcmtlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGlkZGVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsaXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmxhZ3MudXNlciAmJiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS51c2VyID09PSBcImhpZGRlblwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuZmxhZ3MudXNlciAmJiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS5haSA9PT0gXCJoaWRkZW5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLmRlYWQgPT09IFwiaGlkZGVuXCJcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOYXZ5VW5pdCBleHRlbmRzIFVuaXQge1xyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgb3B0aW9uczogTWFya2VyT3B0aW9ucykge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBuZXcgTmF2eVVuaXRNYXJrZXIob3B0aW9ucyk7XHJcbiAgICAgICAgc3VwZXIoSUQsIG1hcmtlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGlkZGVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsaXZlKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmxhZ3MudXNlciAmJiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS51c2VyID09PSBcImhpZGRlblwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuZmxhZ3MudXNlciAmJiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS5haSA9PT0gXCJoaWRkZW5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLmRlYWQgPT09IFwiaGlkZGVuXCJcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBXZWFwb24gZXh0ZW5kcyBVbml0IHtcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG1hcmtlcjogVW5pdE1hcmtlcilcclxuICAgIHtcclxuICAgICAgICBzdXBlcihJRCwgbWFya2VyKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGFibGUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhpZGRlbigpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGl2ZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mbGFncy51c2VyICYmIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLndlYXBvbiA9PT0gXCJoaWRkZW5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLmRlYWQgPT09IFwiaGlkZGVuXCJcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNaXNzaWxlIGV4dGVuZHMgV2VhcG9uIHtcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgbWFya2VyID0gbmV3IFdlYXBvbk1hcmtlcihvcHRpb25zKTtcclxuICAgICAgICBzdXBlcihJRCwgbWFya2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJvbWIgZXh0ZW5kcyBXZWFwb24ge1xyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgb3B0aW9uczogTWFya2VyT3B0aW9ucykge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBuZXcgV2VhcG9uTWFya2VyKG9wdGlvbnMpO1xyXG4gICAgICAgIHN1cGVyKElELCBtYXJrZXIpO1xyXG4gICAgfVxyXG59XHJcbiIsIlxyXG5cclxuZXhwb3J0IHZhciB1bml0VHlwZXM6IGFueSA9IHt9O1xyXG4vKiBOQVZZICovXHJcbnVuaXRUeXBlcy5uYXZ5ID0ge307XHJcbnVuaXRUeXBlcy5uYXZ5LmJsdWUgPSBbXHJcbiAgICBcIlZJTlNPTlwiLFxyXG4gICAgXCJQRVJSWVwiLFxyXG4gICAgXCJUSUNPTkRFUk9HXCJcclxuXVxyXG5cclxudW5pdFR5cGVzLm5hdnkucmVkID0gW1xyXG4gICAgXCJBTEJBVFJPU1wiLFxyXG4gICAgXCJLVVpORUNPV1wiLFxyXG4gICAgXCJNT0xOSVlBXCIsXHJcbiAgICBcIk1PU0NPV1wiLFxyXG4gICAgXCJORVVTVFJBU0hcIixcclxuICAgIFwiUElPVFJcIixcclxuICAgIFwiUkVaS1lcIlxyXG5dXHJcblxyXG51bml0VHlwZXMubmF2eS5jaXZpbCA9IFtcclxuICAgIFwiRUxOWUFcIixcclxuICAgIFwiRHJ5LWNhcmdvIHNoaXAtMlwiLFxyXG4gICAgXCJEcnktY2FyZ28gc2hpcC0xXCIsXHJcbiAgICBcIlpXRVpETllcIlxyXG5dXHJcblxyXG51bml0VHlwZXMubmF2eS5zdWJtYXJpbmUgPSBbXHJcbiAgICBcIktJTE9cIixcclxuICAgIFwiU09NXCJcclxuXVxyXG5cclxudW5pdFR5cGVzLm5hdnkuc3BlZWRib2F0ID0gW1xyXG4gICAgXCJzcGVlZGJvYXRcIlxyXG5dXHJcblxyXG4vKiBWRUhJQ0xFUyAoR1JPVU5EKSAqL1xyXG51bml0VHlwZXMudmVoaWNsZXMgPSBbXVxyXG51bml0VHlwZXMudmVoaWNsZXMuSG93aXR6ZXJzID0gW1xyXG4gICAgXCIyQjExIG1vcnRhclwiLFxyXG4gICAgXCJTQVUgR3ZvemRpa2FcIixcclxuICAgIFwiU0FVIE1zdGFcIixcclxuICAgIFwiU0FVIEFrYXRzaWFcIixcclxuICAgIFwiU0FVIDItQzlcIixcclxuICAgIFwiTS0xMDlcIlxyXG5dXHJcblxyXG51bml0VHlwZXMudmVoaWNsZXMuSUZWID0gW1xyXG4gICAgXCJBQVY3XCIsXHJcbiAgICBcIkJNRC0xXCIsXHJcbiAgICBcIkJNUC0xXCIsXHJcbiAgICBcIkJNUC0yXCIsXHJcbiAgICBcIkJNUC0zXCIsXHJcbiAgICBcIkJvbWFuXCIsXHJcbiAgICBcIkJSRE0tMlwiLFxyXG4gICAgXCJCVFItODBcIixcclxuICAgIFwiQlRSX0RcIixcclxuICAgIFwiQnVua2VyXCIsXHJcbiAgICBcIkNvYnJhXCIsXHJcbiAgICBcIkxBVi0yNVwiLFxyXG4gICAgXCJNMTA0MyBITU1XViBBcm1hbWVudFwiLFxyXG4gICAgXCJNMTA0NSBITU1XViBUT1dcIixcclxuICAgIFwiTTExMjYgU3RyeWtlciBJQ1ZcIixcclxuICAgIFwiTS0xMTNcIixcclxuICAgIFwiTTExMzQgU3RyeWtlciBBVEdNXCIsXHJcbiAgICBcIk0tMiBCcmFkbGV5XCIsXHJcbiAgICBcIk1hcmRlclwiLFxyXG4gICAgXCJNQ1YtODBcIixcclxuICAgIFwiTVRMQlwiLFxyXG4gICAgXCJQYXJhdHJvb3BlciBSUEctMTZcIixcclxuICAgIFwiUGFyYXRyb29wZXIgQUtTLTc0XCIsXHJcbiAgICBcIlNhbmRib3hcIixcclxuICAgIFwiU29sZGllciBBS1wiLFxyXG4gICAgXCJJbmZhbnRyeSBBS1wiLFxyXG4gICAgXCJTb2xkaWVyIE0yNDlcIixcclxuICAgIFwiU29sZGllciBNNFwiLFxyXG4gICAgXCJTb2xkaWVyIE00IEdSR1wiLFxyXG4gICAgXCJTb2xkaWVyIFJQR1wiLFxyXG4gICAgXCJUUFpcIlxyXG5dXHJcblxyXG51bml0VHlwZXMudmVoaWNsZXMuTUxSUyA9IFtcclxuICAgIFwiR3JhZC1VUkFMXCIsXHJcbiAgICBcIlVyYWdhbl9CTS0yN1wiLFxyXG4gICAgXCJTbWVyY2hcIixcclxuICAgIFwiTUxSU1wiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5TQU0gPSBbXHJcbiAgICBcIjJTNiBUdW5ndXNrYVwiLFxyXG4gICAgXCJLdWIgMlAyNSBsblwiLFxyXG4gICAgXCI1cDczIHMtMTI1IGxuXCIsXHJcbiAgICBcIlMtMzAwUFMgNVA4NUMgbG5cIixcclxuICAgIFwiUy0zMDBQUyA1UDg1RCBsblwiLFxyXG4gICAgXCJTQS0xMSBCdWsgTE4gOUEzMTBNMVwiLFxyXG4gICAgXCJPc2EgOUEzMyBsblwiLFxyXG4gICAgXCJUb3IgOUEzMzFcIixcclxuICAgIFwiU3RyZWxhLTEwTTNcIixcclxuICAgIFwiU3RyZWxhLTEgOVAzMVwiLFxyXG4gICAgXCJTQS0xMSBCdWsgQ0MgOVM0NzBNMVwiLFxyXG4gICAgXCJTQS04IE9zYSBMRCA5VDIxN1wiLFxyXG4gICAgXCJQYXRyaW90IEFNR1wiLFxyXG4gICAgXCJQYXRyaW90IEVDU1wiLFxyXG4gICAgXCJHZXBhcmRcIixcclxuICAgIFwiSGF3ayBwY3BcIixcclxuICAgIFwiU0EtMTggSWdsYSBtYW5wYWRcIixcclxuICAgIFwiU0EtMTggSWdsYSBjb21tXCIsXHJcbiAgICBcIklnbGEgbWFucGFkIElOU1wiLFxyXG4gICAgXCJTQS0xOCBJZ2xhLVMgbWFucGFkXCIsXHJcbiAgICBcIlNBLTE4IElnbGEtUyBjb21tXCIsXHJcbiAgICBcIlZ1bGNhblwiLFxyXG4gICAgXCJIYXdrIGxuXCIsXHJcbiAgICBcIk00OCBDaGFwYXJyYWxcIixcclxuICAgIFwiTTYgTGluZWJhY2tlclwiLFxyXG4gICAgXCJQYXRyaW90IGxuXCIsXHJcbiAgICBcIk0xMDk3IEF2ZW5nZXJcIixcclxuICAgIFwiUGF0cmlvdCBFUFBcIixcclxuICAgIFwiUGF0cmlvdCBjcFwiLFxyXG4gICAgXCJSb2xhbmQgQURTXCIsXHJcbiAgICBcIlMtMzAwUFMgNTRLNiBjcFwiLFxyXG4gICAgXCJTdGluZ2VyIG1hbnBhZCBHUkdcIixcclxuICAgIFwiU3RpbmdlciBtYW5wYWQgZHNyXCIsXHJcbiAgICBcIlN0aW5nZXIgY29tbSBkc3JcIixcclxuICAgIFwiU3RpbmdlciBtYW5wYWRcIixcclxuICAgIFwiU3RpbmdlciBjb21tXCIsXHJcbiAgICBcIlpTVS0yMy00IFNoaWxrYVwiLFxyXG4gICAgXCJaVS0yMyBFbXBsYWNlbWVudCBDbG9zZWRcIixcclxuICAgIFwiWlUtMjMgRW1wbGFjZW1lbnRcIixcclxuICAgIFwiWlUtMjMgQ2xvc2VkIEluc3VyZ2VudFwiLFxyXG4gICAgXCJVcmFsLTM3NSBaVS0yMyBJbnN1cmdlbnRcIixcclxuICAgIFwiWlUtMjMgSW5zdXJnZW50XCIsXHJcbiAgICBcIlVyYWwtMzc1IFpVLTIzXCJcclxuXVxyXG5cclxudW5pdFR5cGVzLnZlaGljbGVzLlJhZGFyID0gW1xyXG4gICAgXCIxTDEzIEVXUlwiLFxyXG4gICAgXCJLdWIgMVM5MSBzdHJcIixcclxuICAgIFwiUy0zMDBQUyA0MEI2TSB0clwiLFxyXG4gICAgXCJTLTMwMFBTIDQwQjZNRCBzclwiLFxyXG4gICAgXCI1NUc2IEVXUlwiLFxyXG4gICAgXCJTLTMwMFBTIDY0SDZFIHNyXCIsXHJcbiAgICBcIlNBLTExIEJ1ayBTUiA5UzE4TTFcIixcclxuICAgIFwiRG9nIEVhciByYWRhclwiLFxyXG4gICAgXCJIYXdrIHRyXCIsXHJcbiAgICBcIkhhd2sgc3JcIixcclxuICAgIFwiUGF0cmlvdCBzdHJcIixcclxuICAgIFwiSGF3ayBjd2FyXCIsXHJcbiAgICBcInAtMTkgcy0xMjUgc3JcIixcclxuICAgIFwiUm9sYW5kIFJhZGFyXCIsXHJcbiAgICBcInNuciBzLTEyNSB0clwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5TdHJ1Y3R1cmVzID0gW1xyXG4gICAgXCJob3VzZTFhcm1cIixcclxuICAgIFwiaG91c2UyYXJtXCIsXHJcbiAgICBcIm91dHBvc3Rfcm9hZFwiLFxyXG4gICAgXCJvdXRwb3N0XCIsXHJcbiAgICBcImhvdXNlQV9hcm1cIlxyXG5dXHJcblxyXG51bml0VHlwZXMudmVoaWNsZXMuVGFua3MgPSBbXHJcbiAgICBcIkNoYWxsZW5nZXIyXCIsXHJcbiAgICBcIkxlY2xlcmNcIixcclxuICAgIFwiTGVvcGFyZDFBM1wiLFxyXG4gICAgXCJMZW9wYXJkLTJcIixcclxuICAgIFwiTS02MFwiLFxyXG4gICAgXCJNMTEyOCBTdHJ5a2VyIE1HU1wiLFxyXG4gICAgXCJNLTEgQWJyYW1zXCIsXHJcbiAgICBcIlQtNTVcIixcclxuICAgIFwiVC03MkJcIixcclxuICAgIFwiVC04MFVEXCIsXHJcbiAgICBcIlQtOTBcIlxyXG5dXHJcblxyXG51bml0VHlwZXMudmVoaWNsZXMuVW5hcm1lZCA9IFtcclxuICAgIFwiVXJhbC00MzIwIEFQQS01RFwiLFxyXG4gICAgXCJBVE1aLTVcIixcclxuICAgIFwiQVRaLTEwXCIsXHJcbiAgICBcIkdBWi0zMzA3XCIsXHJcbiAgICBcIkdBWi0zMzA4XCIsXHJcbiAgICBcIkdBWi02NlwiLFxyXG4gICAgXCJNOTc4IEhFTVRUIFRhbmtlclwiLFxyXG4gICAgXCJIRU1UVCBURkZUXCIsXHJcbiAgICBcIklLQVJVUyBCdXNcIixcclxuICAgIFwiS0FNQVogVHJ1Y2tcIixcclxuICAgIFwiTEFaIEJ1c1wiLFxyXG4gICAgXCJIdW1tZXJcIixcclxuICAgIFwiTSA4MThcIixcclxuICAgIFwiTUFaLTYzMDNcIixcclxuICAgIFwiUHJlZGF0b3IgR0NTXCIsXHJcbiAgICBcIlByZWRhdG9yIFRyb2phblNwaXJpdFwiLFxyXG4gICAgXCJTdWlkYWVcIixcclxuICAgIFwiVGlncl8yMzMwMzZcIixcclxuICAgIFwiVHJvbGxleSBidXNcIixcclxuICAgIFwiVUFaLTQ2OVwiLFxyXG4gICAgXCJVcmFsIEFUc1AtNlwiLFxyXG4gICAgXCJVcmFsLTM3NSBQQlVcIixcclxuICAgIFwiVXJhbC0zNzVcIixcclxuICAgIFwiVXJhbC00MzIwLTMxXCIsXHJcbiAgICBcIlVyYWwtNDMyMFRcIixcclxuICAgIFwiVkFaIENhclwiLFxyXG4gICAgXCJaaUwtMTMxIEFQQS04MFwiLFxyXG4gICAgXCJTS1AtMTFcIixcclxuICAgIFwiWklMLTEzMSBLVU5HXCIsXHJcbiAgICBcIlpJTC00MzMxXCJcclxuXVxyXG5cclxuLyogQUlSUExBTkVTICovXHJcbnVuaXRUeXBlcy5haXIgPSB7fVxyXG5cclxudW5pdFR5cGVzLmFpci5DQVAgPSBbXHJcbiAgICBcIkYtNEVcIixcclxuICAgIFwiRi9BLTE4Q1wiLFxyXG4gICAgXCJNaUctMjlTXCIsXHJcbiAgICBcIkYtMTRBXCIsXHJcbiAgICBcIlN1LTI3XCIsXHJcbiAgICBcIk1pRy0yM01MRFwiLFxyXG4gICAgXCJTdS0zM1wiLFxyXG4gICAgXCJNaUctMjVSQlRcIixcclxuICAgIFwiU3UtMzBcIixcclxuICAgIFwiTWlHLTMxXCIsXHJcbiAgICBcIk1pcmFnZSAyMDAwLTVcIixcclxuICAgIFwiRi0xNUNcIixcclxuICAgIFwiRi01RVwiLFxyXG4gICAgXCJGLTE2QyBibC41MmRcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5DQVMgPSBbXHJcbiAgICBcIlRvcm5hZG8gSURTXCIsXHJcbiAgICBcIkYtNEVcIixcclxuICAgIFwiRi9BLTE4Q1wiLFxyXG4gICAgXCJNaUctMjdLXCIsXHJcbiAgICBcIkEtMTBDXCIsXHJcbiAgICBcIlN1LTI1XCIsXHJcbiAgICBcIlN1LTM0XCIsXHJcbiAgICBcIlN1LTE3TTRcIixcclxuICAgIFwiRi0xNUVcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5zdHJpa2UgPSBbXHJcbiAgICBcIlR1LTIyTTNcIixcclxuICAgIFwiQi01MkhcIixcclxuICAgIFwiRi0xMTFGXCIsXHJcbiAgICBcIlR1LTk1TVNcIixcclxuICAgIFwiU3UtMjRNXCIsXHJcbiAgICBcIlR1LTE2MFwiLFxyXG4gICAgXCJGLTExN0FcIixcclxuICAgIFwiQi0xQlwiLFxyXG4gICAgXCJUdS0xNDJcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci50YW5rZXIgPSBbXHJcbiAgICBcIlMtM0IgVGFua2VyXCIsXHJcbiAgICBcIktDLTEzNVwiLFxyXG4gICAgXCJJTC03OE1cIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5hd2FjcyA9IFtcclxuICAgIFwiQS01MFwiLFxyXG4gICAgXCJFLTNBXCIsXHJcbiAgICBcIkUtMkRcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5kcm9uZSA9IFtcclxuICAgIFwiTVEtMUEgUHJlZGF0b3JcIixcclxuICAgIFwiTVEtOSBSZWFwZXJcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci50cmFuc3BvcnQgPSBbXHJcbiAgICBcIkMtMTMwXCIsXHJcbiAgICBcIkFuLTI2QlwiLFxyXG4gICAgXCJBbi0zME1cIixcclxuICAgIFwiQy0xN0FcIixcclxuICAgIFwiSUwtNzZNRFwiLFxyXG5dIiwiaW1wb3J0ICogYXMgTCBmcm9tICdsZWFmbGV0J1xyXG5pbXBvcnQgeyBTeW1ib2wgfSBmcm9tICdtaWxzeW1ib2wnXHJcbmltcG9ydCB7IGdldFZpc2liaWxpdHlTZXR0aW5ncyB9IGZyb20gJy4uJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXJrZXJPcHRpb25zIHtcclxuICAgIHVuaXROYW1lOiBzdHJpbmdcclxuICAgIG5hbWU6IHN0cmluZ1xyXG4gICAgaHVtYW46IGJvb2xlYW5cclxuICAgIGNvYWxpdGlvbklEOiBudW1iZXJcclxuICAgIHR5cGU6IGFueVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtlckRhdGEge1xyXG4gICAgaGVhZGluZzogbnVtYmVyXHJcbiAgICBzcGVlZDogbnVtYmVyXHJcbiAgICBhbHRpdHVkZTogbnVtYmVyXHJcbiAgICBhbGl2ZTogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pdE1hcmtlciBleHRlbmRzIEwuTWFya2VyIHtcclxuICAgICN1bml0TmFtZTogc3RyaW5nXHJcbiAgICAjbmFtZTogc3RyaW5nXHJcbiAgICAjaHVtYW46IGJvb2xlYW5cclxuICAgICNhbGl2ZTogYm9vbGVhbiA9IHRydWVcclxuICAgICNzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWFya2VyT3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKG5ldyBMLkxhdExuZygwLCAwKSwgeyByaXNlT25Ib3ZlcjogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLiN1bml0TmFtZSA9IG9wdGlvbnMudW5pdE5hbWU7XHJcbiAgICAgICAgdGhpcy4jbmFtZSA9IG9wdGlvbnMubmFtZTtcclxuICAgICAgICB0aGlzLiNodW1hbiA9IG9wdGlvbnMuaHVtYW47XHJcblxyXG4gICAgICAgIHZhciBzeW1ib2wgPSBuZXcgU3ltYm9sKHRoaXMuI2NvbXB1dGVNYXJrZXJDb2RlKG9wdGlvbnMpLCB7IHNpemU6IDI1IH0pO1xyXG4gICAgICAgIHZhciBpbWcgPSBzeW1ib2wuYXNDYW52YXMoKS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG5cclxuICAgICAgICB2YXIgY29hbGl0aW9uID0gXCJcIjtcclxuICAgICAgICBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAxKVxyXG4gICAgICAgICAgICBjb2FsaXRpb24gPSBcInJlZFwiXHJcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAyKVxyXG4gICAgICAgICAgICBjb2FsaXRpb24gPSBcImJsdWVcIlxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY29hbGl0aW9uID0gXCJuZXV0cmFsXCJcclxuXHJcbiAgICAgICAgdmFyIGljb24gPSBuZXcgTC5EaXZJY29uKHtcclxuICAgICAgICAgICAgaHRtbDogYDx0YWJsZSBjbGFzcz1cInVuaXQtbWFya2VyLWNvbnRhaW5lclwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjb2FsaXRpb259XCIgaWQ9XCJiYWNrZ3JvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjb2FsaXRpb259XCIgaWQ9XCJyaW5nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidW5pdC1tYXJrZXItaWNvblwiIGlkPVwiaWNvblwiPjxpbWcgc3JjPVwiJHtpbWd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidW5pdC1tYXJrZXItdW5pdE5hbWVcIiBpZD1cInVuaXROYW1lXCI+JHt0aGlzLiN1bml0TmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bml0LW1hcmtlci1hbHRpdHVkZVwiIGlkPVwiYWx0aXR1ZGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bml0LW1hcmtlci1zcGVlZFwiIGlkPVwic3BlZWRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bml0LW1hcmtlci1uYW1lXCIgaWQ9XCJuYW1lXCI+JHt0aGlzLiNuYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPmAsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3VuaXQtbWFya2VyJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0SWNvbihpY29uKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFkZChtYXA6IEwuTWFwKTogdGhpcyB7XHJcbiAgICAgICAgc3VwZXIub25BZGQobWFwKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChlOiBhbnkpIHsgZS50YXJnZXQ/LnNldEhvdmVyZWQodHJ1ZSk7IH0pO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbiAoZTogYW55KSB7IGUudGFyZ2V0Py5zZXRIb3ZlcmVkKGZhbHNlKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBkcmF3KGRhdGE6IE1hcmtlckRhdGEpIHtcclxuICAgICAgICB0aGlzLiNhbGl2ZSA9IGRhdGEuYWxpdmU7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcclxuICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lRGl2ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNuYW1lXCIpO1xyXG4gICAgICAgICAgICB2YXIgdW5pdE5hbWVEaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3VuaXROYW1lXCIpO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNjb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIHZhciBpY29uID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNpY29uXCIpO1xyXG4gICAgICAgICAgICB2YXIgYWx0aXR1ZGVEaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FsdGl0dWRlXCIpO1xyXG4gICAgICAgICAgICB2YXIgc3BlZWREaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NwZWVkXCIpO1xyXG5cclxuICAgICAgICAgICAgLyogSWYgdmlzaWJpbGl0eSBpcyBmdWxsIHNob3cgYWxsIGxhYmVscyAqL1xyXG4gICAgICAgICAgICBuYW1lRGl2LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgdW5pdE5hbWVEaXYuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICBhbHRpdHVkZURpdi5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgIHNwZWVkRGl2LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuXHJcbiAgICAgICAgICAgIC8qIElmIHZpc2liaWxpdHkgaXMgcGFydGlhbCBzaG93biBvbmx5IGljb24gYW5kIHVuaXQgbmFtZS4gSWYgbm9uZSwgc2hvd24gb25seSBpY29uLiAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRWaXNpYmlsaXR5KCkgPT09IFwicGFydGlhbFwiIHx8IHRoaXMuZ2V0VmlzaWJpbGl0eSgpID09PSBcIm5vbmVcIilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdE5hbWVEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIGFsdGl0dWRlRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICBzcGVlZERpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFZpc2liaWxpdHkoKSA9PT0gXCJub25lXCIpXHJcbiAgICAgICAgICAgICAgICBuYW1lRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgICAgICBuYW1lRGl2LnN0eWxlLmxlZnQgPSAoLShuYW1lRGl2Lm9mZnNldFdpZHRoIC0gY29udGFpbmVyLm9mZnNldFdpZHRoKSAvIDIpICsgXCJweFwiO1xyXG4gICAgICAgICAgICB1bml0TmFtZURpdi5zdHlsZS5sZWZ0ID0gKC0odW5pdE5hbWVEaXYub2Zmc2V0V2lkdGggLSBjb250YWluZXIub2Zmc2V0V2lkdGgpIC8gMikgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICBpY29uLnN0eWxlLnRyYW5zZm9ybSA9IFwicm90YXRlKFwiICsgZGF0YS5oZWFkaW5nICsgXCJyYWQpXCI7XHJcbiAgICAgICAgICAgIGFsdGl0dWRlRGl2LmlubmVySFRNTCA9IFN0cmluZyhNYXRoLnJvdW5kKGRhdGEuYWx0aXR1ZGUgLyAwLjMwNDggLyAxMDApIC8gMTApO1xyXG4gICAgICAgICAgICBzcGVlZERpdi5pbm5lckhUTUwgPSBTdHJpbmcoTWF0aC5yb3VuZChkYXRhLnNwZWVkICogMS45NDM4NCkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLiNhbGl2ZSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKT8uY2xhc3NMaXN0LmFkZChcInVuaXQtbWFya2VyLWRlYWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLiNzZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpPy5xdWVyeVNlbGVjdG9yKFwiI2ljb25cIik/LmNsYXNzTGlzdC5yZW1vdmUoXCJ1bml0LW1hcmtlci1ob3ZlcmVkXCIpO1xyXG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpPy5xdWVyeVNlbGVjdG9yKFwiI3JpbmdcIik/LmNsYXNzTGlzdC50b2dnbGUoXCJ1bml0LW1hcmtlci1zZWxlY3RlZFwiLCBzZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjYmFja2dyb3VuZFwiKT8uY2xhc3NMaXN0LnRvZ2dsZShcInVuaXQtbWFya2VyLXNlbGVjdGVkXCIsIHNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SG92ZXJlZChob3ZlcmVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKT8uY2xhc3NMaXN0LnRvZ2dsZShcInVuaXQtbWFya2VyLWhvdmVyZWRcIiwgaG92ZXJlZCAmJiB0aGlzLiNhbGl2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SHVtYW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2h1bWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsaXZlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNhbGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiBcImZ1bGxcIjtcclxuICAgIH1cclxuXHJcbiAgICAjY29tcHV0ZU1hcmtlckNvZGUob3B0aW9uczogTWFya2VyT3B0aW9ucykge1xyXG4gICAgICAgIHZhciBpZGVudGl0eSA9IFwiMDBcIjtcclxuICAgICAgICB2YXIgc2V0ID0gXCIwMFwiO1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBcIjAwXCI7XHJcbiAgICAgICAgdmFyIGVudGl0eVR5cGUgPSBcIjAwXCI7XHJcbiAgICAgICAgdmFyIGVudGl0eVN1YnR5cGUgPSBcIjAwXCI7XHJcbiAgICAgICAgdmFyIHNlY3Rvck9uZU1vZGlmaWVyID0gXCIwMFwiO1xyXG4gICAgICAgIHZhciBzZWN0b3JUd29Nb2RpZmllciA9IFwiMDBcIjtcclxuXHJcbiAgICAgICAgLyogSWRlbnRpdHkgKi9cclxuICAgICAgICBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAxKVxyXG4gICAgICAgICAgICBpZGVudGl0eSA9IFwiMDZcIiAvKiBIb3N0aWxlICovXHJcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAyKVxyXG4gICAgICAgICAgICBpZGVudGl0eSA9IFwiMDNcIiAvKiBGcmllbmRseSAqL1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaWRlbnRpdHkgPSBcIjA0XCIgLyogTmV1dHJhbCAqL1xyXG5cclxuICAgICAgICAvKiBBaXIgKi9cclxuICAgICAgICBpZiAob3B0aW9ucy50eXBlLmxldmVsMSA9PSAxKSB7XHJcbiAgICAgICAgICAgIHNldCA9IFwiMDFcIlxyXG4gICAgICAgICAgICBlbnRpdHkgPSBcIjExXCJcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDIgPT0gMSlcclxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIjAxXCJcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMiA9PSAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZSA9IFwiMDJcIlxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gMSlcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjA0XCI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gMilcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjA1XCI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gMylcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjA0XCI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gNClcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjAyXCI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gNSlcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjAwXCI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gNilcclxuICAgICAgICAgICAgICAgIGVudGl0eVN1YnR5cGUgPSBcIjAwXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBHcm91bmQgKi9cclxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLnR5cGUubGV2ZWwxID09IDIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzZXQgPSBcIjEwXCJcclxuICAgICAgICAgICAgZW50aXR5ID0gXCIxMlwiXHJcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIjA1XCJcclxuICAgICAgICB9XHJcbiAgICAgICAgLyogTmF2eSAqL1xyXG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDEgPT0gMylcclxuICAgICAgICAgICAgc2V0ID0gXCIzMFwiXHJcbiAgICAgICAgLyogV2VhcG9uICovXHJcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMSA9PSA0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2V0ID0gXCIwMlwiXHJcbiAgICAgICAgICAgIGVudGl0eSA9IFwiMTFcIlxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSA3KVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0b3JPbmVNb2RpZmllciA9IFwiMDFcIlxyXG4gICAgICAgICAgICAgICAgc2VjdG9yVHdvTW9kaWZpZXIgPSBcIjAxXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLnR5cGUubGV2ZWwzID09IDgpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rvck9uZU1vZGlmaWVyID0gXCIwMVwiXHJcbiAgICAgICAgICAgICAgICBzZWN0b3JUd29Nb2RpZmllciA9IFwiMDJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gMzQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rvck9uZU1vZGlmaWVyID0gXCIwMlwiXHJcbiAgICAgICAgICAgICAgICBzZWN0b3JUd29Nb2RpZmllciA9IFwiMDFcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDMgPT0gMTEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rvck9uZU1vZGlmaWVyID0gXCIwMlwiXHJcbiAgICAgICAgICAgICAgICBzZWN0b3JUd29Nb2RpZmllciA9IFwiMDJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYDEwJHtpZGVudGl0eX0ke3NldH0wMDAwJHtlbnRpdHl9JHtlbnRpdHlUeXBlfSR7ZW50aXR5U3VidHlwZX0ke3NlY3Rvck9uZU1vZGlmaWVyfSR7c2VjdG9yVHdvTW9kaWZpZXJ9YFxyXG4gICAgfSBcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFpclVuaXRNYXJrZXIgZXh0ZW5kcyBVbml0TWFya2VyIHtcclxuICAgIGdldFZpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgcmV0dXJuIFwiZnVsbFwiO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nZXRIdW1hbigpKVxyXG4gICAgICAgICAgICByZXR1cm4gZ2V0VmlzaWJpbGl0eVNldHRpbmdzKCkudXNlcjtcclxuICAgICAgICBlbHNlIGlmICghdGhpcy5nZXRBbGl2ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gZ2V0VmlzaWJpbGl0eVNldHRpbmdzKCkuYWk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBaXJjcmFmdE1hcmtlciBleHRlbmRzIEFpclVuaXRNYXJrZXIge1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSGVsaWNvcHRlck1hcmtlciBleHRlbmRzIEFpclVuaXRNYXJrZXIge1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JvdW5kVW5pdE1hcmtlciBleHRlbmRzIFVuaXRNYXJrZXIge1xyXG4gICAgLyogQXJlIHVzZXIgZHJpdmVuIHVuaXRzIHJlY29nbml6ZWQgYXMgaHVtYW4/ICovXHJcbiAgICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkKCkpXHJcbiAgICAgICAgICAgIHJldHVybiBcImZ1bGxcIjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SHVtYW4oKSlcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLnVzZXI7XHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuZ2V0QWxpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLmFpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTmF2eVVuaXRNYXJrZXIgZXh0ZW5kcyBVbml0TWFya2VyIHtcclxuICAgIGdldFZpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgcmV0dXJuIFwiZnVsbFwiO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0QWxpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZpc2liaWxpdHlTZXR0aW5ncygpLmFpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2VhcG9uTWFya2VyIGV4dGVuZHMgVW5pdE1hcmtlciB7XHJcbiAgICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkKCkpXHJcbiAgICAgICAgICAgIHJldHVybiBcImZ1bGxcIjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdldEFsaXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBnZXRWaXNpYmlsaXR5U2V0dGluZ3MoKS53ZWFwb247XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBMYXRMbmcsIExhdExuZ0JvdW5kcyB9IGZyb20gXCJsZWFmbGV0XCI7XHJcbmltcG9ydCB7IGdldE1hcCwgZ2V0VW5pdEluZm9QYW5lbCB9IGZyb20gXCIuLlwiO1xyXG5pbXBvcnQgeyBVbml0LCBHcm91bmRVbml0IH0gZnJvbSBcIi4vdW5pdFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVuaXRzTWFuYWdlciB7XHJcbiAgICAjdW5pdHM6IHsgW0lEOiBudW1iZXJdOiBVbml0IH07XHJcbiAgICAjY29waWVkVW5pdHM6IFVuaXRbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLiN1bml0cyA9IHt9O1xyXG4gICAgICAgIHRoaXMuI2NvcGllZFVuaXRzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVW5pdChJRDogbnVtYmVyLCBkYXRhOiBhbnkpIHtcclxuICAgICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgdW5pdCBjYXRlZ29yeSBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBjb25zdHJ1Y3RvciBuYW1lICovXHJcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gVW5pdC5nZXRDb25zdHJ1Y3RvcihkYXRhLmNhdGVnb3J5KTtcclxuICAgICAgICBpZiAoY29uc3RydWN0b3IgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdW5pdE5hbWU6IGRhdGEudW5pdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBodW1hbjogZGF0YS5odW1hbixcclxuICAgICAgICAgICAgICAgIGNvYWxpdGlvbklEOiBkYXRhLmNvYWxpdGlvbklELFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4jdW5pdHNbSURdID0gbmV3IGNvbnN0cnVjdG9yKElELCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VW5pdEJ5SUQoSUQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiN1bml0c1tJRF07XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVW5pdChJRDogbnVtYmVyKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRlc2VsZWN0QWxsVW5pdHMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgSUQgaW4gdGhpcy4jdW5pdHMpIHtcclxuICAgICAgICAgICAgdGhpcy4jdW5pdHNbSURdLnNldFNlbGVjdGVkKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgICAgIGZvciAobGV0IElEIGluIGRhdGFbXCJ1bml0c1wiXSkge1xyXG4gICAgICAgICAgICAvKiBDcmVhdGUgdGhlIHVuaXQgaWYgbWlzc2luZyBmcm9tIHRoZSBsb2NhbCBhcnJheSwgdGhlbiB1cGRhdGUgdGhlIGRhdGEuIERyYXdpbmcgaXMgaGFuZGxlZCBieSBsZWFmbGV0LiAqL1xyXG4gICAgICAgICAgICBpZiAoIShJRCBpbiB0aGlzLiN1bml0cykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVW5pdChwYXJzZUludChJRCksIGRhdGFbXCJ1bml0c1wiXVtJRF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuI3VuaXRzW3BhcnNlSW50KElEKV0udXBkYXRlKGRhdGFbXCJ1bml0c1wiXVtJRF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGdldFVuaXRJbmZvUGFuZWwoKS5zaG93KCk7XHJcbiAgICAgICAgICAgIGdldFVuaXRJbmZvUGFuZWwoKS51cGRhdGUodGhpcy5nZXRTZWxlY3RlZFVuaXRzKClbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2V0VW5pdEluZm9QYW5lbCgpLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Vbml0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkVW5pdHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnNldFN0YXRlKFwiTU9WRV9VTklUXCIpO1xyXG4gICAgICAgICAgICAvL3VuaXRDb250cm9sUGFuZWwuc2V0RW5hYmxlZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnNldFN0YXRlKFwiSURMRVwiKTtcclxuICAgICAgICAgICAgLy91bml0Q29udHJvbFBhbmVsLnNldEVuYWJsZWQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RGcm9tQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGVzZWxlY3RBbGxVbml0cygpO1xyXG4gICAgICAgIGZvciAobGV0IElEIGluIHRoaXMuI3VuaXRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIGxhdGxuZyA9IG5ldyBMYXRMbmcodGhpcy4jdW5pdHNbSURdLmxhdGl0dWRlLCB0aGlzLiN1bml0c1tJRF0ubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgaWYgKGJvdW5kcy5jb250YWlucyhsYXRsbmcpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN1bml0c1tJRF0uc2V0U2VsZWN0ZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWRVbml0cygpIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IElEIGluIHRoaXMuI3VuaXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiN1bml0c1tJRF0uZ2V0U2VsZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRVbml0cy5wdXNoKHRoaXMuI3VuaXRzW0lEXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkVW5pdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRGVzdGluYXRpb24obGF0bG5nOiBMLkxhdExuZykge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpIHtcclxuICAgICAgICAgICAgdmFyIGNvbW1hbmRlZFVuaXQgPSBzZWxlY3RlZFVuaXRzW2lkeF07XHJcbiAgICAgICAgICAgIC8vaWYgKHNlbGVjdGVkVW5pdHNbaWR4XS53aW5nbWFuKVxyXG4gICAgICAgICAgICAvL3tcclxuICAgICAgICAgICAgLy8gICAgY29tbWFuZGVkVW5pdCA9IHRoaXMuZ2V0TGVhZGVyKHNlbGVjdGVkVW5pdHNbaWR4XS5JRCk7XHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICBjb21tYW5kZWRVbml0LmFkZERlc3RpbmF0aW9uKGxhdGxuZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGVzdGluYXRpb25zKCkge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpIHtcclxuICAgICAgICAgICAgdmFyIGNvbW1hbmRlZFVuaXQgPSBzZWxlY3RlZFVuaXRzW2lkeF07XHJcbiAgICAgICAgICAgIC8vaWYgKHNlbGVjdGVkVW5pdHNbaWR4XS53aW5nbWFuKVxyXG4gICAgICAgICAgICAvL3tcclxuICAgICAgICAgICAgLy8gICAgY29tbWFuZGVkVW5pdCA9IHRoaXMuZ2V0TGVhZGVyKHNlbGVjdGVkVW5pdHNbaWR4XS5JRCk7XHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICBjb21tYW5kZWRVbml0LmNsZWFyRGVzdGluYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkVW5pdHNDaGFuZ2VTcGVlZChzcGVlZENoYW5nZTogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFVuaXRzW2lkeF0uY2hhbmdlU3BlZWQoc3BlZWRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RlZFVuaXRzQ2hhbmdlQWx0aXR1ZGUoYWx0aXR1ZGVDaGFuZ2U6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgICAgIGZvciAobGV0IGlkeCBpbiBzZWxlY3RlZFVuaXRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRVbml0c1tpZHhdLmNoYW5nZUFsdGl0dWRlKGFsdGl0dWRlQ2hhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaGFuZGxlS2V5RXZlbnQoZSlcclxuICAgIC8vIHtcclxuICAgIC8vICAgICBpZiAoZS5vcmlnaW5hbEV2ZW50LmNvZGUgPT09ICdLZXlDJyAmJiBlLm9yaWdpbmFsRXZlbnQuY3RybEtleSlcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY29weVVuaXRzKCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGVsc2UgaWYgKGUub3JpZ2luYWxFdmVudC5jb2RlID09PSAnS2V5VicgJiYgZS5vcmlnaW5hbEV2ZW50LmN0cmxLZXkpXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnBhc3RlVW5pdHMoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gY29weVVuaXRzKClcclxuICAgIC8vIHtcclxuICAgIC8vICAgICB0aGlzLiNjb3BpZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHBhc3RlVW5pdHMoKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIGZvciAobGV0IGlkeCBpbiB0aGlzLiNjb3BpZWRVbml0cylcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHZhciB1bml0ID0gdGhpcy4jY29waWVkVW5pdHNbaWR4XTtcclxuICAgIC8vICAgICAgICAgY2xvbmVVbml0KHVuaXQuSUQpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBhdHRhY2tVbml0KElEOiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgICAgIGZvciAobGV0IGlkeCBpbiBzZWxlY3RlZFVuaXRzKSB7XHJcbiAgICAgICAgICAgIC8qIElmIGEgdW5pdCBpcyBhIHdpbmdtYW4sIHNlbmQgdGhlIGNvbW1hbmQgdG8gaXRzIGxlYWRlciAqL1xyXG4gICAgICAgICAgICB2YXIgY29tbWFuZGVkVW5pdCA9IHNlbGVjdGVkVW5pdHNbaWR4XTtcclxuICAgICAgICAgICAgLy9pZiAoc2VsZWN0ZWRVbml0c1tpZHhdLndpbmdtYW4pXHJcbiAgICAgICAgICAgIC8ve1xyXG4gICAgICAgICAgICAvLyAgICBjb21tYW5kZWRVbml0ID0gdGhpcy5nZXRMZWFkZXIoc2VsZWN0ZWRVbml0c1tpZHhdLklEKTtcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIGNvbW1hbmRlZFVuaXQuYXR0YWNrVW5pdChJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNyZWF0ZUZvcm1hdGlvbihJRClcclxuICAgIC8vIHtcclxuICAgIC8vICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgLy8gICAgIHZhciB3aW5nbWVuSURzID0gW107XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgICBpZiAoc2VsZWN0ZWRVbml0c1tpZHhdLndpbmdtYW4pXHJcbiAgICAvLyAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgIHNob3dNZXNzYWdlKHNlbGVjdGVkVW5pdHNbaWR4XS51bml0TmFtZSArIFwiIGlzIGFscmVhZHkgaW4gYSBmb3JtYXRpb24uXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkVW5pdHNbaWR4XS5sZWFkZXIpXHJcbiAgICAvLyAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgIHNob3dNZXNzYWdlKHNlbGVjdGVkVW5pdHNbaWR4XS51bml0TmFtZSArIFwiIGlzIGFscmVhZHkgaW4gYSBmb3JtYXRpb24uXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIGVsc2VcclxuICAgIC8vICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgLyogVE9ET1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHNlbGVjdGVkVW5pdHNbaWR4XS5jYXRlZ29yeSAhPT0gdGhpcy5nZXRVbml0QnlJRChJRCkuY2F0ZWdvcnkpXHJcbiAgICAvLyAgICAgICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2UoXCJBbGwgdW5pdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSBjYXRlZ29yeSB0byBjcmVhdGUgYSBmb3JtYXRpb24uXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgKi9cclxuICAgIC8vICAgICAgICAgICAgIGlmIChzZWxlY3RlZFVuaXRzW2lkeF0uSUQgIT0gSUQpXHJcbiAgICAvLyAgICAgICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgd2luZ21lbklEcy5wdXNoKHNlbGVjdGVkVW5pdHNbaWR4XS5JRCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKHdpbmdtZW5JRHMubGVuZ3RoID4gMClcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZ2V0VW5pdEJ5SUQoSUQpLnNldExlYWRlcih3aW5nbWVuSURzKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgc2hvd01lc3NhZ2UoXCJBdCBsZWFzdCAyIHVuaXRzIG11c3QgYmUgc2VsZWN0ZWQgdG8gY3JlYXRlIGEgZm9ybWF0aW9uLlwiKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gZ2V0TGVhZGVyKElEKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIGZvciAobGV0IGlkeCBpbiB0aGlzLiN1bml0cylcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHZhciB1bml0ID0gdGhpcy4jdW5pdHNbaWR4XTtcclxuICAgIC8vICAgICAgICAgaWYgKHVuaXQubGVhZGVyKVxyXG4gICAgLy8gICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodW5pdC53aW5nbWVuLmluY2x1ZGVzKHRoaXMuZ2V0VW5pdEJ5SUQoSUQpKSlcclxuICAgIC8vICAgICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gdW5pdDtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBzaG93TWVzc2FnZShcIkVycm9yOiBubyBsZWFkZXIgZm91bmQgZm9yIHRoaXMgdW5pdFwiKVxyXG4gICAgLy8gfVxyXG59Il19
|