Office アドイン

[Officeアドイン]Word JavaScript APIの機能紹介

Office Dev Center – Changelogを見ると分かりますが、Office アドインのAPIは日々進化しています。
今回はWord JavaScript APIでどのようなことができるのか、その機能の一部を紹介したいと思います。

マニフェストファイル

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
  <Id>2121d625-c3d7-4ec6-b21f-d07845c2835c</Id>
  <Version>1.0</Version>
  <ProviderName>@kinuasa</ProviderName>
  <DefaultLocale>ja-jp</DefaultLocale>
  <DisplayName DefaultValue="Sample Add-in" />
  <Description DefaultValue="Sample Word Api Add-in"/>
  <Hosts>
    <Host Name="Document" />
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost/wordapi/index.html" />
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>Word Api Sample</title>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.3.min.js"></script>
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
    <script src="./script.js"></script>
  </head>
  <body>
    <h4>Word Api Sample</h4>
    <p>
      <input id="btnSearch" type="button" value="文字列検索">
      <input id="btnInsertParagraph" type="button" value="段落挿入">
      <input id="btnInsertContentControl" type="button" value="コンテンツコントロール挿入">
      <input id="btnInsertHtml" type="button" value="HTML挿入">
      <input id="btnInsertFile" type="button" value="Word文書を末尾に挿入">
      <input id="btnInsertInlinePicture" type="button" value="画像挿入">
      <input id="btnSave" type="button" value="文書保存">
    </p>
  </body>
</html>

script.js

/*
 * Word APIサンプル
 *
 * Document オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598679.aspx
 * Range オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt616492.aspx
 */

Office.initialize = function(reason){}

$(function(){
  $("#btnSearch").click(function(){
    fncSearch();
  });
  $("#btnInsertParagraph").click(function(){
    fncInsertParagraph();
  });
  $("#btnInsertContentControl").click(function(){
    fncInsertContentControl();
  });
  $("#btnInsertHtml").click(function(){
    fncInsertHtml();
  });
  $("#btnInsertFile").click(function(){
    fncInsertFile();
  });
  $("#btnInsertInlinePicture").click(function(){
    fncInsertInlinePicture();
  });
  $("#btnSave").click(function(){
    fncSave();
  });
});

