added some development tools
[windows-sources.git] / developer / VSSDK / VisualStudioIntegration / Common / Source / CPP / VSL / VSLArchitecture_files / find.js
blob8b975801d65b8959e641d1b610d565698d03ba48
2 var strShapeName = "Shape Name";
3 var strShapeText = "Shape Text";
4 var strProps = "Custom Properties";
5 var strResults = "Search results for:";
7 var strShape = "Shape Name:";
8 var strNoCustomPropertiesToDisplayText = "CTRL+click a shape in the drawing to view details.";
10 var FindShapeXML = parent.FindShapeXML;
11 var Unquote = parent.Unquote;
12 var put_Location = parent.put_Location;
15 var strChkBox = "Chkbox";
16 var strPropChkBox = "PropChkbox";
18 function doExpando(xxx,yyy){
19 if (xxx.style.display=="none"){
20 xxx.style.display = ""
21 yyy.src = up.src;
22 }else{
23 xxx.style.display = "none"
24 yyy.src = down.src;
28 function doExp(xxx,yyy){
29 if (xxx.style.display=="none"){
30 xxx.style.display = ""
31 yyy.src = "minus.gif";
32 }else{
33 xxx.style.display = "none"
34 yyy.src = "plus.gif";
39 function FindOnClick()
41 var count, indexOfString;
43 var fieldsToSearchArray = new Array();
44 if (parent.xmlData != null && document.theForm[strProps + strChkBox].checked)
46 for( count=0; count < document.theForm.length; count++ )
48 indexOfString = document.theForm[count].name.indexOf(strPropChkBox);
49 if( -1 != indexOfString && document.theForm[count].checked )
51 fieldsToSearchArray[ fieldsToSearchArray.length ] = document.theForm[count].name.slice(0, indexOfString);
56 var searchTokensArray = CreateSearchTokens (document.theForm.findString.value);
58 if (searchTokensArray.length > 0)
60 var findArray = Find(searchTokensArray, fieldsToSearchArray);
61 var ArrayLength = findArray.length;
62 var strResultsHTML = "No matches found.";
63 var lastPageID = null;
64 var shapeID;
67 if(ArrayLength > 0)
69 strResultsHTML = strResults + ' <b>'+ parent.HTMLEscape(document.theForm.findString.value) +'</b>';
70 for ( count = 0; count < ArrayLength; count++)
73 if( lastPageID != findArray[count].PageID )
75 lastPageID = findArray[count].PageID;
78 shapeID = findArray[count].ShapeID;
79 strResultsHTML += '<p class="results"><a href="javascript:populateSearchResultDetails(\'results_'+ lastPageID +'_'+ shapeID +'\', '+ lastPageID +','+ shapeID +'); TogglePlus(results_' + lastPageID + '_' + shapeID + ',\'img_' + lastPageID + '_' + shapeID + '\', hideResults)"><img src="plus.gif" alt="Shows/hides shape details" width="13" height="9" border="0" id="img_'+ lastPageID +'_'+ shapeID +'"></a>\n'
80 strResultsHTML += '<a class="blu1" href="JavaScript:FindQuerySelect(';
82 strResultsHTML += findArray[count].PageID + ",";
83 strResultsHTML += findArray[count].ShapeID + ",";
84 strResultsHTML += findArray[count].PinX + ",";
85 strResultsHTML += findArray[count].PinY;
87 strResultsHTML += ')">'+ findArray[count].Title +'</a></p>\n'
89 strResultsHTML += '</div>\n';
90 strResultsHTML += '<div class="indent" id="results_'+ lastPageID +'_'+ shapeID +'" style="display:none;width:100%;"></div>\n'
94 var divAdvSrch = document.all("hideAdvSrch");
95 var imgAS0 = document.all("as0");
97 var tmpObj = document.all("hideResults");
98 if( tmpObj != null )
100 tmpObj.innerHTML = strResultsHTML;
101 tmpObj.open = "true";
102 tmpObj.style.display = "block";
107 function CreateSearchTokens (strUserString)
109 var searchTokensArray = new Array();
111 var strToken = "";
112 var chCurChar;
114 for (var count = 0; count < strUserString.length; count++)
116 chCurChar = strUserString.charAt(count);
117 if (chCurChar == '"')
119 var nNextQuote = strUserString.indexOf('"', count + 1);
120 if (nNextQuote >= 0)
122 strToken = strUserString.slice(count + 1, nNextQuote);
123 searchTokensArray[searchTokensArray.length] = strToken;
124 strToken = "";
125 count = nNextQuote;
128 else if (chCurChar == ' ')
130 if (strToken.length > 0)
132 searchTokensArray[searchTokensArray.length] = strToken;
135 strToken = "";
137 else
139 strToken += chCurChar;
143 if (strToken.length > 0)
145 searchTokensArray[searchTokensArray.length] = strToken;
148 return searchTokensArray;
151 function populateSearchResultDetails( divID, pageID, shapeID )
153 var tmpShape = FindShapeXML (pageID, shapeID);
154 var strOutput = CreatePropTable( tmpShape );
156 var tmpObj = document.all(divID);
157 if( tmpObj != null )
159 tmpObj.innerHTML = strOutput;
163 function makeAdvancedFindCheckboxes(div)
165 if (parent.xmlData)
167 var strOutput = "";
169 strOutput += "<INPUT type='checkbox' name='" + strShapeName + strChkBox + "' id='" + strShapeName + strChkBox + "' checked><label for='" + strShapeName + strChkBox + "'>" + strShapeName + "</label><br>\n";
170 strOutput += "<INPUT type='checkbox' name='" + strShapeText + strChkBox + "' id='" + strShapeText + strChkBox + "' checked><label for='" + strShapeText + strChkBox + "'>" + strShapeText + "</label><br>\n";
171 strOutput += "<INPUT type='checkbox' name='" + strProps + strChkBox + "' id='" + strProps + strChkBox + "' onclick='AdvSearchCustomPropCheck ()'checked ><label for='" + strProps + strChkBox + "'>" + strProps +"</label><br>\n";
172 strOutput += "<div id='divCPBoxes' style='margin-left:1em;'>";
174 var objNodes = parent.xmlData.selectNodes(".//Shape/Prop/Label");
175 var filter = "";
176 var boolFirstPass = true;
177 var tmpPropName;
178 while( objNodes.length > 0)
180 tmpPropName = objNodes.item( 0 ).text;
181 var escapedPropName = parent.EscapeString(tmpPropName);
182 if( true == boolFirstPass )
184 filter = ". != '" + escapedPropName + "'";
185 boolFirstPass = false;
187 else
189 filter += " and . != '" + escapedPropName + "'";
192 tmpPropName = parent.HTMLEscape (tmpPropName);
193 strOutput += "<INPUT type='checkbox' name='" + tmpPropName + strPropChkBox + "' id='"+ tmpPropName + strPropChkBox + "' checked><label for='"+ tmpPropName + strPropChkBox + "'>" + tmpPropName +"</label><br>\n";
195 objNodes = parent.xmlData.selectNodes(".//Shape/Prop/Label["+ filter + "]");
197 strOutput += "</div>"
198 div.innerHTML = strOutput;
202 function AdvSearchCustomPropCheck ()
204 for( count=0; count < document.theForm.length; count++ )
206 indexOfString = document.theForm[count].name.indexOf(strPropChkBox);
207 if( -1 != indexOfString )
209 document.theForm[count].disabled = !document.theForm[strProps + strChkBox].checked;
215 function CResultItem(title, pageID, shapeID, pinX, pinY)
217 this["Title"] = title;
218 this["PageID"] = pageID;
219 this["ShapeID"] = shapeID;
220 this["PinX"] = pinX;
221 this["PinY"] = pinY;
224 function FindParentPage(nodeObject)
226 if(nodeObject == null)
228 return null;
230 if(nodeObject.baseName == "Page")
231 return nodeObject;
232 else
233 return FindParentPage(nodeObject.parentNode);
236 function QueryStringForMatch(shapeNode, regTextForFind, filterString)
238 if (filterString.length > 0)
240 var nodesToCheck = shapeNode.selectNodes(filterString);
242 var nodeCount = nodesToCheck.length;
243 var stringToParse;
244 for(var ncount = 0; ncount < nodeCount; ncount++)
246 stringToParse = nodesToCheck.item(ncount).text;
247 stringToParse = stringToParse.toLowerCase ();
248 if(stringToParse.indexOf(regTextForFind) > -1)
250 return true;
256 function GetShapeTitle(shapeNode)
258 var objTempName = null;
259 var objTempTextElement = shapeNode.selectSingleNode("./Text");
260 if(objTempTextElement != null)
262 var objTextNode = objTempTextElement.selectSingleNode("textnode()");
263 if (objTextNode != null)
265 return parent.HTMLEscape (objTextNode.text);
269 objTempName = shapeNode.selectSingleNode("./@Name");
270 if(objTempName != null)
272 return parent.HTMLEscape (objTempName.text);
275 return "";
278 function GetPageTitle(pageID)
280 var pagesObj = parent.xmlData.selectSingleNode("VisioDocument/Pages");
281 if(!pagesObj)
283 return "";
286 var pageQuerryString = './/Page[@ID = "' + pageID + '"]';
287 var pageObj = pagesObj.selectSingleNode(pageQuerryString);
288 if(!pageObj)
290 return "";
293 var pageNameNode = pageObj.selectSingleNode("@Name");
294 if(!pageNameNode)
296 return "";
298 return pageNameNode.text;
301 function Find(searchTokensArray, propsToSearchArray)
303 var bXMLNotValid = false;
304 var findArray = new Array();
305 var findIndex = 0;
307 if (parent.xmlData != null && searchTokensArray.length > 0)
309 var fieldsToSearchArray = new Array();
310 var filterString = "";
311 if( null != propsToSearchArray &&
312 propsToSearchArray.length > 0 )
314 var propFilterString = "";
315 for( var count=0; count< propsToSearchArray.length; count++ )
317 if( count == 0 )
319 propFilterString = "[. = '" + parent.EscapeString (propsToSearchArray[count]) + "'";
321 else
323 propFilterString += " or . = '"+ parent.EscapeString (propsToSearchArray[count]) + "'";
326 propFilterString += "]";
328 fieldsToSearchArray[fieldsToSearchArray.length] = "Prop[Label"+ propFilterString +"]/Value";
331 if (document.theForm[strShapeText + strChkBox].checked)
333 fieldsToSearchArray[fieldsToSearchArray.length] = "Text";
336 if (fieldsToSearchArray.length > 0)
338 filterString = "(.//(";
340 for (var fieldCount = 0; fieldCount < fieldsToSearchArray.length; fieldCount++)
342 if (fieldCount != 0)
344 filterString += " | ";
347 filterString += fieldsToSearchArray[fieldCount];
350 filterString += ")/textnode())";
353 var objShapeNodes;
355 if (document.theForm[strShapeName + strChkBox].checked)
357 if (filterString.length > 0)
359 filterString += " | ";
361 filterString += "(@Name)";
363 var objShapeNodes = parent.xmlData.selectNodes(".//Shape");
365 else
367 var objShapeNodes = parent.xmlData.selectNodes(".//Shape[(Prop/Value | Prop/Label | Text)]");
370 var shapeCount = objShapeNodes.length;
371 var objTempData = new CResultItem("A Label","PageID","ShapeID","PinX","PinY");
372 var objTempShape = null;
374 for (count = 0; count < shapeCount; count++)
376 objTempShape = objShapeNodes.item(count);
378 var objParentPageNode = FindParentPage(objTempShape);
379 if (objParentPageNode == null)
381 continue;
384 var objPageIDNode = objParentPageNode.selectSingleNode("@ID/textnode()");
385 if(objPageIDNode == null)
387 continue;
389 var pageID = objPageIDNode.text;
391 var pageIndex = parent.PageIndexFromID (pageID);
392 if (pageIndex < 0)
394 continue;
397 var objLayerMember = objTempShape.selectSingleNode("LayerMem/LayerMember");
398 if (objLayerMember != null && objLayerMember.text.length > 0)
400 var layerArray = objLayerMember.text.split (';');
401 var visibleLayer = false;
402 for (var layerCount = 0; (layerCount < layerArray.length) && !visibleLayer; layerCount++)
404 var objLayerVisible = objParentPageNode.selectSingleNode("Layer[@IX=" + layerArray[layerCount] + "]/Visible");
405 if (objLayerVisible != null)
407 visibleLayer = (objLayerVisible.text != 0);
411 if (!visibleLayer)
413 continue;
417 for (var tokenCount = 0; tokenCount < searchTokensArray.length; tokenCount++)
419 var textToFind = searchTokensArray[tokenCount];
420 textToFind = textToFind.toLowerCase ();
422 if (QueryStringForMatch(objTempShape, textToFind, filterString))
424 objTempData.Title = GetShapeTitle(objTempShape);
425 objTempData.PageID = pageID;
427 objShapeIDNode = objTempShape.selectSingleNode("@ID/textnode()");
428 if(objShapeIDNode == null)
430 bXMLNotValid = true;
431 break;
433 objTempData.ShapeID = objShapeIDNode.text;
434 objPinXNode = objTempShape.selectSingleNode("XForm/PinX/textnode()");
435 if(objPinXNode == null)
437 bXMLNotValid = true;
438 break;
440 objTempData.PinX = objPinXNode.text;
441 objPinYNode = objTempShape.selectSingleNode("XForm/PinY/textnode()");
442 if(objPinYNode == null)
444 bXMLNotValid = true;
445 break;
447 objTempData.PinY = objPinYNode.text;
449 findArray[findIndex] = new CResultItem(objTempData.Title, objTempData.PageID, objTempData.ShapeID, objTempData.PinX, objTempData.PinY);
450 findIndex++;
451 break;
455 if(bXMLNotValid)
457 findArray.length = 0;
461 return findArray;
464 function FindQuerySelect(pageID, shapeID, pinX, pinY)
466 if (widgets.GoTo && (parent.g_FileList[document.all("Select1").value].PageID != pageID))
468 parent.g_callBackFunctionArray[parent.g_callBackFunctionArray.length] = function () { parent.viewMgr.put_Location (pageID, shapeID, pinX, pinY); };
469 parent.GoToPageByID(pageID);
471 else
473 if (parent.viewMgr != null)
475 parent.viewMgr.put_Location (pageID, shapeID, pinX, pinY);
480 function TreeSelect(pageID, shapeID)
482 var shapeNode = FindShapeXML (pageID, shapeID);
483 if (shapeNode != null)
485 var pinXNode = shapeNode.selectSingleNode("XForm/PinX/textnode()");
486 var pinYNode = shapeNode.selectSingleNode("XForm/PinY/textnode()");
488 if (pinXNode != null && pinYNode != null)
490 FindQuerySelect (pageID, shapeID, pinXNode.text, pinYNode.text);
496 var g_RowStyleList = parent.g_RowStyleList;
497 var FillPropPane = parent.FillPropPane;
498 var CreatePropTable = parent.CreatePropTable;
501 // SIG // Begin signature block
502 // SIG // MIIXNAYJKoZIhvcNAQcCoIIXJTCCFyECAQExCzAJBgUr
503 // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
504 // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
505 // SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFAaJ0KyTu99e
506 // SIG // uEaVCk9qqbqX4zjaoIISMTCCBGAwggNMoAMCAQICCi6r
507 // SIG // EdxQ/1ydy8AwCQYFKw4DAh0FADBwMSswKQYDVQQLEyJD
508 // SIG // b3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAu
509 // SIG // MR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
510 // SIG // ITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0
511 // SIG // eTAeFw0wNzA4MjIyMjMxMDJaFw0xMjA4MjUwNzAwMDBa
512 // SIG // MHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
513 // SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
514 // SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p
515 // SIG // Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBMIIBIjANBgkq
516 // SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3l91l2zRTmo
517 // SIG // NKwx2vklNUl3wPsfnsdFce/RRujUjMNrTFJi9JkCw03Y
518 // SIG // SWwvJD5lv84jtwtIt3913UW9qo8OUMUlK/Kg5w0jH9FB
519 // SIG // JPpimc8ZRaWTSh+ZzbMvIsNKLXxv2RUeO4w5EDndvSn0
520 // SIG // ZjstATL//idIprVsAYec+7qyY3+C+VyggYSFjrDyuJSj
521 // SIG // zzimUIUXJ4dO3TD2AD30xvk9gb6G7Ww5py409rQurwp9
522 // SIG // YpF4ZpyYcw2Gr/LE8yC5TxKNY8ss2TJFGe67SpY7UFMY
523 // SIG // zmZReaqth8hWPp+CUIhuBbE1wXskvVJmPZlOzCt+M26E
524 // SIG // RwbRntBKhgJuhgCkwIffUwIDAQABo4H6MIH3MBMGA1Ud
525 // SIG // JQQMMAoGCCsGAQUFBwMDMIGiBgNVHQEEgZowgZeAEFvQ
526 // SIG // cO9pcp4jUX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5
527 // SIG // cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4w
528 // SIG // HAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
529 // SIG // BgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIP
530 // SIG // AMEAizw8iBHRPvZj7N9AMA8GA1UdEwEB/wQFMAMBAf8w
531 // SIG // HQYDVR0OBBYEFMwdznYAcFuv8drETppRRC6jRGPwMAsG
532 // SIG // A1UdDwQEAwIBhjAJBgUrDgMCHQUAA4IBAQB7q65+Siby
533 // SIG // zrxOdKJYJ3QqdbOG/atMlHgATenK6xjcacUOonzzAkPG
534 // SIG // yofM+FPMwp+9Vm/wY0SpRADulsia1Ry4C58ZDZTX2h6t
535 // SIG // KX3v7aZzrI/eOY49mGq8OG3SiK8j/d/p1mkJkYi9/uEA
536 // SIG // uzTz93z5EBIuBesplpNCayhxtziP4AcNyV1ozb2AQWtm
537 // SIG // qLu3u440yvIDEHx69dLgQt97/uHhrP7239UNs3DWkuNP
538 // SIG // tjiifC3UPds0C2I3Ap+BaiOJ9lxjj7BauznXYIxVhBoz
539 // SIG // 9TuYoIIMol+Lsyy3oaXLq9ogtr8wGYUgFA0qvFL0QeBe
540 // SIG // MOOSKGmHwXDi86erzoBCcnYOMIIEejCCA2KgAwIBAgIK
541 // SIG // YQHPPgAAAAAADzANBgkqhkiG9w0BAQUFADB5MQswCQYD
542 // SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
543 // SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
544 // SIG // IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQg
545 // SIG // Q29kZSBTaWduaW5nIFBDQTAeFw0wOTEyMDcyMjQwMjla
546 // SIG // Fw0xMTAzMDcyMjQwMjlaMIGDMQswCQYDVQQGEwJVUzET
547 // SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
548 // SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
549 // SIG // aW9uMQ0wCwYDVQQLEwRNT1BSMR4wHAYDVQQDExVNaWNy
550 // SIG // b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEB
551 // SIG // AQUAA4IBDwAwggEKAoIBAQC9MIn7RXKoU2ueiU8AI8C+
552 // SIG // 1B09sVlAOPNzkYIm5pYSAFPZHIIOPM4du733Qo2X1Pw4
553 // SIG // GuS5+ePs02EDv6DT1nVNXEap7V7w0uJpWxpz6rMcjQTN
554 // SIG // KUSgZFkvHphdbserGDmCZcSnvKt1iBnqh5cUJrN/Jnak
555 // SIG // 1Dg5hOOzJtUY+Svp0skWWlQh8peNh4Yp/vRJLOaL+AQ/
556 // SIG // fc3NlpKGDXED4tD+DEI1/9e4P92ORQp99tdLrVvwdnId
557 // SIG // dyN9iTXEHF2yUANLR20Hp1WImAaApoGtVE7Ygdb6v0LA
558 // SIG // Mb5VDZnVU0kSMOvlpYh8XsR6WhSHCLQ3aaDrMiSMCOv5
559 // SIG // 1BS64PzN6qQVAgMBAAGjgfgwgfUwEwYDVR0lBAwwCgYI
560 // SIG // KwYBBQUHAwMwHQYDVR0OBBYEFDh4BXPIGzKbX5KGVa+J
561 // SIG // usaZsXSOMA4GA1UdDwEB/wQEAwIHgDAfBgNVHSMEGDAW
562 // SIG // gBTMHc52AHBbr/HaxE6aUUQuo0Rj8DBEBgNVHR8EPTA7
563 // SIG // MDmgN6A1hjNodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v
564 // SIG // cGtpL2NybC9wcm9kdWN0cy9DU1BDQS5jcmwwSAYIKwYB
565 // SIG // BQUHAQEEPDA6MDgGCCsGAQUFBzAChixodHRwOi8vd3d3
566 // SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL0NTUENBLmNy
567 // SIG // dDANBgkqhkiG9w0BAQUFAAOCAQEAKAODqxMN8f4Rb0J2
568 // SIG // 2EOruMZC+iRlNK51sHEwjpa2g/py5P7NN+c6cJhRIA66
569 // SIG // cbTJ9NXkiugocHPV7eHCe+7xVjRagILrENdyA+oSTuzd
570 // SIG // DYx7RE8MYXX9bpwH3c4rWhgNObBg/dr/BKoCo9j6jqO7
571 // SIG // vcFqVDsxX+QsbsvxTSoc8h52e4avxofWsSrtrMwOwOSf
572 // SIG // f+jP6IRyVIIYbirInpW0Gh7Bb5PbYqbBS2utye09kuOy
573 // SIG // L6t6dzlnagB7gp0DEN5jlUkmQt6VIsGHC9AUo1/cczJy
574 // SIG // Nh7/yCnFJFJPZkjJHR2pxSY5aVBOp+zCBmwuchvxIdpt
575 // SIG // JEiAgRVAfJ/MdDhKTzCCBJ0wggOFoAMCAQICEGoLmU/A
576 // SIG // ACWrEdtFH1h6Z6IwDQYJKoZIhvcNAQEFBQAwcDErMCkG
577 // SIG // A1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29m
578 // SIG // dCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENvcnBv
579 // SIG // cmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9vdCBB
580 // SIG // dXRob3JpdHkwHhcNMDYwOTE2MDEwNDQ3WhcNMTkwOTE1
581 // SIG // MDcwMDAwWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
582 // SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
583 // SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYD
584 // SIG // VQQDExpNaWNyb3NvZnQgVGltZXN0YW1waW5nIFBDQTCC
585 // SIG // ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANw3
586 // SIG // bvuvyEJKcRjIzkg+U8D6qxS6LDK7Ek9SyIPtPjPZSTGS
587 // SIG // KLaRZOAfUIS6wkvRfwX473W+i8eo1a5pcGZ4J2botrfv
588 // SIG // hbnN7qr9EqQLWSIpL89A2VYEG3a1bWRtSlTb3fHev5+D
589 // SIG // x4Dff0wCN5T1wJ4IVh5oR83ZwHZcL322JQS0VltqHGP/
590 // SIG // gHw87tUEJU05d3QHXcJc2IY3LHXJDuoeOQl8dv6dbG56
591 // SIG // 4Ow+j5eecQ5fKk8YYmAyntKDTisiXGhFi94vhBBQsvm1
592 // SIG // Go1s7iWbE/jLENeFDvSCdnM2xpV6osxgBuwFsIYzt/iU
593 // SIG // W4RBhFiFlG6wHyxIzG+cQ+Bq6H8mjmsCAwEAAaOCASgw
594 // SIG // ggEkMBMGA1UdJQQMMAoGCCsGAQUFBwMIMIGiBgNVHQEE
595 // SIG // gZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSswKQYD
596 // SIG // VQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0
597 // SIG // IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9y
598 // SIG // YXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1
599 // SIG // dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMBAGCSsGAQQB
600 // SIG // gjcVAQQDAgEAMB0GA1UdDgQWBBRv6E4/l7k0q0uGj7yc
601 // SIG // 6qw7QUPG0DAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA
602 // SIG // QTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAN
603 // SIG // BgkqhkiG9w0BAQUFAAOCAQEAlE0RMcJ8ULsRjqFhBwEO
604 // SIG // jHBFje9zVL0/CQUt/7hRU4Uc7TmRt6NWC96Mtjsb0fus
605 // SIG // p8m3sVEhG28IaX5rA6IiRu1stG18IrhG04TzjQ++B4o2
606 // SIG // wet+6XBdRZ+S0szO3Y7A4b8qzXzsya4y1Ye5y2PENtEY
607 // SIG // Ib923juasxtzniGI2LS0ElSM9JzCZUqaKCacYIoPO8cT
608 // SIG // ZXhIu8+tgzpPsGJY3jDp6Tkd44ny2jmB+RMhjGSAYwYE
609 // SIG // lvKaAkMve0aIuv8C2WX5St7aA3STswVuDMyd3ChhfEjx
610 // SIG // F5wRITgCHIesBsWWMrjlQMZTPb2pid7oZjeN9CKWnMyw
611 // SIG // d1RROtZyRLIj9jCCBKowggOSoAMCAQICCmEGlC0AAAAA
612 // SIG // AAkwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMCVVMx
613 // SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
614 // SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
615 // SIG // dGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IFRpbWVzdGFt
616 // SIG // cGluZyBQQ0EwHhcNMDgwNzI1MTkwMjE3WhcNMTMwNzI1
617 // SIG // MTkxMjE3WjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgT
618 // SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
619 // SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjENMAsG
620 // SIG // A1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0Ug
621 // SIG // RVNOOjdBODItNjg4QS05RjkyMSUwIwYDVQQDExxNaWNy
622 // SIG // b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjANBgkq
623 // SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlYEKIEIYUXrZ
624 // SIG // le2b/dyH0fsOjxPqqjcoEnb+TVCrdpcqk0fgqVZpAuWU
625 // SIG // fk2F239x73UA27tDbPtvrHHwK9F8ks6UF52hxbr5937d
626 // SIG // YeEtMB6cJi12P+ZGlo6u2Ik32Mzv889bw/xo4PJkj5vo
627 // SIG // wxL5o76E/NaLzgU9vQF2UCcD+IS3FoaNYL5dKSw8z6X9
628 // SIG // mFo1HU8WwDjYHmE/PTazVhQVd5U7EPoAsJPiXTerJ7tj
629 // SIG // LEgUgVXjbOqpK5WNiA5+owCldyQHmCpwA7gqJJCa3sWi
630 // SIG // Iku/TFkGd1RyQ7A+ZN2ThAhYtv7ph0kJNrOz+DOpfkyi
631 // SIG // eX8yWSkOnrX14DyeP+xGOwIDAQABo4H4MIH1MB0GA1Ud
632 // SIG // DgQWBBQolYi/Ajvr2pS6fUYP+sv0fp3/0TAfBgNVHSME
633 // SIG // GDAWgBRv6E4/l7k0q0uGj7yc6qw7QUPG0DBEBgNVHR8E
634 // SIG // PTA7MDmgN6A1hjNodHRwOi8vY3JsLm1pY3Jvc29mdC5j
635 // SIG // b20vcGtpL2NybC9wcm9kdWN0cy90c3BjYS5jcmwwSAYI
636 // SIG // KwYBBQUHAQEEPDA6MDgGCCsGAQUFBzAChixodHRwOi8v
637 // SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL3RzcGNh
638 // SIG // LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDAOBgNVHQ8B
639 // SIG // Af8EBAMCBsAwDQYJKoZIhvcNAQEFBQADggEBAADurPzi
640 // SIG // 0ohmyinjWrnNAIJ+F1zFJFkSu6j3a9eH/o3LtXYfGyL2
641 // SIG // 9+HKtLlBARo3rUg3lnD6zDOnKIy4C7Z0Eyi3s3XhKgni
642 // SIG // i0/fmD+XtzQSgeoQ3R3cumTPTlA7TIr9Gd0lrtWWh+pL
643 // SIG // xOXw+UEXXQHrV4h9dnrlb/6HIKyTnIyav18aoBUwJOCi
644 // SIG // fmGRHSkpw0mQOkODie7e1YPdTyw1O+dBQQGqAAwL8tZJ
645 // SIG // G85CjXuw8y2NXSnhvo1/kRV2tGD7FCeqbxJjQihYOoo7
646 // SIG // i0Dkt8XMklccRlZrj8uSTVYFAMr4MEBFTt8ZiL31EPDd
647 // SIG // Gt8oHrRR8nfgJuO7CYES3B460EUxggRvMIIEawIBATCB
648 // SIG // hzB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
649 // SIG // Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
650 // SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMSMwIQYDVQQDExpN
651 // SIG // aWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIKYQHPPgAA
652 // SIG // AAAADzAJBgUrDgMCGgUAoIGaMBkGCSqGSIb3DQEJAzEM
653 // SIG // BgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor
654 // SIG // BgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTZReX2O+Gl
655 // SIG // UbtFJX7AkZYRAHjMFzA6BgorBgEEAYI3AgEMMSwwKqAQ
656 // SIG // gA4AZgBpAG4AZAAuAGoAc6EWgBRodHRwOi8vbWljcm9z
657 // SIG // b2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAQCDDNOPpe4F
658 // SIG // LmFTkErohx8HED4T8BBnEZ17FnhxN5Pjm6RUqL37D4a6
659 // SIG // 7cOlMl3SS91zIQxy6kb5/s7vKdiBcHCzf+k3pplmuySY
660 // SIG // XSKYIoQ2OG3B6yAo6F/488DVcoEZ+K1UmGgu94IEn5Rn
661 // SIG // OrjoiqtEHBbe/OACk+VkyhmdJpwD1ayIGjvFTzUIsJ04
662 // SIG // SmStmHMaKVzSIJmCYOHoXl4DEOcK5gfA38uJuO2U4F7I
663 // SIG // SKoJDWHnM0PZlXtx5iutQF4yda1KcidbGhsPUTZE6qi5
664 // SIG // KvLh5xR50k0ue8WM90h0dNl6xnj3IW2VuvfAnImrMWWb
665 // SIG // NvhXhq4r12/JtIBjKHt4uqaaoYICHzCCAhsGCSqGSIb3
666 // SIG // DQEJBjGCAgwwggIIAgEBMIGHMHkxCzAJBgNVBAYTAlVT
667 // SIG // MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
668 // SIG // ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
669 // SIG // YXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUaW1lc3Rh
670 // SIG // bXBpbmcgUENBAgphBpQtAAAAAAAJMAcGBSsOAwIaoF0w
671 // SIG // GAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG
672 // SIG // 9w0BCQUxDxcNMTEwMjIwMTkyNTMxWjAjBgkqhkiG9w0B
673 // SIG // CQQxFgQUycY99uXUQbotP1V5Dp08Fyyn4j8wDQYJKoZI
674 // SIG // hvcNAQEFBQAEggEAjwIOdRp9UuBGeDQ+ZjqfOMi20OTG
675 // SIG // 3otsaJbi7Bs5UxoNBXc2eOU4Rbi8uNgt6atTrBMEG76y
676 // SIG // k7qqwDiL+dRoy1nZiWK9LYz5/OvH2paW3UKKnyquEJDX
677 // SIG // D/J3fuDfh3zoYBHgRcjGkY7jSyHnMQT5OjInRXFt0ydi
678 // SIG // SDX5zQ6Sp1Jt6HNDgGBnzp2PkbvpGF/EyuchgGn863Kh
679 // SIG // +PPGnMBHdigkKLYghO+iVrNPnCX7qPOurJQpskaCvqEY
680 // SIG // D3QhrF0LHCWZDamBehRVjz3Lx6YIii9IsQg9x33XAKHQ
681 // SIG // vlAljpqQNIll6SwaOwQbYLHlb/2HpVRM20n7ja8kPywr
682 // SIG // mEfmVg==
683 // SIG // End signature block