; var StockChart = function (options) {
this.defVal = {
containerId: 'chart_container',
data: [],
PricePreviousClose: null,
style: {},
backgroundColor: 'white',
stroke: 'gray',
strokeWidth: 1,
fill: 'steelblue',
fillOpacity: '0.85',
};
var defStyle = {
fontFamily: 'Segoe UI',
fontSize: '20px',
fontWeight: 'bold',
fill: '#424444',
};
this.opts = $.extend({}, this.defVal, options);
this.opts.style = $.extend({}, defStyle, this.opts.style);
makeSVG = function (tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
}
};
StockChart.prototype = {
draw: function () {
$("#" + this.opts.containerId).empty();
if (!this.opts.data) {
$("#" + this.opts.containerId).hide();
return;
}
if (!this.opts.data.map) {
$("#" + this.opts.containerId).hide();
return;
}
// get the max price from data array
var max = Math.max.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose > max) max = this.opts.PricePreviousClose;
// get the min price from data array
var min = Math.min.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose < min) min = this.opts.PricePreviousClose;
// actual min value in scale Y
var minAxisY = parseFloat(min) - 0.1;// * 0.9;
// actual max value in scale Y
var maxAxisY = parseFloat(max) + 0.1;// * 1.1;
var startPointX = 90; // the trended line default start point X
var startPointY = 205; // the trended line default start point Y
var margin = 20; // the whole chart margin value, four margin values are same
var topY = margin + 25; // the top Y axis line point Y
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var totalMinutes = 390; //9:30 am through 16:00 pm, a total of 390 minutes.
var xLength = defWidth - (margin * 2); // axis width
var yLength = startPointY - topY; // axis length
var xScale = (xLength - startPointX + margin) / totalMinutes; // X scale value
var yScale = parseFloat(yLength / (maxAxisY - minAxisY)).toFixed(2); // Y scale value
var todayDate = this.opts.data[0].T;
todayDate = new Date(todayDate.replace(/ /g, "T"));
var startTime = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate(), 9, 30, 0, 0); // the default start time is 9:30 am
var xStart = startPointX + (todayDate - startTime) / 1000 / 60 * xScale; // calculate the trended line actual start point X
var containerWidth = $("#" + this.opts.containerId).width();
if (containerWidth == 0)
containerWidth = defWidth;
// append svg element
var svg;
if (!!window.ActiveXObject || "ActiveXObject" in window) {
svg = makeSVG('svg', {
width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' 0', focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
else {
svg = makeSVG('svg', {
/*width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,*/
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' ' + defHeight * containerWidth / defWidth, focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
document.getElementById(this.opts.containerId).appendChild(svg);
$(svg).attr("aria-labelledby", "title desc").attr("role", "img");
$(this.opts.style).each(function (i, n) {
$(svg).css(this, n);
});
//append title element in svg
var gtitle = makeSVG('title', { id: 'title' });
gtitle.textContent = "MSFT stock day chart showing stock value at various times";
svg.appendChild(gtitle);
//append desc element in svg
var gdesc = makeSVG('desc', { id: 'desc' });
var strdesc = "";
var hours = 0;
var mins = 0;
for (var i = 0; i < this.opts.data.length; i++) {
var dateTemp = new Date(this.opts.data[i].T.replace(/ /g, "T"));
hours = dateTemp.getHours();
mins = dateTemp.getMinutes();
if (hours == 10 && mins == 0) { strdesc += "At 10am, stock value is " + this.opts.data[i].P; }
if (hours == 12 && mins == 0) { strdesc += ", At 12pm, stock value is " + this.opts.data[i].P; }
if (hours == 14 && mins == 0) { strdesc += ", At 2pm, stock value is " + this.opts.data[i].P; }
if (hours == 16 && mins == 0) { strdesc += ", At 4pm, stock value is " + this.opts.data[i].P; }
}
gdesc.textContent = strdesc;
svg.appendChild(gdesc);
// append gPath element in svg
var gPath = makeSVG('g', { id: this.opts.containerId + '_gPath', transform: 'scale(' + containerWidth / defWidth + ')' });
svg.appendChild(gPath);
// append rect element in gPath
gPath.appendChild(makeSVG('rect', {
x: 0,
y: 0,
width: defWidth,
height: defHeight,
fill: this.opts.backgroundColor
}));
// append Y axis line at top in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: topY,
x2: defWidth - margin + 0.5,
y2: topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at middle in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: (startPointY - topY) / 2 + topY,
x2: defWidth - margin + 0.5,
y2: (startPointY - topY) / 2 + topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at bottom in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY,
x2: defWidth - margin + 0.5,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 1 in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX,
y1: topY,
x2: startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 2 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 30 + startPointX,
y1: topY,
x2: xScale * 30 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 3 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 150 + startPointX,
y1: topY,
x2: xScale * 150 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 4 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 270 + startPointX,
y1: topY,
x2: xScale * 270 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 5 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 390 + startPointX,
y1: topY,
x2: xScale * 390 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y scale label at bottom in gPath
var textY1 = makeSVG('text', {
x: margin - 10,
y: startPointY - 1,
id: this.opts.containerId + '_y0'
});
textY1.textContent = "$" + minAxisY.toFixed(2);
gPath.appendChild(textY1);
// append Y scale label at middle in gPath
var textY2 = makeSVG('text', {
x: margin - 10,
y: (startPointY - topY) / 2 + topY - 1,
id: this.opts.containerId + '_y1'
});
textY2.textContent = "$" + (minAxisY + (maxAxisY - minAxisY) / 2).toFixed(2);
gPath.appendChild(textY2);
// append gTxt element in gPath
var gTxt = makeSVG('g', { id: this.opts.containerId + '_gTxt' });
gPath.appendChild(gTxt);
// append X scale label 1 in gTxt
var textX1 = makeSVG('text', {
x: xScale * 30 + startPointX - 20,
y: margin + 15
});
//textX1.textContent = (todayDate).getShortMonthName() + todayDate.getDate();
textX1.textContent = "10am";
gTxt.appendChild(textX1);
// append X scale label 2 in gTxt
var textX2 = makeSVG('text', {
x: xScale * 150 + startPointX - 20,
y: margin + 15
});
textX2.textContent = "12pm";
gTxt.appendChild(textX2);
// append X scale label 3 in gTxt
var textX3 = makeSVG('text', {
x: xScale * 270 + startPointX - 20,
y: margin + 15
});
textX3.textContent = "2pm";
gTxt.appendChild(textX3);
// append X scale label 4 in gTxt
var textX4 = makeSVG('text', {
x: xScale * 390 + startPointX - 35,
y: margin + 15
});
textX4.textContent = "4pm";
gTxt.appendChild(textX4);
$('text').attr("aria-hidden", "true");
var d = "M" + xStart + "," + startPointY;
var x, y;
for (var i = 0, ci; ci = this.opts.data[i]; i++) {
if (typeof ci !== 'undefined') {
var currTime = isSafari() ? toJSDate(ci.T) : new Date(ci.T);
var duration = (currTime - todayDate) / 1000 / 60;
x = (parseFloat(xStart + xScale * duration));
y = startPointY - parseFloat((ci.P - minAxisY) * yScale).toFixed(2);
d = d + "L" + x + "," + y;
}
}
d = d + "L" + x + "," + startPointY + " Z";
// append path element in gPath
gPath.appendChild(makeSVG('path',
{
id: this.opts.containerId + '_area',
d: d,
fill: this.opts.fill,
"fill-opacity": this.opts.fillOpacity
}));
if (this.opts.PricePreviousClose) {
// append ycp orange line
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
x2: defWidth - margin + 0.5,
y2: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
stroke: '#FF8C00',
"stroke-dasharray": "4,4",
"stroke-width": this.opts.strokeWidth + 1
}));
}
}
};
Date.prototype.monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
Date.prototype.getMonthName = function () {
return this.monthNames[this.getMonth()];
};
Date.prototype.getShortMonthName = function () {
return this.getMonthName().substr(0, 3);
};
function isSafari() {
var is_safari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
return is_safari;
}
function toJSDate(dateTime) {
var dateTimeArr = dateTime.split(" ");//dateTime[0] = date, dateTime[1] = time
var date = dateTimeArr[0].split("-");
var time = dateTimeArr[1].split(":");
return new Date(date[0], date[1], date[2], time[0], time[1], time[2], 0);
}
function compareNine(value) {
return value > 9 ? value : '0' + value;
};
function addMins(date, min) {
return new Date(date.setMinutes(date.getMinutes() + min));
};
function toFixedNumber(v, fraction, unit) {
var numClear = v.toString().replace(/$/g, '').replace(/,/g, '');
var num = Number(numClear);
if (isNaN(num)) return v == '???' ? 'NA' : v;
else if (num == 0) return 0;
var p = 1;
var unitPost = unit == undefined ? '' : unit;
if (unit != undefined && unit.toLowerCase() == 'mil') p = 1000000;
else if (unit != undefined && unit.toLowerCase() == 'bil') p = 1000000000;
return (num / p).toFixed(fraction) + ' ' + unitPost;
};
function toFixedDatetime(d, t, foramtStr, timezone) {
var arrDateParts = d.split("-");
if (arrDateParts.length == 3) {
var dayNum = arrDateParts[0];
var monthNum = arrDateParts[1];
var yearNum = arrDateParts[2];
var D = new Date(monthNum.concat("/", dayNum, "/", yearNum, ' ', t));
return D.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(d.concat(' ', t))).Format(foramtStr) + ' - ' + timezone;
};
function toFixedDatetimeSec(t, foramtStr, timezone) {
var arrDateParts = t.split("-");
if (arrDateParts.length == 3) {
t = new Date(t.replace(/ /g, "T"));
return t.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(t.replace(/ /g, "T"))).Format(foramtStr) + ' - ' + timezone;
};
function toFixed(number, precision) {
var b = 1;
if (isNaN(number)) return number;
if (number < 0) b = -1;
var multiplier = Math.pow(10, precision);
return Math.round(Math.abs(number) * multiplier) / multiplier * b;
};
String.prototype.replaceAll = function (s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2);
};
Date.prototype.Format = function (fmt) {
var that = this;
var postfix = false;
var o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"h+": function () {
return postfix ? (that.getHours() % 12 == 0 ? 12 : that.getHours() % 12) : that.getHours();
}, //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds() //millisecond
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
if (RegExp.$1.length == 1 && RegExp.$1 == "h") postfix = true;
var val = typeof (o[k]) == "function" ? o[k].apply(this) : o[k];
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (val) : (("00" + val).substr(("" + val).length)));
}
}
return fmt + (postfix ? ((this.getHours() < 12) ? " AM" : " PM") : "");
};
function getStockData(data, chartData, varMarketCap) {
if (data.valueM.length == 0) return;
var dataitem = data.valueM[0];
var last = dataitem.price;
var change = dataitem.priceChange;
var percentchange = dataitem.priceChangePercent;
var volume = dataitem.accumulatedVolume;
var cap = varMarketCap * last;
var yearhigh = dataitem.price52wHigh;
var yearlow = dataitem.price52wLow;
var timeoflastsale = (chartData.Series != null && typeof chartData.Series.EndTime !== 'undefined') ? chartData.Series.EndTime : dataitem.datePreviousClose;
var percentChangeClass = ' ';
$('.MicrosoftCorp_last').html("$" + toFixedNumber(last, 2));
var num_change = Number(change);
var external_change = toFixed(num_change, 2);
var external_percentchange = toFixed(Number(percentchange.toString().replace('%', '')), 2);
if (!isNaN(external_change)) external_change = external_change > 0 ? ('+$' + external_change) : ('-$' + Math.abs(external_change));
if (!isNaN(external_percentchange)) external_percentchange = external_percentchange > 0 ? ('+' + external_percentchange + '%') : (external_percentchange + '%');
if (!isNaN(num_change) && num_change < 0) percentChangeClass = ' class="MicrosoftCorp_percentChange"';
else if (isNaN(num_change) || num_change == 0) percentChangeClass = ' class="MicrosoftCorp_percentChange_none"';
$('.MicrosoftCorp_Change').html('' + external_change + ' (' + external_percentchange + ')');
$('.MicrosoftCorp_price>a').css("display", "inline-block").attr("aria-label", "Microsoft current price is " + toFixedNumber(last, 2) + "dollars, Today's change is " + external_change + ", or " + external_percentchange + " points.").attr("title", "click to stock detail page");
$('.MicrosoftCorp_volume').html(toFixedNumber(volume, 2, 'Mil'));
$('.MicrosoftCorp_cap').html(toFixedNumber(cap, 2, 'Bil'));
$('.MicrosoftCorp_yearhigh').html(toFixedNumber(yearhigh, 2));
$('.MicrosoftCorp_yearlow').html(toFixedNumber(yearlow, 2));
$('.MicrosoftCorp_footer_time').html('Quotes delayed by up to 15 minutes. Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET. Supplied by Refinitiv'));
$('.MicrosoftCorp_footer_time').attr("aria-label", 'Quotes delayed by up to 15 minutes. Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET'));
};
function getStockChart(data) {
if (data.length == 0 || typeof data.Series == 'undefined' || data.Series == null) return;
var _data = [];
var startTime = data.Series.PT[0].T;
for (var i = 0, ci; ci = data.Series.PT[i]; i++) {
_data.push({
P: ci.P,
T: i == 0 ? startTime : ci.T
});
}
$('.stock-chart-container').each(function (i) {
var _id = "stock-chart-container-" + i.toString();
$(this).attr("id", _id);
try {
var stockChart = new StockChart({
containerId: _id,
fill: '#5f5f5f',
style: {
fontSize: '18px',
fill: '#424444',
fontWeight: 'normal'
},
data: _data,
PricePreviousClose: data.PricePreviousClose
});
stockChart.draw();
}
catch (err) {
console.info(err.message);
$(this).hide();
}
});
//});
};
function buildChart(strChart, strQuote, strOutstanding) {
if (strChart != "") {
var dataChart = JSON.parse(decodeURIComponent(strChart));
getStockChart(dataChart);
}
if (strQuote != "") {
var dataQuote = JSON.parse(decodeURIComponent(strQuote));
getStockData(dataQuote, dataChart, strOutstanding);
}
if (!strChart) {
strChart = "{\"id\":\"Chart1D1M:a1xzim\",\"PreHoursSeries\":null,\"AfterHoursSeries\":null,\"Series\":{\"PT\":[{\"P\": \"\" ,\"T\":\"\"}],\"StartTime\":\"\",\"EndTime\":\"\"},\"PricePreviousClose\":\"\",\"ChartType\":\"1D1M\",\"ExchangeId\":\"r6dwop\",\"ExchangeCode\":\"XNAS\", " + "\"ExchangeName\":\"Nasdaq Stock Market\",\"OfferingStatus\":\"regular\",\"DisplayName\":\"Microsoft Corp\",\"ShortName\":\"Microsoft\",\"SecurityType\":\"stock\",\"InstrumentId\":\"a1xzim\",\"Symbol\":\"MSFT\",\"Country\":\"US\",\"Market\":\"en-us\","
+ "\"LocalizedAttributes\":{\"enus\":null},\"TimeLastUpdated\":\"\",\"Currency\":\"USD\",\"_p\":\"a1xzim\",\"_t\":\"Chart\",\"_etag\":\"\",\"_rid\":\"\",\"_self\":\"\",\"_attachments\":null,\"_ts\":1580839600}";
dataChart = JSON.parse(strChart);
getStockChart(dataChart);
$("#stock-chart-container-0_y0").text("$");
$("#stock-chart-container-0_y1").text("$");
}
if (!strQuote) {
$(".MicrosoftCorp_volume").html(" ");
$(".MicrosoftCorp_cap").html(" ");
$(".MicrosoftCorp_yearhigh").html(" ");
$(".MicrosoftCorp_yearlow").html(" ");
$('.MicrosoftCorp_footer_time').html('Stock quotes are delayed and will be displayed soon. Supplied by Refinitiv');
}
/*setInterval(function () {
getStockChart(dataChart);
getStockData(dataQuote,dataChart);
}, "300000");*/
$(window).resize(function () {
if (!!window.ActiveXObject || "ActiveXObject" in window) {
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var containerWidth = $(".IRStock .stock-chart-container").width();
if (containerWidth == 0)
containerWidth = defWidth;
var width = defWidth * containerWidth / defWidth;
var height = defHeight * containerWidth / defWidth;
var viewbox = '0 0 ' + defWidth * containerWidth / defWidth + ' 0';
$(".IRStock .stock-chart-container svg").attr("width", width).attr("height", height);
document.querySelector(".IRStock .stock-chart-container svg").setAttribute('viewBox', viewbox);
document.querySelector(".IRStock .stock-chart-container svg g").setAttribute('transform', 'scale(' + containerWidth / defWidth + ')');
}
});
}
// SIG // Begin signature block
// SIG // MIIr8wYJKoZIhvcNAQcCoIIr5DCCK+ACAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // deRzoq11NrEfjWoD56q/sk+nfgeBgmwBr7EiLefEoRKg
// SIG // ghF9MIIIjTCCB3WgAwIBAgITNgAAAeCBaGSnq8u//QAC
// SIG // AAAB4DANBgkqhkiG9w0BAQsFADBBMRMwEQYKCZImiZPy
// SIG // LGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRUw
// SIG // EwYDVQQDEwxBTUUgQ1MgQ0EgMDEwHhcNMjQwMTIwMDEz
// SIG // NDAzWhcNMjUwMTE5MDEzNDAzWjAkMSIwIAYDVQQDExlN
// SIG // aWNyb3NvZnQgQXp1cmUgQ29kZSBTaWduMIIBIjANBgkq
// SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlCO1vYAudsum
// SIG // +1IrSlxi6b8equofqY31NJ65D3hubDRXMCqk++UgHO3V
// SIG // rlWgevU7Y5Hf3x8Xyp73VXLI2nSjscX+Cw3u/sZ4nn8E
// SIG // 6gfdVzT/vTxcepAmr8VB55dBxYWnWd7dWPHVRlMmgI2Q
// SIG // 0U0VCz1v/aZxgiEMr00ucvOzMf+dFjJO3Ng9dhlNedQY
// SIG // X1qIzDzaW3WGUVWiCZsw814wQQA18Agh3hixHD9nTMA8
// SIG // FiyTWJlEM8gO9BCvQKF/CxDFxLlQ4aa0MmtQiMy/ibOR
// SIG // HZv94s5NjQMFU6DnGLwmPjxn+WsZ4AllRdtq+EILVFtF
// SIG // zlBW1qbuvWYwpzuIKBjyKQIDAQABo4IFmTCCBZUwKQYJ
// SIG // KwYBBAGCNxUKBBwwGjAMBgorBgEEAYI3WwEBMAoGCCsG
// SIG // AQUFBwMDMD0GCSsGAQQBgjcVBwQwMC4GJisGAQQBgjcV
// SIG // CIaQ4w2E1bR4hPGLPoWb3RbOnRKBYIPdzWaGlIwyAgFk
// SIG // AgEOMIICdgYIKwYBBQUHAQEEggJoMIICZDBiBggrBgEF
// SIG // BQcwAoZWaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br
// SIG // aWluZnJhL0NlcnRzL0JZMlBLSUNTQ0EwMS5BTUUuR0JM
// SIG // X0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQwUgYIKwYB
// SIG // BQUHMAKGRmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JZ
// SIG // MlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIwQ0El
// SIG // MjAwMSgyKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6Ly9j
// SIG // cmwyLmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5BTUUu
// SIG // R0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQwUgYI
// SIG // KwYBBQUHMAKGRmh0dHA6Ly9jcmwzLmFtZS5nYmwvYWlh
// SIG // L0JZMlBLSUNTQ0EwMS5BTUUuR0JMX0FNRSUyMENTJTIw
// SIG // Q0ElMjAwMSgyKS5jcnQwUgYIKwYBBQUHMAKGRmh0dHA6
// SIG // Ly9jcmw0LmFtZS5nYmwvYWlhL0JZMlBLSUNTQ0EwMS5B
// SIG // TUUuR0JMX0FNRSUyMENTJTIwQ0ElMjAwMSgyKS5jcnQw
// SIG // ga0GCCsGAQUFBzAChoGgbGRhcDovLy9DTj1BTUUlMjBD
// SIG // UyUyMENBJTIwMDEsQ049QUlBLENOPVB1YmxpYyUyMEtl
// SIG // eSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZp
// SIG // Z3VyYXRpb24sREM9QU1FLERDPUdCTD9jQUNlcnRpZmlj
// SIG // YXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlmaWNhdGlv
// SIG // bkF1dGhvcml0eTAdBgNVHQ4EFgQUp93M5xkvs0cwfyDe
// SIG // w4UnPUpioUswDgYDVR0PAQH/BAQDAgeAMFQGA1UdEQRN
// SIG // MEukSTBHMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu
// SIG // ZCBPcGVyYXRpb25zIExpbWl0ZWQxFjAUBgNVBAUTDTIz
// SIG // NjE2Nys1MDE5NzEwggHmBgNVHR8EggHdMIIB2TCCAdWg
// SIG // ggHRoIIBzYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29t
// SIG // L3BraWluZnJhL0NSTC9BTUUlMjBDUyUyMENBJTIwMDEo
// SIG // MikuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9B
// SIG // TUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFodHRwOi8v
// SIG // Y3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENBJTIw
// SIG // MDEoMikuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2Ny
// SIG // bC9BTUUlMjBDUyUyMENBJTIwMDEoMikuY3JshjFodHRw
// SIG // Oi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBDUyUyMENB
// SIG // JTIwMDEoMikuY3JshoG9bGRhcDovLy9DTj1BTUUlMjBD
// SIG // UyUyMENBJTIwMDEoMiksQ049QlkyUEtJQ1NDQTAxLENO
// SIG // PUNEUCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxD
// SIG // Tj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPUFN
// SIG // RSxEQz1HQkw/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlz
// SIG // dD9iYXNlP29iamVjdENsYXNzPWNSTERpc3RyaWJ1dGlv
// SIG // blBvaW50MB8GA1UdIwQYMBaAFJZRhOBrb3v+2Aarw/KF
// SIG // 5imuavnUMB8GA1UdJQQYMBYGCisGAQQBgjdbAQEGCCsG
// SIG // AQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQCiadnRYACw
// SIG // zKwj9B+IF+9ae7mrgOh3tl9t9efBsSXxg6ed8jCLXPAm
// SIG // gzyM+TSMyoE4kIjT0LrHI41p9YcgwY2UKKo/Kpg0NuXx
// SIG // 8/cIdfpra6669hIxEuGHwMH3VlOrMxoT0rNdGjtRd+aB
// SIG // aOAuHtjo+euoBEY2RlIVPXh3PmqTHAz5bVPmcUyT6xsm
// SIG // WO0fMGbIT6qf13n49ml6QWT0EgQLPeXzsMB5oAHlWClx
// SIG // v98RK+no0UWOAU/zn6GQqqZfKZCTFqUGwyjDDwznopGJ
// SIG // 2Qxplm6PP1/sRdgIfQdm0MDbMYMwPcVwJ9JhGnq2Owfi
// SIG // KsswbypzC7E91lCROSQn8CL7MIII6DCCBtCgAwIBAgIT
// SIG // HwAAAFHqj/accwyoOwAAAAAAUTANBgkqhkiG9w0BAQsF
// SIG // ADA8MRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZIm
// SIG // iZPyLGQBGRYDQU1FMRAwDgYDVQQDEwdhbWVyb290MB4X
// SIG // DTIxMDUyMTE4NDQxNFoXDTI2MDUyMTE4NTQxNFowQTET
// SIG // MBEGCgmSJomT8ixkARkWA0dCTDETMBEGCgmSJomT8ixk
// SIG // ARkWA0FNRTEVMBMGA1UEAxMMQU1FIENTIENBIDAxMIIB
// SIG // IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyZpS
// SIG // CX0Bno1W1yqXMhT6BUlJZWpa4p3xFeiTHO4vm2Q6C/az
// SIG // R5xwxnyYHrkSGDtS2P9X+KDE64V20mmEQkubxnPNeOVn
// SIG // E2RvdPGxgwlq+BhS3ONdVsQPj79q7XgHM9HhzB9+qk0P
// SIG // C9KN1zm9p/seyiRS6JF1dbOqRf1pUl7FAVxmgiCFgV8h
// SIG // HIb/rDPXig7FDi3S0yEx2CUDVpIq8jEhG8anUFE1WYxM
// SIG // +ni0S5KHwwKPKV4qyGDoDO+9AmDoma3Chyu5WDlW5cdt
// SIG // qXTWsGPE3umtnX6AmlldUFLms4OVR4guKf+n5LIBCC6b
// SIG // TiocfXPomqYjYTKx7AGMfaVLaaXmhQIDAQABo4IE3DCC
// SIG // BNgwEgYJKwYBBAGCNxUBBAUCAwIAAjAjBgkrBgEEAYI3
// SIG // FQIEFgQUEmgkQiFHy9RrvjHPIKTACyN/P0cwHQYDVR0O
// SIG // BBYEFJZRhOBrb3v+2Aarw/KF5imuavnUMIIBBAYDVR0l
// SIG // BIH8MIH5BgcrBgEFAgMFBggrBgEFBQcDAQYIKwYBBQUH
// SIG // AwIGCisGAQQBgjcUAgEGCSsGAQQBgjcVBgYKKwYBBAGC
// SIG // NwoDDAYJKwYBBAGCNxUGBggrBgEFBQcDCQYIKwYBBQUI
// SIG // AgIGCisGAQQBgjdAAQEGCysGAQQBgjcKAwQBBgorBgEE
// SIG // AYI3CgMEBgkrBgEEAYI3FQUGCisGAQQBgjcUAgIGCisG
// SIG // AQQBgjcUAgMGCCsGAQUFBwMDBgorBgEEAYI3WwEBBgor
// SIG // BgEEAYI3WwIBBgorBgEEAYI3WwMBBgorBgEEAYI3WwUB
// SIG // BgorBgEEAYI3WwQBBgorBgEEAYI3WwQCMBkGCSsGAQQB
// SIG // gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAS
// SIG // BgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFCle
// SIG // UV5krjS566ycDaeMdQHRCQsoMIIBaAYDVR0fBIIBXzCC
// SIG // AVswggFXoIIBU6CCAU+GMWh0dHA6Ly9jcmwubWljcm9z
// SIG // b2Z0LmNvbS9wa2lpbmZyYS9jcmwvYW1lcm9vdC5jcmyG
// SIG // I2h0dHA6Ly9jcmwyLmFtZS5nYmwvY3JsL2FtZXJvb3Qu
// SIG // Y3JshiNodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9hbWVy
// SIG // b290LmNybIYjaHR0cDovL2NybDEuYW1lLmdibC9jcmwv
// SIG // YW1lcm9vdC5jcmyGgapsZGFwOi8vL0NOPWFtZXJvb3Qs
// SIG // Q049QU1FUm9vdCxDTj1DRFAsQ049UHVibGljJTIwS2V5
// SIG // JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmln
// SIG // dXJhdGlvbixEQz1BTUUsREM9R0JMP2NlcnRpZmljYXRl
// SIG // UmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1j
// SIG // UkxEaXN0cmlidXRpb25Qb2ludDCCAasGCCsGAQUFBwEB
// SIG // BIIBnTCCAZkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9jcmwu
// SIG // bWljcm9zb2Z0LmNvbS9wa2lpbmZyYS9jZXJ0cy9BTUVS
// SIG // b290X2FtZXJvb3QuY3J0MDcGCCsGAQUFBzAChitodHRw
// SIG // Oi8vY3JsMi5hbWUuZ2JsL2FpYS9BTUVSb290X2FtZXJv
// SIG // b3QuY3J0MDcGCCsGAQUFBzAChitodHRwOi8vY3JsMy5h
// SIG // bWUuZ2JsL2FpYS9BTUVSb290X2FtZXJvb3QuY3J0MDcG
// SIG // CCsGAQUFBzAChitodHRwOi8vY3JsMS5hbWUuZ2JsL2Fp
// SIG // YS9BTUVSb290X2FtZXJvb3QuY3J0MIGiBggrBgEFBQcw
// SIG // AoaBlWxkYXA6Ly8vQ049YW1lcm9vdCxDTj1BSUEsQ049
// SIG // UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2Vydmlj
// SIG // ZXMsQ049Q29uZmlndXJhdGlvbixEQz1BTUUsREM9R0JM
// SIG // P2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1j
// SIG // ZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MA0GCSqGSIb3DQEB
// SIG // CwUAA4ICAQBQECO3Tw/o317Rrd7yadqcswPx1LvIYymk
// SIG // aTN6KcmuRt6HKa0Xe73Ux2/AQ30TfgA9GBJngweRykKB
// SIG // usRzyOU17iIubJvy3gA21dwtqtB0DsoEv1U/ptVu2v++
// SIG // doTCJ/i+GbssVXkgaX8H+6EOGEmT4evp4GbwR4HwWlc+
// SIG // Dvf8HH8PdUA2Z04CvcwIfckSipbNm84jxJ8XjmTFTWsc
// SIG // ldL9edj2NsY6iGnyJFIyur2PS7VRYyV3p1VAJp91gj1j
// SIG // RQtWEyCB8P5g9nE3z8u0ANaU/hjwEQCrdGyravWgnf2J
// SIG // tG+bT26YAokbc8m+32zUtXRO+NK3tAjhOu2FdsG3qNrF
// SIG // 4sc7y37R/C+7Pcb/cFfhttqsirepZii4xStcjMODYuXz
// SIG // Gm3IJs0b0owHG6oKd7ZOGvHpmmh9K8/DLriD/sq8bURD
// SIG // 10qi/wuW8zM7IpLg1vcR9dIK2mc0pj44pc6UX0XbttP/
// SIG // VEJgu3lT2eI9VjWtaKjx38xE9woSMyekPRtzTwgfuysF
// SIG // 9DkJisr+yA4po/FPxpbBw9c/hBf32DH/GFxteS2pmjgK
// SIG // IbMP8sDukmEq3lVvuWNJsybrZwQvQpvaM49fv+JKpLK5
// SIG // YWYEfwksYRR9wU8Hh/ID9hRCEkbUoQ2W7mMpsp2Nbp/k
// SIG // cn4ivfolUy3Q9Yf0scsQ6WTLYpm+AoCUJTGCGc4wghnK
// SIG // AgEBMFgwQTETMBEGCgmSJomT8ixkARkWA0dCTDETMBEG
// SIG // CgmSJomT8ixkARkWA0FNRTEVMBMGA1UEAxMMQU1FIENT
// SIG // IENBIDAxAhM2AAAB4IFoZKery7/9AAIAAAHgMA0GCWCG
// SIG // SAFlAwQCAQUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEE
// SIG // AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
// SIG // AgEVMC8GCSqGSIb3DQEJBDEiBCAULgUwGHY+/n5Nx08E
// SIG // rZiUmqARk/x+7L82ifgwpdwU1DBCBgorBgEEAYI3AgEM
// SIG // MTQwMqAUgBIATQBpAGMAcgBvAHMAbwBmAHShGoAYaHR0
// SIG // cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEB
// SIG // AQUABIIBAA3t3YUl9n/CEkHt4g+b9+ubrWyiwjEBT1vr
// SIG // T7q8AR0tIZIkbtImE2qw/I4fFzjdpFQdIuV62nR7CBIe
// SIG // dCGvWD57OOlspaZi1tCAJ0/RGFupAF5VTPoJF/iWTquL
// SIG // YvtQ6kzqj2f9xBXj1dRLnBBQDeCeOwFsXKC+BVnuQ+LT
// SIG // L4wvzyOluLISJMLQIXPbsLYEaU3+G2/qUVS/rqRYkn4O
// SIG // 7n97AsGYwthg/TElSGNQ6qUmO7Xjt2HflvOO/Ta1J3TM
// SIG // K/x6KtQt/kOTX1hjQt1zZ2W7EUOrIp56uMaGbPkLGSpw
// SIG // oxPP2tLL1FsM0iz6lR/ZiVsFpmow9AML/gTU5qdkb2ih
// SIG // gheWMIIXkgYKKwYBBAGCNwMDATGCF4Iwghd+BgkqhkiG
// SIG // 9w0BBwKgghdvMIIXawIBAzEPMA0GCWCGSAFlAwQCAQUA
// SIG // MIIBUQYLKoZIhvcNAQkQAQSgggFABIIBPDCCATgCAQEG
// SIG // CisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQgMQpe
// SIG // oHWsJHCS21c1Vdu8UWP+62O9T0+ifJFHXiFnSBMCBmda
// SIG // 0cxMIhgSMjAyNTAxMTMxNzA5NDguMzhaMASAAgH0oIHR
// SIG // pIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
// SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
// SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL
// SIG // ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScw
// SIG // JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046OTIwMC0wNUUw
// SIG // LUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0
// SIG // YW1wIFNlcnZpY2WgghHtMIIHIDCCBQigAwIBAgITMwAA
// SIG // Aecujy+TC08b6QABAAAB5zANBgkqhkiG9w0BAQsFADB8
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
// SIG // b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMzEy
// SIG // MDYxODQ1MTlaFw0yNTAzMDUxODQ1MTlaMIHLMQswCQYD
// SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
// SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
// SIG // IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQg
// SIG // QW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hp
// SIG // ZWxkIFRTUyBFU046OTIwMC0wNUUwLUQ5NDcxJTAjBgNV
// SIG // BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw
// SIG // ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC
// SIG // V58v4IuQ659XPM1DtaWMv9/HRUC5kdiEF89YBP6/Rn7k
// SIG // jqMkZ5ESemf5Eli4CLtQVSefRpF1j7S5LLKisMWOGRaL
// SIG // caVbGTfcmI1vMRJ1tzMwCNIoCq/vy8WH8QdV1B/Ab5sK
// SIG // +Q9yIvzGw47TfXPE8RlrauwK/e+nWnwMt060akEZiJJz
// SIG // 1Vh1LhSYKaiP9Z23EZmGETCWigkKbcuAnhvh3yrMa89u
// SIG // BfaeHQZEHGQqdskM48EBcWSWdpiSSBiAxyhHUkbknl9P
// SIG // PztB/SUxzRZjUzWHg9bf1mqZ0cIiAWC0EjK7ONhlQfKS
// SIG // RHVLKLNPpl3/+UL4Xjc0Yvdqc88gOLUr/84T9/xK5r82
// SIG // ulvRp2A8/ar9cG4W7650uKaAxRAmgL4hKgIX5/0aIAsb
// SIG // yqJOa6OIGSF9a+DfXl1LpQPNKR792scF7tjD5WqwIuif
// SIG // S9YUiHMvRLjjKk0SSCV/mpXC0BoPkk5asfxrrJbCsJeP
// SIG // HSOEblpJzRmzaP6OMXwRcrb7TXFQOsTkKuqkWvvYIPvV
// SIG // zC68UM+MskLPld1eqdOOMK7Sbbf2tGSZf3+iOwWQMcWX
// SIG // B9gw5gK3AIYK08WkJJuyzPqfitgubdRCmYr9CVsNOuW+
// SIG // wHDYGhciJDF2LkrjkFUjUcXSIJd9f2ssYitZ9CurGV74
// SIG // BQcfrxjvk1L8jvtN7mulIwIDAQABo4IBSTCCAUUwHQYD
// SIG // VR0OBBYEFM/+4JiAnzY4dpEf/Zlrh1K73o9YMB8GA1Ud
// SIG // IwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1Ud
// SIG // HwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRpbWUt
// SIG // U3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF
// SIG // BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cu
// SIG // bWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9z
// SIG // b2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSku
// SIG // Y3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYI
// SIG // KwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3
// SIG // DQEBCwUAA4ICAQB0ofDbk+llWi1cC6nsfie5Jtp09o6b
// SIG // 6ARCpvtDPq2KFP+hi+UNNP7LGciKuckqXCmBTFIhfBeG
// SIG // Sxvk6ycokdQr3815pEOaYWTnHvQ0+8hKy86r1F4rfBu4
// SIG // oHB5cTy08T4ohrG/OYG/B/gNnz0Ol6v7u/qEjz48zXZ6
// SIG // ZlxKGyZwKmKZWaBd2DYEwzKpdLkBxs6A6enWZR0jY+q5
// SIG // FdbV45ghGTKgSr5ECAOnLD4njJwfjIq0mRZWwDZQoXtJ
// SIG // SaVHSu2lHQL3YHEFikunbUTJfNfBDLL7Gv+sTmRiDZky
// SIG // 5OAxoLG2gaTfuiFbfpmSfPcgl5COUzfMQnzpKfX6+FkI
// SIG // 0QQNvuPpWsDU8sR+uni2VmDo7rmqJrom4ihgVNdLaMfN
// SIG // UqvBL5ZiSK1zmaELBJ9a+YOjE5pmSarW5sGbn7iVkF2W
// SIG // 9JQIOH6tGWLFJS5Hs36zahkoHh8iD963LeGjZqkFusKa
// SIG // UW72yMj/yxTeGEDOoIr35kwXxr1Uu+zkur2y+FuNY0oZ
// SIG // jppzp95AW1lehP0xaO+oBV1XfvaCur/B5PVAp2xzrosM
// SIG // EUcAwpJpio+VYfIufGj7meXcGQYWA8Umr8K6Auo+Jlj8
// SIG // IeFS6lSvKhqQpmdBzAMGqPOQKt1Ow3ZXxehK7vAiim3Z
// SIG // iALlM0K546k0sZrxdZPgpmz7O8w9gHLuyZAQezCCB3Ew
// SIG // ggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJ
// SIG // KoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD
// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
// SIG // MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj
// SIG // YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIy
// SIG // NVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4IC
// SIG // DwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3u
// SIG // nAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm95VT
// SIG // cVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aO
// SIG // RmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlh
// SIG // AnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S
// SIG // /rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc
// SIG // 6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1o
// SIG // O5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbni
// SIG // jYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3E
// SIG // XzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr
// SIG // bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M
// SIG // 269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1qGFph
// SIG // AXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6Cm
// SIG // gyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr
// SIG // 9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXbGjfH
// SIG // CBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQAB
// SIG // o4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkr
// SIG // BgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4w
// SIG // HQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwG
// SIG // A1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYB
// SIG // BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
// SIG // a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUE
// SIG // DDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMA
// SIG // dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
// SIG // AwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX
// SIG // zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N
// SIG // aWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYB
// SIG // BQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0Nl
// SIG // ckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0BAQsF
// SIG // AAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5O
// SIG // R2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts
// SIG // 0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+iehp
// SIG // 4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRX
// SIG // ud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFd
// SIG // PSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZ
// SIG // QhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzs
// SIG // kYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCr
// SIG // dTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5
// SIG // JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxn
// SIG // GSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU
// SIG // CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3
// SIG // Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokLjzba
// SIG // ukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRb
// SIG // atGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNT
// SIG // TY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNQMIICOAIB
// SIG // ATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNV
// SIG // BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
// SIG // HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEl
// SIG // MCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0
// SIG // aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjky
// SIG // MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQg
// SIG // VGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoD
// SIG // FQCzcgTnGasSwe/dru+cPe1NF/vwQ6CBgzCBgKR+MHwx
// SIG // CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
// SIG // MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
// SIG // b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
// SIG // c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3
// SIG // DQEBCwUAAgUA6y9+XzAiGA8yMDI1MDExMzExNTgyM1oY
// SIG // DzIwMjUwMTE0MTE1ODIzWjB3MD0GCisGAQQBhFkKBAEx
// SIG // LzAtMAoCBQDrL35fAgEAMAoCAQACAi34AgH/MAcCAQAC
// SIG // AhLFMAoCBQDrMM/fAgEAMDYGCisGAQQBhFkKBAIxKDAm
// SIG // MAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEA
// SIG // AgMBhqAwDQYJKoZIhvcNAQELBQADggEBAEwcyXqFElBa
// SIG // mYQaQMBHbvh3YZHAW8FwpUDwi3/5Y62gzZKqvejvdMb+
// SIG // bKp5F5FyV5wN/X5lA1JVkWE22JKo+ekaEH2Qnc4Gsj/h
// SIG // GCyYsSo7fGoJQsEZ4CgUSfFTTbTbKfEQfTNGRXFKy7DV
// SIG // WxnfWhPzi99UHKQLSiRFfsvEyWdcOMxlu9wg52AcTfsv
// SIG // w4ZPNNRWlGo9QChUrwk1P866hu5IgiQA8Urm1T0bFIM5
// SIG // 53LueyaItt2nl4cWAdnED7UOGWBTYOc4Gl4//LBpMtKT
// SIG // LHDnZ3A/DeDr4oGdTvCmY/AtDfTWNlQtFN6Gl6VYC4RP
// SIG // nmlggXPk/xds41v28xLUwLoxggQNMIIECQIBATCBkzB8
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
// SIG // b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAecu
// SIG // jy+TC08b6QABAAAB5zANBglghkgBZQMEAgEFAKCCAUow
// SIG // GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqG
// SIG // SIb3DQEJBDEiBCCg8GjZu6Un6aUu7niqGaiNrWIHtEd/
// SIG // vjdBQdoBC4xbHjCB+gYLKoZIhvcNAQkQAi8xgeowgecw
// SIG // geQwgb0EIOU2XQ12aob9DeDFXM9UFHeEX74Fv0ABvQMG
// SIG // 7qC51nOtMIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
// SIG // UENBIDIwMTACEzMAAAHnLo8vkwtPG+kAAQAAAecwIgQg
// SIG // cmlS4e1MEOUEGfELgPb/8q97kIkHju8AuxH3GHfDOe4w
// SIG // DQYJKoZIhvcNAQELBQAEggIAJ5kOde2HFRAqqoKy2KD6
// SIG // Jvc8yKG94YCp3+NXqjgq75245ribzivGki/l4vigDvqo
// SIG // JxEbCpp7SA5yI2gfzT/VibsCZ+VMKW0tznNYAeEJkWnT
// SIG // 5m+OIr94dLSwFH7uzm42pUN3nnI58EfrVDzu4fAdkH9V
// SIG // 1T4BD3nRjfjuXhu0iXWBtJ6trTPpuH3944F9bU4+vCn2
// SIG // N9vGEg0VobveG6+rTdWu995s9QLB9Scds2E3hxmWGl7V
// SIG // KXG4wuSElGXw7IPE5FGe2wMOf2zqUoXnyR7K6hGglxLZ
// SIG // DEEEn7d6wtAiV7nZfLp5+/hKKt5YnEI/4d1hy0+/Lx7v
// SIG // 3X3n29GsBEi/rwkpp4rBXSEMtUt6vdWtC+jEUodCP85H
// SIG // NmM08mQQ9QrMlJAA+FRkW/pdWVeOZLiwjx4yRBxEx5j2
// SIG // yhMWst46L/Gxr2cjJ07eNGcWHVdArUPH5Shxpt23EgHz
// SIG // 3MlGEN20x6QqOAovU6rwhgb7wMqeMgFqP8novOeJVdsL
// SIG // IK0z1A1+RypJP+Gls80R7nSE+Piqv4KGq8R2hdjNGAct
// SIG // VWhUhrNFLVkLgeANlGLkp5hIE30NgNCXfr8vY5BXyWru
// SIG // 4kVXmxAItWj7xMZzEbYL+wAEQA42VUSwfZj7c6+GrZks
// SIG // LxG8hkSkOiKArXzzW4WDO3QmQbtlaVQPKT1tZ42KYkGBkBg=
// SIG // End signature block