internal/templates/PSFModule-1.1.0.0.xml

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>PSModuleDevelopment.Template.Template</T>
      <T>System.Object</T>
    </TN>
    <ToString>PSModuleDevelopment.Template.Template</ToString>
    <Props>
      <S N="Name">PSFModule</S>
      <Obj N="Type" RefId="1">
        <TN RefId="1">
          <T>PSModuleDevelopment.Template.TemplateType</T>
          <T>System.Enum</T>
          <T>System.ValueType</T>
          <T>System.Object</T>
        </TN>
        <ToString>Project</ToString>
        <I32>1</I32>
      </Obj>
      <Version N="Version">1.1.0.0</Version>
      <S N="Description">PowerShell Framework based module scaffold</S>
      <S N="Author">Friedrich Weinmann</S>
      <DT N="CreatedOn">2019-01-29T00:00:00+00:00</DT>
      <Obj N="Tags" RefId="2">
        <TN RefId="2">
          <T>System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <S>module</S>
          <S>psframework</S>
        </LST>
      </Obj>
      <Obj N="Parameters" RefId="3">
        <TNRef RefId="2" />
        <LST>
          <S>name</S>
          <S>author</S>
          <S>company</S>
          <S>description</S>
        </LST>
      </Obj>
      <Obj N="Scripts" RefId="4">
        <TN RefId="3">
          <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[PSModuleDevelopment.Template.ParameterScript, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">psframework</S>
            <Obj N="Value" RefId="5">
              <TN RefId="4">
                <T>PSModuleDevelopment.Template.ParameterScript</T>
                <T>System.Object</T>
              </TN>
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">psframework</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALcHNmcmFtZXdvcmsJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">year</S>
            <Obj N="Value" RefId="6">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">year</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEeWVhcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">date</S>
            <Obj N="Value" RefId="7">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">date</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZGF0ZQkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAJg0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eS1NTS1kZCINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testfolder</S>
            <Obj N="Value" RefId="8">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</S>
                <S N="Name">testfolder</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKdGVzdGZvbGRlcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAACQ0KCQkJDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guid</S>
            <Obj N="Value" RefId="9">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">guid</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZ3VpZAkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testresults</S>
            <Obj N="Value" RefId="10">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_@'_x000D__x000A_$results = Invoke-Pester -Script $file.FullName -Show $Show -PassThru_x000D__x000A_'@_x000D__x000A__x0009__x0009_</S>
                <S N="Name">testresults</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_@'_x000D__x000A_$results = Invoke-Pester -Script $file.FullName -Show $Show -PassThru_x000D__x000A_'@_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALdGVzdHJlc3VsdHMJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAFYNCgkJCUAnDQokcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLVNjcmlwdCAkZmlsZS5GdWxsTmFtZSAtU2hvdyAkU2hvdyAtUGFzc1RocnUNCidADQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">dynamicscript_612588</S>
            <Obj N="Value" RefId="11">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript"> Get-Date -Format 'yyyy-MM-dd' </S>
                <S N="Name">dynamicscript_612588</S>
                <SBK N="ScriptBlock"> Get-Date -Format 'yyyy-MM-dd' </SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF82MTI1ODgJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAB8gR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcgCw==</BA>
              </MS>
            </Obj>
          </En>
        </DCT>
      </Obj>
      <Obj N="Children" RefId="12">
        <TN RefId="5">
          <T>System.Collections.Generic.List`1[[PSModuleDevelopment.Template.TemplateItemBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <Obj RefId="13">
            <TN RefId="6">
              <T>PSModuleDevelopment.Template.TemplateItemFolder</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="14">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">bin</S>
              <S N="RelativePath">bin</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="15">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="16">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA2JpbgYFAAAAA2JpbgYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAAO4CIyBiaW4gZm9sZGVyDQoNClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uDQoNClRoaXMgbWF5IGluY2x1ZGUgeW91ciBvd24gQyMtYmFzZWQgbGlicmFyeSwgdGhpcmQgcGFydHkgbGlicmFyaWVzIHlvdSB3YW50IHRvIGluY2x1ZGUgKHdhdGNoIHRoZSBsaWNlbnNlISksIG9yIGEgc2NyaXB0IGRlY2xhcmluZyB0eXBlIGFjY2VsZXJhdG9ycyAoZWZmZWN0aXZlbHkgYWxpYXNlcyBmb3IgLk5FVCB0eXBlcykNCg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAAA1iaW5ccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="17">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="18">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">en-us</S>
              <S N="RelativePath">en-us</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="19">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="20">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABWVuLXVzBgUAAAAFZW4tdXMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAAAgAAAAIAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAADQIRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDQAAAKUBVE9QSUMNCglhYm91dF/Dvm5hbWXDvg0KCQ0KU0hPUlQgREVTQ1JJUFRJT04NCglFeHBsYWlucyBob3cgdG8gdXNlIHRoZSDDvm5hbWXDviBwb3dlcnNoZWxsIG1vZHVsZQ0KCQ0KTE9ORyBERVNDUklQVElPTg0KCTxJbnNlcnQgQ29udGVudCBoZXJlPg0KDQpLRVlXT1JEUw0KCcO+bmFtZcO+AQkOAAAACQ8AAAAGEAAAABdhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAYRAAAAHWVuLXVzXGFib3V0X8O+bmFtZcO+LmhlbHAudHh0CQYAAAAJEwAAAAkUAAAAAQwAAAALAAAABhUAAACdASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQ0KIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2Nrcw0KQHsNCgkna2V5JyA9ICdWYWx1ZScNCn0BCRYAAAAJFwAAAAYYAAAADHN0cmluZ3MucHNkMQYZAAAAEmVuLXVzXHN0cmluZ3MucHNkMQkGAAAACRsAAAAJHAAAAAEOAAAABwAAAAkdAAAAAQAAAAEAAAABDwAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACR8AAAABAAAAAQAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFgAAAAcAAAAJCgAAAAAAAAAAAAAAARcAAAAHAAAACQoAAAAAAAAAAAAAAAEbAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJCgAAAAAAAAAAAAAAER0AAAAEAAAABiEAAAAEbmFtZQ0DER8AAAAEAAAABiIAAAAEbmFtZQ0DCw==</BA>
            </MS>
          </Obj>
          <Obj RefId="21">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="22">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">functions</S>
              <S N="RelativePath">functions</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="23">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="24">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACWZ1bmN0aW9ucwYFAAAACWZ1bmN0aW9ucwYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAABAAAAAQAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAADQMRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDAAAANIBIyBGdW5jdGlvbnMNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uDQoNCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQkNAAAACQ4AAAAGDwAAAAlyZWFkbWUubWQGEAAAABNmdW5jdGlvbnNccmVhZG1lLm1kCQYAAAAJEgAAAAkTAAAAAQ0AAAAHAAAACQoAAAAAAAAAAAAAAAEOAAAABwAAAAkKAAAAAAAAAAAAAAABEgAAAAcAAAAJCgAAAAAAAAAAAAAAARMAAAAHAAAACQoAAAAAAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="25">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="26">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                </LST>
              </Obj>
              <S N="Name">internal</S>
              <S N="RelativePath">internal</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="27">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="28">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAACGludGVybmFsBgUAAAAIaW50ZXJuYWwGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABQAAAAUAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAAAkPAAAADQMRCgAAAAAAAAABCwAAAAEAAAAJEAAAAAYRAAAADmNvbmZpZ3VyYXRpb25zBhIAAAAXaW50ZXJuYWxcY29uZmlndXJhdGlvbnMJBgAAAAkUAAAACRUAAAABDAAAAAEAAAAJFgAAAAYXAAAACWZ1bmN0aW9ucwYYAAAAEmludGVybmFsXGZ1bmN0aW9ucwkGAAAACRoAAAAJGwAAAAENAAAAAQAAAAkcAAAABh0AAAAMc2NyaXB0YmxvY2tzBh4AAAAVaW50ZXJuYWxcc2NyaXB0YmxvY2tzCQYAAAAJIAAAAAkhAAAAAQ4AAAABAAAACSIAAAAGIwAAAAdzY3JpcHRzBiQAAAAQaW50ZXJuYWxcc2NyaXB0cwkGAAAACSYAAAAJJwAAAAEPAAAAAQAAAAkoAAAABikAAAAEdGVwcAYqAAAADWludGVybmFsXHRlcHAJBgAAAAksAAAACS0AAAABEAAAAAMAAAAJLgAAAAIAAAACAAAAARQAAAAHAAAACQoAAAAAAAAAAAAAAAEVAAAABwAAAAkKAAAAAAAAAAAAAAABFgAAAAMAAAAJMAAAAAEAAAABAAAAARoAAAAHAAAACQoAAAAAAAAAAAAAAAEbAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAMAAAAJMgAAAAEAAAABAAAAASAAAAAHAAAACQoAAAAAAAAAAAAAAAEhAAAABwAAAAkKAAAAAAAAAAAAAAABIgAAAAMAAAAJNAAAAAQAAAAEAAAAASYAAAAHAAAACQoAAAAAAAAAAAAAAAEnAAAABwAAAAkKAAAAAAAAAAAAAAABKAAAAAMAAAAJNgAAAAMAAAADAAAAASwAAAAHAAAACQoAAAAAAAAAAAAAAAEtAAAABwAAAAkKAAAAAAAAAAAAAAAHLgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAk4AAAACTkAAAANAgcwAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACToAAAANAwcyAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTsAAAANAwc0AAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACTwAAAAJPQAAAAk+AAAACT8AAAAHNgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlAAAAACUEAAAAJQgAAAAoFOAAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGQwAAAMAJPCMNClRoaXMgaXMgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUNCg0KQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sDQpob3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwNCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4NCiM+DQoNCjwjDQojIEV4YW1wbGUgQ29uZmlndXJhdGlvbg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIg0KIz4NCg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgEJRAAAAAlFAAAABkYAAAARY29uZmlndXJhdGlvbi5wczEGRwAAAClpbnRlcm5hbFxjb25maWd1cmF0aW9uc1xjb25maWd1cmF0aW9uLnBzMQkGAAAACUkAAAAJSgAAAAE5AAAAOAAAAAZLAAAA/gMjIENvbmZpZ3VyYXRpb25zDQoNClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4NCg0KIC0gUHVibGlzaCBzZXR0aW5ncw0KIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24NCiAtIElucHV0IHZhbGlkYXRpb24NCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzDQogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyDQogLSBUaGF0IGNhbiBiZSBhZG1pbmlzdHJhdGVkIGJ5IHBvbGljeSAmIERTQw0KDQpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4NCg0KQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCUwAAAAJTQAAAAZOAAAACXJlYWRtZS5tZAZPAAAAIWludGVybmFsXGNvbmZpZ3VyYXRpb25zXHJlYWRtZS5tZAkGAAAACVEAAAAJUgAAAAE6AAAAOAAAAAZTAAAA2wEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCVQAAAAJVQAAAAZWAAAACXJlYWRtZS5tZAZXAAAAHGludGVybmFsXGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAlZAAAACVoAAAABOwAAADgAAAAGWwAAAIQDPCMNClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4NClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLA0Kd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLg0KDQpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sNCmhhcmQgdG8gcmVhZC4NCg0KU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7DQoJDQp9DQojPgEJXAAAAAldAAAABl4AAAAQc2NyaXB0YmxvY2tzLnBzMQZfAAAAJmludGVybmFsXHNjcmlwdGJsb2Nrc1xzY3JpcHRibG9ja3MucHMxCQYAAAAJYQAAAAliAAAAATwAAAA4AAAABmMAAAD2CU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCINCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLg0KIkABCWQAAAAJZQAAAAZmAAAAC2xpY2Vuc2UucHMxBmcAAAAcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQkGAAAACWkAAAAJagAAAAE9AAAAOAAAAAZrAAAArgYjIEFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gY29kZQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCmZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7DQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZmlsZS5GdWxsTmFtZQ0KfQ0KDQojIExvYWQgU2NyaXB0YmxvY2tzDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCi4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIg0KDQojIExvYWQgTGljZW5zZQ0KLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQlsAAAACW0AAAAGbgAAAA5wb3N0aW1wb3J0LnBzMQZvAAAAH2ludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEJBgAAAAlxAAAACXIAAAABPgAAADgAAAAGcwAAALYBIyBBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBjb2RlDQoNCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzDQouIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCXQAAAAJdQAAAAZ2AAAADXByZWltcG9ydC5wczEGdwAAAB5pbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJBgAAAAl5AAAACXoAAAABPwAAADgAAAAGewAAALgDPCMNClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLg0KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLg0KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuDQpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwNCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4NCiM+DQpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICfDvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCXwAAAAJfQAAAAZ+AAAAC3N0cmluZ3MucHMxBn8AAAAcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMQkGAAAACYEAAAAJggAAAAFAAAAAOAAAAAaDAAAAcTwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wNCiM+AQmEAAAACYUAAAAGhgAAAA5hc3NpZ25tZW50LnBzMQaHAAAAHGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEJBgAAAAmJAAAACYoAAAABQQAAADgAAAAGiwAAAKMBPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9DQojPgEJjAAAAAmNAAAABo4AAAAQZXhhbXBsZS50ZXBwLnBzMQaPAAAAHmludGVybmFsXHRlcHBcZXhhbXBsZS50ZXBwLnBzMQkGAAAACZEAAAAJkgAAAAFCAAAAOAAAAAaTAAAAvgcjIFRhYiBFeHBhbnNpb24NCg0KIyMgRGVzY3JpcHRpb24NCg0KTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuDQoNCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4NCg0KVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4NCg0KIyMgQ29uY2VwdA0KDQpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6DQoNCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0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</BA>
            </MS>
          </Obj>
          <Obj RefId="29">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="30">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">tests</S>
              <S N="RelativePath">tests</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="31">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="32">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAABXRlc3RzBgUAAAAFdGVzdHMGBgAAAALDvgkHAAAACQgAAAAEAwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkJAAAABAAAAAQAAAAEBwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkKAAAAAAAAAAAAAAABCAAAAAcAAAAJCgAAAAAAAAAAAAAABwkAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJCwAAAAkMAAAACQ0AAAAJDgAAABEKAAAAAAAAAAELAAAAAQAAAAkPAAAABhAAAAAJZnVuY3Rpb25zBhEAAAAPdGVzdHNcZnVuY3Rpb25zCQYAAAAJEwAAAAkUAAAAAQwAAAABAAAACRUAAAAGFgAAAAdnZW5lcmFsBhcAAAANdGVzdHNcZ2VuZXJhbAkGAAAACRkAAAAJGgAAAAUNAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYbAAAA1BVwYXJhbSAoDQoJJFRlc3RHZW5lcmFsID0gJHRydWUsDQoJDQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwNCgkNCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnRGVmYXVsdCcsICdQYXNzZWQnLCAnRmFpbGVkJywgJ1BlbmRpbmcnLCAnU2tpcHBlZCcsICdJbmNvbmNsdXNpdmUnLCAnRGVzY3JpYmUnLCAnQ29udGV4dCcsICdTdW1tYXJ5JywgJ0hlYWRlcicsICdGYWlscycsICdBbGwnKV0NCgkkU2hvdyA9ICJOb25lIiwNCgkNCgkkSW5jbHVkZSA9ICIqIiwNCgkNCgkkRXhjbHVkZSA9ICIiDQopDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiU3RhcnRpbmcgVGVzdHMiDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiSW1wb3J0aW5nIE1vZHVsZSINCg0KUmVtb3ZlLU1vZHVsZSDDvm5hbWXDviAtRXJyb3JBY3Rpb24gSWdub3JlDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzZDEiDQpJbXBvcnQtTW9kdWxlICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+LnBzbTEiIC1Gb3JjZQ0KDQrDviF0ZXN0Zm9sZGVyIcO+DQoNCiR0b3RhbEZhaWxlZCA9IDANCiR0b3RhbFJ1biA9IDANCg0KJHRlc3RyZXN1bHRzID0gQCgpDQoNCiNyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMNCmlmICgkVGVzdEdlbmVyYWwpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJNb2R1bGVzIGltcG9ydGVkLCBwcm9jZWVkaW5nIHdpdGggZ2VuZXJhbCB0ZXN0cyINCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxnZW5lcmFsIiB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLlRlc3RzLnBzMSIpKQ0KCXsNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nIDxjPSdlbSc+JCgkZmlsZS5OYW1lKTwvYz4iDQoJCcO+IXRlc3RyZXN1bHRzIcO+DQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RSZXN1bHQgfCBXaGVyZS1PYmplY3QgeyAtbm90ICRfLlBhc3NlZCB9IHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSRuYW1lID0gJF8uTmFtZQ0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJRGVzY3JpYmUgPSAkXy5EZXNjcmliZQ0KCQkJCQlDb250ZXh0ICA9ICRfLkNvbnRleHQNCgkJCQkJTmFtZQkgPSAiSXQgJG5hbWUiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRmFpbHVyZU1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQoNCiNyZWdpb24gVGVzdCBDb21tYW5kcw0KaWYgKCRUZXN0RnVuY3Rpb25zKQ0Kew0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyINCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkNCgl7DQoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KCQkNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiDQoJCcO+IXRlc3RyZXN1bHRzIcO+DQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RSZXN1bHQgfCBXaGVyZS1PYmplY3QgeyAtbm90ICRfLlBhc3NlZCB9IHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSRuYW1lID0gJF8uTmFtZQ0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJRGVzY3JpYmUgPSAkXy5EZXNjcmliZQ0KCQkJCQlDb250ZXh0ICA9ICRfLkNvbnRleHQNCgkJCQkJTmFtZQkgPSAiSXQgJG5hbWUiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRmFpbHVyZU1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFRlc3QgQ29tbWFuZHMNCg0KJHRlc3RyZXN1bHRzIHwgU29ydC1PYmplY3QgRGVzY3JpYmUsIENvbnRleHQsIE5hbWUsIFJlc3VsdCwgTWVzc2FnZSB8IEZvcm1hdC1MaXN0DQoNCmlmICgkdG90YWxGYWlsZWQgLWVxIDApIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIkFsbCA8Yz0nZW0nPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZXhlY3V0ZWQgd2l0aG91dCBhIHNpbmdsZSBmYWlsdXJlISIgfQ0KZWxzZSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICI8Yz0nZW0nPiR0b3RhbEZhaWxlZCB0ZXN0czwvYz4gb3V0IG9mIDxjPSdzdWInPiR0b3RhbFJ1bjwvYz4gdGVzdHMgZmFpbGVkISIgfQ0KDQppZiAoJHRvdGFsRmFpbGVkIC1ndCAwKQ0Kew0KCXRocm93ICIkdG90YWxGYWlsZWQgLyAkdG90YWxSdW4gdGVzdHMgZmFpbGVkISINCn0BCRwAAAAJHQAAAAYeAAAACnBlc3Rlci5wczEGHwAAABB0ZXN0c1xwZXN0ZXIucHMxCQYAAAAJIQAAAAkiAAAAAQ4AAAANAAAABiMAAACiByMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLg0KDQpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoNCg0KIC0gR2VuZXJhbA0KIC0gRnVuY3Rpb24NCg0KIyMgR2VuZXJhbCBUZXN0cw0KDQpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLg0KDQpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOg0KDQogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8NCiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8NCiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/DQogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/DQogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPw0KDQpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLg0KDQpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4NCg0KIyMgRnVuY3Rpb24gVGVzdHMNCg0KQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4NCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4NCg0KSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJJAAAAAklAAAABiYAAAAJcmVhZG1lLm1kBicAAAAPdGVzdHNccmVhZG1lLm1kCQYAAAAJKQAAAAkqAAAAAQ8AAAADAAAACSsAAAABAAAAAQAAAAETAAAABwAAAAkKAAAAAAAAAAAAAAABFAAAAAcAAAAJCgAAAAAAAAAAAAAAARUAAAADAAAACS0AAAAGAAAABgAAAAEZAAAABwAAAAkKAAAAAAAAAAAAAAABGgAAAAcAAAAJCgAAAAAAAAAAAAAAARwAAAAHAAAACS8AAAABAAAAAQAAAAEdAAAABwAAAAkwAAAAAwAAAAMAAAABIQAAAAcAAAAJCgAAAAAAAAAAAAAAASIAAAAHAAAACQoAAAAAAAAAAAAAAAEkAAAABwAAAAkKAAAAAAAAAAAAAAABJQAAAAcAAAAJCgAAAAAAAAAAAAAAASkAAAAHAAAACQoAAAAAAAAAAAAAAAEqAAAABwAAAAkKAAAAAAAAAAAAAAAHKwAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkyAAAADQMHLQAAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkzAAAACTQAAAAJNQAAAAk2AAAACTcAAAAJOAAAAA0CES8AAAAEAAAABjkAAAAEbmFtZQ0DETAAAAAEAAAABjoAAAAKdGVzdGZvbGRlcgY7AAAAC3Rlc3RyZXN1bHRzBjwAAAALdGVzdHJlc3VsdHMKATIAAAANAAAABj0AAADVASMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGVzdHMgZ28uDQoNCk1ha2Ugc3VyZSB0byBwdXQgdGhlbSBpbiBmb2xkZXJzIHJlZmxlY3RpbmcgdGhlIGFjdHVhbCBtb2R1bGUgc3RydWN0dXJlLg0KDQpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJPgAAAAk/AAAABkAAAAAJcmVhZG1lLm1kBkEAAAAZdGVzdHNcZnVuY3Rpb25zXHJlYWRtZS5tZAkGAAAACUMAAAAJRAAAAAEzAAAADQAAAAZFAAAA3QUjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzDQokZ2xvYmFsOkJhbm5lZENvbW1hbmRzID0gQCgNCgknV3JpdGUtSG9zdCcsDQoJJ1dyaXRlLVZlcmJvc2UnLA0KCSdXcml0ZS1XYXJuaW5nJywNCgknV3JpdGUtRXJyb3InLA0KCSdXcml0ZS1PdXRwdXQnLA0KCSdXcml0ZS1JbmZvcm1hdGlvbicsDQoJJ1dyaXRlLURlYnVnJywNCgkNCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQ0KCSdHZXQtV21pT2JqZWN0JywNCgknSW52b2tlLVdtaU1ldGhvZCcsDQoJJ1JlZ2lzdGVyLVdtaUV2ZW50JywNCgknUmVtb3ZlLVdtaU9iamVjdCcsDQoJJ1NldC1XbWlJbnN0YW5jZScNCikNCg0KPCMNCglDb250YWlucyBsaXN0IG9mIGV4Y2VwdGlvbnMgZm9yIGJhbm5lZCBjbWRsZXRzLg0KCUluc2VydCB0aGUgZmlsZSBuYW1lcyBvZiBmaWxlcyB0aGF0IG1heSBjb250YWluIHRoZW0uDQoJDQoJRXhhbXBsZToNCgkiV3JpdGUtSG9zdCIgID0gQCgnV3JpdGUtUFNGSG9zdENvbG9yLnBzMScsJ1dyaXRlLVBTRk1lc3NhZ2UucHMxJykNCiM+DQokZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kID0gQHsNCgkiV3JpdGUtSG9zdCIgID0gQCgpDQoJIldyaXRlLVZlcmJvc2UiID0gQCgpDQoJIldyaXRlLVdhcm5pbmciID0gQCgpDQoJIldyaXRlLUVycm9yIiAgPSBAKCkNCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQ0KCSJXcml0ZS1JbmZvcm1hdGlvbiIgPSBAKCkNCgkiV3JpdGUtRGVidWciID0gQCgpDQp9AQlGAAAACUcAAAAGSAAAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBkkAAAAqdGVzdHNcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCQYAAAAJSwAAAAlMAAAAATQAAAANAAAABk0AAADQFiRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLiIpLlBhdGgNCg0KLiAiJFBTU2NyaXB0Um9vdFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIg0KDQpmdW5jdGlvbiBHZXQtRmlsZUVuY29kaW5nDQp7DQo8Iw0KCS5TWU5PUFNJUw0KCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQ0KCS5ERVNDUklQVElPTg0KCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQ0KCS5QQVJBTUVURVIgUGF0aA0KCQlUaGUgZmlsZSB0byB0ZXN0DQojPg0KCVtDbWRsZXRCaW5kaW5nKCldDQoJUGFyYW0gKA0KCQlbUGFyYW1ldGVyKE1hbmRhdG9yeSA9ICRUcnVlLCBWYWx1ZUZyb21QaXBlbGluZUJ5UHJvcGVydHlOYW1lID0gJFRydWUpXQ0KCQlbQWxpYXMoJ0Z1bGxOYW1lJyldDQoJCVtzdHJpbmddDQoJCSRQYXRoDQoJKQ0KCQ0KCVtieXRlW11dJGJ5dGUgPSBnZXQtY29udGVudCAtRW5jb2RpbmcgYnl0ZSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aA0KCQ0KCWlmICgkYnl0ZVswXSAtZXEgMHhlZiAtYW5kICRieXRlWzFdIC1lcSAweGJiIC1hbmQgJGJ5dGVbMl0gLWVxIDB4YmYpIHsgJ1VURjgnIH0NCgllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0NCgllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQ0KCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4MmIgLWFuZCAkYnl0ZVsxXSAtZXEgMHgyZiAtYW5kICRieXRlWzJdIC1lcSAweDc2KSB7ICdVVEY3JyB9DQoJZWxzZSB7ICdVbmtub3duJyB9DQp9DQoNCkRlc2NyaWJlICJWZXJpZnlpbmcgaW50ZWdyaXR5IG9mIG1vZHVsZSBmaWxlcyIgew0KCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgew0KCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4Jw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgew0KCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDB9KS5MaW5lTnVtYmVyIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCQl9DQoJCQkNCgkJCSR0b2tlbnMgPSAkbnVsbA0KCQkJJHBhcnNlRXJyb3JzID0gJG51bGwNCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHN5bnRheCBlcnJvcnMiIHsNCgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgQmUgJE51bGwNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykNCgkJCXsNCgkJCQlpZiAoJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZFsiJGNvbW1hbmQiXSAtbm90Y29udGFpbnMgJGZpbGUuTmFtZSkNCgkJCQl7DQoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiB7DQoJCQkJCQkkdG9rZW5zIHwgV2hlcmUtT2JqZWN0IFRleHQgLUVRICRjb21tYW5kIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgY29udGFpbiBhbGlhc2VzIiB7DQoJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUb2tlbkZsYWdzIC1lcSBDb21tYW5kTmFtZSB8IFdoZXJlLU9iamVjdCB7IFRlc3QtUGF0aCAiYWxpYXM6XCQoJF8uVGV4dCkiIH0gfCBNZWFzdXJlLU9iamVjdCB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IENvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQoJDQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7DQoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5oZWxwLnR4dCIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCcNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwIH0gfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfCBTaG91bGQgLUJlIDANCgkJCX0NCgkJfQ0KCX0NCn0BCU4AAAAJTwAAAAZQAAAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBlEAAAAldGVzdHNcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQkGAAAACVMAAAAJVAAAAAE1AAAADQAAAAZVAAAAnQUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQNCiRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgPSBAKA0KICAgIA0KKQ0KDQo8Iw0KICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuDQogIEV4YW1wbGU6DQoNCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSINCiM+DQokZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cyA9IEAoDQoJDQopDQoNCjwjDQogIFNvbWUgdHlwZXMgb24gcGFyYW1ldGVycyBqdXN0IGZhaWwgdGhlaXIgdmFsaWRhdGlvbiBubyBtYXR0ZXIgd2hhdC4NCiAgRm9yIHRob3NlIGl0IGJlY29tZXMgcG9zc2libGUgdG8gc2tpcCB0aGVtLCBieSBhZGRpbmcgdGhlbSB0byB0aGlzIGhhc2h0YWJsZS4NCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQ0KICBFeGFtcGxlOg0KDQogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQ0KIz4NCiRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZSA9IEB7DQogICAgDQp9DQoBCVYAAAAJVwAAAAZYAAAAE0hlbHAuRXhjZXB0aW9ucy5wczEGWQAAACF0ZXN0c1xnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEJBgAAAAlbAAAACVwAAAABNgAAAA0AAAAGXQAAAP9FPCMNCiAgICAuTk9URVMNCiAgICAgICAgVGhlIG9yaWdpbmFsIHRlc3QgdGhpcyBpcyBiYXNlZCB1cG9uIHdhcyB3cml0dGVuIGJ5IEp1bmUgQmxlbmRlci4NCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4NCg0KCQlUaGFuayB5b3UgSnVuZSwgZm9yIGFsbCB5b3UgaGF2ZSBkb25lIQ0KDQogICAgLkRFU0NSSVBUSU9ODQoJCVRoaXMgdGVzdCBldmFsdWF0ZXMgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBpbiBhIG1vZHVsZS4NCg0KCS5QQVJBTUVURVIgU2tpcFRlc3QNCgkJRGlzYWJsZXMgdGhpcyB0ZXN0Lg0KCQ0KCS5QQVJBTUVURVIgQ29tbWFuZFBhdGgNCgkJTGlzdCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWQuDQoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4NCgkJVGhlc2UgcGF0aHMgYXJlIHVzZWQgdG8gc2VhcmNoIGZvciBjb21tYW5kcyB0aGF0IHNob3VsZCBleGlzdCBhbmQgYmUgdGVzdGVkLg0KCQlXaWxsIHNlYXJjaCByZWN1cnNpdmVseSBhbmQgYWNjZXB0cyB3aWxkY2FyZHMsIG1ha2Ugc3VyZSBvbmx5IGZ1bmN0aW9ucyBhcmUgZm91bmQNCg0KCS5QQVJBTUVURVIgTW9kdWxlTmFtZQ0KCQlOYW1lIG9mIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLg0KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZA0KDQoJLlBBUkFNRVRFUiBFeGNlcHRpb25zRmlsZQ0KCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLg0KCQlJbiBpdCB0aGVyZSBzaG91bGQgYmUgdHdvIGFycmF5cyBhbmQgYSBoYXNodGFibGUgZGVmaW5lZDoNCgkJCSRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMNCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzDQoJCQkkZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUNCgkJVGhlc2UgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIHRlc3RzIHNsaWdodGx5IGluIGNhc2VzIG9mIG5lZWQuDQoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0Lg0KIz4NCltDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRQU1NjcmlwdFJvb3RcLi5cLi5cZnVuY3Rpb25zIiwgIiRQU1NjcmlwdFJvb3RcLi5cLi5caW50ZXJuYWxcZnVuY3Rpb25zIiksDQoJDQoJW3N0cmluZ10NCgkkTW9kdWxlTmFtZSA9ICLDvm5hbWXDviIsDQoJDQoJW3N0cmluZ10NCgkkRXhjZXB0aW9uc0ZpbGUgPSAiJFBTU2NyaXB0Um9vdFxIZWxwLkV4Y2VwdGlvbnMucHMxIg0KKQ0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KLiAkRXhjZXB0aW9uc0ZpbGUNCg0KJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQ0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlIENtZGxldCwgRnVuY3Rpb24sIFdvcmtmbG93IHwgV2hlcmUtT2JqZWN0IE5hbWUgLWluICRpbmNsdWRlZE5hbWVzDQoNCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLg0KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLg0KDQoNCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgew0KICAgICRjb21tYW5kTmFtZSA9ICRjb21tYW5kLk5hbWUNCiAgICANCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0DQogICAgaWYgKCRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgLWNvbnRhaW5zICRjb21tYW5kTmFtZSkgeyBjb250aW51ZSB9DQogICAgDQogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cw0KICAgICRIZWxwID0gR2V0LUhlbHAgJGNvbW1hbmROYW1lIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgJHRlc3RoZWxwZXJyb3JzID0gMA0KICAgICR0ZXN0aGVscGFsbCA9IDANCiAgICBEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmICgkSGVscC5TeW5vcHNpcyAtbGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonKSB7DQogICAgICAgICAgICAjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQ0KICAgICAgICAgICAgSXQgInNob3VsZCBub3QgYmUgYXV0by1nZW5lcmF0ZWQiIHsNCiAgICAgICAgICAgICAgICAkSGVscC5TeW5vcHNpcyB8IFNob3VsZCAtTm90IC1CZUxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRlc3RoZWxwZXJyb3JzICs9IDENCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHRlc3RoZWxwYWxsICs9IDENCiAgICAgICAgaWYgKFtTdHJpbmddOjpJc051bGxPckVtcHR5KCRIZWxwLkRlc2NyaXB0aW9uLlRleHQpKSB7DQogICAgICAgICAgICAjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBmdW5jdGlvbg0KICAgICAgICAgICAgSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgICAgICRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyArPSAxDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmIChbU3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUpKSB7DQogICAgICAgICAgICAjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQ0KICAgICAgICAgICAgSXQgImdldHMgZXhhbXBsZSBjb2RlIGZyb20gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyArPSAxDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmIChbU3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCkpIHsNCiAgICAgICAgICAgICMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uDQogICAgICAgICAgICBJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgICAgICAoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZiAoJHRlc3RoZWxwZXJyb3JzIC1lcSAwKSB7DQogICAgICAgICAgICBJdCAiUmFuIHNpbGVudGx5ICR0ZXN0aGVscGFsbCB0ZXN0cyIgew0KICAgICAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyB8IFNob3VsZCAtYmUgMA0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdHBhcmFtc2FsbCA9IDANCiAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgPSAwDQogICAgICAgIENvbnRleHQgIlRlc3QgcGFyYW1ldGVyIGhlbHAgZm9yICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAkQ29tbW9uID0gJ0RlYnVnJywgJ0Vycm9yQWN0aW9uJywgJ0Vycm9yVmFyaWFibGUnLCAnSW5mb3JtYXRpb25BY3Rpb24nLCAnSW5mb3JtYXRpb25WYXJpYWJsZScsICdPdXRCdWZmZXInLCAnT3V0VmFyaWFibGUnLA0KICAgICAgICAgICAgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSAkY29tbWFuZC5QYXJhbWV0ZXJTZXRzLlBhcmFtZXRlcnMgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgTmFtZSAtVW5pcXVlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLW5vdGluICRjb21tb24NCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUNCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlciBpbiAkcGFyYW1ldGVycykgew0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lDQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCkpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyDQogICAgICAgICAgICAgICAgICAgIEl0ICJnZXRzIGhlbHAgZm9yIHBhcmFtZXRlcjogJHBhcmFtZXRlck5hbWUgOiBpbiAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNhbGwgKz0gMQ0KICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXJIZWxwLlJlcXVpcmVkIC1uZSAkY29kZU1hbmRhdG9yeSkgew0KICAgICAgICAgICAgICAgICAgICAjIFJlcXVpcmVkIHZhbHVlIGluIEhlbHAgc2hvdWxkIG1hdGNoIElzTWFuZGF0b3J5IHByb3BlcnR5IG9mIHBhcmFtZXRlcg0KICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLlJlcXVpcmVkIHwgU2hvdWxkIC1CZSAkY29kZU1hbmRhdG9yeQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlWyRjb21tYW5kTmFtZV0gLWNvbnRhaW5zICRwYXJhbWV0ZXJOYW1lKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkY29kZVR5cGUgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuTmFtZQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLklzRW51bSkgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSAtbmUgJG5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgIEl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZWlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUgLWluICRIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgLW5lICRuYW1lcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4NCiAgICAgICAgICAgICAgICAgICAgJGhlbHBUeXBlID0gaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlKSB7ICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlLlRyaW0oKSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaGVscFR5cGUgLW5lICRjb2RlVHlwZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoICgkaGVscFBhcm0gaW4gJEhlbHBQYXJhbWV0ZXJOYW1lcykgew0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICBpZiAoJGhlbHBQYXJtIC1ub3RpbiAkcGFyYW1ldGVyTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBTaG91bGRuJ3QgZmluZCBleHRyYSBwYXJhbWV0ZXJzIGluIGhlbHAuDQogICAgICAgICAgICAgICAgICAgIEl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJHRlc3RwYXJhbXNlcnJvcnMgLWVxIDApIHsNCiAgICAgICAgICAgICAgICBJdCAiUmFuIHNpbGVudGx5ICR0ZXN0cGFyYW1zYWxsIHRlc3RzIiB7DQogICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzIHwgU2hvdWxkIC1iZSAwDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQEJXgAAAAlfAAAABmAAAAAOSGVscC5UZXN0cy5wczEGYQAAABx0ZXN0c1xnZW5lcmFsXEhlbHAuVGVzdHMucHMxCQYAAAAJYwAAAAlkAAAAATcAAAANAAAABmUAAACCDkRlc2NyaWJlICJWYWxpZGF0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3QiIHsNCgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi4iKS5QYXRoDQoJJG1hbmlmZXN0ID0gKChHZXQtQ29udGVudCAiJG1vZHVsZVJvb3Rcw75uYW1lw74ucHNkMSIpIC1qb2luICJgbiIpIHwgSW52b2tlLUV4cHJlc3Npb24NCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgew0KCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIg0KCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiB7DQoJCQkNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7DQoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIHsNCgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCRmb3JtYXQiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkdHlwZSBpbiAkbWFuaWZlc3QuVHlwZXNUb1Byb2Nlc3MpDQoJCXsNCgkJCUl0ICJUaGUgZmlsZSAkdHlwZSBzaG91bGQgZXhpc3QiIHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpDQoJCXsNCgkJCUl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJfQ0KCQl9DQoJfQ0KfQEJZgAAAAlnAAAABmgAAAASTWFuaWZlc3QuVGVzdHMucHMxBmkAAAAgdGVzdHNcZ2VuZXJhbFxNYW5pZmVzdC5UZXN0cy5wczEJBgAAAAlrAAAACWwAAAABOAAAAA0AAAAGbQAAAIcIW0NtZGxldEJpbmRpbmcoKV0NClBhcmFtICgNCglbc3dpdGNoXQ0KCSRTa2lwVGVzdCwNCgkNCglbc3RyaW5nW11dDQoJJENvbW1hbmRQYXRoID0gQCgiJFBTU2NyaXB0Um9vdFwuLlwuLlxmdW5jdGlvbnMiLCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKQ0KKQ0KDQppZiAoJFNraXBUZXN0KSB7IHJldHVybiB9DQoNCiRsaXN0ID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsNCgkkY29tbWFuZEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQoJJHNjcmlwdEFuYWx5emVyUnVsZXMgPSBHZXQtU2NyaXB0QW5hbHl6ZXJSdWxlDQoJDQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykNCgl7DQoJCUNvbnRleHQgIkFuYWx5emluZyAkKCRmaWxlLkJhc2VOYW1lKSIgew0KCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MNCgkJCQ0KCQkJZm9yRWFjaCAoJHJ1bGUgaW4gJHNjcmlwdEFuYWx5emVyUnVsZXMpDQoJCQl7DQoJCQkJSXQgIlNob3VsZCBwYXNzICRydWxlIiB7DQoJCQkJCUlmICgkYW5hbHlzaXMuUnVsZU5hbWUgLWNvbnRhaW5zICRydWxlKQ0KCQkJCQl7DQoJCQkJCQkkYW5hbHlzaXMgfCBXaGVyZS1PYmplY3QgUnVsZU5hbWUgLUVRICRydWxlIC1vdXR2YXJpYWJsZSBmYWlsdXJlcyB8IEZvckVhY2gtT2JqZWN0IHsgJGxpc3QuQWRkKCRfKSB9DQoJCQkJCQkNCgkJCQkJCTEgfCBTaG91bGQgQmUgMA0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJMCB8IFNob3VsZCBCZSAwDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCiRsaXN0IHwgT3V0LURlZmF1bHQBCW4AAAAJbwAAAAZwAAAAGlBTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxBnEAAAAodGVzdHNcZ2VuZXJhbFxQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQkGAAAACXMAAAAJdAAAAAE+AAAABwAAAAkKAAAAAAAAAAAAAAABPwAAAAcAAAAJCgAAAAAAAAAAAAAAAUMAAAAHAAAACQoAAAAAAAAAAAAAAAFEAAAABwAAAAkKAAAAAAAAAAAAAAABRgAAAAcAAAAJCgAAAAAAAAAAAAAAAUcAAAAHAAAACQoAAAAAAAAAAAAAAAFLAAAABwAAAAkKAAAAAAAAAAAAAAABTAAAAAcAAAAJCgAAAAAAAAAAAAAAAU4AAAAHAAAACQoAAAAAAAAAAAAAAAFPAAAABwAAAAkKAAAAAAAAAAAAAAABUwAAAAcAAAAJCgAAAAAAAAAAAAAAAVQAAAAHAAAACQoAAAAAAAAAAAAAAAFWAAAABwAAAAkKAAAAAAAAAAAAAAABVwAAAAcAAAAJCgAAAAAAAAAAAAAAAVsAAAAHAAAACQoAAAAAAAAAAAAAAAFcAAAABwAAAAkKAAAAAAAAAAAAAAABXgAAAAcAAAAJdgAAAAEAAAABAAAAAV8AAAAHAAAACQoAAAAAAAAAAAAAAAFjAAAABwAAAAkKAAAAAAAAAAAAAAABZAAAAAcAAAAJCgAAAAAAAAAAAAAAAWYAAAAHAAAACXgAAAABAAAAAQAAAAFnAAAABwAAAAkKAAAAAAAAAAAAAAABawAAAAcAAAAJCgAAAAAAAAAAAAAAAWwAAAAHAAAACQoAAAAAAAAAAAAAAAFuAAAABwAAAAkKAAAAAAAAAAAAAAABbwAAAAcAAAAJCgAAAAAAAAAAAAAAAXMAAAAHAAAACQoAAAAAAAAAAAAAAAF0AAAABwAAAAkKAAAAAAAAAAAAAAARdgAAAAQAAAAGegAAAARuYW1lDQMReAAAAAQAAAAGewAAAARuYW1lDQML</BA>
            </MS>
          </Obj>
          <Obj RefId="33">
            <TNRef RefId="6" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="34">
                <TNRef RefId="5" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">xml</S>
              <S N="RelativePath">xml</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="35">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="36">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAA3htbAYFAAAAA3htbAYGAAAAAsO+CQcAAAAJCAAAAAQDAAAAngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZVtdAgAAAAgICQkAAAADAAAAAwAAAAQHAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQoAAAAAAAAAAAAAAAEIAAAABwAAAAkKAAAAAAAAAAAAAAAHCQAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAkLAAAACQwAAAAJDQAAAAoRCgAAAAAAAAAFCwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGDgAAAKwLIyBYTUwNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHByb2plY3QgWE1MIGZpbGVzIGdvLCBub3RhYmx5Og0KDQogLSBGb3JtYXQgWE1MDQogLSBUeXBlIEV4dGVuc2lvbiBYTUwNCg0KRXh0ZXJuYWwgaGVscCBmaWxlcyBzaG91bGQgX25vdF8gYmUgcGxhY2VkIGluIHRoaXMgZm9sZGVyIQ0KDQojIyBOb3RlcyBvbiBGaWxlcyBhbmQgTmFtaW5nDQoNClRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBmb3JtYXQgZmlsZSBhbmQgb25lIHR5cGUgZXh0ZW5zaW9uIGZpbGUgcGVyIHByb2plY3QsIGFzIGltcG9ydGluZyB0aGVtIGhhcyBhIG5vdGFibGUgaW1wYWN0IG9uIGltcG9ydCB0aW1lcy4NCg0KIC0gVGhlIEZvcm1hdCBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5Gb3JtYXQucHMxeG1sYA0KIC0gVGhlIFR5cGUgRXh0ZW5zaW9uIFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LlR5cGVzLnBzMXhtbGANCg0KIyMgVG9vbHMNCg0KIyMjIE5ldy1QU01ERm9ybWF0VGFibGVEZWZpbml0aW9uDQoNClRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGFuIGlucHV0IG9iamVjdCBhbmQgZ2VuZXJhdGUgZm9ybWF0IHhtbCBmb3IgYW4gYXV0by1zaXplZCB0YWJsZS4NCg0KSXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIGdldCBzdGFydGVkIHdpdGggZm9ybWF0cy4NCg0KIyMjIEdldC1QU0ZUeXBlU2VyaWFsaXphdGlvbkRhdGENCg0KYGBgDQpDIyBXYXJuaW5nIQ0KVGhpcyBzZWN0aW9uIGlzIG9ubHkgaW50ZXJlc3QgaWYgeW91J3JlIHVzaW5nIEMjIHRvZ2V0aGVyIHdpdGggUG93ZXJTaGVsbC4NCmBgYA0KDQpUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0eXBlIGV4dGVuc2lvbiBYTUwgdGhhdCBhbGxvd3MgUG93ZXJTaGVsbCB0byBjb252ZXJ0IHR5cGVzIHdyaXR0ZW4gaW4gQyMgdG8gYmUgd3JpdHRlbiB0byBmaWxlIGFuZCByZXN0b3JlZCBmcm9tIGl0IHdpdGhvdXQgYmVpbmcgJ0Rlc2VyaWFsaXplZCcuIEFsc28gd29ya3MgZm9yIGpvYnMgb3IgcmVtb3RpbmcsIGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUgYFBTRnJhbWV3b3JrYCBtb2R1bGUgYW5kIHR5cGUgZXh0ZW5zaW9uIGxvYWRlZC4NCg0KSW4gb3JkZXIgZm9yIGEgY2xhc3MgdG8gYmUgZWxpZ2libGUgZm9yIHRoaXMsIGl0IG5lZWRzIHRvIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlczoNCg0KIC0gSGF2ZSB0aGUgYFtTZXJpYWxpemFibGVdYCBhdHRyaWJ1dGUNCiAtIEJlIHB1YmxpYw0KIC0gSGF2ZSBhbiBlbXB0eSBjb25zdHJ1Y3Rvcg0KIC0gQWxsb3cgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzL2ZpZWxkcyB0byBiZSBzZXQgKGV2ZW4gaWYgc2V0dGluZyBpdCBkb2Vzbid0IGRvIGFueXRoaW5nKSB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi4NCg0KYGBgDQpub24tcHVibGljIHByb3BlcnRpZXMgYW5kIGZpZWxkcyB3aWxsIGJlIGxvc3QgaW4gdGhpcyBwcm9jZXNzIQ0KYGBgAQkPAAAACRAAAAAGEQAAAAlyZWFkbWUubWQGEgAAAA14bWxccmVhZG1lLm1kCQYAAAAJFAAAAAkVAAAAAQwAAAALAAAABhYAAADnBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pg0KPENvbmZpZ3VyYXRpb24+DQoJPFZpZXdEZWZpbml0aW9ucz4NCgkJPCEtLSBGb28uQmFyIC0tPg0KCQk8Vmlldz4NCgkJCTxOYW1lPkZvby5CYXI8L05hbWU+DQoJCQk8Vmlld1NlbGVjdGVkQnk+DQoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPg0KCQkJPC9WaWV3U2VsZWN0ZWRCeT4NCgkJCTxUYWJsZUNvbnRyb2w+DQoJCQkJPEF1dG9TaXplLz4NCgkJCQk8VGFibGVIZWFkZXJzPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCTwvVGFibGVIZWFkZXJzPg0KCQkJCTxUYWJsZVJvd0VudHJpZXM+DQoJCQkJCTxUYWJsZVJvd0VudHJ5Pg0KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQk8L1RhYmxlUm93RW50cnk+DQoJCQkJPC9UYWJsZVJvd0VudHJpZXM+DQoJCQk8L1RhYmxlQ29udHJvbD4NCgkJPC9WaWV3Pg0KCTwvVmlld0RlZmluaXRpb25zPg0KPENvbmZpZ3VyYXRpb24+AQkXAAAACRgAAAAGGQAAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBhoAAAAaeG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwJBgAAAAkcAAAACR0AAAABDQAAAAsAAAAGHgAAAOAHPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxUeXBlcz4NCiAgPCEtLSBGb28uQmFyIC0tPg0KICA8VHlwZT4NCiAgICA8TmFtZT5EZXNlcmlhbGl6ZWQuRm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxNZW1iZXJTZXQ+DQogICAgICAgIDxOYW1lPlBTU3RhbmRhcmRNZW1iZXJzPC9OYW1lPg0KICAgICAgICA8TWVtYmVycz4NCiAgICAgICAgICA8Tm90ZVByb3BlcnR5Pg0KICAgICAgICAgICAgPE5hbWU+DQogICAgICAgICAgICAgIFRhcmdldFR5cGVGb3JEZXNlcmlhbGl6YXRpb24NCiAgICAgICAgICAgIDwvTmFtZT4NCiAgICAgICAgICAgIDxWYWx1ZT4NCiAgICAgICAgICAgICAgRm9vLkJhcg0KICAgICAgICAgICAgPC9WYWx1ZT4NCiAgICAgICAgICA8L05vdGVQcm9wZXJ0eT4NCiAgICAgICAgPC9NZW1iZXJzPg0KICAgICAgPC9NZW1iZXJTZXQ+DQogICAgPC9NZW1iZXJzPg0KICA8L1R5cGU+DQogIDxUeXBlPg0KICAgIDxOYW1lPkZvby5CYXI8L05hbWU+DQogICAgPE1lbWJlcnM+DQogICAgICA8Q29kZVByb3BlcnR5IElzSGlkZGVuPSJ0cnVlIj4NCiAgICAgICAgPE5hbWU+U2VyaWFsaXphdGlvbkRhdGE8L05hbWU+DQogICAgICAgIDxHZXRDb2RlUmVmZXJlbmNlPg0KICAgICAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4NCiAgICAgICAgICA8TWV0aG9kTmFtZT5HZXRTZXJpYWxpemF0aW9uRGF0YTwvTWV0aG9kTmFtZT4NCiAgICAgICAgPC9HZXRDb2RlUmVmZXJlbmNlPg0KICAgICAgPC9Db2RlUHJvcGVydHk+DQogICAgPC9NZW1iZXJzPg0KICAgIDxUeXBlQ29udmVydGVyPg0KICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgIDwvVHlwZUNvbnZlcnRlcj4NCiAgPC9UeXBlPg0KPC9UeXBlcz4BCR8AAAAJIAAAAAYhAAAAFcO+bmFtZcO+LlR5cGVzLnBzMXhtbAYiAAAAGXhtbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwJBgAAAAkkAAAACSUAAAABDwAAAAcAAAAJJgAAAAEAAAABAAAAARAAAAAHAAAACQoAAAAAAAAAAAAAAAEUAAAABwAAAAkKAAAAAAAAAAAAAAABFQAAAAcAAAAJCgAAAAAAAAAAAAAAARcAAAAHAAAACQoAAAAAAAAAAAAAAAEYAAAABwAAAAkKAAAAAAAAAAAAAAABHAAAAAcAAAAJKAAAAAEAAAABAAAAAR0AAAAHAAAACQoAAAAAAAAAAAAAAAEfAAAABwAAAAkKAAAAAAAAAAAAAAABIAAAAAcAAAAJCgAAAAAAAAAAAAAAASQAAAAHAAAACSoAAAABAAAAAQAAAAElAAAABwAAAAkKAAAAAAAAAAAAAAARJgAAAAQAAAAGLAAAAARuYW1lDQMRKAAAAAQAAAAGLQAAAARuYW1lDQMRKgAAAAQAAAAGLgAAAARuYW1lDQML</BA>
            </MS>
          </Obj>
          <Obj RefId="37">
            <TN RefId="7">
              <T>PSModuleDevelopment.Template.TemplateItemFile</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value"># Changelog_x000D__x000A_## 1.0.0 (þ!dynamicscript_612588!þ)_x000D__x000A_ - New: Some Stuff_x000D__x000A_ - Upd: Moar Stuff_x000D__x000A_ - Fix: Much Stuff</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="38">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="ContentParameterScript" RefId="39">
                <TNRef RefId="2" />
                <LST>
                  <S>dynamicscript_612588</S>
                </LST>
              </Obj>
              <S N="Name">changelog.md</S>
              <S N="RelativePath">changelog.md</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="40">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="41">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAbiMgQ2hhbmdlbG9nDQojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF82MTI1ODghw74pDQogLSBOZXc6IFNvbWUgU3R1ZmYNCiAtIFVwZDogTW9hciBTdHVmZg0KIC0gRml4OiBNdWNoIFN0dWZmAQkEAAAACQUAAAAGBgAAAAxjaGFuZ2Vsb2cubWQGBwAAAAxjaGFuZ2Vsb2cubWQGCAAAAALDvgkJAAAACQoAAAAEBAAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24GAAAICAkLAAAAAAAAAAAAAAABBQAAAAQAAAAJDAAAAAEAAAABAAAAAQkAAAAEAAAACQsAAAAAAAAAAAAAAAEKAAAABAAAAAkLAAAAAAAAAAAAAAARCwAAAAAAAAARDAAAAAQAAAAGDgAAABRkeW5hbWljc2NyaXB0XzYxMjU4OA0DCw==</BA>
            </MS>
          </Obj>
          <Obj RefId="42">
            <TNRef RefId="7" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value"># PSFModule guidance_x000D__x000A__x000D__x000A_This is a finished module layout optimized for implementing the PSFramework._x000D__x000A__x000D__x000A_If you don't care to deal with the details, this is what you need to do to get started seeing results:_x000D__x000A__x000D__x000A_ - Add the functions you want to publish to `/functions/`_x000D__x000A_ - Update the `FunctionsToExport` node in the module manifest (þnameþ.psd1). All functions you want to publish should be in a list._x000D__x000A_ - Add internal helper functions the user should not see to `/internal/functions/`_x000D__x000A_ _x000D__x000A_ ## Path Warning_x000D__x000A_ _x000D__x000A_ &gt; If you want your module to be compatible with Linux and MacOS, keep in mind that those OS are case sensitive for paths and files._x000D__x000A_ _x000D__x000A_ `Import-ModuleFile` is preconfigured to resolve the path of the files specified, so it will reliably convert weird path notations the system can't handle._x000D__x000A_ Content imported through that command thus need not mind the path separator._x000D__x000A_ If you want to make sure your code too will survive OS-specific path notations, get used to using `Resolve-path` or the more powerful `Resolve-PSFPath`.</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="43">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="44">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <S N="Name">readme.md</S>
              <S N="RelativePath">readme.md</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="45">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="46">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAjggjIFBTRk1vZHVsZSBndWlkYW5jZQ0KDQpUaGlzIGlzIGEgZmluaXNoZWQgbW9kdWxlIGxheW91dCBvcHRpbWl6ZWQgZm9yIGltcGxlbWVudGluZyB0aGUgUFNGcmFtZXdvcmsuDQoNCklmIHlvdSBkb24ndCBjYXJlIHRvIGRlYWwgd2l0aCB0aGUgZGV0YWlscywgdGhpcyBpcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGdldCBzdGFydGVkIHNlZWluZyByZXN1bHRzOg0KDQogLSBBZGQgdGhlIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHRvIGAvZnVuY3Rpb25zL2ANCiAtIFVwZGF0ZSB0aGUgYEZ1bmN0aW9uc1RvRXhwb3J0YCBub2RlIGluIHRoZSBtb2R1bGUgbWFuaWZlc3QgKMO+bmFtZcO+LnBzZDEpLiBBbGwgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggc2hvdWxkIGJlIGluIGEgbGlzdC4NCiAtIEFkZCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHRoZSB1c2VyIHNob3VsZCBub3Qgc2VlIHRvIGAvaW50ZXJuYWwvZnVuY3Rpb25zL2ANCiANCiAjIyBQYXRoIFdhcm5pbmcNCiANCiA+IElmIHlvdSB3YW50IHlvdXIgbW9kdWxlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBMaW51eCBhbmQgTWFjT1MsIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIE9TIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgcGF0aHMgYW5kIGZpbGVzLg0KIA0KIGBJbXBvcnQtTW9kdWxlRmlsZWAgaXMgcHJlY29uZmlndXJlZCB0byByZXNvbHZlIHRoZSBwYXRoIG9mIHRoZSBmaWxlcyBzcGVjaWZpZWQsIHNvIGl0IHdpbGwgcmVsaWFibHkgY29udmVydCB3ZWlyZCBwYXRoIG5vdGF0aW9ucyB0aGUgc3lzdGVtIGNhbid0IGhhbmRsZS4NCiBDb250ZW50IGltcG9ydGVkIHRocm91Z2ggdGhhdCBjb21tYW5kIHRodXMgbmVlZCBub3QgbWluZCB0aGUgcGF0aCBzZXBhcmF0b3IuDQogSWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSB0b28gd2lsbCBzdXJ2aXZlIE9TLXNwZWNpZmljIHBhdGggbm90YXRpb25zLCBnZXQgdXNlZCB0byB1c2luZyBgUmVzb2x2ZS1wYXRoYCBvciB0aGUgbW9yZSBwb3dlcmZ1bCBgUmVzb2x2ZS1QU0ZQYXRoYC4BCQQAAAAJBQAAAAYGAAAACXJlYWRtZS5tZAYHAAAACXJlYWRtZS5tZAYIAAAAAsO+CQkAAAAJCgAAAAQEAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQsAAAABAAAAAQAAAAEFAAAABAAAAAkMAAAAAAAAAAAAAAABCQAAAAQAAAAJDAAAAAAAAAAAAAAAAQoAAAAEAAAACQwAAAAAAAAAAAAAABELAAAABAAAAAYNAAAABG5hbWUNAxEMAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="47">
            <TNRef RefId="7" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value">@{_x000D__x000A__x0009_# Script module or binary module file associated with this manifest_x000D__x000A__x0009_ModuleToProcess = 'þnameþ.psm1'_x000D__x000A__x0009__x000D__x000A__x0009_# Version number of this module._x000D__x000A__x0009_ModuleVersion = '1.0.0'_x000D__x000A__x0009__x000D__x000A__x0009_# ID used to uniquely identify this module_x000D__x000A__x0009_GUID = 'þ!guid!þ'_x000D__x000A__x0009__x000D__x000A__x0009_# Author of this module_x000D__x000A__x0009_Author = 'þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Company or vendor of this module_x000D__x000A__x0009_CompanyName = 'þcompanyþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Copyright statement for this module_x000D__x000A__x0009_Copyright = 'Copyright (c) þ!year!þ þauthorþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Description of the functionality provided by this module_x000D__x000A__x0009_Description = 'þdescriptionþ'_x000D__x000A__x0009__x000D__x000A__x0009_# Minimum version of the Windows PowerShell engine required by this module_x000D__x000A__x0009_PowerShellVersion = '5.0'_x000D__x000A__x0009__x000D__x000A__x0009_# Modules that must be imported into the global environment prior to importing_x000D__x000A__x0009_# this module_x000D__x000A__x0009_RequiredModules = @(_x000D__x000A__x0009__x0009_@{ ModuleName='PSFramework'; ModuleVersion='þ!psframework!þ' }_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_# Assemblies that must be loaded prior to importing this module_x000D__x000A__x0009_# RequiredAssemblies = @('bin\þnameþ.dll')_x000D__x000A__x0009__x000D__x000A__x0009_# Type files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# TypesToProcess = @('xml\þnameþ.Types.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Format files (.ps1xml) to be loaded when importing this module_x000D__x000A__x0009_# FormatsToProcess = @('xml\þnameþ.Format.ps1xml')_x000D__x000A__x0009__x000D__x000A__x0009_# Functions to export from this module_x000D__x000A__x0009_FunctionsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Cmdlets to export from this module_x000D__x000A__x0009_CmdletsToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Variables to export from this module_x000D__x000A__x0009_VariablesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# Aliases to export from this module_x000D__x000A__x0009_AliasesToExport = ''_x000D__x000A__x0009__x000D__x000A__x0009_# List of all modules packaged with this module_x000D__x000A__x0009_ModuleList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# List of all files packaged with this module_x000D__x000A__x0009_FileList = @()_x000D__x000A__x0009__x000D__x000A__x0009_# Private data to pass to the module specified in ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell._x000D__x000A__x0009_PrivateData = @{_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_#Support for PowerShellGet galleries._x000D__x000A__x0009__x0009_PSData = @{_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# Tags applied to this module. These help with module discovery in online galleries._x000D__x000A__x0009__x0009__x0009_# Tags = @()_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the license for this module._x000D__x000A__x0009__x0009__x0009_# LicenseUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to the main website for this project._x000D__x000A__x0009__x0009__x0009_# ProjectUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# A URL to an icon representing this module._x000D__x000A__x0009__x0009__x0009_# IconUri = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_# ReleaseNotes of this module_x000D__x000A__x0009__x0009__x0009_# ReleaseNotes = ''_x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009_} # End of PSData hashtable_x000D__x000A__x0009__x0009__x000D__x000A__x0009_} # End of PrivateData hashtable_x000D__x000A_}</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="48">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                  <S>author</S>
                  <S>company</S>
                  <S>description</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="49">
                <TNRef RefId="2" />
                <LST>
                  <S>guid</S>
                  <S>year</S>
                  <S>psframework</S>
                </LST>
              </Obj>
              <S N="Name">þnameþ.psd1</S>
              <S N="RelativePath">þnameþ.psd1</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="50">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="51">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAAqxJAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglNb2R1bGVUb1Byb2Nlc3MgPSAnw75uYW1lw74ucHNtMScNCgkNCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLg0KCU1vZHVsZVZlcnNpb24gPSAnMS4wLjAnDQoJDQoJIyBJRCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgbW9kdWxlDQoJR1VJRCA9ICfDviFndWlkIcO+Jw0KCQ0KCSMgQXV0aG9yIG9mIHRoaXMgbW9kdWxlDQoJQXV0aG9yID0gJ8O+YXV0aG9yw74nDQoJDQoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQ0KCUNvbXBhbnlOYW1lID0gJ8O+Y29tcGFuecO+Jw0KCQ0KCSMgQ29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhpcyBtb2R1bGUNCglDb3B5cmlnaHQgPSAnQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74nDQoJDQoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQ0KCURlc2NyaXB0aW9uID0gJ8O+ZGVzY3JpcHRpb27DvicNCgkNCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQ0KCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMCcNCgkNCgkjIE1vZHVsZXMgdGhhdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBwcmlvciB0byBpbXBvcnRpbmcNCgkjIHRoaXMgbW9kdWxlDQoJUmVxdWlyZWRNb2R1bGVzID0gQCgNCgkJQHsgTW9kdWxlTmFtZT0nUFNGcmFtZXdvcmsnOyBNb2R1bGVWZXJzaW9uPSfDviFwc2ZyYW1ld29yayHDvicgfQ0KCSkNCgkNCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFJlcXVpcmVkQXNzZW1ibGllcyA9IEAoJ2JpblzDvm5hbWXDvi5kbGwnKQ0KCQ0KCSMgVHlwZSBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBUeXBlc1RvUHJvY2VzcyA9IEAoJ3htbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwnKQ0KCQ0KCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIEZvcm1hdHNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpDQoJDQoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglGdW5jdGlvbnNUb0V4cG9ydCA9ICcnDQoJDQoJIyBDbWRsZXRzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQ21kbGV0c1RvRXhwb3J0ID0gJycNCgkNCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCVZhcmlhYmxlc1RvRXhwb3J0ID0gJycNCgkNCgkjIEFsaWFzZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglBbGlhc2VzVG9FeHBvcnQgPSAnJw0KCQ0KCSMgTGlzdCBvZiBhbGwgbW9kdWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlDQoJTW9kdWxlTGlzdCA9IEAoKQ0KCQ0KCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCUZpbGVMaXN0ID0gQCgpDQoJDQoJIyBQcml2YXRlIGRhdGEgdG8gcGFzcyB0byB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiBNb2R1bGVUb1Byb2Nlc3MuIFRoaXMgbWF5IGFsc28gY29udGFpbiBhIFBTRGF0YSBoYXNodGFibGUgd2l0aCBhZGRpdGlvbmFsIG1vZHVsZSBtZXRhZGF0YSB1c2VkIGJ5IFBvd2VyU2hlbGwuDQoJUHJpdmF0ZURhdGEgPSBAew0KCQkNCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLg0KCQlQU0RhdGEgPSBAew0KCQkJDQoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4NCgkJCSMgVGFncyA9IEAoKQ0KCQkJDQoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4NCgkJCSMgTGljZW5zZVVyaSA9ICcnDQoJCQkNCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0Lg0KCQkJIyBQcm9qZWN0VXJpID0gJycNCgkJCQ0KCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4NCgkJCSMgSWNvblVyaSA9ICcnDQoJCQkNCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlDQoJCQkjIFJlbGVhc2VOb3RlcyA9ICcnDQoJCQkNCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlDQoJCQ0KCX0gIyBFbmQgb2YgUHJpdmF0ZURhdGEgaGFzaHRhYmxlDQp9AQkEAAAACQUAAAAGBgAAAA3Dvm5hbWXDvi5wc2QxBgcAAAANw75uYW1lw74ucHNkMQYIAAAAAsO+CQkAAAAJCgAAAAQEAAAAf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgYAAAgICQsAAAAEAAAABAAAAAEFAAAABAAAAAkMAAAAAwAAAAMAAAABCQAAAAQAAAAJDQAAAAEAAAABAAAAAQoAAAAEAAAACQ4AAAAAAAAAAAAAABELAAAABAAAAAYPAAAABG5hbWUGEAAAAAZhdXRob3IGEQAAAAdjb21wYW55BhIAAAALZGVzY3JpcHRpb24RDAAAAAQAAAAGEwAAAARndWlkBhQAAAAEeWVhcgYVAAAAC3BzZnJhbWV3b3JrChENAAAABAAAAAYWAAAABG5hbWUNAxEOAAAAAAAAAAs=</BA>
            </MS>
          </Obj>
          <Obj RefId="52">
            <TNRef RefId="7" />
            <ToString>PSModuleDevelopment.Template.TemplateItemFile</ToString>
            <Props>
              <S N="Value">$script:ModuleRoot = $PSScriptRoot_x000D__x000A_$script:ModuleVersion = (Import-PowerShellDataFile -Path "$($script:ModuleRoot)\þnameþ.psd1").ModuleVersion_x000D__x000A__x000D__x000A_# Detect whether at some level dotsourcing was enforced_x000D__x000A_$script:doDotSource = Get-PSFConfigValue -FullName þnameþ.Import.DoDotSource -Fallback $false_x000D__x000A_if ($þnameþ_dotsourcemodule) { $script:doDotSource = $true }_x000D__x000A__x000D__x000A_&lt;#_x000D__x000A_Note on Resolve-Path:_x000D__x000A_All paths are sent through Resolve-Path/Resolve-PSFPath in order to convert them to the correct path separator._x000D__x000A_This allows ignoring path separators throughout the import sequence, which could otherwise cause trouble depending on OS._x000D__x000A_Resolve-Path can only be used for paths that already exist, Resolve-PSFPath can accept that the last leaf my not exist._x000D__x000A_This is important when testing for paths._x000D__x000A_#&gt;_x000D__x000A__x000D__x000A_# Detect whether at some level loading individual module files, rather than the compiled module was enforced_x000D__x000A_$importIndividualFiles = Get-PSFConfigValue -FullName þnameþ.Import.IndividualFiles -Fallback $false_x000D__x000A_if ($þnameþ_importIndividualFiles) { $importIndividualFiles = $true }_x000D__x000A_if (Test-Path (Resolve-PSFPath -Path "$($script:ModuleRoot)\..\.git" -SingleItem -NewChild)) { $importIndividualFiles = $true }_x000D__x000A_if ("&lt;was not compiled&gt;" -eq '&lt;was not compiled&gt;') { $importIndividualFiles = $true }_x000D__x000A__x0009__x000D__x000A_function Import-ModuleFile_x000D__x000A_{_x000D__x000A__x0009_&lt;#_x000D__x000A__x0009__x0009_.SYNOPSIS_x000D__x000A__x0009__x0009__x0009_Loads files into the module on module import._x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.DESCRIPTION_x000D__x000A__x0009__x0009__x0009_This helper function is used during module initialization._x000D__x000A__x0009__x0009__x0009_It should always be dotsourced itself, in order to proper function._x000D__x000A__x0009__x0009__x0009__x000D__x000A__x0009__x0009__x0009_This provides a central location to react to files being imported, if later desired_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.PARAMETER Path_x000D__x000A__x0009__x0009__x0009_The path to the file to load_x000D__x000A__x0009__x0009__x000D__x000A__x0009__x0009_.EXAMPLE_x000D__x000A__x0009__x0009__x0009_PS C:\&gt; . Import-ModuleFile -File $function.FullName_x000D__x000A__x0009__x000D__x000A__x0009__x0009__x0009_Imports the file stored in $function according to import policy_x000D__x000A__x0009_#&gt;_x000D__x000A__x0009_[CmdletBinding()]_x000D__x000A__x0009_Param (_x000D__x000A__x0009__x0009_[string]_x000D__x000A__x0009__x0009_$Path_x000D__x000A__x0009_)_x000D__x000A__x0009__x000D__x000A__x0009_if ($doDotSource) { . (Resolve-Path $Path) }_x000D__x000A__x0009_else { $ExecutionContext.InvokeCommand.InvokeScript($false, ([scriptblock]::Create([io.file]::ReadAllText((Resolve-Path $Path)))), $null, $null) }_x000D__x000A_}_x000D__x000A__x000D__x000A_#region Load individual files_x000D__x000A_if ($importIndividualFiles)_x000D__x000A_{_x000D__x000A__x0009_# Execute Preimport actions_x000D__x000A__x0009_. Import-ModuleFile -Path "$ModuleRoot\internal\scripts\preimport.ps1"_x000D__x000A__x0009__x000D__x000A__x0009_# Import all internal functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\internal\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Import all public functions_x000D__x000A__x0009_foreach ($function in (Get-ChildItem "$ModuleRoot\functions" -Filter "*.ps1" -Recurse -ErrorAction Ignore))_x000D__x000A__x0009_{_x000D__x000A__x0009__x0009_. Import-ModuleFile -Path $function.FullName_x000D__x000A__x0009_}_x000D__x000A__x0009__x000D__x000A__x0009_# Execute Postimport actions_x000D__x000A__x0009_. Import-ModuleFile -Path "$ModuleRoot\internal\scripts\postimport.ps1"_x000D__x000A__x0009__x000D__x000A__x0009_# End it here, do not load compiled code below_x000D__x000A__x0009_return_x000D__x000A_}_x000D__x000A_#endregion Load individual files_x000D__x000A__x000D__x000A_#region Load compiled code_x000D__x000A_"&lt;compile code into here&gt;"_x000D__x000A_#endregion Load compiled code</S>
              <B N="PlainText">true</B>
              <Obj N="ContentParameterFlat" RefId="53">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="ContentParameterScript" RefId="54">
                <TNRef RefId="2" />
                <LST />
              </Obj>
              <S N="Name">þnameþ.psm1</S>
              <S N="RelativePath">þnameþ.psm1</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="55">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="56">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAYDAAAArxckc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290DQokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uDQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQNCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQ0KDQo8Iw0KTm90ZSBvbiBSZXNvbHZlLVBhdGg6DQpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4NClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4NClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuDQpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLg0KIz4NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkDQokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQoJDQpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQ0Kew0KCTwjDQoJCS5TWU5PUFNJUw0KCQkJTG9hZHMgZmlsZXMgaW50byB0aGUgbW9kdWxlIG9uIG1vZHVsZSBpbXBvcnQuDQoJCQ0KCQkuREVTQ1JJUFRJT04NCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4NCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4NCgkJCQ0KCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQNCgkJDQoJCS5QQVJBTUVURVIgUGF0aA0KCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZA0KCQkNCgkJLkVYQU1QTEUNCgkJCVBTIEM6XD4gLiBJbXBvcnQtTW9kdWxlRmlsZSAtRmlsZSAkZnVuY3Rpb24uRnVsbE5hbWUNCgkNCgkJCUltcG9ydHMgdGhlIGZpbGUgc3RvcmVkIGluICRmdW5jdGlvbiBhY2NvcmRpbmcgdG8gaW1wb3J0IHBvbGljeQ0KCSM+DQoJW0NtZGxldEJpbmRpbmcoKV0NCglQYXJhbSAoDQoJCVtzdHJpbmddDQoJCSRQYXRoDQoJKQ0KCQ0KCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAoUmVzb2x2ZS1QYXRoICRQYXRoKSB9DQoJZWxzZSB7ICRFeGVjdXRpb25Db250ZXh0Lkludm9rZUNvbW1hbmQuSW52b2tlU2NyaXB0KCRmYWxzZSwgKFtzY3JpcHRibG9ja106OkNyZWF0ZShbaW8uZmlsZV06OlJlYWRBbGxUZXh0KChSZXNvbHZlLVBhdGggJFBhdGgpKSkpLCAkbnVsbCwgJG51bGwpIH0NCn0NCg0KI3JlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMNCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQ0Kew0KCSMgRXhlY3V0ZSBQcmVpbXBvcnQgYWN0aW9ucw0KCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSINCgkNCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KCQ0KCSMgSW1wb3J0IGFsbCBwdWJsaWMgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KCQ0KCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIg0KCQ0KCSMgRW5kIGl0IGhlcmUsIGRvIG5vdCBsb2FkIGNvbXBpbGVkIGNvZGUgYmVsb3cNCglyZXR1cm4NCn0NCiNlbmRyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQoNCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlDQoiPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+Ig0KI2VuZHJlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUBCQQAAAAJBQAAAAYGAAAADcO+bmFtZcO+LnBzbTEGBwAAAA3Dvm5hbWXDvi5wc20xBggAAAACw74JCQAAAAkKAAAABAQAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJCwAAAAEAAAABAAAAAQUAAAAEAAAACQwAAAAAAAAAAAAAAAEJAAAABAAAAAkNAAAAAQAAAAEAAAABCgAAAAQAAAAJDAAAAAAAAAAAAAAAEQsAAAAEAAAABg8AAAAEbmFtZQ0DEQwAAAAAAAAAEQ0AAAAEAAAABhAAAAAEbmFtZQ0DCw==</BA>
            </MS>
          </Obj>
        </LST>
      </Obj>
    </Props>
    <MS>
      <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUKAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMIQ2hpbGRyZW4BBAMBAQADAwMDKVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVUeXBlAgAAAA5TeXN0ZW0uVmVyc2lvbg1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQIAAAAGAwAAAAlQU0ZNb2R1bGUF/P///ylQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQEAAAAHdmFsdWVfXwAIAgAAAAEAAAAJBQAAAAYGAAAAKlBvd2VyU2hlbGwgRnJhbWV3b3JrIGJhc2VkIG1vZHVsZSBzY2FmZm9sZAYHAAAAEkZyaWVkcmljaCBXZWlubWFubgBARrZ8hdaICQgAAAAJCQAAAAkKAAAACQsAAAAEBQAAAA5TeXN0ZW0uVmVyc2lvbgQAAAAGX01ham9yBl9NaW5vcgZfQnVpbGQJX1JldmlzaW9uAAAAAAgICAgBAAAAAQAAAAAAAAAAAAAABAgAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDAAAAAIAAAAAAAAAAQkAAAAIAAAACQ0AAAAEAAAABAAAAAQKAAAAgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBAAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplDUtleVZhbHVlUGFpcnMAAwADCBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCIQCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10HAAAACQ4AAAAHAAAACQ8AAAAECwAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkQAAAACgAAAAoAAAARDAAAAAIAAAAGEQAAAAZtb2R1bGUGEgAAAAtwc2ZyYW1ld29yaxENAAAABAAAAAYTAAAABG5hbWUGFAAAAAZhdXRob3IGFQAAAAdjb21wYW55BhYAAAALZGVzY3JpcHRpb24EDgAAABZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyAQAAAAtfaWdub3JlQ2FzZQABAQcPAAAAAAEAAAAHAAAAA4ICU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBOn///+CAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQIAAAADa2V5BXZhbHVlAQQsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABhgAAAALcHNmcmFtZXdvcmsJGQAAAAHm////6f///wYbAAAABHllYXIJHAAAAAHj////6f///wYeAAAABGRhdGUJHwAAAAHg////6f///wYhAAAACnRlc3Rmb2xkZXIJIgAAAAHd////6f///wYkAAAABGd1aWQJJQAAAAHa////6f///wYnAAAAC3Rlc3RyZXN1bHRzCSgAAAAB1////+n///8GKgAAABRkeW5hbWljc2NyaXB0XzYxMjU4OAkrAAAABxAAAAAAAQAAABAAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJLAAAAAktAAAACS4AAAAJLwAAAAkwAAAACTEAAAAJMgAAAAkzAAAACTQAAAAJNQAAAA0GDDYAAABfU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbiwgVmVyc2lvbj0zLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzUFGQAAACxQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdAIAAAAETmFtZQtTY3JpcHRCbG9jawEEO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyNgAAAAIAAAAJGAAAAAk4AAAAARwAAAAZAAAACRsAAAAJOgAAAAEfAAAAGQAAAAkeAAAACTwAAAABIgAAABkAAAAJIQAAAAk+AAAAASUAAAAZAAAACSQAAAAJQAAAAAEoAAAAGQAAAAknAAAACUIAAAABKwAAABkAAAAJKgAAAAlEAAAABSwAAAAvUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1Gb2xkZXIGAAAACENoaWxkcmVuBE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAMBAQEDA54BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAlFAAAABkYAAAADYmluBkcAAAADYmluBkgAAAACw74JSQAAAAlKAAAAAS0AAAAsAAAACUsAAAAGTAAAAAVlbi11cwZNAAAABWVuLXVzCUgAAAAJTwAAAAlQAAAAAS4AAAAsAAAACVEAAAAGUgAAAAlmdW5jdGlvbnMGUwAAAAlmdW5jdGlvbnMJSAAAAAlVAAAACVYAAAABLwAAACwAAAAJVwAAAAZYAAAACGludGVybmFsBlkAAAAIaW50ZXJuYWwJSAAAAAlbAAAACVwAAAABMAAAACwAAAAJXQAAAAZeAAAABXRlc3RzBl8AAAAFdGVzdHMJSAAAAAlhAAAACWIAAAABMQAAACwAAAAJYwAAAAZkAAAAA3htbAZlAAAAA3htbAlIAAAACWcAAAAJaAAAAAUyAAAALVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRmlsZQkAAAAFVmFsdWUJUGxhaW5UZXh0FENvbnRlbnRQYXJhbWV0ZXJGbGF0FkNvbnRlbnRQYXJhbWV0ZXJTY3JpcHQETmFtZQxSZWxhdGl2ZVBhdGgKSWRlbnRpZmllchdGaWxlU3lzdGVtUGFyYW1ldGVyRmxhdBlGaWxlU3lzdGVtUGFyYW1ldGVyU2NyaXB0AQADAwEBAQMDAX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAAZpAAAAbiMgQ2hhbmdlbG9nDQojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF82MTI1ODghw74pDQogLSBOZXc6IFNvbWUgU3R1ZmYNCiAtIFVwZDogTW9hciBTdHVmZg0KIC0gRml4OiBNdWNoIFN0dWZmAQlqAAAACWsAAAAGbAAAAAxjaGFuZ2Vsb2cubWQGbQAAAAxjaGFuZ2Vsb2cubWQJSAAAAAlvAAAACXAAAAABMwAAADIAAAAGcQAAAI4IIyBQU0ZNb2R1bGUgZ3VpZGFuY2UNCg0KVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLg0KDQpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoNCg0KIC0gQWRkIHRoZSBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCB0byBgL2Z1bmN0aW9ucy9gDQogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuDQogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gDQogDQogIyMgUGF0aCBXYXJuaW5nDQogDQogPiBJZiB5b3Ugd2FudCB5b3VyIG1vZHVsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggTGludXggYW5kIE1hY09TLCBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBPUyBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIHBhdGhzIGFuZCBmaWxlcy4NCiANCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuDQogQ29udGVudCBpbXBvcnRlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCB0aHVzIG5lZWQgbm90IG1pbmQgdGhlIHBhdGggc2VwYXJhdG9yLg0KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQlyAAAACXMAAAAGdAAAAAlyZWFkbWUubWQGdQAAAAlyZWFkbWUubWQJSAAAAAl3AAAACXgAAAABNAAAADIAAAAGeQAAAKsSQHsNCgkjIFNjcmlwdCBtb2R1bGUgb3IgYmluYXJ5IG1vZHVsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hbmlmZXN0DQoJTW9kdWxlVG9Qcm9jZXNzID0gJ8O+bmFtZcO+LnBzbTEnDQoJDQoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4NCglNb2R1bGVWZXJzaW9uID0gJzEuMC4wJw0KCQ0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgPSAnw74hZ3VpZCHDvicNCgkNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciA9ICfDvmF1dGhvcsO+Jw0KCQ0KCSMgQ29tcGFueSBvciB2ZW5kb3Igb2YgdGhpcyBtb2R1bGUNCglDb21wYW55TmFtZSA9ICfDvmNvbXBhbnnDvicNCgkNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KCQ0KCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUNCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nDQoJDQoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnDQoJDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyA9IEAoDQoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmcmFtZXdvcmshw74nIH0NCgkpDQoJDQoJIyBBc3NlbWJsaWVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgcHJpb3IgdG8gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCdiaW5cw75uYW1lw74uZGxsJykNCgkNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCgkNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KCQ0KCSMgRnVuY3Rpb25zIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJRnVuY3Rpb25zVG9FeHBvcnQgPSAnJw0KCQ0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCA9ICcnDQoJDQoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnDQoJDQoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQWxpYXNlc1RvRXhwb3J0ID0gJycNCgkNCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCU1vZHVsZUxpc3QgPSBAKCkNCgkNCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglGaWxlTGlzdCA9IEAoKQ0KCQ0KCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLg0KCVByaXZhdGVEYXRhID0gQHsNCgkJDQoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4NCgkJUFNEYXRhID0gQHsNCgkJCQ0KCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuDQoJCQkjIFRhZ3MgPSBAKCkNCgkJCQ0KCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuDQoJCQkjIExpY2Vuc2VVcmkgPSAnJw0KCQkJDQoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4NCgkJCSMgUHJvamVjdFVyaSA9ICcnDQoJCQkNCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuDQoJCQkjIEljb25VcmkgPSAnJw0KCQkJDQoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQ0KCQkJIyBSZWxlYXNlTm90ZXMgPSAnJw0KCQkJDQoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQ0KCQkNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJegAAAAl7AAAABnwAAAANw75uYW1lw74ucHNkMQZ9AAAADcO+bmFtZcO+LnBzZDEJSAAAAAl/AAAACYAAAAABNQAAADIAAAAGgQAAAK8XJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdA0KJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVzDvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbg0KDQojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkDQokc2NyaXB0OmRvRG90U291cmNlID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuRG9Eb3RTb3VyY2UgLUZhbGxiYWNrICRmYWxzZQ0KaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0NCg0KPCMNCk5vdGUgb24gUmVzb2x2ZS1QYXRoOg0KQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuDQpUaGlzIGFsbG93cyBpZ25vcmluZyBwYXRoIHNlcGFyYXRvcnMgdGhyb3VnaG91dCB0aGUgaW1wb3J0IHNlcXVlbmNlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgY2F1c2UgdHJvdWJsZSBkZXBlbmRpbmcgb24gT1MuDQpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0Lg0KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4NCiM+DQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZA0KJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkluZGl2aWR1YWxGaWxlcyAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKCI8d2FzIG5vdCBjb21waWxlZD4iIC1lcSAnPHdhcyBub3QgY29tcGlsZWQ+JykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KCQ0KZnVuY3Rpb24gSW1wb3J0LU1vZHVsZUZpbGUNCnsNCgk8Iw0KCQkuU1lOT1BTSVMNCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0Lg0KCQkNCgkJLkRFU0NSSVBUSU9ODQoJCQlUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uDQoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uDQoJCQkNCgkJCVRoaXMgcHJvdmlkZXMgYSBjZW50cmFsIGxvY2F0aW9uIHRvIHJlYWN0IHRvIGZpbGVzIGJlaW5nIGltcG9ydGVkLCBpZiBsYXRlciBkZXNpcmVkDQoJCQ0KCQkuUEFSQU1FVEVSIFBhdGgNCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQNCgkJDQoJCS5FWEFNUExFDQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJDQoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kNCgkjPg0KCVtDbWRsZXRCaW5kaW5nKCldDQoJUGFyYW0gKA0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCgkNCglpZiAoJGRvRG90U291cmNlKSB7IC4gKFJlc29sdmUtUGF0aCAkUGF0aCkgfQ0KCWVsc2UgeyAkRXhlY3V0aW9uQ29udGV4dC5JbnZva2VDb21tYW5kLkludm9rZVNjcmlwdCgkZmFsc2UsIChbc2NyaXB0YmxvY2tdOjpDcmVhdGUoW2lvLmZpbGVdOjpSZWFkQWxsVGV4dCgoUmVzb2x2ZS1QYXRoICRQYXRoKSkpKSwgJG51bGwsICRudWxsKSB9DQp9DQoNCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykNCnsNCgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiDQoJDQoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCgkNCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zDQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSINCgkNCgkjIEVuZCBpdCBoZXJlLCBkbyBub3QgbG9hZCBjb21waWxlZCBjb2RlIGJlbG93DQoJcmV0dXJuDQp9DQojZW5kcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcw0KDQojcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQ0KIjxjb21waWxlIGNvZGUgaW50byBoZXJlPiINCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQmCAAAACYMAAAAGhAAAAA3Dvm5hbWXDvi5wc20xBoUAAAANw75uYW1lw74ucHNtMQlIAAAACYcAAAAJiAAAAAU4AAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0ATYAAAAGiQAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJAToAAAA4AAAABooAAAAgDQoJCQlHZXQtRGF0ZSAtRm9ybWF0ICJ5eXl5Ig0KCQkBPAAAADgAAAAGiwAAACYNCgkJCUdldC1EYXRlIC1Gb3JtYXQgInl5eXktTU0tZGQiDQoJCQE+AAAAOAAAAAaMAAAACQ0KCQkJDQoJCQFAAAAAOAAAAAaNAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJAUIAAAA4AAAABo4AAABWDQoJCQlAJw0KJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1TY3JpcHQgJGZpbGUuRnVsbE5hbWUgLVNob3cgJFNob3cgLVBhc3NUaHJ1DQonQA0KCQkBRAAAADgAAAAGjwAAAB8gR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcgAUUAAAALAAAACZAAAAABAAAAAQAAAAFJAAAACAAAAAmRAAAAAAAAAAAAAAABSgAAAAgAAAAJkQAAAAAAAAAAAAAAAUsAAAALAAAACZIAAAACAAAAAgAAAAFPAAAACAAAAAmRAAAAAAAAAAAAAAABUAAAAAgAAAAJkQAAAAAAAAAAAAAAAVEAAAALAAAACZQAAAABAAAAAQAAAAFVAAAACAAAAAmRAAAAAAAAAAAAAAABVgAAAAgAAAAJkQAAAAAAAAAAAAAAAVcAAAALAAAACZYAAAAFAAAABQAAAAFbAAAACAAAAAmRAAAAAAAAAAAAAAABXAAAAAgAAAAJkQAAAAAAAAAAAAAAAV0AAAALAAAACZgAAAAEAAAABAAAAAFhAAAACAAAAAmRAAAAAAAAAAAAAAABYgAAAAgAAAAJkQAAAAAAAAAAAAAAAWMAAAALAAAACZoAAAADAAAAAwAAAAFnAAAACAAAAAmRAAAAAAAAAAAAAAABaAAAAAgAAAAJkQAAAAAAAAAAAAAAAWoAAAAIAAAACZEAAAAAAAAAAAAAAAFrAAAACAAAAAmcAAAAAQAAAAEAAAABbwAAAAgAAAAJkQAAAAAAAAAAAAAAAXAAAAAIAAAACZEAAAAAAAAAAAAAAAFyAAAACAAAAAmeAAAAAQAAAAEAAAABcwAAAAgAAAAJkQAAAAAAAAAAAAAAAXcAAAAIAAAACZEAAAAAAAAAAAAAAAF4AAAACAAAAAmRAAAAAAAAAAAAAAABegAAAAgAAAAJoAAAAAQAAAAEAAAAAXsAAAAIAAAACaEAAAADAAAAAwAAAAF/AAAACAAAAAmiAAAAAQAAAAEAAAABgAAAAAgAAAAJkQAAAAAAAAAAAAAAAYIAAAAIAAAACaQAAAABAAAAAQAAAAGDAAAACAAAAAmRAAAAAAAAAAAAAAABhwAAAAgAAAAJpgAAAAEAAAABAAAAAYgAAAAIAAAACZEAAAAAAAAAAAAAAAeQAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACagAAAANAxGRAAAAAAAAAAeSAAAAAAEAAAAEAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACakAAAAJqgAAAA0CB5QAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJqwAAAA0DB5YAAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJrAAAAAmtAAAACa4AAAAJrwAAAAmwAAAADQMHmAAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmxAAAACbIAAAAJswAAAAm0AAAAB5oAAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJtQAAAAm2AAAACbcAAAAKEZwAAAAEAAAACSoAAAANAxGeAAAABAAAAAa5AAAABG5hbWUNAxGgAAAABAAAAAa6AAAABG5hbWUGuwAAAAZhdXRob3IGvAAAAAdjb21wYW55Br0AAAALZGVzY3JpcHRpb24RoQAAAAQAAAAGvgAAAARndWlkBr8AAAAEeWVhcgbAAAAAC3BzZnJhbWV3b3JrChGiAAAABAAAAAbBAAAABG5hbWUNAxGkAAAABAAAAAbCAAAABG5hbWUNAxGmAAAABAAAAAbDAAAABG5hbWUNAwGoAAAAMgAAAAbEAAAA7gIjIGJpbiBmb2xkZXINCg0KVGhlIGJpbiBmb2xkZXIgZXhpc3RzIHRvIHN0b3JlIGJpbmFyeSBkYXRhLiBBbmQgc2NyaXB0cyByZWxhdGVkIHRvIHRoZSB0eXBlIHN5c3RlbS4NCg0KVGhpcyBtYXkgaW5jbHVkZSB5b3VyIG93biBDIy1iYXNlZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQ0KDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCcUAAAAJxgAAAAbHAAAACXJlYWRtZS5tZAbIAAAADWJpblxyZWFkbWUubWQJSAAAAAnKAAAACcsAAAABqQAAADIAAAAGzAAAAKUBVE9QSUMNCglhYm91dF/Dvm5hbWXDvg0KCQ0KU0hPUlQgREVTQ1JJUFRJT04NCglFeHBsYWlucyBob3cgdG8gdXNlIHRoZSDDvm5hbWXDviBwb3dlcnNoZWxsIG1vZHVsZQ0KCQ0KTE9ORyBERVNDUklQVElPTg0KCTxJbnNlcnQgQ29udGVudCBoZXJlPg0KDQpLRVlXT1JEUw0KCcO+bmFtZcO+AQnNAAAACc4AAAAGzwAAABdhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAbQAAAAHWVuLXVzXGFib3V0X8O+bmFtZcO+LmhlbHAudHh0CUgAAAAJ0gAAAAnTAAAAAaoAAAAyAAAABtQAAACdASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQ0KIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2Nrcw0KQHsNCgkna2V5JyA9ICdWYWx1ZScNCn0BCdUAAAAJ1gAAAAbXAAAADHN0cmluZ3MucHNkMQbYAAAAEmVuLXVzXHN0cmluZ3MucHNkMQlIAAAACdoAAAAJ2wAAAAGrAAAAMgAAAAbcAAAA0gEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCd0AAAAJ3gAAAAbfAAAACXJlYWRtZS5tZAbgAAAAE2Z1bmN0aW9uc1xyZWFkbWUubWQJSAAAAAniAAAACeMAAAABrAAAACwAAAAJ5AAAAAblAAAADmNvbmZpZ3VyYXRpb25zBuYAAAAXaW50ZXJuYWxcY29uZmlndXJhdGlvbnMJSAAAAAnoAAAACekAAAABrQAAACwAAAAJ6gAAAAbrAAAACWZ1bmN0aW9ucwbsAAAAEmludGVybmFsXGZ1bmN0aW9ucwlIAAAACe4AAAAJ7wAAAAGuAAAALAAAAAnwAAAABvEAAAAMc2NyaXB0YmxvY2tzBvIAAAAVaW50ZXJuYWxcc2NyaXB0YmxvY2tzCUgAAAAJ9AAAAAn1AAAAAa8AAAAsAAAACfYAAAAG9wAAAAdzY3JpcHRzBvgAAAAQaW50ZXJuYWxcc2NyaXB0cwlIAAAACfoAAAAJ+wAAAAGwAAAALAAAAAn8AAAABv0AAAAEdGVwcAb+AAAADWludGVybmFsXHRlcHAJSAAAAAkAAQAACQEBAAABsQAAACwAAAAJAgEAAAYDAQAACWZ1bmN0aW9ucwYEAQAAD3Rlc3RzXGZ1bmN0aW9ucwlIAAAACQYBAAAJBwEAAAGyAAAALAAAAAkIAQAABgkBAAAHZ2VuZXJhbAYKAQAADXRlc3RzXGdlbmVyYWwJSAAAAAkMAQAACQ0BAAABswAAADIAAAAGDgEAANQVcGFyYW0gKA0KCSRUZXN0R2VuZXJhbCA9ICR0cnVlLA0KCQ0KCSRUZXN0RnVuY3Rpb25zID0gJHRydWUsDQoJDQoJW1ZhbGlkYXRlU2V0KCdOb25lJywgJ0RlZmF1bHQnLCAnUGFzc2VkJywgJ0ZhaWxlZCcsICdQZW5kaW5nJywgJ1NraXBwZWQnLCAnSW5jb25jbHVzaXZlJywgJ0Rlc2NyaWJlJywgJ0NvbnRleHQnLCAnU3VtbWFyeScsICdIZWFkZXInLCAnRmFpbHMnLCAnQWxsJyldDQoJJFNob3cgPSAiTm9uZSIsDQoJDQoJJEluY2x1ZGUgPSAiKiIsDQoJDQoJJEV4Y2x1ZGUgPSAiIg0KKQ0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlN0YXJ0aW5nIFRlc3RzIg0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiDQoNClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQ0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc2QxIg0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc20xIiAtRm9yY2UNCg0Kw74hdGVzdGZvbGRlciHDvg0KDQokdG90YWxGYWlsZWQgPSAwDQokdG90YWxSdW4gPSAwDQoNCiR0ZXN0cmVzdWx0cyA9IEAoKQ0KDQojcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQppZiAoJFRlc3RHZW5lcmFsKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkNCgl7DQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+Ig0KCQnDviF0ZXN0cmVzdWx0cyHDvg0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0UmVzdWx0IHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QYXNzZWQgfSB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCQkkbmFtZSA9ICRfLk5hbWUNCgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJCURlc2NyaWJlID0gJF8uRGVzY3JpYmUNCgkJCQkJQ29udGV4dCAgPSAkXy5Db250ZXh0DQoJCQkJCU5hbWUJID0gIkl0ICRuYW1lIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkZhaWx1cmVNZXNzYWdlDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KDQojcmVnaW9uIFRlc3QgQ29tbWFuZHMNCmlmICgkVGVzdEZ1bmN0aW9ucykNCnsNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIg0KCQnDviF0ZXN0cmVzdWx0cyHDvg0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0UmVzdWx0IHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QYXNzZWQgfSB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCQkkbmFtZSA9ICRfLk5hbWUNCgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJCURlc2NyaWJlID0gJF8uRGVzY3JpYmUNCgkJCQkJQ29udGV4dCAgPSAkXy5Db250ZXh0DQoJCQkJCU5hbWUJID0gIkl0ICRuYW1lIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkZhaWx1cmVNZXNzYWdlDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzDQoNCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdA0KDQppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0NCmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0NCg0KaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkNCnsNCgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiDQp9AQkPAQAACRABAAAGEQEAAApwZXN0ZXIucHMxBhIBAAAQdGVzdHNccGVzdGVyLnBzMQlIAAAACRQBAAAJFQEAAAG0AAAAMgAAAAYWAQAAogcjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgdGhlIGZvbGRlciwgd2hlcmUgYWxsIHRoZSB0ZXN0cyBnby4NCg0KVGhvc2UgYXJlIHN1YmRpdmlkZWQgaW4gdHdvIGNhdGVnb3JpZXM6DQoNCiAtIEdlbmVyYWwNCiAtIEZ1bmN0aW9uDQoNCiMjIEdlbmVyYWwgVGVzdHMNCg0KR2VuZXJhbCB0ZXN0cyBhcmUgZnVuY3Rpb24gZ2VuZXJpYyBhbmQgdGVzdCBmb3IgZ2VuZXJhbCBwb2xpY2llcy4NCg0KVGhlc2UgdGVzdCBzY2FuIGFuc3dlciBxdWVzdGlvbnMgc3VjaCBhczoNCg0KIC0gSXMgbXkgbW9kdWxlIGZvbGxvd2luZyBteSBzdHlsZSBndWlkZXM/DQogLSBEb2VzIGFueSBvZiBteSBzY3JpcHRzIGhhdmUgYSBzeW50YXggZXJyb3I/DQogLSBEbyBteSBzY3JpcHRzIHVzZSBjb21tYW5kcyBJIGRvIG5vdCB3YW50IHRoZW0gdG8gdXNlPw0KIC0gRG8gbXkgY29tbWFuZHMgZm9sbG93IGJlc3QgcHJhY3RpY2VzPw0KIC0gRG8gbXkgY29tbWFuZHMgaGF2ZSBwcm9wZXIgaGVscD8NCg0KQmFzaWNhbGx5LCB0aGVzZSBhbGxvdyBhIGdlbmVyYWwgbW9kdWxlIGhlYWx0aCBjaGVjay4NCg0KVGhlc2UgdGVzdHMgYXJlIGFscmVhZHkgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgdGVtcGxhdGUuDQoNCiMjIEZ1bmN0aW9uIFRlc3RzDQoNCkEgaGVhbHRoeSBtb2R1bGUgc2hvdWxkIHByb3ZpZGUgdW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBjb21tYW5kcyAmIGNvbXBvbmVudHMgaXQgc2hpcHMuDQpPbmx5IHRoZW4gY2FuIGJlIGd1YXJhbnRlZWQsIHRoYXQgdGhleSB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gYXMgcHJvbWlzZWQuDQoNCkhvd2V2ZXIsIGFzIGVhY2ggc3VjaCB0ZXN0IG11c3QgYmUgc3BlY2lmaWMgdG8gdGhlIGZ1bmN0aW9uIGl0IHRlc3RzLCB0aGVyZSBjYW5ub3QgYmUgbXVjaCBpbiB0aGUgd2F5IG9mIHRlbXBsYXRlcy4BCRcBAAAJGAEAAAYZAQAACXJlYWRtZS5tZAYaAQAAD3Rlc3RzXHJlYWRtZS5tZAlIAAAACRwBAAAJHQEAAAG1AAAAMgAAAAYeAQAArAsjIFhNTA0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6DQoNCiAtIEZvcm1hdCBYTUwNCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTA0KDQpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhDQoNCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcNCg0KVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLg0KDQogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgDQogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYA0KDQojIyBUb29scw0KDQojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLg0KDQpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLg0KDQojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQ0KDQpgYGANCkMjIFdhcm5pbmchDQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLg0KYGBgDQoNClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLg0KDQpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOg0KDQogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQ0KIC0gQmUgcHVibGljDQogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yDQogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLg0KDQpgYGANCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhDQpgYGABCR8BAAAJIAEAAAYhAQAACXJlYWRtZS5tZAYiAQAADXhtbFxyZWFkbWUubWQJSAAAAAkkAQAACSUBAAABtgAAADIAAAAGJgEAAOcFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+DQo8Q29uZmlndXJhdGlvbj4NCgk8Vmlld0RlZmluaXRpb25zPg0KCQk8IS0tIEZvby5CYXIgLS0+DQoJCTxWaWV3Pg0KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCgkJCTxWaWV3U2VsZWN0ZWRCeT4NCgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+DQoJCQk8L1ZpZXdTZWxlY3RlZEJ5Pg0KCQkJPFRhYmxlQ29udHJvbD4NCgkJCQk8QXV0b1NpemUvPg0KCQkJCTxUYWJsZUhlYWRlcnM+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJPC9UYWJsZUhlYWRlcnM+DQoJCQkJPFRhYmxlUm93RW50cmllcz4NCgkJCQkJPFRhYmxlUm93RW50cnk+DQoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVt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b3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwNCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4NCiM+DQoNCjwjDQojIEV4YW1wbGUgQ29uZmlndXJhdGlvbg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIg0KIz4NCg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIgEJbgEAAAlvAQAABnABAAARY29uZmlndXJhdGlvbi5wczEGcQEAAClpbnRlcm5hbFxjb25maWd1cmF0aW9uc1xjb25maWd1cmF0aW9uLnBzMQlIAAAACXMBAAAJdAEAAAFVAQAAMgAAAAZ1AQAA/gMjIENvbmZpZ3VyYXRpb25zDQoNClRocm91Z2ggdGhlIGBQU0ZyYW1ld29ya2AgeW91IGhhdmUgYSBzaW1wbGUgbWV0aG9kIHRoYXQgYWxsb3dzIHlvdSB0byAuLi4NCg0KIC0gUHVibGlzaCBzZXR0aW5ncw0KIC0gV2l0aCBvbmJvYXJkIGRvY3VtZW50YXRpb24NCiAtIElucHV0IHZhbGlkYXRpb24NCiAtIFNjcmlwdHMgdGhhdCBydW4gb24gY2hhbmdlIG9mIHNldHRpbmdzDQogLSBUaGF0IGNhbiBiZSBkaXNjb3ZlcmVkIGFuZCB1cGRhdGVkIGJ5IHRoZSB1c2VyDQogLSBUaGF0IGNhbiBiZSBhZG1pbmlzdHJhdGVkIGJ5IHBvbGljeSAmIERTQw0KDQpUaGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBiaXQgdG9vIGNvbXBsZXggdG8gZGVzY3JpYmUgaW4gYSBoZWxwIGZpbGUsIHlvdSBjYW4gaG93ZXZlciB2aXNpdCB1cyBhdCBodHRwOi8vcHNmcmFtZXdvcmsub3JnIGZvciBkZXRhaWxlZCBndWlkYW5jZS4NCg0KQW4gZXhhbXBsZSBjYW4gYmUgc2VlbiBpbiB0aGUgYXR0YWNoZWQgcHMxIGZpbGUBCXYBAAAJdwEAAAZ4AQAACXJlYWRtZS5tZAZ5AQAAIWludGVybmFsXGNvbmZpZ3VyYXRpb25zXHJlYWRtZS5tZAlIAAAACXsBAAAJfAEAAAFWAQAAMgAAAAZ9AQAA2wEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCX4BAAAJfwEAAAaAAQAACXJlYWRtZS5tZAaBAQAAHGludGVybmFsXGZ1bmN0aW9uc1xyZWFkbWUubWQJSAAAAAmDAQAACYQBAAABVwEAADIAAAAGhQEAAIQDPCMNClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4NClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLA0Kd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLg0KDQpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sNCmhhcmQgdG8gcmVhZC4NCg0KU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7DQoJDQp9DQojPgEJhgEAAAmHAQAABogBAAAQc2NyaXB0YmxvY2tzLnBzMQaJAQAAJmludGVybmFsXHNjcmlwdGJsb2Nrc1xzY3JpcHRibG9ja3MucHMxCUgAAAAJiwEAAAmMAQAAAVgBAAAyAAAABo0BAAD2CU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCINCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLg0KIkABCY4BAAAJjwEAAAaQAQAAC2xpY2Vuc2UucHMxBpEBAAAcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQlIAAAACZMBAAAJlAEAAAFZAQAAMgAAAAaVAQAArgYjIEFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gY29kZQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCmZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7DQoJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZmlsZS5GdWxsTmFtZQ0KfQ0KDQojIExvYWQgU2NyaXB0YmxvY2tzDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uDQpmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmaWxlLkZ1bGxOYW1lDQp9DQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCi4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIg0KDQojIExvYWQgTGljZW5zZQ0KLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQmWAQAACZcBAAAGmAEAAA5wb3N0aW1wb3J0LnBzMQaZAQAAH2ludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEJSAAAAAmbAQAACZwBAAABWgEAADIAAAAGnQEAALYBIyBBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBjb2RlDQoNCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzDQouIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCZ4BAAAJnwEAAAagAQAADXByZWltcG9ydC5wczEGoQEAAB5pbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJSAAAAAmjAQAACaQBAAABWwEAADIAAAAGpQEAALgDPCMNClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLg0KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLg0KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuDQpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwNCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4NCiM+DQpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICfDvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCaYBAAAJpwEAAAaoAQAAC3N0cmluZ3MucHMxBqkBAAAcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMQlIAAAACasBAAAJrAEAAAFcAQAAMgAAAAatAQAAcTwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wNCiM+AQmuAQAACa8BAAAGsAEAAA5hc3NpZ25tZW50LnBzMQaxAQAAHGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEJSAAAAAmzAQAACbQBAAABXQEAADIAAAAGtQEAAKMBPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9DQojPgEJtgEAAAm3AQAABrgBAAAQZXhhbXBsZS50ZXBwLnBzMQa5AQAAHmludGVybmFsXHRlcHBcZXhhbXBsZS50ZXBwLnBzMQlIAAAACbsBAAAJvAEAAAFeAQAAMgAAAAa9AQAAvgcjIFRhYiBFeHBhbnNpb24NCg0KIyMgRGVzY3JpcHRpb24NCg0KTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuDQoNCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4NCg0KVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4NCg0KIyMgQ29uY2VwdA0KDQpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6DQoNCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuDQogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuDQoNCiMjIFN0cnVjdHVyZQ0KDQpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6DQoNCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgDQogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQm+AQAACb8BAAAGwAEAAAlyZWFkbWUubWQGwQEAABdpbnRlcm5hbFx0ZXBwXHJlYWRtZS5tZAlIAAAACcMBAAAJxAEAAAFfAQAAMgAAAAbFAQAA1QEjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLg0KDQpNYWtlIHN1cmUgdG8gcHV0IHRoZW0gaW4gZm9sZGVycyByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW9kdWxlIHN0cnVjdHVyZS4NCg0KSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCcYBAAAJxwEAAAbIAQAACXJlYWRtZS5tZAbJAQAAGXRlc3RzXGZ1bmN0aW9uc1xyZWFkbWUubWQJSAAAAAnLAQAACcwBAAABYAEAADIAAAAGzQEAAN0FIyBMaXN0IG9mIGZvcmJpZGRlbiBjb21tYW5kcw0KJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoDQoJJ1dyaXRlLUhvc3QnLA0KCSdXcml0ZS1WZXJib3NlJywNCgknV3JpdGUtV2FybmluZycsDQoJJ1dyaXRlLUVycm9yJywNCgknV3JpdGUtT3V0cHV0JywNCgknV3JpdGUtSW5mb3JtYXRpb24nLA0KCSdXcml0ZS1EZWJ1ZycsDQoJDQoJIyBVc2UgQ0lNIGluc3RlYWQgd2hlcmUgcG9zc2libGUNCgknR2V0LVdtaU9iamVjdCcsDQoJJ0ludm9rZS1XbWlNZXRob2QnLA0KCSdSZWdpc3Rlci1XbWlFdmVudCcsDQoJJ1JlbW92ZS1XbWlPYmplY3QnLA0KCSdTZXQtV21pSW5zdGFuY2UnDQopDQoNCjwjDQoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4NCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLg0KCQ0KCUV4YW1wbGU6DQoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpDQojPg0KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7DQoJIldyaXRlLUhvc3QiICA9IEAoKQ0KCSJXcml0ZS1WZXJib3NlIiA9IEAoKQ0KCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQ0KCSJXcml0ZS1FcnJvciIgID0gQCgpDQoJIldyaXRlLU91dHB1dCIgPSBAKCkNCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpDQoJIldyaXRlLURlYnVnIiA9IEAoKQ0KfQEJzgEAAAnPAQAABtABAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQbRAQAAKnRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQlIAAAACdMBAAAJ1AEAAAFhAQAAMgAAAAbVAQAA0BYkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi4iKS5QYXRoDQoNCi4gIiRQU1NjcmlwdFJvb3RcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0Kew0KPCMNCgkuU1lOT1BTSVMNCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuREVTQ1JJUFRJT04NCgkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkNCgkuUEFSQU1FVEVSIFBhdGgNCgkJVGhlIGZpbGUgdG8gdGVzdA0KIz4NCglbQ21kbGV0QmluZGluZygpXQ0KCVBhcmFtICgNCgkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0NCgkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCgkNCglbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkNCglpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4JyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9DQoJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQ0KCWVsc2UgeyAnVW5rbm93bicgfQ0KfQ0KDQpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsNCglDb250ZXh0ICJWYWxpZGF0aW5nIFBTMSBTY3JpcHQgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCcNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQkkdG9rZW5zID0gJG51bGwNCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsDQoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiB7DQoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIEJlICROdWxsDQoJCQl9DQoJCQkNCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpDQoJCQl7DQoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpDQoJCQkJew0KCQkJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IHVzZSAkY29tbWFuZCIgew0KCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IGNvbnRhaW4gYWxpYXNlcyIgew0KCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVG9rZW5GbGFncyAtZXEgQ29tbWFuZE5hbWUgfCBXaGVyZS1PYmplY3QgeyBUZXN0LVBhdGggImFsaWFzOlwkKCRfLlRleHQpIiB9IHwgTWVhc3VyZS1PYmplY3QgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBDb3VudCB8IFNob3VsZCAtQmUgMA0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjgnDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQnWAQAACdcBAAAG2AEAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQbZAQAAJXRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJSAAAAAnbAQAACdwBAAABYgEAADIAAAAG3QEAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQneAQAACd8BAAAG4AEAABNIZWxwLkV4Y2VwdGlvbnMucHMxBuEBAAAhdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCUgAAAAJ4wEAAAnkAQAAAWMBAAAyAAAABuUBAAD/RTwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkUFNTY3JpcHRSb290XC4uXC4uXGZ1bmN0aW9ucyIsICIkUFNTY3JpcHRSb290XC4uXC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRQU1NjcmlwdFJvb3RcSGVscC5FeGNlcHRpb25zLnBzMSINCikNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCi4gJEV4Y2VwdGlvbnNGaWxlDQoNCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUNCiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSBDbWRsZXQsIEZ1bmN0aW9uLCBXb3JrZmxvdyB8IFdoZXJlLU9iamVjdCBOYW1lIC1pbiAkaW5jbHVkZWROYW1lcw0KDQojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4NCiMjIFRvIHRlc3QsIHJlc3RhcnQgc2Vzc2lvbi4NCg0KDQpmb3JlYWNoICgkY29tbWFuZCBpbiAkY29tbWFuZHMpIHsNCiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lDQogICAgDQogICAgIyBTa2lwIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgb24gdGhlIGV4Y2x1c2lvbnMgbGlzdA0KICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQ0KICAgIA0KICAgICMgVGhlIG1vZHVsZS1xdWFsaWZpZWQgY29tbWFuZCBmYWlscyBvbiBNaWNyb3NvZnQuUG93ZXJTaGVsbC5BcmNoaXZlIGNtZGxldHMNCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KICAgICR0ZXN0aGVscGVycm9ycyA9IDANCiAgICAkdGVzdGhlbHBhbGwgPSAwDQogICAgRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoJEhlbHAuU3lub3BzaXMgLWxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJykgew0KICAgICAgICAgICAgIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0NCiAgICAgICAgICAgIEl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiB7DQogICAgICAgICAgICAgICAgJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0ZXN0aGVscGVycm9ycyArPSAxDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0ZXN0aGVscGFsbCArPSAxDQogICAgICAgIGlmIChbU3RyaW5nXTo6SXNOdWxsT3JFbXB0eSgkSGVscC5EZXNjcmlwdGlvbi5UZXh0KSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24NCiAgICAgICAgICAgIEl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgICAgICAkSGVscC5EZXNjcmlwdGlvbiB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlKSkgew0KICAgICAgICAgICAgIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUNCiAgICAgICAgICAgIEl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgICAgICgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgKz0gMQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGVzdGhlbHBhbGwgKz0gMQ0KICAgICAgICBpZiAoW1N0cmluZ106OklzTnVsbE9yRW1wdHkoKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQpKSB7DQogICAgICAgICAgICAjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KICAgICAgICAgICAgSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRlc3RoZWxwZXJyb3JzICs9IDENCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCR0ZXN0aGVscGVycm9ycyAtZXEgMCkgew0KICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdGhlbHBhbGwgdGVzdHMiIHsNCiAgICAgICAgICAgICAgICAkdGVzdGhlbHBlcnJvcnMgfCBTaG91bGQgLWJlIDANCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHRlc3RwYXJhbXNhbGwgPSAwDQogICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzID0gMA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJENvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywNCiAgICAgICAgICAgICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnDQogICAgICAgICAgICANCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uDQogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lDQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQ0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKFtTdHJpbmddOjpJc051bGxPckVtcHR5KCRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQpKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcg0KICAgICAgICAgICAgICAgICAgICBJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zYWxsICs9IDENCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5SZXF1aXJlZCAtbmUgJGNvZGVNYW5kYXRvcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBSZXF1aXJlZCB2YWx1ZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBJc01hbmRhdG9yeSBwcm9wZXJ0eSBvZiBwYXJhbWV0ZXINCiAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRwYXJhbWV0ZXJOYW1lIHBhcmFtZXRlciBpbiAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgTWFuZGF0b3J5IHZhbHVlIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgLW5lICRuYW1lcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICBJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7DQogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gW0VudW1dOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRGVjbGFyZWRNZW1iZXJzWzBdLlJldHVyblR5cGUpDQogICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIC1uZSAkbmFtZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0cGFyYW1zZXJyb3JzICs9IDENCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBjYWxsaW5nIFRyaW0gbWV0aG9kIG9uIGEgbnVsbCBvYmplY3QuDQogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGhlbHBUeXBlIC1uZSAkY29kZVR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RwYXJhbXNlcnJvcnMgKz0gMQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsNCiAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2FsbCArPSAxDQogICAgICAgICAgICAgICAgaWYgKCRoZWxwUGFybSAtbm90aW4gJHBhcmFtZXRlck5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KICAgICAgICAgICAgICAgICAgICBJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiB7DQogICAgICAgICAgICAgICAgICAgICAgICAkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyArPSAxDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCR0ZXN0cGFyYW1zZXJyb3JzIC1lcSAwKSB7DQogICAgICAgICAgICAgICAgSXQgIlJhbiBzaWxlbnRseSAkdGVzdHBhcmFtc2FsbCB0ZXN0cyIgew0KICAgICAgICAgICAgICAgICAgICAkdGVzdHBhcmFtc2Vycm9ycyB8IFNob3VsZCAtYmUgMA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0BCeYBAAAJ5wEAAAboAQAADkhlbHAuVGVzdHMucHMxBukBAAAcdGVzdHNcZ2VuZXJhbFxIZWxwLlRlc3RzLnBzMQlIAAAACesBAAAJ7AEAAAFkAQAAMgAAAAbtAQAAgg5EZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7DQoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uIikuUGF0aA0KCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uDQoJQ29udGV4dCAiQmFzaWMgcmVzb3VyY2VzIHZhbGlkYXRpb24iIHsNCgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSINCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgew0KCQkJDQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIHsNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJz0+JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQkNCgkJSXQgIkV4cG9ydHMgbm9uZSBvZiBpdHMgaW50ZXJuYWwgZnVuY3Rpb25zIiB7DQoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIg0KCQkJJGZpbGVzIHwgV2hlcmUtT2JqZWN0IEJhc2VOYW1lIC1JbiAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgew0KCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiB7DQoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGZvcm1hdCBpbiAkbWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkdHlwZSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCX0NCn0BCe4BAAAJ7wEAAAbwAQAAEk1hbmlmZXN0LlRlc3RzLnBzMQbxAQAAIHRlc3RzXGdlbmVyYWxcTWFuaWZlc3QuVGVzdHMucHMxCUgAAAAJ8wEAAAn0AQAAAWUBAAAyAAAABvUBAACHCFtDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRQU1NjcmlwdFJvb3RcLi5cLi5cZnVuY3Rpb25zIiwgIiRQU1NjcmlwdFJvb3RcLi5cLi5caW50ZXJuYWxcZnVuY3Rpb25zIikNCikNCg0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KDQokbGlzdCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7DQoJJGNvbW1hbmRGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJENvbW1hbmRQYXRoIC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIg0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRsaXN0LkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIEJlIDANCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCTAgfCBTaG91bGQgQmUgMA0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQokbGlzdCB8IE91dC1EZWZhdWx0AQn2AQAACfcBAAAG+AEAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQb5AQAAKHRlc3RzXGdlbmVyYWxcUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEJSAAAAAn7AQAACfwBAAABbgEAAAgAAAAJ/QEAAAEAAAABAAAAAW8BAAAI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</BA>
    </MS>
  </Obj>
</Objs>