//文書保存
function fncSave(){
  Word.run(function(context){
    context.document.save();
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

/*
 * 文字列検索
 * SearchOptions オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598683.aspx
 * SearchResultCollection オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598685.aspx
 */
function fncSearch(){
  Word.run(function(context){
    var results = context.document.body.search("[0-9]{3,}", {matchWildCards:true});
    context.load(results);
    return context.sync()
    .then(function(){
      for(var i = 0; i < results.items.length; i++){
        //ヒットした文字列を装飾
        results.items[i].font.color = "#FF0000"; //文字色
        results.items[i].font.highlightColor = "#FFFF00"; //ハイライト
        results.items[i].font.bold = true; //太字
        results.items[i].font.italic = true; //斜体
        if(i == results.items.length - 1){
          results.items[i].select();
        }
      }
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

/*
 * 段落挿入
 * Paragraphオブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598682.aspx
 */
function fncInsertParagraph(){
  Word.run(function(context){
    var range = context.document.getSelection();
    var p = range.insertParagraph("こんにちは。今日はとても良い天気です。", Word.InsertLocation.after);
    p.font.color = "#FF0000";
    p.alignment = "centered"; //中央揃え
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

/*
 * コンテンツコントロール挿入
 * ContentControl オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598675.aspx
 */
function fncInsertContentControl(){
  Word.run(function(context){
    var cc = context.document.getSelection().insertContentControl();
    cc.tag = "Address";
    cc.title = "住所を入力してください:";
    cc.style = "強調太字"; //ユーザー定義のスタイル名
    cc.insertText("沖縄県那覇市首里金城町1丁目2", Word.InsertLocation.replace);
    cc.cannotEdit = true; //編集可能かどうか
    cc.appearance = "boundingBox"; //外観
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

//HTML挿入
function fncInsertHtml(){
  Word.run(function(context){
    var range = context.document.getSelection();
    range.insertHtml("<h1>Hello world.</h1>", Word.InsertLocation.start);
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

//Word文書を末尾に挿入
function fncInsertFile(){
  Word.run(function(context){
    context.document.body.insertFileFromBase64(getDocumentAsBase64(), Word.InsertLocation.end);
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

/*
 * 画像挿入
 * InlinePicture オブジェクト (JavaScript API for Word)
 * https://msdn.microsoft.com/ja-jp/library/mt598676.aspx
 */
function fncInsertInlinePicture(){
  Word.run(function(context){
    var range = context.document.getSelection();
    range.insertInlinePictureFromBase64(getImageAsBase64(), Word.InsertLocation.replace);
    return context.sync()
    .then(function(){
      console.log("Success");
    })
    .catch(function(error){
      console.log("Error:" + JSON.stringify(error));
    });
  });
}

//PNG画像をBase64文字列として取得
function getImageAsBase64(){
  //png : https://www.smashingmagazine.com/2015/01/freebie-dashel-icon-set-svg-psd-png/
  var ret = "iVBORw0KGgoAAAANSUhEUgAAAHAAAABaCAYAAABg19IbAAAAAXNSR0IArs4c6QAACJ1JREFUeAHt";
  ret += "XV9oHEUYn71cYu1dD6xtY4OHUGNEK6lVkYqvIlaNUBCE1mcpiIhPxYL0QVB8Uh8s9VmbVhBLE6zg";
  ret += "o2DVoq0NtWJNfTlNTZUWLpcYmmTP79vLd9md250/u3t7c5cZmOx8szPffPP99nff7sztxWGtaRiq";
  ret += "DkDeA7kMuR+yTZ3zwBIMXYH8PeTjkKchN5PTLDWAOgTyfsh9vnpbNMcDK2DKOOT3ICOwjABEln0M";
  ret += "+UmstMl4D5wFC1+BvERMOwzC88abbQ0kD2Bo2wT5G2QgxrwJyAQmK5VK148dO8bGxsZGi8ViCc7Z";
  ret += "1CEP1Gq16uTk5NTBgwdZtVrd5jMDP05fQACPQMa45yUEr1KpjMLRAkdOMeAI4FXL5fIUB+J4DmzD";
  ret += "u81mAublLHhNdxhTQEyOHj1a5wzagwy8BLn5qDA3N7cFPjY3cw2taIAH5iEBNn/5TFnKg9AED0/w";
  ret += "4EEfNjs76/UZHBxkhULBK+vWe53sn0QeAN83nL+mpR8/QoUJwVteXvYyAYkddOuFg9iTsT0gBTC2";
  ret += "ZtsxEw9IAcSPzXw+72UsU9Ktp372mK4H8CbmN7/Ker0+4pdt2SwPOI5zxW+RlIH+xrZsngcsgOZh";
  ret += "omWRBVDLXeY1bomB5ploLRJ5wDJQ5J0uOGcB7AKQRCZaAEXe6YJzuBYaSFk9B/LPMzTuzMyMZ8/Q";
  ret += "0JB3vHKl8dgzMmIfT9EhvN8sA73LpHv/tDCwU1PhmUdyp+zplnEtA7sFqQg7pQy8+epLEV31qu/4";
  ret += "6DNhB4p5xDySKQYKO6/jk5aBXQ6+lIEy5qQ1f555JKelv1f1WAZ2ObJSBr576o9YU3xz3w6tfhTz";
  ret += "iHkk2xgodqNloNg/xp+VMlCXSXFnzDOP5Lj61ks/y8AuR1rKwMXLz6UyxQ0PfinUQzGPmEeyjYFC";
  ret += "tzHLQLF/jD8rZaCMOWnNkGceyWnp71U9loFdjqyUgUljoCqDKeYR80g2MQa6tR/Z0syHHvT9Q6+z";
  ret += "XPGxjl0GloHarq8DeB+w+vINLxOQ2mpS6iBloCqDktrDM4/kpHrT7u8uXgXgbvrUur5y9kXLQE2f";
  ret += "u7WfAz1yG3cG5KwFKQNVYmAaLKWYR8wj2bQY6M5fCGCUKzwckLMWpABmbVBW403/vcC+uvCPN9yz";
  ret += "j2xl9w5ulA9dv8XchcuBdrnC7oB8dXaBnTnf0Lt391Y2fJeC3oAGPUEKYBrsUjGJZx7JKn112/x+";
  ret += "bYGdOjfLVtzGK+fo8Nf23iNV44EHIFJy+geZM7CdRO+IumqL+AMSjH3xwyzb9/ggu297+0BcdzGQ";
  ret += "Bw8dnXPwDQN5cmvnA41kH594geCFgmO2K0kZ+M7nbyQa+/CL7yv1p5hHzCM5zRgYBh5i99TonUo2";
  ret += "uvPcDUwx+PGJSp7etcUDrb76exIEYruYuG4YGAXe2KPb2P1DBSmA9ZUqcxf9m9sOyxV2tfRDXajT";
  ret += "T2oCsR1MlDJQlUEtM9Gs4JlHsqaa0OYi8HaWi6F9+Ep3/iJUrf1MS27DDub0hf8WEumc/Ok6azcT";
  ret += "e56BaYCHYOo+PiCIWTBRykDV78Qk3bmnmEfMIzlJDEwLPA9A/gE+JP5hO3/Kgok9y8A0wavfusbq";
  ret += "S40fO/IAcgaY6gpMu5koZWBSZvmvSFGZZx7Joj5R59IED8doufvc+AC8JjQQNXxLfTuZ2HMMxBUW";
  ret += "/0M6ehPvCDEekSNbPCyp0I1/YepETESb4yYpA1VjoMwAGZMp5hHzSNaNgbg8RissaFNS8PDO052f";
  ret += "CkyPXz4LnBQIdAHxd6dos8pKUJjqnmMgP0lcZRnIx5+m+980q6/MNdU6fZtY7vbhpqxbQFv4lR9e";
  ret += "1tEpZaCMOTqDidryzCNZ1CfsXNorIa0fn6MwrNrSG29fVGxWXQni9aEc/9IM02ZAXdorIS03MNzu";
  ret += "g+qUo8BTXQmKGkfKQN33A+O+zUQxj5hHsm4MxIlGxRq8udFak/S2j34N+E62gB1ovCqIwCNbw/qp";
  ret += "1PUcA2nSors+dKhKchd+gXsY8faRTE87wcOxpQyMyyjZxPjzPPNI5tvpyHR183d9qkx0a9zue1Fv";
  ret += "973d4KEvepaBBHQSJiaJf1mAh3OUMjDufqDuLgbFPGIeyXFiIIFHxzhMVN0+ojH8x6zAwzF7noHk";
  ret += "WBETw1ZCdLaPaAw8tmMlyK+fL0sZqMskfgBVmWceyar9VdpFMTFsJaT1+U8t/qW/EiSe2bphILkh";
  ret += "jIlhKyEt3/9U2D6iMeiYfBmPNEUfpQyM7pruGYp5xDyS04iBvKUIYr7PYV9f/Ndb1npm95ZAkyTb";
  ret += "R/gVRfxmGl4UuMKi8nWNwOCagjEAatqduDk6Nsq5LXefGttH+P3SuAvTcSZlDIA880iOM6mkfeLG";
  ret += "v6Tjxum/7mKgipPS2j5SGStpG2MYSDGPmEdyO2Kg1GnO2r+TcvKbE20fScdK2MAyMMSB+NImAuf0";
  ret += "b2VYjrt9FKI69SpjGMgzj+TUZ6ygEN+4vW3kE4WWnW9iGdh5DBJZYAwDKeYR80juSAxM5NJsO1sG";
  ret += "Zuvv1EczhoE880hOfcY9ptAysMsBNYaBFPOIeSTbGCi+wiwDxf4x/qwxDOSZR7LxHuywgZaBHQYg";
  ret += "6fDGMJBiHjGPZBsDxRBbBor9Y/xZZOAS5Obye61Wu1EsFjdnbTnPPJKztsPk8QCbm5x9C8jAP/2V";
  ret += "p0+fvuSXbdkcD0xMTMBXxQNpBl+zOQJ5P1WXSqXrlUplFI7hP8FADRMe+f+DZ/9/oNihVUjlcnkK";
  ret += "Dtt8LceRgcchN34bCgrYABuePHnyW6Ds2otxvl62mJ0HEIMTJ06cDQEPMTtOL7q9BcLL2ZllR0rB";
  ret += "A5+Cjrf7VhV9B0f85mp5VbYHsz1wFsw7BNklAPFnZ89A3gT5Icj28QKcYGDCj81xyAgePj2Evis8";
  ret += "DPUHID8B+W7IzUcMKNuUvQfwZcYZyOcg4/3KNORm+h9Le8yKTAmQiQAAAABJRU5ErkJggg==";
  return ret;
}

//Word文書をBase64文字列として取得
function getDocumentAsBase64(){
  var ret = "UEsDBBQABgAIAAAAIQBncygvlwEAACgJAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE";
  ret += "lstqwzAQRfeF/oPRtthKUiilxMmij2UbaPoBijSOTW1JSJPX33ccO6GUJDZNTDYGeWbuuTMylobj";
  ret += "dZEHS3A+Mzpm/ajHAtDSqEzPY/Y1fQsfWeBRaCVyoyFmG/BsPLq9GU43FnxA1drHLEW0T5x7mUIh";
  ret += "fGQsaIokxhUCaenm3Ar5LebAB73eA5dGI2gMsdRgo+ELJGKRY/C6pteVEwe5Z8FzlViyYiaszTMp";
  ret += "kOJ8qdUfSlgTIqrc5vg0s/6OEhg/SCgjxwF13QeNxmUKgolw+C4KyuIr4xRXRi4KqoxOyxzwaZIk";
  ret += "k7CvL9WsMxK8p5kXebSPFCLTO/9HfXjc5OAv76LSbcYDIhV0YaBWbrSwgtlnZy5+iTcaSYxBbbCL";
  ret += "3dhLN5oArTrysFNutJCCUOD6l3dQCbfkD67GLzerk/4r4Zb8Dvpvya/GdH/l+XfAbz1/4olZDl04";
  ret += "qKUbTSCdxFA9z/8StzKnkJQ5ccZ6OtndP9reHd1ldUgNW3CYnf7T7IkkfXZ/UN4KFKgDbL6954x+";
  ret += "AAAA//8DAFBLAwQUAAYACAAAACEAHpEat+8AAABOAgAACwAIAl9yZWxzLy5yZWxzIKIEAiigAAIA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyS";
  ret += "wWrDMAxA74P9g9G9UdrBGKNOL2PQ2xjZBwhbSUwT29hq1/79PNjYAl3pYUfL0tOT0HpznEZ14JRd";
  ret += "8BqWVQ2KvQnW+V7DW/u8eACVhbylMXjWcOIMm+b2Zv3KI0kpyoOLWRWKzxoGkfiImM3AE+UqRPbl";
  ret += "pwtpIinP1GMks6OecVXX95h+M6CZMdXWakhbeweqPUW+hh26zhl+CmY/sZczLZCPwt6yXcRU6pO4";
  ret += "Mo1qKfUsGmwwLyWckWKsChrwvNHqeqO/p8WJhSwJoQmJL/t8ZlwSWv7niuYZPzbvIVm0X+FvG5xd";
  ret += "QfMBAAD//wMAUEsDBBQABgAIAAAAIQDFqrKbQAEAAD0HAAAcAAgBd29yZC9fcmVscy9kb2N1bWVu";
  ret += "dC54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALSVy26DMBBF95X6";
  ret += "D8j7YiBt+lBMNlWlbFv6AQ4eHirYyJ4++PtaQSGkRVYWZjkXee5h7mA225+2Cb5Am1pJRuIwIgHI";
  ret += "XIlaloy8Zy83DyQwyKXgjZLASA+GbNPrq80rNBztIVPVnQlsF2kYqRC7J0pNXkHLTag6kPZJoXTL";
  ret += "0Za6pB3PP3gJNImiNdXTHiQ96xnsBCN6J6x/1ndwSW9VFHUOzyr/bEHijAUtlELQtiPXJSAjQx2H";
  ret += "thGh8/7xyicA2rNw8j+Ug+iE8MrwDfs3QLQJmxPJRHSB3PsEqYCLaRpDnTjTSPyug8SM75tJIqPk";
  ret += "ovAKYf5lcVScg/CKgH0DU4BD7bJfL78H7q/S6/vPXwsrF8CdT3+QQlrHSQJHxTmDaPkQnDO49Z3B";
  ret += "nyGMkgvicflFGG8kevbTS38BAAD//wMAUEsDBBQABgAIAAAAIQA9daQx7gYAAOIVAAARAAAAd29y";
  ret += "ZC9kb2N1bWVudC54bWzsWFtT20YUfu9M/4NH74ltbgVPTCZpSiYPnWFCO33IdDpClm0NtuSRBA59";
  ret += "siQw14QUyiXBCYT7pRiaQIJTiH/MItn8i56zknwBQ01oZjrT5CGWds9+55z9vnN2xa3bj+MxTx8v";
  ret += "K4IkBhn/TR/j4UVOCgliJMj8+EPHjVbGo6isGGJjksgHmX5eYW63f/3VrWQgJHG9cV5UPQAhKoFk";
  ret += "ggsyUVVNBLxehYvycVa5GRc4WVKksHqTk+JeKRwWON6blOSQt8Hn99GnhCxxvKKAv29ZsY9VGAeO";
  ret += "e1wfWkhmk7AYAZu8XJSVVf5xGcN/ZZBmb5u39TxQwycAQYYN/rNQ8fO7JCV4ESbDkhxnVXiVI944";
  ret += "K/f0Jm4AcoJVhW4hJqj9AOprcWGkINMriwEH4kYpGFwSsINxftwVcj1+7SX3HGapR6/MxyAGSVSi";
  ret += "QqJET/xT0WAy6oL0XZZEXzzm2iUT/qbraeuezUsZsJ7wHTLjMTvyyxH9vjoYQYjSinpCqPbpRhJn";
  ret += "BbHs+JO2pmJz/c1XA2g4B9Ci8FeDaHYgvEp/vFwayUTkeizfl6XeRBlNuB7aA7GnhIWt7wpYjloq";
  ret += "FaxcL5iuKJuAUo5zgQcRUZLZ7hhEBNx7gD4PZcCDVcK0Q2PulkL9+JvwJAPQ2EMPg4zP19HS2NTQ";
  ret += "yLhDnXKNwXt8mO2NqRUzFKZTxh/Z+emQRFWBFVFBBEueVdQ7isAyXpzkpJgkw1wfGwsyHR0++IcT";
  ret += "Xme1twTWLUk92OO6VGiOsEAIgVOMQ2TjkNgv96W7LNdjgyLg+Zj/pZCSAbWdGFPEGCL6FtEnT47z";
  ret += "REsTbYOktJOjl0QbJtoC0QbM9KCZzYGBNfe0sPSBaNvF1xuFiY9EWyfaE6LBw3OS0h8hivGWGJtE";
  ret += "X4EHTwn7Zw8sJvouMcDAwAdYoI/Znor5Y3N0kWiztrPKgGCWaC+JPg4uzXyGaHNgYy6MEV0rfjwi";
  ret += "Wp7o4O6IGCNEy5rHS+bRBMRUfHNE9NGTv8D4NydE8KUP09y2iQbIo6Wgib5DEXYdHH3SHFw1R+dp";
  ret += "PGsQgDUzZM0fwkIrkzrVNnF5ZYTVKYM7ayVT2F9yE5zCHHX9zE4hA6rNgy2M/7hiP7sKf4J698Ae";
  ret += "F37fsAaAw2nK+RrKAXbRmEPVGCmkCBRhTFMR5e1XlOL+czqeRjL1HDGGQXoZR2l6zkPZeucwpE8W";
  ret += "DgZAOuazYaKDq/mSEIkxS4wdUJKrlS2Xtj1aCllHClgoGWv42RlSqXw3qOUeFtBhqji0b+ugIsbq";
  ret += "VPQDGtUIMZ7hiD7pFkN1YVnjeVBljSqiGtVA3CMVpfKK/g9ZZImxjNJEe6iW9cJ8tvACcs8W17TC";
  ret += "/iKgnWqQzhR1B1uxiBsPW/5FoDXaZJo2iFe0nnOoPiRu2+2ay5XNwhzcODmGXc0WDv4EGVgDC9hW";
  ret += "hj4gmxd0hEeVGq1FtDWzR+keKEdi06e9s9VrzoO2oVz2KOPTMNIFh4x6B46Y8qC+7AKO1wCEJlsq";
  ret += "Cm3NXBnB56peWZU4dEOo18pWXhMTzBDWNnO7cHFtjG4IGI+DI2t+3y36Ly3y0hYJqtlFtvODUMQV";
  ret += "x+IaVj8cgov7eFSVecjQRgkH0zg2oZUPzjYjY6BKDaFGc4WnQ5SZCWvqCfQ25Db1BmdLR5g2fkaw";
  ret += "jtLTgxhD+nkhgxonxh+oDn2J6GvQhW3OrZmc9XYaK8Dh2dbLtpNIae0F14PTF8toXI3soefuLNHf";
  ret += "E2Odppe9MFU3YhiEHLB1r+64nROPF9gyqk+MpvjatodOvmsOz1Y0ZAwILK2RVO0m7BwfcA/IFTfm";
  ret += "zIn3tczq1rbP19B8t+l/o+2SXk9n3hTX1ukFa5WeWePm3lM4+hwqQQ22AfbPaTz1tO2Tj3lzeLP6";
  ret += "Ykevkq5GQRvQhE+NDbzAjs5RmwWqfnrwlWtpq5AdQn6hZc2nTw53qu5w5wsgkzI/2mpZL26Bcb5w";
  ret += "oNOGOWaOPMHADnesHeci6LoAe70suZRWXdSlG4Q5vEoVPYT3ApR9jtrozjkD2aPxJg3N9Y/ZLOJd";
  ret += "AOS/MWel39XTUN1Pke/EkMf9EKGkfZZOW6fg3OAUnlM7S9r7p0BwRZRnQ7z8kA/zMi9y8FUYUPsT";
  ret += "8EnF9/Ei45FpgvKDUIud40XWITuVigXf2AvCkqTWAd96ufV5+LbL4wkLslJp7nc4usjBOXu/w2mk";
  ret += "61cwSgYZv78N/5oGLuG5pbXRiTgR+Z7F/ValBIy3tTbTnRYiUaDV/43Pj6/dkqpK8fJ7jA9XzNop";
  ret += "BJnWZvpqRxhk2toa8DXSq9JXJ36QA/YMJcFyEHVTQ7M9HJK4+7KAerTTiQkir1BX8NApqBwE3dji";
  ret += "KscWCX20P/295T/Otv8NAAD//wMAUEsDBBQABgAIAAAAIQANeEnX9AEAACwHAAASAAAAd29yZC9m";
  ret += "b290bm90ZXMueG1srJTNjtsgEMfvlfoOFvcEO423u1acVds01d6qbvsALMYxWsMgwHHy9sXEH+lm";
  ret += "FTlJL9gMM7/5w8AsHneiDLZMGw4yRdE0RAGTFDIuNyn683s9uUeBsURmpATJUrRnBj0uP35Y1EkO";
  ret += "YCVYZgLHkCapFU1RYa1KMDa0YIKYqeBUg4HcTikIDHnOKcM16AzPwij0f0oDZca4hN+I3BKDWhzd";
  ret += "jaNlmtQuuAHOMS2Itmw3MKKLITF+wPenoNkVILfDWfQWJU5PCRSTbjEHLYh1U73BgujXSk0cWRHL";
  ret += "X3jJ7d5Bw7sOAymqtExaxKQX04QkBzHtp4vQY/IeQlZAK8Gk9RmxZqXTANIUXPXlEdfS3GLRQbbn";
  ret += "NrEVZedXq2h+291aHeoyAMfIb4spyoPy88QoHFGRBtFHjJHwb85OiSBcDomvOpqjw43iywCzE8Cd";
  ret += "YZch4haBzV4MT6NWm9uq/ENDpQYav432JF97VtP7LmC1t+X4BpvbxDwXRLmnLGjytJGgyUvpFLna";
  ret += "B658ga9A0LwStDzqzEGd2L1yfoYpookFjZyJZymaRN5Rualr/dmvFIXh94d4vv7aeHjTiuWkKu3p";
  ret += "ys/GtI4/fYk/e4huhj4DXi6wt7lR+bFT864yCtJyWfn+8vxWZfifRb6b7Jzgo4lZ/gUAAP//AwBQ";
  ret += "SwMEFAAGAAgAAAAhAJTFd7fFAQAAMgYAABAAAAB3b3JkL2hlYWRlcjMueG1spJTdbqMwEIXvV+o7";
  ret += "IN8nhrR0sygkWjVq1buq3X0A15hgxX+yDSRv34FAyG6kiiQ3GDPMN8c+9ixWOymCilnHtUpRNA1R";
  ret += "wBTVGVebFP398zyZo8B5ojIitGIp2jOHVsu7H4s6KTIbQLZySW1oigrvTYKxowWTxE0lp1Y7nfsp";
  ret += "1RLrPOeU4VrbDM/CKGzfjNWUOQelnoiqiEMdju7G0TJLakhugA+YFsR6thsY0cWQGP/C83PQ7AoQ";
  ret += "rHAW/Y+S57ukDVMQzLWVxMPUbrAkdluaCZAN8fyTC+73AA0fe4xOUWlV0iEmRzFNSnIQ0w19hh1T";
  ret += "95Cy1rSUTPm2IrZMgAatXMHN0R55LQ2CRQ+pvltEJUX/X22ih9vO1vrgywAcI78zU4qD8u+JUTjC";
  ret += "kQZxzBgj4d+avRJJuBoKX7U1J5sbxZcBZmeAR8cuQ8QdAru9HK5GbTa3ufxidWkGGr+N9qq2R1bT";
  ret += "9S5gdafl9AS728R8FMTAVZY0ed0obcmnAEXgfQD2Ba0DQXNL0BJ6sgnqBHp59p6iMHyO73/HP1H/";
  ret += "ac1yUgp/Emkz3mw7fPi9AFBSEZEico/wcoG7aDO2T+j4yy8AAAD//wMAUEsDBBQABgAIAAAAIQB+";
  ret += "aChlwwEAADIGAAAQAAAAd29yZC9mb290ZXIyLnhtbKSUXU+zMBTH75/E70B6vxWm+CgZM8ZF453x";
  ret += "5QPUUkZj39IW2L69BwZjusSw7YZSDud3/u2/PfO7tRRBxazjWqUomoYoYIrqjKtVij7eHyc3KHCe";
  ret += "qIwIrViKNsyhu8XFv3md5N4GkK1cUhuaosJ7k2DsaMEkcVPJqdVO535KtcQ6zzlluNY2w7MwCts3";
  ret += "YzVlzkGpB6Iq4lCHo+txtMySGpIb4BWmBbGerQdGdDQkxrf45hA0OwEEK5xFv1HycJe0YQqCubaS";
  ret += "eJjaFZbEfpVmAmRDPP/kgvsNQMPrHqNTVFqVdIjJTkyTkmzFdEOfYcfU3aYsNS0lU76tiC0ToEEr";
  ret += "V3Czs0eeSoNg0UOqvxZRSdH/V5vo6ryztdz6MgDHyO/MlGKr/G9iFI5wpEHsMsZI+FmzVyIJV0Ph";
  ret += "k7Zmb3Oj+DjA7ABw7dhxiLhDYLeRw9Wozeo8l5+sLs1A4+fRntXXjtV0vSNY3WnZP8HuPDFvBTFw";
  ret += "lSVNnldKW/IpQBF4H4B9QetA0NwStICebII6gV6evaYoDB/jy/v4P+o/LVlOSuH3Im3Gi22HN78R";
  ret += "AEoqIlJEYoQXc9xFm7F9QsdffAMAAP//AwBQSwMEFAAGAAgAAAAhAH5oKGXDAQAAMgYAABAAAAB3";
  ret += "b3JkL2Zvb3RlcjEueG1spJRdT7MwFMfvn8TvQHq/Fab4KBkzxkXjnfHlA9RSRmPf0hbYvr0HBmO6";
  ret += "xLDthlIO53f+7b8987u1FEHFrONapSiahihgiuqMq1WKPt4fJzcocJ6ojAitWIo2zKG7xcW/eZ3k";
  ret += "3gaQrVxSG5qiwnuTYOxowSRxU8mp1U7nfkq1xDrPOWW41jbDszAK2zdjNWXOQakHoiriUIej63G0";
  ret += "zJIakhvgFaYFsZ6tB0Z0NCTGt/jmEDQ7AQQrnEW/UfJwl7RhCoK5tpJ4mNoVlsR+lWYCZEM8/+SC";
  ret += "+w1Aw+seo1NUWpV0iMlOTJOSbMV0Q59hx9Tdpiw1LSVTvq2ILROgQStXcLOzR55Kg2DRQ6q/FlFJ";
  ret += "0f9Xm+jqvLO13PoyAMfI78yUYqv8b2IUjnCkQewyxkj4WbNXIglXQ+GTtmZvc6P4OMDsAHDt2HGI";
  ret += "uENgt5HD1ajN6jyXn6wuzUDj59Ge1deO1XS9I1jdadk/we48MW8FMXCVJU2eV0pb8ilAEXgfgH1B";
  ret += "60DQ3BK0gJ5sgjqBXp69pigMH+PL+/g/6j8tWU5K4fcibcaLbYc3vxEASioiUkRihBdz3EWbsX1C";
  ret += "x198AwAA//8DAFBLAwQUAAYACAAAACEAfmgoZcMBAAAyBgAAEAAAAHdvcmQvZm9vdGVyMy54bWyk";
  ret += "lF1PszAUx++fxO9Aer8VpvgoGTPGReOd8eUD1FJGY9/SFti+vQcGY7rEsO2GUg7nd/7tvz3zu7UU";
  ret += "QcWs41qlKJqGKGCK6oyrVYo+3h8nNyhwnqiMCK1YijbMobvFxb95neTeBpCtXFIbmqLCe5Ng7GjB";
  ret += "JHFTyanVTud+SrXEOs85ZbjWNsOzMArbN2M1Zc5BqQeiKuJQh6PrcbTMkhqSG+AVpgWxnq0HRnQ0";
  ret += "JMa3+OYQNDsBBCucRb9R8nCXtGEKgrm2kniY2hWWxH6VZgJkQzz/5IL7DUDD6x6jU1RalXSIyU5M";
  ret += "k5JsxXRDn2HH1N2mLDUtJVO+rYgtE6BBK1dws7NHnkqDYNFDqr8WUUnR/1eb6Oq8s7Xc+jIAx8jv";
  ret += "zJRiq/xvYhSOcKRB7DLGSPhZs1ciCVdD4ZO2Zm9zo/g4wOwAcO3YcYi4Q2C3kcPVqM3qPJefrC7N";
  ret += "QOPn0Z7V147VdL0jWN1p2T/B7jwxbwUxcJUlTZ5XSlvyKUAReB+AfUHrQNDcErSAnmyCOoFenr2m";
  ret += "KAwf48v7+D/qPy1ZTkrh9yJtxotthze/EQBKKiJSRGKEF3PcRZuxfULHX3wDAAD//wMAUEsDBBQA";
  ret += "BgAIAAAAIQCUxXe3xQEAADIGAAAQAAAAd29yZC9oZWFkZXIxLnhtbKSU3W6jMBCF71fqOyDfJ4a0";
  ret += "dLMoJFo1atW7qt19ANeYYMV/sg0kb9+BQMhupIokNxgzzDfHPvYsVjspgopZx7VKUTQNUcAU1RlX";
  ret += "mxT9/fM8maPAeaIyIrRiKdozh1bLux+LOikyG0C2ckltaIoK702CsaMFk8RNJadWO537KdUS6zzn";
  ret += "lOFa2wzPwihs34zVlDkHpZ6IqohDHY7uxtEyS2pIboAPmBbEerYbGNHFkBj/wvNz0OwKEKxwFv2P";
  ret += "kue7pA1TEMy1lcTD1G6wJHZbmgmQDfH8kwvu9wANH3uMTlFpVdIhJkcxTUpyENMNfYYdU/eQsta0";
  ret += "lEz5tiK2TIAGrVzBzdEeeS0NgkUPqb5bRCVF/19toofbztb64MsAHCO/M1OKg/LviVE4wpEGccwY";
  ret += "I+Hfmr0SSbgaCl+1NSebG8WXAWZngEfHLkPEHQK7vRyuRm02t7n8YnVpBhq/jfaqtkdW0/UuYHWn";
  ret += "5fQEu9vEfBTEwFWWNHndKG3JpwBF4H0A9gWtA0FzS9ASerIJ6gR6efaeojB8ju9/xz9R/2nNclIK";
  ret += "fxJpM95sO3z4vQBQUhGRInKP8HKBu2gztk/o+MsvAAAA//8DAFBLAwQUAAYACAAAACEAlMV3t8UB";
  ret += "AAAyBgAAEAAAAHdvcmQvaGVhZGVyMi54bWyklN1uozAQhe9X6jsg3yeGtHSzKCRaNWrVu6rdfQDX";
  ret += "mGDFf7INJG/fgUDIbqSKJDcYM8w3xz72LFY7KYKKWce1SlE0DVHAFNUZV5sU/f3zPJmjwHmiMiK0";
  ret += "YinaM4dWy7sfizopMhtAtnJJbWiKCu9NgrGjBZPETSWnVjud+ynVEus855ThWtsMz8IobN+M1ZQ5";
  ret += "B6WeiKqIQx2O7sbRMktqSG6AD5gWxHq2GxjRxZAY/8Lzc9DsChCscBb9j5Lnu6QNUxDMtZXEw9Ru";
  ret += "sCR2W5oJkA3x/JML7vcADR97jE5RaVXSISZHMU1KchDTDX2GHVP3kLLWtJRM+bYitkyABq1cwc3R";
  ret += "HnktDYJFD6m+W0QlRf9fbaKH287W+uDLABwjvzNTioPy74lROMKRBnHMGCPh35q9Ekm4GgpftTUn";
  ret += "mxvFlwFmZ4BHxy5DxB0Cu70crkZtNre5/GJ1aQYav432qrZHVtP1LmB1p+X0BLvbxHwUxMBVljR5";
  ret += "3ShtyacAReB9APYFrQNBc0vQEnqyCeoEenn2nqIwfI7vf8c/Uf9pzXJSCn8SaTPebDt8+L0AUFIR";
  ret += "kSJyj/BygbtoM7ZP6PjLLwAAAP//AwBQSwMEFAAGAAgAAAAhAGbCYEz0AQAAJgcAABEAAAB3b3Jk";
  ret += "L2VuZG5vdGVzLnhtbKyUS27bMBCG9wV6B4F7m5JrpYlgOUjrusiuaNoDMBRlEREfICnLvn1HtB5p";
  ret += "HBiynQ0lDme++ckhZ3G/E2WwZcZyJVMUTUMUMElVxuUmRX//rCe3KLCOyIyUSrIU7ZlF98vPnxZ1";
  ret += "wmQmlWM2AIS0Sa1pigrndIKxpQUTxE4Fp0ZZlbspVQKrPOeU4VqZDM/CKPR/2ijKrIV834ncEota";
  ret += "HN2No2WG1BDcAOeYFsQ4thsY0dmQGN/h22PQ7AIQ7HAWvUWJ41NSmklYzJURxMHUbLAg5qXSEyBr";
  ret += "4vgzL7nbAzS86TAqRZWRSYuY9GKakOQgpv10EWZM3kPIStFKMOl8RmxYCRqUtAXXfXnEpTRYLDrI";
  ret += "9tQmtqLs/Godza+7W6tDXQbgGPltMUV5UH6aGIUjKtIg+ogxEv7P2SkRhMsh8UVH8+pwo/g8wOwI";
  ret += "cGPZeYi4RWC7F8PTqPXmuir/NKrSA41fR3uULz2raX1nsNrb8voG2+vEPBVEw1MWNHncSGXIcwmK";
  ret += "oPYBlC/wFQiaV4KWQ2MO6sTtNbhZpokhThkEJp6laBJ5Pw1TaPzZ7xSF4Y+7eL7+1nh404rlpCrd";
  ret += "8cqvxrSOvzzEXz3ENEOfAS8X2Ntg1H5sxbyniyrpuKx8c3l6qzH8YInvJjshd/i3y38AAAD//wMA";
  ret += "UEsDBBQABgAIAAAAIQCkFlSY3QYAANcgAAAVAAAAd29yZC90aGVtZS90aGVtZTEueG1s7FlbaxtH";
  ret += "FH4v9D8s+67otquLiRyklRQnsRMTKyl5HK9Gu2PN7oiZkR0RAiWGQl8KhbT0oSl960MpDTTQUAr9";
  ret += "MYaENv0RnZmVtDvSbJzENoRiC6y5fOfMN+ecOXO0e/Xawwhbh5AyROKWXb5Ssi0Y+2SI4qBl3xv0";
  ret += "Cw3bYhzEQ4BJDFv2DDL72uann1wFGzyEEbSEfMw2QMsOOZ9sFIvMF8OAXSETGIu5EaER4KJLg+KQ";
  ret += "giOhN8LFSqlUK0YAxbYVg0iovTMaIR9aJ8dfnBz/eXL8g725WKCHxb+YMzngY7on1UNNSmGH47L8";
  ret += "YjPmYWodAtyyxVpDcjSAD7ltYcC4mGjZJfVnFzevFpdCmOfIZuT66m8uNxcYjitKjgb7S0HHcZ1a";
  ret += "e6lfATBfx/XqvVqvttSnAMD3xU4TLlms22l2uu4cmwElTYPubr1bLWv4jP7qGr7tyo+GV6Ck6azh";
  ret += "+30vtWEGlDRdg03qFc/R8AqUNGtr+Hqp3XXqGl6BQozi8Rq65Naq3mK3S8iI4C0jvOk6/XplDk9R";
  ret += "xUx0JfIxz4u1CBwQ2hcA5VzAUWzx2QSOgC9wr16+PHny4uTJ7yfHxydPfrW2URCKAJyAmDAxXaqU";
  ret += "+qWq+C8/jmopy4ANCDJakiGfrQ1JXhbzKZrwln1TaLVPXXtdbgvEQVbuzU9f//vsc+uf33588/Qb";
  ret += "M55l8a9/+fL1H3+9TT3XaH37/PWL56++++rvn58a4G0K9rPwAYogs27DI+suicQGDQvAffp+EoMQ";
  ret += "oKxEOw4YiIGUMaB7PNTQt2cAAwOuA3U73qcibZiA16cHGuG9kE45MgBvhZEG3CEEdwg17umWXCtr";
  ret += "hWkcmBen0yzuLgCHprW9FS/3phMR/8ik0guhRnMXC5eDAMaQW3KOjCE0iD1ASLPrDvIpYWTErQfI";
  ret += "6gBkNMkA7WvRlAptoUj4ZWYiKPyt2WbnvtUh2KS+Cw91pDgbAJtUQqyZ8TqYchAZGYMIZ5HbgIcm";
  ret += "knsz6msGZ1x4OoCYWL0hZMwkc4fONLq3gMhfRrfv4FmkIylHYxNyGxCSRXbJ2AtBNDFyRnGYxd5g";
  ret += "YxGiwNol3EiC6CdE9oUfQJzr7vsIau4+/WzfE2nIHCByZkpNRwIS/TzO8AhAk/I2jbQU26bIGB2d";
  ret += "aaCF9jaEGByBIYTWvRsmPJloNk9J3wxFVtmCJtvcBHqsyn4MGbRUkWNwLGJayO7BgOTw2ZmtJJ4Z";
  ret += "iCNA8zTfHush09un4jCa4hX7Yy2VIioPrZnEHRZp+8vVuhsCLaxkn5njdUY1/73LGRMyBx8gA99b";
  ret += "RiT2d7bNAGBtgTRgBgBZ26Z0K0Q096ci8jgpsalRbqQf2tQNxZXiJ0LxWyshcee/+v7ZSvXjXlz1";
  ret += "M19vHXs+FY8ZeJZaJy+drFY4ebjVusYjdIg+/rKmC6bxLhQ3iQF6WdVcVjX/+6om7zxf1jKXtcxl";
  ret += "LWMWuYBaJi1f1MOgxSMfpSXKff4zQhjv8RmG20wVPkyc/WFfDKqOElo+bpqEojlfTsMFFKi2RQn/";
  ret += "DPFwLwQTsUxZrRCwueqAWRPCROGkho265QSeRjtkmIyWy4snnEIA8HRcFF6LcVGo8WS0Vk8f5S3V";
  ret += "q16gHrkuCEjZ9yGRWUwnUTWQqC8GTyGhdnYuLJoGFg2pPpeF+pp7RVxOFpAPyF0nYSTCTYT0UPop";
  ret += "kV9499w9nWdMfdsVw/aakuv5eFojkQk3nUQmDENxeawOn7Ovm6lLNXrSFOs06o2L8LVMIiu5Acd6";
  ret += "zzoSZ67qCjU+mLTskfjRJJrRROhjMlMBHMQt2+dzQ39IZplQxruAhQlMTSX7jxCH1MIoErGedQOO";
  ret += "U27lSl3u8SMl1yx9fJZTX1knw9EI+jxnJO2KuUSJcfaMYNkhU0F6LxweWft4Su8CYSi3XpYGHCLG";
  ret += "l9YcIpoJ7tSKK+lqfhS1Ny/pEQV4EoL5jZJN5glctZd0MvtQTFd3pffnm9kPpJPOfOueLiQnMkkz";
  ret += "5wKRt6Y5f1zcJZ9hleZ9jVWSuldzXXOR6/JuibNfCBlq6WIaNcnYQC0d1amdY0GQWW4Zmnl3xHnf";
  ret += "BqtRKy+IRV2pemuvuMn+gYj8rqhWp5gzRVX8aqHAW7ycTDKBGl1kl4fcmlLUsh+V3LbjVVyvUGq4";
  ret += "vYJTdUqFhtuuFtquWy333HKp26k8FkbhYVR2k7X74sc+ns3f4qvxtTf50aLUvuKTqEhUHVxUwupN";
  ret += "frliepM/kPO2hYRlHtUq/Wa12akVmtV2v+B0O41C06t1Ct2aV+/2u57baPYf29ahAjvtqufUeo1C";
  ret += "rex5BadWkvQbzULdqVTaTr3d6Dntx3Nbi50vvhfmVbw2/wMAAP//AwBQSwMEFAAGAAgAAAAhAEM7";
  ret += "jD20BAAA0QwAABEAAAB3b3JkL3NldHRpbmdzLnhtbMRXW1PbOBR+35n9Dxk/NzgJMVAPoUMaUmCS";
  ret += "LYPD7rNsn8QqungkORd+/R5Jdi6Qdmh3OvsC8vnOXeeiXH5ac9ZagtJUikHQPekELRCZzKlYDIKn";
  ret += "2bh9EbS0ISInTAoYBBvQwaerP/+4XMUajEE23UIVQsc8GwSFMWUchjorgBN9IksQCM6l4sTgp1qE";
  ret += "nKjnqmxnkpfE0JQyajZhr9M5C2o1chBUSsS1ijanmZJazo0VieV8TjOo/zUS6j12vchIZhUHYZzF";
  ret += "UAFDH6TQBS11o43/qjYEi0bJ8kdBLDlr+FbdzjvCXUmVbyXe454VKJXMQGu8IM4aB6nYGe6/UbS1";
  ret += "fYK26xCdKhTvdtxp3/Po5xT03ig40/BzKqJaRag3HNaNIs3ekxIPTWiqiPIFV+eDZ/HdQkhFUobu";
  ret += "YF5aGFrLeRdcYZW/SMlbq7gEleFVY4t0OkFoAQVcLuEBW0cKwu6Et4bltIeOiIFrkc8oB0dN0X8U";
  ret += "GMm/pEkqpWQl8lsgSPsuPJbS1HAOc1IxMyNpYmSJTi0Jxn7Rrx3KqS4Z2dxKRV+kMISNFFnh/X9R";
  ret += "NL/BFt80Eof8f4MyNPs+d89zZwVRJENXkpJkyPcZTSjJGi7b0Arr7aESmalcHrxckaukICWMvPP6";
  ret += "6lLG2hLqaHRrGcMaEws5NThrSppzskaznf5HvIBlbBBN5bpFBQ6cQRCdXESl+XByjn/2ztZY+Eoz";
  ret += "Uo7ZX8VzzKnAtD6o/S8MheaDoN31jr8iu6SFr2VB5G8+Xuk5pDZqDgT9NLQnjcmFsVRPE18QhBGR";
  ret += "QYL5ZjDcGBw5VepP/9DcFP4ebblMgCxhSLJnzYguru2wdmDFZopQZi/NExz3zbrEkZ4UdG4eweAA";
  ret += "chDJv1XaTKiAW6CLwtyJme0Kr0fD+GZCNrIyvhycy4lfARibIBx8FWzH+lTmOKNRVNH397kVcAXV";
  ret += "jeq6O2oIe0thoYJzMDEbhkkTJqEvtt3uMQqKGn0V/roHP3IAhLX8FQfNbFPCGAhmEVfj7zHm7mzM";
  ret += "aDmlOBTUnchxFP02Y3Q+B4UGKA6vKbYMVXLl8uwn1X+1G+7XO747cteS9vCIrbWdUZ3x2Wm/d1rP";
  ret += "WkR3SKfTi4b9Y8jNx6g/Hh5DxtHpdXR+FNnaCbf+8Nhuc9uc/mSLq8W9xGfCU0VJa2r3fWg5UvU8";
  ret += "pKLBU8BNAPtIUqUN2G57QHPC2BgHagO4ucDdTMZJ5c5sStRip7fmUEepOPLut7rsogL1BddH6dGV";
  ret += "IqUvmoal2/dbg8dUYMfzhq6rNGmkBG7KPQh30delcnnapWcVG7x813wT4orI8YJoPyX22oFoc60p";
  ret += "GQTfSPv+oa47phJbMzAlZelLL110BwGzQ6drxQx+5fhSdB/poldjPYf1POY+SGaDRe76sKP1Gtoe";
  ret += "32lDO93R+g2tv6NFDS3a0c4a2pmlFdj0ilHxjF3QHC19LhmTK8hvd/gbkk+C21T/y1KsCcwN8wND";
  ret += "FrOWykPzOTGkad4DYdcyrwKxz5SMYnknG57u3gcnPmpGNQ6cEp8SRqoG++Cwbh93U3aHnYknRz8/";
  ret += "H52Prm98P3cj9wQxuM6yZyyaR5gPiYbc923zW+TqXwAAAP//AwBQSwMEFAAGAAgAAAAhAMbJqcoB";
  ret += "DAAAi3QAAA8AAAB3b3JkL3N0eWxlcy54bWzsnc1y3LgRx++pyjuw5rR7kEffsl0rb8myFSmxbO2O";
  ret += "HJ8xJEYDiyS4JMeSckrFhzxBPl4ib5CqPIwreY4AIDjDURMcNtjRKSdpSPaPILr/DTRIzvzw430S";
  ret += "B194XgiZHo92nm2PAp6GMhLpzfHo4/XZ1vNRUJQsjVgsU348euDF6MdXv/7VD3cvi/Ih5kWgAGnx";
  ret += "MgmPR/OyzF6Ox0U45wkrnsmMp2rnTOYJK9XH/GacsPx2kW2FMslYKaYiFuXDeHd7+3BkMXkfipzN";
  ret += "RMjfyHCR8LQ09uOcx4oo02IusqKm3fWh3ck8ynIZ8qJQF53EFS9hIl1idvYBKBFhLgs5K5+pi7Et";
  ret += "MihlvrNt/kviFeAAB9gFgMOC4xAHFjEuHhJ+PwqS8OXFTSpzNo0VSV1SoFoVGPDolfJmJMM3fMYW";
  ret += "cVnoj/lVbj/aT+bPmUzLIrh7yYpQiGvVCoVKhKKen6SFGKk9nBXlSSFYc+dbu03vn+sDWy3Domxs";
  ret += "fi0iMRrrk97yPFW7v7D4eLRbbSr+sNywU2851e2qttmjYpbe1Nt4uvVx0mzf8egz2/rtld40Vac6";
  ret += "HrF8a3KiDcf2cqu/jU7Ilp+qox71mIo/FY2TShRqL5+9k+Etjyal2nE82tanUhs/XlzlQuYq8I9H";
  ret += "L17YjROeiHMRRTxtHJjORcQ/zXn6seDRavtPZyZ47YZQLlL1/97RrvFiXERv70OeaSmovSnTHfpe";
  ret += "G8T66IVYndyY/1LDbD+22s850/kg2HmMMM1HIXa1RdG42nbm4tG1m6NQJ9p7qhPtP9WJDp7qRIdP";
  ret += "daKjpzrR86c6kcH8L08k0ojfV0KEpwHUTRyHGtEch9jQHIeW0ByHVNAchxLQHEegozmOOEZzHGGK";
  ret += "4JQydEVhI9j3HNHezd08RvhxNw8JftzNI4Afd3PC9+Nuzu9+3M3p3I+7OXv7cTcnazy3mmoFF0pm";
  ret += "aTlYZTMpy1SWPCj5/XAaSxXLFEk0PD3o8ZzkIgkwVWazA/FgWsjM580RYkTqP56XuhwL5CyYiZtF";
  ret += "rmrroQ3n6Rceqyo3YFGkeITAnJeL3NEjPjGd8xnPeRpyysCmg8Yi5UG6SKYEsZmxGzIWTyPi7quJ";
  ret += "JElhGdBsUc61SARBUCcszOXwpklGlh/eiWJ4X2lI8HoRx5yI9Z4mxAxreG1gMMNLA4MZXhkYzPDC";
  ret += "oOEzqi6yNKKesjSiDrM0on6r4pOq3yyNqN8sjajfLG14v12LMjYpvjnr2Om/dncaS72sPbgdE3GT";
  ret += "MjUBGD7c2DXT4Irl7CZn2TzQq8rt2OY1Y8/zWkYPwTXFmLYkUc3rTYicqqsW6WJ4h67RqMS15BHJ";
  ret += "a8kjEtiSN1xil2qarCdo5zT1zGQxLVtFa0i9RDth8aKa0A5XGyuHR9hKAGciL8hk0I4liOD3ejqr";
  ret += "3UmR+VatHN6wFWu4rB5nJdLmWSRBK2MZ3tKk4fOHjOeqLLsdTDqTcSzveERHnJS5rGKtKfld45Je";
  ret += "kn+bZHNWCFMrrSH6D/X1DfHgkmWDL+gqZiKl8dvbrYSJOKCbQZxfX74LrmWmy0zdMTTA17IsZULG";
  ret += "tCuB333i0+9pGniiiuD0gehqT4iWhwzsVBAMMhVJRkQkNc0UqSAZQw3vd/xhKlke0dCucl49g1Jy";
  ret += "IuKEJVk16SDQlsqLdyr/EMyGDO/3LBd6XYhKVNcksMayYbGYfubh8FT3XgYkK0MfFqVZfzRTXWNN";
  ret += "hxs+TVjDDZ8iGG+q4UHHL8HFruGGX+wajupiT2NWFMJ5C9WbR3W5NY/6eocXf5YnY5nPFjFdB9ZA";
  ret += "sh6sgWRdKONFkhaUV2x4hBdseNTXSxgyhkewJGd4v8lFROYMA6PyhIFRucHAqHxgYKQOGP6ETgM2";
  ret += "/DGdBmz4szoVjGgK0IBRxRnp8E90l6cBo4ozA6OKMwOjijMDo4qzvTcBn83UJJhuiGkgqWKugaQb";
  ret += "aNKSJ5nMWf5AhHwb8xtGsEBa0a5yOdMvJ8i0eoibAKnXqGPCyXaFo3LyJz4la5pmUbaLYEWUxbGU";
  ret += "RGtrqwHHWK4/u7bJzLyGMbgJVzEL+VzGEc8d1+S2VfXyJGOhXaYHt/t6LXu+EzfzMpjMl6v9Tczh";
  ret += "9kbLumBfM9t8wrY+P6zfPGkzu+SRWCR1Q+HLFId7/Y1NRK8Z7282Xs0k1iwPelrCcx5utlzNktcs";
  ret += "j3pawnM+72lpdLpm2aWHNyy/bQ2Eo674WdZ4juA76oqipXHrabsCaWnZFoJHXVG0JpXgJAz13QLo";
  ret += "nX6acdv3E4/bHqMiNwUjJzelt67ciC6B/cy/CD2yY5KmOd/y6QmQ980kulfm/Gkhq3X7tRtO/V/q";
  ret += "ulATp7TgQStnr/+Nq7Us4+7H3unGjeidd9yI3gnIjeiViZzmqJTkpvTOTW5E7yTlRqCzFRwRcNkK";
  ret += "2uOyFbT3yVaQ4pOtBswC3Ije0wE3Ai1UiEALdcBMwY1ACRWYewkVUtBChQi0UCECLVQ4AcMJFdrj";
  ret += "hArtfYQKKT5ChRS0UCECLVSIQAsVItBChQi0UD3n9k5zL6FCClqoEIEWKkSghWrmiwOECu1xQoX2";
  ret += "PkKFFB+hQgpaqBCBFipEoIUKEWihQgRaqBCBEiow9xIqpKCFChFooUIEWqjVq4b+QoX2OKFCex+h";
  ret += "QoqPUCEFLVSIQAsVItBChQi0UCECLVSIQAkVmHsJFVLQQoUItFAhAi1Uc7NwgFChPU6o0N5HqJDi";
  ret += "I1RIQQsVItBChQi0UCECLVSIQAsVIlBCBeZeQoUUtFAhAi1UiOiKT3uL0vWY/Q5+1dP5xH7/W1e2";
  ret += "UT83X+Vuovb6o+pWuVn930V4LeVt0Pri4Z6pN/pBxDQW0ixRO26rN7nmkQjUjc8Pp91v+DTpA790";
  ret += "yb4LYe6ZAvh+X0uwprLfFfJNS1Dk7XdFetMSzDr3u7Jv0xIMg/tdSdfosn4oRQ1HwLgrzTSMdxzm";
  ret += "Xdm6YQ67uCtHNwxhD3dl5oYh7OCufNwwPAh0cn5sfdCznw6Xz5cCQlc4NghHbkJXWEJf1ekYCqOv";
  ret += "09yEvt5zE/q60U1A+dOJwTvWjUJ72I3yczWUGdbV/kJ1E7CuhgQvVwOMv6shytvVEOXnapgYsa6G";
  ret += "BKyr/ZOzm+DlaoDxdzVEebsaovxcDYcyrKshAetqSMC6euCA7MT4uxqivF0NUX6uhpM7rKshAetq";
  ret += "SMC6GhK8XA0w/q6GKG9XQ5Sfq0GVjHY1JGBdDQlYV0OCl6sBxt/VEOXtaojqcrVZRVlzNcrDDXPc";
  ret += "JKxhiBuQG4a45Nww9KiWGtae1VKD4FktQV/VPsdVS02nuQl9vecm9HWjm4DypxODd6wbhfawG+Xn";
  ret += "aly11OZqf6G6CVhX46olp6tx1VKnq3HVUqercdWS29W4aqnN1bhqqc3V/snZTfByNa5a6nQ1rlrq";
  ret += "dDWuWnK7GlcttbkaVy21uRpXLbW5euCA7MT4uxpXLXW6GlctuV2Nq5baXI2rltpcjauW2lyNq5ac";
  ret += "rsZVS52uxlVLna7GVUtuV+OqpTZX46qlNlfjqqU2V+OqJaercdVSp6tx1VKnq3HV0qUyEZivgBrf";
  ret += "rf2Qkwab3zlTx5cPGdff5d148SaqvsvUAs2BF4rEzG8x6RYE9ven7E8wmYbae47m/6z6Ya07Eck7";
  ret += "/SJyLuPaxHb257DeMJXl3DbRmI3tGWEbw7lqZGi/vsnVxm3QSMc3s5pmrHq8Ptp6cNWt1XFrnVq1";
  ret += "1tHKUnu4q4U7jm6sYsPVrhc22Dc1TDVjGlfdr/65SCMFuLM/i1U1MLpnFUrtP+VxfMmqo2XmPjTm";
  ret += "s7Lau7NtXs1/tH9afcuc0z436cgJGK83pvrYHQzV987b++Surq5+PWy9q80DG0N72d2uNSGtWrIH";
  ret += "WmJ/Z6LqPqawH7S+za6600V6u9xk73C7m9wSCXkhtPsr3W2fHeydHNi0bQWqYtXkAvW3Pk5no0ph";
  ret += "mSxUjt2tE1HjGOPN5SHPD7ZN47TXLK9IWXYtzfJQU/ZIiYeLQgWVyVjAs/ugP799/fu3r1+/ff3j";
  ret += "t6//DL77z1///O9//O379u6tE36zf+2zB+7+dXUmOhQOQNPtb4X0DQU7eP8/FKr+PGwJhb/oUPjT";
  ret += "v/xCwT4SMiQU6v+KV/8FAAD//wMAUEsDBBQABgAIAAAAIQCTdtZJGAEAAEACAAAUAAAAd29yZC93";
  ret += "ZWJTZXR0aW5ncy54bWyU0cFKAzEQBuC74DuE3Ntsiy2ydFsQqXgRQX2ANJ1tg5lMyKRu69M7rlUR";
  ret += "L+0tk2Q+5mdmiz0G9QaZPcVGj4aVVhAdrX3cNPrleTm41oqLjWsbKEKjD8B6Mb+8mHV1B6snKEV+";
  ret += "shIlco2u0dtSUm0Muy2g5SEliPLYUkZbpMwbgza/7tLAESZb/MoHXw5mXFVTfWTyKQq1rXdwS26H";
  ret += "EEvfbzIEESny1if+1rpTtI7yOmVywCx5MHx5aH38YUZX/yD0LhNTW4YS5jhRT0n7qOpPGH6ByXnA";
  ret += "+B8wZTiPmBwJwweEvVbo6vtNpGxXQSSJpGQq1cN6LiulVDz6d1hSvsnUMWTzeW1DoO7x4U4K82fv";
  ret += "8w8AAAD//wMAUEsDBBQABgAIAAAAIQBeV3f+XQEAALsCAAARAA0BZG9jUHJvcHMvY29yZS54bWwg";
  ret += "ogkBKKAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxSXUvDMBR9F/wPJe9t0g2H";
  ret += "lLYDlT05EJwovsXkbotrPkgyu/57s2Z2q/gk9CH3nnNPzrlpOT/IJvkC64RWFcozghJQTHOhNhV6";
  ret += "WS3SW5Q4TxWnjVZQoQ4cmtfXVyUzBdMWnqw2YL0AlwQl5QpmKrT13hQYO7YFSV0WGCqAa20l9aG0";
  ret += "G2wo29EN4AkhMyzBU049xUfB1AyK6CTJ2SBp9rbpBTjD0IAE5R3OsxyfuR6sdH8O9MgFUwrfmZDp";
  ret += "ZPdSm7MIDuyDEwOxbdusnfY2gv8cvy0fn/uoqVDHXTFAdclZ4YVvoC7x+RhObv/xCczH9lAEgFmg";
  ret += "XtsIDEVY8w66VlvuAjKqwgwHx6wwPjxenBs1Aruhzi/Da64F8LsuKvzucdYvJhoAnoSoRVzMD/I6";
  ret += "vX9YLVA9IfksJeGbrMisuCEFIe/HeKP5Y/TYkKeL/634IxB9j3+3+hsAAP//AwBQSwMEFAAGAAgA";
  ret += "AAAhADLAIrf4AQAARwUAABIAAAB3b3JkL2ZvbnRUYWJsZS54bWyskktu2zAQhvcFegeC+1iU/IwQ";
  ret += "OWicGChQdFGkB6BpSiIqkgJJ2/HW2XfdRXuGbgo09zHgc3RESXk5QW20ow35D+fDzK85O7+RBVpy";
  ret += "Y4VWCQ47BCOumJ4LlSX48/X0ZISRdVTNaaEVT/CaW3w+fvvmbBWnWjmLoF7ZWLIE586VcRBYlnNJ";
  ret += "bUeXXEEy1UZSB1eTBZKaL4vyhGlZUidmohBuHUSEDHCDMYdQdJoKxi81W0iunK8PDC+AqJXNRWlb";
  ret += "2uoQ2kqbeWk049bCzLKoeZIKdY8Je3sgKZjRVqeuA8M0HXkUlIfEn2TxAOgfB4j2AAPLj0P0G0Rg";
  ret += "15LfYCRZ/D5T2tBZASQYCUFXyIPxuPmZaBUrKiG9u7vbffu6+/7Dp0qqtOUhZJe0SDCJ4OuRJ4GD";
  ret += "6iHLqbG8wviHo0ZOqRTFulWNllTViVI4lrf6khpRNVenrMggsbAzUnEgoqshrpUwwdG7yXA6mU4b";
  ret += "JYKmfIRRo3RbBVoDhXlORSHk1Fcxz3ncflB7sOfFtZDcoo98hT75zl9zZEC6pA++9OHcJb0XHWmN";
  ret += "+ldHrrwh9/PDJBNQhqPexXNHyOlfHAHTas7hjsB2bDe/tpvf29vb7eYn+iCy3L3iywV48SSO2BSp";
  ret += "59wcbwyJHhvjV+XyhVUZ/IdVaQ52/AcAAP//AwBQSwMEFAAGAAgAAAAhACrRNL5cAQAAmwIAABAA";
  ret += "IAFkb2NQcm9wcy9hcHAueG1sIKIcASigAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  ret += "AAAAAAAAAAAAAAAAAAAAAAAAAAAAnFLBagIxEL0X+g/L3jWrtCJljBSl9FCKsKueQzLuhu4mIYmi";
  ret += "f99ZVteV3prTvDfJm/eGwPLc1MkJfdDWLNLJOEsTNNIqbcpFui0+RvM0CVEYJWprcJFeMKRL/vwE";
  ret += "G28d+qgxJCRhwiKtYnRvjAVZYSPCmNqGOgfrGxEJ+pLZw0FLXFt5bNBENs2yGcNzRKNQjVwvmHaK";
  ret += "b6f4X1FlZesv7IqLI8McCmxcLSLy79ZOPVY2NsB6FgobRV3oBnlGdA9gI0oMfAKsK2BvvSKcEdOV";
  ret += "sKqEFzLSBvnrfApsgIGS5iiPXsdLqzuE8KUNKb8A6wqa5EXphauu43oEuRQ1rigOP4g6ILA7ASvb";
  ret += "OGEunObeKtL7CVtX2HWb9/rkkRyY3utY5U5I8jJ7tD/oQE4hUZH/m96dgE9asa/boRTdlKhud/42";
  ret += "4N25XffX+GQ2zugAG3C05v4T8F8AAAD//wMAUEsBAi0AFAAGAAgAAAAhAGdzKC+XAQAAKAkAABMA";
  ret += "AAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAHpEat+8A";
  ret += "AABOAgAACwAAAAAAAAAAAAAAAADQAwAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEAxaqym0AB";
  ret += "AAA9BwAAHAAAAAAAAAAAAAAAAADwBgAAd29yZC9fcmVscy9kb2N1bWVudC54bWwucmVsc1BLAQIt";
  ret += "ABQABgAIAAAAIQA9daQx7gYAAOIVAAARAAAAAAAAAAAAAAAAAHIJAAB3b3JkL2RvY3VtZW50Lnht";
  ret += "bFBLAQItABQABgAIAAAAIQANeEnX9AEAACwHAAASAAAAAAAAAAAAAAAAAI8QAAB3b3JkL2Zvb3Ru";
  ret += "b3Rlcy54bWxQSwECLQAUAAYACAAAACEAlMV3t8UBAAAyBgAAEAAAAAAAAAAAAAAAAACzEgAAd29y";
  ret += "ZC9oZWFkZXIzLnhtbFBLAQItABQABgAIAAAAIQB+aChlwwEAADIGAAAQAAAAAAAAAAAAAAAAAKYU";
  ret += "AAB3b3JkL2Zvb3RlcjIueG1sUEsBAi0AFAAGAAgAAAAhAH5oKGXDAQAAMgYAABAAAAAAAAAAAAAA";
  ret += "AAAAlxYAAHdvcmQvZm9vdGVyMS54bWxQSwECLQAUAAYACAAAACEAfmgoZcMBAAAyBgAAEAAAAAAA";
  ret += "AAAAAAAAAACIGAAAd29yZC9mb290ZXIzLnhtbFBLAQItABQABgAIAAAAIQCUxXe3xQEAADIGAAAQ";
  ret += "AAAAAAAAAAAAAAAAAHkaAAB3b3JkL2hlYWRlcjEueG1sUEsBAi0AFAAGAAgAAAAhAJTFd7fFAQAA";
  ret += "MgYAABAAAAAAAAAAAAAAAAAAbBwAAHdvcmQvaGVhZGVyMi54bWxQSwECLQAUAAYACAAAACEAZsJg";
  ret += "TPQBAAAmBwAAEQAAAAAAAAAAAAAAAABfHgAAd29yZC9lbmRub3Rlcy54bWxQSwECLQAUAAYACAAA";
  ret += "ACEApBZUmN0GAADXIAAAFQAAAAAAAAAAAAAAAACCIAAAd29yZC90aGVtZS90aGVtZTEueG1sUEsB";
  ret += "Ai0AFAAGAAgAAAAhAEM7jD20BAAA0QwAABEAAAAAAAAAAAAAAAAAkicAAHdvcmQvc2V0dGluZ3Mu";
  ret += "eG1sUEsBAi0AFAAGAAgAAAAhAMbJqcoBDAAAi3QAAA8AAAAAAAAAAAAAAAAAdSwAAHdvcmQvc3R5";
  ret += "bGVzLnhtbFBLAQItABQABgAIAAAAIQCTdtZJGAEAAEACAAAUAAAAAAAAAAAAAAAAAKM4AAB3b3Jk";
  ret += "L3dlYlNldHRpbmdzLnhtbFBLAQItABQABgAIAAAAIQBeV3f+XQEAALsCAAARAAAAAAAAAAAAAAAA";
  ret += "AO05AABkb2NQcm9wcy9jb3JlLnhtbFBLAQItABQABgAIAAAAIQAywCK3+AEAAEcFAAASAAAAAAAA";
  ret += "AAAAAAAAAIY8AAB3b3JkL2ZvbnRUYWJsZS54bWxQSwECLQAUAAYACAAAACEAKtE0vlwBAACbAgAA";
  ret += "EAAAAAAAAAAAAAAAAACuPgAAZG9jUHJvcHMvYXBwLnhtbFBLBQYAAAAAEwATALQEAABYQQAAAAA=";
  return ret;
}

実行画面

WordJavaScriptAPI_01

おわりに

コードと実行画面を見ると分かる通り、画像や文書の挿入、文字列装飾や検索など、基本的な処理が短いコードで実行できます。

WordJs_1.3_Openspec」ではWord JavaScript API Version 1.3の概要が載っていて、これを見ると新たにドキュメントの作成(createDocumentメソッド)やテーブルの追加(insertTableメソッド)機能が追加されるようですが、現時点(2016/6/2 時点)ではまだ機能が追加されていないようでした。

今後ますます便利になるであろうOffice アドイン、みなさんも是非開発してみてください!

関連記事

  1. Office関連

    [Word VBA]引数の型がVariantになっているのはなぜ?

    インストラクターのネタ帳でお馴染みの伊藤さんが先日下記の記事をアップさ…

  2. Office関連

    Office 365 unified APIをVBAから呼び出す

    前回の記事で、VBAからOffice 365 APIを呼び出す手順につ…

  3. Office関連

    Excel REST APIをVBAから呼び出す方法

    「Microsoft GraphをVBAから呼び出してOneNoteの…

  4. Office関連

    「Office 2003 のコマンドに対応する Office 2010 のリファレンス ブック」のダ…

    クリックさんのブログ記事「旧メニュー対応表を使いたい: パソコンのツボ…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP